From 345d5042215299b0f10a695c2da7c72e7c175016 Mon Sep 17 00:00:00 2001 From: Michel Roux Date: Tue, 11 Feb 2025 22:43:15 +0100 Subject: [PATCH] refactor: :recycle: refresh project --- .gitea/workflows/books.yml | 19 +- .gitignore | 18 +- auberge_vagabonde/__init__.py | 0 auberge_vagabonde/__main__.py | 93 +++ auberge_vagabonde/en.json | 824 +++++++++++++++++++++++++ auberge_vagabonde/fr.json | 262 ++++++++ books.py | 152 ----- poetry.lock | 1080 +++++++++++---------------------- pyproject.toml | 33 +- upload.sh | 7 - 10 files changed, 1580 insertions(+), 908 deletions(-) create mode 100644 auberge_vagabonde/__init__.py create mode 100644 auberge_vagabonde/__main__.py create mode 100644 auberge_vagabonde/en.json create mode 100644 auberge_vagabonde/fr.json delete mode 100644 books.py delete mode 100644 upload.sh diff --git a/.gitea/workflows/books.yml b/.gitea/workflows/books.yml index 7938288..e784a50 100644 --- a/.gitea/workflows/books.yml +++ b/.gitea/workflows/books.yml @@ -11,22 +11,5 @@ jobs: - uses: actions/checkout@v4 - uses: Gr1N/setup-poetry@v9 - run: poetry install - - run: poetry run flake8 . + - run: poetry run ruff check . - run: poetry run mypy . - - epub: - runs-on: ubuntu-latest - container: python:3.12.2 - needs: [lint] - steps: - - run: apt-get update - - run: apt-get install -y git nodejs - - uses: actions/checkout@v4 - - uses: Gr1N/setup-poetry@v9 - - run: poetry install --without dev - - run: poetry run python books.py - - run: bash -x upload.sh - if: ${{ gitea.ref == 'refs/heads/master' }} - env: - USERNAME: ${{ secrets.USERNAME }} - PASSWORD: ${{ secrets.PASSWORD }} diff --git a/.gitignore b/.gitignore index c7e45ae..2d6bf41 100644 --- a/.gitignore +++ b/.gitignore @@ -94,6 +94,12 @@ ipython_config.py # install all needed dependencies. #Pipfile.lock +# UV +# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +#uv.lock + # poetry # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. # This is especially recommended for binary packages to ensure reproducibility, and is more @@ -106,8 +112,10 @@ ipython_config.py #pdm.lock # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it # in version control. -# https://pdm.fming.dev/#use-with-ide +# https://pdm.fming.dev/latest/usage/project/#working-with-version-control .pdm.toml +.pdm-python +.pdm-build/ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm __pypackages__/ @@ -159,5 +167,11 @@ cython_debug/ # option (not recommended) you can uncomment the following to ignore the entire idea folder. .idea/ +# Ruff stuff: +.ruff_cache/ + +# PyPI configuration file +.pypirc + # Mine -output +*.epub diff --git a/auberge_vagabonde/__init__.py b/auberge_vagabonde/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/auberge_vagabonde/__main__.py b/auberge_vagabonde/__main__.py new file mode 100644 index 0000000..17ff306 --- /dev/null +++ b/auberge_vagabonde/__main__.py @@ -0,0 +1,93 @@ +from argparse import ArgumentParser +from json import load +from os import path +from pathlib import Path +from random import randint +from tempfile import NamedTemporaryFile +from time import sleep +from typing import cast + +from curl_cffi import requests +from pypub import Chapter, Epub, SimpleChapterFactory # type: ignore +from pyxml.html import HtmlElement, fromstring, tostring # type: ignore + +parser = ArgumentParser() +parser.add_argument("-l", "--lang", choices=["fr", "en"], required=True) +parser.add_argument("-v", "--volume", type=int, choices=range(1, 10), required=True) +parser.add_argument("output", type=Path) +args = parser.parse_args() + +COOKIE: requests.CookieTypes = {} + + +class MyChapterFactory(SimpleChapterFactory): # type: ignore + def cleanup_html(self, content: bytes) -> HtmlElement: + """ + cleanup html content to only include supported tags + """ + # check if we can minimalize the scope + etree = fromstring(content) + # fix and remove invalid images + for img in etree.xpath(".//img"): + # ensure all images with no src are removed + if "src" not in img.attrib: + cast(HtmlElement, img.getparent()).remove(img) + # ensure they also have an alt + elif "alt" not in img.attrib: + img.attrib["alt"] = img.attrib["src"] + # return new element-tree + return etree + + +def download(url: str) -> str: + global COOKIE + + if COOKIE: + timeout = randint(10, 100) + print(f"Wait {timeout} seconds...") + sleep(2) + + response = requests.get( + url, + cookies=COOKIE, + impersonate=requests.BrowserType.firefox133.value, + thread=None, + curl_options=None, + debug=False, + ) + + COOKIE = response.cookies + + return str(response.text) + + +with open(f"{path.dirname(__file__)}/{args.lang}.json") as f: + manifest = load(f) + book = manifest[args.volume - 1] + +epub = Epub( + title=book["title"], + creator=book["creator"], + language=args.lang, + publisher="Nanamazon+", + factory=MyChapterFactory(), +) + +for url in book["chapters"]: + text = download(url) + etree = fromstring(text) + title = etree.xpath(".//h1[@class='entry-title']")[0].text + content = etree.xpath(".//div[@class='entry-content']//p") + print(f"Chapter {title}...") + chapter = Chapter(title, "") + for elem in content: + if len(elem.children) > 0 and elem.children[0].tag == "a": + continue + chapter.content += tostring(elem).decode() + epub.add_chapter(chapter) + +with NamedTemporaryFile() as cover: + response = requests.get(book["cover"], thread=None, curl_options=None, debug=False) + cover.write(response.content) + epub.cover = cover.name + epub.create(args.output) diff --git a/auberge_vagabonde/en.json b/auberge_vagabonde/en.json new file mode 100644 index 0000000..720737c --- /dev/null +++ b/auberge_vagabonde/en.json @@ -0,0 +1,824 @@ +[ + { + "title": "The Wandering Inn", + "creator": "pirateaba", + "cover": "https://i0.wp.com/wanderinginn.com/wp-content/uploads/2023/06/book1.png", + "chapters": [ + "https://wanderinginn.com/2017/03/03/rw1-00/", + "https://wanderinginn.com/2017/03/03/rw1-01/", + "https://wanderinginn.com/2017/03/03/rw1-02/", + "https://wanderinginn.com/2017/03/03/rw1-03/", + "https://wanderinginn.com/2017/03/03/rw1-04/", + "https://wanderinginn.com/2017/03/03/rw1-05/", + "https://wanderinginn.com/2017/03/03/rw1-06/", + "https://wanderinginn.com/2017/03/03/rw1-07/", + "https://wanderinginn.com/2017/03/03/rw1-08/", + "https://wanderinginn.com/2017/03/03/rw1-09/", + "https://wanderinginn.com/2017/03/03/rw1-10/", + "https://wanderinginn.com/2017/03/03/rwinterlude-the-great-ritual/", + "https://wanderinginn.com/2017/03/03/rw1-11/", + "https://wanderinginn.com/2017/03/03/rw1-12/", + "https://wanderinginn.com/2017/03/03/rw1-13/", + "https://wanderinginn.com/2017/03/03/rw1-14/", + "https://wanderinginn.com/2017/03/03/rw1-15/", + "https://wanderinginn.com/2017/03/03/rw1-16/", + "https://wanderinginn.com/2017/03/03/rw1-17/", + "https://wanderinginn.com/2017/03/03/rw1-18/", + "https://wanderinginn.com/2017/03/03/rw1-19-r/", + "https://wanderinginn.com/2017/03/03/rw1-20-r/", + "https://wanderinginn.com/2017/03/03/rw1-21/", + "https://wanderinginn.com/2017/03/03/rw1-22/", + "https://wanderinginn.com/2017/03/03/rw1-23-a/", + "https://wanderinginn.com/2017/03/04/rw1-24/", + "https://wanderinginn.com/2017/03/04/rwinterlude-king-edition/", + "https://wanderinginn.com/2017/03/04/rw1-25/", + "https://wanderinginn.com/2017/03/04/rw1-26-r/", + "https://wanderinginn.com/2017/03/04/rw1-27-r/", + "https://wanderinginn.com/2017/03/04/rw1-28-a/", + "https://wanderinginn.com/2017/03/04/rw1-29/", + "https://wanderinginn.com/2017/03/04/rw1-30/", + "https://wanderinginn.com/2017/03/04/rw1-31/", + "https://wanderinginn.com/2017/03/04/rw1-32-r/", + "https://wanderinginn.com/2017/03/04/rw1-33-r/", + "https://wanderinginn.com/2017/03/04/rw1-34/", + "https://wanderinginn.com/2017/03/04/rw1-35-r/", + "https://wanderinginn.com/2017/03/04/rw1-36/", + "https://wanderinginn.com/2017/03/04/rw1-37/", + "https://wanderinginn.com/2017/03/04/rw1-38/", + "https://wanderinginn.com/2017/03/04/rw1-39-r/", + "https://wanderinginn.com/2017/03/04/rw1-40-r/", + "https://wanderinginn.com/2017/03/04/rw1-41/", + "https://wanderinginn.com/2017/03/04/rw1-42/", + "https://wanderinginn.com/2017/03/04/rw1-43-r/", + "https://wanderinginn.com/2017/03/04/rw1-44-r/", + "https://wanderinginn.com/2017/03/04/rw1-45/", + "https://wanderinginn.com/2017/03/04/rw1-46/", + "https://wanderinginn.com/2017/03/04/rw1-47-r/", + "https://wanderinginn.com/2017/03/04/rw1-48-r/", + "https://wanderinginn.com/2017/03/04/rw1-49/", + "https://wanderinginn.com/2017/03/04/rw1-50/", + "https://wanderinginn.com/2017/03/04/rw1-51/", + "https://wanderinginn.com/2017/03/04/rw1-52-r/", + "https://wanderinginn.com/2017/03/04/rw1-53/", + "https://wanderinginn.com/2017/03/04/rw1-54/", + "https://wanderinginn.com/2017/03/04/rw1-55-r/", + "https://wanderinginn.com/2017/03/04/rw1-56/", + "https://wanderinginn.com/2017/03/04/rw1-57-h/", + "https://wanderinginn.com/2017/03/04/rw1-58-h/", + "https://wanderinginn.com/2017/03/04/rw1-59-h/", + "https://wanderinginn.com/2017/03/04/rw1-60/", + "https://wanderinginn.com/2017/03/04/rw1-61/", + "https://wanderinginn.com/2017/03/04/rw1-62/", + "https://wanderinginn.com/2017/03/04/rw1-63/" + ] + }, + { + "title": "Fae and Fare", + "creator": "pirateaba", + "cover": "https://i0.wp.com/wanderinginn.com/wp-content/uploads/2023/06/book2.png", + "chapters": [ + "https://wanderinginn.com/2017/03/07/interlude-2/", + "https://wanderinginn.com/2017/03/12/2-01/", + "https://wanderinginn.com/2017/03/15/2-02/", + "https://wanderinginn.com/2017/03/18/2-03/", + "https://wanderinginn.com/2017/03/22/2-04/", + "https://wanderinginn.com/2017/03/25/2-05/", + "https://wanderinginn.com/2017/03/28/2-06/", + "https://wanderinginn.com/2017/04/02/2-06-2/", + "https://wanderinginn.com/2017/04/02/2-07/", + "https://wanderinginn.com/2017/04/04/2-08/", + "https://wanderinginn.com/2017/04/09/2-09/", + "https://wanderinginn.com/2017/04/12/2-10/", + "https://wanderinginn.com/2017/04/12/2-00-t/", + "https://wanderinginn.com/2017/04/13/2-11/", + "https://wanderinginn.com/2017/04/14/2-12/", + "https://wanderinginn.com/2017/04/15/2-13/", + "https://wanderinginn.com/2017/04/16/2-00-g/", + "https://wanderinginn.com/2017/04/17/side-story-mating-rituals/", + "https://wanderinginn.com/2017/04/18/2-14/", + "https://wanderinginn.com/2017/04/22/2-15/", + "https://wanderinginn.com/2017/04/22/2-16/", + "https://wanderinginn.com/2017/04/25/2-17/", + "https://wanderinginn.com/2017/04/27/2-01-g/", + "https://wanderinginn.com/2017/04/29/2-18/", + "https://wanderinginn.com/2017/05/03/2-19/", + "https://wanderinginn.com/2017/05/05/2-00-k/", + "https://wanderinginn.com/2017/05/07/2-20/", + "https://wanderinginn.com/2017/05/10/2-01-t/", + "https://wanderinginn.com/2017/05/14/2-21/", + "https://wanderinginn.com/2017/05/17/2-22/", + "https://wanderinginn.com/2017/05/18/1-00-c/", + "https://wanderinginn.com/2017/05/19/1-01-c/", + "https://wanderinginn.com/2017/05/21/2-02-g/", + "https://wanderinginn.com/2017/05/24/2-23/", + "https://wanderinginn.com/2017/05/26/2-24/", + "https://wanderinginn.com/2017/05/28/2-25/", + "https://wanderinginn.com/2017/05/31/2-26/", + "https://wanderinginn.com/2017/06/04/2-00-h/", + "https://wanderinginn.com/2017/06/07/2-27/", + "https://wanderinginn.com/2017/06/09/2-28/", + "https://wanderinginn.com/2017/06/11/2-29/", + "https://wanderinginn.com/2017/06/14/2-03-g/", + "https://wanderinginn.com/2017/06/18/2-30/", + "https://wanderinginn.com/2017/06/21/2-31/", + "https://wanderinginn.com/2017/06/24/interlude-3/", + "https://wanderinginn.com/2017/06/25/s02-the-antinium-wars-pt-1/", + "https://wanderinginn.com/2017/06/26/s02-the-antinium-wars-pt-2/", + "https://wanderinginn.com/2017/06/27/2-32/", + "https://wanderinginn.com/2017/07/01/2-33/", + "https://wanderinginn.com/2017/07/04/2-34/", + "https://wanderinginn.com/2017/07/08/2-35/", + "https://wanderinginn.com/2017/07/11/2-36/", + "https://wanderinginn.com/2017/07/15/2-37/", + "https://wanderinginn.com/2017/07/18/2-38/", + "https://wanderinginn.com/2017/07/22/2-39/", + "https://wanderinginn.com/2017/07/25/2-40/", + "https://wanderinginn.com/2017/07/29/2-41/" + ] + }, + { + "title": "Flowers of Esthelm", + "creator": "pirateaba", + "cover": "https://i0.wp.com/wanderinginn.com/wp-content/uploads/2023/06/book3.png", + "chapters": [ + "https://wanderinginn.com/2017/08/01/3-00-e/", + "https://wanderinginn.com/2017/08/05/3-01-e/", + "https://wanderinginn.com/2017/08/08/3-02-h/", + "https://wanderinginn.com/2017/08/12/3-03/", + "https://wanderinginn.com/2017/08/15/3-04/", + "https://wanderinginn.com/2017/08/19/3-05-l/", + "https://wanderinginn.com/2017/08/20/1-00-d/", + "https://wanderinginn.com/2017/08/21/1-01-d/", + "https://wanderinginn.com/2017/08/22/3-06-l/", + "https://wanderinginn.com/2017/08/26/3-07-h/", + "https://wanderinginn.com/2017/08/29/3-08-h/", + "https://wanderinginn.com/2017/09/02/3-09/", + "https://wanderinginn.com/2017/09/05/3-10/", + "https://wanderinginn.com/2017/09/09/3-11-e/", + "https://wanderinginn.com/2017/09/12/3-12-e/", + "https://wanderinginn.com/2017/09/16/3-13/", + "https://wanderinginn.com/2017/09/19/3-14/", + "https://wanderinginn.com/2017/09/23/3-15/", + "https://wanderinginn.com/2017/09/26/3-16/", + "https://wanderinginn.com/2017/09/27/3-17-t/", + "https://wanderinginn.com/2017/09/28/3-18-t/", + "https://wanderinginn.com/2017/09/30/3-19-t/", + "https://wanderinginn.com/2017/10/03/3-20-t/", + "https://wanderinginn.com/2017/10/07/3-21-l/", + "https://wanderinginn.com/2017/10/10/3-22-l/", + "https://wanderinginn.com/2017/10/14/3-23-l/", + "https://wanderinginn.com/2017/10/17/3-24/", + "https://wanderinginn.com/2017/10/21/3-25/", + "https://wanderinginn.com/2017/10/24/3-26-g/", + "https://wanderinginn.com/2017/10/26/3-27-m/", + "https://wanderinginn.com/2017/10/28/3-28-g/", + "https://wanderinginn.com/2017/10/31/3-29-g/", + "https://wanderinginn.com/2017/11/04/3-30/", + "https://wanderinginn.com/2017/11/07/3-31-g/", + "https://wanderinginn.com/2017/11/09/s03-wistram-days-pt-1/", + "https://wanderinginn.com/2017/11/10/s03-wistram-days-pt-2/", + "https://wanderinginn.com/2017/11/11/wistram-days-pt-3/", + "https://wanderinginn.com/2017/11/12/wistram-days-pt-4/", + "https://wanderinginn.com/2017/11/14/wistram-days-pt-5/", + "https://wanderinginn.com/2017/11/18/wistram-days-pt-6/", + "https://wanderinginn.com/2017/11/21/wistram-days-pt-7/", + "https://wanderinginn.com/2017/11/25/3-32/", + "https://wanderinginn.com/2017/11/28/3-33/", + "https://wanderinginn.com/2017/12/02/3-34/", + "https://wanderinginn.com/2017/12/05/3-35/", + "https://wanderinginn.com/2017/12/09/3-36/", + "https://wanderinginn.com/2017/12/12/3-37/", + "https://wanderinginn.com/2017/12/16/3-38/", + "https://wanderinginn.com/2017/12/19/3-39/", + "https://wanderinginn.com/2017/12/23/3-40/", + "https://wanderinginn.com/2017/12/25/3-41/", + "https://wanderinginn.com/2017/12/26/3-42/", + "https://wanderinginn.com/2017/12/30/interlude-4/" + ] + }, + { + "title": "Winter Solstice", + "creator": "pirateaba", + "cover": "https://i0.wp.com/wanderinginn.com/wp-content/uploads/2023/06/book4.png", + "chapters": [ + "https://wanderinginn.com/2018/01/06/4-00-k/", + "https://wanderinginn.com/2018/01/09/4-01-k/", + "https://wanderinginn.com/2018/01/13/4-02-k/", + "https://wanderinginn.com/2018/01/16/4-03-k/", + "https://wanderinginn.com/2018/01/20/4-04-k/", + "https://wanderinginn.com/2018/01/23/4-05-k/", + "https://wanderinginn.com/2018/01/27/4-06-km/", + "https://wanderinginn.com/2018/01/30/4-07/", + "https://wanderinginn.com/2018/02/01/4-08-t/", + "https://wanderinginn.com/2018/02/03/4-09/", + "https://wanderinginn.com/2018/02/06/4-10/", + "https://wanderinginn.com/2018/02/10/4-11/", + "https://wanderinginn.com/2018/02/13/4-12/", + "https://wanderinginn.com/2018/02/17/4-13-l/", + "https://wanderinginn.com/2018/02/20/4-14-l/", + "https://wanderinginn.com/2018/02/20/4-15-l/", + "https://wanderinginn.com/2018/02/24/4-16/", + "https://wanderinginn.com/2018/02/27/4-17/", + "https://wanderinginn.com/2018/03/01/1-02-d/", + "https://wanderinginn.com/2018/03/03/1-03-d/", + "https://wanderinginn.com/2018/03/06/1-04-d/", + "https://wanderinginn.com/2018/03/06/1-05-d/", + "https://wanderinginn.com/2018/03/10/1-06-d/", + "https://wanderinginn.com/2018/03/13/4-18/", + "https://wanderinginn.com/2018/03/17/4-19/", + "https://wanderinginn.com/2018/03/20/4-20-e/", + "https://wanderinginn.com/2018/03/24/4-21-e/", + "https://wanderinginn.com/2018/03/27/4-22-e/", + "https://wanderinginn.com/2018/03/27/4-23-e/", + "https://wanderinginn.com/2018/03/31/4-24/", + "https://wanderinginn.com/2018/04/03/4-25-n/", + "https://wanderinginn.com/2018/04/07/4-26-m/", + "https://wanderinginn.com/2018/04/10/4-27-h/", + "https://wanderinginn.com/2018/04/14/4-28/", + "https://wanderinginn.com/2018/04/17/4-29/", + "https://wanderinginn.com/2018/04/21/4-30/", + "https://wanderinginn.com/2018/04/24/4-31/", + "https://wanderinginn.com/2018/04/28/4-32-g/", + "https://wanderinginn.com/2018/05/01/1-02-d-2/", + "https://wanderinginn.com/2018/05/01/1-03-d-2/", + "https://wanderinginn.com/2018/05/05/1-04-c/", + "https://wanderinginn.com/2018/05/05/1-05-c/", + "https://wanderinginn.com/2018/05/08/4-33/", + "https://wanderinginn.com/2018/05/12/4-34/", + "https://wanderinginn.com/2018/05/15/4-35-e/", + "https://wanderinginn.com/2018/05/17/4-36-o/", + "https://wanderinginn.com/2018/05/19/4-37-o/", + "https://wanderinginn.com/2018/05/22/4-38-n/", + "https://wanderinginn.com/2018/05/26/4-39-g/", + "https://wanderinginn.com/2018/05/29/4-40-l/", + "https://wanderinginn.com/2018/06/02/4-41-l/", + "https://wanderinginn.com/2018/06/02/4-42-l/", + "https://wanderinginn.com/2018/06/05/4-43/", + "https://wanderinginn.com/2018/06/09/4-44-m/", + "https://wanderinginn.com/2018/06/12/4-45/", + "https://wanderinginn.com/2018/06/16/4-46/", + "https://wanderinginn.com/2018/06/19/4-47/", + "https://wanderinginn.com/2018/06/23/s02-the-antinium-wars-pt-3/", + "https://wanderinginn.com/2018/06/26/s02-the-antinium-wars-pt-4/", + "https://wanderinginn.com/2018/06/26/s02-the-antinium-wars-pt-5/", + "https://wanderinginn.com/2018/06/29/4-48/", + "https://wanderinginn.com/2018/07/07/4-49/", + "https://wanderinginn.com/2018/07/09/the-depthless-doctor/" + ] + }, + { + "title": "The Last Light", + "creator": "pirateaba", + "cover": "https://i0.wp.com/wanderinginn.com/wp-content/uploads/2023/06/book5.png", + "chapters": [ + "https://wanderinginn.com/2018/07/10/5-00/", + "https://wanderinginn.com/2018/07/14/5-01/", + "https://wanderinginn.com/2018/07/17/5-02/", + "https://wanderinginn.com/2018/07/21/5-03/", + "https://wanderinginn.com/2018/07/21/5-04/", + "https://wanderinginn.com/2018/07/24/5-05/", + "https://wanderinginn.com/2018/07/27/5-06-m/", + "https://wanderinginn.com/2018/07/28/5-07/", + "https://wanderinginn.com/2018/07/31/5-08/", + "https://wanderinginn.com/2018/08/04/interlude-flos/", + "https://wanderinginn.com/2018/08/07/5-09-e/", + "https://wanderinginn.com/2018/08/11/5-10-e/", + "https://wanderinginn.com/2018/08/14/5-11-e/", + "https://wanderinginn.com/2018/08/18/5-12/", + "https://wanderinginn.com/2018/08/21/5-13/", + "https://wanderinginn.com/2018/08/25/5-14/", + "https://wanderinginn.com/2018/08/28/5-15/", + "https://wanderinginn.com/2018/09/01/5-16-s/", + "https://wanderinginn.com/2018/09/01/5-17-s/", + "https://wanderinginn.com/2018/09/04/5-18-s/", + "https://wanderinginn.com/2018/09/08/5-19-g/", + "https://wanderinginn.com/2018/09/11/5-20-g/", + "https://wanderinginn.com/2018/09/15/5-21-e/", + "https://wanderinginn.com/2018/09/18/5-22-g/", + "https://wanderinginn.com/2018/09/22/5-23-g/", + "https://wanderinginn.com/2018/09/29/5-24-l/", + "https://wanderinginn.com/2018/10/02/5-25-l/", + "https://wanderinginn.com/2018/10/06/5-26-l/", + "https://wanderinginn.com/2018/10/09/5-27/", + "https://wanderinginn.com/2018/10/13/5-28/", + "https://wanderinginn.com/2018/10/16/5-29/", + "https://wanderinginn.com/2018/10/20/5-30-g/", + "https://wanderinginn.com/2018/10/23/5-31-g/", + "https://wanderinginn.com/2018/10/27/5-32-g/", + "https://wanderinginn.com/2018/10/30/5-33-b/", + "https://wanderinginn.com/2018/11/01/interlude-blackmage/", + "https://wanderinginn.com/2018/11/03/5-34/", + "https://wanderinginn.com/2018/11/06/5-35-h/", + "https://wanderinginn.com/2018/11/10/5-36/", + "https://wanderinginn.com/2018/11/13/5-37-g/", + "https://wanderinginn.com/2018/11/17/5-38/", + "https://wanderinginn.com/2018/11/20/5-39/", + "https://wanderinginn.com/2018/11/24/5-40/", + "https://wanderinginn.com/2018/11/27/5-41/", + "https://wanderinginn.com/2018/12/01/5-42/", + "https://wanderinginn.com/2018/12/04/5-43/", + "https://wanderinginn.com/2018/12/06/interlude-niers/", + "https://wanderinginn.com/2018/12/08/5-44/", + "https://wanderinginn.com/2018/12/11/5-45/", + "https://wanderinginn.com/2018/12/15/5-46/", + "https://wanderinginn.com/2018/12/18/5-47-g/", + "https://wanderinginn.com/2018/12/22/5-48-g/", + "https://wanderinginn.com/2018/12/25/5-49/", + "https://wanderinginn.com/2018/12/29/5-50-g/", + "https://wanderinginn.com/2018/12/30/interlude-bird/", + "https://wanderinginn.com/2019/01/08/5-51-g/", + "https://wanderinginn.com/2019/01/12/5-52/", + "https://wanderinginn.com/2019/01/15/5-53/", + "https://wanderinginn.com/2019/01/19/5-54/", + "https://wanderinginn.com/2019/01/22/5-54-2/", + "https://wanderinginn.com/2019/01/26/interlude-krshia/", + "https://wanderinginn.com/2019/01/29/5-55-g/", + "https://wanderinginn.com/2019/02/02/5-56-g/", + "https://wanderinginn.com/2019/02/05/5-57/", + "https://wanderinginn.com/2019/02/09/5-58/", + "https://wanderinginn.com/2019/02/12/5-59/", + "https://wanderinginn.com/2019/02/16/interlude-pebblesnatch-and-garry/", + "https://wanderinginn.com/2019/02/16/5-60/", + "https://wanderinginn.com/2019/02/19/5-61/", + "https://wanderinginn.com/2019/02/26/5-62/", + "https://wanderinginn.com/2019/03/02/interlude-5/" + ] + }, + { + "title": "The General of Izril", + "creator": "pirateaba", + "cover": "https://i0.wp.com/wanderinginn.com/wp-content/uploads/2023/06/book6.png", + "chapters": [ + "https://wanderinginn.com/2019/03/19/6-00/", + "https://wanderinginn.com/2019/03/23/6-01/", + "https://wanderinginn.com/2019/03/26/6-02/", + "https://wanderinginn.com/2019/03/30/6-03/", + "https://wanderinginn.com/2019/04/02/6-04-d/", + "https://wanderinginn.com/2019/04/06/6-05-d/", + "https://wanderinginn.com/2019/04/09/6-06-d/", + "https://wanderinginn.com/2019/04/13/6-07-d/", + "https://wanderinginn.com/2019/04/16/6-08/", + "https://wanderinginn.com/2019/04/20/6-09/", + "https://wanderinginn.com/2019/04/23/6-10/", + "https://wanderinginn.com/2019/04/27/6-11/", + "https://wanderinginn.com/2019/04/30/6-12-k/", + "https://wanderinginn.com/2019/05/04/6-13-k/", + "https://wanderinginn.com/2019/05/07/6-14-k/", + "https://wanderinginn.com/2019/05/11/6-15-k/", + "https://wanderinginn.com/2019/05/14/6-16/", + "https://wanderinginn.com/2019/05/18/6-17-s/", + "https://wanderinginn.com/2019/05/21/6-18-h/", + "https://wanderinginn.com/2019/05/25/6-19-h/", + "https://wanderinginn.com/2019/05/28/6-20-d/", + "https://wanderinginn.com/2019/06/01/5-21-d/", + "https://wanderinginn.com/2019/06/04/6-22-d/", + "https://wanderinginn.com/2019/06/08/6-23-d/", + "https://wanderinginn.com/2019/06/11/6-24-d/", + "https://wanderinginn.com/2019/06/15/6-25/", + "https://wanderinginn.com/2019/06/18/6-26/", + "https://wanderinginn.com/2019/06/22/6-27-m/", + "https://wanderinginn.com/2019/06/25/6-28/", + "https://wanderinginn.com/2019/06/29/6-29/", + "https://wanderinginn.com/2019/07/02/interlude-embria/", + "https://wanderinginn.com/2019/07/13/6-30/", + "https://wanderinginn.com/2019/07/16/6-31/", + "https://wanderinginn.com/2019/07/20/6-32/", + "https://wanderinginn.com/2019/07/23/6-33-e/", + "https://wanderinginn.com/2019/07/27/6-34-e/", + "https://wanderinginn.com/2019/07/30/interlude-numbtongue-pt-1/", + "https://wanderinginn.com/2019/08/03/interlude-numbtongue-pt-2/", + "https://wanderinginn.com/2019/08/06/6-35/", + "https://wanderinginn.com/2019/08/10/6-36-e/", + "https://wanderinginn.com/2019/08/13/6-37-e/", + "https://wanderinginn.com/2019/08/17/6-38/", + "https://wanderinginn.com/2019/08/20/6-39/", + "https://wanderinginn.com/2019/08/24/6-40-e/", + "https://wanderinginn.com/2019/08/27/6-41-e/", + "https://wanderinginn.com/2019/08/31/interlude-two-rats/", + "https://wanderinginn.com/2019/09/03/interlude-rufelt/", + "https://wanderinginn.com/2019/09/07/6-42-e/", + "https://wanderinginn.com/2019/09/10/6-43-e/", + "https://wanderinginn.com/2019/09/14/6-44-e/", + "https://wanderinginn.com/2019/09/17/6-45-e/", + "https://wanderinginn.com/2019/09/21/6-46-e/", + "https://wanderinginn.com/2019/09/24/6-47-e/", + "https://wanderinginn.com/2019/10/12/6-48-t/", + "https://wanderinginn.com/2019/10/15/6-49/", + "https://wanderinginn.com/2019/10/19/6-50-i/", + "https://wanderinginn.com/2019/10/22/6-51-a/", + "https://wanderinginn.com/2019/10/26/6-52-k/", + "https://wanderinginn.com/2019/10/29/6-53-k/", + "https://wanderinginn.com/2019/11/02/6-54-k/", + "https://wanderinginn.com/2019/11/05/6-55-k/", + "https://wanderinginn.com/2019/11/09/interlude-the-titans-question/", + "https://wanderinginn.com/2019/11/12/6-56/", + "https://wanderinginn.com/2019/11/16/6-57/", + "https://wanderinginn.com/2019/11/19/6-58/", + "https://wanderinginn.com/2019/11/23/6-59/", + "https://wanderinginn.com/2019/11/26/6-60/", + "https://wanderinginn.com/2019/11/30/interlude-talia/", + "https://wanderinginn.com/2019/12/03/6-61-l/", + "https://wanderinginn.com/2019/12/07/6-62-l/", + "https://wanderinginn.com/2019/12/11/interlude-foliana/", + "https://wanderinginn.com/2019/12/14/6-63-p/", + "https://wanderinginn.com/2019/12/18/6-64/", + "https://wanderinginn.com/2019/12/22/6-65/", + "https://wanderinginn.com/2019/12/25/6-66-h/", + "https://wanderinginn.com/2019/12/29/6-67/", + "https://wanderinginn.com/2020/01/01/6-68/" + ] + }, + { + "title": "The Rains of Liscor", + "creator": "pirateaba", + "cover": "https://i0.wp.com/wanderinginn.com/wp-content/uploads/2023/06/book7.png", + "chapters": [ + "https://wanderinginn.com/2020/01/19/7-00/", + "https://wanderinginn.com/2020/01/22/7-01/", + "https://wanderinginn.com/2020/01/26/7-02/", + "https://wanderinginn.com/2020/01/29/7-03/", + "https://wanderinginn.com/2020/01/30/mini-stories-crabs-and-drinks/", + "https://wanderinginn.com/2020/02/01/7-04/", + "https://wanderinginn.com/2020/02/04/interlude-queens-and-dragons/", + "https://wanderinginn.com/2020/02/09/7-05-p/", + "https://wanderinginn.com/2020/02/12/7-06/", + "https://wanderinginn.com/2020/02/16/7-07/", + "https://wanderinginn.com/2020/02/19/7-08-k/", + "https://wanderinginn.com/2020/02/23/7-09-k/", + "https://wanderinginn.com/2020/02/26/7-10-k/", + "https://wanderinginn.com/2020/03/01/7-11/", + "https://wanderinginn.com/2020/03/03/interlude-dancing-and-brawling/", + "https://wanderinginn.com/2020/03/04/interlude-chocolate-gold/", + "https://wanderinginn.com/2020/03/05/interlude-chess-and-ships/", + "https://wanderinginn.com/2020/03/06/interlude-chocolate-alchemy/", + "https://wanderinginn.com/2020/03/07/interlude-lifting-ants/", + "https://wanderinginn.com/2020/03/08/interlude-burning-alcohol/", + "https://wanderinginn.com/2020/03/09/interlude-the-hangover-after/", + "https://wanderinginn.com/2020/03/15/7-12-g/", + "https://wanderinginn.com/2020/03/18/7-13-k/", + "https://wanderinginn.com/2020/03/21/mating-rituals-pt-2/", + "https://wanderinginn.com/2020/03/24/7-14-t/", + "https://wanderinginn.com/2020/03/29/7-15-r/", + "https://wanderinginn.com/2020/03/31/7-16-l/", + "https://wanderinginn.com/2020/04/12/7-17-s/", + "https://wanderinginn.com/2020/04/15/7-18-m/", + "https://wanderinginn.com/2020/04/19/interlude-strategists-at-sea-pt-1/", + "https://wanderinginn.com/2020/04/22/interlude-strategists-at-sea-pt-2/", + "https://wanderinginn.com/2020/04/26/7-19/", + "https://wanderinginn.com/2020/04/29/7-20/", + "https://wanderinginn.com/2020/05/03/interlude-a-night-in-the-inn/", + "https://wanderinginn.com/2020/05/06/7-21-kq/", + "https://wanderinginn.com/2020/05/10/7-22-d/", + "https://wanderinginn.com/2020/05/13/7-23-lm/", + "https://wanderinginn.com/2020/05/24/7-24/", + "https://wanderinginn.com/2020/05/27/7-25/", + "https://wanderinginn.com/2020/05/31/7-26/", + "https://wanderinginn.com/2020/06/03/7-27/", + "https://wanderinginn.com/2020/06/07/interlude-the-gecko-of-illusions/", + "https://wanderinginn.com/2020/06/10/7-28/", + "https://wanderinginn.com/2020/06/14/7-29-b/", + "https://wanderinginn.com/2020/06/24/7-30/", + "https://wanderinginn.com/2020/06/28/7-31/", + "https://wanderinginn.com/2020/07/01/interlude-a-meeting-of-druids/", + "https://wanderinginn.com/2020/07/05/7-32-d/", + "https://wanderinginn.com/2020/07/08/7-33-i/", + "https://wanderinginn.com/2020/07/12/7-34-c/", + "https://wanderinginn.com/2020/07/15/7-35-c/", + "https://wanderinginn.com/2020/07/19/7-36-c/", + "https://wanderinginn.com/2020/07/29/7-37/", + "https://wanderinginn.com/2020/08/02/7-38/", + "https://wanderinginn.com/2020/08/05/7-39-a/", + "https://wanderinginn.com/2020/08/08/interlude-carriages-and-conversations/", + "https://wanderinginn.com/2020/08/09/interlude-meetings-and-friendships/", + "https://wanderinginn.com/2020/08/10/interlude-sand-and-notes/", + "https://wanderinginn.com/2020/08/11/7-40-er/", + "https://wanderinginn.com/2020/08/12/interlude-food-and-growth/", + "https://wanderinginn.com/2020/08/13/7-41/", + "https://wanderinginn.com/2020/08/14/7-42-m/", + "https://wanderinginn.com/2020/09/02/7-43-g/", + "https://wanderinginn.com/2020/09/06/7-44/", + "https://wanderinginn.com/2020/09/09/7-45/", + "https://wanderinginn.com/2020/09/13/7-46-k/", + "https://wanderinginn.com/2020/09/16/7-47-k/", + "https://wanderinginn.com/2020/09/20/7-48-k/", + "https://wanderinginn.com/2020/09/23/7-49/", + "https://wanderinginn.com/2020/10/04/interlude-experiments-in-golems/", + "https://wanderinginn.com/2020/10/07/7-50/", + "https://wanderinginn.com/2020/10/11/7-51/", + "https://wanderinginn.com/2020/10/14/7-52/", + "https://wanderinginn.com/2020/10/18/7-53/", + "https://wanderinginn.com/2020/10/20/7-54/", + "https://wanderinginn.com/2020/10/25/7-55-e/", + "https://wanderinginn.com/2020/11/04/interlude-saliss-the-adventurer/", + "https://wanderinginn.com/2020/11/08/7-56/", + "https://wanderinginn.com/2020/11/11/7-57/", + "https://wanderinginn.com/2020/11/15/7-58/", + "https://wanderinginn.com/2020/11/18/7-59/", + "https://wanderinginn.com/2020/11/22/7-60/", + "https://wanderinginn.com/2020/11/25/interlude-the-tribes-of-izril/", + "https://wanderinginn.com/2020/12/06/interlude-the-innkeepers-knight/", + "https://wanderinginn.com/2020/12/09/7-61/", + "https://wanderinginn.com/2020/12/13/7-62/", + "https://wanderinginn.com/2020/12/16/solstice-pt-1/", + "https://wanderinginn.com/2020/12/20/solstice-pt-2/", + "https://wanderinginn.com/2020/12/23/solstice-pt-3/", + "https://wanderinginn.com/2020/12/23/solstice-pt-4/", + "https://wanderinginn.com/2020/12/23/solstice-pt-5/", + "https://wanderinginn.com/2020/12/23/solstice-pt-6/", + "https://wanderinginn.com/2020/12/23/solstice-pt-7/", + "https://wanderinginn.com/2020/12/23/solstice-pt-8/", + "https://wanderinginn.com/2020/12/23/solstice-pt-9/" + ] + }, + { + "title": "Blood of Liscor", + "creator": "pirateaba", + "cover": "https://i0.wp.com/wanderinginn.com/wp-content/uploads/2023/06/book8.jpg", + "chapters": [ + "https://wanderinginn.com/2021/01/10/8-00/", + "https://wanderinginn.com/2021/01/13/8-01/", + "https://wanderinginn.com/2021/01/17/8-02/", + "https://wanderinginn.com/2021/01/20/8-03/", + "https://wanderinginn.com/2021/01/24/interlude-the-revenant-and-the-naga/", + "https://wanderinginn.com/2021/01/27/8-04-t/", + "https://wanderinginn.com/2021/02/07/8-05-i/", + "https://wanderinginn.com/2021/02/10/8-06-rt/", + "https://wanderinginn.com/2021/02/14/8-07-l/", + "https://wanderinginn.com/2021/02/17/8-08-j/", + "https://wanderinginn.com/2021/02/21/8-09/", + "https://wanderinginn.com/2021/02/24/8-10/", + "https://wanderinginn.com/2021/03/07/8-11-e-revised/", + "https://wanderinginn.com/2021/03/10/8-12-t/", + "https://wanderinginn.com/2021/03/14/interlude-the-rower-and-the-bartender/", + "https://wanderinginn.com/2021/03/17/8-13-f/", + "https://wanderinginn.com/2021/03/21/8-14-n/", + "https://wanderinginn.com/2021/03/30/8-15/", + "https://wanderinginn.com/2021/04/04/interlude-paradigm-shift-pt-1/", + "https://wanderinginn.com/2021/04/04/interlude-paradigm-shift-pt-2/", + "https://wanderinginn.com/2021/04/10/8-16/", + "https://wanderinginn.com/2021/04/13/8-17-h/", + "https://wanderinginn.com/2021/04/25/8-18-h/", + "https://wanderinginn.com/2021/04/28/8-19-h/", + "https://wanderinginn.com/2021/05/02/8-20/", + "https://wanderinginn.com/2021/05/04/8-21-l/", + "https://wanderinginn.com/2021/05/11/8-22-he/", + "https://wanderinginn.com/2021/05/16/interlude-senior-guardsman-relc/", + "https://wanderinginn.com/2021/05/19/8-23/", + "https://wanderinginn.com/2021/05/30/8-24/", + "https://wanderinginn.com/2021/06/02/8-25-kh/", + "https://wanderinginn.com/2021/06/06/8-26-fk/", + "https://wanderinginn.com/2021/06/08/interlude-luan-the-giant/", + "https://wanderinginn.com/2021/06/12/8-27/", + "https://wanderinginn.com/2021/06/19/8-28/", + "https://wanderinginn.com/2021/06/22/8-29/", + "https://wanderinginn.com/2021/06/26/interlude-the-pets-of-innworld/", + "https://wanderinginn.com/2021/07/13/8-30/", + "https://wanderinginn.com/2021/07/18/8-31/", + "https://wanderinginn.com/2021/07/20/interlude-pisces-revised/", + "https://wanderinginn.com/2021/07/25/8-32/", + "https://wanderinginn.com/2021/07/28/8-33-r/", + "https://wanderinginn.com/2021/08/01/8-34-r/", + "https://wanderinginn.com/2021/08/04/8-35/", + "https://wanderinginn.com/2021/08/15/8-36-h/", + "https://wanderinginn.com/2021/08/17/8-37-h/", + "https://wanderinginn.com/2021/08/22/8-38-h/", + "https://wanderinginn.com/2021/08/24/8-39/", + "https://wanderinginn.com/2021/08/29/8-40-ctv/", + "https://wanderinginn.com/2021/08/31/interlude-of-vampires-and-fraerlings/", + "https://wanderinginn.com/2021/09/04/8-41/", + "https://wanderinginn.com/2021/09/15/interlude-songs-and-stories/", + "https://wanderinginn.com/2021/09/19/8-42/", + "https://wanderinginn.com/2021/09/22/8-43/", + "https://wanderinginn.com/2021/09/26/8-44-o/", + "https://wanderinginn.com/2021/09/26/8-45-o/", + "https://wanderinginn.com/2021/10/03/8-46-g/", + "https://wanderinginn.com/2021/10/06/interlude-perspective-and-past/", + "https://wanderinginn.com/2021/10/19/8-47-h/", + "https://wanderinginn.com/2021/10/24/8-48-h/", + "https://wanderinginn.com/2021/10/27/8-49-m-revised/", + "https://wanderinginn.com/2021/10/31/8-50/", + "https://wanderinginn.com/2021/11/03/interlude-conversations/", + "https://wanderinginn.com/2021/11/14/8-51-d/", + "https://wanderinginn.com/2021/11/17/8-52-mn/", + "https://wanderinginn.com/2021/11/21/8-53-fh/", + "https://wanderinginn.com/2021/12/01/8-54-h/", + "https://wanderinginn.com/2021/12/05/8-55-l/", + "https://wanderinginn.com/2021/12/08/8-56/", + "https://wanderinginn.com/2021/12/12/8-57-h/", + "https://wanderinginn.com/2021/12/15/8-58-pfh/", + "https://wanderinginn.com/2021/12/22/8-59-h/", + "https://wanderinginn.com/2021/12/26/8-60/", + "https://wanderinginn.com/2021/12/29/8-61/", + "https://wanderinginn.com/2022/01/16/8-62-k/", + "https://wanderinginn.com/2022/01/19/8-63-k/", + "https://wanderinginn.com/2022/01/23/8-64-k/", + "https://wanderinginn.com/2022/01/30/8-65/", + "https://wanderinginn.com/2022/02/09/interlude-hectval-pt-1/", + "https://wanderinginn.com/2022/02/13/interlude-hectval-pt-2/", + "https://wanderinginn.com/2022/02/16/interlude-hectval-pt-3/", + "https://wanderinginn.com/2022/02/20/interlude-satar/", + "https://wanderinginn.com/2022/02/23/8-66/", + "https://wanderinginn.com/2022/02/27/8-67/", + "https://wanderinginn.com/2022/03/09/8-68/", + "https://wanderinginn.com/2022/03/12/8-69-te/", + "https://wanderinginn.com/2022/03/13/8-70-e/", + "https://wanderinginn.com/2022/03/14/8-71/", + "https://wanderinginn.com/2022/03/15/8-72/", + "https://wanderinginn.com/2022/03/16/8-73-r/", + "https://wanderinginn.com/2022/03/17/8-74-dr/", + "https://wanderinginn.com/2022/03/18/8-75/", + "https://wanderinginn.com/2022/03/27/8-76-b/", + "https://wanderinginn.com/2022/03/30/8-77-b/", + "https://wanderinginn.com/2022/04/10/8-78-f/", + "https://wanderinginn.com/2022/04/13/8-79/", + "https://wanderinginn.com/2022/04/17/8-80/", + "https://wanderinginn.com/2022/04/20/8-81/", + "https://wanderinginn.com/2022/04/26/8-82-pt-1/", + "https://wanderinginn.com/2022/04/26/8-82-pt-2/", + "https://wanderinginn.com/2022/04/26/8-82-pt-3/", + "https://wanderinginn.com/2022/05/03/8-83/", + "https://wanderinginn.com/2022/05/03/8-84/", + "https://wanderinginn.com/2022/05/03/8-85/", + "https://wanderinginn.com/2022/05/03/epilogue/" + ] + }, + { + "title": "Tears of Liscor", + "creator": "pirateaba", + "cover": "https://i0.wp.com/wanderinginn.com/wp-content/uploads/2023/06/book9.jpg", + "chapters": [ + "https://wanderinginn.com/2022/06/03/9-00/", + "https://wanderinginn.com/2022/06/07/9-01/", + "https://wanderinginn.com/2022/06/11/9-02/", + "https://wanderinginn.com/2022/06/18/interlude-singing-ships/", + "https://wanderinginn.com/2022/06/28/9-03/", + "https://wanderinginn.com/2022/07/02/9-04/", + "https://wanderinginn.com/2022/07/05/interlude-the-isles-of-goblin-and-minos/", + "https://wanderinginn.com/2022/07/10/9-05-npr/", + "https://wanderinginn.com/2022/07/12/9-06/", + "https://wanderinginn.com/2022/07/17/9-07/", + "https://wanderinginn.com/2022/07/19/9-08/", + "https://wanderinginn.com/2022/07/30/interlude-mundanity-and-memorials/", + "https://wanderinginn.com/2022/08/06/interlude-the-competition/", + "https://wanderinginn.com/2022/08/20/9-09-p/", + "https://wanderinginn.com/2022/08/23/9-10-w/", + "https://wanderinginn.com/2022/08/27/9-11-w/", + "https://wanderinginn.com/2022/08/30/9-12/", + "https://wanderinginn.com/2022/09/04/9-13/", + "https://wanderinginn.com/2022/09/06/9-14-vm/", + "https://wanderinginn.com/2022/09/10/9-15-vm/", + "https://wanderinginn.com/2022/09/21/9-16-r/", + "https://wanderinginn.com/2022/09/25/9-17-r/", + "https://wanderinginn.com/2022/09/28/interlude-the-great-race/", + "https://wanderinginn.com/2022/10/02/9-19-e/", + "https://wanderinginn.com/2022/10/05/interlude-relationships/", + "https://wanderinginn.com/2022/10/09/9-19/", + "https://wanderinginn.com/2022/10/12/9-20/", + "https://wanderinginn.com/2022/10/16/interlude-death-and-stitches/", + "https://wanderinginn.com/2022/10/26/9-21/", + "https://wanderinginn.com/2022/10/30/9-22-gn/", + "https://wanderinginn.com/2022/11/02/9-23-ggggggggg/", + "https://wanderinginn.com/2022/11/05/9-24/", + "https://wanderinginn.com/2022/11/09/interlude-adventurers-pt-1/", + "https://wanderinginn.com/2022/11/13/interlude-adventurers-pt-2/", + "https://wanderinginn.com/2022/11/16/interlude-adventurers-pt-3/", + "https://wanderinginn.com/2022/11/27/9-25/", + "https://wanderinginn.com/2022/11/29/9-26-f/", + "https://wanderinginn.com/2022/12/04/9-27-rc/", + "https://wanderinginn.com/2022/12/07/interlude-age-and-tales/", + "https://wanderinginn.com/2022/12/11/interlude-the-first-and-last-of-us/", + "https://wanderinginn.com/2022/12/14/9-28/", + "https://wanderinginn.com/2022/12/18/9-29/", + "https://wanderinginn.com/2022/12/21/9-30/", + "https://wanderinginn.com/2022/12/25/9-31/", + "https://wanderinginn.com/2023/01/18/9-32/", + "https://wanderinginn.com/2023/01/22/9-33/", + "https://wanderinginn.com/2023/01/24/interlude-foody-discussions/", + "https://wanderinginn.com/2023/01/29/9-34/", + "https://wanderinginn.com/2023/01/31/9-35-o/", + "https://wanderinginn.com/2023/02/04/9-36-ho/", + "https://wanderinginn.com/2023/02/15/9-37-ho/", + "https://wanderinginn.com/2023/03/01/9-38-tv-pt-1/", + "https://wanderinginn.com/2023/03/01/9-38-tv-pt-2/", + "https://wanderinginn.com/2023/03/05/interlude-beginnings/", + "https://wanderinginn.com/2023/03/08/9-39/", + "https://wanderinginn.com/2023/03/12/9-40-gg/", + "https://wanderinginn.com/2023/03/15/interlude-innovation-and-invention/", + "https://wanderinginn.com/2023/03/19/interlude-brewing-sariants/", + "https://wanderinginn.com/2023/03/29/interlude-the-spitoon/", + "https://wanderinginn.com/2023/04/01/interlude-stories/", + "https://wanderinginn.com/2023/04/09/9-41-pt-1/", + "https://wanderinginn.com/2023/04/12/9-41-pt-2/", + "https://wanderinginn.com/2023/04/16/interlude-levels/", + "https://wanderinginn.com/2023/04/30/9-41-pt-3/", + "https://wanderinginn.com/2023/06/04/interlude-trade-and-travel/", + "https://wanderinginn.com/2023/06/05/9-42-e/", + "https://wanderinginn.com/2023/06/07/9-43-l/", + "https://wanderinginn.com/2023/06/08/9-44-p/", + "https://wanderinginn.com/2023/06/10/9-45-gt/", + "https://wanderinginn.com/2023/06/10/9-46-s/", + "https://wanderinginn.com/2023/06/13/9-47-u/", + "https://wanderinginn.com/2023/06/16/9-48-btiprljmwvrv/", + "https://wanderinginn.com/2023/06/27/9-49/", + "https://wanderinginn.com/2023/07/01/9-50/", + "https://wanderinginn.com/2023/07/04/9-51-z/", + "https://wanderinginn.com/2023/07/09/9-52/", + "https://wanderinginn.com/2023/07/12/9-53/", + "https://wanderinginn.com/2023/07/16/9-54-c/", + "https://wanderinginn.com/2023/08/30/9-55-pt-1/", + "https://wanderinginn.com/2023/08/30/9-55-pt-2/", + "https://wanderinginn.com/2023/09/05/9-56/", + "https://wanderinginn.com/2023/09/09/9-57-b/", + "https://wanderinginn.com/2023/09/12/9-58-o/", + "https://wanderinginn.com/2023/09/17/9-59-o/", + "https://wanderinginn.com/2023/10/03/interlude-the-library/", + "https://wanderinginn.com/2023/10/15/9-60/", + "https://wanderinginn.com/2023/10/17/9-61-g/", + "https://wanderinginn.com/2023/10/21/9-62/", + "https://wanderinginn.com/2023/10/24/9-63/", + "https://wanderinginn.com/2023/10/28/9-64-bh/", + "https://wanderinginn.com/2023/11/19/9-65/", + "https://wanderinginn.com/2023/11/22/9-66/", + "https://wanderinginn.com/2023/11/26/9-67-pt-1/", + "https://wanderinginn.com/2023/11/26/9-67-pt-2/", + "https://wanderinginn.com/2023/11/28/9-68/", + "https://wanderinginn.com/2023/12/06/9-69-pt-1/", + "https://wanderinginn.com/2023/12/06/9-69-pt-2/", + "https://wanderinginn.com/2023/12/23/9-70-pt-1/", + "https://wanderinginn.com/2023/12/23/9-70-pt-2/", + "https://wanderinginn.com/2023/12/23/9-70-pt-3/", + "https://wanderinginn.com/2023/12/23/volume-9-epilogue/" + ] + }, + { + "title": "The Wind Runner", + "creator": "pirateaba", + "cover": "https://i0.wp.com/wanderinginn.com/wp-content/uploads/2023/07/Wandering_Inn-Vol10-eCover-Layered_v2.jpg", + "chapters": [ + "https://wanderinginn.com/2024/02/04/10-00-l/", + "https://wanderinginn.com/2024/02/07/10-01-l/", + "https://wanderinginn.com/2024/02/11/10-02-y/", + "https://wanderinginn.com/2024/02/14/10-03-y/", + "https://wanderinginn.com/2024/02/18/10-04-v/", + "https://wanderinginn.com/2024/02/21/10-05/", + "https://wanderinginn.com/2024/03/06/10-06/", + "https://wanderinginn.com/2024/03/10/10-07/", + "https://wanderinginn.com/2024/03/13/interlude-saliss-the-architect/", + "https://wanderinginn.com/2024/03/20/10-08-pt-1/", + "https://wanderinginn.com/2024/03/20/10-08-pt-2/", + "https://wanderinginn.com/2024/03/24/10-09-e/", + "https://wanderinginn.com/2024/04/06/10-10-e-pt-1/", + "https://wanderinginn.com/2024/04/06/10-10-e-pt-2/", + "https://wanderinginn.com/2024/04/13/10-11-h/", + "https://wanderinginn.com/2024/04/27/10-12-h-pt-1/", + "https://wanderinginn.com/2024/04/27/10-12-h-pt-2/", + "https://wanderinginn.com/2024/05/04/10-13/", + "https://wanderinginn.com/2024/05/11/10-14/", + "https://wanderinginn.com/2024/05/18/10-15/", + "https://wanderinginn.com/2024/06/02/10-16-n/", + "https://wanderinginn.com/2024/06/07/interlude-another-time/", + "https://wanderinginn.com/2024/06/08/10-17/", + "https://wanderinginn.com/2024/06/16/10-18-e/", + "https://wanderinginn.com/2024/06/30/10-19-e/", + "https://wanderinginn.com/2024/07/08/10-20-e/", + "https://wanderinginn.com/2024/07/21/10-21-e/", + "https://wanderinginn.com/2024/07/28/goblin-days-pt-1-the-wedding/", + "https://wanderinginn.com/2024/07/28/goblin-days-pt-2-the-pilot-and-the-knight/", + "https://wanderinginn.com/2024/07/30/goblin-days-pt-3-vengeance-and-talking/", + "https://wanderinginn.com/2024/07/31/goblin-days-pt-4-order-oddity/", + "https://wanderinginn.com/2024/08/01/goblin-days-pt-5-redblade-and-lilbrasi/", + "https://wanderinginn.com/2024/08/02/goblin-days-pt-6-of-dragons/", + "https://wanderinginn.com/2024/08/02/goblin-days-pt-7-no-answers-and-answers/", + "https://wanderinginn.com/2024/08/04/goblin-days-pt-8-downwards/", + "https://wanderinginn.com/2024/08/10/the-roots-pt-1/", + "https://wanderinginn.com/2024/08/11/the-roots-pt-2/", + "https://wanderinginn.com/2024/08/11/the-roots-pt-2-2/", + "https://wanderinginn.com/2024/08/11/the-roots-pt-2-3/", + "https://wanderinginn.com/2024/08/14/the-roots-pt-3/", + "https://wanderinginn.com/2024/08/16/the-roots-pt-4/", + "https://wanderinginn.com/2024/08/18/the-roots-pt-5/", + "https://wanderinginn.com/2024/09/01/10-22-r/", + "https://wanderinginn.com/2024/09/08/10-23-lmgy/", + "https://wanderinginn.com/2024/09/29/heroes-of-hraace-pt-1/", + "https://wanderinginn.com/2024/10/06/heroes-of-hraace-pt-2/", + "https://wanderinginn.com/2024/10/06/heroes-of-hraace-pt-3/", + "https://wanderinginn.com/2024/10/13/10-24-e/", + "https://wanderinginn.com/2024/10/20/interlude-arcsingers-memories/", + "https://wanderinginn.com/2024/10/26/tales-of-innworld-1/", + "https://wanderinginn.com/2024/11/03/10-25-mg/", + "https://wanderinginn.com/2024/11/10/10-26-mm/", + "https://wanderinginn.com/2024/11/13/10-27-gmg/", + "https://wanderinginn.com/2024/11/16/interlude-songs-and-wands/", + "https://wanderinginn.com/2024/11/23/tales-of-innworld-2/", + "https://wanderinginn.com/2024/12/01/interlude-the-grove/", + "https://wanderinginn.com/2024/12/08/10-28-n/", + "https://wanderinginn.com/2024/12/15/10-29-m/", + "https://wanderinginn.com/2024/12/22/10-30-ggmg/", + "https://wanderinginn.com/2025/01/11/10-31-pt-1/", + "https://wanderinginn.com/2025/01/11/10-31-pt-2/", + "https://wanderinginn.com/2025/01/25/10-32-pt-1/", + "https://wanderinginn.com/2025/01/25/10-32-pt-2/", + "https://wanderinginn.com/2025/02/01/interlude-redscar/" + ] + } +] \ No newline at end of file diff --git a/auberge_vagabonde/fr.json b/auberge_vagabonde/fr.json new file mode 100644 index 0000000..45116b8 --- /dev/null +++ b/auberge_vagabonde/fr.json @@ -0,0 +1,262 @@ +[ + { + "title": "L'Auberge Vagabonde - Volume 1", + "creator": "EllieVia", + "cover": "https://i0.wp.com/wanderinginn.com/wp-content/uploads/2023/06/book1.png", + "chapters": [ + "https://aubergevagabonde.wordpress.com/2021/06/06/1-00/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-01/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-02/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-03/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-04/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-05/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-06/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-07/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-08/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-09/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-10/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-11/", + "https://aubergevagabonde.wordpress.com/2021/06/06/interlude/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-12/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-13/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-14/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-15/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-16/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-17/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-18/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-19/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-20/", + "https://aubergevagabonde.wordpress.com/2021/06/06/interlude-1-00-r/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-01-r/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-21/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-22/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-23/", + "https://aubergevagabonde.wordpress.com/2021/06/06/interlude-edition-du-roi/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-24/", + "https://aubergevagabonde.wordpress.com/2021/06/06/1-02-r/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-03-r/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-25/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-26/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-27/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-04-r/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-05-r/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-28/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-06-r/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-29/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-30/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-31/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-07-r/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-08-r/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-32/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-33/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-09-r/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-10-r/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-34/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-35/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-11-r/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-12-r/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-36/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-37/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-38/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-39/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-40/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-13-r/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-41/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-00-h/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-01-h/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-02-h/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-42/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-43/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-44/", + "https://aubergevagabonde.wordpress.com/2021/06/09/1-45/" + ] + }, + { + "title": "L'Auberge Vagabonde - Volume 2", + "creator": "Percy", + "cover": "https://i0.wp.com/wanderinginn.com/wp-content/uploads/2023/06/book2.png", + "chapters": [ + "https://aubergevagabonde.wordpress.com/2021/06/09/interlude-2/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-00/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-01/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-02/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-03/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-04/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-05/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-06/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-07/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-08/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-09/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-10-t/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-11/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-12/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-13/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-14-g/", + "https://aubergevagabonde.wordpress.com/2021/06/10/histoire-secondaire-rituels-daccouplement/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-15/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-16/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-17/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-18/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-19-g/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-20/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-21/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-22-k/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-23/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-24-t/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-25/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-26/", + "https://aubergevagabonde.wordpress.com/2021/06/10/1-00-c/", + "https://aubergevagabonde.wordpress.com/2021/06/10/1-01-c/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-27-g/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-28/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-29/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-30/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-31/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-32-h/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-33/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-34/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-35/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-36-g/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-37/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-38/", + "https://aubergevagabonde.wordpress.com/2021/06/10/interlude-3/", + "https://aubergevagabonde.wordpress.com/2021/06/10/histoire-secondaire-2-les-guerres-antiniumes-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/06/10/histoire-secondaire-2-les-guerres-antiniumes-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-39/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-40/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-41/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-42/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-43/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-44/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-45/", + "https://aubergevagabonde.wordpress.com/2021/06/10/hs3-du-temps-de-wistram-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-46/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-47/", + "https://aubergevagabonde.wordpress.com/2021/06/10/2-48/" + ] + }, + { + "title": "L'Auberge Vagabonde - Volume 3", + "creator": "EllieVia & Percy", + "cover": "https://i0.wp.com/wanderinginn.com/wp-content/uploads/2023/06/book3.png", + "chapters": [ + "https://aubergevagabonde.wordpress.com/2021/06/10/3-00-e/", + "https://aubergevagabonde.wordpress.com/2021/08/16/3-01-e/", + "https://aubergevagabonde.wordpress.com/2021/08/16/3-02-h/", + "https://aubergevagabonde.wordpress.com/2021/08/18/3-03-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/08/18/3-03-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/08/18/3-04-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/08/22/3-04-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/08/25/3-05-l-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/08/29/3-05-l-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/09/01/1-00-m-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/09/05/1-00-m-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/09/08/1-01-m-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/09/12/1-01-m-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/09/15/3-06-l-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/09/19/3-06-l-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/09/22/3-07-h-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/09/26/3-07-h-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/09/29/3-08-h/", + "https://aubergevagabonde.wordpress.com/2021/10/03/3-09-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/10/07/3-09-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/10/10/3-10-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/10/14/3-10-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/10/17/3-11-e-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/10/20/3-11-e-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/10/24/3-12-e/", + "https://aubergevagabonde.wordpress.com/2021/10/27/3-13-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/10/31/3-13-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/11/03/3-14-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/11/07/3-14-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/11/10/3-15-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/11/15/3-15-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/11/17/3-16-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/11/21/3-16-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/11/24/s03-wistram-days-pt-2-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/11/28/s03-wistram-days-pt-2-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/12/01/3-17-t-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/12/05/3-17-t-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/12/08/3-18-t-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/12/12/3-18-t-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/12/15/3-19-t/", + "https://aubergevagabonde.wordpress.com/2021/12/19/3-20-t-partie-1/", + "https://aubergevagabonde.wordpress.com/2021/12/22/3-20-t-partie-2/", + "https://aubergevagabonde.wordpress.com/2021/12/26/3-21-l/", + "https://aubergevagabonde.wordpress.com/2022/01/02/3-22-l-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/01/05/3-22-l-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/01/09/3-23-l-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/01/12/3-23-l-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/01/16/3-24-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/01/19/3-24-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/01/23/3-25-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/01/26/3-25-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/01/31/3-26-g-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/02/04/3-26-g-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/02/07/3-27-m-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/02/11/3-27-m-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/02/14/3-28-g-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/02/18/3-28-g-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/02/21/3-29-g-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/02/25/3-29-g-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/02/28/3-30-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/03/04/3-30-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/03/07/3-31-g-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/03/11/3-31-g-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/03/14/hs3-du-temps-de-wistram-partie-3-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/03/18/hs3-du-temps-de-wistram-partie-3-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/03/21/hs3-du-temps-de-wistram-partie-4-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/03/25/hs3-du-temps-de-wistram-partie-4-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/03/28/hs3-du-temps-de-wistram-partie-5-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/04/01/hs3-du-temps-de-wistram-partie-5-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/04/04/hs3-du-temps-de-wistram-partie-6-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/04/08/hs3-du-temps-de-wistram-partie-6-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/04/11/hs3-du-temps-de-wistram-partie-7-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/04/15/hs3-du-temps-de-wistram-partie-7-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/04/18/3-32-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/04/22/3-32-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/04/25/3-33-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/04/29/3-33-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/05/03/3-34-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/09/05/3-34-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/09/12/3-34-partie-3/", + "https://aubergevagabonde.wordpress.com/2022/09/19/3-35-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/09/26/3-35-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/10/03/3-35-partie-3/", + "https://aubergevagabonde.wordpress.com/2022/10/10/3-36-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/10/10/3-36-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/10/10/3-36-partie-3/", + "https://aubergevagabonde.wordpress.com/2022/10/10/3-36-partie-4/", + "https://aubergevagabonde.wordpress.com/2022/11/07/3-37-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/11/16/3-37-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/11/21/3-37-partie-3/", + "https://aubergevagabonde.wordpress.com/2022/11/28/3-37-partie-4/", + "https://aubergevagabonde.wordpress.com/2022/12/05/3-38-partie-1/", + "https://aubergevagabonde.wordpress.com/2022/12/11/3-38-partie-2/", + "https://aubergevagabonde.wordpress.com/2022/12/19/3-38-partie-3/", + "https://aubergevagabonde.wordpress.com/2022/12/27/3-38-partie-4/", + "https://aubergevagabonde.wordpress.com/2023/01/16/3-39-partie-1/", + "https://aubergevagabonde.wordpress.com/2023/01/23/3-39-partie-2/", + "https://aubergevagabonde.wordpress.com/2023/01/30/3-39-partie-3/", + "https://aubergevagabonde.wordpress.com/2023/02/06/3-40-partie-1/", + "https://aubergevagabonde.wordpress.com/2023/02/13/3-40-partie-2/", + "https://aubergevagabonde.wordpress.com/2023/02/20/3-40-partie-3/", + "https://aubergevagabonde.wordpress.com/2023/02/27/3-40-partie-4/", + "https://aubergevagabonde.wordpress.com/2023/03/06/3-41-partie-1/", + "https://aubergevagabonde.wordpress.com/2023/03/16/3-41-partie-2/", + "https://aubergevagabonde.wordpress.com/2023/03/22/3-41-partie-3/", + "https://aubergevagabonde.wordpress.com/2023/03/29/3-41-partie-4/", + "https://aubergevagabonde.wordpress.com/2023/04/05/3-41-partie-5/", + "https://aubergevagabonde.wordpress.com/2023/04/12/3-42-partie-1/", + "https://aubergevagabonde.wordpress.com/2023/04/21/3-42-partie-2/", + "https://aubergevagabonde.wordpress.com/2023/04/27/3-42-partie-3/", + "https://aubergevagabonde.wordpress.com/2023/05/02/3-42-partie-4/", + "https://aubergevagabonde.wordpress.com/2023/05/10/3-42-partie-5/", + "https://aubergevagabonde.wordpress.com/2023/05/21/interlude-partie-1/", + "https://aubergevagabonde.wordpress.com/2023/05/24/interlude-partie-2/", + "https://aubergevagabonde.wordpress.com/2023/06/01/interlude-partie-3/", + "https://aubergevagabonde.wordpress.com/2023/06/07/interlude-partie-4/", + "https://aubergevagabonde.wordpress.com/2023/06/14/interlude-partie-5/" + ] + } +] \ No newline at end of file diff --git a/books.py b/books.py deleted file mode 100644 index 0d879bb..0000000 --- a/books.py +++ /dev/null @@ -1,152 +0,0 @@ -from os import makedirs, path -from typing import List - -from PIL import Image -from bs4 import BeautifulSoup, Tag -from lxml.html import fromstring -from pypub import Chapter, Epub, create_chapter_from_string # type: ignore -from pypub.const import SUPPORTED_TAGS # type: ignore -from requests import get - - -UNSUPPORTED_TAGS = ["a", "h3"] -OUTPUT_DIR = "output" - - -class MyChapter(Chapter): - def parse_etree(self): - """generate new filtered element-tree""" - etree = fromstring(self.content) - # check if we can minimalize the scope - body = etree.xpath(".//body") - etree = body[0] if body else etree - article = etree.xpath(".//article") - etree = article[0] if article else etree - # iterate elements in tree and delete/modify them - for elem in [elem for elem in etree.iter()][1:]: - if elem.tag in UNSUPPORTED_TAGS: - parent = elem.getparent() - parent.remove(elem) - # if element tag is supported - elif elem.tag in SUPPORTED_TAGS: - # remove attributes not approved for specific tag - for attr in elem.attrib: - if attr != "style" and attr not in SUPPORTED_TAGS[elem.tag]: - elem.attrib.pop(attr) - # if element is not supported, append children to parent - else: - parent = elem.getparent() - for child in elem.getchildren(): - parent.append(child) - parent.remove(elem) - # NOTE: this is a bug with lxml, some children have - # text in the parent included in the tail rather - # than text attribute, so we also append tail to text - if elem.tail and elem.tail.strip(): - parent.text = (parent.text or "") + elem.tail.strip() - # ensure all images with no src are removed - for img in etree.xpath(".//img"): - if "src" not in img.attrib: - img.getparent().remove(img) - # return new element-tree - return etree - - def replace_images(self, image_dir: str, timeout: int = 10): - try: - super().replace_images(image_dir, timeout) - except TimeoutError: - pass - for img in self.etree.xpath(".//img"): - if img.attrib["src"].startswith("http"): - img.getparent().remove(img) - else: - src = f"{path.dirname(image_dir)}/{img.attrib['src']}" - image = Image.open(src) - image.thumbnail((1000, 2000)) - image.save(src) - - -makedirs(name=OUTPUT_DIR, exist_ok=True) -cover_req = get( - url="https://i0.wp.com/wanderinginn.com/wp-content/uploads/2023/03/Wandering_Inn-Vol1-eCover.jpg", # noqa: E501 - stream=True, -) -cover_image = Image.open(cover_req.raw) -cover_image.thumbnail((500, 1000)) -cover_image.save(f"{OUTPUT_DIR}/cover.png") - - -def process_volume(epub: Epub, urls: List[str]): - for url in urls: - page_req = get(url) - page_html = BeautifulSoup(markup=page_req.text, features="lxml") - page_content = page_html.select_one("div.entry-content") - page_title = page_html.select_one("h1.entry-title") - - if not page_content or not page_title: - raise Exception("Missing title or content") - - title = page_title.get_text().strip() - if not title: - continue - - galleries = page_content.select("div.tiled-gallery") - - for gallery in galleries: - gallery.decompose() - - chapter = create_chapter_from_string( - html=page_content.prettify(), - title=title, - factory=MyChapter, - ) - - print(f"{epub.title} - {title}") - epub.add_chapter(chapter) - - epub.create_epub(OUTPUT_DIR) - - -def process_book( - url: str, creator: str, publisher: str, language: str, strip_first=False -): - toc_req = get(url) - toc_html = BeautifulSoup(markup=toc_req.text, features="lxml") - toc_content = toc_html.select("div.entry-content > p") - toc_title = toc_html.select_one("#site-title > span > a") - toc_date = toc_html.find(name="meta", property="article:modified_time") - - if not toc_title or type(toc_date) is not Tag: - raise Exception("Missing title or date") - title = toc_title.get_text().strip() - - if strip_first: - toc_content.pop(0) - - for i, toc_line in enumerate(toc_content): - if i % 2 == 0: - volume = toc_line.get_text().strip() - elif volume: - epub = Epub( - title=f"{title} - {volume}", - creator=creator, - language=language, - publisher=publisher, - date=toc_date["content"], - cover=f"{OUTPUT_DIR}/cover.png", - epub_dir=f"{OUTPUT_DIR}/{title} - {volume}", - ) - - urls = [] - for link in toc_line.select("a"): - urls.append(link.attrs["href"]) - - process_volume(epub=epub, urls=urls) - - -process_book( - url="https://aubergevagabonde.wordpress.com/sommaire/", - creator="Pirateaba", - publisher="ElliVia", - language="fr", -) diff --git a/poetry.lock b/poetry.lock index 23d2e50..50c64f6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,294 +1,154 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. - -[[package]] -name = "beautifulsoup4" -version = "4.12.3" -description = "Screen-scraping library" -optional = false -python-versions = ">=3.6.0" -files = [ - {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, - {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, -] - -[package.dependencies] -soupsieve = ">1.2" - -[package.extras] -cchardet = ["cchardet"] -chardet = ["chardet"] -charset-normalizer = ["charset-normalizer"] -html5lib = ["html5lib"] -lxml = ["lxml"] - -[[package]] -name = "black" -version = "24.2.0" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.8" -files = [ - {file = "black-24.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6981eae48b3b33399c8757036c7f5d48a535b962a7c2310d19361edeef64ce29"}, - {file = "black-24.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d533d5e3259720fdbc1b37444491b024003e012c5173f7d06825a77508085430"}, - {file = "black-24.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61a0391772490ddfb8a693c067df1ef5227257e72b0e4108482b8d41b5aee13f"}, - {file = "black-24.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:992e451b04667116680cb88f63449267c13e1ad134f30087dec8527242e9862a"}, - {file = "black-24.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:163baf4ef40e6897a2a9b83890e59141cc8c2a98f2dda5080dc15c00ee1e62cd"}, - {file = "black-24.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e37c99f89929af50ffaf912454b3e3b47fd64109659026b678c091a4cd450fb2"}, - {file = "black-24.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9de21bafcba9683853f6c96c2d515e364aee631b178eaa5145fc1c61a3cc92"}, - {file = "black-24.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:9db528bccb9e8e20c08e716b3b09c6bdd64da0dd129b11e160bf082d4642ac23"}, - {file = "black-24.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d84f29eb3ee44859052073b7636533ec995bd0f64e2fb43aeceefc70090e752b"}, - {file = "black-24.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e08fb9a15c914b81dd734ddd7fb10513016e5ce7e6704bdd5e1251ceee51ac9"}, - {file = "black-24.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:810d445ae6069ce64030c78ff6127cd9cd178a9ac3361435708b907d8a04c693"}, - {file = "black-24.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:ba15742a13de85e9b8f3239c8f807723991fbfae24bad92d34a2b12e81904982"}, - {file = "black-24.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7e53a8c630f71db01b28cd9602a1ada68c937cbf2c333e6ed041390d6968faf4"}, - {file = "black-24.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:93601c2deb321b4bad8f95df408e3fb3943d85012dddb6121336b8e24a0d1218"}, - {file = "black-24.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0057f800de6acc4407fe75bb147b0c2b5cbb7c3ed110d3e5999cd01184d53b0"}, - {file = "black-24.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:faf2ee02e6612577ba0181f4347bcbcf591eb122f7841ae5ba233d12c39dcb4d"}, - {file = "black-24.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:057c3dc602eaa6fdc451069bd027a1b2635028b575a6c3acfd63193ced20d9c8"}, - {file = "black-24.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:08654d0797e65f2423f850fc8e16a0ce50925f9337fb4a4a176a7aa4026e63f8"}, - {file = "black-24.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca610d29415ee1a30a3f30fab7a8f4144e9d34c89a235d81292a1edb2b55f540"}, - {file = "black-24.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:4dd76e9468d5536abd40ffbc7a247f83b2324f0c050556d9c371c2b9a9a95e31"}, - {file = "black-24.2.0-py3-none-any.whl", hash = "sha256:e8a6ae970537e67830776488bca52000eaa37fa63b9988e8c487458d9cd5ace6"}, - {file = "black-24.2.0.tar.gz", hash = "sha256:bce4f25c27c3435e4dace4815bcb2008b87e167e3bf4ee47ccdc5ce906eb4894"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "certifi" -version = "2023.11.17" +version = "2025.1.31" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, - {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, + {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, + {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, ] [[package]] -name = "charset-normalizer" -version = "3.3.2" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +name = "cffi" +version = "1.17.1" +description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, -] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, + {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, + {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, + {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, + {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, + {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, + {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, + {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, + {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, + {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, + {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, + {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, + {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, + {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, + {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] [package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} +pycparser = "*" [[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." +name = "curl-cffi" +version = "0.9.0b2" +description = "libcurl ffi bindings for Python, with impersonation support." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +python-versions = ">=3.8" files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "flake8" -version = "7.0.0" -description = "the modular source code checker: pep8 pyflakes and co" -optional = false -python-versions = ">=3.8.1" -files = [ - {file = "flake8-7.0.0-py2.py3-none-any.whl", hash = "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"}, - {file = "flake8-7.0.0.tar.gz", hash = "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132"}, + {file = "curl_cffi-0.9.0b2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b3a8093ad6ae6fd05bac0d2a961b92f3a5d99eccaa1c3ac7aef7756345705068"}, + {file = "curl_cffi-0.9.0b2-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:428bf207d735d2f84e9a2b0a55e1b9b4176a6056c365e669981137bf1b2cab06"}, + {file = "curl_cffi-0.9.0b2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bad4604e4f1a889fd5ae27451c9cb17d01c6106402f943e7dc7db23bccff3d5"}, + {file = "curl_cffi-0.9.0b2-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e54f6626d2943b11572b01a3535b487fb5c14787610589a459d1b9cc33788291"}, + {file = "curl_cffi-0.9.0b2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ef1fa5c31d1a0c2652c61b2fe879dd3551c513344a3c8c40d919ca96e2dc24c"}, + {file = "curl_cffi-0.9.0b2-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:68b62f9b52b22915d623ee1be7e2fbad2b672dadc5b155f547fb5f37763a65c0"}, + {file = "curl_cffi-0.9.0b2-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:3cbe98357b210ea5b5bbdeacda183de8b2bf2993aac5174579df6b32767e0af9"}, + {file = "curl_cffi-0.9.0b2-cp38-abi3-win32.whl", hash = "sha256:5b2b8386d95e176242c343d006ac68e3d54b1b30a47e3f49768857bca58bdc68"}, + {file = "curl_cffi-0.9.0b2-cp38-abi3-win_amd64.whl", hash = "sha256:7d1cf18bb4016dba36dd70a03a91ee4d0b74f1a9eb9cb7519b53e93cf06644c9"}, + {file = "curl_cffi-0.9.0b2.tar.gz", hash = "sha256:6f014ac84298e96e798b4d0132d02ee2ffbe843bf026916444ad94b1051317db"}, ] [package.dependencies] -mccabe = ">=0.7.0,<0.8.0" -pycodestyle = ">=2.11.0,<2.12.0" -pyflakes = ">=3.2.0,<3.3.0" - -[[package]] -name = "flake8-alphabetize" -version = "0.0.21" -description = "A Python style checker for alphabetizing import and __all__." -optional = false -python-versions = ">=3.7" -files = [ - {file = "flake8-alphabetize-0.0.21.tar.gz", hash = "sha256:8dbc66568d13c1c826c30e7ebe34380c0c4e25edfde3dc51bc0484c04c10b029"}, - {file = "flake8_alphabetize-0.0.21-py3-none-any.whl", hash = "sha256:4ffb6c6c27bc642ca55584fd6c14564d1c0ca657631573ee2b5ad1d2c159b4ae"}, -] - -[package.dependencies] -flake8 = ">3.0.0" -stdlib-list = {version = "0.8.0", markers = "python_version < \"3.10\""} - -[[package]] -name = "flake8-black" -version = "0.3.6" -description = "flake8 plugin to call black as a code style validator" -optional = false -python-versions = ">=3.7" -files = [ - {file = "flake8-black-0.3.6.tar.gz", hash = "sha256:0dfbca3274777792a5bcb2af887a4cad72c72d0e86c94e08e3a3de151bb41c34"}, - {file = "flake8_black-0.3.6-py3-none-any.whl", hash = "sha256:fe8ea2eca98d8a504f22040d9117347f6b367458366952862ac3586e7d4eeaca"}, -] - -[package.dependencies] -black = ">=22.1.0" -flake8 = ">=3" -tomli = {version = "*", markers = "python_version < \"3.11\""} +certifi = ">=2024.2.2" +cffi = ">=1.12.0" [package.extras] -develop = ["build", "twine"] +build = ["cibuildwheel", "wheel"] +dev = ["charset-normalizer (>=3.3.2,<4.0)", "coverage (>=6.4.1,<7.0)", "cryptography (>=42.0.5,<43.0)", "httpx (==0.23.1)", "mypy (>=1.9.0,<2.0)", "pytest (>=8.1.1,<9.0)", "pytest-asyncio (>=0.23.6,<1.0)", "pytest-trio (>=0.8.0,<1.0)", "ruff (>=0.3.5,<1.0)", "trio (>=0.25.0,<1.0)", "trustme (>=1.1.0,<2.0)", "typing-extensions", "uvicorn (>=0.29.0,<1.0)", "websockets (>=12.0,<13.0)"] +test = ["charset-normalizer (>=3.3.2,<4.0)", "cryptography (>=42.0.5,<43.0)", "fastapi (==0.110.0)", "httpx (==0.23.1)", "proxy.py (>=2.4.3,<3.0)", "pytest (>=8.1.1,<9.0)", "pytest-asyncio (>=0.23.6,<1.0)", "pytest-trio (>=0.8.0,<1.0)", "python-multipart (>=0.0.9,<1.0)", "trio (>=0.25.0,<1.0)", "trustme (>=1.1.0,<2.0)", "typing-extensions", "uvicorn (>=0.29.0,<1.0)", "websockets (>=12.0,<13.0)"] [[package]] -name = "flake8-pyproject" -version = "1.2.3" -description = "Flake8 plug-in loading the configuration from pyproject.toml" +name = "dataclasses" +version = "0.6" +description = "A backport of the dataclasses module for Python 3.6" optional = false -python-versions = ">= 3.6" +python-versions = "*" files = [ - {file = "flake8_pyproject-1.2.3-py3-none-any.whl", hash = "sha256:6249fe53545205af5e76837644dc80b4c10037e73a0e5db87ff562d75fb5bd4a"}, + {file = "dataclasses-0.6-py3-none-any.whl", hash = "sha256:454a69d788c7fda44efd71e259be79577822f5e3f53f029a22d08004e951dc9f"}, + {file = "dataclasses-0.6.tar.gz", hash = "sha256:6988bd2b895eef432d562370bb707d540f32f7360ab13da45340101bc2307d84"}, ] -[package.dependencies] -Flake8 = ">=5" -TOMLi = {version = "*", markers = "python_version < \"3.11\""} - -[package.extras] -dev = ["pyTest", "pyTest-cov"] - [[package]] -name = "idna" -version = "3.6" -description = "Internationalized Domain Names in Applications (IDNA)" +name = "filetype" +version = "1.2.0" +description = "Infer file type and MIME type of any file/buffer. No external dependencies." optional = false -python-versions = ">=3.5" +python-versions = "*" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25"}, + {file = "filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb"}, ] [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, + {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, ] [package.dependencies] @@ -297,222 +157,125 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] -[[package]] -name = "lxml" -version = "5.1.0" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -optional = false -python-versions = ">=3.6" -files = [ - {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:704f5572ff473a5f897745abebc6df40f22d4133c1e0a1f124e4f2bd3330ff7e"}, - {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d3c0f8567ffe7502d969c2c1b809892dc793b5d0665f602aad19895f8d508da"}, - {file = "lxml-5.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5fcfbebdb0c5d8d18b84118842f31965d59ee3e66996ac842e21f957eb76138c"}, - {file = "lxml-5.1.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f37c6d7106a9d6f0708d4e164b707037b7380fcd0b04c5bd9cae1fb46a856fb"}, - {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2befa20a13f1a75c751f47e00929fb3433d67eb9923c2c0b364de449121f447c"}, - {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22b7ee4c35f374e2c20337a95502057964d7e35b996b1c667b5c65c567d2252a"}, - {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf8443781533b8d37b295016a4b53c1494fa9a03573c09ca5104550c138d5c05"}, - {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82bddf0e72cb2af3cbba7cec1d2fd11fda0de6be8f4492223d4a268713ef2147"}, - {file = "lxml-5.1.0-cp310-cp310-win32.whl", hash = "sha256:b66aa6357b265670bb574f050ffceefb98549c721cf28351b748be1ef9577d93"}, - {file = "lxml-5.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:4946e7f59b7b6a9e27bef34422f645e9a368cb2be11bf1ef3cafc39a1f6ba68d"}, - {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:14deca1460b4b0f6b01f1ddc9557704e8b365f55c63070463f6c18619ebf964f"}, - {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed8c3d2cd329bf779b7ed38db176738f3f8be637bb395ce9629fc76f78afe3d4"}, - {file = "lxml-5.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:436a943c2900bb98123b06437cdd30580a61340fbdb7b28aaf345a459c19046a"}, - {file = "lxml-5.1.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acb6b2f96f60f70e7f34efe0c3ea34ca63f19ca63ce90019c6cbca6b676e81fa"}, - {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af8920ce4a55ff41167ddbc20077f5698c2e710ad3353d32a07d3264f3a2021e"}, - {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cfced4a069003d8913408e10ca8ed092c49a7f6cefee9bb74b6b3e860683b45"}, - {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9e5ac3437746189a9b4121db2a7b86056ac8786b12e88838696899328fc44bb2"}, - {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4c9bda132ad108b387c33fabfea47866af87f4ea6ffb79418004f0521e63204"}, - {file = "lxml-5.1.0-cp311-cp311-win32.whl", hash = "sha256:bc64d1b1dab08f679fb89c368f4c05693f58a9faf744c4d390d7ed1d8223869b"}, - {file = "lxml-5.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5ab722ae5a873d8dcee1f5f45ddd93c34210aed44ff2dc643b5025981908cda"}, - {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9aa543980ab1fbf1720969af1d99095a548ea42e00361e727c58a40832439114"}, - {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6f11b77ec0979f7e4dc5ae081325a2946f1fe424148d3945f943ceaede98adb8"}, - {file = "lxml-5.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a36c506e5f8aeb40680491d39ed94670487ce6614b9d27cabe45d94cd5d63e1e"}, - {file = "lxml-5.1.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f643ffd2669ffd4b5a3e9b41c909b72b2a1d5e4915da90a77e119b8d48ce867a"}, - {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16dd953fb719f0ffc5bc067428fc9e88f599e15723a85618c45847c96f11f431"}, - {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16018f7099245157564d7148165132c70adb272fb5a17c048ba70d9cc542a1a1"}, - {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82cd34f1081ae4ea2ede3d52f71b7be313756e99b4b5f829f89b12da552d3aa3"}, - {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:19a1bc898ae9f06bccb7c3e1dfd73897ecbbd2c96afe9095a6026016e5ca97b8"}, - {file = "lxml-5.1.0-cp312-cp312-win32.whl", hash = "sha256:13521a321a25c641b9ea127ef478b580b5ec82aa2e9fc076c86169d161798b01"}, - {file = "lxml-5.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:1ad17c20e3666c035db502c78b86e58ff6b5991906e55bdbef94977700c72623"}, - {file = "lxml-5.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:24ef5a4631c0b6cceaf2dbca21687e29725b7c4e171f33a8f8ce23c12558ded1"}, - {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d2900b7f5318bc7ad8631d3d40190b95ef2aa8cc59473b73b294e4a55e9f30f"}, - {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:601f4a75797d7a770daed8b42b97cd1bb1ba18bd51a9382077a6a247a12aa38d"}, - {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4b68c961b5cc402cbd99cca5eb2547e46ce77260eb705f4d117fd9c3f932b95"}, - {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:afd825e30f8d1f521713a5669b63657bcfe5980a916c95855060048b88e1adb7"}, - {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:262bc5f512a66b527d026518507e78c2f9c2bd9eb5c8aeeb9f0eb43fcb69dc67"}, - {file = "lxml-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:e856c1c7255c739434489ec9c8aa9cdf5179785d10ff20add308b5d673bed5cd"}, - {file = "lxml-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c7257171bb8d4432fe9d6fdde4d55fdbe663a63636a17f7f9aaba9bcb3153ad7"}, - {file = "lxml-5.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9e240ae0ba96477682aa87899d94ddec1cc7926f9df29b1dd57b39e797d5ab5"}, - {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a96f02ba1bcd330807fc060ed91d1f7a20853da6dd449e5da4b09bfcc08fdcf5"}, - {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3898ae2b58eeafedfe99e542a17859017d72d7f6a63de0f04f99c2cb125936"}, - {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61c5a7edbd7c695e54fca029ceb351fc45cd8860119a0f83e48be44e1c464862"}, - {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3aeca824b38ca78d9ee2ab82bd9883083d0492d9d17df065ba3b94e88e4d7ee6"}, - {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8f52fe6859b9db71ee609b0c0a70fea5f1e71c3462ecf144ca800d3f434f0764"}, - {file = "lxml-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:d42e3a3fc18acc88b838efded0e6ec3edf3e328a58c68fbd36a7263a874906c8"}, - {file = "lxml-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:eac68f96539b32fce2c9b47eb7c25bb2582bdaf1bbb360d25f564ee9e04c542b"}, - {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ae15347a88cf8af0949a9872b57a320d2605ae069bcdf047677318bc0bba45b1"}, - {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c26aab6ea9c54d3bed716b8851c8bfc40cb249b8e9880e250d1eddde9f709bf5"}, - {file = "lxml-5.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:342e95bddec3a698ac24378d61996b3ee5ba9acfeb253986002ac53c9a5f6f84"}, - {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:725e171e0b99a66ec8605ac77fa12239dbe061482ac854d25720e2294652eeaa"}, - {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d184e0d5c918cff04cdde9dbdf9600e960161d773666958c9d7b565ccc60c45"}, - {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:98f3f020a2b736566c707c8e034945c02aa94e124c24f77ca097c446f81b01f1"}, - {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d48fc57e7c1e3df57be5ae8614bab6d4e7b60f65c5457915c26892c41afc59e"}, - {file = "lxml-5.1.0-cp38-cp38-win32.whl", hash = "sha256:7ec465e6549ed97e9f1e5ed51c657c9ede767bc1c11552f7f4d022c4df4a977a"}, - {file = "lxml-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:b21b4031b53d25b0858d4e124f2f9131ffc1530431c6d1321805c90da78388d1"}, - {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:52427a7eadc98f9e62cb1368a5079ae826f94f05755d2d567d93ee1bc3ceb354"}, - {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6a2a2c724d97c1eb8cf966b16ca2915566a4904b9aad2ed9a09c748ffe14f969"}, - {file = "lxml-5.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843b9c835580d52828d8f69ea4302537337a21e6b4f1ec711a52241ba4a824f3"}, - {file = "lxml-5.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9b99f564659cfa704a2dd82d0684207b1aadf7d02d33e54845f9fc78e06b7581"}, - {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8b0c78e7aac24979ef09b7f50da871c2de2def043d468c4b41f512d831e912"}, - {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bcf86dfc8ff3e992fed847c077bd875d9e0ba2fa25d859c3a0f0f76f07f0c8d"}, - {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:49a9b4af45e8b925e1cd6f3b15bbba2c81e7dba6dce170c677c9cda547411e14"}, - {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:280f3edf15c2a967d923bcfb1f8f15337ad36f93525828b40a0f9d6c2ad24890"}, - {file = "lxml-5.1.0-cp39-cp39-win32.whl", hash = "sha256:ed7326563024b6e91fef6b6c7a1a2ff0a71b97793ac33dbbcf38f6005e51ff6e"}, - {file = "lxml-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:8d7b4beebb178e9183138f552238f7e6613162a42164233e2bda00cb3afac58f"}, - {file = "lxml-5.1.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9bd0ae7cc2b85320abd5e0abad5ccee5564ed5f0cc90245d2f9a8ef330a8deae"}, - {file = "lxml-5.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8c1d679df4361408b628f42b26a5d62bd3e9ba7f0c0e7969f925021554755aa"}, - {file = "lxml-5.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2ad3a8ce9e8a767131061a22cd28fdffa3cd2dc193f399ff7b81777f3520e372"}, - {file = "lxml-5.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:304128394c9c22b6569eba2a6d98392b56fbdfbad58f83ea702530be80d0f9df"}, - {file = "lxml-5.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d74fcaf87132ffc0447b3c685a9f862ffb5b43e70ea6beec2fb8057d5d2a1fea"}, - {file = "lxml-5.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8cf5877f7ed384dabfdcc37922c3191bf27e55b498fecece9fd5c2c7aaa34c33"}, - {file = "lxml-5.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:877efb968c3d7eb2dad540b6cabf2f1d3c0fbf4b2d309a3c141f79c7e0061324"}, - {file = "lxml-5.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f14a4fb1c1c402a22e6a341a24c1341b4a3def81b41cd354386dcb795f83897"}, - {file = "lxml-5.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:25663d6e99659544ee8fe1b89b1a8c0aaa5e34b103fab124b17fa958c4a324a6"}, - {file = "lxml-5.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8b9f19df998761babaa7f09e6bc169294eefafd6149aaa272081cbddc7ba4ca3"}, - {file = "lxml-5.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e53d7e6a98b64fe54775d23a7c669763451340c3d44ad5e3a3b48a1efbdc96f"}, - {file = "lxml-5.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c3cd1fc1dc7c376c54440aeaaa0dcc803d2126732ff5c6b68ccd619f2e64be4f"}, - {file = "lxml-5.1.0.tar.gz", hash = "sha256:3eea6ed6e6c918e468e693c41ef07f3c3acc310b70ddd9cc72d9ef84bc9564ca"}, -] - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=3.0.7)"] - [[package]] name = "markupsafe" -version = "2.1.4" +version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "MarkupSafe-2.1.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de8153a7aae3835484ac168a9a9bdaa0c5eee4e0bc595503c95d53b942879c84"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e888ff76ceb39601c59e219f281466c6d7e66bd375b4ec1ce83bcdc68306796b"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0b838c37ba596fcbfca71651a104a611543077156cb0a26fe0c475e1f152ee8"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac1ebf6983148b45b5fa48593950f90ed6d1d26300604f321c74a9ca1609f8e"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0fbad3d346df8f9d72622ac71b69565e621ada2ce6572f37c2eae8dacd60385d"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5291d98cd3ad9a562883468c690a2a238c4a6388ab3bd155b0c75dd55ece858"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a7cc49ef48a3c7a0005a949f3c04f8baa5409d3f663a1b36f0eba9bfe2a0396e"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b83041cda633871572f0d3c41dddd5582ad7d22f65a72eacd8d3d6d00291df26"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-win32.whl", hash = "sha256:0c26f67b3fe27302d3a412b85ef696792c4a2386293c53ba683a89562f9399b0"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:a76055d5cb1c23485d7ddae533229039b850db711c554a12ea64a0fd8a0129e2"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9e9e3c4020aa2dc62d5dd6743a69e399ce3de58320522948af6140ac959ab863"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0042d6a9880b38e1dd9ff83146cc3c9c18a059b9360ceae207805567aacccc69"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d03fea4c4e9fd0ad75dc2e7e2b6757b80c152c032ea1d1de487461d8140efc"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ab3a886a237f6e9c9f4f7d272067e712cdb4efa774bef494dccad08f39d8ae6"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abf5ebbec056817057bfafc0445916bb688a255a5146f900445d081db08cbabb"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e1a0d1924a5013d4f294087e00024ad25668234569289650929ab871231668e7"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e7902211afd0af05fbadcc9a312e4cf10f27b779cf1323e78d52377ae4b72bea"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c669391319973e49a7c6230c218a1e3044710bc1ce4c8e6eb71f7e6d43a2c131"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-win32.whl", hash = "sha256:31f57d64c336b8ccb1966d156932f3daa4fee74176b0fdc48ef580be774aae74"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-win_amd64.whl", hash = "sha256:54a7e1380dfece8847c71bf7e33da5d084e9b889c75eca19100ef98027bd9f56"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a76cd37d229fc385738bd1ce4cba2a121cf26b53864c1772694ad0ad348e509e"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:987d13fe1d23e12a66ca2073b8d2e2a75cec2ecb8eab43ff5624ba0ad42764bc"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5244324676254697fe5c181fc762284e2c5fceeb1c4e3e7f6aca2b6f107e60dc"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78bc995e004681246e85e28e068111a4c3f35f34e6c62da1471e844ee1446250"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4d176cfdfde84f732c4a53109b293d05883e952bbba68b857ae446fa3119b4f"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f9917691f410a2e0897d1ef99619fd3f7dd503647c8ff2475bf90c3cf222ad74"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f06e5a9e99b7df44640767842f414ed5d7bedaaa78cd817ce04bbd6fd86e2dd6"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:396549cea79e8ca4ba65525470d534e8a41070e6b3500ce2414921099cb73e8d"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-win32.whl", hash = "sha256:f6be2d708a9d0e9b0054856f07ac7070fbe1754be40ca8525d5adccdbda8f475"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-win_amd64.whl", hash = "sha256:5045e892cfdaecc5b4c01822f353cf2c8feb88a6ec1c0adef2a2e705eef0f656"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7a07f40ef8f0fbc5ef1000d0c78771f4d5ca03b4953fc162749772916b298fc4"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d18b66fe626ac412d96c2ab536306c736c66cf2a31c243a45025156cc190dc8a"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:698e84142f3f884114ea8cf83e7a67ca8f4ace8454e78fe960646c6c91c63bfa"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a3b78a5af63ec10d8604180380c13dcd870aba7928c1fe04e881d5c792dc4e"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:15866d7f2dc60cfdde12ebb4e75e41be862348b4728300c36cdf405e258415ec"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6aa5e2e7fc9bc042ae82d8b79d795b9a62bd8f15ba1e7594e3db243f158b5565"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:54635102ba3cf5da26eb6f96c4b8c53af8a9c0d97b64bdcb592596a6255d8518"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-win32.whl", hash = "sha256:3583a3a3ab7958e354dc1d25be74aee6228938312ee875a22330c4dc2e41beb0"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-win_amd64.whl", hash = "sha256:d6e427c7378c7f1b2bef6a344c925b8b63623d3321c09a237b7cc0e77dd98ceb"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bf1196dcc239e608605b716e7b166eb5faf4bc192f8a44b81e85251e62584bd2"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4df98d4a9cd6a88d6a585852f56f2155c9cdb6aec78361a19f938810aa020954"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b835aba863195269ea358cecc21b400276747cc977492319fd7682b8cd2c253d"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23984d1bdae01bee794267424af55eef4dfc038dc5d1272860669b2aa025c9e3"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c98c33ffe20e9a489145d97070a435ea0679fddaabcafe19982fe9c971987d5"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9896fca4a8eb246defc8b2a7ac77ef7553b638e04fbf170bff78a40fa8a91474"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b0fe73bac2fed83839dbdbe6da84ae2a31c11cfc1c777a40dbd8ac8a6ed1560f"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c7556bafeaa0a50e2fe7dc86e0382dea349ebcad8f010d5a7dc6ba568eaaa789"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-win32.whl", hash = "sha256:fc1a75aa8f11b87910ffd98de62b29d6520b6d6e8a3de69a70ca34dea85d2a8a"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-win_amd64.whl", hash = "sha256:3a66c36a3864df95e4f62f9167c734b3b1192cb0851b43d7cc08040c074c6279"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:765f036a3d00395a326df2835d8f86b637dbaf9832f90f5d196c3b8a7a5080cb"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:21e7af8091007bf4bebf4521184f4880a6acab8df0df52ef9e513d8e5db23411"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5c31fe855c77cad679b302aabc42d724ed87c043b1432d457f4976add1c2c3e"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7653fa39578957bc42e5ebc15cf4361d9e0ee4b702d7d5ec96cdac860953c5b4"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47bb5f0142b8b64ed1399b6b60f700a580335c8e1c57f2f15587bd072012decc"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:fe8512ed897d5daf089e5bd010c3dc03bb1bdae00b35588c49b98268d4a01e00"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:36d7626a8cca4d34216875aee5a1d3d654bb3dac201c1c003d182283e3205949"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b6f14a9cd50c3cb100eb94b3273131c80d102e19bb20253ac7bd7336118a673a"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-win32.whl", hash = "sha256:c8f253a84dbd2c63c19590fa86a032ef3d8cc18923b8049d91bcdeeb2581fbf6"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:8b570a1537367b52396e53325769608f2a687ec9a4363647af1cded8928af959"}, - {file = "MarkupSafe-2.1.4.tar.gz", hash = "sha256:3aae9af4cac263007fd6309c64c6ab4506dd2b79382d9d19a1994f9240b8db4f"}, -] - -[[package]] -name = "mccabe" -version = "0.7.0" -description = "McCabe checker, plugin for flake8" -optional = false -python-versions = ">=3.6" -files = [ - {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, - {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] [[package]] name = "mypy" -version = "1.8.0" +version = "1.15.0" description = "Optional static typing for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"}, - {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"}, - {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"}, - {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"}, - {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"}, - {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"}, - {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"}, - {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"}, - {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"}, - {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"}, - {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"}, - {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"}, - {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"}, - {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"}, - {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"}, - {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"}, - {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"}, - {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"}, - {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"}, - {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"}, - {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"}, - {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"}, - {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"}, - {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"}, - {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"}, - {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"}, - {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"}, + {file = "mypy-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13"}, + {file = "mypy-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559"}, + {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b"}, + {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3"}, + {file = "mypy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b"}, + {file = "mypy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828"}, + {file = "mypy-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f"}, + {file = "mypy-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5"}, + {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e"}, + {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c"}, + {file = "mypy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f"}, + {file = "mypy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f"}, + {file = "mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd"}, + {file = "mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f"}, + {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464"}, + {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee"}, + {file = "mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e"}, + {file = "mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22"}, + {file = "mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445"}, + {file = "mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d"}, + {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5"}, + {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036"}, + {file = "mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357"}, + {file = "mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf"}, + {file = "mypy-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078"}, + {file = "mypy-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba"}, + {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5"}, + {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b"}, + {file = "mypy-1.15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2"}, + {file = "mypy-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980"}, + {file = "mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e"}, + {file = "mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43"}, ] [package.dependencies] -mypy-extensions = ">=1.0.0" +mypy_extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.1.0" +typing_extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] install-types = ["pip"] mypyc = ["setuptools (>=50)"] reports = ["lxml"] @@ -528,318 +291,217 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] -[[package]] -name = "packaging" -version = "23.2" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, -] - -[[package]] -name = "pathspec" -version = "0.12.1" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, - {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, -] - [[package]] name = "pillow" -version = "10.2.0" +version = "11.1.0" description = "Python Imaging Library (Fork)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, - {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, - {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, - {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, - {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, - {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, - {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, - {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, - {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, - {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, - {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, - {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, - {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, - {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, - {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, - {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, - {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, - {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, - {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, - {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, - {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, - {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, - {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, - {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, - {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, - {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, - {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, - {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, - {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, - {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, - {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, - {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, - {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, - {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, - {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, - {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, + {file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"}, + {file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07dba04c5e22824816b2615ad7a7484432d7f540e6fa86af60d2de57b0fcee2"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e267b0ed063341f3e60acd25c05200df4193e15a4a5807075cd71225a2386e26"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd165131fd51697e22421d0e467997ad31621b74bfc0b75956608cb2906dda07"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:abc56501c3fd148d60659aae0af6ddc149660469082859fa7b066a298bde9482"}, + {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:54ce1c9a16a9561b6d6d8cb30089ab1e5eb66918cb47d457bd996ef34182922e"}, + {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73ddde795ee9b06257dac5ad42fcb07f3b9b813f8c1f7f870f402f4dc54b5269"}, + {file = "pillow-11.1.0-cp310-cp310-win32.whl", hash = "sha256:3a5fe20a7b66e8135d7fd617b13272626a28278d0e578c98720d9ba4b2439d49"}, + {file = "pillow-11.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:b6123aa4a59d75f06e9dd3dac5bf8bc9aa383121bb3dd9a7a612e05eabc9961a"}, + {file = "pillow-11.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:a76da0a31da6fcae4210aa94fd779c65c75786bc9af06289cd1c184451ef7a65"}, + {file = "pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457"}, + {file = "pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1"}, + {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2"}, + {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96"}, + {file = "pillow-11.1.0-cp311-cp311-win32.whl", hash = "sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f"}, + {file = "pillow-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761"}, + {file = "pillow-11.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71"}, + {file = "pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a"}, + {file = "pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f"}, + {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91"}, + {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c"}, + {file = "pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6"}, + {file = "pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf"}, + {file = "pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5"}, + {file = "pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc"}, + {file = "pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114"}, + {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352"}, + {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3"}, + {file = "pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9"}, + {file = "pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c"}, + {file = "pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65"}, + {file = "pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861"}, + {file = "pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081"}, + {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c"}, + {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547"}, + {file = "pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab"}, + {file = "pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9"}, + {file = "pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe"}, + {file = "pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756"}, + {file = "pillow-11.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bf902d7413c82a1bfa08b06a070876132a5ae6b2388e2712aab3a7cbc02205c6"}, + {file = "pillow-11.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1eec9d950b6fe688edee07138993e54ee4ae634c51443cfb7c1e7613322718e"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e275ee4cb11c262bd108ab2081f750db2a1c0b8c12c1897f27b160c8bd57bbc"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db853948ce4e718f2fc775b75c37ba2efb6aaea41a1a5fc57f0af59eee774b2"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ab8a209b8485d3db694fa97a896d96dd6533d63c22829043fd9de627060beade"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:54251ef02a2309b5eec99d151ebf5c9904b77976c8abdcbce7891ed22df53884"}, + {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5bb94705aea800051a743aa4874bb1397d4695fb0583ba5e425ee0328757f196"}, + {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89dbdb3e6e9594d512780a5a1c42801879628b38e3efc7038094430844e271d8"}, + {file = "pillow-11.1.0-cp39-cp39-win32.whl", hash = "sha256:e5449ca63da169a2e6068dd0e2fcc8d91f9558aba89ff6d02121ca8ab11e79e5"}, + {file = "pillow-11.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:3362c6ca227e65c54bf71a5f88b3d4565ff1bcbc63ae72c34b07bbb1cc59a43f"}, + {file = "pillow-11.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:b20be51b37a75cc54c2c55def3fa2c65bb94ba859dde241cd0a4fd302de5ae0a"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8c730dc3a83e5ac137fbc92dfcfe1511ce3b2b5d7578315b63dbbb76f7f51d90"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d33d2fae0e8b170b6a6c57400e077412240f6f5bb2a342cf1ee512a787942bb"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8d65b38173085f24bc07f8b6c505cbb7418009fa1a1fcb111b1f4961814a442"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:015c6e863faa4779251436db398ae75051469f7c903b043a48f078e437656f83"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d44ff19eea13ae4acdaaab0179fa68c0c6f2f45d66a4d8ec1eda7d6cecbcc15f"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d3d8da4a631471dfaf94c10c85f5277b1f8e42ac42bade1ac67da4b4a7359b73"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4637b88343166249fe8aa94e7c4a62a180c4b3898283bb5d3d2fd5fe10d8e4e0"}, + {file = "pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] fpx = ["olefile"] mic = ["olefile"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] typing = ["typing-extensions"] xmp = ["defusedxml"] [[package]] -name = "platformdirs" -version = "4.1.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +name = "pycparser" +version = "2.22" +description = "C parser in Python" optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, - {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, -] - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - -[[package]] -name = "pycodestyle" -version = "2.11.1" -description = "Python style guide checker" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, - {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, -] - -[[package]] -name = "pyflakes" -version = "3.2.0" -description = "passive checker of Python programs" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, - {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] [[package]] name = "pypub3" -version = "1.0.2" +version = "2.0.7" description = "A python3 library to generate custom epub books." optional = false python-versions = ">=3.6" files = [ - {file = "pypub3-1.0.2.tar.gz", hash = "sha256:acdcc7516251cdc500e43a24022bf999a98526f752dda40dfd108a1928c831b2"}, + {file = "pypub3-2.0.7-py3-none-any.whl", hash = "sha256:c8a468eecc3922e605db6b99667f346b246b7d4535d49aea9d416f1e51ae57af"}, + {file = "pypub3-2.0.7.tar.gz", hash = "sha256:e83385440bb3f256d825875a8c15d442e1f02978f3a280facd23e953878dad30"}, ] [package.dependencies] -jinja2 = "*" -lxml = "*" -pillow = "*" +dataclasses = ">=0.6" +filetype = ">=1.2.0" +jinja2 = ">=3.1.2" +pillow = ">=10.0.0" +pyxml3 = ">=0.0.2" [[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." +name = "pyxml3" +version = "0.0.4" +description = "Pure python3 Alternative to stdlib xml.etree with HTML support" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyxml3-0.0.4.tar.gz", hash = "sha256:64d58131ea578cb050bc1434925c19a6ffff4c838769aeacfe33144698633b13"}, +] + +[package.dependencies] +dataclasses = "*" +typing_extensions = "*" + +[[package]] +name = "ruff" +version = "0.9.6" +description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "ruff-0.9.6-py3-none-linux_armv6l.whl", hash = "sha256:2f218f356dd2d995839f1941322ff021c72a492c470f0b26a34f844c29cdf5ba"}, + {file = "ruff-0.9.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b908ff4df65dad7b251c9968a2e4560836d8f5487c2f0cc238321ed951ea0504"}, + {file = "ruff-0.9.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b109c0ad2ececf42e75fa99dc4043ff72a357436bb171900714a9ea581ddef83"}, + {file = "ruff-0.9.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1de4367cca3dac99bcbd15c161404e849bb0bfd543664db39232648dc00112dc"}, + {file = "ruff-0.9.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac3ee4d7c2c92ddfdaedf0bf31b2b176fa7aa8950efc454628d477394d35638b"}, + {file = "ruff-0.9.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dc1edd1775270e6aa2386119aea692039781429f0be1e0949ea5884e011aa8e"}, + {file = "ruff-0.9.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:4a091729086dffa4bd070aa5dab7e39cc6b9d62eb2bef8f3d91172d30d599666"}, + {file = "ruff-0.9.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1bbc6808bf7b15796cef0815e1dfb796fbd383e7dbd4334709642649625e7c5"}, + {file = "ruff-0.9.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:589d1d9f25b5754ff230dce914a174a7c951a85a4e9270613a2b74231fdac2f5"}, + {file = "ruff-0.9.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc61dd5131742e21103fbbdcad683a8813be0e3c204472d520d9a5021ca8b217"}, + {file = "ruff-0.9.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5e2d9126161d0357e5c8f30b0bd6168d2c3872372f14481136d13de9937f79b6"}, + {file = "ruff-0.9.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:68660eab1a8e65babb5229a1f97b46e3120923757a68b5413d8561f8a85d4897"}, + {file = "ruff-0.9.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c4cae6c4cc7b9b4017c71114115db0445b00a16de3bcde0946273e8392856f08"}, + {file = "ruff-0.9.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:19f505b643228b417c1111a2a536424ddde0db4ef9023b9e04a46ed8a1cb4656"}, + {file = "ruff-0.9.6-py3-none-win32.whl", hash = "sha256:194d8402bceef1b31164909540a597e0d913c0e4952015a5b40e28c146121b5d"}, + {file = "ruff-0.9.6-py3-none-win_amd64.whl", hash = "sha256:03482d5c09d90d4ee3f40d97578423698ad895c87314c4de39ed2af945633caa"}, + {file = "ruff-0.9.6-py3-none-win_arm64.whl", hash = "sha256:0e2bb706a2be7ddfea4a4af918562fdc1bcb16df255e5fa595bbd800ce322a5a"}, + {file = "ruff-0.9.6.tar.gz", hash = "sha256:81761592f72b620ec8fa1068a6fd00e98a5ebee342a3642efd84454f3031dca9"}, ] -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "soupsieve" -version = "2.5" -description = "A modern CSS selector implementation for Beautiful Soup." -optional = false -python-versions = ">=3.8" -files = [ - {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, - {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, -] - -[[package]] -name = "stdlib-list" -version = "0.8.0" -description = "A list of Python Standard Libraries (2.6-7, 3.2-9)." -optional = false -python-versions = "*" -files = [ - {file = "stdlib-list-0.8.0.tar.gz", hash = "sha256:a1e503719720d71e2ed70ed809b385c60cd3fb555ba7ec046b96360d30b16d9f"}, - {file = "stdlib_list-0.8.0-py3-none-any.whl", hash = "sha256:2ae0712a55b68f3fbbc9e58d6fa1b646a062188f49745b495f94d3310a9fdd3e"}, -] - -[package.extras] -develop = ["sphinx"] - [[package]] name = "tomli" -version = "2.0.1" +version = "2.2.1" description = "A lil' TOML parser" optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "types-beautifulsoup4" -version = "4.12.0.20240106" -description = "Typing stubs for beautifulsoup4" -optional = false python-versions = ">=3.8" files = [ - {file = "types-beautifulsoup4-4.12.0.20240106.tar.gz", hash = "sha256:98d628985b71b140bd3bc22a8cb0ab603c2f2d08f20d37925965eb4a21739be8"}, - {file = "types_beautifulsoup4-4.12.0.20240106-py3-none-any.whl", hash = "sha256:cbdd60ab8aeac737ac014431b6e921b43e84279c0405fdd25a6900bb0e71da5b"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] -[package.dependencies] -types-html5lib = "*" - -[[package]] -name = "types-html5lib" -version = "1.1.11.20240106" -description = "Typing stubs for html5lib" -optional = false -python-versions = ">=3.8" -files = [ - {file = "types-html5lib-1.1.11.20240106.tar.gz", hash = "sha256:fc3a1b18eb601b3eeaf92c900bd67675c0a4fa1dd1d2a2893ebdb46923547ee9"}, - {file = "types_html5lib-1.1.11.20240106-py3-none-any.whl", hash = "sha256:61993cb89220107481e0f1da65c388ff8cf3d8c5f6e8483c97559639a596b697"}, -] - -[[package]] -name = "types-lxml" -version = "2024.2.9" -description = "Complete lxml external type annotation" -optional = false -python-versions = ">=3.8" -files = [ - {file = "types-lxml-2024.2.9.tar.gz", hash = "sha256:f584856fe84cc05f7f5fd0da00308101f75a94a1d4e48ca6e6ab9eade0052d49"}, - {file = "types_lxml-2024.2.9-py3-none-any.whl", hash = "sha256:740e3f09ba8e264c81fe0e1ea79171157f42489fab235c92b0d03ca00963b238"}, -] - -[package.dependencies] -types-beautifulsoup4 = "*" -typing-extensions = ">=4.5,<5.0" - -[package.extras] -dev = ["tox (>=4.0,<5.0)"] - -[[package]] -name = "types-pillow" -version = "10.2.0.20240125" -description = "Typing stubs for Pillow" -optional = false -python-versions = ">=3.8" -files = [ - {file = "types-Pillow-10.2.0.20240125.tar.gz", hash = "sha256:c449b2c43b9fdbe0494a7b950e6b39a4e50516091213fec24ef3f33c1d017717"}, - {file = "types_Pillow-10.2.0.20240125-py3-none-any.whl", hash = "sha256:322dbae32b4b7918da5e8a47c50ac0f24b0aa72a804a23857620f2722b03c858"}, -] - -[[package]] -name = "types-requests" -version = "2.31.0.20240125" -description = "Typing stubs for requests" -optional = false -python-versions = ">=3.8" -files = [ - {file = "types-requests-2.31.0.20240125.tar.gz", hash = "sha256:03a28ce1d7cd54199148e043b2079cdded22d6795d19a2c2a6791a4b2b5e2eb5"}, - {file = "types_requests-2.31.0.20240125-py3-none-any.whl", hash = "sha256:9592a9a4cb92d6d75d9b491a41477272b710e021011a2a3061157e2fb1f1a5d1"}, -] - -[package.dependencies] -urllib3 = ">=2" - [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] -[[package]] -name = "urllib3" -version = "2.1.0" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.8" -files = [ - {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, - {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - [metadata] lock-version = "2.0" -python-versions = "^3.8.1" -content-hash = "af13f04e83721ef52d2add825ef75663c817eb70bff22ee33a23d043e93d6cab" +python-versions = "^3.9" +content-hash = "c0d1ee756a561834a3d8e62d8b9c75f72521446cf5f288b4f7de710203cd5c38" diff --git a/pyproject.toml b/pyproject.toml index d1798c9..9988315 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,32 +1,25 @@ [tool.poetry] -name = "auberge-vagabonde" -version = "0.1.0" +name = "auberge_vagabonde" +version = "0.0.0" description = "Convert The Wandering Inn Into Ebooks" authors = ["XĂ©fir Destiny "] license = "WTFPL" [tool.poetry.dependencies] -python = "^3.8.1" -beautifulsoup4 = "^4.12.3" -lxml = "^5.1.0" -pillow = "^10.2.0" -pypub3 = "^1.0.2" -requests = "^2.31.0" +python = "^3.9" +curl_cffi = "^0.9.0b2" +pypub3 = "^2.0.7" +pyxml3 = "^0.0.4" [tool.poetry.group.dev.dependencies] -black = "^24.1.0" -flake8 = "^7.0.0" -flake8-alphabetize = "^0.0.21" -flake8-black = "^0.3.6" -flake8-pyproject = "^1.2.3" -mypy = "^1.8.0" -types-beautifulsoup4 = "^4.12" -types-lxml = "^2024.0.0" -types-pillow = "^10.2" -types-requests = "^2.31" +mypy = "^1.15.0" +ruff = "^0.9.6" -[tool.flake8] -max-line-length = 100 +[tool.mypy] +strict = true + +[tool.ruff.lint] +select = ["E", "F", "I", "UP"] [build-system] requires = ["poetry-core"] diff --git a/upload.sh b/upload.sh deleted file mode 100644 index fd9d1aa..0000000 --- a/upload.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -for FILE in output/* -do - FILE_URL=$(sed "s/ /%20/g" <<< "${FILE##*/}") - curl -Ss -u "${USERNAME}":"${PASSWORD}" -T "${FILE}" "https://cloud.crystalyx.net/remote.php/dav/files/${USERNAME}/Public/TWI/${FILE_URL}" -done