Compare commits
4 commits
28d80afb4b
...
8715824a4a
Author | SHA1 | Date | |
---|---|---|---|
8715824a4a | |||
5afd538dcd | |||
ee8a34b760 | |||
0dc7e2f60d |
9 changed files with 83 additions and 119 deletions
|
@ -30,30 +30,27 @@ jobs:
|
||||||
- name: build package
|
- name: build package
|
||||||
run: hatch build --clean
|
run: hatch build --clean
|
||||||
|
|
||||||
- name: create release notes
|
- name: get release notes
|
||||||
run: bash get_release_notes.sh latest
|
id: release-notes
|
||||||
|
uses: olofvndrhr/releasenote-gen@v1
|
||||||
- name: read changelog
|
|
||||||
id: changelog
|
|
||||||
uses: juliangruber/read-file-action@v1
|
|
||||||
with:
|
|
||||||
path: ./RELEASENOTES.md
|
|
||||||
|
|
||||||
- name: create gitea release
|
- name: create gitea release
|
||||||
uses: https://gitea.com/actions/release-action@main
|
uses: https://gitea.com/actions/release-action@main
|
||||||
if: gitea.event_name != 'pull_request'
|
if: gitea.event_name != 'pull_request'
|
||||||
with:
|
with:
|
||||||
title: ${{ gitea.ref_name }}
|
title: ${{ gitea.ref_name }}
|
||||||
body: ${{ steps.changelog.outputs.content }}
|
body: ${{ steps.release-notes.outputs.releasenotes }}
|
||||||
files: |-
|
files: |-
|
||||||
dist/**
|
dist/**
|
||||||
|
|
||||||
- name: create github release
|
- name: create github release
|
||||||
uses: softprops/action-gh-release@v1
|
uses: ncipollo/release-action@v1
|
||||||
if: gitea.event_name != 'pull_request'
|
if: gitea.event_name != 'pull_request'
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GH_TOKEN }}
|
token: ${{ secrets.GH_TOKEN }}
|
||||||
title: ${{ gitea.ref_name }}
|
owner: olofvndrhr
|
||||||
body: ${{ steps.changelog.outputs.content }}
|
repo: manga-dlp
|
||||||
files: |-
|
name: ${{ gitea.ref_name }}
|
||||||
|
body: ${{ steps.release-notes.outputs.releasenotes }}
|
||||||
|
artifacts: |-
|
||||||
dist/**
|
dist/**
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from typing import Dict, List, Union
|
from typing import Dict, List
|
||||||
|
|
||||||
from mangadlp.models import ChapterData, ComicInfo
|
from mangadlp.models import ChapterData, ComicInfo
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ class YourAPI:
|
||||||
self.manga_uuid = "abc"
|
self.manga_uuid = "abc"
|
||||||
self.manga_title = "abc"
|
self.manga_title = "abc"
|
||||||
self.chapter_list = ["1", "2", "2.1", "5", "10"]
|
self.chapter_list = ["1", "2", "2.1", "5", "10"]
|
||||||
self.manga_chapter_data: dict[str, ChapterData] = { # example data
|
self.manga_chapter_data: Dict[str, ChapterData] = { # example data
|
||||||
"1": {
|
"1": {
|
||||||
"uuid": "abc",
|
"uuid": "abc",
|
||||||
"volume": "1",
|
"volume": "1",
|
||||||
|
@ -57,7 +57,7 @@ class YourAPI:
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
# or with --forcevol
|
# or with --forcevol
|
||||||
self.manga_chapter_data: dict[str, ChapterData] = {
|
self.manga_chapter_data: Dict[str, ChapterData] = {
|
||||||
"1:1": {
|
"1:1": {
|
||||||
"uuid": "abc",
|
"uuid": "abc",
|
||||||
"volume": "1",
|
"volume": "1",
|
||||||
|
@ -72,7 +72,7 @@ class YourAPI:
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_chapter_images(self, chapter: str, wait_time: float) -> list[str]:
|
def get_chapter_images(self, chapter: str, wait_time: float) -> List[str]:
|
||||||
"""Get chapter images as a list (full links).
|
"""Get chapter images as a list (full links).
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# shellcheck disable=SC2016
|
|
||||||
|
|
||||||
# script to extract the release notes from the changelog
|
|
||||||
|
|
||||||
# show script help
|
|
||||||
function show_help() {
|
|
||||||
cat << EOF
|
|
||||||
|
|
||||||
Script to generate release-notes from a changelog (CHANGELOG.md)
|
|
||||||
|
|
||||||
Usage:
|
|
||||||
./get_release_notes.sh <new_version>
|
|
||||||
|
|
||||||
|
|
||||||
Example:
|
|
||||||
./get_release_notes.sh "2.0.5"
|
|
||||||
or
|
|
||||||
./get_release_notes.sh "latest"
|
|
||||||
|
|
||||||
EOF
|
|
||||||
exit 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# create changelog for release
|
|
||||||
function get_release_notes() {
|
|
||||||
local l_version="${1}"
|
|
||||||
|
|
||||||
printf 'Creating release-notes\n'
|
|
||||||
# check for version
|
|
||||||
if [[ -z "${l_version}" ]]; then
|
|
||||||
printf 'You need to specify a version with $1\n'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [[ ${l_version,,} == "latest" ]]; then
|
|
||||||
l_version="$(grep -o -E "^##\s\[[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}\]" CHANGELOG.md | head -n 1 | grep -o -E "[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}")"
|
|
||||||
fi
|
|
||||||
awk -v ver="[${l_version}]" \
|
|
||||||
'/^## / { if (p) { exit }; if ($2 == ver) { p=1 } } p && NF' \
|
|
||||||
'CHANGELOG.md' > 'RELEASENOTES.md'
|
|
||||||
printf 'Done\n'
|
|
||||||
}
|
|
||||||
|
|
||||||
# check options
|
|
||||||
case "${1}" in
|
|
||||||
'--help' | '-h' | 'help')
|
|
||||||
show_help
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
get_release_notes "${@}"
|
|
||||||
;;
|
|
||||||
esac
|
|
42
justfile
42
justfile
|
@ -6,7 +6,7 @@ set shell := ["bash", "-uc"]
|
||||||
set dotenv-load
|
set dotenv-load
|
||||||
|
|
||||||
show_receipts:
|
show_receipts:
|
||||||
@just --list
|
just --list
|
||||||
|
|
||||||
show_system_info:
|
show_system_info:
|
||||||
@echo "=================================="
|
@echo "=================================="
|
||||||
|
@ -18,58 +18,58 @@ show_system_info:
|
||||||
@echo "=================================="
|
@echo "=================================="
|
||||||
|
|
||||||
setup:
|
setup:
|
||||||
@asdf install
|
asdf install
|
||||||
@lefthook install
|
lefthook install
|
||||||
|
|
||||||
create_venv:
|
create_venv:
|
||||||
@echo "creating venv"
|
@echo "creating venv"
|
||||||
@python3 -m pip install --upgrade pip setuptools wheel
|
python3 -m pip install --upgrade pip setuptools wheel
|
||||||
@python3 -m venv venv
|
python3 -m venv venv
|
||||||
|
|
||||||
install_deps:
|
install_deps:
|
||||||
@echo "installing dependencies"
|
@echo "installing dependencies"
|
||||||
@python3 -m hatch dep show requirements --project-only > /tmp/requirements.txt
|
python3 -m hatch dep show requirements --project-only > /tmp/requirements.txt
|
||||||
@pip3 install -r /tmp/requirements.txt
|
pip3 install -r /tmp/requirements.txt
|
||||||
|
|
||||||
install_deps_dev:
|
install_deps_dev:
|
||||||
@echo "installing dev dependencies"
|
@echo "installing dev dependencies"
|
||||||
@python3 -m hatch dep show requirements --project-only > /tmp/requirements.txt
|
python3 -m hatch dep show requirements --project-only > /tmp/requirements.txt
|
||||||
@python3 -m hatch dep show requirements --env-only >> /tmp/requirements.txt
|
python3 -m hatch dep show requirements --env-only >> /tmp/requirements.txt
|
||||||
@pip3 install -r /tmp/requirements.txt
|
pip3 install -r /tmp/requirements.txt
|
||||||
|
|
||||||
create_reqs:
|
create_reqs:
|
||||||
@echo "creating requirements"
|
@echo "creating requirements"
|
||||||
@pipreqs --force --savepath requirements.txt src/mangadlp/
|
pipreqs --force --savepath requirements.txt src/mangadlp/
|
||||||
|
|
||||||
test_shfmt:
|
test_shfmt:
|
||||||
@find . -type f \( -name "**.sh" -and -not -path "./.**" -and -not -path "./venv**" \) -exec shfmt -d -i 4 -bn -ci -sr "{}" \+;
|
find . -type f \( -name "**.sh" -and -not -path "./.**" -and -not -path "./venv**" \) -exec shfmt -d -i 4 -bn -ci -sr "{}" \+;
|
||||||
|
|
||||||
format_shfmt:
|
format_shfmt:
|
||||||
@find . -type f \( -name "**.sh" -and -not -path "./.**" -and -not -path "./venv**" \) -exec shfmt -w -i 4 -bn -ci -sr "{}" \+;
|
find . -type f \( -name "**.sh" -and -not -path "./.**" -and -not -path "./venv**" \) -exec shfmt -w -i 4 -bn -ci -sr "{}" \+;
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
just show_system_info
|
just show_system_info
|
||||||
just test_shfmt
|
just test_shfmt
|
||||||
@hatch run lint:style
|
hatch run lint:style
|
||||||
@hatch run lint:typing
|
hatch run lint:typing
|
||||||
|
|
||||||
format:
|
format:
|
||||||
just show_system_info
|
just show_system_info
|
||||||
just format_shfmt
|
just format_shfmt
|
||||||
@hatch run lint:fmt
|
hatch run lint:fmt
|
||||||
|
|
||||||
check:
|
check:
|
||||||
just format
|
|
||||||
just lint
|
just lint
|
||||||
|
just format
|
||||||
|
|
||||||
test:
|
test:
|
||||||
@hatch run default:test
|
hatch run default:test
|
||||||
|
|
||||||
coverage:
|
coverage:
|
||||||
@hatch run default:cov
|
hatch run default:cov
|
||||||
|
|
||||||
build:
|
build:
|
||||||
@hatch build --clean
|
hatch build --clean
|
||||||
|
|
||||||
run loglevel *flags:
|
run loglevel *flags:
|
||||||
@hatch run mangadlp --loglevel {{loglevel}} {{flags}}
|
hatch run mangadlp --loglevel {{loglevel}} {{flags}}
|
||||||
|
|
|
@ -45,21 +45,21 @@ source = "regex_commit"
|
||||||
path = "src/mangadlp/__about__.py"
|
path = "src/mangadlp/__about__.py"
|
||||||
tag_sign = false
|
tag_sign = false
|
||||||
|
|
||||||
[tool.hatch.build]
|
|
||||||
ignore-vcs = true
|
|
||||||
|
|
||||||
[tool.hatch.build.targets.sdist]
|
[tool.hatch.build.targets.sdist]
|
||||||
packages = ["src/mangadlp"]
|
packages = ["src/mangadlp"]
|
||||||
|
|
||||||
[tool.hatch.build.targets.wheel]
|
[tool.hatch.build.targets.wheel]
|
||||||
packages = ["src/mangadlp"]
|
packages = ["src/mangadlp"]
|
||||||
|
|
||||||
|
###
|
||||||
### envs
|
### envs
|
||||||
|
###
|
||||||
|
|
||||||
[tool.hatch.envs.default]
|
[tool.hatch.envs.default]
|
||||||
|
python = "3.11"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"pytest==7.4.3",
|
"pytest==7.4.3",
|
||||||
"coverage==7.4.2",
|
"coverage==7.4.3",
|
||||||
"xmltodict>=0.13.0",
|
"xmltodict>=0.13.0",
|
||||||
"xmlschema>=2.2.1",
|
"xmlschema>=2.2.1",
|
||||||
]
|
]
|
||||||
|
@ -76,17 +76,26 @@ python = ["3.8", "3.9", "3.10", "3.11"]
|
||||||
[tool.hatch.envs.lint]
|
[tool.hatch.envs.lint]
|
||||||
detached = true
|
detached = true
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"mypy==1.7.1",
|
"mypy==1.8.0",
|
||||||
"ruff==0.1.7",
|
"ruff==0.2.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[tool.hatch.envs.lint.scripts]
|
[tool.hatch.envs.lint.scripts]
|
||||||
typing = "mypy --non-interactive --install-types {args:src/mangadlp}"
|
typing = "mypy --non-interactive --install-types {args:src/mangadlp}"
|
||||||
style = ["ruff check --diff {args:src/mangadlp}", "ruff format --check --diff {args:src/mangadlp}"]
|
style = [
|
||||||
fmt = ["ruff format {args:src/mangadlp}", "ruff check --fix {args:src/mangadlp}", "style"]
|
"ruff check --diff {args:.}",
|
||||||
|
"ruff format --check --diff {args:.}"
|
||||||
|
]
|
||||||
|
fmt = [
|
||||||
|
"ruff check --fix {args:.}",
|
||||||
|
"ruff format {args:.}",
|
||||||
|
"style"
|
||||||
|
]
|
||||||
all = ["style", "typing"]
|
all = ["style", "typing"]
|
||||||
|
|
||||||
|
###
|
||||||
### ruff
|
### ruff
|
||||||
|
###
|
||||||
|
|
||||||
[tool.ruff]
|
[tool.ruff]
|
||||||
target-version = "py38"
|
target-version = "py38"
|
||||||
|
@ -94,7 +103,6 @@ line-length = 100
|
||||||
indent-width = 4
|
indent-width = 4
|
||||||
fix = true
|
fix = true
|
||||||
show-fixes = true
|
show-fixes = true
|
||||||
ignore-init-module-imports = true
|
|
||||||
respect-gitignore = true
|
respect-gitignore = true
|
||||||
src = ["src", "tests"]
|
src = ["src", "tests"]
|
||||||
exclude = [
|
exclude = [
|
||||||
|
@ -112,6 +120,7 @@ exclude = [
|
||||||
"dist",
|
"dist",
|
||||||
"node_modules",
|
"node_modules",
|
||||||
"venv",
|
"venv",
|
||||||
|
"contrib"
|
||||||
]
|
]
|
||||||
|
|
||||||
[tool.ruff.lint]
|
[tool.ruff.lint]
|
||||||
|
@ -142,6 +151,7 @@ select = [
|
||||||
"W",
|
"W",
|
||||||
"YTT",
|
"YTT",
|
||||||
]
|
]
|
||||||
|
ignore-init-module-imports = true
|
||||||
ignore = ["E501", "D103", "D100", "D102", "PLR2004", "D403", "ISC001", "FBT001", "FBT002", "FBT003", "W505"]
|
ignore = ["E501", "D103", "D100", "D102", "PLR2004", "D403", "ISC001", "FBT001", "FBT002", "FBT003", "W505"]
|
||||||
unfixable = ["F401"]
|
unfixable = ["F401"]
|
||||||
|
|
||||||
|
@ -150,39 +160,42 @@ quote-style = "double"
|
||||||
indent-style = "space"
|
indent-style = "space"
|
||||||
skip-magic-trailing-comma = false
|
skip-magic-trailing-comma = false
|
||||||
line-ending = "lf"
|
line-ending = "lf"
|
||||||
|
docstring-code-format = true
|
||||||
|
|
||||||
[tool.ruff.per-file-ignores]
|
[tool.ruff.lint.per-file-ignores]
|
||||||
"__init__.py" = ["D104"]
|
"__init__.py" = ["D104"]
|
||||||
"__about__.py" = ["D104", "F841"]
|
"__about__.py" = ["D104", "F841"]
|
||||||
"tests/**/*" = ["PLR2004", "S101", "TID252"]
|
"tests/**/*" = ["PLR2004", "S101", "TID252", "T201", "ARG001", "S603", "S605"]
|
||||||
|
|
||||||
[tool.ruff.pyupgrade]
|
[tool.ruff.lint.pyupgrade]
|
||||||
keep-runtime-typing = true
|
keep-runtime-typing = true
|
||||||
|
|
||||||
[tool.ruff.isort]
|
[tool.ruff.lint.isort]
|
||||||
lines-after-imports = 2
|
lines-after-imports = 2
|
||||||
known-first-party = ["mangadlp"]
|
known-first-party = ["mangadlp"]
|
||||||
|
|
||||||
[tool.ruff.flake8-tidy-imports]
|
[tool.ruff.lint.flake8-tidy-imports]
|
||||||
ban-relative-imports = "all"
|
ban-relative-imports = "all"
|
||||||
|
|
||||||
[tool.ruff.pylint]
|
[tool.ruff.lint.pylint]
|
||||||
max-branches = 24
|
max-branches = 24
|
||||||
max-returns = 12
|
max-returns = 12
|
||||||
max-statements = 100
|
max-statements = 100
|
||||||
max-args = 15
|
max-args = 15
|
||||||
allow-magic-value-types = ["str", "bytes", "complex", "float", "int"]
|
allow-magic-value-types = ["str", "bytes", "complex", "float", "int"]
|
||||||
|
|
||||||
[tool.ruff.mccabe]
|
[tool.ruff.lint.mccabe]
|
||||||
max-complexity = 15
|
max-complexity = 15
|
||||||
|
|
||||||
[tool.ruff.pydocstyle]
|
[tool.ruff.lint.pydocstyle]
|
||||||
convention = "google"
|
convention = "google"
|
||||||
|
|
||||||
[tool.ruff.pycodestyle]
|
[tool.ruff.lint.pycodestyle]
|
||||||
max-doc-length = 100
|
max-doc-length = 100
|
||||||
|
|
||||||
|
###
|
||||||
### mypy
|
### mypy
|
||||||
|
###
|
||||||
|
|
||||||
[tool.mypy]
|
[tool.mypy]
|
||||||
#plugins = ["pydantic.mypy"]
|
#plugins = ["pydantic.mypy"]
|
||||||
|
@ -204,16 +217,20 @@ show_error_context = true
|
||||||
#init_typed = true
|
#init_typed = true
|
||||||
#warn_required_dynamic_aliases = true
|
#warn_required_dynamic_aliases = true
|
||||||
|
|
||||||
|
###
|
||||||
### pytest
|
### pytest
|
||||||
|
###
|
||||||
|
|
||||||
[tool.pytest.ini_options]
|
[tool.pytest.ini_options]
|
||||||
pythonpath = ["src"]
|
pythonpath = ["src"]
|
||||||
addopts = "--color=yes --exitfirst --verbose -ra"
|
addopts = "--color=yes --exitfirst --verbose -ra"
|
||||||
#addopts = "--color=yes --exitfirst --verbose -ra --capture=tee-sys"
|
|
||||||
filterwarnings = [
|
filterwarnings = [
|
||||||
'ignore:Jupyter is migrating its paths to use standard platformdirs:DeprecationWarning',
|
'ignore:Jupyter is migrating its paths to use standard platformdirs:DeprecationWarning',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
###
|
||||||
### coverage
|
### coverage
|
||||||
|
###
|
||||||
|
|
||||||
[tool.coverage.run]
|
[tool.coverage.run]
|
||||||
source_pkgs = ["mangadlp", "tests"]
|
source_pkgs = ["mangadlp", "tests"]
|
||||||
|
@ -222,8 +239,8 @@ parallel = true
|
||||||
omit = ["src/mangadlp/__about__.py"]
|
omit = ["src/mangadlp/__about__.py"]
|
||||||
|
|
||||||
[tool.coverage.paths]
|
[tool.coverage.paths]
|
||||||
testproj = ["src/mangadlp", "*/mangadlp/src/mangadlp"]
|
mangadlp = ["src/mangadlp", "*/manga-dlp/src/mangadlp"]
|
||||||
tests = ["tests", "*/mangadlp/tests"]
|
tests = ["tests", "*/manga-dlp/tests"]
|
||||||
|
|
||||||
[tool.coverage.report]
|
[tool.coverage.report]
|
||||||
# Regexes for lines to exclude from consideration
|
# Regexes for lines to exclude from consideration
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import shutil
|
import shutil
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import List
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import requests
|
import requests
|
||||||
|
@ -18,7 +19,7 @@ def test_downloader():
|
||||||
]
|
]
|
||||||
chapter_path = Path("tests/test_folder1")
|
chapter_path = Path("tests/test_folder1")
|
||||||
chapter_path.mkdir(parents=True, exist_ok=True)
|
chapter_path.mkdir(parents=True, exist_ok=True)
|
||||||
images: list[str] = []
|
images: List[str] = []
|
||||||
downloader.download_chapter(urls, str(chapter_path), 2)
|
downloader.download_chapter(urls, str(chapter_path), 2)
|
||||||
for file in chapter_path.iterdir():
|
for file in chapter_path.iterdir():
|
||||||
images.append(file.name)
|
images.append(file.name)
|
||||||
|
|
|
@ -3,6 +3,7 @@ import platform
|
||||||
import shutil
|
import shutil
|
||||||
import time
|
import time
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import List
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pytest import MonkeyPatch
|
from pytest import MonkeyPatch
|
||||||
|
@ -165,7 +166,7 @@ def test_full_with_input_skip_folder(wait_10s: MonkeyPatch):
|
||||||
chapter_path.mkdir(parents=True, exist_ok=True)
|
chapter_path.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
os.system(f"python3 {script_path} {command_args}")
|
os.system(f"python3 {script_path} {command_args}")
|
||||||
found_files: list[str] = []
|
found_files: List[str] = []
|
||||||
for file in chapter_path.iterdir():
|
for file in chapter_path.iterdir():
|
||||||
found_files.append(file.name)
|
found_files.append(file.name)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue