[2.2.20] - 2023-02-12 #39

Merged
olofvndrhr merged 7 commits from dev into master 2023-02-12 04:55:48 +01:00
16 changed files with 200 additions and 106 deletions

View file

@ -11,20 +11,18 @@ depends_on:
clone:
git:
when:
#branch: master
event: tag
image: woodpeckerci/plugin-git:v1.6.0
when:
event: tag
pipeline:
# build and publish docker image for amd64 - x86
build-amd64:
when:
#branch: master
event: tag
image: plugins/docker
pull: true
when:
event: tag
settings:
repo: olofvndrhr/manga-dlp
platforms: linux/amd64

View file

@ -11,20 +11,18 @@ depends_on:
clone:
git:
when:
#branch: master
event: tag
image: woodpeckerci/plugin-git:v1.6.0
when:
event: tag
pipeline:
# build and publish docker image for arm64
build-arm64:
when:
#branch: master
event: tag
image: plugins/docker
pull: true
when:
event: tag
settings:
repo: olofvndrhr/manga-dlp
platforms: linux/arm64

View file

@ -12,20 +12,20 @@ depends_on:
clone:
git:
when:
#branch: master
event: tag
image: woodpeckerci/plugin-git:v1.6.0
when:
event: tag
branch: master
pipeline:
# publish docker manifest for automatic multi arch pulls
publish-manifest:
when:
#branch: master
event: tag
image: plugins/manifest
pull: true
when:
event: tag
branch: master
settings:
spec: docker/manifest.tmpl
auto_tag: true

View file

@ -0,0 +1,85 @@
###################
# publish pre-release #
###################
# branch: dev
# event: tag
platform: linux/amd64
depends_on:
- tests
clone:
git:
image: woodpeckerci/plugin-git:v1.6.0
when:
event: tag
tag: "*-dev"
pipeline:
# build wheel and dist
build-pypi:
image: cr.44net.ch/ci-plugins/tests
pull: true
when:
event: tag
tag: "*-dev"
commands:
- python3 -m hatch build --clean
# create pre-release-notes
create-pre-release-notes:
image: cr.44net.ch/baseimages/debian-base
pull: true
when:
event: tag
tag: "*-dev"
commands:
- bash get_release_notes.sh ${CI_COMMIT_TAG%%-dev}
# publish pre-release on github (github.com/olofvndrhr/manga-dlp)
publish-pre-release-github:
image: woodpeckerci/plugin-github-release
pull: true
when:
event: tag
tag: "*-dev"
settings:
api_key:
from_secret: github-olofvndrhr-token
files: dist/*
title: ${CI_COMMIT_TAG}
note: RELEASENOTES.md
prerelease: true
# publish pre-release on gitea (git.44net.ch/olofvndrhr/manga-dlp)
publish-pre-release-gitea:
image: woodpeckerci/plugin-gitea-release
pull: true
when:
event: tag
tag: "*-dev"
settings:
api_key:
from_secret: gitea-olofvndrhr-token
base_url: https://git.44net.ch
files: dist/*
title: ${CI_COMMIT_TAG}
note: RELEASENOTES.md
prerelease: true
# # pre-release pypi
# pre-release-pypi:
# image: cr.44net.ch/ci-plugins/tests
# pull: true
# when:
# event: tag
# tag: "*-dev"
# secrets:
# - source: pypi_username
# target: HATCH_INDEX_USER
# - source: pypi_token
# target: HATCH_INDEX_AUTH
# commands:
# - python3 -m hatch publish --no-prompt --yes

View file

@ -11,40 +11,54 @@ depends_on:
clone:
git:
when:
#branch: master
event: tag
image: woodpeckerci/plugin-git:v1.6.0
when:
event: tag
branch: master
pipeline:
# build wheel and dist
build-pypi:
when:
#branch: master
event: tag
image: cr.44net.ch/ci-plugins/tests
pull: true
when:
event: tag
branch: master
commands:
- python3 -m hatch build --clean
# create release-notes
create-release-notes:
when:
#branch: master
event: tag
image: cr.44net.ch/baseimages/debian-base
pull: true
when:
event: tag
branch: master
commands:
- bash get_release_notes.sh ${CI_COMMIT_TAG}
# publish release on github (github.com/olofvndrhr/manga-dlp)
publish-release-github:
image: woodpeckerci/plugin-github-release
pull: true
when:
event: tag
branch: master
settings:
api_key:
from_secret: github-olofvndrhr-token
files: dist/*
title: ${CI_COMMIT_TAG}
note: RELEASENOTES.md
# publish release on gitea (git.44net.ch/olofvndrhr/manga-dlp)
publish-release-gitea:
when:
#branch: master
event: tag
image: plugins/gitea-release
image: woodpeckerci/plugin-gitea-release
pull: true
when:
event: tag
branch: master
settings:
api_key:
from_secret: gitea-olofvndrhr-token
@ -53,27 +67,13 @@ pipeline:
title: ${CI_COMMIT_TAG}
note: RELEASENOTES.md
# publish release on github (github.com/olofvndrhr/manga-dlp)
publish-release-github:
when:
#branch: master
event: tag
image: woodpeckerci/plugin-github-release
pull: true
settings:
api_key:
from_secret: github-olofvndrhr-token
files: dist/*
title: ${CI_COMMIT_TAG}
note: RELEASENOTES.md
# release pypi
release-pypi:
when:
#branch: master
event: tag
image: cr.44net.ch/ci-plugins/tests
pull: true
when:
event: tag
branch: master
secrets:
- source: pypi_username
target: HATCH_INDEX_USER

View file

@ -11,20 +11,20 @@ depends_on:
clone:
git:
image: woodpeckerci/plugin-git:v1.6.0
when:
branch: master
event: pull_request
image: woodpeckerci/plugin-git:v1.6.0
pipeline:
# build docker image for amd64 - x86
test-build-amd64:
image: plugins/docker
pull: true
when:
branch: master
event: pull_request
image: plugins/docker
pull: true
settings:
dry_run: true
repo: olofvndrhr/manga-dlp

View file

@ -11,20 +11,20 @@ depends_on:
clone:
git:
image: woodpeckerci/plugin-git:v1.6.0
when:
branch: master
event: pull_request
image: woodpeckerci/plugin-git:v1.6.0
pipeline:
# build docker image for arm64
test-build-arm64:
image: plugins/docker
pull: true
when:
branch: master
event: pull_request
image: plugins/docker
pull: true
settings:
dry_run: true
repo: olofvndrhr/manga-dlp

View file

@ -11,30 +11,30 @@ depends_on:
clone:
git:
image: woodpeckerci/plugin-git:v1.6.0
when:
branch: master
event: pull_request
image: woodpeckerci/plugin-git:v1.6.0
pipeline:
# build wheel and dist
test-build-pypi:
image: cr.44net.ch/ci-plugins/tests
pull: true
when:
branch: master
event: pull_request
image: cr.44net.ch/ci-plugins/tests
pull: true
commands:
- python3 -m hatch build --clean
# create release-notes
test-create-release-notes:
image: cr.44net.ch/baseimages/debian-base
pull: true
when:
branch: master
event: pull_request
image: cr.44net.ch/baseimages/debian-base
pull: true
commands:
- bash get_release_notes.sh latest
- cat RELEASENOTES.md

View file

@ -11,19 +11,19 @@ depends_on:
clone:
git:
image: woodpeckerci/plugin-git:v1.6.0
when:
branch: master
event: pull_request
image: woodpeckerci/plugin-git:v1.6.0
pipeline:
# test code with different python versions - amd64
test-tox-amd64:
image: cr.44net.ch/ci-plugins/multipy
pull: true
when:
branch: master
event: pull_request
image: cr.44net.ch/ci-plugins/multipy
pull: true
commands:
- python3 -m tox

View file

@ -11,20 +11,20 @@ depends_on:
clone:
git:
image: woodpeckerci/plugin-git:v1.6.0
when:
branch: master
event: pull_request
image: woodpeckerci/plugin-git:v1.6.0
pipeline:
# test code with different python versions - arm64
test-tox-arm64:
image: cr.44net.ch/ci-plugins/multipy
pull: true
when:
branch: master
event: pull_request
image: cr.44net.ch/ci-plugins/multipy
pull: true
commands:
- grep -v img2pdf contrib/requirements_dev.txt > contrib/requirements_dev_arm64.txt
- rm -f contrib/requirements_dev.txt

View file

@ -9,6 +9,12 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
- Add support for more sites
## [2.2.20] - 2023-02-12
### Fixed
- Script now doesn't exit if multiple mangas were requested and one had an error
## [2.2.19] - 2023-02-11
### Added

View file

@ -1 +1 @@
__version__ = "2.2.19"
__version__ = "2.2.20"

View file

@ -1,6 +1,5 @@
import re
import shutil
import sys
from pathlib import Path
from typing import Any, Union
@ -78,9 +77,9 @@ class MangaDLP:
try:
log.debug("Initializing api")
self.api = self.api_used(self.url_uuid, self.language, self.forcevol)
except Exception:
except Exception as exc:
log.error("Can't initialize api. Exiting")
sys.exit(1)
raise exc
# get manga title and uuid
self.manga_uuid = self.api.manga_uuid
self.manga_title = self.api.manga_title
@ -96,7 +95,7 @@ class MangaDLP:
log.error(
'You need to specify a manga url/uuid with "-u" or a list with "--read"'
)
sys.exit(1)
raise ValueError
# checks if --list is not used
if not self.list_chapters:
if not self.chapters:
@ -104,15 +103,15 @@ class MangaDLP:
log.error(
'You need to specify one or more chapters to download. To see all chapters use "--list"'
)
sys.exit(1)
raise ValueError
# if forcevol is used, but didn't specify a volume in the chapters selected
if self.forcevol and ":" not in self.chapters:
log.error("You need to specify the volume if you use --forcevol")
sys.exit(1)
raise ValueError
# if forcevol is not used, but a volume is specified
if not self.forcevol and ":" in self.chapters:
log.error("Don't specify the volume without --forcevol")
sys.exit(1)
raise ValueError
# check the api which needs to be used
def check_api(self, url_uuid: str) -> type:
@ -129,11 +128,11 @@ class MangaDLP:
# this is only for testing multiple apis
if api_test.search(url_uuid):
log.critical("Not supported yet")
sys.exit(1)
raise ValueError
# no supported api found
log.error(f"No supported api in link/uuid found: {url_uuid}")
sys.exit(1)
raise ValueError
# once called per manga
def get_manga(self) -> None:
@ -206,6 +205,8 @@ class MangaDLP:
try:
chapter_path = self.get_chapter(chapter)
except KeyboardInterrupt as exc:
raise exc
except FileExistsError:
skipped_chapters.append(chapter)
# update cache
@ -273,9 +274,9 @@ class MangaDLP:
chapter_image_urls = self.api.get_chapter_images(
chapter, self.download_wait
)
except KeyboardInterrupt:
log.critical("Stopping")
sys.exit(1)
except KeyboardInterrupt as exc:
log.critical("Keyboard interrupt. Stopping")
raise exc
# check if the image urls are empty. if yes skip this chapter (for mass downloads)
if not chapter_image_urls:
@ -364,9 +365,9 @@ class MangaDLP:
downloader.download_chapter(
chapter_image_urls, chapter_path, self.download_wait
)
except KeyboardInterrupt:
log.critical("Stopping")
sys.exit(1)
except KeyboardInterrupt as exc:
log.critical("Keyboard interrupt. Stopping")
raise exc
except Exception as exc:
log.error(f"Cant download: '{chapter_filename}'. Skipping")

View file

@ -1,3 +1,4 @@
import sys
from pathlib import Path
import click
@ -256,6 +257,7 @@ def main(
requested_mangas = [url_uuid] if url_uuid else read_mangas
for manga in requested_mangas:
try:
mdlp = app.MangaDLP(
url_uuid=manga,
language=lang,
@ -274,6 +276,13 @@ def main(
cache_path=cache_path,
)
mdlp.get_manga()
except (KeyboardInterrupt, Exception) as exc:
# if only a single manga is requested and had an error, then exit
if len(requested_mangas) == 1:
log.error(f"Error with manga: {manga}")
sys.exit(1)
# else continue with the other ones
log.error(f"Skipping: {manga}. Reason={exc}")
if __name__ == "__main__":

View file

@ -1,6 +1,5 @@
import logging
import shutil
import sys
from pathlib import Path
from time import sleep
from typing import Union
@ -35,9 +34,8 @@ def download_chapter(
if r.status_code != 200:
log.error(f"Request for image {image} failed, retrying")
raise ConnectionError
except KeyboardInterrupt:
log.critical("Stopping")
sys.exit(1)
except KeyboardInterrupt as exc:
raise exc
except Exception as exc:
if counter >= 3:
log.error("Maybe the MangaDex Servers are down?")

View file

@ -13,7 +13,6 @@ def test_check_api_mangadex():
def test_check_api_none():
url = "https://abc.defghjk/title/abc/def"
with pytest.raises(SystemExit) as e:
with pytest.raises(ValueError) as e:
MangaDLP(url_uuid=url, list_chapters=True, download_wait=2)
assert e.type == SystemExit
assert e.value.code == 1
assert e.type == ValueError