From f5d610d959e6f1d59a78faee4ab8ce99407d89bb Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 11:29:02 +0900 Subject: [PATCH 01/27] Move preflight into tex2pdf --- preflight_parser/Makefile => Makefile | 0 pyproject.toml | 28 +++++++++++++++++- .../check_all_submissions.sh | 2 +- .../preflight_parser/__init__.py | 0 .../preflight_parser/__main__.py | 0 .../preflight_parser/kpse_search.lua | 0 .../tests/fixture/bye-no-newline/main.tex | 0 .../fixture/include_1/ImageOfNobelPrize.jpg | 0 .../fixture/include_1/NOBEL_PRIZE_WINNER.TEX | 0 .../tests/fixture/multi_tex_1/fake-file-1.Tex | 0 .../tests/fixture/multi_tex_1/fake-file-1.bbl | 0 .../tests/fixture/multi_tex_1/fake-file-2.bbl | 0 .../tests/fixture/multi_tex_1/fake-file-2.tex | 0 .../tests/fixture/multi_tex_1/fake-file-3.TEX | 0 .../tests/fixture/multi_tex_2/00README.XXX | 0 .../tests/fixture/multi_tex_2/fake-file-1.Tex | 0 .../tests/fixture/multi_tex_2/fake-file-1.bbl | 0 .../tests/fixture/multi_tex_2/fake-file-2.bbl | 0 .../tests/fixture/multi_tex_2/fake-file-2.tex | 0 .../tests/fixture/multi_tex_2/fake-file-3.TEX | 0 .../tests/fixture/multi_tex_3/main.tex | 0 .../tests/fixture/multi_tex_3/ms.tex | 0 .../tests/fixture/multi_tex_3/mssection.tex | 0 .../tests/fixture/multi_tex_3/mssection2.tex | 0 .../tests/fixture/multi_tex_3/newmain.tex | 0 .../tests/fixture/multi_tex_3/plain-main.tex | 0 .../fixture/multi_tex_3/plainclosing.tex | 0 .../fixture/multi_tex_3/plainsection1.tex | 0 .../fixture/multi_tex_3/plainsection2.tex | 0 .../fixture/multi_tex_3/plainsection3.tex | 0 .../tests/fixture/multi_tex_3/section1.tex | 0 .../tests/fixture/multi_tex_3/section2.tex | 0 .../tests/fixture/multi_tex_3/section3.tex | 0 .../fixture/multi_tex_3/supplement one.tex | 0 .../fixture/multi_tex_3/supplement two.tex | 0 .../tests/fixture/multi_tex_3/supplement1.tex | 0 .../tests/fixture/multi_tex_3/supplement2.tex | 0 .../tests/fixture/pdfoutput_1/artic.cls | 0 .../tests/fixture/pdfoutput_1/fake-file-1.Tex | 0 .../tests/fixture/pdfoutput_1/fake-file-1.bbl | 0 .../tests/fixture/pdfoutput_1/fake-file-2.bbl | 0 .../tests/fixture/pdfoutput_1/fake-file-2.tex | 0 .../fixture/pdfoutput_1/test/fake-file-3.inc | 0 .../tests/fixture/pre-postamble/main.tex | 0 .../tests/fixture/pre-postamble/postamble.tex | 0 .../tests/fixture/pre-postamble/preamble.tex | 0 .../tests/fixture/single-pdf/hello-world.pdf | Bin .../single_tex_1/NOBEL_PRIZE_WINNER.TEX | 0 .../tests/fixture/single_tex_2/00README.XXX | 0 .../fixture/single_tex_2/fake-file-1.bbl | 0 .../fixture/single_tex_2/fake-file-1.tex | 0 .../fixture/single_tex_2/fake-file-2.TEX | 0 .../fixture/single_tex_2/fake-file-2.bbl | 0 .../fixture/single_tex_2/fake-file-3.tex | 0 .../fixture/single_tex_3/fake-file-1.bbl | 0 .../fixture/single_tex_3/fake-file-1.tex | 0 .../fixture/single_tex_3/fake-file-2.TEX | 0 .../fixture/single_tex_3/fake-file-3.tex | 0 .../fixture/single_tex_4/fake-file-1.bbl | 0 .../fixture/single_tex_4/fake-file-1.tex | 0 .../fixture/single_tex_4/fake-file-2.TEX | 0 .../fixture/single_tex_4/fake-file-3.tex | 0 .../fixture/single_tex_4/fake-package.tex | 0 .../tests/fixture/single_tex_5/00README.XXX | 0 .../fixture/single_tex_5/fake-file-1.bbl | 0 .../fixture/single_tex_5/fake-file-1.tex | 0 .../fixture/single_tex_5/fake-file-2.TEX | 0 .../fixture/single_tex_5/fake-file-2.bbl | 0 .../fixture/single_tex_5/fake-file-3.tex | 0 .../tests/test_base_models.py | 0 .../preflight_parser}/tests/test_preflight.py | 0 .../preflight_parser}/tests/test_typings.py | 0 72 files changed, 28 insertions(+), 2 deletions(-) rename preflight_parser/Makefile => Makefile (100%) rename {preflight_parser => scripts}/check_all_submissions.sh (95%) rename {preflight_parser => tex2pdf}/preflight_parser/__init__.py (100%) rename {preflight_parser => tex2pdf}/preflight_parser/__main__.py (100%) rename {preflight_parser => tex2pdf}/preflight_parser/kpse_search.lua (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/bye-no-newline/main.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/include_1/ImageOfNobelPrize.jpg (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/include_1/NOBEL_PRIZE_WINNER.TEX (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_1/fake-file-1.Tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_1/fake-file-1.bbl (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_1/fake-file-2.bbl (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_1/fake-file-2.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_1/fake-file-3.TEX (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_2/00README.XXX (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_2/fake-file-1.Tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_2/fake-file-1.bbl (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_2/fake-file-2.bbl (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_2/fake-file-2.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_2/fake-file-3.TEX (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/main.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/ms.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/mssection.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/mssection2.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/newmain.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/plain-main.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/plainclosing.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/plainsection1.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/plainsection2.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/plainsection3.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/section1.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/section2.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/section3.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/supplement one.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/supplement two.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/supplement1.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/multi_tex_3/supplement2.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/pdfoutput_1/artic.cls (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/pdfoutput_1/fake-file-1.Tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/pdfoutput_1/fake-file-1.bbl (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/pdfoutput_1/fake-file-2.bbl (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/pdfoutput_1/fake-file-2.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/pdfoutput_1/test/fake-file-3.inc (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/pre-postamble/main.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/pre-postamble/postamble.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/pre-postamble/preamble.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single-pdf/hello-world.pdf (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_1/NOBEL_PRIZE_WINNER.TEX (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_2/00README.XXX (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_2/fake-file-1.bbl (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_2/fake-file-1.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_2/fake-file-2.TEX (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_2/fake-file-2.bbl (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_2/fake-file-3.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_3/fake-file-1.bbl (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_3/fake-file-1.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_3/fake-file-2.TEX (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_3/fake-file-3.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_4/fake-file-1.bbl (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_4/fake-file-1.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_4/fake-file-2.TEX (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_4/fake-file-3.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_4/fake-package.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_5/00README.XXX (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_5/fake-file-1.bbl (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_5/fake-file-1.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_5/fake-file-2.TEX (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_5/fake-file-2.bbl (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/fixture/single_tex_5/fake-file-3.tex (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/test_base_models.py (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/test_preflight.py (100%) rename {preflight_parser => tex2pdf/preflight_parser}/tests/test_typings.py (100%) diff --git a/preflight_parser/Makefile b/Makefile similarity index 100% rename from preflight_parser/Makefile rename to Makefile diff --git a/pyproject.toml b/pyproject.toml index 2408b6f..6dee209 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,27 @@ +[tool.poetry] +name = "arxiv-tex2pdf" +version = "0.1.0" +description = "Compiling TeX to PDF as a service" +authors = ["arxiv.org"] +packages = [ + { include = "tex2pdf" } +] +include = ["LICENSE", "README.md"] + +[tool.poetry.dependencies] +python = "^3.11" +chardet = "^5.0" +pydantic = "==1.10.*" + +[tool.poetry.group.dev.dependencies] +ruff = "*" +pytest = "^8.3.3" +mypy = "*" +mypy-extensions = "*" + [tool.ruff] line-length = 120 - +extend-exclude = ["tex2pdf/preflight_parser/tests"] lint.select = [ "F", # Pyflakes @@ -39,3 +60,8 @@ line-length = 120 [tool.pylint] max-line-length = 120 +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" + + diff --git a/preflight_parser/check_all_submissions.sh b/scripts/check_all_submissions.sh similarity index 95% rename from preflight_parser/check_all_submissions.sh rename to scripts/check_all_submissions.sh index eba4505..1a5ae74 100644 --- a/preflight_parser/check_all_submissions.sh +++ b/scripts/check_all_submissions.sh @@ -43,7 +43,7 @@ do_one () { rm -rf __tmp__/* tar -C __tmp__ -xf $1 bn=$(basename $1 .tar.gz) - (python -m preflight_parser __tmp__ | json_pp) > json/$bn.json 2> json/$bn.log + (python -m tex2pdf.preflight_parser __tmp__ | json_pp) > json/$bn.json 2> json/$bn.log # remove .log file if it has 0 size if ! [ -s json/$bn.log ] ; then rm json/$bn.log diff --git a/preflight_parser/preflight_parser/__init__.py b/tex2pdf/preflight_parser/__init__.py similarity index 100% rename from preflight_parser/preflight_parser/__init__.py rename to tex2pdf/preflight_parser/__init__.py diff --git a/preflight_parser/preflight_parser/__main__.py b/tex2pdf/preflight_parser/__main__.py similarity index 100% rename from preflight_parser/preflight_parser/__main__.py rename to tex2pdf/preflight_parser/__main__.py diff --git a/preflight_parser/preflight_parser/kpse_search.lua b/tex2pdf/preflight_parser/kpse_search.lua similarity index 100% rename from preflight_parser/preflight_parser/kpse_search.lua rename to tex2pdf/preflight_parser/kpse_search.lua diff --git a/preflight_parser/tests/fixture/bye-no-newline/main.tex b/tex2pdf/preflight_parser/tests/fixture/bye-no-newline/main.tex similarity index 100% rename from preflight_parser/tests/fixture/bye-no-newline/main.tex rename to tex2pdf/preflight_parser/tests/fixture/bye-no-newline/main.tex diff --git a/preflight_parser/tests/fixture/include_1/ImageOfNobelPrize.jpg b/tex2pdf/preflight_parser/tests/fixture/include_1/ImageOfNobelPrize.jpg similarity index 100% rename from preflight_parser/tests/fixture/include_1/ImageOfNobelPrize.jpg rename to tex2pdf/preflight_parser/tests/fixture/include_1/ImageOfNobelPrize.jpg diff --git a/preflight_parser/tests/fixture/include_1/NOBEL_PRIZE_WINNER.TEX b/tex2pdf/preflight_parser/tests/fixture/include_1/NOBEL_PRIZE_WINNER.TEX similarity index 100% rename from preflight_parser/tests/fixture/include_1/NOBEL_PRIZE_WINNER.TEX rename to tex2pdf/preflight_parser/tests/fixture/include_1/NOBEL_PRIZE_WINNER.TEX diff --git a/preflight_parser/tests/fixture/multi_tex_1/fake-file-1.Tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-1.Tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_1/fake-file-1.Tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-1.Tex diff --git a/preflight_parser/tests/fixture/multi_tex_1/fake-file-1.bbl b/tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-1.bbl similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_1/fake-file-1.bbl rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-1.bbl diff --git a/preflight_parser/tests/fixture/multi_tex_1/fake-file-2.bbl b/tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-2.bbl similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_1/fake-file-2.bbl rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-2.bbl diff --git a/preflight_parser/tests/fixture/multi_tex_1/fake-file-2.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-2.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_1/fake-file-2.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-2.tex diff --git a/preflight_parser/tests/fixture/multi_tex_1/fake-file-3.TEX b/tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-3.TEX similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_1/fake-file-3.TEX rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-3.TEX diff --git a/preflight_parser/tests/fixture/multi_tex_2/00README.XXX b/tex2pdf/preflight_parser/tests/fixture/multi_tex_2/00README.XXX similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_2/00README.XXX rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_2/00README.XXX diff --git a/preflight_parser/tests/fixture/multi_tex_2/fake-file-1.Tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-1.Tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_2/fake-file-1.Tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-1.Tex diff --git a/preflight_parser/tests/fixture/multi_tex_2/fake-file-1.bbl b/tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-1.bbl similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_2/fake-file-1.bbl rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-1.bbl diff --git a/preflight_parser/tests/fixture/multi_tex_2/fake-file-2.bbl b/tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-2.bbl similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_2/fake-file-2.bbl rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-2.bbl diff --git a/preflight_parser/tests/fixture/multi_tex_2/fake-file-2.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-2.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_2/fake-file-2.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-2.tex diff --git a/preflight_parser/tests/fixture/multi_tex_2/fake-file-3.TEX b/tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-3.TEX similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_2/fake-file-3.TEX rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-3.TEX diff --git a/preflight_parser/tests/fixture/multi_tex_3/main.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/main.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/main.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/main.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/ms.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/ms.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/ms.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/ms.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/mssection.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/mssection.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/mssection.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/mssection.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/mssection2.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/mssection2.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/mssection2.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/mssection2.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/newmain.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/newmain.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/newmain.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/newmain.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/plain-main.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plain-main.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/plain-main.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plain-main.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/plainclosing.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainclosing.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/plainclosing.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainclosing.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/plainsection1.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainsection1.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/plainsection1.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainsection1.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/plainsection2.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainsection2.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/plainsection2.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainsection2.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/plainsection3.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainsection3.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/plainsection3.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainsection3.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/section1.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/section1.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/section1.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/section1.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/section2.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/section2.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/section2.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/section2.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/section3.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/section3.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/section3.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/section3.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/supplement one.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement one.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/supplement one.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement one.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/supplement two.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement two.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/supplement two.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement two.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/supplement1.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement1.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/supplement1.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement1.tex diff --git a/preflight_parser/tests/fixture/multi_tex_3/supplement2.tex b/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement2.tex similarity index 100% rename from preflight_parser/tests/fixture/multi_tex_3/supplement2.tex rename to tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement2.tex diff --git a/preflight_parser/tests/fixture/pdfoutput_1/artic.cls b/tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/artic.cls similarity index 100% rename from preflight_parser/tests/fixture/pdfoutput_1/artic.cls rename to tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/artic.cls diff --git a/preflight_parser/tests/fixture/pdfoutput_1/fake-file-1.Tex b/tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-1.Tex similarity index 100% rename from preflight_parser/tests/fixture/pdfoutput_1/fake-file-1.Tex rename to tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-1.Tex diff --git a/preflight_parser/tests/fixture/pdfoutput_1/fake-file-1.bbl b/tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-1.bbl similarity index 100% rename from preflight_parser/tests/fixture/pdfoutput_1/fake-file-1.bbl rename to tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-1.bbl diff --git a/preflight_parser/tests/fixture/pdfoutput_1/fake-file-2.bbl b/tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-2.bbl similarity index 100% rename from preflight_parser/tests/fixture/pdfoutput_1/fake-file-2.bbl rename to tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-2.bbl diff --git a/preflight_parser/tests/fixture/pdfoutput_1/fake-file-2.tex b/tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-2.tex similarity index 100% rename from preflight_parser/tests/fixture/pdfoutput_1/fake-file-2.tex rename to tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-2.tex diff --git a/preflight_parser/tests/fixture/pdfoutput_1/test/fake-file-3.inc b/tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/test/fake-file-3.inc similarity index 100% rename from preflight_parser/tests/fixture/pdfoutput_1/test/fake-file-3.inc rename to tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/test/fake-file-3.inc diff --git a/preflight_parser/tests/fixture/pre-postamble/main.tex b/tex2pdf/preflight_parser/tests/fixture/pre-postamble/main.tex similarity index 100% rename from preflight_parser/tests/fixture/pre-postamble/main.tex rename to tex2pdf/preflight_parser/tests/fixture/pre-postamble/main.tex diff --git a/preflight_parser/tests/fixture/pre-postamble/postamble.tex b/tex2pdf/preflight_parser/tests/fixture/pre-postamble/postamble.tex similarity index 100% rename from preflight_parser/tests/fixture/pre-postamble/postamble.tex rename to tex2pdf/preflight_parser/tests/fixture/pre-postamble/postamble.tex diff --git a/preflight_parser/tests/fixture/pre-postamble/preamble.tex b/tex2pdf/preflight_parser/tests/fixture/pre-postamble/preamble.tex similarity index 100% rename from preflight_parser/tests/fixture/pre-postamble/preamble.tex rename to tex2pdf/preflight_parser/tests/fixture/pre-postamble/preamble.tex diff --git a/preflight_parser/tests/fixture/single-pdf/hello-world.pdf b/tex2pdf/preflight_parser/tests/fixture/single-pdf/hello-world.pdf similarity index 100% rename from preflight_parser/tests/fixture/single-pdf/hello-world.pdf rename to tex2pdf/preflight_parser/tests/fixture/single-pdf/hello-world.pdf diff --git a/preflight_parser/tests/fixture/single_tex_1/NOBEL_PRIZE_WINNER.TEX b/tex2pdf/preflight_parser/tests/fixture/single_tex_1/NOBEL_PRIZE_WINNER.TEX similarity index 100% rename from preflight_parser/tests/fixture/single_tex_1/NOBEL_PRIZE_WINNER.TEX rename to tex2pdf/preflight_parser/tests/fixture/single_tex_1/NOBEL_PRIZE_WINNER.TEX diff --git a/preflight_parser/tests/fixture/single_tex_2/00README.XXX b/tex2pdf/preflight_parser/tests/fixture/single_tex_2/00README.XXX similarity index 100% rename from preflight_parser/tests/fixture/single_tex_2/00README.XXX rename to tex2pdf/preflight_parser/tests/fixture/single_tex_2/00README.XXX diff --git a/preflight_parser/tests/fixture/single_tex_2/fake-file-1.bbl b/tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-1.bbl similarity index 100% rename from preflight_parser/tests/fixture/single_tex_2/fake-file-1.bbl rename to tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-1.bbl diff --git a/preflight_parser/tests/fixture/single_tex_2/fake-file-1.tex b/tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-1.tex similarity index 100% rename from preflight_parser/tests/fixture/single_tex_2/fake-file-1.tex rename to tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-1.tex diff --git a/preflight_parser/tests/fixture/single_tex_2/fake-file-2.TEX b/tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-2.TEX similarity index 100% rename from preflight_parser/tests/fixture/single_tex_2/fake-file-2.TEX rename to tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-2.TEX diff --git a/preflight_parser/tests/fixture/single_tex_2/fake-file-2.bbl b/tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-2.bbl similarity index 100% rename from preflight_parser/tests/fixture/single_tex_2/fake-file-2.bbl rename to tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-2.bbl diff --git a/preflight_parser/tests/fixture/single_tex_2/fake-file-3.tex b/tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-3.tex similarity index 100% rename from preflight_parser/tests/fixture/single_tex_2/fake-file-3.tex rename to tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-3.tex diff --git a/preflight_parser/tests/fixture/single_tex_3/fake-file-1.bbl b/tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-1.bbl similarity index 100% rename from preflight_parser/tests/fixture/single_tex_3/fake-file-1.bbl rename to tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-1.bbl diff --git a/preflight_parser/tests/fixture/single_tex_3/fake-file-1.tex b/tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-1.tex similarity index 100% rename from preflight_parser/tests/fixture/single_tex_3/fake-file-1.tex rename to tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-1.tex diff --git a/preflight_parser/tests/fixture/single_tex_3/fake-file-2.TEX b/tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-2.TEX similarity index 100% rename from preflight_parser/tests/fixture/single_tex_3/fake-file-2.TEX rename to tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-2.TEX diff --git a/preflight_parser/tests/fixture/single_tex_3/fake-file-3.tex b/tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-3.tex similarity index 100% rename from preflight_parser/tests/fixture/single_tex_3/fake-file-3.tex rename to tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-3.tex diff --git a/preflight_parser/tests/fixture/single_tex_4/fake-file-1.bbl b/tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-1.bbl similarity index 100% rename from preflight_parser/tests/fixture/single_tex_4/fake-file-1.bbl rename to tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-1.bbl diff --git a/preflight_parser/tests/fixture/single_tex_4/fake-file-1.tex b/tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-1.tex similarity index 100% rename from preflight_parser/tests/fixture/single_tex_4/fake-file-1.tex rename to tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-1.tex diff --git a/preflight_parser/tests/fixture/single_tex_4/fake-file-2.TEX b/tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-2.TEX similarity index 100% rename from preflight_parser/tests/fixture/single_tex_4/fake-file-2.TEX rename to tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-2.TEX diff --git a/preflight_parser/tests/fixture/single_tex_4/fake-file-3.tex b/tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-3.tex similarity index 100% rename from preflight_parser/tests/fixture/single_tex_4/fake-file-3.tex rename to tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-3.tex diff --git a/preflight_parser/tests/fixture/single_tex_4/fake-package.tex b/tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-package.tex similarity index 100% rename from preflight_parser/tests/fixture/single_tex_4/fake-package.tex rename to tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-package.tex diff --git a/preflight_parser/tests/fixture/single_tex_5/00README.XXX b/tex2pdf/preflight_parser/tests/fixture/single_tex_5/00README.XXX similarity index 100% rename from preflight_parser/tests/fixture/single_tex_5/00README.XXX rename to tex2pdf/preflight_parser/tests/fixture/single_tex_5/00README.XXX diff --git a/preflight_parser/tests/fixture/single_tex_5/fake-file-1.bbl b/tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-1.bbl similarity index 100% rename from preflight_parser/tests/fixture/single_tex_5/fake-file-1.bbl rename to tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-1.bbl diff --git a/preflight_parser/tests/fixture/single_tex_5/fake-file-1.tex b/tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-1.tex similarity index 100% rename from preflight_parser/tests/fixture/single_tex_5/fake-file-1.tex rename to tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-1.tex diff --git a/preflight_parser/tests/fixture/single_tex_5/fake-file-2.TEX b/tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-2.TEX similarity index 100% rename from preflight_parser/tests/fixture/single_tex_5/fake-file-2.TEX rename to tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-2.TEX diff --git a/preflight_parser/tests/fixture/single_tex_5/fake-file-2.bbl b/tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-2.bbl similarity index 100% rename from preflight_parser/tests/fixture/single_tex_5/fake-file-2.bbl rename to tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-2.bbl diff --git a/preflight_parser/tests/fixture/single_tex_5/fake-file-3.tex b/tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-3.tex similarity index 100% rename from preflight_parser/tests/fixture/single_tex_5/fake-file-3.tex rename to tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-3.tex diff --git a/preflight_parser/tests/test_base_models.py b/tex2pdf/preflight_parser/tests/test_base_models.py similarity index 100% rename from preflight_parser/tests/test_base_models.py rename to tex2pdf/preflight_parser/tests/test_base_models.py diff --git a/preflight_parser/tests/test_preflight.py b/tex2pdf/preflight_parser/tests/test_preflight.py similarity index 100% rename from preflight_parser/tests/test_preflight.py rename to tex2pdf/preflight_parser/tests/test_preflight.py diff --git a/preflight_parser/tests/test_typings.py b/tex2pdf/preflight_parser/tests/test_typings.py similarity index 100% rename from preflight_parser/tests/test_typings.py rename to tex2pdf/preflight_parser/tests/test_typings.py From 196b48b4693d20f7c8cdce70e5f705d39220a3f9 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 11:29:59 +0900 Subject: [PATCH 02/27] Fix tests and mypy errors --- mypy.ini | 39 +++++++++++++++++++ tex2pdf/preflight_parser/__init__.py | 30 +++++++------- .../tests/test_base_models.py | 2 +- .../preflight_parser/tests/test_preflight.py | 2 +- .../preflight_parser/tests/test_typings.py | 2 +- 5 files changed, 58 insertions(+), 17 deletions(-) create mode 100644 mypy.ini diff --git a/mypy.ini b/mypy.ini new file mode 100644 index 0000000..7b9eb01 --- /dev/null +++ b/mypy.ini @@ -0,0 +1,39 @@ +[mypy] +mypy_path = tex2pdf + +exclude = tests + +# +# Covered by --strict, with some turned off: +# +disallow_untyped_defs=True +check_untyped_defs=True +# currently an issue with sql alchemy +disallow_subclassing_any=false +# Need to experiment/think about this one: +disallow_any_decorated=false +warn_redundant_casts=True +warn_return_any=True +warn_unused_ignores=True +# this seems to be at least somewhat non-functioning: +warn_unused_configs=True +#may be worth reconsidering this one: +no_implicit_optional=True +strict_optional=True +disallow_untyped_calls=True + +# +# Other: +# +ignore_missing_imports=True +follow_imports=silent + +# +# Plugins: +# +plugins = pydantic.mypy + +#[tex2pdf.*] +#disallow_untyped_calls=True + + diff --git a/tex2pdf/preflight_parser/__init__.py b/tex2pdf/preflight_parser/__init__.py index 6aa2b20..ff073b4 100644 --- a/tex2pdf/preflight_parser/__init__.py +++ b/tex2pdf/preflight_parser/__init__.py @@ -10,12 +10,16 @@ from enum import Enum from itertools import zip_longest from pprint import pformat +from typing import TypeVar import chardet from pydantic import BaseModel, Field, PrivateAttr MODULE_PATH = os.path.dirname(__file__) + +T = TypeVar("T") + # # CLASSES AND TYPES # @@ -185,7 +189,7 @@ class CompilerSpec(BaseModel): }, } - def __init__(self, **kwargs): + def __init__(self, **kwargs: typing.Any) -> None: """Adjust __init__ function to allow for CompilerSpec(compiler="...").""" if len(kwargs) == 1 and "compiler" in kwargs: compiler = kwargs["compiler"] @@ -236,7 +240,7 @@ def tex_compiler(self) -> str | None: return self._COMPILER_SELECTION[self.lang][self.output][self.engine] return None - def from_compiler_string(self, compiler: str): + def from_compiler_string(self, compiler: str) -> None: """Convert compiler string to Language/Output/Engine/PostProcess types.""" if compiler == "pdf_submission": self.lang = LanguageType.pdf @@ -273,7 +277,7 @@ class MainProcessSpec(BaseModel): index: IndexProcessSpec | None = None fontmaps: list[str] | None = None - def __init__(self, **kwargs): + def __init__(self, **kwargs: typing.Any) -> None: """Adjust __init__ function to allow for CompilerSpec(compiler="...").""" if "compiler" in kwargs and isinstance(kwargs["compiler"], str): compiler = kwargs["compiler"] @@ -307,7 +311,7 @@ class TeXFileIssue(BaseModel): # line: int filename: str | None = None - def __init__(self, key: IssueType, info: str, filename: str | None = None, **kwargs) -> None: + def __init__(self, key: IssueType, info: str, filename: str | None = None, **kwargs: typing.Any) -> None: """Override __init__ to be able to use positional parameters.""" super().__init__(key=key, info=info, filename=filename, **kwargs) @@ -533,18 +537,16 @@ def collect_included_files(self, inc: list[str]) -> None: logging.debug(file_incspec) self.mentioned_files |= file_incspec - def generic_walk_document_tree( - self, map: Callable[["ParsedTeXFile"], typing.Any], reduce: Callable[[typing.Any, typing.Any], typing.Any] - ): + def generic_walk_document_tree(self, map: Callable[["ParsedTeXFile"], T], reduce: Callable[[T, T], T]) -> T: """Walk the document tree in map/reduce fashion.""" return self._generic_walk_document_tree(map, reduce, {}) def _generic_walk_document_tree( self, - map: Callable[["ParsedTeXFile"], typing.Any], - reduce: Callable[[typing.Any, typing.Any], typing.Any], + map: Callable[["ParsedTeXFile"], T], + reduce: Callable[[T, T], T], visited: dict[str, bool], - ) -> list[typing.Any]: + ) -> T: """Call a function on any node of a document tree - internal helper.""" ret = map(self) visited[self.filename] = True @@ -673,7 +675,7 @@ def _recursive_collect_files(self, what: FileType | str, visited: dict[str, bool idx = "issues" else: raise PreflightException(f"no such file type: {what}") - found = getattr(self, idx) + found: list[str] = getattr(self, idx) visited[self.filename] = True for n in self.children: if n.filename in visited: @@ -698,7 +700,7 @@ class PreflightResponse(BaseModel): detected_toplevel_files: list[ToplevelFile] tex_files: list[ParsedTeXFile] - def to_json(self, **kwargs) -> str: + def to_json(self, **kwargs: typing.Any) -> str: """Return a json representation.""" return self.json(exclude_none=True, exclude_defaults=True, **kwargs) @@ -939,7 +941,7 @@ def parse_file(basedir: str, filename: str) -> ParsedTeXFile: return n -def parse_dir(rundir) -> dict[str, ParsedTeXFile] | ToplevelFile: +def parse_dir(rundir: str) -> dict[str, ParsedTeXFile] | ToplevelFile: """Parse all TeX files in a directory.""" files = glob.glob(f"{rundir}/**/*", recursive=True) # strip rundir/ prefix @@ -1175,7 +1177,7 @@ def _generate_preflight_response_dict(rundir: str) -> PreflightResponse: ) -def generate_preflight_response(rundir: str, json: bool = False, **kwargs) -> PreflightResponse | str: +def generate_preflight_response(rundir: str, json: bool = False, **kwargs: typing.Any) -> PreflightResponse | str: """Parse submission and generated preflight response as dictionary or json.""" try: pfr: PreflightResponse = _generate_preflight_response_dict(rundir) diff --git a/tex2pdf/preflight_parser/tests/test_base_models.py b/tex2pdf/preflight_parser/tests/test_base_models.py index d4a8c37..6adb7ff 100644 --- a/tex2pdf/preflight_parser/tests/test_base_models.py +++ b/tex2pdf/preflight_parser/tests/test_base_models.py @@ -1,6 +1,6 @@ import unittest -from preflight_parser import ( +from tex2pdf.preflight_parser import ( TEX_EXTENSIONS, BibCompiler, BibProcessSpec, diff --git a/tex2pdf/preflight_parser/tests/test_preflight.py b/tex2pdf/preflight_parser/tests/test_preflight.py index d99cd80..1c888bd 100644 --- a/tex2pdf/preflight_parser/tests/test_preflight.py +++ b/tex2pdf/preflight_parser/tests/test_preflight.py @@ -2,7 +2,7 @@ import os import unittest -from preflight_parser import PreflightResponse, generate_preflight_response +from tex2pdf.preflight_parser import PreflightResponse, generate_preflight_response class TestPreflight(unittest.TestCase): diff --git a/tex2pdf/preflight_parser/tests/test_typings.py b/tex2pdf/preflight_parser/tests/test_typings.py index 75c2ac6..fc1474b 100644 --- a/tex2pdf/preflight_parser/tests/test_typings.py +++ b/tex2pdf/preflight_parser/tests/test_typings.py @@ -15,7 +15,7 @@ def test_run_mypy_module(self) -> None: mypy = shutil.which("mypy") if mypy is None: raise OSError("mypy not found in PATH") - root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) result: int = subprocess.call([mypy, "-p", "preflight_parser"], env=os.environ, cwd=root_dir) self.assertEqual(result, 0, "Expect 0 type errors when running mypy") From 95f9f0eaaa4d06edd0a42265e561c0d17b17b25a Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 11:31:43 +0900 Subject: [PATCH 03/27] Cleanup after preflight_parser move --- preflight_parser/poetry.lock | 239 ------------------ preflight_parser/pyproject.toml | 32 --- .../preflight_parser}/TODO | 0 3 files changed, 271 deletions(-) delete mode 100644 preflight_parser/poetry.lock delete mode 100644 preflight_parser/pyproject.toml rename {preflight_parser => tex2pdf/preflight_parser}/TODO (100%) diff --git a/preflight_parser/poetry.lock b/preflight_parser/poetry.lock deleted file mode 100644 index cbf6049..0000000 --- a/preflight_parser/poetry.lock +++ /dev/null @@ -1,239 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. - -[[package]] -name = "chardet" -version = "5.2.0" -description = "Universal encoding detector for Python 3" -optional = false -python-versions = ">=3.7" -files = [ - {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, - {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, -] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -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 = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "mypy" -version = "1.11.2" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, - {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, - {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, - {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, - {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, - {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, - {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, - {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, - {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, - {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, - {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, - {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, - {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, - {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, - {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, - {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, - {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, - {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, - {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, -] - -[package.dependencies] -mypy-extensions = ">=1.0.0" -typing-extensions = ">=4.6.0" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -install-types = ["pip"] -mypyc = ["setuptools (>=50)"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "packaging" -version = "24.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, -] - -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pydantic" -version = "1.10.18" -description = "Data validation and settings management using python type hints" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pydantic-1.10.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e405ffcc1254d76bb0e760db101ee8916b620893e6edfbfee563b3c6f7a67c02"}, - {file = "pydantic-1.10.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e306e280ebebc65040034bff1a0a81fd86b2f4f05daac0131f29541cafd80b80"}, - {file = "pydantic-1.10.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11d9d9b87b50338b1b7de4ebf34fd29fdb0d219dc07ade29effc74d3d2609c62"}, - {file = "pydantic-1.10.18-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b661ce52c7b5e5f600c0c3c5839e71918346af2ef20062705ae76b5c16914cab"}, - {file = "pydantic-1.10.18-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c20f682defc9ef81cd7eaa485879ab29a86a0ba58acf669a78ed868e72bb89e0"}, - {file = "pydantic-1.10.18-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c5ae6b7c8483b1e0bf59e5f1843e4fd8fd405e11df7de217ee65b98eb5462861"}, - {file = "pydantic-1.10.18-cp310-cp310-win_amd64.whl", hash = "sha256:74fe19dda960b193b0eb82c1f4d2c8e5e26918d9cda858cbf3f41dd28549cb70"}, - {file = "pydantic-1.10.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72fa46abace0a7743cc697dbb830a41ee84c9db8456e8d77a46d79b537efd7ec"}, - {file = "pydantic-1.10.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef0fe7ad7cbdb5f372463d42e6ed4ca9c443a52ce544472d8842a0576d830da5"}, - {file = "pydantic-1.10.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a00e63104346145389b8e8f500bc6a241e729feaf0559b88b8aa513dd2065481"}, - {file = "pydantic-1.10.18-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae6fa2008e1443c46b7b3a5eb03800121868d5ab6bc7cda20b5df3e133cde8b3"}, - {file = "pydantic-1.10.18-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9f463abafdc92635da4b38807f5b9972276be7c8c5121989768549fceb8d2588"}, - {file = "pydantic-1.10.18-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3445426da503c7e40baccefb2b2989a0c5ce6b163679dd75f55493b460f05a8f"}, - {file = "pydantic-1.10.18-cp311-cp311-win_amd64.whl", hash = "sha256:467a14ee2183bc9c902579bb2f04c3d3dac00eff52e252850509a562255b2a33"}, - {file = "pydantic-1.10.18-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:efbc8a7f9cb5fe26122acba1852d8dcd1e125e723727c59dcd244da7bdaa54f2"}, - {file = "pydantic-1.10.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24a4a159d0f7a8e26bf6463b0d3d60871d6a52eac5bb6a07a7df85c806f4c048"}, - {file = "pydantic-1.10.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b74be007703547dc52e3c37344d130a7bfacca7df112a9e5ceeb840a9ce195c7"}, - {file = "pydantic-1.10.18-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcb20d4cb355195c75000a49bb4a31d75e4295200df620f454bbc6bdf60ca890"}, - {file = "pydantic-1.10.18-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:46f379b8cb8a3585e3f61bf9ae7d606c70d133943f339d38b76e041ec234953f"}, - {file = "pydantic-1.10.18-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cbfbca662ed3729204090c4d09ee4beeecc1a7ecba5a159a94b5a4eb24e3759a"}, - {file = "pydantic-1.10.18-cp312-cp312-win_amd64.whl", hash = "sha256:c6d0a9f9eccaf7f438671a64acf654ef0d045466e63f9f68a579e2383b63f357"}, - {file = "pydantic-1.10.18-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3d5492dbf953d7d849751917e3b2433fb26010d977aa7a0765c37425a4026ff1"}, - {file = "pydantic-1.10.18-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe734914977eed33033b70bfc097e1baaffb589517863955430bf2e0846ac30f"}, - {file = "pydantic-1.10.18-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15fdbe568beaca9aacfccd5ceadfb5f1a235087a127e8af5e48df9d8a45ae85c"}, - {file = "pydantic-1.10.18-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c3e742f62198c9eb9201781fbebe64533a3bbf6a76a91b8d438d62b813079dbc"}, - {file = "pydantic-1.10.18-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:19a3bd00b9dafc2cd7250d94d5b578edf7a0bd7daf102617153ff9a8fa37871c"}, - {file = "pydantic-1.10.18-cp37-cp37m-win_amd64.whl", hash = "sha256:2ce3fcf75b2bae99aa31bd4968de0474ebe8c8258a0110903478bd83dfee4e3b"}, - {file = "pydantic-1.10.18-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:335a32d72c51a313b33fa3a9b0fe283503272ef6467910338e123f90925f0f03"}, - {file = "pydantic-1.10.18-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:34a3613c7edb8c6fa578e58e9abe3c0f5e7430e0fc34a65a415a1683b9c32d9a"}, - {file = "pydantic-1.10.18-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9ee4e6ca1d9616797fa2e9c0bfb8815912c7d67aca96f77428e316741082a1b"}, - {file = "pydantic-1.10.18-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23e8ec1ce4e57b4f441fc91e3c12adba023fedd06868445a5b5f1d48f0ab3682"}, - {file = "pydantic-1.10.18-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:44ae8a3e35a54d2e8fa88ed65e1b08967a9ef8c320819a969bfa09ce5528fafe"}, - {file = "pydantic-1.10.18-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5389eb3b48a72da28c6e061a247ab224381435256eb541e175798483368fdd3"}, - {file = "pydantic-1.10.18-cp38-cp38-win_amd64.whl", hash = "sha256:069b9c9fc645474d5ea3653788b544a9e0ccd3dca3ad8c900c4c6eac844b4620"}, - {file = "pydantic-1.10.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:80b982d42515632eb51f60fa1d217dfe0729f008e81a82d1544cc392e0a50ddf"}, - {file = "pydantic-1.10.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:aad8771ec8dbf9139b01b56f66386537c6fe4e76c8f7a47c10261b69ad25c2c9"}, - {file = "pydantic-1.10.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941a2eb0a1509bd7f31e355912eb33b698eb0051730b2eaf9e70e2e1589cae1d"}, - {file = "pydantic-1.10.18-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65f7361a09b07915a98efd17fdec23103307a54db2000bb92095457ca758d485"}, - {file = "pydantic-1.10.18-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6951f3f47cb5ca4da536ab161ac0163cab31417d20c54c6de5ddcab8bc813c3f"}, - {file = "pydantic-1.10.18-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7a4c5eec138a9b52c67f664c7d51d4c7234c5ad65dd8aacd919fb47445a62c86"}, - {file = "pydantic-1.10.18-cp39-cp39-win_amd64.whl", hash = "sha256:49e26c51ca854286bffc22b69787a8d4063a62bf7d83dc21d44d2ff426108518"}, - {file = "pydantic-1.10.18-py3-none-any.whl", hash = "sha256:06a189b81ffc52746ec9c8c007f16e5167c8b0a696e1a726369327e3db7b2a82"}, - {file = "pydantic-1.10.18.tar.gz", hash = "sha256:baebdff1907d1d96a139c25136a9bb7d17e118f133a76a2ef3b845e831e3403a"}, -] - -[package.dependencies] -typing-extensions = ">=4.2.0" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] - -[[package]] -name = "pytest" -version = "8.3.3" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, - {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=1.5,<2" - -[package.extras] -dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "ruff" -version = "0.6.2" -description = "An extremely fast Python linter and code formatter, written in Rust." -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruff-0.6.2-py3-none-linux_armv6l.whl", hash = "sha256:5c8cbc6252deb3ea840ad6a20b0f8583caab0c5ef4f9cca21adc5a92b8f79f3c"}, - {file = "ruff-0.6.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:17002fe241e76544448a8e1e6118abecbe8cd10cf68fde635dad480dba594570"}, - {file = "ruff-0.6.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3dbeac76ed13456f8158b8f4fe087bf87882e645c8e8b606dd17b0b66c2c1158"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:094600ee88cda325988d3f54e3588c46de5c18dae09d683ace278b11f9d4d534"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:316d418fe258c036ba05fbf7dfc1f7d3d4096db63431546163b472285668132b"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d72b8b3abf8a2d51b7b9944a41307d2f442558ccb3859bbd87e6ae9be1694a5d"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2aed7e243be68487aa8982e91c6e260982d00da3f38955873aecd5a9204b1d66"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d371f7fc9cec83497fe7cf5eaf5b76e22a8efce463de5f775a1826197feb9df8"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8f310d63af08f583363dfb844ba8f9417b558199c58a5999215082036d795a1"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7db6880c53c56addb8638fe444818183385ec85eeada1d48fc5abe045301b2f1"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1175d39faadd9a50718f478d23bfc1d4da5743f1ab56af81a2b6caf0a2394f23"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5b939f9c86d51635fe486585389f54582f0d65b8238e08c327c1534844b3bb9a"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d0d62ca91219f906caf9b187dea50d17353f15ec9bb15aae4a606cd697b49b4c"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7438a7288f9d67ed3c8ce4d059e67f7ed65e9fe3aa2ab6f5b4b3610e57e3cb56"}, - {file = "ruff-0.6.2-py3-none-win32.whl", hash = "sha256:279d5f7d86696df5f9549b56b9b6a7f6c72961b619022b5b7999b15db392a4da"}, - {file = "ruff-0.6.2-py3-none-win_amd64.whl", hash = "sha256:d9f3469c7dd43cd22eb1c3fc16926fb8258d50cb1b216658a07be95dd117b0f2"}, - {file = "ruff-0.6.2-py3-none-win_arm64.whl", hash = "sha256:f28fcd2cd0e02bdf739297516d5643a945cc7caf09bd9bcb4d932540a5ea4fa9"}, - {file = "ruff-0.6.2.tar.gz", hash = "sha256:239ee6beb9e91feb8e0ec384204a763f36cb53fb895a1a364618c6abb076b3be"}, -] - -[[package]] -name = "typing-extensions" -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.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, -] - -[metadata] -lock-version = "2.0" -python-versions = "^3.11" -content-hash = "1f2e3b19fa710fa40c334711482c093e50e005e7e37f2616e5785071fcee740e" diff --git a/preflight_parser/pyproject.toml b/preflight_parser/pyproject.toml deleted file mode 100644 index b142aa2..0000000 --- a/preflight_parser/pyproject.toml +++ /dev/null @@ -1,32 +0,0 @@ -[tool.poetry] -name = "preflight-parser" -description = "TeX and LaTeX parser" -version = "0.0.1" -authors = [ "Norbert Preining" ] -include = ["kpse_search.lua"] - -[tool.poetry.dependencies] -python = "^3.11" -chardet = "^5.0" -pydantic = "==1.10.*" - -[tool.poetry.group.dev.dependencies] -ruff = "*" -pytest = "^8.3.3" -mypy = "*" -mypy-extensions = "*" - -[tool.ruff] -# Extend the `pyproject.toml` from the toplevel dir -extend = "../pyproject.toml" -extend-exclude = ["tests"] - -[tool.black] -line-length = 120 - -[tool.pylint] -max-line-length = 120 - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" diff --git a/preflight_parser/TODO b/tex2pdf/preflight_parser/TODO similarity index 100% rename from preflight_parser/TODO rename to tex2pdf/preflight_parser/TODO From 3e1c25da0146de0817e180cb2277a6fea7e05d33 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 3 Dec 2024 15:18:56 +0900 Subject: [PATCH 04/27] Move zzrm into tex2pdf --- pyproject.toml | 6 +- .../zerozeroreadme/__init__.py | 0 .../zerozeroreadme}/tests/__init__.py | 0 .../tests/fixture/zzrm_bad_01/00README.XXX | 0 .../tests/fixture/zzrm_v1_01/00README.XXX | 0 .../tests/fixture/zzrm_v2_01/00README.yaml | 0 .../tests/fixture/zzrm_v2_02/00README.json | 0 .../tests/fixture/zzrm_v2_03/00README.toml | 0 .../tests/fixture/zzrm_v2_04/00README.json | 0 .../tests/fixture/zzrm_v2_04/00README.toml | 0 .../tests/fixture/zzrm_v2_04/00README.yaml | 0 .../zzrm_v2_syntax_error/00README.yaml | 0 .../zerozeroreadme}/tests/test_typings.py | 12 +- .../zerozeroreadme}/tests/test_zzrm.py | 5 +- zerozeroreadme/mypy.ini | 34 -- zerozeroreadme/poetry.lock | 342 ------------------ zerozeroreadme/pyproject.toml | 35 -- 17 files changed, 14 insertions(+), 420 deletions(-) rename {zerozeroreadme => tex2pdf}/zerozeroreadme/__init__.py (100%) rename {zerozeroreadme => tex2pdf/zerozeroreadme}/tests/__init__.py (100%) rename {zerozeroreadme => tex2pdf/zerozeroreadme}/tests/fixture/zzrm_bad_01/00README.XXX (100%) rename {zerozeroreadme => tex2pdf/zerozeroreadme}/tests/fixture/zzrm_v1_01/00README.XXX (100%) rename {zerozeroreadme => tex2pdf/zerozeroreadme}/tests/fixture/zzrm_v2_01/00README.yaml (100%) rename {zerozeroreadme => tex2pdf/zerozeroreadme}/tests/fixture/zzrm_v2_02/00README.json (100%) rename {zerozeroreadme => tex2pdf/zerozeroreadme}/tests/fixture/zzrm_v2_03/00README.toml (100%) rename {zerozeroreadme => tex2pdf/zerozeroreadme}/tests/fixture/zzrm_v2_04/00README.json (100%) rename {zerozeroreadme => tex2pdf/zerozeroreadme}/tests/fixture/zzrm_v2_04/00README.toml (100%) rename {zerozeroreadme => tex2pdf/zerozeroreadme}/tests/fixture/zzrm_v2_04/00README.yaml (100%) rename {zerozeroreadme => tex2pdf/zerozeroreadme}/tests/fixture/zzrm_v2_syntax_error/00README.yaml (100%) rename {zerozeroreadme => tex2pdf/zerozeroreadme}/tests/test_typings.py (65%) rename {zerozeroreadme => tex2pdf/zerozeroreadme}/tests/test_zzrm.py (98%) delete mode 100644 zerozeroreadme/mypy.ini delete mode 100644 zerozeroreadme/poetry.lock delete mode 100644 zerozeroreadme/pyproject.toml diff --git a/pyproject.toml b/pyproject.toml index 6dee209..ae59233 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,16 +12,20 @@ include = ["LICENSE", "README.md"] python = "^3.11" chardet = "^5.0" pydantic = "==1.10.*" +ruamel-yaml = "^0.18.5" +toml = "^0.10.2" +tomli_w = "^1.0" [tool.poetry.group.dev.dependencies] ruff = "*" pytest = "^8.3.3" mypy = "*" mypy-extensions = "*" +types-toml = "^0.10.8.20240310" [tool.ruff] line-length = 120 -extend-exclude = ["tex2pdf/preflight_parser/tests"] +extend-exclude = ["tex2pdf/preflight_parser/tests", "tex2pdf/zerozeroreadme/tests"] lint.select = [ "F", # Pyflakes diff --git a/zerozeroreadme/zerozeroreadme/__init__.py b/tex2pdf/zerozeroreadme/__init__.py similarity index 100% rename from zerozeroreadme/zerozeroreadme/__init__.py rename to tex2pdf/zerozeroreadme/__init__.py diff --git a/zerozeroreadme/tests/__init__.py b/tex2pdf/zerozeroreadme/tests/__init__.py similarity index 100% rename from zerozeroreadme/tests/__init__.py rename to tex2pdf/zerozeroreadme/tests/__init__.py diff --git a/zerozeroreadme/tests/fixture/zzrm_bad_01/00README.XXX b/tex2pdf/zerozeroreadme/tests/fixture/zzrm_bad_01/00README.XXX similarity index 100% rename from zerozeroreadme/tests/fixture/zzrm_bad_01/00README.XXX rename to tex2pdf/zerozeroreadme/tests/fixture/zzrm_bad_01/00README.XXX diff --git a/zerozeroreadme/tests/fixture/zzrm_v1_01/00README.XXX b/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v1_01/00README.XXX similarity index 100% rename from zerozeroreadme/tests/fixture/zzrm_v1_01/00README.XXX rename to tex2pdf/zerozeroreadme/tests/fixture/zzrm_v1_01/00README.XXX diff --git a/zerozeroreadme/tests/fixture/zzrm_v2_01/00README.yaml b/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_01/00README.yaml similarity index 100% rename from zerozeroreadme/tests/fixture/zzrm_v2_01/00README.yaml rename to tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_01/00README.yaml diff --git a/zerozeroreadme/tests/fixture/zzrm_v2_02/00README.json b/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_02/00README.json similarity index 100% rename from zerozeroreadme/tests/fixture/zzrm_v2_02/00README.json rename to tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_02/00README.json diff --git a/zerozeroreadme/tests/fixture/zzrm_v2_03/00README.toml b/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_03/00README.toml similarity index 100% rename from zerozeroreadme/tests/fixture/zzrm_v2_03/00README.toml rename to tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_03/00README.toml diff --git a/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.json b/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.json similarity index 100% rename from zerozeroreadme/tests/fixture/zzrm_v2_04/00README.json rename to tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.json diff --git a/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.toml b/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.toml similarity index 100% rename from zerozeroreadme/tests/fixture/zzrm_v2_04/00README.toml rename to tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.toml diff --git a/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.yaml b/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.yaml similarity index 100% rename from zerozeroreadme/tests/fixture/zzrm_v2_04/00README.yaml rename to tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.yaml diff --git a/zerozeroreadme/tests/fixture/zzrm_v2_syntax_error/00README.yaml b/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_syntax_error/00README.yaml similarity index 100% rename from zerozeroreadme/tests/fixture/zzrm_v2_syntax_error/00README.yaml rename to tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_syntax_error/00README.yaml diff --git a/zerozeroreadme/tests/test_typings.py b/tex2pdf/zerozeroreadme/tests/test_typings.py similarity index 65% rename from zerozeroreadme/tests/test_typings.py rename to tex2pdf/zerozeroreadme/tests/test_typings.py index 74034d2..1de64e9 100644 --- a/zerozeroreadme/tests/test_typings.py +++ b/tex2pdf/zerozeroreadme/tests/test_typings.py @@ -1,4 +1,5 @@ """Tests using mypy.""" + import os import shutil import subprocess @@ -13,12 +14,11 @@ def test_run_mypy_module(self) -> None: """Run mypy on all module sources.""" mypy = shutil.which("mypy") if mypy is None: - raise EnvironmentError("mypy not found in PATH") - root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) - result: int = subprocess.call([mypy, "-p", "zerozeroreadme"], - env=os.environ, cwd=root_dir) - self.assertEqual(result, 0, 'Expect 0 type errors when running mypy') + raise OSError("mypy not found in PATH") + root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) + result: int = subprocess.call([mypy, "-p", "zerozeroreadme"], env=os.environ, cwd=root_dir) + self.assertEqual(result, 0, "Expect 0 type errors when running mypy") -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/zerozeroreadme/tests/test_zzrm.py b/tex2pdf/zerozeroreadme/tests/test_zzrm.py similarity index 98% rename from zerozeroreadme/tests/test_zzrm.py rename to tex2pdf/zerozeroreadme/tests/test_zzrm.py index 69586f8..67b06b3 100644 --- a/zerozeroreadme/tests/test_zzrm.py +++ b/tex2pdf/zerozeroreadme/tests/test_zzrm.py @@ -3,8 +3,9 @@ import unittest import pytest -from zerozeroreadme import ZeroZeroReadMe -from preflight_parser import ParseSyntaxError +from tex2pdf.preflight_parser import ParseSyntaxError + +from tex2pdf.zerozeroreadme import ZeroZeroReadMe class Test00README(unittest.TestCase): diff --git a/zerozeroreadme/mypy.ini b/zerozeroreadme/mypy.ini deleted file mode 100644 index d7e87de..0000000 --- a/zerozeroreadme/mypy.ini +++ /dev/null @@ -1,34 +0,0 @@ -[mypy] -mypy_path = zerozeroreadme - -# -# Covered by --strict, with some turned off: -# -disallow_untyped_defs=True -check_untyped_defs=True -# currently an issue with sql alchemy -disallow_subclassing_any=false -# Need to experiment/think about this one: -disallow_any_decorated=false -warn_redundant_casts=True -warn_return_any=True -warn_unused_ignores=True -# this seems to be at least somewhat non-functioning: -warn_unused_configs=True -#may be worth reconsidering this one: -no_implicit_optional=True -strict_optional=True - -# -# Other: -# -ignore_missing_imports=True -follow_imports=silent - -# -# Plugins: -# -plugins = pydantic.mypy - -[tex_inspection.*] -disallow_untyped_calls=True diff --git a/zerozeroreadme/poetry.lock b/zerozeroreadme/poetry.lock deleted file mode 100644 index 2b0b529..0000000 --- a/zerozeroreadme/poetry.lock +++ /dev/null @@ -1,342 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. - -[[package]] -name = "chardet" -version = "5.2.0" -description = "Universal encoding detector for Python 3" -optional = false -python-versions = ">=3.7" -files = [ - {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, - {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, -] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -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 = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "mypy" -version = "1.11.2" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, - {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, - {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, - {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, - {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, - {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, - {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, - {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, - {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, - {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, - {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, - {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, - {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, - {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, - {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, - {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, - {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, - {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, - {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, -] - -[package.dependencies] -mypy-extensions = ">=1.0.0" -typing-extensions = ">=4.6.0" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -install-types = ["pip"] -mypyc = ["setuptools (>=50)"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "packaging" -version = "24.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, -] - -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "preflight-parser" -version = "0.0.1" -description = "TeX and LaTeX parser" -optional = false -python-versions = "^3.11" -files = [] -develop = false - -[package.dependencies] -chardet = "^5.0" -pydantic = "==1.10.*" - -[package.source] -type = "git" -url = "https://github.com/arXiv/submission-tools.git" -reference = "HEAD" -resolved_reference = "630d1504eba4e352e4cd24226bce12f47b24f045" -subdirectory = "preflight_parser" - -[[package]] -name = "pydantic" -version = "1.10.18" -description = "Data validation and settings management using python type hints" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pydantic-1.10.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e405ffcc1254d76bb0e760db101ee8916b620893e6edfbfee563b3c6f7a67c02"}, - {file = "pydantic-1.10.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e306e280ebebc65040034bff1a0a81fd86b2f4f05daac0131f29541cafd80b80"}, - {file = "pydantic-1.10.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11d9d9b87b50338b1b7de4ebf34fd29fdb0d219dc07ade29effc74d3d2609c62"}, - {file = "pydantic-1.10.18-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b661ce52c7b5e5f600c0c3c5839e71918346af2ef20062705ae76b5c16914cab"}, - {file = "pydantic-1.10.18-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c20f682defc9ef81cd7eaa485879ab29a86a0ba58acf669a78ed868e72bb89e0"}, - {file = "pydantic-1.10.18-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c5ae6b7c8483b1e0bf59e5f1843e4fd8fd405e11df7de217ee65b98eb5462861"}, - {file = "pydantic-1.10.18-cp310-cp310-win_amd64.whl", hash = "sha256:74fe19dda960b193b0eb82c1f4d2c8e5e26918d9cda858cbf3f41dd28549cb70"}, - {file = "pydantic-1.10.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72fa46abace0a7743cc697dbb830a41ee84c9db8456e8d77a46d79b537efd7ec"}, - {file = "pydantic-1.10.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef0fe7ad7cbdb5f372463d42e6ed4ca9c443a52ce544472d8842a0576d830da5"}, - {file = "pydantic-1.10.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a00e63104346145389b8e8f500bc6a241e729feaf0559b88b8aa513dd2065481"}, - {file = "pydantic-1.10.18-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae6fa2008e1443c46b7b3a5eb03800121868d5ab6bc7cda20b5df3e133cde8b3"}, - {file = "pydantic-1.10.18-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9f463abafdc92635da4b38807f5b9972276be7c8c5121989768549fceb8d2588"}, - {file = "pydantic-1.10.18-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3445426da503c7e40baccefb2b2989a0c5ce6b163679dd75f55493b460f05a8f"}, - {file = "pydantic-1.10.18-cp311-cp311-win_amd64.whl", hash = "sha256:467a14ee2183bc9c902579bb2f04c3d3dac00eff52e252850509a562255b2a33"}, - {file = "pydantic-1.10.18-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:efbc8a7f9cb5fe26122acba1852d8dcd1e125e723727c59dcd244da7bdaa54f2"}, - {file = "pydantic-1.10.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24a4a159d0f7a8e26bf6463b0d3d60871d6a52eac5bb6a07a7df85c806f4c048"}, - {file = "pydantic-1.10.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b74be007703547dc52e3c37344d130a7bfacca7df112a9e5ceeb840a9ce195c7"}, - {file = "pydantic-1.10.18-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcb20d4cb355195c75000a49bb4a31d75e4295200df620f454bbc6bdf60ca890"}, - {file = "pydantic-1.10.18-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:46f379b8cb8a3585e3f61bf9ae7d606c70d133943f339d38b76e041ec234953f"}, - {file = "pydantic-1.10.18-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cbfbca662ed3729204090c4d09ee4beeecc1a7ecba5a159a94b5a4eb24e3759a"}, - {file = "pydantic-1.10.18-cp312-cp312-win_amd64.whl", hash = "sha256:c6d0a9f9eccaf7f438671a64acf654ef0d045466e63f9f68a579e2383b63f357"}, - {file = "pydantic-1.10.18-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3d5492dbf953d7d849751917e3b2433fb26010d977aa7a0765c37425a4026ff1"}, - {file = "pydantic-1.10.18-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe734914977eed33033b70bfc097e1baaffb589517863955430bf2e0846ac30f"}, - {file = "pydantic-1.10.18-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15fdbe568beaca9aacfccd5ceadfb5f1a235087a127e8af5e48df9d8a45ae85c"}, - {file = "pydantic-1.10.18-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c3e742f62198c9eb9201781fbebe64533a3bbf6a76a91b8d438d62b813079dbc"}, - {file = "pydantic-1.10.18-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:19a3bd00b9dafc2cd7250d94d5b578edf7a0bd7daf102617153ff9a8fa37871c"}, - {file = "pydantic-1.10.18-cp37-cp37m-win_amd64.whl", hash = "sha256:2ce3fcf75b2bae99aa31bd4968de0474ebe8c8258a0110903478bd83dfee4e3b"}, - {file = "pydantic-1.10.18-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:335a32d72c51a313b33fa3a9b0fe283503272ef6467910338e123f90925f0f03"}, - {file = "pydantic-1.10.18-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:34a3613c7edb8c6fa578e58e9abe3c0f5e7430e0fc34a65a415a1683b9c32d9a"}, - {file = "pydantic-1.10.18-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9ee4e6ca1d9616797fa2e9c0bfb8815912c7d67aca96f77428e316741082a1b"}, - {file = "pydantic-1.10.18-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23e8ec1ce4e57b4f441fc91e3c12adba023fedd06868445a5b5f1d48f0ab3682"}, - {file = "pydantic-1.10.18-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:44ae8a3e35a54d2e8fa88ed65e1b08967a9ef8c320819a969bfa09ce5528fafe"}, - {file = "pydantic-1.10.18-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5389eb3b48a72da28c6e061a247ab224381435256eb541e175798483368fdd3"}, - {file = "pydantic-1.10.18-cp38-cp38-win_amd64.whl", hash = "sha256:069b9c9fc645474d5ea3653788b544a9e0ccd3dca3ad8c900c4c6eac844b4620"}, - {file = "pydantic-1.10.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:80b982d42515632eb51f60fa1d217dfe0729f008e81a82d1544cc392e0a50ddf"}, - {file = "pydantic-1.10.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:aad8771ec8dbf9139b01b56f66386537c6fe4e76c8f7a47c10261b69ad25c2c9"}, - {file = "pydantic-1.10.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941a2eb0a1509bd7f31e355912eb33b698eb0051730b2eaf9e70e2e1589cae1d"}, - {file = "pydantic-1.10.18-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65f7361a09b07915a98efd17fdec23103307a54db2000bb92095457ca758d485"}, - {file = "pydantic-1.10.18-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6951f3f47cb5ca4da536ab161ac0163cab31417d20c54c6de5ddcab8bc813c3f"}, - {file = "pydantic-1.10.18-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7a4c5eec138a9b52c67f664c7d51d4c7234c5ad65dd8aacd919fb47445a62c86"}, - {file = "pydantic-1.10.18-cp39-cp39-win_amd64.whl", hash = "sha256:49e26c51ca854286bffc22b69787a8d4063a62bf7d83dc21d44d2ff426108518"}, - {file = "pydantic-1.10.18-py3-none-any.whl", hash = "sha256:06a189b81ffc52746ec9c8c007f16e5167c8b0a696e1a726369327e3db7b2a82"}, - {file = "pydantic-1.10.18.tar.gz", hash = "sha256:baebdff1907d1d96a139c25136a9bb7d17e118f133a76a2ef3b845e831e3403a"}, -] - -[package.dependencies] -typing-extensions = ">=4.2.0" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] - -[[package]] -name = "pytest" -version = "8.3.3" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, - {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=1.5,<2" - -[package.extras] -dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "ruamel-yaml" -version = "0.18.6" -description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, - {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, -] - -[package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} - -[package.extras] -docs = ["mercurial (>5.7)", "ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] - -[[package]] -name = "ruamel-yaml-clib" -version = "0.2.8" -description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -optional = false -python-versions = ">=3.6" -files = [ - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, - {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, - {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, -] - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - -[[package]] -name = "tomli-w" -version = "1.0.0" -description = "A lil' TOML writer" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli_w-1.0.0-py3-none-any.whl", hash = "sha256:9f2a07e8be30a0729e533ec968016807069991ae2fd921a78d42f429ae5f4463"}, - {file = "tomli_w-1.0.0.tar.gz", hash = "sha256:f463434305e0336248cac9c2dc8076b707d8a12d019dd349f5c1e382dd1ae1b9"}, -] - -[[package]] -name = "types-toml" -version = "0.10.8.20240310" -description = "Typing stubs for toml" -optional = false -python-versions = ">=3.8" -files = [ - {file = "types-toml-0.10.8.20240310.tar.gz", hash = "sha256:3d41501302972436a6b8b239c850b26689657e25281b48ff0ec06345b8830331"}, - {file = "types_toml-0.10.8.20240310-py3-none-any.whl", hash = "sha256:627b47775d25fa29977d9c70dc0cbab3f314f32c8d8d0c012f2ef5de7aaec05d"}, -] - -[[package]] -name = "typing-extensions" -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.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, -] - -[metadata] -lock-version = "2.0" -python-versions = "^3.11" -content-hash = "87b09e9e362d1a6f0796a73b18ede4904b9106ebfb50ac9fcac2439dac6d1785" diff --git a/zerozeroreadme/pyproject.toml b/zerozeroreadme/pyproject.toml deleted file mode 100644 index 6916fa4..0000000 --- a/zerozeroreadme/pyproject.toml +++ /dev/null @@ -1,35 +0,0 @@ -[tool.poetry] -name = "zerozeroreadme" -description = "00README parser and tools" -version = "0.0.1" -authors = [ "Norbert Preining" ] - -[tool.poetry.dependencies] -python = "^3.11" -ruamel-yaml = "^0.18.5" -toml = "^0.10.2" -tomli_w = "^1.0" -preflight_parser = {git = "https://github.com/arXiv/submission-tools.git", subdirectory = "preflight_parser" } - -[tool.poetry.group.dev.dependencies] -pytest = "^8.3.3" -mypy = "*" -mypy-extensions = "*" -pydantic = "==1.10.*" -types-toml = "^0.10.8.20240310" - -[tool.ruff] -# Extend the `pyproject.toml` from the toplevel dir -extend = "../pyproject.toml" -extend-exclude = ["tests"] - -[tool.black] -line-length = 120 - -[tool.pylint] -max-line-length = 120 - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" - From 75944a5963ae73b1382bc4c646232b430cb11861 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 11:52:35 +0900 Subject: [PATCH 05/27] Fix typing and test running --- tex2pdf/zerozeroreadme/__init__.py | 28 ++++++++++++-------- tex2pdf/zerozeroreadme/tests/test_typings.py | 4 +-- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/tex2pdf/zerozeroreadme/__init__.py b/tex2pdf/zerozeroreadme/__init__.py index 0f230de..f6f5972 100644 --- a/tex2pdf/zerozeroreadme/__init__.py +++ b/tex2pdf/zerozeroreadme/__init__.py @@ -8,7 +8,11 @@ import toml import tomli_w -from preflight_parser import ( +from pydantic import BaseModel, ValidationError +from ruamel.yaml import YAML, MappingNode, ScalarNode +from ruamel.yaml.representer import RoundTripRepresenter + +from tex2pdf.preflight_parser import ( CompilerSpec, EngineType, LanguageType, @@ -20,9 +24,6 @@ ToplevelFile, string_to_bool, ) -from pydantic import BaseModel, ValidationError -from ruamel.yaml import YAML, MappingNode, ScalarNode -from ruamel.yaml.representer import RoundTripRepresenter # 00README file extensions - earlier wins ZZRM_EXTS = [".yml", ".yaml", ".json", ".jsn", ".ndjson", ".toml", ".xxx"] @@ -103,10 +104,11 @@ def __init__(self, in_dir: str | None = None, version: int = 1): def to_dict(self) -> OrderedDict: """Representation of ZZRM as dictionary.""" - result = OrderedDict() + result: OrderedDict[str, typing.Any] = OrderedDict() result["process"] = self.process.dict(exclude_none=True, exclude_defaults=True) # the zzrm.process.compiler should be the compiler_string, not the actual object - result["process"]["compiler"] = self.process.compiler.compiler_string + if self.process.compiler is not None: + result["process"]["compiler"] = self.process.compiler.compiler_string if self.sources.keys(): result["sources"] = [] for k, v in self.sources.items(): @@ -345,22 +347,22 @@ def update_from_preflight(self, pf: PreflightResponse) -> bool: # Couldn't find selected file in list of toplevel files return False if self.process.compiler.engine == EngineType.unknown: - if found_tlp.process.compiler.engine == EngineType.unknown: + if found_tlp.process.compiler is None or found_tlp.process.compiler.engine == EngineType.unknown: self.process.compiler.engine = DEFAULT_ENGINE_TYPE else: self.process.compiler.engine = found_tlp.process.compiler.engine if self.process.compiler.lang == LanguageType.unknown: - if found_tlp.process.compiler.lang == LanguageType.unknown: + if found_tlp.process.compiler is None or found_tlp.process.compiler.lang == LanguageType.unknown: self.process.compiler.lang = DEFAULT_LANGUAGE_TYPE else: self.process.compiler.lang = found_tlp.process.compiler.lang if self.process.compiler.output == OutputType.unknown: - if found_tlp.process.compiler.output == OutputType.unknown: + if found_tlp.process.compiler is None or found_tlp.process.compiler.output == OutputType.unknown: self.process.compiler.output = DEFAULT_OUTPUT_TYPE else: self.process.compiler.output = found_tlp.process.compiler.output if self.process.compiler.postp is None or self.process.compiler.postp == PostProcessType.unknown: - if found_tlp.process.compiler.postp == PostProcessType.unknown: + if found_tlp.process.compiler is None or found_tlp.process.compiler.postp == PostProcessType.unknown: self.process.compiler.postp = DEFAULT_POSTPROCESS_TYPE else: self.process.compiler.postp = found_tlp.process.compiler.postp @@ -380,7 +382,11 @@ def is_ready_for_compilation(self) -> bool: @property def is_supported_compiler(self) -> bool: """Check that we are ready for compilation and that the selected compiler is supported.""" - if self.is_ready_for_compilation and self.process.compiler.compiler_string is not None: + if ( + self.is_ready_for_compilation + and self.process.compiler is not None + and self.process.compiler.compiler_string is not None + ): return True return False diff --git a/tex2pdf/zerozeroreadme/tests/test_typings.py b/tex2pdf/zerozeroreadme/tests/test_typings.py index 1de64e9..37bbab9 100644 --- a/tex2pdf/zerozeroreadme/tests/test_typings.py +++ b/tex2pdf/zerozeroreadme/tests/test_typings.py @@ -15,8 +15,8 @@ def test_run_mypy_module(self) -> None: mypy = shutil.which("mypy") if mypy is None: raise OSError("mypy not found in PATH") - root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) - result: int = subprocess.call([mypy, "-p", "zerozeroreadme"], env=os.environ, cwd=root_dir) + root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..")) + result: int = subprocess.call([mypy, "tex2pdf/zerozeroreadme"], env=os.environ, cwd=root_dir) self.assertEqual(result, 0, "Expect 0 type errors when running mypy") From 3910989b7d0d5046b029346e9dd336901cf16f4d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 11:58:12 +0900 Subject: [PATCH 06/27] Move tex_inspection to tex2pdf --- pyproject.toml | 6 +- .../tex_inspection}/README.rst | 0 .../tex_inspection/__init__.py | 0 .../tex_inspection/banned_tex.yaml | 0 .../tex_inspection}/tests/__init__.py | 0 .../inspection/multi_tex_1/fake-file-1.Tex | 0 .../inspection/multi_tex_1/fake-file-1.bbl | 0 .../inspection/multi_tex_1/fake-file-2.bbl | 0 .../inspection/multi_tex_1/fake-file-2.tex | 0 .../inspection/multi_tex_1/fake-file-3.TEX | 0 .../inspection/multi_tex_2/00README.XXX | 0 .../inspection/multi_tex_2/fake-file-1.Tex | 0 .../inspection/multi_tex_2/fake-file-1.bbl | 0 .../inspection/multi_tex_2/fake-file-2.bbl | 0 .../inspection/multi_tex_2/fake-file-2.tex | 0 .../inspection/multi_tex_2/fake-file-3.TEX | 0 .../fixture/inspection/pdfoutput_1/artic.cls | 0 .../inspection/pdfoutput_1/fake-file-1.Tex | 0 .../inspection/pdfoutput_1/fake-file-1.bbl | 0 .../inspection/pdfoutput_1/fake-file-2.bbl | 0 .../inspection/pdfoutput_1/fake-file-2.tex | 0 .../pdfoutput_1/test/fake-file-3.inc | 0 .../single_tex_1/NOBEL_PRIZE_WINNER.TEX | 0 .../inspection/single_tex_2/00README.XXX | 0 .../inspection/single_tex_2/fake-file-1.bbl | 0 .../inspection/single_tex_2/fake-file-1.tex | 0 .../inspection/single_tex_2/fake-file-2.TEX | 0 .../inspection/single_tex_2/fake-file-2.bbl | 0 .../inspection/single_tex_2/fake-file-3.tex | 0 .../inspection/single_tex_3/fake-file-1.bbl | 0 .../inspection/single_tex_3/fake-file-1.tex | 0 .../inspection/single_tex_3/fake-file-2.TEX | 0 .../inspection/single_tex_3/fake-file-3.tex | 0 .../inspection/single_tex_4/fake-file-1.bbl | 0 .../inspection/single_tex_4/fake-file-1.tex | 0 .../inspection/single_tex_4/fake-file-2.TEX | 0 .../inspection/single_tex_4/fake-file-3.tex | 0 .../inspection/single_tex_4/fake-package.tex | 0 .../inspection/single_tex_5/00README.XXX | 0 .../inspection/single_tex_5/fake-file-1.bbl | 0 .../inspection/single_tex_5/fake-file-1.tex | 0 .../inspection/single_tex_5/fake-file-2.TEX | 0 .../inspection/single_tex_5/fake-file-2.bbl | 0 .../inspection/single_tex_5/fake-file-3.tex | 0 .../tests/readme-files/t1/00README.yaml | 0 .../tests/readme-files/t2/00README.json | 0 .../tests/readme-files/t3/00README.XXX | 0 .../tex_inspection}/tests/test_ban.py | 2 +- .../tests/test_conveter_opts.py | 2 +- .../tex_inspection}/tests/test_typings.py | 4 +- .../tex_inspection/tex_inspection.py | 0 tex_inspection/mypy.ini | 34 -- tex_inspection/poetry.lock | 375 ------------------ tex_inspection/pyproject.toml | 38 -- 54 files changed, 9 insertions(+), 452 deletions(-) rename {tex_inspection => tex2pdf/tex_inspection}/README.rst (100%) rename {tex_inspection => tex2pdf}/tex_inspection/__init__.py (100%) rename {tex_inspection => tex2pdf}/tex_inspection/banned_tex.yaml (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/__init__.py (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/multi_tex_1/fake-file-1.Tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/multi_tex_1/fake-file-1.bbl (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/multi_tex_1/fake-file-2.bbl (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/multi_tex_1/fake-file-2.tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/multi_tex_1/fake-file-3.TEX (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/multi_tex_2/00README.XXX (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/multi_tex_2/fake-file-1.Tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/multi_tex_2/fake-file-1.bbl (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/multi_tex_2/fake-file-2.bbl (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/multi_tex_2/fake-file-2.tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/multi_tex_2/fake-file-3.TEX (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/pdfoutput_1/artic.cls (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/pdfoutput_1/fake-file-1.Tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/pdfoutput_1/fake-file-1.bbl (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/pdfoutput_1/fake-file-2.bbl (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/pdfoutput_1/fake-file-2.tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/pdfoutput_1/test/fake-file-3.inc (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_1/NOBEL_PRIZE_WINNER.TEX (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_2/00README.XXX (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_2/fake-file-1.bbl (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_2/fake-file-1.tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_2/fake-file-2.TEX (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_2/fake-file-2.bbl (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_2/fake-file-3.tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_3/fake-file-1.bbl (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_3/fake-file-1.tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_3/fake-file-2.TEX (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_3/fake-file-3.tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_4/fake-file-1.bbl (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_4/fake-file-1.tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_4/fake-file-2.TEX (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_4/fake-file-3.tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_4/fake-package.tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_5/00README.XXX (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_5/fake-file-1.bbl (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_5/fake-file-1.tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_5/fake-file-2.TEX (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_5/fake-file-2.bbl (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/fixture/inspection/single_tex_5/fake-file-3.tex (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/readme-files/t1/00README.yaml (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/readme-files/t2/00README.json (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/readme-files/t3/00README.XXX (100%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/test_ban.py (92%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/test_conveter_opts.py (92%) rename {tex_inspection => tex2pdf/tex_inspection}/tests/test_typings.py (87%) rename {tex_inspection => tex2pdf}/tex_inspection/tex_inspection.py (100%) delete mode 100644 tex_inspection/mypy.ini delete mode 100644 tex_inspection/poetry.lock delete mode 100644 tex_inspection/pyproject.toml diff --git a/pyproject.toml b/pyproject.toml index ae59233..8aad969 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,11 @@ types-toml = "^0.10.8.20240310" [tool.ruff] line-length = 120 -extend-exclude = ["tex2pdf/preflight_parser/tests", "tex2pdf/zerozeroreadme/tests"] +extend-exclude = [ + "tex2pdf/preflight_parser/tests", + "tex2pdf/zerozeroreadme/tests", + "tex2pdf/tex_inspection/tests", +] lint.select = [ "F", # Pyflakes diff --git a/tex_inspection/README.rst b/tex2pdf/tex_inspection/README.rst similarity index 100% rename from tex_inspection/README.rst rename to tex2pdf/tex_inspection/README.rst diff --git a/tex_inspection/tex_inspection/__init__.py b/tex2pdf/tex_inspection/__init__.py similarity index 100% rename from tex_inspection/tex_inspection/__init__.py rename to tex2pdf/tex_inspection/__init__.py diff --git a/tex_inspection/tex_inspection/banned_tex.yaml b/tex2pdf/tex_inspection/banned_tex.yaml similarity index 100% rename from tex_inspection/tex_inspection/banned_tex.yaml rename to tex2pdf/tex_inspection/banned_tex.yaml diff --git a/tex_inspection/tests/__init__.py b/tex2pdf/tex_inspection/tests/__init__.py similarity index 100% rename from tex_inspection/tests/__init__.py rename to tex2pdf/tex_inspection/tests/__init__.py diff --git a/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-1.Tex b/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-1.Tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-1.Tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-1.Tex diff --git a/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-1.bbl b/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-1.bbl similarity index 100% rename from tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-1.bbl rename to tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-1.bbl diff --git a/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-2.bbl b/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-2.bbl similarity index 100% rename from tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-2.bbl rename to tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-2.bbl diff --git a/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-2.tex b/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-2.tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-2.tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-2.tex diff --git a/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-3.TEX b/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-3.TEX similarity index 100% rename from tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-3.TEX rename to tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-3.TEX diff --git a/tex_inspection/tests/fixture/inspection/multi_tex_2/00README.XXX b/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/00README.XXX similarity index 100% rename from tex_inspection/tests/fixture/inspection/multi_tex_2/00README.XXX rename to tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/00README.XXX diff --git a/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-1.Tex b/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-1.Tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-1.Tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-1.Tex diff --git a/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-1.bbl b/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-1.bbl similarity index 100% rename from tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-1.bbl rename to tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-1.bbl diff --git a/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-2.bbl b/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-2.bbl similarity index 100% rename from tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-2.bbl rename to tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-2.bbl diff --git a/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-2.tex b/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-2.tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-2.tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-2.tex diff --git a/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-3.TEX b/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-3.TEX similarity index 100% rename from tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-3.TEX rename to tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-3.TEX diff --git a/tex_inspection/tests/fixture/inspection/pdfoutput_1/artic.cls b/tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/artic.cls similarity index 100% rename from tex_inspection/tests/fixture/inspection/pdfoutput_1/artic.cls rename to tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/artic.cls diff --git a/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-1.Tex b/tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-1.Tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-1.Tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-1.Tex diff --git a/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-1.bbl b/tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-1.bbl similarity index 100% rename from tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-1.bbl rename to tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-1.bbl diff --git a/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-2.bbl b/tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-2.bbl similarity index 100% rename from tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-2.bbl rename to tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-2.bbl diff --git a/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-2.tex b/tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-2.tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-2.tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-2.tex diff --git a/tex_inspection/tests/fixture/inspection/pdfoutput_1/test/fake-file-3.inc b/tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/test/fake-file-3.inc similarity index 100% rename from tex_inspection/tests/fixture/inspection/pdfoutput_1/test/fake-file-3.inc rename to tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/test/fake-file-3.inc diff --git a/tex_inspection/tests/fixture/inspection/single_tex_1/NOBEL_PRIZE_WINNER.TEX b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_1/NOBEL_PRIZE_WINNER.TEX similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_1/NOBEL_PRIZE_WINNER.TEX rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_1/NOBEL_PRIZE_WINNER.TEX diff --git a/tex_inspection/tests/fixture/inspection/single_tex_2/00README.XXX b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/00README.XXX similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_2/00README.XXX rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/00README.XXX diff --git a/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-1.bbl b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-1.bbl similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-1.bbl rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-1.bbl diff --git a/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-1.tex b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-1.tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-1.tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-1.tex diff --git a/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-2.TEX b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-2.TEX similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-2.TEX rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-2.TEX diff --git a/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-2.bbl b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-2.bbl similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-2.bbl rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-2.bbl diff --git a/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-3.tex b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-3.tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-3.tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-3.tex diff --git a/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-1.bbl b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-1.bbl similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-1.bbl rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-1.bbl diff --git a/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-1.tex b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-1.tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-1.tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-1.tex diff --git a/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-2.TEX b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-2.TEX similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-2.TEX rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-2.TEX diff --git a/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-3.tex b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-3.tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-3.tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-3.tex diff --git a/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-1.bbl b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-1.bbl similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-1.bbl rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-1.bbl diff --git a/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-1.tex b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-1.tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-1.tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-1.tex diff --git a/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-2.TEX b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-2.TEX similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-2.TEX rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-2.TEX diff --git a/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-3.tex b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-3.tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-3.tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-3.tex diff --git a/tex_inspection/tests/fixture/inspection/single_tex_4/fake-package.tex b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-package.tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_4/fake-package.tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-package.tex diff --git a/tex_inspection/tests/fixture/inspection/single_tex_5/00README.XXX b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/00README.XXX similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_5/00README.XXX rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/00README.XXX diff --git a/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-1.bbl b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-1.bbl similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-1.bbl rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-1.bbl diff --git a/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-1.tex b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-1.tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-1.tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-1.tex diff --git a/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-2.TEX b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-2.TEX similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-2.TEX rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-2.TEX diff --git a/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-2.bbl b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-2.bbl similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-2.bbl rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-2.bbl diff --git a/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-3.tex b/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-3.tex similarity index 100% rename from tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-3.tex rename to tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-3.tex diff --git a/tex_inspection/tests/readme-files/t1/00README.yaml b/tex2pdf/tex_inspection/tests/readme-files/t1/00README.yaml similarity index 100% rename from tex_inspection/tests/readme-files/t1/00README.yaml rename to tex2pdf/tex_inspection/tests/readme-files/t1/00README.yaml diff --git a/tex_inspection/tests/readme-files/t2/00README.json b/tex2pdf/tex_inspection/tests/readme-files/t2/00README.json similarity index 100% rename from tex_inspection/tests/readme-files/t2/00README.json rename to tex2pdf/tex_inspection/tests/readme-files/t2/00README.json diff --git a/tex_inspection/tests/readme-files/t3/00README.XXX b/tex2pdf/tex_inspection/tests/readme-files/t3/00README.XXX similarity index 100% rename from tex_inspection/tests/readme-files/t3/00README.XXX rename to tex2pdf/tex_inspection/tests/readme-files/t3/00README.XXX diff --git a/tex_inspection/tests/test_ban.py b/tex2pdf/tex_inspection/tests/test_ban.py similarity index 92% rename from tex_inspection/tests/test_ban.py rename to tex2pdf/tex_inspection/tests/test_ban.py index ad23b8d..5191f13 100644 --- a/tex_inspection/tests/test_ban.py +++ b/tex2pdf/tex_inspection/tests/test_ban.py @@ -1,5 +1,5 @@ import unittest -from tex_inspection import maybe_banned_tex_file, is_banned_tex +from tex2pdf.tex_inspection import maybe_banned_tex_file, is_banned_tex class BanTest(unittest.TestCase): diff --git a/tex_inspection/tests/test_conveter_opts.py b/tex2pdf/tex_inspection/tests/test_conveter_opts.py similarity index 92% rename from tex_inspection/tests/test_conveter_opts.py rename to tex2pdf/tex_inspection/tests/test_conveter_opts.py index 9215baf..d9a0540 100644 --- a/tex_inspection/tests/test_conveter_opts.py +++ b/tex2pdf/tex_inspection/tests/test_conveter_opts.py @@ -1,6 +1,6 @@ import os import unittest -from tex_inspection import find_pdfoutput_1 +from tex2pdf.tex_inspection import find_pdfoutput_1 class TestConverterSelection(unittest.TestCase): diff --git a/tex_inspection/tests/test_typings.py b/tex2pdf/tex_inspection/tests/test_typings.py similarity index 87% rename from tex_inspection/tests/test_typings.py rename to tex2pdf/tex_inspection/tests/test_typings.py index 7b1cdba..aa03ab1 100644 --- a/tex_inspection/tests/test_typings.py +++ b/tex2pdf/tex_inspection/tests/test_typings.py @@ -14,8 +14,8 @@ def test_run_mypy_module(self) -> None: mypy = shutil.which("mypy") if mypy is None: raise EnvironmentError("mypy not found in PATH") - root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) - result: int = subprocess.call([mypy, "-p", "tex_inspection"], + root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..")) + result: int = subprocess.call([mypy, "tex2pdf/tex_inspection"], env=os.environ, cwd=root_dir) self.assertEqual(result, 0, 'Expect 0 type errors when running mypy') diff --git a/tex_inspection/tex_inspection/tex_inspection.py b/tex2pdf/tex_inspection/tex_inspection.py similarity index 100% rename from tex_inspection/tex_inspection/tex_inspection.py rename to tex2pdf/tex_inspection/tex_inspection.py diff --git a/tex_inspection/mypy.ini b/tex_inspection/mypy.ini deleted file mode 100644 index 32016a4..0000000 --- a/tex_inspection/mypy.ini +++ /dev/null @@ -1,34 +0,0 @@ -[mypy] -mypy_path = tex_inspection - -# -# Covered by --strict, with some turned off: -# -disallow_untyped_defs=True -check_untyped_defs=True -# currently an issue with sql alchemy -disallow_subclassing_any=false -# Need to experiment/think about this one: -disallow_any_decorated=false -warn_redundant_casts=True -warn_return_any=True -warn_unused_ignores=True -# this seems to be at least somewhat non-functioning: -warn_unused_configs=True -#may be worth reconsidering this one: -no_implicit_optional=True -strict_optional=True - -# -# Other: -# -ignore_missing_imports=True -follow_imports=silent - -# -# Plugins: -# -plugins = pydantic.mypy - -[tex_inspection.*] -disallow_untyped_calls=True diff --git a/tex_inspection/poetry.lock b/tex_inspection/poetry.lock deleted file mode 100644 index 4ced0a7..0000000 --- a/tex_inspection/poetry.lock +++ /dev/null @@ -1,375 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. - -[[package]] -name = "annotated-types" -version = "0.7.0" -description = "Reusable constraint types to use with typing.Annotated" -optional = false -python-versions = ">=3.8" -files = [ - {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, - {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, -] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -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 = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "mypy" -version = "1.11.2" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, - {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, - {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, - {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, - {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, - {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, - {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, - {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, - {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, - {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, - {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, - {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, - {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, - {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, - {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, - {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, - {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, - {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, - {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, -] - -[package.dependencies] -mypy-extensions = ">=1.0.0" -typing-extensions = ">=4.6.0" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -install-types = ["pip"] -mypyc = ["setuptools (>=50)"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "packaging" -version = "24.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, -] - -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pydantic" -version = "2.8.2" -description = "Data validation using Python type hints" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"}, - {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"}, -] - -[package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.20.1" -typing-extensions = [ - {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, - {version = ">=4.6.1", markers = "python_version < \"3.13\""}, -] - -[package.extras] -email = ["email-validator (>=2.0.0)"] - -[[package]] -name = "pydantic-core" -version = "2.20.1" -description = "Core functionality for Pydantic validation and serialization" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3"}, - {file = "pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840"}, - {file = "pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250"}, - {file = "pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c"}, - {file = "pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312"}, - {file = "pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b"}, - {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"}, - {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b"}, - {file = "pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a"}, - {file = "pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2"}, - {file = "pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231"}, - {file = "pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24"}, - {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1"}, - {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd"}, - {file = "pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688"}, - {file = "pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d"}, - {file = "pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686"}, - {file = "pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83"}, - {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203"}, - {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0"}, - {file = "pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e"}, - {file = "pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20"}, - {file = "pydantic_core-2.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91"}, - {file = "pydantic_core-2.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd"}, - {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa"}, - {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987"}, - {file = "pydantic_core-2.20.1-cp38-none-win32.whl", hash = "sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a"}, - {file = "pydantic_core-2.20.1-cp38-none-win_amd64.whl", hash = "sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434"}, - {file = "pydantic_core-2.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c"}, - {file = "pydantic_core-2.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1"}, - {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09"}, - {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab"}, - {file = "pydantic_core-2.20.1-cp39-none-win32.whl", hash = "sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2"}, - {file = "pydantic_core-2.20.1-cp39-none-win_amd64.whl", hash = "sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7"}, - {file = "pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4"}, -] - -[package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" - -[[package]] -name = "pytest" -version = "8.3.2" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, - {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=1.5,<2" - -[package.extras] -dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "ruamel-yaml" -version = "0.18.6" -description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, - {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, -] - -[package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} - -[package.extras] -docs = ["mercurial (>5.7)", "ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] - -[[package]] -name = "ruamel-yaml-clib" -version = "0.2.8" -description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -optional = false -python-versions = ">=3.6" -files = [ - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, - {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, - {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, -] - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - -[[package]] -name = "types-toml" -version = "0.10.8.20240310" -description = "Typing stubs for toml" -optional = false -python-versions = ">=3.8" -files = [ - {file = "types-toml-0.10.8.20240310.tar.gz", hash = "sha256:3d41501302972436a6b8b239c850b26689657e25281b48ff0ec06345b8830331"}, - {file = "types_toml-0.10.8.20240310-py3-none-any.whl", hash = "sha256:627b47775d25fa29977d9c70dc0cbab3f314f32c8d8d0c012f2ef5de7aaec05d"}, -] - -[[package]] -name = "typing-extensions" -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.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, -] - -[metadata] -lock-version = "2.0" -python-versions = "^3.11" -content-hash = "a4445425ef09b5cd3001f6c3bfdca49295e6c6f62cec9ef8521b456a15902090" diff --git a/tex_inspection/pyproject.toml b/tex_inspection/pyproject.toml deleted file mode 100644 index 5c9ba78..0000000 --- a/tex_inspection/pyproject.toml +++ /dev/null @@ -1,38 +0,0 @@ -[tool.poetry] -name = "tex-inspection" -version = "0.1.0" -description = "Inspecting TeX in arXiv submissions" -authors = ["arxiv.org"] -license = "BSD-3 License" -readme = "README.rst" -packages = [ - { include = "tex_inspection" } -] -include = ["LICENSE", "README.md"] - -[tool.poetry.dependencies] -python = "^3.11" -ruamel-yaml = "^0.18.5" -toml = "^0.10.2" - -[tool.poetry.group.dev.dependencies] -pytest = "^8.3.2" -mypy = "*" -mypy-extensions = "*" -pydantic = "2.8.*" -types-toml = "^0.10.8.20240310" - -[tool.ruff] -# Extend the `pyproject.toml` from the toplevel dir -extend = "../pyproject.toml" -extend-exclude = ["tests"] - -[tool.black] -line-length = 120 - -[tool.pylint] -max-line-length = 120 - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" From fe235f3c2c489bbc7c4a95efff3e1bddfbb6e72c Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 11:59:32 +0900 Subject: [PATCH 07/27] Fix preflight parser mypy test --- tex2pdf/preflight_parser/tests/test_typings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tex2pdf/preflight_parser/tests/test_typings.py b/tex2pdf/preflight_parser/tests/test_typings.py index fc1474b..c9d8e59 100644 --- a/tex2pdf/preflight_parser/tests/test_typings.py +++ b/tex2pdf/preflight_parser/tests/test_typings.py @@ -15,8 +15,8 @@ def test_run_mypy_module(self) -> None: mypy = shutil.which("mypy") if mypy is None: raise OSError("mypy not found in PATH") - root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) - result: int = subprocess.call([mypy, "-p", "preflight_parser"], env=os.environ, cwd=root_dir) + root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..")) + result: int = subprocess.call([mypy, "tex2pdf/preflight_parser"], env=os.environ, cwd=root_dir) self.assertEqual(result, 0, "Expect 0 type errors when running mypy") From c1288e24476b40e24b829c36281f6dc20d1123a7 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 12:05:31 +0900 Subject: [PATCH 08/27] Move tex2pdf_service to tex2pdf.service --- pyproject.toml | 13 +++++++++++++ .../tex2pdf => tex2pdf/service}/__init__.py | 0 .../tex2pdf => tex2pdf/service}/atomic.py | 0 .../service}/converter_driver.py | 0 .../tex2pdf => tex2pdf/service}/doc_converter.py | 0 .../tex2pdf => tex2pdf/service}/fastapi_util.py | 0 .../tex2pdf => tex2pdf/service}/favicon.ico | Bin .../tex2pdf => tex2pdf/service}/log_inspection.py | 0 .../tex2pdf => tex2pdf/service}/pdf_watermark.py | 0 .../tex2pdf => tex2pdf/service}/remote_call.py | 0 .../tex2pdf => tex2pdf/service}/service_logger.py | 0 .../tex2pdf => tex2pdf/service}/tarball.py | 0 .../service}/tests/conftest.py | 0 .../service}/tests/fixture/smoke/Test.pdf | Bin .../tests/fixture/tarballs/test1/00README.XXX | 0 .../service}/tests/fixture/tarballs/test1/Makefile | 0 .../tests/fixture/tarballs/test1/fake-file-1.bbl | 0 .../tests/fixture/tarballs/test1/fake-file-1.tex | 0 .../tests/fixture/tarballs/test1/fake-file-2.bbl | 0 .../tests/fixture/tarballs/test1/fake-file-2.tex | 0 .../tests/fixture/tarballs/test1/fake-file-3.tex | 0 .../tests/fixture/tarballs/test1/test1.tar.gz | Bin .../tests/fixture/tarballs/test2/00README.XXX | 0 .../service}/tests/fixture/tarballs/test2/Makefile | 0 .../tests/fixture/tarballs/test2/fake-file-1.bbl | 0 .../tests/fixture/tarballs/test2/fake-file-1.tex | 0 .../tests/fixture/tarballs/test2/fake-file-2.bbl | 0 .../tests/fixture/tarballs/test2/fake-file-2.tex | 0 .../tests/fixture/tarballs/test2/fake-file-3.tex | 0 .../tests/fixture/tarballs/test2/test2.tar.gz | Bin .../tests/fixture/tarballs/test3/00readme.yaml | 0 .../service}/tests/fixture/tarballs/test3/Makefile | 0 .../tests/fixture/tarballs/test3/fake-file-1.bbl | 0 .../tests/fixture/tarballs/test3/fake-file-1.tex | 0 .../tests/fixture/tarballs/test3/fake-file-2.bbl | 0 .../tests/fixture/tarballs/test3/fake-file-2.tex | 0 .../tests/fixture/tarballs/test3/fake-file-3.tex | 0 .../tests/fixture/tarballs/test3/test3.tar.gz | Bin .../tests/fixture/tarballs/test4/00readme.yaml | 0 .../service}/tests/fixture/tarballs/test4/Makefile | 0 .../service}/tests/fixture/tarballs/test4/gdp.tex | 0 .../service}/tests/fixture/tarballs/test4/main.tex | 0 .../tests/fixture/tarballs/test4/test4.tar.gz | Bin .../service}/tests/test_docker.py | 0 .../service}/tests/test_patch.py | 0 .../service}/tests/test_typings.py | 0 .../service}/tests/test_watermark.py | 0 .../tex2pdf => tex2pdf/service}/tex2pdf_api.py | 0 .../tex2pdf => tex2pdf/service}/tex_patching.py | 0 .../service}/tex_to_pdf_converters.py | 0 50 files changed, 13 insertions(+) rename {tex2pdf_service/tex2pdf => tex2pdf/service}/__init__.py (100%) rename {tex2pdf_service/tex2pdf => tex2pdf/service}/atomic.py (100%) rename {tex2pdf_service/tex2pdf => tex2pdf/service}/converter_driver.py (100%) rename {tex2pdf_service/tex2pdf => tex2pdf/service}/doc_converter.py (100%) rename {tex2pdf_service/tex2pdf => tex2pdf/service}/fastapi_util.py (100%) rename {tex2pdf_service/tex2pdf => tex2pdf/service}/favicon.ico (100%) rename {tex2pdf_service/tex2pdf => tex2pdf/service}/log_inspection.py (100%) rename {tex2pdf_service/tex2pdf => tex2pdf/service}/pdf_watermark.py (100%) rename {tex2pdf_service/tex2pdf => tex2pdf/service}/remote_call.py (100%) rename {tex2pdf_service/tex2pdf => tex2pdf/service}/service_logger.py (100%) rename {tex2pdf_service/tex2pdf => tex2pdf/service}/tarball.py (100%) rename {tex2pdf_service => tex2pdf/service}/tests/conftest.py (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/smoke/Test.pdf (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test1/00README.XXX (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test1/Makefile (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test1/fake-file-1.bbl (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test1/fake-file-1.tex (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test1/fake-file-2.bbl (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test1/fake-file-2.tex (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test1/fake-file-3.tex (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test1/test1.tar.gz (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test2/00README.XXX (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test2/Makefile (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test2/fake-file-1.bbl (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test2/fake-file-1.tex (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test2/fake-file-2.bbl (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test2/fake-file-2.tex (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test2/fake-file-3.tex (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test2/test2.tar.gz (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test3/00readme.yaml (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test3/Makefile (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test3/fake-file-1.bbl (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test3/fake-file-1.tex (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test3/fake-file-2.bbl (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test3/fake-file-2.tex (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test3/fake-file-3.tex (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test3/test3.tar.gz (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test4/00readme.yaml (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test4/Makefile (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test4/gdp.tex (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test4/main.tex (100%) rename {tex2pdf_service => tex2pdf/service}/tests/fixture/tarballs/test4/test4.tar.gz (100%) rename {tex2pdf_service => tex2pdf/service}/tests/test_docker.py (100%) rename {tex2pdf_service => tex2pdf/service}/tests/test_patch.py (100%) rename {tex2pdf_service => tex2pdf/service}/tests/test_typings.py (100%) rename {tex2pdf_service => tex2pdf/service}/tests/test_watermark.py (100%) rename {tex2pdf_service/tex2pdf => tex2pdf/service}/tex2pdf_api.py (100%) rename {tex2pdf_service/tex2pdf => tex2pdf/service}/tex_patching.py (100%) rename {tex2pdf_service/tex2pdf => tex2pdf/service}/tex_to_pdf_converters.py (100%) diff --git a/pyproject.toml b/pyproject.toml index 8aad969..7006d64 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,6 +15,15 @@ pydantic = "==1.10.*" ruamel-yaml = "^0.18.5" toml = "^0.10.2" tomli_w = "^1.0" +fastapi = "^0.104.1" +pikepdf = "^8.7.1" +python-json-logger = "^2.0.7" +pillow = "^10.4.0" +python-multipart = "^0.0.6" +psutil = "^5.9.8" +hypercorn = {extras = ["h2"], version = "^0.16.0"} +pymupdf = "^1.24.10" +requests = "^2.32.0" [tool.poetry.group.dev.dependencies] ruff = "*" @@ -22,6 +31,10 @@ pytest = "^8.3.3" mypy = "*" mypy-extensions = "*" types-toml = "^0.10.8.20240310" +click = "^8.1.7" +tqdm = "^4.66.2" +uvicorn = "^0.29.0" + [tool.ruff] line-length = 120 diff --git a/tex2pdf_service/tex2pdf/__init__.py b/tex2pdf/service/__init__.py similarity index 100% rename from tex2pdf_service/tex2pdf/__init__.py rename to tex2pdf/service/__init__.py diff --git a/tex2pdf_service/tex2pdf/atomic.py b/tex2pdf/service/atomic.py similarity index 100% rename from tex2pdf_service/tex2pdf/atomic.py rename to tex2pdf/service/atomic.py diff --git a/tex2pdf_service/tex2pdf/converter_driver.py b/tex2pdf/service/converter_driver.py similarity index 100% rename from tex2pdf_service/tex2pdf/converter_driver.py rename to tex2pdf/service/converter_driver.py diff --git a/tex2pdf_service/tex2pdf/doc_converter.py b/tex2pdf/service/doc_converter.py similarity index 100% rename from tex2pdf_service/tex2pdf/doc_converter.py rename to tex2pdf/service/doc_converter.py diff --git a/tex2pdf_service/tex2pdf/fastapi_util.py b/tex2pdf/service/fastapi_util.py similarity index 100% rename from tex2pdf_service/tex2pdf/fastapi_util.py rename to tex2pdf/service/fastapi_util.py diff --git a/tex2pdf_service/tex2pdf/favicon.ico b/tex2pdf/service/favicon.ico similarity index 100% rename from tex2pdf_service/tex2pdf/favicon.ico rename to tex2pdf/service/favicon.ico diff --git a/tex2pdf_service/tex2pdf/log_inspection.py b/tex2pdf/service/log_inspection.py similarity index 100% rename from tex2pdf_service/tex2pdf/log_inspection.py rename to tex2pdf/service/log_inspection.py diff --git a/tex2pdf_service/tex2pdf/pdf_watermark.py b/tex2pdf/service/pdf_watermark.py similarity index 100% rename from tex2pdf_service/tex2pdf/pdf_watermark.py rename to tex2pdf/service/pdf_watermark.py diff --git a/tex2pdf_service/tex2pdf/remote_call.py b/tex2pdf/service/remote_call.py similarity index 100% rename from tex2pdf_service/tex2pdf/remote_call.py rename to tex2pdf/service/remote_call.py diff --git a/tex2pdf_service/tex2pdf/service_logger.py b/tex2pdf/service/service_logger.py similarity index 100% rename from tex2pdf_service/tex2pdf/service_logger.py rename to tex2pdf/service/service_logger.py diff --git a/tex2pdf_service/tex2pdf/tarball.py b/tex2pdf/service/tarball.py similarity index 100% rename from tex2pdf_service/tex2pdf/tarball.py rename to tex2pdf/service/tarball.py diff --git a/tex2pdf_service/tests/conftest.py b/tex2pdf/service/tests/conftest.py similarity index 100% rename from tex2pdf_service/tests/conftest.py rename to tex2pdf/service/tests/conftest.py diff --git a/tex2pdf_service/tests/fixture/smoke/Test.pdf b/tex2pdf/service/tests/fixture/smoke/Test.pdf similarity index 100% rename from tex2pdf_service/tests/fixture/smoke/Test.pdf rename to tex2pdf/service/tests/fixture/smoke/Test.pdf diff --git a/tex2pdf_service/tests/fixture/tarballs/test1/00README.XXX b/tex2pdf/service/tests/fixture/tarballs/test1/00README.XXX similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test1/00README.XXX rename to tex2pdf/service/tests/fixture/tarballs/test1/00README.XXX diff --git a/tex2pdf_service/tests/fixture/tarballs/test1/Makefile b/tex2pdf/service/tests/fixture/tarballs/test1/Makefile similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test1/Makefile rename to tex2pdf/service/tests/fixture/tarballs/test1/Makefile diff --git a/tex2pdf_service/tests/fixture/tarballs/test1/fake-file-1.bbl b/tex2pdf/service/tests/fixture/tarballs/test1/fake-file-1.bbl similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test1/fake-file-1.bbl rename to tex2pdf/service/tests/fixture/tarballs/test1/fake-file-1.bbl diff --git a/tex2pdf_service/tests/fixture/tarballs/test1/fake-file-1.tex b/tex2pdf/service/tests/fixture/tarballs/test1/fake-file-1.tex similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test1/fake-file-1.tex rename to tex2pdf/service/tests/fixture/tarballs/test1/fake-file-1.tex diff --git a/tex2pdf_service/tests/fixture/tarballs/test1/fake-file-2.bbl b/tex2pdf/service/tests/fixture/tarballs/test1/fake-file-2.bbl similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test1/fake-file-2.bbl rename to tex2pdf/service/tests/fixture/tarballs/test1/fake-file-2.bbl diff --git a/tex2pdf_service/tests/fixture/tarballs/test1/fake-file-2.tex b/tex2pdf/service/tests/fixture/tarballs/test1/fake-file-2.tex similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test1/fake-file-2.tex rename to tex2pdf/service/tests/fixture/tarballs/test1/fake-file-2.tex diff --git a/tex2pdf_service/tests/fixture/tarballs/test1/fake-file-3.tex b/tex2pdf/service/tests/fixture/tarballs/test1/fake-file-3.tex similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test1/fake-file-3.tex rename to tex2pdf/service/tests/fixture/tarballs/test1/fake-file-3.tex diff --git a/tex2pdf_service/tests/fixture/tarballs/test1/test1.tar.gz b/tex2pdf/service/tests/fixture/tarballs/test1/test1.tar.gz similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test1/test1.tar.gz rename to tex2pdf/service/tests/fixture/tarballs/test1/test1.tar.gz diff --git a/tex2pdf_service/tests/fixture/tarballs/test2/00README.XXX b/tex2pdf/service/tests/fixture/tarballs/test2/00README.XXX similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test2/00README.XXX rename to tex2pdf/service/tests/fixture/tarballs/test2/00README.XXX diff --git a/tex2pdf_service/tests/fixture/tarballs/test2/Makefile b/tex2pdf/service/tests/fixture/tarballs/test2/Makefile similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test2/Makefile rename to tex2pdf/service/tests/fixture/tarballs/test2/Makefile diff --git a/tex2pdf_service/tests/fixture/tarballs/test2/fake-file-1.bbl b/tex2pdf/service/tests/fixture/tarballs/test2/fake-file-1.bbl similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test2/fake-file-1.bbl rename to tex2pdf/service/tests/fixture/tarballs/test2/fake-file-1.bbl diff --git a/tex2pdf_service/tests/fixture/tarballs/test2/fake-file-1.tex b/tex2pdf/service/tests/fixture/tarballs/test2/fake-file-1.tex similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test2/fake-file-1.tex rename to tex2pdf/service/tests/fixture/tarballs/test2/fake-file-1.tex diff --git a/tex2pdf_service/tests/fixture/tarballs/test2/fake-file-2.bbl b/tex2pdf/service/tests/fixture/tarballs/test2/fake-file-2.bbl similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test2/fake-file-2.bbl rename to tex2pdf/service/tests/fixture/tarballs/test2/fake-file-2.bbl diff --git a/tex2pdf_service/tests/fixture/tarballs/test2/fake-file-2.tex b/tex2pdf/service/tests/fixture/tarballs/test2/fake-file-2.tex similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test2/fake-file-2.tex rename to tex2pdf/service/tests/fixture/tarballs/test2/fake-file-2.tex diff --git a/tex2pdf_service/tests/fixture/tarballs/test2/fake-file-3.tex b/tex2pdf/service/tests/fixture/tarballs/test2/fake-file-3.tex similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test2/fake-file-3.tex rename to tex2pdf/service/tests/fixture/tarballs/test2/fake-file-3.tex diff --git a/tex2pdf_service/tests/fixture/tarballs/test2/test2.tar.gz b/tex2pdf/service/tests/fixture/tarballs/test2/test2.tar.gz similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test2/test2.tar.gz rename to tex2pdf/service/tests/fixture/tarballs/test2/test2.tar.gz diff --git a/tex2pdf_service/tests/fixture/tarballs/test3/00readme.yaml b/tex2pdf/service/tests/fixture/tarballs/test3/00readme.yaml similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test3/00readme.yaml rename to tex2pdf/service/tests/fixture/tarballs/test3/00readme.yaml diff --git a/tex2pdf_service/tests/fixture/tarballs/test3/Makefile b/tex2pdf/service/tests/fixture/tarballs/test3/Makefile similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test3/Makefile rename to tex2pdf/service/tests/fixture/tarballs/test3/Makefile diff --git a/tex2pdf_service/tests/fixture/tarballs/test3/fake-file-1.bbl b/tex2pdf/service/tests/fixture/tarballs/test3/fake-file-1.bbl similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test3/fake-file-1.bbl rename to tex2pdf/service/tests/fixture/tarballs/test3/fake-file-1.bbl diff --git a/tex2pdf_service/tests/fixture/tarballs/test3/fake-file-1.tex b/tex2pdf/service/tests/fixture/tarballs/test3/fake-file-1.tex similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test3/fake-file-1.tex rename to tex2pdf/service/tests/fixture/tarballs/test3/fake-file-1.tex diff --git a/tex2pdf_service/tests/fixture/tarballs/test3/fake-file-2.bbl b/tex2pdf/service/tests/fixture/tarballs/test3/fake-file-2.bbl similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test3/fake-file-2.bbl rename to tex2pdf/service/tests/fixture/tarballs/test3/fake-file-2.bbl diff --git a/tex2pdf_service/tests/fixture/tarballs/test3/fake-file-2.tex b/tex2pdf/service/tests/fixture/tarballs/test3/fake-file-2.tex similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test3/fake-file-2.tex rename to tex2pdf/service/tests/fixture/tarballs/test3/fake-file-2.tex diff --git a/tex2pdf_service/tests/fixture/tarballs/test3/fake-file-3.tex b/tex2pdf/service/tests/fixture/tarballs/test3/fake-file-3.tex similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test3/fake-file-3.tex rename to tex2pdf/service/tests/fixture/tarballs/test3/fake-file-3.tex diff --git a/tex2pdf_service/tests/fixture/tarballs/test3/test3.tar.gz b/tex2pdf/service/tests/fixture/tarballs/test3/test3.tar.gz similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test3/test3.tar.gz rename to tex2pdf/service/tests/fixture/tarballs/test3/test3.tar.gz diff --git a/tex2pdf_service/tests/fixture/tarballs/test4/00readme.yaml b/tex2pdf/service/tests/fixture/tarballs/test4/00readme.yaml similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test4/00readme.yaml rename to tex2pdf/service/tests/fixture/tarballs/test4/00readme.yaml diff --git a/tex2pdf_service/tests/fixture/tarballs/test4/Makefile b/tex2pdf/service/tests/fixture/tarballs/test4/Makefile similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test4/Makefile rename to tex2pdf/service/tests/fixture/tarballs/test4/Makefile diff --git a/tex2pdf_service/tests/fixture/tarballs/test4/gdp.tex b/tex2pdf/service/tests/fixture/tarballs/test4/gdp.tex similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test4/gdp.tex rename to tex2pdf/service/tests/fixture/tarballs/test4/gdp.tex diff --git a/tex2pdf_service/tests/fixture/tarballs/test4/main.tex b/tex2pdf/service/tests/fixture/tarballs/test4/main.tex similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test4/main.tex rename to tex2pdf/service/tests/fixture/tarballs/test4/main.tex diff --git a/tex2pdf_service/tests/fixture/tarballs/test4/test4.tar.gz b/tex2pdf/service/tests/fixture/tarballs/test4/test4.tar.gz similarity index 100% rename from tex2pdf_service/tests/fixture/tarballs/test4/test4.tar.gz rename to tex2pdf/service/tests/fixture/tarballs/test4/test4.tar.gz diff --git a/tex2pdf_service/tests/test_docker.py b/tex2pdf/service/tests/test_docker.py similarity index 100% rename from tex2pdf_service/tests/test_docker.py rename to tex2pdf/service/tests/test_docker.py diff --git a/tex2pdf_service/tests/test_patch.py b/tex2pdf/service/tests/test_patch.py similarity index 100% rename from tex2pdf_service/tests/test_patch.py rename to tex2pdf/service/tests/test_patch.py diff --git a/tex2pdf_service/tests/test_typings.py b/tex2pdf/service/tests/test_typings.py similarity index 100% rename from tex2pdf_service/tests/test_typings.py rename to tex2pdf/service/tests/test_typings.py diff --git a/tex2pdf_service/tests/test_watermark.py b/tex2pdf/service/tests/test_watermark.py similarity index 100% rename from tex2pdf_service/tests/test_watermark.py rename to tex2pdf/service/tests/test_watermark.py diff --git a/tex2pdf_service/tex2pdf/tex2pdf_api.py b/tex2pdf/service/tex2pdf_api.py similarity index 100% rename from tex2pdf_service/tex2pdf/tex2pdf_api.py rename to tex2pdf/service/tex2pdf_api.py diff --git a/tex2pdf_service/tex2pdf/tex_patching.py b/tex2pdf/service/tex_patching.py similarity index 100% rename from tex2pdf_service/tex2pdf/tex_patching.py rename to tex2pdf/service/tex_patching.py diff --git a/tex2pdf_service/tex2pdf/tex_to_pdf_converters.py b/tex2pdf/service/tex_to_pdf_converters.py similarity index 100% rename from tex2pdf_service/tex2pdf/tex_to_pdf_converters.py rename to tex2pdf/service/tex_to_pdf_converters.py From 3963e4c524983bbafb718c40051ba65b729d2568 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 3 Dec 2024 15:19:39 +0900 Subject: [PATCH 09/27] Move remaining files of tex2pdf_service --- .gitignore | 1 + ...pliance.Dockerfile => Appliance.Dockerfile | 0 Makefile | 75 +- .../app-logging.conf => app-logging.conf | 0 .../app-logging.json => app-logging.json | 0 tex2pdf_service/app.sh => app.sh | 0 {tex2pdf_service/bin => bin}/__init__.py | 0 {scripts => bin}/check_all_submissions.sh | 0 .../bin => bin}/compile_submissions.py | 0 .../bin => bin}/docker_pdflatex.sh | 0 ...rcorn-config.toml => hypercorn-config.toml | 0 tex2pdf_service/pytest.ini => pytest.ini | 0 .../service}/README.md | 0 tex2pdf_service/.gitignore | 2 - tex2pdf_service/LICENSE | 28 - tex2pdf_service/Makefile | 70 - tex2pdf_service/mypy.ini | 34 - tex2pdf_service/poetry.lock | 1377 ----------------- tex2pdf_service/pyproject.toml | 38 - .../2023/patches/0001-pdftex-def.patch | 0 .../texlive => texlive}/2023/tex-packages.txt | 0 .../texlive => texlive}/common/texmf.cnf | 0 22 files changed, 75 insertions(+), 1550 deletions(-) rename tex2pdf_service/Appliance.Dockerfile => Appliance.Dockerfile (100%) rename tex2pdf_service/app-logging.conf => app-logging.conf (100%) rename tex2pdf_service/app-logging.json => app-logging.json (100%) rename tex2pdf_service/app.sh => app.sh (100%) rename {tex2pdf_service/bin => bin}/__init__.py (100%) rename {scripts => bin}/check_all_submissions.sh (100%) rename {tex2pdf_service/bin => bin}/compile_submissions.py (100%) rename {tex2pdf_service/bin => bin}/docker_pdflatex.sh (100%) rename tex2pdf_service/hypercorn-config.toml => hypercorn-config.toml (100%) rename tex2pdf_service/pytest.ini => pytest.ini (100%) rename {tex2pdf_service => tex2pdf/service}/README.md (100%) delete mode 100644 tex2pdf_service/.gitignore delete mode 100644 tex2pdf_service/LICENSE delete mode 100644 tex2pdf_service/Makefile delete mode 100644 tex2pdf_service/mypy.ini delete mode 100644 tex2pdf_service/poetry.lock delete mode 100644 tex2pdf_service/pyproject.toml rename {tex2pdf_service/texlive => texlive}/2023/patches/0001-pdftex-def.patch (100%) rename {tex2pdf_service/texlive => texlive}/2023/tex-packages.txt (100%) rename {tex2pdf_service/texlive => texlive}/common/texmf.cnf (100%) diff --git a/.gitignore b/.gitignore index 4f0bb85..dea1a7b 100644 --- a/.gitignore +++ b/.gitignore @@ -165,3 +165,4 @@ cython_debug/ # Emacs backups *~ \#* +.python-version diff --git a/tex2pdf_service/Appliance.Dockerfile b/Appliance.Dockerfile similarity index 100% rename from tex2pdf_service/Appliance.Dockerfile rename to Appliance.Dockerfile diff --git a/Makefile b/Makefile index 6cd2a51..313959f 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,77 @@ +app_tag := public-tex2pdf-app +app_name := public_tex2pdf_app +app_port := 6301 +dockerport := 8080 + +TEXLIVE_BASE_RELEASE := 2024 +TEXLIVE_BASE_IMAGE_DATE := 2024-07-21 +base_tag_version := ${TEXLIVE_BASE_RELEASE}-${TEXLIVE_BASE_IMAGE_DATE} + + +ROOT_DIR := $(shell pwd) +TEX2PDF_CPUS := $(shell echo $${TEX2PDF_CPUS:-4}) +TEX2PDF_WORKERS := $(shell echo $${TEX2PDF_WORKERS:-8}) +TEX2PDF_DOCKER_PLATFORM := $(shell echo $${TEX2PDF_DOCKER_PLATFORM:-linux/amd64}) + +APP_DOCKER_RUN := docker run --cpus ${TEX2PDF_CPUS} --rm -p ${app_port}:${dockerport} -e PORT=${dockerport} -e WORKERS=${TEX2PDF_WORKERS} --name ${app_name} --security-opt="no-new-privileges=true" + +.PHONY: HELLO app.docker app.run app.stop + +default: HELLO venv/lib/python3.11/site-packages/fastapi + +HELLO: + @echo To see the README of this Makefile, type "make help" + @echo Local HTTP port is ${app_port} + @echo Docker command params is: + @echo ${APP_DOCKER_RUN} + + +#-# +#-# Command: help +#-# show this message +help: + @awk '/^#-#/ { print substr($$0, 5)}' Makefile + +#-# +#-# Command: app.docker +#-# builds the applience docker image +app.docker: + @if [ -n "$$INSIDE_EMACS" ]; then \ + echo "Detected Emacs shell mode, stopping."; \ + exit 1; \ + fi + @echo "PLATFORM: ${PLATFORM}" + @echo "dockerport: ${app_port}" + @echo "tag: ${appl_tag}" + docker buildx build -f ./Appliance.Dockerfile \ + --progress=plain \ + --build-arg TEXLIVE_BASE_RELEASE=${TEXLIVE_BASE_RELEASE} \ + --build-arg TEXLIVE_BASE_IMAGE_DATE=${TEXLIVE_BASE_IMAGE_DATE} \ + --platform=linux/amd64 -t ${app_tag}-${base_tag_version}:latest . + +#-# +#-# Command: app.run +#-# runs the appliance container with the terminal attached (for test) +app.run: app.stop + ${APP_DOCKER_RUN} -it ${app_tag}-${base_tag_version}:latest + +#-# +#-# Command: app.stop +#-# stops the appliance container +app.stop: + -docker container kill ${app_name} + -docker container rm ${app_name} + +#-# +#-# Command: sh +#-# runs a bash shell in the container to look inside of it +app.sh: app.stop + ${APP_DOCKER_RUN} -v ${HOME}/Downloads:/home/worker/Downloads -w /home/worker -it ${app_tag}-${base_tag_version}:latest /bin/bash + + + +##### Makefile entries for preflight parser regenerate_test_json: rm -f tests/*.json - for i in tests/* ; do echo "=== $$i ===" ; python -m preflight_parser $$i | json_pp > $$i.json; done + for i in tests/* ; do echo "=== $$i ===" ; python -m tex2pdf.preflight_parser $$i | json_pp > $$i.json; done diff --git a/tex2pdf_service/app-logging.conf b/app-logging.conf similarity index 100% rename from tex2pdf_service/app-logging.conf rename to app-logging.conf diff --git a/tex2pdf_service/app-logging.json b/app-logging.json similarity index 100% rename from tex2pdf_service/app-logging.json rename to app-logging.json diff --git a/tex2pdf_service/app.sh b/app.sh similarity index 100% rename from tex2pdf_service/app.sh rename to app.sh diff --git a/tex2pdf_service/bin/__init__.py b/bin/__init__.py similarity index 100% rename from tex2pdf_service/bin/__init__.py rename to bin/__init__.py diff --git a/scripts/check_all_submissions.sh b/bin/check_all_submissions.sh similarity index 100% rename from scripts/check_all_submissions.sh rename to bin/check_all_submissions.sh diff --git a/tex2pdf_service/bin/compile_submissions.py b/bin/compile_submissions.py similarity index 100% rename from tex2pdf_service/bin/compile_submissions.py rename to bin/compile_submissions.py diff --git a/tex2pdf_service/bin/docker_pdflatex.sh b/bin/docker_pdflatex.sh similarity index 100% rename from tex2pdf_service/bin/docker_pdflatex.sh rename to bin/docker_pdflatex.sh diff --git a/tex2pdf_service/hypercorn-config.toml b/hypercorn-config.toml similarity index 100% rename from tex2pdf_service/hypercorn-config.toml rename to hypercorn-config.toml diff --git a/tex2pdf_service/pytest.ini b/pytest.ini similarity index 100% rename from tex2pdf_service/pytest.ini rename to pytest.ini diff --git a/tex2pdf_service/README.md b/tex2pdf/service/README.md similarity index 100% rename from tex2pdf_service/README.md rename to tex2pdf/service/README.md diff --git a/tex2pdf_service/.gitignore b/tex2pdf_service/.gitignore deleted file mode 100644 index 9ecd09b..0000000 --- a/tex2pdf_service/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -cicd/* -/tests/test-output/ diff --git a/tex2pdf_service/LICENSE b/tex2pdf_service/LICENSE deleted file mode 100644 index e5a887f..0000000 --- a/tex2pdf_service/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2024, arXiv - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/tex2pdf_service/Makefile b/tex2pdf_service/Makefile deleted file mode 100644 index eb142ce..0000000 --- a/tex2pdf_service/Makefile +++ /dev/null @@ -1,70 +0,0 @@ -app_tag := public-tex2pdf-app -app_name := public_tex2pdf_app -app_port := 6301 -dockerport := 8080 - -TEXLIVE_BASE_RELEASE := 2024 -TEXLIVE_BASE_IMAGE_DATE := 2024-07-21 -base_tag_version := ${TEXLIVE_BASE_RELEASE}-${TEXLIVE_BASE_IMAGE_DATE} - - -ROOT_DIR := $(shell pwd) -TEX2PDF_CPUS := $(shell echo $${TEX2PDF_CPUS:-4}) -TEX2PDF_WORKERS := $(shell echo $${TEX2PDF_WORKERS:-8}) -TEX2PDF_DOCKER_PLATFORM := $(shell echo $${TEX2PDF_DOCKER_PLATFORM:-linux/amd64}) - -APP_DOCKER_RUN := docker run --cpus ${TEX2PDF_CPUS} --rm -p ${app_port}:${dockerport} -e PORT=${dockerport} -e WORKERS=${TEX2PDF_WORKERS} --name ${app_name} --security-opt="no-new-privileges=true" - -.PHONY: HELLO app.docker app.run app.stop - -default: HELLO venv/lib/python3.11/site-packages/fastapi - -HELLO: - @echo To see the README of this Makefile, type "make help" - @echo Local HTTP port is ${app_port} - @echo Docker command params is: - @echo ${APP_DOCKER_RUN} - - -#-# -#-# Command: help -#-# show this message -help: - @awk '/^#-#/ { print substr($$0, 5)}' Makefile - -#-# -#-# Command: app.docker -#-# builds the applience docker image -app.docker: - @if [ -n "$$INSIDE_EMACS" ]; then \ - echo "Detected Emacs shell mode, stopping."; \ - exit 1; \ - fi - @echo "PLATFORM: ${PLATFORM}" - @echo "dockerport: ${app_port}" - @echo "tag: ${appl_tag}" - docker buildx build -f ./Appliance.Dockerfile \ - --progress=plain \ - --build-arg TEXLIVE_BASE_RELEASE=${TEXLIVE_BASE_RELEASE} \ - --build-arg TEXLIVE_BASE_IMAGE_DATE=${TEXLIVE_BASE_IMAGE_DATE} \ - --platform=linux/amd64 -t ${app_tag}-${base_tag_version}:latest . - -#-# -#-# Command: app.run -#-# runs the appliance container with the terminal attached (for test) -app.run: app.stop - ${APP_DOCKER_RUN} -it ${app_tag}-${base_tag_version}:latest - -#-# -#-# Command: app.stop -#-# stops the appliance container -app.stop: - -docker container kill ${app_name} - -docker container rm ${app_name} - -#-# -#-# Command: sh -#-# runs a bash shell in the container to look inside of it -app.sh: app.stop - ${APP_DOCKER_RUN} -v ${HOME}/Downloads:/home/worker/Downloads -w /home/worker -it ${app_tag}-${base_tag_version}:latest /bin/bash - diff --git a/tex2pdf_service/mypy.ini b/tex2pdf_service/mypy.ini deleted file mode 100644 index 7c41c56..0000000 --- a/tex2pdf_service/mypy.ini +++ /dev/null @@ -1,34 +0,0 @@ -[mypy] -mypy_path = tex2pdf - -# -# Covered by --strict, with some turned off: -# -disallow_untyped_defs=True -check_untyped_defs=True -# currently an issue with sql alchemy -disallow_subclassing_any=false -# Need to experiment/think about this one: -disallow_any_decorated=false -warn_redundant_casts=True -warn_return_any=True -warn_unused_ignores=True -# this seems to be at least somewhat non-functioning: -warn_unused_configs=True -#may be worth reconsidering this one: -no_implicit_optional=True -strict_optional=True - -# -# Other: -# -ignore_missing_imports=True -follow_imports=silent - -# -# Plugins: -# -plugins = pydantic.mypy - -[tex2pdf.*] -disallow_untyped_calls=True diff --git a/tex2pdf_service/poetry.lock b/tex2pdf_service/poetry.lock deleted file mode 100644 index 05ed8a2..0000000 --- a/tex2pdf_service/poetry.lock +++ /dev/null @@ -1,1377 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. - -[[package]] -name = "anyio" -version = "3.7.1" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.7" -files = [ - {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, - {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, -] - -[package.dependencies] -idna = ">=2.8" -sniffio = ">=1.1" - -[package.extras] -doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] -test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (<0.22)"] - -[[package]] -name = "astroid" -version = "3.2.4" -description = "An abstract syntax tree for Python with inference support." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "astroid-3.2.4-py3-none-any.whl", hash = "sha256:413658a61eeca6202a59231abb473f932038fbcbf1666587f66d482083413a25"}, - {file = "astroid-3.2.4.tar.gz", hash = "sha256:0e14202810b30da1b735827f78f5157be2bbd4a7a59b7707ca0bfc2fb4c0063a"}, -] - -[[package]] -name = "certifi" -version = "2024.2.2" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, -] - -[[package]] -name = "chardet" -version = "5.2.0" -description = "Universal encoding detector for Python 3" -optional = false -python-versions = ">=3.7" -files = [ - {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, - {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.3.2" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -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"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -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 = "deprecated" -version = "1.2.14" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, - {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, -] - -[package.dependencies] -wrapt = ">=1.10,<2" - -[package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] - -[[package]] -name = "dill" -version = "0.3.8" -description = "serialize all of Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, - {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, -] - -[package.extras] -graph = ["objgraph (>=1.7.2)"] -profile = ["gprof2dot (>=2022.7.29)"] - -[[package]] -name = "fastapi" -version = "0.104.1" -description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fastapi-0.104.1-py3-none-any.whl", hash = "sha256:752dc31160cdbd0436bb93bad51560b57e525cbb1d4bbf6f4904ceee75548241"}, - {file = "fastapi-0.104.1.tar.gz", hash = "sha256:e5e4540a7c5e1dcfbbcf5b903c234feddcdcd881f191977a1c5dfd917487e7ae"}, -] - -[package.dependencies] -anyio = ">=3.7.1,<4.0.0" -pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" -starlette = ">=0.27.0,<0.28.0" -typing-extensions = ">=4.8.0" - -[package.extras] -all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "h2" -version = "4.1.0" -description = "HTTP/2 State-Machine based protocol implementation" -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "h2-4.1.0-py3-none-any.whl", hash = "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d"}, - {file = "h2-4.1.0.tar.gz", hash = "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb"}, -] - -[package.dependencies] -hpack = ">=4.0,<5" -hyperframe = ">=6.0,<7" - -[[package]] -name = "hpack" -version = "4.0.0" -description = "Pure-Python HPACK header compression" -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "hpack-4.0.0-py3-none-any.whl", hash = "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c"}, - {file = "hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"}, -] - -[[package]] -name = "hypercorn" -version = "0.16.0" -description = "A ASGI Server based on Hyper libraries and inspired by Gunicorn" -optional = false -python-versions = ">=3.8" -files = [ - {file = "hypercorn-0.16.0-py3-none-any.whl", hash = "sha256:929e45c4acde3fbf7c58edf55336d30a009d2b4cb1f1eb96e6a515d61b663f58"}, - {file = "hypercorn-0.16.0.tar.gz", hash = "sha256:3b17d1dcf4992c1f262d9f9dd799c374125d0b9a8e40e1e2d11e2938b0adfe03"}, -] - -[package.dependencies] -h11 = "*" -h2 = ">=3.1.0" -priority = "*" -wsproto = ">=0.14.0" - -[package.extras] -docs = ["pydata_sphinx_theme", "sphinxcontrib_mermaid"] -h3 = ["aioquic (>=0.9.0,<1.0)"] -trio = ["exceptiongroup (>=1.1.0)", "trio (>=0.22.0)"] -uvloop = ["uvloop"] - -[[package]] -name = "hyperframe" -version = "6.0.1" -description = "HTTP/2 framing layer for Python" -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "hyperframe-6.0.1-py3-none-any.whl", hash = "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15"}, - {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, -] - -[[package]] -name = "idna" -version = "3.7" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, -] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "isort" -version = "5.13.2" -description = "A Python utility / library to sort Python imports." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, - {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, -] - -[package.extras] -colors = ["colorama (>=0.4.6)"] - -[[package]] -name = "lxml" -version = "5.3.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.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, - {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7"}, - {file = "lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80"}, - {file = "lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3"}, - {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b"}, - {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be"}, - {file = "lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9"}, - {file = "lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1"}, - {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859"}, - {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d"}, - {file = "lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30"}, - {file = "lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f"}, - {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a"}, - {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b"}, - {file = "lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957"}, - {file = "lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d"}, - {file = "lxml-5.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8f0de2d390af441fe8b2c12626d103540b5d850d585b18fcada58d972b74a74e"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1afe0a8c353746e610bd9031a630a95bcfb1a720684c3f2b36c4710a0a96528f"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56b9861a71575f5795bde89256e7467ece3d339c9b43141dbdd54544566b3b94"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:9fb81d2824dff4f2e297a276297e9031f46d2682cafc484f49de182aa5e5df99"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2c226a06ecb8cdef28845ae976da407917542c5e6e75dcac7cc33eb04aaeb237"}, - {file = "lxml-5.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:7d3d1ca42870cdb6d0d29939630dbe48fa511c203724820fc0fd507b2fb46577"}, - {file = "lxml-5.3.0-cp36-cp36m-win32.whl", hash = "sha256:094cb601ba9f55296774c2d57ad68730daa0b13dc260e1f941b4d13678239e70"}, - {file = "lxml-5.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:eafa2c8658f4e560b098fe9fc54539f86528651f61849b22111a9b107d18910c"}, - {file = "lxml-5.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb83f8a875b3d9b458cada4f880fa498646874ba4011dc974e071a0a84a1b033"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25f1b69d41656b05885aa185f5fdf822cb01a586d1b32739633679699f220391"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23e0553b8055600b3bf4a00b255ec5c92e1e4aebf8c2c09334f8368e8bd174d6"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ada35dd21dc6c039259596b358caab6b13f4db4d4a7f8665764d616daf9cc1d"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:81b4e48da4c69313192d8c8d4311e5d818b8be1afe68ee20f6385d0e96fc9512"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:2bc9fd5ca4729af796f9f59cd8ff160fe06a474da40aca03fcc79655ddee1a8b"}, - {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07da23d7ee08577760f0a71d67a861019103e4812c87e2fab26b039054594cc5"}, - {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:ea2e2f6f801696ad7de8aec061044d6c8c0dd4037608c7cab38a9a4d316bfb11"}, - {file = "lxml-5.3.0-cp37-cp37m-win32.whl", hash = "sha256:5c54afdcbb0182d06836cc3d1be921e540be3ebdf8b8a51ee3ef987537455f84"}, - {file = "lxml-5.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f2901429da1e645ce548bf9171784c0f74f0718c3f6150ce166be39e4dd66c3e"}, - {file = "lxml-5.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c56a1d43b2f9ee4786e4658c7903f05da35b923fb53c11025712562d5cc02753"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ee8c39582d2652dcd516d1b879451500f8db3fe3607ce45d7c5957ab2596040"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdf3a3059611f7585a78ee10399a15566356116a4288380921a4b598d807a22"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:146173654d79eb1fc97498b4280c1d3e1e5d58c398fa530905c9ea50ea849b22"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0a7056921edbdd7560746f4221dca89bb7a3fe457d3d74267995253f46343f15"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:9e4b47ac0f5e749cfc618efdf4726269441014ae1d5583e047b452a32e221920"}, - {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f914c03e6a31deb632e2daa881fe198461f4d06e57ac3d0e05bbcab8eae01945"}, - {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:213261f168c5e1d9b7535a67e68b1f59f92398dd17a56d934550837143f79c42"}, - {file = "lxml-5.3.0-cp38-cp38-win32.whl", hash = "sha256:218c1b2e17a710e363855594230f44060e2025b05c80d1f0661258142b2add2e"}, - {file = "lxml-5.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:315f9542011b2c4e1d280e4a20ddcca1761993dda3afc7a73b01235f8641e903"}, - {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1ffc23010330c2ab67fac02781df60998ca8fe759e8efde6f8b756a20599c5de"}, - {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b3778cb38212f52fac9fe913017deea2fdf4eb1a4f8e4cfc6b009a13a6d3fcc"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b0c7a688944891086ba192e21c5229dea54382f4836a209ff8d0a660fac06be"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:747a3d3e98e24597981ca0be0fd922aebd471fa99d0043a3842d00cdcad7ad6a"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86a6b24b19eaebc448dc56b87c4865527855145d851f9fc3891673ff97950540"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b11a5d918a6216e521c715b02749240fb07ae5a1fefd4b7bf12f833bc8b4fe70"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b87753c784d6acb8a25b05cb526c3406913c9d988d51f80adecc2b0775d6aa"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:109fa6fede314cc50eed29e6e56c540075e63d922455346f11e4d7a036d2b8cf"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02ced472497b8362c8e902ade23e3300479f4f43e45f4105c85ef43b8db85229"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:6b038cc86b285e4f9fea2ba5ee76e89f21ed1ea898e287dc277a25884f3a7dfe"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7437237c6a66b7ca341e868cda48be24b8701862757426852c9b3186de1da8a2"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7f41026c1d64043a36fda21d64c5026762d53a77043e73e94b71f0521939cc71"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:482c2f67761868f0108b1743098640fbb2a28a8e15bf3f47ada9fa59d9fe08c3"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1483fd3358963cc5c1c9b122c80606a3a79ee0875bcac0204149fa09d6ff2727"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dec2d1130a9cda5b904696cec33b2cfb451304ba9081eeda7f90f724097300a"}, - {file = "lxml-5.3.0-cp39-cp39-win32.whl", hash = "sha256:a0eabd0a81625049c5df745209dc7fcef6e2aea7793e5f003ba363610aa0a3ff"}, - {file = "lxml-5.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:89e043f1d9d341c52bf2af6d02e6adde62e0a46e6755d5eb60dc6e4f0b8aeca2"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:94d6c3782907b5e40e21cadf94b13b0842ac421192f26b84c45f13f3c9d5dc27"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c300306673aa0f3ed5ed9372b21867690a17dba38c68c44b287437c362ce486b"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d9b952e07aed35fe2e1a7ad26e929595412db48535921c5013edc8aa4a35ce"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:01220dca0d066d1349bd6a1726856a78f7929f3878f7e2ee83c296c69495309e"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2d9b8d9177afaef80c53c0a9e30fa252ff3036fb1c6494d427c066a4ce6a282f"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:20094fc3f21ea0a8669dc4c61ed7fa8263bd37d97d93b90f28fc613371e7a875"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ace2c2326a319a0bb8a8b0e5b570c764962e95818de9f259ce814ee666603f19"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e67a0be1639c251d21e35fe74df6bcc40cba445c2cda7c4a967656733249e2"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd5350b55f9fecddc51385463a4f67a5da829bc741e38cf689f38ec9023f54ab"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c1fefd7e3d00921c44dc9ca80a775af49698bbfd92ea84498e56acffd4c5469"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:71a8dd38fbd2f2319136d4ae855a7078c69c9a38ae06e0c17c73fd70fc6caad8"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:97acf1e1fd66ab53dacd2c35b319d7e548380c2e9e8c54525c6e76d21b1ae3b1"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:68934b242c51eb02907c5b81d138cb977b2129a0a75a8f8b60b01cb8586c7b21"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bc2b8292966b23a6a0121f7a6c51d45d2347edcc75f016ac123b8054d3f2"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18feb4b93302091b1541221196a2155aa296c363fd233814fa11e181adebc52f"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3eb44520c4724c2e1a57c0af33a379eee41792595023f367ba3952a2d96c2aab"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:609251a0ca4770e5a8768ff902aa02bf636339c5a93f9349b48eb1f606f7f3e9"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:516f491c834eb320d6c843156440fe7fc0d50b33e44387fcec5b02f0bc118a4c"}, - {file = "lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f"}, -] - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html-clean = ["lxml-html-clean"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=3.0.11)"] - -[[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"}, -] - -[[package]] -name = "mypy" -version = "1.11.2" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, - {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, - {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, - {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, - {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, - {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, - {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, - {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, - {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, - {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, - {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, - {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, - {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, - {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, - {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, - {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, - {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, - {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, - {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, -] - -[package.dependencies] -mypy-extensions = ">=1.0.0" -typing-extensions = ">=4.6.0" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -install-types = ["pip"] -mypyc = ["setuptools (>=50)"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "packaging" -version = "24.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, -] - -[[package]] -name = "pikepdf" -version = "8.15.1" -description = "Read and write PDFs with Python, powered by qpdf" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pikepdf-8.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:afbb6a0350b72f10e5255ca3e4e0045ff137f169154f648fca3429e1487e5849"}, - {file = "pikepdf-8.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5df699268690ce2eb727b01ed4c2467121cf4982d8052e949e2f44824898e20a"}, - {file = "pikepdf-8.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:533eafa499c51af38dc0826e47c4096de9ad71d7687472faf52bb58c1d49100c"}, - {file = "pikepdf-8.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7255e74288b910d1aff299eab7085215802a8aedea8356c9f7b93d1c77e9c69a"}, - {file = "pikepdf-8.15.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bf6e2b293ead4c7a6db11fb1ebfd9d132fecb51c218a7426ece2ffc032e43d5f"}, - {file = "pikepdf-8.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:97f612783472ffe32a995415d1aac37c95bb8f42dcd6883c6346f3ae11e805a5"}, - {file = "pikepdf-8.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:26811dee5d805efcd0370903292789a1ab402e8f2870cd51129640c3cf840d7a"}, - {file = "pikepdf-8.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97f8b574b3a8e64e06cfa2d682cb4cb9e647676d67395a7d525f89798c42d0d2"}, - {file = "pikepdf-8.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:547f5ccace5e23b6d08017081ed468ce420581c4eb0d2559f458653918e8776c"}, - {file = "pikepdf-8.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34f08c8814f47427f40dce8a81235fd2cb7a741fe311f4cb8d19ea90d75c4c9d"}, - {file = "pikepdf-8.15.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cc0d99010209b67eba1c3fb0a5568b1b763e2304211eb6c4b75762d23d54af80"}, - {file = "pikepdf-8.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:07e2ebf51d84a8deefe253278e534ecc396dbbc8a263f97d2340dd583ba0803e"}, - {file = "pikepdf-8.15.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:77a58bf66222bdb1ab32840ac77e1354b0b9733fe06336e4fa3ce54d8acba70c"}, - {file = "pikepdf-8.15.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2253abe1e779c247dd55384a9b2d6c6c0e1784194302a8a72f995cdb7aaebada"}, - {file = "pikepdf-8.15.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8ba8ed8dc612fc310ce35ccc90f9641fcfb258343ab619e80086089ce8e60bf"}, - {file = "pikepdf-8.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d95bcbbd3a89bbe0817f13b46a1a0c31715e78ef8d40e57d0c09931a6bf74b7"}, - {file = "pikepdf-8.15.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f656b19c4d436e6f6d272cc952b0386e404402d3eadba49a88240ee0e3ebaca1"}, - {file = "pikepdf-8.15.1-cp312-cp312-win_amd64.whl", hash = "sha256:675f35a5e7eacc5280b75f29c9f9ae1a26883076918e458ac4d4c413ef380aee"}, - {file = "pikepdf-8.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1e7711e9564b298e9e31b5fa38f636bfe564bacf91615ceb8d1d43ba7ec68c0d"}, - {file = "pikepdf-8.15.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:29975cf72ff1b9fb8d93653dd61d4755b829701892449de978fe59f78762d469"}, - {file = "pikepdf-8.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b6e9df1e62b267c0a5b1f0eee715d98990f3977124f242dd5f2d47e8940cc00"}, - {file = "pikepdf-8.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0597d04a96ce9dd293561884f6e61be094f935e45a9a3321d7815abca05bb65b"}, - {file = "pikepdf-8.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:2917c835c1c51a3e5e440ee8acaa6a6a1c029faf6452e0b5f5f638271a05af23"}, - {file = "pikepdf-8.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0aa4e037470ed531925e961f23f6f8db7d63ca4d2881729997838e717893756f"}, - {file = "pikepdf-8.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2d7fd47b09e99ac47863b13a5fb845efa552f7c56e1572301465348484001341"}, - {file = "pikepdf-8.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f768ac2006a961b18883091fa3e057e2bc67d22df10d1bafc83c998c27b0474"}, - {file = "pikepdf-8.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:788cbc5ce7db91883fe4c334c8a9b29f6f7716f62a56551b07a9bbcee5b02388"}, - {file = "pikepdf-8.15.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b6f1079302725fe4779b2679c45e55ccd82a4cbbdf738d5441dbe774bb1b718f"}, - {file = "pikepdf-8.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:a4515b0b7ee4f8e08e7e7c9f051997006e81f5386a837048a35454c5c733dff6"}, - {file = "pikepdf-8.15.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b481d0418d2ba5736b9744aa2772ba6fc72d4e2fb052e6460a86e999ed9a9573"}, - {file = "pikepdf-8.15.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6d0118c6c6518da2e97dce24ba041cf612f91b73732398639c5194022d18e3a8"}, - {file = "pikepdf-8.15.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be566b2e0f0a9850aeb66aa7ab484f48603ff3ca66b7a64e7cb7f9de06252d16"}, - {file = "pikepdf-8.15.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9b9094845476d3341df0c1bd3c5fba53c52825f5bef42a3b8d056aa452457f85"}, - {file = "pikepdf-8.15.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2fada7e9380b63d12cf4f9ed13cd8f126e8e48a85459330cdbbeb7306e942ae9"}, - {file = "pikepdf-8.15.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e1012fa4f8e6bcd1906ed0187f2fefc7059b87bbadb62e2f7685dd77d673964e"}, - {file = "pikepdf-8.15.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61fd4d75dc501d06abeb4a6e8a341414d2546c05f7e29790057ebe7fb8c8f303"}, - {file = "pikepdf-8.15.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:23178efa64eeb48d408c95d70e4ec6fe2273e8d0d21c174a224e907b65f657f9"}, - {file = "pikepdf-8.15.1.tar.gz", hash = "sha256:653aceedb2b3a4cdb579a55aaf78632b434b7cd53e2557b2bc8c8590bfe1d92b"}, -] - -[package.dependencies] -Deprecated = "*" -lxml = ">=4.8" -packaging = "*" -Pillow = ">=10.0.1" - -[package.extras] -dev = ["pre-commit", "typer[all]"] -docs = ["Sphinx (>=3)", "sphinx-autoapi", "sphinx-design", "sphinx-issues", "sphinx-rtd-theme", "tomli"] -mypy = ["lxml-stubs", "types-Pillow", "types-requests", "types-setuptools"] -test = ["attrs (>=20.2.0)", "coverage[toml]", "hypothesis (>=6.36)", "numpy (>=1.21.0)", "psutil (>=5.9)", "pybind11", "pytest (>=6.2.5)", "pytest-cov (>=3.0.0)", "pytest-timeout (>=2.1.0)", "pytest-xdist (>=2.5.0)", "python-dateutil (>=2.8.1)", "python-xmp-toolkit (>=2.0.1)", "tomli"] - -[[package]] -name = "pillow" -version = "10.4.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, - {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, - {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, - {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, - {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, - {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, - {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, - {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, - {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, - {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, - {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, - {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, - {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, - {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, - {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, - {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, - {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, - {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, - {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, - {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, - {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, - {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, - {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, - {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, - {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, - {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, - {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, - {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, - {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, - {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, - {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, - {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, - {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, - {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, - {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, - {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, - {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, - {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, - {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, - {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, - {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, - {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=7.3)", "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"] -typing = ["typing-extensions"] -xmp = ["defusedxml"] - -[[package]] -name = "platformdirs" -version = "4.2.2" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = false -python-versions = ">=3.8" -files = [ - {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, - {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, -] - -[package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] -type = ["mypy (>=1.8)"] - -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "preflight-parser" -version = "0.0.1" -description = "TeX and LaTeX parser" -optional = false -python-versions = "^3.11" -files = [] -develop = false - -[package.dependencies] -chardet = "^5.0" -pydantic = "==1.10.*" - -[package.source] -type = "git" -url = "https://github.com/arXiv/submission-tools.git" -reference = "HEAD" -resolved_reference = "630d1504eba4e352e4cd24226bce12f47b24f045" -subdirectory = "preflight_parser" - -[[package]] -name = "priority" -version = "2.0.0" -description = "A pure-Python implementation of the HTTP/2 priority tree" -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "priority-2.0.0-py3-none-any.whl", hash = "sha256:6f8eefce5f3ad59baf2c080a664037bb4725cd0a790d53d59ab4059288faf6aa"}, - {file = "priority-2.0.0.tar.gz", hash = "sha256:c965d54f1b8d0d0b19479db3924c7c36cf672dbf2aec92d43fbdaf4492ba18c0"}, -] - -[[package]] -name = "psutil" -version = "5.9.8" -description = "Cross-platform lib for process and system monitoring in Python." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -files = [ - {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, - {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, - {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, - {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, - {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, - {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, - {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, - {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, - {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, - {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, -] - -[package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] - -[[package]] -name = "pydantic" -version = "1.10.18" -description = "Data validation and settings management using python type hints" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pydantic-1.10.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e405ffcc1254d76bb0e760db101ee8916b620893e6edfbfee563b3c6f7a67c02"}, - {file = "pydantic-1.10.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e306e280ebebc65040034bff1a0a81fd86b2f4f05daac0131f29541cafd80b80"}, - {file = "pydantic-1.10.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11d9d9b87b50338b1b7de4ebf34fd29fdb0d219dc07ade29effc74d3d2609c62"}, - {file = "pydantic-1.10.18-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b661ce52c7b5e5f600c0c3c5839e71918346af2ef20062705ae76b5c16914cab"}, - {file = "pydantic-1.10.18-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c20f682defc9ef81cd7eaa485879ab29a86a0ba58acf669a78ed868e72bb89e0"}, - {file = "pydantic-1.10.18-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c5ae6b7c8483b1e0bf59e5f1843e4fd8fd405e11df7de217ee65b98eb5462861"}, - {file = "pydantic-1.10.18-cp310-cp310-win_amd64.whl", hash = "sha256:74fe19dda960b193b0eb82c1f4d2c8e5e26918d9cda858cbf3f41dd28549cb70"}, - {file = "pydantic-1.10.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72fa46abace0a7743cc697dbb830a41ee84c9db8456e8d77a46d79b537efd7ec"}, - {file = "pydantic-1.10.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef0fe7ad7cbdb5f372463d42e6ed4ca9c443a52ce544472d8842a0576d830da5"}, - {file = "pydantic-1.10.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a00e63104346145389b8e8f500bc6a241e729feaf0559b88b8aa513dd2065481"}, - {file = "pydantic-1.10.18-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae6fa2008e1443c46b7b3a5eb03800121868d5ab6bc7cda20b5df3e133cde8b3"}, - {file = "pydantic-1.10.18-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9f463abafdc92635da4b38807f5b9972276be7c8c5121989768549fceb8d2588"}, - {file = "pydantic-1.10.18-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3445426da503c7e40baccefb2b2989a0c5ce6b163679dd75f55493b460f05a8f"}, - {file = "pydantic-1.10.18-cp311-cp311-win_amd64.whl", hash = "sha256:467a14ee2183bc9c902579bb2f04c3d3dac00eff52e252850509a562255b2a33"}, - {file = "pydantic-1.10.18-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:efbc8a7f9cb5fe26122acba1852d8dcd1e125e723727c59dcd244da7bdaa54f2"}, - {file = "pydantic-1.10.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24a4a159d0f7a8e26bf6463b0d3d60871d6a52eac5bb6a07a7df85c806f4c048"}, - {file = "pydantic-1.10.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b74be007703547dc52e3c37344d130a7bfacca7df112a9e5ceeb840a9ce195c7"}, - {file = "pydantic-1.10.18-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcb20d4cb355195c75000a49bb4a31d75e4295200df620f454bbc6bdf60ca890"}, - {file = "pydantic-1.10.18-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:46f379b8cb8a3585e3f61bf9ae7d606c70d133943f339d38b76e041ec234953f"}, - {file = "pydantic-1.10.18-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cbfbca662ed3729204090c4d09ee4beeecc1a7ecba5a159a94b5a4eb24e3759a"}, - {file = "pydantic-1.10.18-cp312-cp312-win_amd64.whl", hash = "sha256:c6d0a9f9eccaf7f438671a64acf654ef0d045466e63f9f68a579e2383b63f357"}, - {file = "pydantic-1.10.18-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3d5492dbf953d7d849751917e3b2433fb26010d977aa7a0765c37425a4026ff1"}, - {file = "pydantic-1.10.18-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe734914977eed33033b70bfc097e1baaffb589517863955430bf2e0846ac30f"}, - {file = "pydantic-1.10.18-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15fdbe568beaca9aacfccd5ceadfb5f1a235087a127e8af5e48df9d8a45ae85c"}, - {file = "pydantic-1.10.18-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c3e742f62198c9eb9201781fbebe64533a3bbf6a76a91b8d438d62b813079dbc"}, - {file = "pydantic-1.10.18-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:19a3bd00b9dafc2cd7250d94d5b578edf7a0bd7daf102617153ff9a8fa37871c"}, - {file = "pydantic-1.10.18-cp37-cp37m-win_amd64.whl", hash = "sha256:2ce3fcf75b2bae99aa31bd4968de0474ebe8c8258a0110903478bd83dfee4e3b"}, - {file = "pydantic-1.10.18-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:335a32d72c51a313b33fa3a9b0fe283503272ef6467910338e123f90925f0f03"}, - {file = "pydantic-1.10.18-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:34a3613c7edb8c6fa578e58e9abe3c0f5e7430e0fc34a65a415a1683b9c32d9a"}, - {file = "pydantic-1.10.18-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9ee4e6ca1d9616797fa2e9c0bfb8815912c7d67aca96f77428e316741082a1b"}, - {file = "pydantic-1.10.18-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23e8ec1ce4e57b4f441fc91e3c12adba023fedd06868445a5b5f1d48f0ab3682"}, - {file = "pydantic-1.10.18-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:44ae8a3e35a54d2e8fa88ed65e1b08967a9ef8c320819a969bfa09ce5528fafe"}, - {file = "pydantic-1.10.18-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5389eb3b48a72da28c6e061a247ab224381435256eb541e175798483368fdd3"}, - {file = "pydantic-1.10.18-cp38-cp38-win_amd64.whl", hash = "sha256:069b9c9fc645474d5ea3653788b544a9e0ccd3dca3ad8c900c4c6eac844b4620"}, - {file = "pydantic-1.10.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:80b982d42515632eb51f60fa1d217dfe0729f008e81a82d1544cc392e0a50ddf"}, - {file = "pydantic-1.10.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:aad8771ec8dbf9139b01b56f66386537c6fe4e76c8f7a47c10261b69ad25c2c9"}, - {file = "pydantic-1.10.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941a2eb0a1509bd7f31e355912eb33b698eb0051730b2eaf9e70e2e1589cae1d"}, - {file = "pydantic-1.10.18-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65f7361a09b07915a98efd17fdec23103307a54db2000bb92095457ca758d485"}, - {file = "pydantic-1.10.18-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6951f3f47cb5ca4da536ab161ac0163cab31417d20c54c6de5ddcab8bc813c3f"}, - {file = "pydantic-1.10.18-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7a4c5eec138a9b52c67f664c7d51d4c7234c5ad65dd8aacd919fb47445a62c86"}, - {file = "pydantic-1.10.18-cp39-cp39-win_amd64.whl", hash = "sha256:49e26c51ca854286bffc22b69787a8d4063a62bf7d83dc21d44d2ff426108518"}, - {file = "pydantic-1.10.18-py3-none-any.whl", hash = "sha256:06a189b81ffc52746ec9c8c007f16e5167c8b0a696e1a726369327e3db7b2a82"}, - {file = "pydantic-1.10.18.tar.gz", hash = "sha256:baebdff1907d1d96a139c25136a9bb7d17e118f133a76a2ef3b845e831e3403a"}, -] - -[package.dependencies] -typing-extensions = ">=4.2.0" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] - -[[package]] -name = "pylint" -version = "3.2.7" -description = "python code static checker" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "pylint-3.2.7-py3-none-any.whl", hash = "sha256:02f4aedeac91be69fb3b4bea997ce580a4ac68ce58b89eaefeaf06749df73f4b"}, - {file = "pylint-3.2.7.tar.gz", hash = "sha256:1b7a721b575eaeaa7d39db076b6e7743c993ea44f57979127c517c6c572c803e"}, -] - -[package.dependencies] -astroid = ">=3.2.4,<=3.3.0-dev0" -colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -dill = [ - {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, -] -isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" -mccabe = ">=0.6,<0.8" -platformdirs = ">=2.2.0" -tomlkit = ">=0.10.1" - -[package.extras] -spelling = ["pyenchant (>=3.2,<4.0)"] -testutils = ["gitpython (>3)"] - -[[package]] -name = "pymupdf" -version = "1.24.10" -description = "A high performance Python library for data extraction, analysis, conversion & manipulation of PDF (and other) documents." -optional = false -python-versions = ">=3.8" -files = [ - {file = "PyMuPDF-1.24.10-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:a320d44a96f0cc69364c4d7384205fdae57a511edb07e68627108546cfd3ca7d"}, - {file = "PyMuPDF-1.24.10-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:cd078bf6c5a016bb34dea0ed75030edaae1b00ca273f1fe41100c8c35a101abe"}, - {file = "PyMuPDF-1.24.10-cp310-none-manylinux2014_aarch64.whl", hash = "sha256:0edcd093db05991e9d32dd2687db408b40895214f9cecd50672cd6b79fee188f"}, - {file = "PyMuPDF-1.24.10-cp310-none-manylinux2014_x86_64.whl", hash = "sha256:9b3188a6d47bb512f749e9612f81f7ddf01c70308de6bb81b77b3a76ac43f402"}, - {file = "PyMuPDF-1.24.10-cp310-none-musllinux_1_2_x86_64.whl", hash = "sha256:e52cc55055f08d9411cd991693fb1e6c7f665e92f7b79cdfa0c3d526b2e7f9bb"}, - {file = "PyMuPDF-1.24.10-cp310-none-win32.whl", hash = "sha256:117b8a2220ec31142f6a5e4ac0235b56f239d88e57e5cef3aa047bc70e4cd1e9"}, - {file = "PyMuPDF-1.24.10-cp310-none-win_amd64.whl", hash = "sha256:98b846dd044bf7242dcea6900b16eb430adbc3f1cef58d80c83a15ca7a35ef8b"}, - {file = "PyMuPDF-1.24.10-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:5fbd67cce759fc0126902137409cf9da6313b776c4d5ff0d5200f336350f86a3"}, - {file = "PyMuPDF-1.24.10-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:2b14dbdf7c415bb0fa849527abbe7b4f1f55ae23b9355d132951f634438c59ac"}, - {file = "PyMuPDF-1.24.10-cp311-none-manylinux2014_aarch64.whl", hash = "sha256:1a87440a6cbc0d5ad513425baa0f4747841898fca6e37350ca3e6b29e5f40c01"}, - {file = "PyMuPDF-1.24.10-cp311-none-manylinux2014_x86_64.whl", hash = "sha256:c0d1ccdc062ea9961063790831e838bc43fcf9a8436a8b9f55898addf97c0f86"}, - {file = "PyMuPDF-1.24.10-cp311-none-musllinux_1_2_x86_64.whl", hash = "sha256:f68671363be5a2ba104ab7d3bad821d2994cbe3f3408538bbc27d32e6dc9f923"}, - {file = "PyMuPDF-1.24.10-cp311-none-win32.whl", hash = "sha256:49f83556cd1a7d05b36a54ccc01fce324da8a4e6854e36cc5cd94d321e428565"}, - {file = "PyMuPDF-1.24.10-cp311-none-win_amd64.whl", hash = "sha256:05b8d360766b87f4abd186eba16a56b92bae513b2361b13f633fe6256329292e"}, - {file = "PyMuPDF-1.24.10-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:f323aa7bb55e0214e632bfe24fa140bd5dcfeac2d3977bdce46e760385140513"}, - {file = "PyMuPDF-1.24.10-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:50d2972558d25ce46a8634b58787b28dbeff9b3fe4299530fc9c8c9921061e83"}, - {file = "PyMuPDF-1.24.10-cp312-none-manylinux2014_aarch64.whl", hash = "sha256:0e3969c2fdff682b3b2c6a2b463adde068d6d8e20e2133ef6c8503469259646a"}, - {file = "PyMuPDF-1.24.10-cp312-none-manylinux2014_x86_64.whl", hash = "sha256:cd78ee1ebefdfe72bc36fd4b731cc8c694eb8ef5337d8ea956b0e94cd88751fc"}, - {file = "PyMuPDF-1.24.10-cp312-none-musllinux_1_2_x86_64.whl", hash = "sha256:696eed91d2ee44e76277dfeb6bd904c84ae005378588949df6ed9be9e03b9817"}, - {file = "PyMuPDF-1.24.10-cp312-none-win32.whl", hash = "sha256:1e5413e1aeab2f18e1ca1b3ff17057a4a7c5cbf4ff14abc93203da88fc1a1dd8"}, - {file = "PyMuPDF-1.24.10-cp312-none-win_amd64.whl", hash = "sha256:227a4473fce8fa32b9268da68781048795503b67dc045867fc201e1334204bf1"}, - {file = "PyMuPDF-1.24.10-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:738baea1e9f9f1df1da6ae9f5699fc96dcad58043c34ddecb69d3840c396dfb5"}, - {file = "PyMuPDF-1.24.10-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:bbd618078c2caab742d34291bd4a4c660981bef3988dfaaadf5d534081abd8ec"}, - {file = "PyMuPDF-1.24.10-cp38-none-manylinux2014_aarch64.whl", hash = "sha256:ccda6f26985347e9f52444c64b35e243f03d8c51106e8c0709f0b0c0b80b669a"}, - {file = "PyMuPDF-1.24.10-cp38-none-manylinux2014_x86_64.whl", hash = "sha256:d31c09e2af29f778249fe93beb4e44657ed2c0f385ccd5906e84b2b6a747ba9a"}, - {file = "PyMuPDF-1.24.10-cp38-none-musllinux_1_2_x86_64.whl", hash = "sha256:dda94921c9daf0416fe77b1366200c970a1b8519f826c30be7148df6a147eb1a"}, - {file = "PyMuPDF-1.24.10-cp38-none-win32.whl", hash = "sha256:8ccb72a67386affe170a36e1a145f0a05daf1df9856130cedf4371015b66acc3"}, - {file = "PyMuPDF-1.24.10-cp38-none-win_amd64.whl", hash = "sha256:634b22c0465dc9e415acea35f98c189391c6685ed943d489c069af7a72d1f8da"}, - {file = "PyMuPDF-1.24.10-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:903b61b70952368d262603abc4b0cbe06a557872003f92bb8db4b6e608ff0817"}, - {file = "PyMuPDF-1.24.10-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:c3405e120249e2849daac4d52e25433bb0b5da4695ce8edea6cfb9cc819985c4"}, - {file = "PyMuPDF-1.24.10-cp39-none-manylinux2014_aarch64.whl", hash = "sha256:5608a60c601ab34988f96ce122d7c19d0773e57e7bbb30c7b3ced1f5b0da74cf"}, - {file = "PyMuPDF-1.24.10-cp39-none-manylinux2014_x86_64.whl", hash = "sha256:2e95f5c379dc086eaa5a2af73f2e62a0bae95e05b19963603cdf800ca51e65a6"}, - {file = "PyMuPDF-1.24.10-cp39-none-musllinux_1_2_x86_64.whl", hash = "sha256:e6a6458a3a6e7ec371176be17535825ca860d8eab5f8999958b2ac639777df5f"}, - {file = "PyMuPDF-1.24.10-cp39-none-win32.whl", hash = "sha256:c8db06b0d5fbcf9b0e8949415771bd4771c820f43b052b42bce2db44c100e384"}, - {file = "PyMuPDF-1.24.10-cp39-none-win_amd64.whl", hash = "sha256:be120588a1d41220a60d899c43600e537d1bdb73612e0230378d14df40498658"}, - {file = "PyMuPDF-1.24.10.tar.gz", hash = "sha256:bd3ebd6d3fb8a845582098362f885bfb0a31ae4272587efc2c55c5e29fe7327a"}, -] - -[package.dependencies] -PyMuPDFb = "1.24.10" - -[[package]] -name = "pymupdfb" -version = "1.24.10" -description = "MuPDF shared libraries for PyMuPDF." -optional = false -python-versions = ">=3.8" -files = [ - {file = "PyMuPDFb-1.24.10-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:cd6b24630d90dce9ab3e59d06c5e616686f8d7ec626be1311721fcb062aa0078"}, - {file = "PyMuPDFb-1.24.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fda2c34b206f724b1b5685b67188e2a57bcaa5c99bc40a0a5bc62057514c5cdf"}, - {file = "PyMuPDFb-1.24.10-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4f50a7472f9bb10cbc7a1cd589ee4626ca030b8a4a02749f9a29eb6f00c0e0db"}, - {file = "PyMuPDFb-1.24.10-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:409f1270ef2e70d845e80149ff3db9cfed578274042316cba55cc3e3882421ea"}, - {file = "PyMuPDFb-1.24.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:aca96b6e9ee3096a26810592f4d899f4d3cf3cf0c902ae7e8cca09bce4d946c4"}, - {file = "PyMuPDFb-1.24.10-py3-none-win32.whl", hash = "sha256:2d231b42fe3bf79837df235e7fbdf7ff8b46bf4ca1346d0f0124fb1cdd343ce8"}, - {file = "PyMuPDFb-1.24.10-py3-none-win_amd64.whl", hash = "sha256:27ea65c701608b6b7632703339ca33ea6d513843b26dbe9bdefb2f56f7b9b196"}, - {file = "PyMuPDFb-1.24.10.tar.gz", hash = "sha256:007b91fa9b528c5c0eecea2e49c486ac02e878274f9e31522bdd948adc5f8327"}, -] - -[[package]] -name = "pytest" -version = "8.3.3" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, - {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=1.5,<2" - -[package.extras] -dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "python-json-logger" -version = "2.0.7" -description = "A python library adding a json log formatter" -optional = false -python-versions = ">=3.6" -files = [ - {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, - {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, -] - -[[package]] -name = "python-multipart" -version = "0.0.6" -description = "A streaming multipart parser for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "python_multipart-0.0.6-py3-none-any.whl", hash = "sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18"}, - {file = "python_multipart-0.0.6.tar.gz", hash = "sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132"}, -] - -[package.extras] -dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatch", "invoke (==1.7.3)", "more-itertools (==4.3.0)", "pbr (==4.3.0)", "pluggy (==1.0.0)", "py (==1.11.0)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-timeout (==2.1.0)", "pyyaml (==5.1)"] - -[[package]] -name = "requests" -version = "2.32.3" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.8" -files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, -] - -[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 = "ruamel-yaml" -version = "0.18.6" -description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, - {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, -] - -[package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} - -[package.extras] -docs = ["mercurial (>5.7)", "ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] - -[[package]] -name = "ruamel-yaml-clib" -version = "0.2.8" -description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -optional = false -python-versions = ">=3.6" -files = [ - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b"}, - {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win32.whl", hash = "sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win32.whl", hash = "sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win32.whl", hash = "sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, - {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, -] - -[[package]] -name = "sniffio" -version = "1.3.1" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - -[[package]] -name = "starlette" -version = "0.27.0" -description = "The little ASGI library that shines." -optional = false -python-versions = ">=3.7" -files = [ - {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"}, - {file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"}, -] - -[package.dependencies] -anyio = ">=3.4.0,<5" - -[package.extras] -full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] - -[[package]] -name = "tex-inspection" -version = "0.1.0" -description = "Inspecting TeX in arXiv submissions" -optional = false -python-versions = "^3.11" -files = [] -develop = false - -[package.dependencies] -ruamel-yaml = "^0.18.5" -toml = "^0.10.2" - -[package.source] -type = "git" -url = "https://github.com/arXiv/submission-tools.git" -reference = "HEAD" -resolved_reference = "630d1504eba4e352e4cd24226bce12f47b24f045" -subdirectory = "tex_inspection" - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - -[[package]] -name = "tomli-w" -version = "1.0.0" -description = "A lil' TOML writer" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli_w-1.0.0-py3-none-any.whl", hash = "sha256:9f2a07e8be30a0729e533ec968016807069991ae2fd921a78d42f429ae5f4463"}, - {file = "tomli_w-1.0.0.tar.gz", hash = "sha256:f463434305e0336248cac9c2dc8076b707d8a12d019dd349f5c1e382dd1ae1b9"}, -] - -[[package]] -name = "tomlkit" -version = "0.13.2" -description = "Style preserving TOML library" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, - {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, -] - -[[package]] -name = "tqdm" -version = "4.66.4" -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, - {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - -[[package]] -name = "typing-extensions" -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.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.2.1" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.8" -files = [ - {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, - {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "uvicorn" -version = "0.29.0" -description = "The lightning-fast ASGI server." -optional = false -python-versions = ">=3.8" -files = [ - {file = "uvicorn-0.29.0-py3-none-any.whl", hash = "sha256:2c2aac7ff4f4365c206fd773a39bf4ebd1047c238f8b8268ad996829323473de"}, - {file = "uvicorn-0.29.0.tar.gz", hash = "sha256:6a69214c0b6a087462412670b3ef21224fa48cae0e452b5883e8e8bdfdd11dd0"}, -] - -[package.dependencies] -click = ">=7.0" -h11 = ">=0.8" - -[package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "wrapt" -version = "1.16.0" -description = "Module for decorators, wrappers and monkey patching." -optional = false -python-versions = ">=3.6" -files = [ - {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, - {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, - {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, - {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, - {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, - {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, - {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, - {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, - {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, - {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, - {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, - {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, - {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, - {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, - {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, - {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, - {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, - {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, -] - -[[package]] -name = "wsproto" -version = "1.2.0" -description = "WebSockets state-machine based protocol implementation" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, - {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, -] - -[package.dependencies] -h11 = ">=0.9.0,<1" - -[[package]] -name = "zerozeroreadme" -version = "0.0.1" -description = "00README parser and tools" -optional = false -python-versions = "^3.11" -files = [] -develop = false - -[package.dependencies] -preflight_parser = {git = "https://github.com/arXiv/submission-tools.git", subdirectory = "preflight_parser"} -ruamel-yaml = "^0.18.5" -toml = "^0.10.2" -tomli_w = "^1.0" - -[package.source] -type = "git" -url = "https://github.com/arXiv/submission-tools.git" -reference = "HEAD" -resolved_reference = "630d1504eba4e352e4cd24226bce12f47b24f045" -subdirectory = "zerozeroreadme" - -[metadata] -lock-version = "2.0" -python-versions = "^3.11" -content-hash = "8654f6602bc896c175fbf7d94828b2210804256c32baac483ec17a1266b0cf08" diff --git a/tex2pdf_service/pyproject.toml b/tex2pdf_service/pyproject.toml deleted file mode 100644 index 666fd61..0000000 --- a/tex2pdf_service/pyproject.toml +++ /dev/null @@ -1,38 +0,0 @@ -[tool.poetry] -name = "arxiv-tex2pdf" -version = "0.1.0" -description = "Compiling TeX to PDF, and provide HTTP based service" -authors = ["arxiv.org"] -packages = [ - { include = "tex2pdf" } -] -include = ["LICENSE", "README.md"] - -[tool.poetry.dependencies] -python = "^3.11" -fastapi = "^0.104.1" -pikepdf = "^8.7.1" -python-json-logger = "^2.0.7" -ruamel-yaml = "^0.18.5" -pillow = "^10.4.0" -python-multipart = "^0.0.6" -psutil = "^5.9.8" -tex_inspection = {git = "https://github.com/arXiv/submission-tools.git", subdirectory = "tex_inspection" } -preflight_parser = {git = "https://github.com/arXiv/submission-tools.git", subdirectory = "preflight_parser" } -zerozeroreadme = {git = "https://github.com/arXiv/submission-tools.git", subdirectory = "zerozeroreadme" } -hypercorn = {extras = ["h2"], version = "^0.16.0"} -pymupdf = "^1.24.10" -requests = "^2.32.0" - -[tool.poetry.group.dev.dependencies] -pytest = "^8.3.3" -pylint = "^3.2.7" -click = "^8.1.7" -mypy = "*" -mypy-extensions = "*" -tqdm = "^4.66.2" -uvicorn = "^0.29.0" - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" diff --git a/tex2pdf_service/texlive/2023/patches/0001-pdftex-def.patch b/texlive/2023/patches/0001-pdftex-def.patch similarity index 100% rename from tex2pdf_service/texlive/2023/patches/0001-pdftex-def.patch rename to texlive/2023/patches/0001-pdftex-def.patch diff --git a/tex2pdf_service/texlive/2023/tex-packages.txt b/texlive/2023/tex-packages.txt similarity index 100% rename from tex2pdf_service/texlive/2023/tex-packages.txt rename to texlive/2023/tex-packages.txt diff --git a/tex2pdf_service/texlive/common/texmf.cnf b/texlive/common/texmf.cnf similarity index 100% rename from tex2pdf_service/texlive/common/texmf.cnf rename to texlive/common/texmf.cnf From e192affcab3f0ab26d85eaca3727b026729a0c52 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 12:29:01 +0900 Subject: [PATCH 10/27] Move remaining files of tex2pdf_service --- bin/compile_submissions.py | 2 +- pyproject.toml | 1 + tex2pdf/service/converter_driver.py | 22 +++++++++++----------- tex2pdf/service/doc_converter.py | 8 ++++---- tex2pdf/service/fastapi_util.py | 2 +- tex2pdf/service/tests/test_docker.py | 2 +- tex2pdf/service/tests/test_patch.py | 2 +- tex2pdf/service/tests/test_typings.py | 4 ++-- tex2pdf/service/tests/test_watermark.py | 4 ++-- tex2pdf/service/tex2pdf_api.py | 12 ++++++------ tex2pdf/service/tex_patching.py | 2 +- tex2pdf/service/tex_to_pdf_converters.py | 8 ++++---- 12 files changed, 35 insertions(+), 34 deletions(-) diff --git a/bin/compile_submissions.py b/bin/compile_submissions.py index b1adaa3..3137f0d 100644 --- a/bin/compile_submissions.py +++ b/bin/compile_submissions.py @@ -34,7 +34,7 @@ from sqlite3 import Connection import click -from tex2pdf.remote_call import service_process_tarball +from tex2pdf.service.remote_call import service_process_tarball from tqdm import tqdm logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s: %(message)s') diff --git a/pyproject.toml b/pyproject.toml index 7006d64..1e33a55 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,6 +34,7 @@ types-toml = "^0.10.8.20240310" click = "^8.1.7" tqdm = "^4.66.2" uvicorn = "^0.29.0" +pre-commit = "*" [tool.ruff] diff --git a/tex2pdf/service/converter_driver.py b/tex2pdf/service/converter_driver.py index 41367c0..8aac966 100644 --- a/tex2pdf/service/converter_driver.py +++ b/tex2pdf/service/converter_driver.py @@ -12,8 +12,8 @@ from pikepdf import PdfError -from preflight_parser import PreflightStatusValues, generate_preflight_response -from tex2pdf import ( +from tex2pdf.preflight_parser import PreflightStatusValues, generate_preflight_response +from . import ( ID_TAG, MAX_TIME_BUDGET, catalog_files, @@ -22,15 +22,15 @@ graphics_exts, test_file_extent, ) -from tex2pdf.doc_converter import combine_documents, strip_to_basename -from tex2pdf.pdf_watermark import Watermark, add_watermark_text_to_pdf -from tex2pdf.remote_call import service_process_tarball, get_outcome_meta -from tex2pdf.service_logger import get_logger -from tex2pdf.tarball import ZZRMUnsupportedCompiler, ZZRMUnderspecified, chmod_775, unpack_tarball -from tex2pdf.tex_patching import fix_tex_sources -from tex2pdf.tex_to_pdf_converters import BaseConverter, select_converter_class -from tex_inspection import find_unused_toplevel_files, maybe_bbl -from zerozeroreadme import FileUsageType, ZeroZeroReadMe +from .doc_converter import combine_documents, strip_to_basename +from .pdf_watermark import Watermark, add_watermark_text_to_pdf +from .remote_call import service_process_tarball, get_outcome_meta +from .service_logger import get_logger +from .tarball import ZZRMUnsupportedCompiler, ZZRMUnderspecified, chmod_775, unpack_tarball +from .tex_patching import fix_tex_sources +from .tex_to_pdf_converters import BaseConverter, select_converter_class +from tex2pdf.tex_inspection import find_unused_toplevel_files, maybe_bbl +from tex2pdf.zerozeroreadme import FileUsageType, ZeroZeroReadMe unlikely_prefix = "WickedUnlkly-" # prefix for the merged PDF - with intentional typo winded_message = ("PDF %s not in t0. When this happens, there are multiple TeX sources that has " diff --git a/tex2pdf/service/doc_converter.py b/tex2pdf/service/doc_converter.py index 8e2961d..01cfc8c 100644 --- a/tex2pdf/service/doc_converter.py +++ b/tex2pdf/service/doc_converter.py @@ -9,8 +9,8 @@ from PIL import Image, UnidentifiedImageError -from tex2pdf import graphics_exts -from tex2pdf.service_logger import get_logger +from . import graphics_exts +from .service_logger import get_logger def convert_image_to_pdf(image_path: str, pdf_path: str) -> str: """Convert an image to a PDF.""" @@ -52,7 +52,7 @@ def combine_documents(doc_list: typing.List[str], out_dir: str, out_filename: st shutil.move(doc_list[0], output_path) converted_docs.append(os.path.basename(doc_list[0])) return out_filename, converted_docs, failed_docs, addon_outcome - + logger = get_logger() effective_pdf_list = [] # first collection list of pdfs to be combined (normal and converted images) @@ -89,7 +89,7 @@ def combine_documents(doc_list: typing.List[str], out_dir: str, out_filename: st shutil.move(effective_pdf_list[0], output_path) converted_docs.append(os.path.basename(effective_pdf_list[0])) return out_filename, strip_to_basename(converted_docs), strip_to_basename(failed_docs), addon_outcome - + # call gs to combine the pdf # we cannot use pikepdf (easily) here since it breaks annotations (links) gs_cmd = [ diff --git a/tex2pdf/service/fastapi_util.py b/tex2pdf/service/fastapi_util.py index 1b81560..1b2169a 100644 --- a/tex2pdf/service/fastapi_util.py +++ b/tex2pdf/service/fastapi_util.py @@ -5,7 +5,7 @@ from typing import BinaryIO, TextIO from io import BufferedIOBase from fastapi import BackgroundTasks -from tex2pdf.service_logger import get_logger +from .service_logger import get_logger def close_stream(it: BufferedIOBase | BinaryIO | TextIO, filename: str, extra: dict) -> None: diff --git a/tex2pdf/service/tests/test_docker.py b/tex2pdf/service/tests/test_docker.py index c2e1177..5c0e6b6 100644 --- a/tex2pdf/service/tests/test_docker.py +++ b/tex2pdf/service/tests/test_docker.py @@ -10,7 +10,7 @@ import pytest import requests from bin.compile_submissions import get_outcome_meta_and_files_info -from tex2pdf.converter_driver import RemoteConverterDriver +from tex2pdf.service.converter_driver import RemoteConverterDriver PORT = 33031 diff --git a/tex2pdf/service/tests/test_patch.py b/tex2pdf/service/tests/test_patch.py index 67c6aa2..bf8655b 100644 --- a/tex2pdf/service/tests/test_patch.py +++ b/tex2pdf/service/tests/test_patch.py @@ -1,6 +1,6 @@ import os import unittest -from tex2pdf.tex_patching import fix_tex_sources +from tex2pdf.service.tex_patching import fix_tex_sources test1 = r""" \usepackage{minted} diff --git a/tex2pdf/service/tests/test_typings.py b/tex2pdf/service/tests/test_typings.py index ad1b6a5..f24da02 100644 --- a/tex2pdf/service/tests/test_typings.py +++ b/tex2pdf/service/tests/test_typings.py @@ -14,8 +14,8 @@ def test_run_mypy_module(self) -> None: mypy = shutil.which("mypy") if mypy is None: raise EnvironmentError("mypy not found in PATH") - root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) - result: int = subprocess.call([mypy, "-p", "tex2pdf"], + root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..")) + result: int = subprocess.call([mypy, "tex2pdf.service"], env=os.environ, cwd=root_dir) self.assertEqual(result, 0, 'Expect 0 type errors when running mypy') diff --git a/tex2pdf/service/tests/test_watermark.py b/tex2pdf/service/tests/test_watermark.py index 54b02ad..4a0efb2 100644 --- a/tex2pdf/service/tests/test_watermark.py +++ b/tex2pdf/service/tests/test_watermark.py @@ -1,7 +1,7 @@ import os import unittest -from tex2pdf.pdf_watermark import add_watermark_text_to_pdf, Watermark +from tex2pdf.service.pdf_watermark import add_watermark_text_to_pdf, Watermark watermark_pdf = "tests/test-output/watermark.pdf" in_pdf = "tests/fixture/smoke/Test.pdf" @@ -13,7 +13,7 @@ def setUp(self) -> None: def test_watermarking(self): add_watermark_text_to_pdf(Watermark( - "Water World is in Orlando, FL.", + "Water World is in Orlando, FL.", "https://en.wikipedia.org/wiki/Waterworld" ), in_pdf, "tests/test-output/Test.pdf" diff --git a/tex2pdf/service/tex2pdf_api.py b/tex2pdf/service/tex2pdf_api.py index 537d5c1..a0da996 100644 --- a/tex2pdf/service/tex2pdf_api.py +++ b/tex2pdf/service/tex2pdf_api.py @@ -14,12 +14,12 @@ from starlette.responses import HTMLResponse, FileResponse from pydantic import BaseModel -from tex2pdf import MAX_TIME_BUDGET, USE_ADDON_TREE, MAX_TOPLEVEL_TEX_FILES, MAX_APPENDING_FILES -from tex2pdf.converter_driver import ConverterDriver, ConversionOutcomeMaker, PreflightVersion -from tex2pdf.service_logger import get_logger -from tex2pdf.tarball import ZZRMUnsupportedCompiler, ZZRMUnderspecified, save_stream, prep_tempdir, RemovedSubmission, UnsupportedArchive -from tex2pdf.fastapi_util import closer -from tex2pdf.pdf_watermark import Watermark +from . import MAX_TIME_BUDGET, USE_ADDON_TREE, MAX_TOPLEVEL_TEX_FILES, MAX_APPENDING_FILES +from .converter_driver import ConverterDriver, ConversionOutcomeMaker, PreflightVersion +from .service_logger import get_logger +from .tarball import ZZRMUnsupportedCompiler, ZZRMUnderspecified, save_stream, prep_tempdir, RemovedSubmission, UnsupportedArchive +from .fastapi_util import closer +from .pdf_watermark import Watermark log_level = os.environ.get("LOGLEVEL", "INFO").upper() get_logger().info("Starting: uid=%d gid=%d", os.getuid(), os.getgid()) diff --git a/tex2pdf/service/tex_patching.py b/tex2pdf/service/tex_patching.py index 9b54916..9001807 100644 --- a/tex2pdf/service/tex_patching.py +++ b/tex2pdf/service/tex_patching.py @@ -14,7 +14,7 @@ import re import typing -from tex_inspection import TEX_FILE_EXTS +from tex2pdf.tex_inspection import TEX_FILE_EXTS graphicspath_re = re.compile(r"\\graphicspath\{((\{.+?\})+)\}") paths_re = re.compile(r'\{(.+?)\}') diff --git a/tex2pdf/service/tex_to_pdf_converters.py b/tex2pdf/service/tex_to_pdf_converters.py index f596251..e27251d 100644 --- a/tex2pdf/service/tex_to_pdf_converters.py +++ b/tex2pdf/service/tex_to_pdf_converters.py @@ -9,11 +9,11 @@ import typing from abc import abstractmethod -from tex2pdf import file_props, local_exec, file_props_in_dir, \ +from . import file_props, local_exec, file_props_in_dir, \ MAX_LATEX_RUNS, ID_TAG, MAX_TIME_BUDGET -from tex2pdf.service_logger import get_logger -from tex_inspection import find_pdfoutput_1 -from zerozeroreadme import ZeroZeroReadMe +from .service_logger import get_logger +from tex2pdf.tex_inspection import find_pdfoutput_1 +from tex2pdf.zerozeroreadme import ZeroZeroReadMe from .log_inspection import inspect_log WITH_SHELL_ESCAPE = False From c6732d4a4e5718f389796a2b44c63b2b488eb0c6 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 12:33:14 +0900 Subject: [PATCH 11/27] Missing __init__ files, pre-commit cleanup --- .pre-commit-config.yaml | 2 -- pyproject.toml | 4 ++++ tex2pdf/__init__.py | 1 + tex2pdf/preflight_parser/tests/__init__.py | 0 4 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 tex2pdf/__init__.py create mode 100644 tex2pdf/preflight_parser/tests/__init__.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8a61241..aa58764 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,3 @@ -files: preflight_parser|zerozeroreadme|tex_inspection - default_language_version: python: python3.11 diff --git a/pyproject.toml b/pyproject.toml index 1e33a55..3cb7e81 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,6 +43,10 @@ extend-exclude = [ "tex2pdf/preflight_parser/tests", "tex2pdf/zerozeroreadme/tests", "tex2pdf/tex_inspection/tests", + "pdf_profile", + "bin", + "service-various", + "tex2pdf/service", # too much work to do for now ] lint.select = [ diff --git a/tex2pdf/__init__.py b/tex2pdf/__init__.py new file mode 100644 index 0000000..bf67382 --- /dev/null +++ b/tex2pdf/__init__.py @@ -0,0 +1 @@ +"""tex2pdf: FastAPI to compile arXiv submissions to PDF.""" diff --git a/tex2pdf/preflight_parser/tests/__init__.py b/tex2pdf/preflight_parser/tests/__init__.py new file mode 100644 index 0000000..e69de29 From 28ef6b7c7d6f4c284c32e81a360202f7392f5b54 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 13:06:02 +0900 Subject: [PATCH 12/27] reorganize imports - drop pikepdf from pyproject and unused import - make deps that are only used for the service an extra --- .../service/tests/conftest.py => conftest.py | 2 -- pyproject.toml | 22 +++++++++++-------- tex2pdf/service/converter_driver.py | 5 ----- 3 files changed, 13 insertions(+), 16 deletions(-) rename tex2pdf/service/tests/conftest.py => conftest.py (99%) diff --git a/tex2pdf/service/tests/conftest.py b/conftest.py similarity index 99% rename from tex2pdf/service/tests/conftest.py rename to conftest.py index 124385e..fcf79e8 100644 --- a/tex2pdf/service/tests/conftest.py +++ b/conftest.py @@ -1,6 +1,4 @@ - def pytest_addoption(parser): parser.addoption("--keep-docker-running", action="store_true", help="keep docker image running") parser.addoption("--no-docker-setup", action="store_true", help="do not run docker setup, expect a running docker") parser.addoption("--docker-port", action="store", default="33031", help="outside docker port to use") - diff --git a/pyproject.toml b/pyproject.toml index 3cb7e81..88aff26 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,15 +15,16 @@ pydantic = "==1.10.*" ruamel-yaml = "^0.18.5" toml = "^0.10.2" tomli_w = "^1.0" -fastapi = "^0.104.1" -pikepdf = "^8.7.1" -python-json-logger = "^2.0.7" -pillow = "^10.4.0" -python-multipart = "^0.0.6" -psutil = "^5.9.8" -hypercorn = {extras = ["h2"], version = "^0.16.0"} -pymupdf = "^1.24.10" -requests = "^2.32.0" +# the following deps are only used in the service +# and can be installed with +# poetry install --extra service +# or via the requirement.txt line +# tex2pdf[service] +python-multipart = { version = "^0.0.6", optional = true } +fastapi = { version = "^0.104.1", optional = true } +hypercorn = { extras = ["h2"], version = "^0.16.0", optional = true } +pymupdf = { version = "^1.24.10", optional = true } +requests = { version="^2.32.0", optional = true } [tool.poetry.group.dev.dependencies] ruff = "*" @@ -36,6 +37,8 @@ tqdm = "^4.66.2" uvicorn = "^0.29.0" pre-commit = "*" +[tool.poetry.extras] +service = ["hypercorn", "pymupdf", "requests", "python-multipart"] [tool.ruff] line-length = 120 @@ -46,6 +49,7 @@ extend-exclude = [ "pdf_profile", "bin", "service-various", + "conftest.py", "tex2pdf/service", # too much work to do for now ] diff --git a/tex2pdf/service/converter_driver.py b/tex2pdf/service/converter_driver.py index 8aac966..2a49e6b 100644 --- a/tex2pdf/service/converter_driver.py +++ b/tex2pdf/service/converter_driver.py @@ -10,8 +10,6 @@ import typing from enum import Enum -from pikepdf import PdfError - from tex2pdf.preflight_parser import PreflightStatusValues, generate_preflight_response from . import ( ID_TAG, @@ -393,9 +391,6 @@ def _finalize_pdf(self) -> None: outcome["pdf_file"] = final_pdf outcome["used_figures"] = used_gfx outcome["unused_figures"] = self.unused_pics()[self.max_appending_files:] + unused_gfx - except PdfError as exc: - logger.warning("Failed combining PDFs: %s", exc, extra=self.log_extra) - pass except AssemblingFileNotFound as exc: logger.warning("Failed combining PDFs: %s", exc, extra=self.log_extra) pass From 4d0540c82053f33df3ad4df2ddf5f9f264e400a8 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 13:07:17 +0900 Subject: [PATCH 13/27] add poetry.lock --- poetry.lock | 953 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 953 insertions(+) create mode 100644 poetry.lock diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..ee1a37d --- /dev/null +++ b/poetry.lock @@ -0,0 +1,953 @@ +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. + +[[package]] +name = "anyio" +version = "3.7.1" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = true +python-versions = ">=3.7" +files = [ + {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, + {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, +] + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] +test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (<0.22)"] + +[[package]] +name = "certifi" +version = "2024.8.30" +description = "Python package for providing Mozilla's CA Bundle." +optional = true +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, +] + +[[package]] +name = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + +[[package]] +name = "chardet" +version = "5.2.0" +description = "Universal encoding detector for Python 3" +optional = false +python-versions = ">=3.7" +files = [ + {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, + {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = true +python-versions = ">=3.7.0" +files = [ + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, +] + +[[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"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +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 = "distlib" +version = "0.3.9" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, + {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, +] + +[[package]] +name = "fastapi" +version = "0.104.1" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = true +python-versions = ">=3.8" +files = [ + {file = "fastapi-0.104.1-py3-none-any.whl", hash = "sha256:752dc31160cdbd0436bb93bad51560b57e525cbb1d4bbf6f4904ceee75548241"}, + {file = "fastapi-0.104.1.tar.gz", hash = "sha256:e5e4540a7c5e1dcfbbcf5b903c234feddcdcd881f191977a1c5dfd917487e7ae"}, +] + +[package.dependencies] +anyio = ">=3.7.1,<4.0.0" +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.27.0,<0.28.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "filelock" +version = "3.16.1" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, + {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +typing = ["typing-extensions (>=4.12.2)"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "h2" +version = "4.1.0" +description = "HTTP/2 State-Machine based protocol implementation" +optional = true +python-versions = ">=3.6.1" +files = [ + {file = "h2-4.1.0-py3-none-any.whl", hash = "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d"}, + {file = "h2-4.1.0.tar.gz", hash = "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb"}, +] + +[package.dependencies] +hpack = ">=4.0,<5" +hyperframe = ">=6.0,<7" + +[[package]] +name = "hpack" +version = "4.0.0" +description = "Pure-Python HPACK header compression" +optional = true +python-versions = ">=3.6.1" +files = [ + {file = "hpack-4.0.0-py3-none-any.whl", hash = "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c"}, + {file = "hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"}, +] + +[[package]] +name = "hypercorn" +version = "0.16.0" +description = "A ASGI Server based on Hyper libraries and inspired by Gunicorn" +optional = true +python-versions = ">=3.8" +files = [ + {file = "hypercorn-0.16.0-py3-none-any.whl", hash = "sha256:929e45c4acde3fbf7c58edf55336d30a009d2b4cb1f1eb96e6a515d61b663f58"}, + {file = "hypercorn-0.16.0.tar.gz", hash = "sha256:3b17d1dcf4992c1f262d9f9dd799c374125d0b9a8e40e1e2d11e2938b0adfe03"}, +] + +[package.dependencies] +h11 = "*" +h2 = ">=3.1.0" +priority = "*" +wsproto = ">=0.14.0" + +[package.extras] +docs = ["pydata_sphinx_theme", "sphinxcontrib_mermaid"] +h3 = ["aioquic (>=0.9.0,<1.0)"] +trio = ["exceptiongroup (>=1.1.0)", "trio (>=0.22.0)"] +uvloop = ["uvloop"] + +[[package]] +name = "hyperframe" +version = "6.0.1" +description = "HTTP/2 framing layer for Python" +optional = true +python-versions = ">=3.6.1" +files = [ + {file = "hyperframe-6.0.1-py3-none-any.whl", hash = "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15"}, + {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, +] + +[[package]] +name = "identify" +version = "2.6.3" +description = "File identification library for Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "identify-2.6.3-py2.py3-none-any.whl", hash = "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd"}, + {file = "identify-2.6.3.tar.gz", hash = "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = true +python-versions = ">=3.6" +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "mypy" +version = "1.13.0" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, + {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"}, + {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"}, + {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"}, + {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"}, + {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"}, + {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"}, + {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"}, + {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"}, + {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"}, + {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"}, + {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"}, + {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"}, + {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"}, + {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"}, + {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"}, + {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"}, + {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"}, + {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"}, + {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"}, + {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +typing-extensions = ">=4.6.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nodeenv" +version = "1.9.1" +description = "Node.js virtual environment builder" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, +] + +[[package]] +name = "packaging" +version = "24.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, +] + +[[package]] +name = "platformdirs" +version = "4.3.6" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pre-commit" +version = "4.0.1" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.9" +files = [ + {file = "pre_commit-4.0.1-py2.py3-none-any.whl", hash = "sha256:efde913840816312445dc98787724647c65473daefe420785f885e8ed9a06878"}, + {file = "pre_commit-4.0.1.tar.gz", hash = "sha256:80905ac375958c0444c65e9cebebd948b3cdb518f335a091a670a89d652139d2"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "priority" +version = "2.0.0" +description = "A pure-Python implementation of the HTTP/2 priority tree" +optional = true +python-versions = ">=3.6.1" +files = [ + {file = "priority-2.0.0-py3-none-any.whl", hash = "sha256:6f8eefce5f3ad59baf2c080a664037bb4725cd0a790d53d59ab4059288faf6aa"}, + {file = "priority-2.0.0.tar.gz", hash = "sha256:c965d54f1b8d0d0b19479db3924c7c36cf672dbf2aec92d43fbdaf4492ba18c0"}, +] + +[[package]] +name = "pydantic" +version = "1.10.19" +description = "Data validation and settings management using python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-1.10.19-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a415b9e95fa602b10808113967f72b2da8722061265d6af69268c111c254832d"}, + {file = "pydantic-1.10.19-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:11965f421f7eb026439d4eb7464e9182fe6d69c3d4d416e464a4485d1ba61ab6"}, + {file = "pydantic-1.10.19-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5bb81fcfc6d5bff62cd786cbd87480a11d23f16d5376ad2e057c02b3b44df96"}, + {file = "pydantic-1.10.19-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83ee8c9916689f8e6e7d90161e6663ac876be2efd32f61fdcfa3a15e87d4e413"}, + {file = "pydantic-1.10.19-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0399094464ae7f28482de22383e667625e38e1516d6b213176df1acdd0c477ea"}, + {file = "pydantic-1.10.19-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8b2cf5e26da84f2d2dee3f60a3f1782adedcee785567a19b68d0af7e1534bd1f"}, + {file = "pydantic-1.10.19-cp310-cp310-win_amd64.whl", hash = "sha256:1fc8cc264afaf47ae6a9bcbd36c018d0c6b89293835d7fb0e5e1a95898062d59"}, + {file = "pydantic-1.10.19-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d7a8a1dd68bac29f08f0a3147de1885f4dccec35d4ea926e6e637fac03cdb4b3"}, + {file = "pydantic-1.10.19-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:07d00ca5ef0de65dd274005433ce2bb623730271d495a7d190a91c19c5679d34"}, + {file = "pydantic-1.10.19-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad57004e5d73aee36f1e25e4e73a4bc853b473a1c30f652dc8d86b0a987ffce3"}, + {file = "pydantic-1.10.19-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dce355fe7ae53e3090f7f5fa242423c3a7b53260747aa398b4b3aaf8b25f41c3"}, + {file = "pydantic-1.10.19-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0d32227ea9a3bf537a2273fd2fdb6d64ab4d9b83acd9e4e09310a777baaabb98"}, + {file = "pydantic-1.10.19-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e351df83d1c9cffa53d4e779009a093be70f1d5c6bb7068584086f6a19042526"}, + {file = "pydantic-1.10.19-cp311-cp311-win_amd64.whl", hash = "sha256:d8d72553d2f3f57ce547de4fa7dc8e3859927784ab2c88343f1fc1360ff17a08"}, + {file = "pydantic-1.10.19-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d5b5b7c6bafaef90cbb7dafcb225b763edd71d9e22489647ee7df49d6d341890"}, + {file = "pydantic-1.10.19-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:570ad0aeaf98b5e33ff41af75aba2ef6604ee25ce0431ecd734a28e74a208555"}, + {file = "pydantic-1.10.19-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0890fbd7fec9e151c7512941243d830b2d6076d5df159a2030952d480ab80a4e"}, + {file = "pydantic-1.10.19-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec5c44e6e9eac5128a9bfd21610df3b8c6b17343285cc185105686888dc81206"}, + {file = "pydantic-1.10.19-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6eb56074b11a696e0b66c7181da682e88c00e5cebe6570af8013fcae5e63e186"}, + {file = "pydantic-1.10.19-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9d7d48fbc5289efd23982a0d68e973a1f37d49064ccd36d86de4543aff21e086"}, + {file = "pydantic-1.10.19-cp312-cp312-win_amd64.whl", hash = "sha256:fd34012691fbd4e67bdf4accb1f0682342101015b78327eaae3543583fcd451e"}, + {file = "pydantic-1.10.19-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4a5d5b877c7d3d9e17399571a8ab042081d22fe6904416a8b20f8af5909e6c8f"}, + {file = "pydantic-1.10.19-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c46f58ef2df958ed2ea7437a8be0897d5efe9ee480818405338c7da88186fb3"}, + {file = "pydantic-1.10.19-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d8a38a44bb6a15810084316ed69c854a7c06e0c99c5429f1d664ad52cec353c"}, + {file = "pydantic-1.10.19-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a82746c6d6e91ca17e75f7f333ed41d70fce93af520a8437821dec3ee52dfb10"}, + {file = "pydantic-1.10.19-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:566bebdbe6bc0ac593fa0f67d62febbad9f8be5433f686dc56401ba4aab034e3"}, + {file = "pydantic-1.10.19-cp37-cp37m-win_amd64.whl", hash = "sha256:22a1794e01591884741be56c6fba157c4e99dcc9244beb5a87bd4aa54b84ea8b"}, + {file = "pydantic-1.10.19-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:076c49e24b73d346c45f9282d00dbfc16eef7ae27c970583d499f11110d9e5b0"}, + {file = "pydantic-1.10.19-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5d4320510682d5a6c88766b2a286d03b87bd3562bf8d78c73d63bab04b21e7b4"}, + {file = "pydantic-1.10.19-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e66aa0fa7f8aa9d0a620361834f6eb60d01d3e9cea23ca1a92cda99e6f61dac"}, + {file = "pydantic-1.10.19-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d216f8d0484d88ab72ab45d699ac669fe031275e3fa6553e3804e69485449fa0"}, + {file = "pydantic-1.10.19-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9f28a81978e936136c44e6a70c65bde7548d87f3807260f73aeffbf76fb94c2f"}, + {file = "pydantic-1.10.19-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d3449633c207ec3d2d672eedb3edbe753e29bd4e22d2e42a37a2c1406564c20f"}, + {file = "pydantic-1.10.19-cp38-cp38-win_amd64.whl", hash = "sha256:7ea24e8614f541d69ea72759ff635df0e612b7dc9d264d43f51364df310081a3"}, + {file = "pydantic-1.10.19-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:573254d844f3e64093f72fcd922561d9c5696821ff0900a0db989d8c06ab0c25"}, + {file = "pydantic-1.10.19-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ff09600cebe957ecbb4a27496fe34c1d449e7957ed20a202d5029a71a8af2e35"}, + {file = "pydantic-1.10.19-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4739c206bfb6bb2bdc78dcd40bfcebb2361add4ceac6d170e741bb914e9eff0f"}, + {file = "pydantic-1.10.19-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bfb5b378b78229119d66ced6adac2e933c67a0aa1d0a7adffbe432f3ec14ce4"}, + {file = "pydantic-1.10.19-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7f31742c95e3f9443b8c6fa07c119623e61d76603be9c0d390bcf7e888acabcb"}, + {file = "pydantic-1.10.19-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6444368b651a14c2ce2fb22145e1496f7ab23cbdb978590d47c8d34a7bc0289"}, + {file = "pydantic-1.10.19-cp39-cp39-win_amd64.whl", hash = "sha256:945407f4d08cd12485757a281fca0e5b41408606228612f421aa4ea1b63a095d"}, + {file = "pydantic-1.10.19-py3-none-any.whl", hash = "sha256:2206a1752d9fac011e95ca83926a269fb0ef5536f7e053966d058316e24d929f"}, + {file = "pydantic-1.10.19.tar.gz", hash = "sha256:fea36c2065b7a1d28c6819cc2e93387b43dd5d3cf5a1e82d8132ee23f36d1f10"}, +] + +[package.dependencies] +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pymupdf" +version = "1.24.14" +description = "A high performance Python library for data extraction, analysis, conversion & manipulation of PDF (and other) documents." +optional = true +python-versions = ">=3.9" +files = [ + {file = "PyMuPDF-1.24.14-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b3ad7a4f4b607ff97f2e1b8111823dd3797dbb381ec851c3ae4695fea6f68478"}, + {file = "PyMuPDF-1.24.14-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:755906af4b4d693552ae5469ba682075853f4dc8a70639affd1bd6c049c5d900"}, + {file = "PyMuPDF-1.24.14-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:37f24108e2e18150fb8d512dcccdfa1e3d9b9dd203ffaa7ffb959bb20aea40b4"}, + {file = "PyMuPDF-1.24.14-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0de4f5ed903c2be6d0abcccdc796368939b51ce03916eb53292916e3b6ea65d6"}, + {file = "PyMuPDF-1.24.14-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2d1b5c47df2f8055de5dedfbd3189c742188261a8c257f406378382adac94cff"}, + {file = "PyMuPDF-1.24.14-cp39-abi3-win32.whl", hash = "sha256:60a7ee7db3e0d3a4dcbe6df2781ba4487acb7e515c64ea9c857504f44effcb25"}, + {file = "PyMuPDF-1.24.14-cp39-abi3-win_amd64.whl", hash = "sha256:3d1f1ec2fe0249484afde7a0fc02589f19aaeb47c42939d23ae1d012aa1bc59b"}, + {file = "PyMuPDF-1.24.14.tar.gz", hash = "sha256:0eed9f998525eaf39706dbf2d0cf3162150f0f526e4a36b1748ffa50bde581ae"}, +] + +[[package]] +name = "pytest" +version = "8.3.3" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, + {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2" + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "python-multipart" +version = "0.0.6" +description = "A streaming multipart parser for Python" +optional = true +python-versions = ">=3.7" +files = [ + {file = "python_multipart-0.0.6-py3-none-any.whl", hash = "sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18"}, + {file = "python_multipart-0.0.6.tar.gz", hash = "sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132"}, +] + +[package.extras] +dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatch", "invoke (==1.7.3)", "more-itertools (==4.3.0)", "pbr (==4.3.0)", "pluggy (==1.0.0)", "py (==1.11.0)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-timeout (==2.1.0)", "pyyaml (==5.1)"] + +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = true +python-versions = ">=3.8" +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[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 = "ruamel-yaml" +version = "0.18.6" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, + {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.12" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +optional = false +python-versions = ">=3.9" +files = [ + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win32.whl", hash = "sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win_amd64.whl", hash = "sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win32.whl", hash = "sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win_amd64.whl", hash = "sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win32.whl", hash = "sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win_amd64.whl", hash = "sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b"}, + {file = "ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f"}, +] + +[[package]] +name = "ruff" +version = "0.8.0" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.8.0-py3-none-linux_armv6l.whl", hash = "sha256:fcb1bf2cc6706adae9d79c8d86478677e3bbd4ced796ccad106fd4776d395fea"}, + {file = "ruff-0.8.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:295bb4c02d58ff2ef4378a1870c20af30723013f441c9d1637a008baaf928c8b"}, + {file = "ruff-0.8.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7b1f1c76b47c18fa92ee78b60d2d20d7e866c55ee603e7d19c1e991fad933a9a"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb0d4f250a7711b67ad513fde67e8870109e5ce590a801c3722580fe98c33a99"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e55cce9aa93c5d0d4e3937e47b169035c7e91c8655b0974e61bb79cf398d49c"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f4cd64916d8e732ce6b87f3f5296a8942d285bbbc161acee7fe561134af64f9"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c5c1466be2a2ebdf7c5450dd5d980cc87c8ba6976fb82582fea18823da6fa362"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2dabfd05b96b7b8f2da00d53c514eea842bff83e41e1cceb08ae1966254a51df"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:facebdfe5a5af6b1588a1d26d170635ead6892d0e314477e80256ef4a8470cf3"}, + {file = "ruff-0.8.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87a8e86bae0dbd749c815211ca11e3a7bd559b9710746c559ed63106d382bd9c"}, + {file = "ruff-0.8.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:85e654f0ded7befe2d61eeaf3d3b1e4ef3894469cd664ffa85006c7720f1e4a2"}, + {file = "ruff-0.8.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:83a55679c4cb449fa527b8497cadf54f076603cc36779b2170b24f704171ce70"}, + {file = "ruff-0.8.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:812e2052121634cf13cd6fddf0c1871d0ead1aad40a1a258753c04c18bb71bbd"}, + {file = "ruff-0.8.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:780d5d8523c04202184405e60c98d7595bdb498c3c6abba3b6d4cdf2ca2af426"}, + {file = "ruff-0.8.0-py3-none-win32.whl", hash = "sha256:5fdb6efecc3eb60bba5819679466471fd7d13c53487df7248d6e27146e985468"}, + {file = "ruff-0.8.0-py3-none-win_amd64.whl", hash = "sha256:582891c57b96228d146725975fbb942e1f30a0c4ba19722e692ca3eb25cc9b4f"}, + {file = "ruff-0.8.0-py3-none-win_arm64.whl", hash = "sha256:ba93e6294e9a737cd726b74b09a6972e36bb511f9a102f1d9a7e1ce94dd206a6"}, + {file = "ruff-0.8.0.tar.gz", hash = "sha256:a7ccfe6331bf8c8dad715753e157457faf7351c2b69f62f32c165c2dbcbacd44"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = true +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "starlette" +version = "0.27.0" +description = "The little ASGI library that shines." +optional = true +python-versions = ">=3.7" +files = [ + {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"}, + {file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "tomli-w" +version = "1.1.0" +description = "A lil' TOML writer" +optional = false +python-versions = ">=3.9" +files = [ + {file = "tomli_w-1.1.0-py3-none-any.whl", hash = "sha256:1403179c78193e3184bfaade390ddbd071cba48a32a2e62ba11aae47490c63f7"}, + {file = "tomli_w-1.1.0.tar.gz", hash = "sha256:49e847a3a304d516a169a601184932ef0f6b61623fe680f836a2aa7128ed0d33"}, +] + +[[package]] +name = "tqdm" +version = "4.67.1" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, + {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] +discord = ["requests"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "types-toml" +version = "0.10.8.20240310" +description = "Typing stubs for toml" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-toml-0.10.8.20240310.tar.gz", hash = "sha256:3d41501302972436a6b8b239c850b26689657e25281b48ff0ec06345b8830331"}, + {file = "types_toml-0.10.8.20240310-py3-none-any.whl", hash = "sha256:627b47775d25fa29977d9c70dc0cbab3f314f32c8d8d0c012f2ef5de7aaec05d"}, +] + +[[package]] +name = "typing-extensions" +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.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.2.3" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = true +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "uvicorn" +version = "0.29.0" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.29.0-py3-none-any.whl", hash = "sha256:2c2aac7ff4f4365c206fd773a39bf4ebd1047c238f8b8268ad996829323473de"}, + {file = "uvicorn-0.29.0.tar.gz", hash = "sha256:6a69214c0b6a087462412670b3ef21224fa48cae0e452b5883e8e8bdfdd11dd0"}, +] + +[package.dependencies] +click = ">=7.0" +h11 = ">=0.8" + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "virtualenv" +version = "20.28.0" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.8" +files = [ + {file = "virtualenv-20.28.0-py3-none-any.whl", hash = "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0"}, + {file = "virtualenv-20.28.0.tar.gz", hash = "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + +[[package]] +name = "wsproto" +version = "1.2.0" +description = "WebSockets state-machine based protocol implementation" +optional = true +python-versions = ">=3.7.0" +files = [ + {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, + {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, +] + +[package.dependencies] +h11 = ">=0.9.0,<1" + +[extras] +service = ["hypercorn", "pymupdf", "python-multipart", "requests"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.11" +content-hash = "c813ab4bb9951234c12151dcd1cda8ae9c78ba59314c342424f012b4b9337ce2" From 341b7eabd6288dfa80f88090d79d579801b7f73c Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 13:12:58 +0900 Subject: [PATCH 14/27] Allow ruff-ing conftest.py --- conftest.py | 4 ++++ pyproject.toml | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/conftest.py b/conftest.py index fcf79e8..110fa6d 100644 --- a/conftest.py +++ b/conftest.py @@ -1,4 +1,8 @@ +"""Pytest configuration file.""" + + def pytest_addoption(parser): + """Add command line options to pytest.""" parser.addoption("--keep-docker-running", action="store_true", help="keep docker image running") parser.addoption("--no-docker-setup", action="store_true", help="do not run docker setup, expect a running docker") parser.addoption("--docker-port", action="store", default="33031", help="outside docker port to use") diff --git a/pyproject.toml b/pyproject.toml index 88aff26..760ac03 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,7 +49,6 @@ extend-exclude = [ "pdf_profile", "bin", "service-various", - "conftest.py", "tex2pdf/service", # too much work to do for now ] From dcb6f8316e6e33145c8e4fd665dddc2c680a8507 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 13:41:31 +0900 Subject: [PATCH 15/27] Fixes for missing packages and not-starting docker --- Appliance.Dockerfile | 4 +- Makefile | 6 +-- app-logging.conf | 2 +- app-logging.json | 2 +- app.sh | 2 +- poetry.lock | 112 ++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 12 +++-- 7 files changed, 127 insertions(+), 13 deletions(-) diff --git a/Appliance.Dockerfile b/Appliance.Dockerfile index b4db581..af92cef 100644 --- a/Appliance.Dockerfile +++ b/Appliance.Dockerfile @@ -31,9 +31,9 @@ COPY tex2pdf/ ./tex2pdf/ COPY poetry.lock pyproject.toml ./ # poetry is BROKEN wrt to installing multiple packages from same git repo # see https://github.com/python-poetry/poetry/issues/6958 -RUN poetry config installer.parallel false +# RUN poetry config installer.parallel false # install runtime deps - uses $POETRY_VIRTUALENVS_IN_PROJECT internally -RUN poetry install --without=dev +RUN poetry install --extras service --without=dev # application specific changes diff --git a/Makefile b/Makefile index 313959f..36835f6 100644 --- a/Makefile +++ b/Makefile @@ -13,11 +13,11 @@ TEX2PDF_CPUS := $(shell echo $${TEX2PDF_CPUS:-4}) TEX2PDF_WORKERS := $(shell echo $${TEX2PDF_WORKERS:-8}) TEX2PDF_DOCKER_PLATFORM := $(shell echo $${TEX2PDF_DOCKER_PLATFORM:-linux/amd64}) -APP_DOCKER_RUN := docker run --cpus ${TEX2PDF_CPUS} --rm -p ${app_port}:${dockerport} -e PORT=${dockerport} -e WORKERS=${TEX2PDF_WORKERS} --name ${app_name} --security-opt="no-new-privileges=true" +APP_DOCKER_RUN := docker run --cpus ${TEX2PDF_CPUS} --rm -p ${app_port}:${dockerport} -e PORT=${dockerport} -e WORKERS=${TEX2PDF_WORKERS} --name ${app_name} --security-opt="no-new-privileges=true" .PHONY: HELLO app.docker app.run app.stop -default: HELLO venv/lib/python3.11/site-packages/fastapi +default: HELLO HELLO: @echo To see the README of this Makefile, type "make help" @@ -53,7 +53,7 @@ app.docker: #-# Command: app.run #-# runs the appliance container with the terminal attached (for test) app.run: app.stop - ${APP_DOCKER_RUN} -it ${app_tag}-${base_tag_version}:latest + ${APP_DOCKER_RUN} -it ${app_tag}-${base_tag_version}:latest #-# #-# Command: app.stop diff --git a/app-logging.conf b/app-logging.conf index 332c4fb..caef3f2 100644 --- a/app-logging.conf +++ b/app-logging.conf @@ -8,7 +8,7 @@ keys=access_handler keys=json [formatter_json] -class=tex2pdf.CustomJsonFormatter +class=tex2pdf.service.CustomJsonFormatter format=%(asctime)s %(name)s %(levelname)s %(message)s %(process)d %(threadName)s [handler_access_handler] diff --git a/app-logging.json b/app-logging.json index 40c2c35..59e5c7b 100644 --- a/app-logging.json +++ b/app-logging.json @@ -3,7 +3,7 @@ "disable_existing_loggers": false, "formatters": { "json": { - "class": "tex2pdf.CustomJsonFormatter", + "class": "tex2pdf.service.CustomJsonFormatter", "format": "%(asctime)s %(name)s %(levelname)s %(message)s %(process)d %(threadName)s" } }, diff --git a/app.sh b/app.sh index 9ec8faf..3fc644a 100644 --- a/app.sh +++ b/app.sh @@ -10,4 +10,4 @@ fi export PORT #export TEXMFHOME=/usr/local/texlive/2023 #. /home/worker/venv/bin/activate -hypercorn --config hypercorn-config.toml --bind 0.0.0.0:$PORT --log-config app-logging.conf --workers $WORKERS tex2pdf.tex2pdf_api:app +hypercorn --config hypercorn-config.toml --bind 0.0.0.0:$PORT --log-config app-logging.conf --workers $WORKERS tex2pdf.service.tex2pdf_api:app diff --git a/poetry.lock b/poetry.lock index ee1a37d..c16a5c0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -434,6 +434,103 @@ files = [ {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] +[[package]] +name = "pillow" +version = "10.4.0" +description = "Python Imaging Library (Fork)" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, + {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, + {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, + {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, + {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, + {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, + {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, + {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, + {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, + {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, + {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, + {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, + {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, + {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, + {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, + {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, + {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, + {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, + {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, + {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=7.3)", "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"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] + [[package]] name = "platformdirs" version = "4.3.6" @@ -590,6 +687,17 @@ pluggy = ">=1.5,<2" [package.extras] dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +[[package]] +name = "python-json-logger" +version = "2.0.7" +description = "A python library adding a json log formatter" +optional = true +python-versions = ">=3.6" +files = [ + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, +] + [[package]] name = "python-multipart" version = "0.0.6" @@ -945,9 +1053,9 @@ files = [ h11 = ">=0.9.0,<1" [extras] -service = ["hypercorn", "pymupdf", "python-multipart", "requests"] +service = ["fastapi", "hypercorn", "pillow", "pymupdf", "python-json-logger", "python-multipart", "requests"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "c813ab4bb9951234c12151dcd1cda8ae9c78ba59314c342424f012b4b9337ce2" +content-hash = "1c665bb8f2209a2f3964ae2cc4e9e7e0d3256fa19dffe60cf1e6083fb28caf3a" diff --git a/pyproject.toml b/pyproject.toml index 760ac03..55436bd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,12 +20,19 @@ tomli_w = "^1.0" # poetry install --extra service # or via the requirement.txt line # tex2pdf[service] -python-multipart = { version = "^0.0.6", optional = true } fastapi = { version = "^0.104.1", optional = true } hypercorn = { extras = ["h2"], version = "^0.16.0", optional = true } +pillow = { version = "^10.4.0", optional = true } +python-json-logger = { version = "^2.0.7", optional = true } +python-multipart = { version = "^0.0.6", optional = true } pymupdf = { version = "^1.24.10", optional = true } requests = { version="^2.32.0", optional = true } +# the following list must be kept in sync with the entrie above +# marked as optional +[tool.poetry.extras] +service = [ "fastapi", "hypercorn", "pillow", "python-json-logger", "python-multipart", "pymupdf", "requests", ] + [tool.poetry.group.dev.dependencies] ruff = "*" pytest = "^8.3.3" @@ -37,8 +44,7 @@ tqdm = "^4.66.2" uvicorn = "^0.29.0" pre-commit = "*" -[tool.poetry.extras] -service = ["hypercorn", "pymupdf", "requests", "python-multipart"] + [tool.ruff] line-length = 120 From 1bfb178d46e7a7b241cc4abcfcb8a05c511fb6ae Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 14:02:50 +0900 Subject: [PATCH 16/27] Fix docker tests for tex2pdf.service --- tex2pdf/service/tests/test_docker.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/tex2pdf/service/tests/test_docker.py b/tex2pdf/service/tests/test_docker.py index 5c0e6b6..553de87 100644 --- a/tex2pdf/service/tests/test_docker.py +++ b/tex2pdf/service/tests/test_docker.py @@ -13,6 +13,7 @@ from tex2pdf.service.converter_driver import RemoteConverterDriver PORT = 33031 +SELF_DIR = os.path.abspath(os.path.dirname(__file__)) def submit_tarball(service: str, tarball: str, outcome_file: str, tex2pdf_timeout: int = 30, post_timeout: int = 10, json_response: bool = False, api_args: dict= {}) -> None | dict: meta = None @@ -122,8 +123,8 @@ def test_api_hello(docker_container): def test_api_smoke(docker_container): """00README.XXX is bad, so make sure it does not die or anything.""" url = docker_container + "/convert" - tarball = "tests/fixture/tarballs/test1/test1.tar.gz" - outcome = "tests/output/test1.outcome.tar.gz" + tarball = os.path.join(SELF_DIR, "fixture/tarballs/test1/test1.tar.gz") + outcome = os.path.join(SELF_DIR, "output/test1.outcome.tar.gz") meta = submit_tarball(url, tarball, outcome, api_args={"auto_detect": "true"}) assert meta is not None @@ -131,8 +132,8 @@ def test_api_smoke(docker_container): @pytest.mark.integration def test_api_test2(docker_container): url = docker_container + "/convert" - tarball = "tests/fixture/tarballs/test2/test2.tar.gz" - outcome = "tests/output/test2.outcome.tar.gz" + tarball = os.path.join(SELF_DIR, "fixture/tarballs/test2/test2.tar.gz") + outcome = os.path.join(SELF_DIR, "output/test2.outcome.tar.gz") meta = submit_tarball(url, tarball, outcome, api_args={"auto_detect": "true"}) assert meta is not None assert meta.get("pdf_file") == "test2.pdf" @@ -143,8 +144,8 @@ def test_api_test2(docker_container): @pytest.mark.integration def test_api_test3(docker_container): url = docker_container + "/convert" - tarball = "tests/fixture/tarballs/test3/test3.tar.gz" - outcome = "tests/output/test3.outcome.tar.gz" + tarball = os.path.join(SELF_DIR, "fixture/tarballs/test3/test3.tar.gz") + outcome = os.path.join(SELF_DIR, "output/test3.outcome.tar.gz") meta = submit_tarball(url, tarball, outcome, api_args={"auto_detect": "true"}) assert meta is not None assert meta.get("pdf_file") == "test3.pdf" @@ -157,8 +158,8 @@ def test_api_test3(docker_container): @pytest.mark.integration def test_api_test4(docker_container): url = docker_container + "/convert" - tarball = "tests/fixture/tarballs/test4/test4.tar.gz" - outcome = "tests/output/test4.outcome.tar.gz" + tarball = os.path.join(SELF_DIR, "fixture/tarballs/test4/test4.tar.gz") + outcome = os.path.join(SELF_DIR, "output/test4.outcome.tar.gz") meta = submit_tarball(url, tarball, outcome, api_args={"auto_detect": "true"}) assert meta is not None assert meta.get("pdf_file") == "test4.pdf" @@ -169,8 +170,8 @@ def test_api_test4(docker_container): @pytest.mark.integration def test_api_preflight(docker_container): url = docker_container + "/convert" - tarball = "tests/fixture/tarballs/test3/test3.tar.gz" - outcome = "tests/output/test3.outcome.tar.gz" + tarball = os.path.join(SELF_DIR, "fixture/tarballs/test3/test3.tar.gz") + outcome = os.path.join(SELF_DIR, "output/test3.outcome.tar.gz") meta = submit_tarball(url, tarball, outcome, json_response=True, api_args={"preflight": "v2"}) assert meta is not None print(meta) @@ -181,8 +182,8 @@ def test_api_preflight(docker_container): @pytest.mark.integration def test_remote2023(docker_container) -> None: - tarball = os.path.join(os.getcwd(), "tests", "fixture", "tarballs", "test1", "test1.tar.gz") - out_dir = os.path.join(os.getcwd(), "tests", "test-output", "test1-remote") + tarball = os.path.join(SELF_DIR, "fixture/tarballs/test1/test1.tar.gz") + out_dir = os.path.join(SELF_DIR, "output/test1-remote") url = docker_container + "/convert/" tag = os.path.basename(tarball) From 2aaa3f34e0b180a4216dfe48030dc934cfcda08a Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 14:06:04 +0900 Subject: [PATCH 17/27] Move preflight tests to test/preflight so they don't end up in the docker image --- pyproject.toml | 6 +++--- .../tests => tests/preflight_parser}/__init__.py | 0 .../fixture/bye-no-newline/main.tex | 0 .../fixture/include_1/ImageOfNobelPrize.jpg | 0 .../fixture/include_1/NOBEL_PRIZE_WINNER.TEX | 0 .../fixture/multi_tex_1/fake-file-1.Tex | 0 .../fixture/multi_tex_1/fake-file-1.bbl | 0 .../fixture/multi_tex_1/fake-file-2.bbl | 0 .../fixture/multi_tex_1/fake-file-2.tex | 0 .../fixture/multi_tex_1/fake-file-3.TEX | 0 .../fixture/multi_tex_2/00README.XXX | 0 .../fixture/multi_tex_2/fake-file-1.Tex | 0 .../fixture/multi_tex_2/fake-file-1.bbl | 0 .../fixture/multi_tex_2/fake-file-2.bbl | 0 .../fixture/multi_tex_2/fake-file-2.tex | 0 .../fixture/multi_tex_2/fake-file-3.TEX | 0 .../preflight_parser}/fixture/multi_tex_3/main.tex | 0 .../preflight_parser}/fixture/multi_tex_3/ms.tex | 0 .../fixture/multi_tex_3/mssection.tex | 0 .../fixture/multi_tex_3/mssection2.tex | 0 .../fixture/multi_tex_3/newmain.tex | 0 .../fixture/multi_tex_3/plain-main.tex | 0 .../fixture/multi_tex_3/plainclosing.tex | 0 .../fixture/multi_tex_3/plainsection1.tex | 0 .../fixture/multi_tex_3/plainsection2.tex | 0 .../fixture/multi_tex_3/plainsection3.tex | 0 .../fixture/multi_tex_3/section1.tex | 0 .../fixture/multi_tex_3/section2.tex | 0 .../fixture/multi_tex_3/section3.tex | 0 .../fixture/multi_tex_3/supplement one.tex | 0 .../fixture/multi_tex_3/supplement two.tex | 0 .../fixture/multi_tex_3/supplement1.tex | 0 .../fixture/multi_tex_3/supplement2.tex | 0 .../preflight_parser}/fixture/pdfoutput_1/artic.cls | 0 .../fixture/pdfoutput_1/fake-file-1.Tex | 0 .../fixture/pdfoutput_1/fake-file-1.bbl | 0 .../fixture/pdfoutput_1/fake-file-2.bbl | 0 .../fixture/pdfoutput_1/fake-file-2.tex | 0 .../fixture/pdfoutput_1/test/fake-file-3.inc | 0 .../fixture/pre-postamble/main.tex | 0 .../fixture/pre-postamble/postamble.tex | 0 .../fixture/pre-postamble/preamble.tex | 0 .../fixture/single-pdf/hello-world.pdf | Bin .../fixture/single_tex_1/NOBEL_PRIZE_WINNER.TEX | 0 .../fixture/single_tex_2/00README.XXX | 0 .../fixture/single_tex_2/fake-file-1.bbl | 0 .../fixture/single_tex_2/fake-file-1.tex | 0 .../fixture/single_tex_2/fake-file-2.TEX | 0 .../fixture/single_tex_2/fake-file-2.bbl | 0 .../fixture/single_tex_2/fake-file-3.tex | 0 .../fixture/single_tex_3/fake-file-1.bbl | 0 .../fixture/single_tex_3/fake-file-1.tex | 0 .../fixture/single_tex_3/fake-file-2.TEX | 0 .../fixture/single_tex_3/fake-file-3.tex | 0 .../fixture/single_tex_4/fake-file-1.bbl | 0 .../fixture/single_tex_4/fake-file-1.tex | 0 .../fixture/single_tex_4/fake-file-2.TEX | 0 .../fixture/single_tex_4/fake-file-3.tex | 0 .../fixture/single_tex_4/fake-package.tex | 0 .../fixture/single_tex_5/00README.XXX | 0 .../fixture/single_tex_5/fake-file-1.bbl | 0 .../fixture/single_tex_5/fake-file-1.tex | 0 .../fixture/single_tex_5/fake-file-2.TEX | 0 .../fixture/single_tex_5/fake-file-2.bbl | 0 .../fixture/single_tex_5/fake-file-3.tex | 0 .../preflight_parser}/test_base_models.py | 0 .../preflight_parser}/test_preflight.py | 0 .../preflight_parser}/test_typings.py | 2 +- 68 files changed, 4 insertions(+), 4 deletions(-) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/__init__.py (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/bye-no-newline/main.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/include_1/ImageOfNobelPrize.jpg (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/include_1/NOBEL_PRIZE_WINNER.TEX (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_1/fake-file-1.Tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_1/fake-file-1.bbl (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_1/fake-file-2.bbl (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_1/fake-file-2.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_1/fake-file-3.TEX (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_2/00README.XXX (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_2/fake-file-1.Tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_2/fake-file-1.bbl (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_2/fake-file-2.bbl (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_2/fake-file-2.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_2/fake-file-3.TEX (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/main.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/ms.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/mssection.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/mssection2.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/newmain.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/plain-main.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/plainclosing.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/plainsection1.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/plainsection2.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/plainsection3.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/section1.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/section2.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/section3.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/supplement one.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/supplement two.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/supplement1.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/multi_tex_3/supplement2.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/pdfoutput_1/artic.cls (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/pdfoutput_1/fake-file-1.Tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/pdfoutput_1/fake-file-1.bbl (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/pdfoutput_1/fake-file-2.bbl (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/pdfoutput_1/fake-file-2.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/pdfoutput_1/test/fake-file-3.inc (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/pre-postamble/main.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/pre-postamble/postamble.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/pre-postamble/preamble.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single-pdf/hello-world.pdf (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_1/NOBEL_PRIZE_WINNER.TEX (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_2/00README.XXX (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_2/fake-file-1.bbl (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_2/fake-file-1.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_2/fake-file-2.TEX (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_2/fake-file-2.bbl (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_2/fake-file-3.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_3/fake-file-1.bbl (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_3/fake-file-1.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_3/fake-file-2.TEX (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_3/fake-file-3.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_4/fake-file-1.bbl (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_4/fake-file-1.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_4/fake-file-2.TEX (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_4/fake-file-3.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_4/fake-package.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_5/00README.XXX (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_5/fake-file-1.bbl (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_5/fake-file-1.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_5/fake-file-2.TEX (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_5/fake-file-2.bbl (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/fixture/single_tex_5/fake-file-3.tex (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/test_base_models.py (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/test_preflight.py (100%) rename {tex2pdf/preflight_parser/tests => tests/preflight_parser}/test_typings.py (96%) diff --git a/pyproject.toml b/pyproject.toml index 55436bd..103836f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,9 +49,9 @@ pre-commit = "*" [tool.ruff] line-length = 120 extend-exclude = [ - "tex2pdf/preflight_parser/tests", - "tex2pdf/zerozeroreadme/tests", - "tex2pdf/tex_inspection/tests", + "tests/preflight_parser", + "tests/zerozeroreadme", + "tests/tex_inspection", "pdf_profile", "bin", "service-various", diff --git a/tex2pdf/preflight_parser/tests/__init__.py b/tests/preflight_parser/__init__.py similarity index 100% rename from tex2pdf/preflight_parser/tests/__init__.py rename to tests/preflight_parser/__init__.py diff --git a/tex2pdf/preflight_parser/tests/fixture/bye-no-newline/main.tex b/tests/preflight_parser/fixture/bye-no-newline/main.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/bye-no-newline/main.tex rename to tests/preflight_parser/fixture/bye-no-newline/main.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/include_1/ImageOfNobelPrize.jpg b/tests/preflight_parser/fixture/include_1/ImageOfNobelPrize.jpg similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/include_1/ImageOfNobelPrize.jpg rename to tests/preflight_parser/fixture/include_1/ImageOfNobelPrize.jpg diff --git a/tex2pdf/preflight_parser/tests/fixture/include_1/NOBEL_PRIZE_WINNER.TEX b/tests/preflight_parser/fixture/include_1/NOBEL_PRIZE_WINNER.TEX similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/include_1/NOBEL_PRIZE_WINNER.TEX rename to tests/preflight_parser/fixture/include_1/NOBEL_PRIZE_WINNER.TEX diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-1.Tex b/tests/preflight_parser/fixture/multi_tex_1/fake-file-1.Tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-1.Tex rename to tests/preflight_parser/fixture/multi_tex_1/fake-file-1.Tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-1.bbl b/tests/preflight_parser/fixture/multi_tex_1/fake-file-1.bbl similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-1.bbl rename to tests/preflight_parser/fixture/multi_tex_1/fake-file-1.bbl diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-2.bbl b/tests/preflight_parser/fixture/multi_tex_1/fake-file-2.bbl similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-2.bbl rename to tests/preflight_parser/fixture/multi_tex_1/fake-file-2.bbl diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-2.tex b/tests/preflight_parser/fixture/multi_tex_1/fake-file-2.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-2.tex rename to tests/preflight_parser/fixture/multi_tex_1/fake-file-2.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-3.TEX b/tests/preflight_parser/fixture/multi_tex_1/fake-file-3.TEX similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_1/fake-file-3.TEX rename to tests/preflight_parser/fixture/multi_tex_1/fake-file-3.TEX diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_2/00README.XXX b/tests/preflight_parser/fixture/multi_tex_2/00README.XXX similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_2/00README.XXX rename to tests/preflight_parser/fixture/multi_tex_2/00README.XXX diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-1.Tex b/tests/preflight_parser/fixture/multi_tex_2/fake-file-1.Tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-1.Tex rename to tests/preflight_parser/fixture/multi_tex_2/fake-file-1.Tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-1.bbl b/tests/preflight_parser/fixture/multi_tex_2/fake-file-1.bbl similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-1.bbl rename to tests/preflight_parser/fixture/multi_tex_2/fake-file-1.bbl diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-2.bbl b/tests/preflight_parser/fixture/multi_tex_2/fake-file-2.bbl similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-2.bbl rename to tests/preflight_parser/fixture/multi_tex_2/fake-file-2.bbl diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-2.tex b/tests/preflight_parser/fixture/multi_tex_2/fake-file-2.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-2.tex rename to tests/preflight_parser/fixture/multi_tex_2/fake-file-2.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-3.TEX b/tests/preflight_parser/fixture/multi_tex_2/fake-file-3.TEX similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_2/fake-file-3.TEX rename to tests/preflight_parser/fixture/multi_tex_2/fake-file-3.TEX diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/main.tex b/tests/preflight_parser/fixture/multi_tex_3/main.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/main.tex rename to tests/preflight_parser/fixture/multi_tex_3/main.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/ms.tex b/tests/preflight_parser/fixture/multi_tex_3/ms.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/ms.tex rename to tests/preflight_parser/fixture/multi_tex_3/ms.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/mssection.tex b/tests/preflight_parser/fixture/multi_tex_3/mssection.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/mssection.tex rename to tests/preflight_parser/fixture/multi_tex_3/mssection.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/mssection2.tex b/tests/preflight_parser/fixture/multi_tex_3/mssection2.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/mssection2.tex rename to tests/preflight_parser/fixture/multi_tex_3/mssection2.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/newmain.tex b/tests/preflight_parser/fixture/multi_tex_3/newmain.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/newmain.tex rename to tests/preflight_parser/fixture/multi_tex_3/newmain.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plain-main.tex b/tests/preflight_parser/fixture/multi_tex_3/plain-main.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plain-main.tex rename to tests/preflight_parser/fixture/multi_tex_3/plain-main.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainclosing.tex b/tests/preflight_parser/fixture/multi_tex_3/plainclosing.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainclosing.tex rename to tests/preflight_parser/fixture/multi_tex_3/plainclosing.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainsection1.tex b/tests/preflight_parser/fixture/multi_tex_3/plainsection1.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainsection1.tex rename to tests/preflight_parser/fixture/multi_tex_3/plainsection1.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainsection2.tex b/tests/preflight_parser/fixture/multi_tex_3/plainsection2.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainsection2.tex rename to tests/preflight_parser/fixture/multi_tex_3/plainsection2.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainsection3.tex b/tests/preflight_parser/fixture/multi_tex_3/plainsection3.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/plainsection3.tex rename to tests/preflight_parser/fixture/multi_tex_3/plainsection3.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/section1.tex b/tests/preflight_parser/fixture/multi_tex_3/section1.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/section1.tex rename to tests/preflight_parser/fixture/multi_tex_3/section1.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/section2.tex b/tests/preflight_parser/fixture/multi_tex_3/section2.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/section2.tex rename to tests/preflight_parser/fixture/multi_tex_3/section2.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/section3.tex b/tests/preflight_parser/fixture/multi_tex_3/section3.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/section3.tex rename to tests/preflight_parser/fixture/multi_tex_3/section3.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement one.tex b/tests/preflight_parser/fixture/multi_tex_3/supplement one.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement one.tex rename to tests/preflight_parser/fixture/multi_tex_3/supplement one.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement two.tex b/tests/preflight_parser/fixture/multi_tex_3/supplement two.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement two.tex rename to tests/preflight_parser/fixture/multi_tex_3/supplement two.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement1.tex b/tests/preflight_parser/fixture/multi_tex_3/supplement1.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement1.tex rename to tests/preflight_parser/fixture/multi_tex_3/supplement1.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement2.tex b/tests/preflight_parser/fixture/multi_tex_3/supplement2.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/multi_tex_3/supplement2.tex rename to tests/preflight_parser/fixture/multi_tex_3/supplement2.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/artic.cls b/tests/preflight_parser/fixture/pdfoutput_1/artic.cls similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/artic.cls rename to tests/preflight_parser/fixture/pdfoutput_1/artic.cls diff --git a/tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-1.Tex b/tests/preflight_parser/fixture/pdfoutput_1/fake-file-1.Tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-1.Tex rename to tests/preflight_parser/fixture/pdfoutput_1/fake-file-1.Tex diff --git a/tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-1.bbl b/tests/preflight_parser/fixture/pdfoutput_1/fake-file-1.bbl similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-1.bbl rename to tests/preflight_parser/fixture/pdfoutput_1/fake-file-1.bbl diff --git a/tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-2.bbl b/tests/preflight_parser/fixture/pdfoutput_1/fake-file-2.bbl similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-2.bbl rename to tests/preflight_parser/fixture/pdfoutput_1/fake-file-2.bbl diff --git a/tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-2.tex b/tests/preflight_parser/fixture/pdfoutput_1/fake-file-2.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/fake-file-2.tex rename to tests/preflight_parser/fixture/pdfoutput_1/fake-file-2.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/test/fake-file-3.inc b/tests/preflight_parser/fixture/pdfoutput_1/test/fake-file-3.inc similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/pdfoutput_1/test/fake-file-3.inc rename to tests/preflight_parser/fixture/pdfoutput_1/test/fake-file-3.inc diff --git a/tex2pdf/preflight_parser/tests/fixture/pre-postamble/main.tex b/tests/preflight_parser/fixture/pre-postamble/main.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/pre-postamble/main.tex rename to tests/preflight_parser/fixture/pre-postamble/main.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/pre-postamble/postamble.tex b/tests/preflight_parser/fixture/pre-postamble/postamble.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/pre-postamble/postamble.tex rename to tests/preflight_parser/fixture/pre-postamble/postamble.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/pre-postamble/preamble.tex b/tests/preflight_parser/fixture/pre-postamble/preamble.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/pre-postamble/preamble.tex rename to tests/preflight_parser/fixture/pre-postamble/preamble.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/single-pdf/hello-world.pdf b/tests/preflight_parser/fixture/single-pdf/hello-world.pdf similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single-pdf/hello-world.pdf rename to tests/preflight_parser/fixture/single-pdf/hello-world.pdf diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_1/NOBEL_PRIZE_WINNER.TEX b/tests/preflight_parser/fixture/single_tex_1/NOBEL_PRIZE_WINNER.TEX similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_1/NOBEL_PRIZE_WINNER.TEX rename to tests/preflight_parser/fixture/single_tex_1/NOBEL_PRIZE_WINNER.TEX diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_2/00README.XXX b/tests/preflight_parser/fixture/single_tex_2/00README.XXX similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_2/00README.XXX rename to tests/preflight_parser/fixture/single_tex_2/00README.XXX diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-1.bbl b/tests/preflight_parser/fixture/single_tex_2/fake-file-1.bbl similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-1.bbl rename to tests/preflight_parser/fixture/single_tex_2/fake-file-1.bbl diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-1.tex b/tests/preflight_parser/fixture/single_tex_2/fake-file-1.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-1.tex rename to tests/preflight_parser/fixture/single_tex_2/fake-file-1.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-2.TEX b/tests/preflight_parser/fixture/single_tex_2/fake-file-2.TEX similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-2.TEX rename to tests/preflight_parser/fixture/single_tex_2/fake-file-2.TEX diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-2.bbl b/tests/preflight_parser/fixture/single_tex_2/fake-file-2.bbl similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-2.bbl rename to tests/preflight_parser/fixture/single_tex_2/fake-file-2.bbl diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-3.tex b/tests/preflight_parser/fixture/single_tex_2/fake-file-3.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_2/fake-file-3.tex rename to tests/preflight_parser/fixture/single_tex_2/fake-file-3.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-1.bbl b/tests/preflight_parser/fixture/single_tex_3/fake-file-1.bbl similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-1.bbl rename to tests/preflight_parser/fixture/single_tex_3/fake-file-1.bbl diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-1.tex b/tests/preflight_parser/fixture/single_tex_3/fake-file-1.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-1.tex rename to tests/preflight_parser/fixture/single_tex_3/fake-file-1.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-2.TEX b/tests/preflight_parser/fixture/single_tex_3/fake-file-2.TEX similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-2.TEX rename to tests/preflight_parser/fixture/single_tex_3/fake-file-2.TEX diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-3.tex b/tests/preflight_parser/fixture/single_tex_3/fake-file-3.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_3/fake-file-3.tex rename to tests/preflight_parser/fixture/single_tex_3/fake-file-3.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-1.bbl b/tests/preflight_parser/fixture/single_tex_4/fake-file-1.bbl similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-1.bbl rename to tests/preflight_parser/fixture/single_tex_4/fake-file-1.bbl diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-1.tex b/tests/preflight_parser/fixture/single_tex_4/fake-file-1.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-1.tex rename to tests/preflight_parser/fixture/single_tex_4/fake-file-1.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-2.TEX b/tests/preflight_parser/fixture/single_tex_4/fake-file-2.TEX similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-2.TEX rename to tests/preflight_parser/fixture/single_tex_4/fake-file-2.TEX diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-3.tex b/tests/preflight_parser/fixture/single_tex_4/fake-file-3.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-file-3.tex rename to tests/preflight_parser/fixture/single_tex_4/fake-file-3.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-package.tex b/tests/preflight_parser/fixture/single_tex_4/fake-package.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_4/fake-package.tex rename to tests/preflight_parser/fixture/single_tex_4/fake-package.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_5/00README.XXX b/tests/preflight_parser/fixture/single_tex_5/00README.XXX similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_5/00README.XXX rename to tests/preflight_parser/fixture/single_tex_5/00README.XXX diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-1.bbl b/tests/preflight_parser/fixture/single_tex_5/fake-file-1.bbl similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-1.bbl rename to tests/preflight_parser/fixture/single_tex_5/fake-file-1.bbl diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-1.tex b/tests/preflight_parser/fixture/single_tex_5/fake-file-1.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-1.tex rename to tests/preflight_parser/fixture/single_tex_5/fake-file-1.tex diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-2.TEX b/tests/preflight_parser/fixture/single_tex_5/fake-file-2.TEX similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-2.TEX rename to tests/preflight_parser/fixture/single_tex_5/fake-file-2.TEX diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-2.bbl b/tests/preflight_parser/fixture/single_tex_5/fake-file-2.bbl similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-2.bbl rename to tests/preflight_parser/fixture/single_tex_5/fake-file-2.bbl diff --git a/tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-3.tex b/tests/preflight_parser/fixture/single_tex_5/fake-file-3.tex similarity index 100% rename from tex2pdf/preflight_parser/tests/fixture/single_tex_5/fake-file-3.tex rename to tests/preflight_parser/fixture/single_tex_5/fake-file-3.tex diff --git a/tex2pdf/preflight_parser/tests/test_base_models.py b/tests/preflight_parser/test_base_models.py similarity index 100% rename from tex2pdf/preflight_parser/tests/test_base_models.py rename to tests/preflight_parser/test_base_models.py diff --git a/tex2pdf/preflight_parser/tests/test_preflight.py b/tests/preflight_parser/test_preflight.py similarity index 100% rename from tex2pdf/preflight_parser/tests/test_preflight.py rename to tests/preflight_parser/test_preflight.py diff --git a/tex2pdf/preflight_parser/tests/test_typings.py b/tests/preflight_parser/test_typings.py similarity index 96% rename from tex2pdf/preflight_parser/tests/test_typings.py rename to tests/preflight_parser/test_typings.py index c9d8e59..e31fee7 100644 --- a/tex2pdf/preflight_parser/tests/test_typings.py +++ b/tests/preflight_parser/test_typings.py @@ -15,7 +15,7 @@ def test_run_mypy_module(self) -> None: mypy = shutil.which("mypy") if mypy is None: raise OSError("mypy not found in PATH") - root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..")) + root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) result: int = subprocess.call([mypy, "tex2pdf/preflight_parser"], env=os.environ, cwd=root_dir) self.assertEqual(result, 0, "Expect 0 type errors when running mypy") From 5142fef820af8d136958fa5f92f4c2240e671225 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 14:07:27 +0900 Subject: [PATCH 18/27] Move zzrm tests to test/preflight so they don't end up in the docker image --- .../zerozeroreadme/tests => tests/zerozeroreadme}/__init__.py | 0 .../zerozeroreadme}/fixture/zzrm_bad_01/00README.XXX | 0 .../zerozeroreadme}/fixture/zzrm_v1_01/00README.XXX | 0 .../zerozeroreadme}/fixture/zzrm_v2_01/00README.yaml | 0 .../zerozeroreadme}/fixture/zzrm_v2_02/00README.json | 0 .../zerozeroreadme}/fixture/zzrm_v2_03/00README.toml | 0 .../zerozeroreadme}/fixture/zzrm_v2_04/00README.json | 0 .../zerozeroreadme}/fixture/zzrm_v2_04/00README.toml | 0 .../zerozeroreadme}/fixture/zzrm_v2_04/00README.yaml | 0 .../zerozeroreadme}/fixture/zzrm_v2_syntax_error/00README.yaml | 0 .../tests => tests/zerozeroreadme}/test_typings.py | 2 +- .../zerozeroreadme/tests => tests/zerozeroreadme}/test_zzrm.py | 0 12 files changed, 1 insertion(+), 1 deletion(-) rename {tex2pdf/zerozeroreadme/tests => tests/zerozeroreadme}/__init__.py (100%) rename {tex2pdf/zerozeroreadme/tests => tests/zerozeroreadme}/fixture/zzrm_bad_01/00README.XXX (100%) rename {tex2pdf/zerozeroreadme/tests => tests/zerozeroreadme}/fixture/zzrm_v1_01/00README.XXX (100%) rename {tex2pdf/zerozeroreadme/tests => tests/zerozeroreadme}/fixture/zzrm_v2_01/00README.yaml (100%) rename {tex2pdf/zerozeroreadme/tests => tests/zerozeroreadme}/fixture/zzrm_v2_02/00README.json (100%) rename {tex2pdf/zerozeroreadme/tests => tests/zerozeroreadme}/fixture/zzrm_v2_03/00README.toml (100%) rename {tex2pdf/zerozeroreadme/tests => tests/zerozeroreadme}/fixture/zzrm_v2_04/00README.json (100%) rename {tex2pdf/zerozeroreadme/tests => tests/zerozeroreadme}/fixture/zzrm_v2_04/00README.toml (100%) rename {tex2pdf/zerozeroreadme/tests => tests/zerozeroreadme}/fixture/zzrm_v2_04/00README.yaml (100%) rename {tex2pdf/zerozeroreadme/tests => tests/zerozeroreadme}/fixture/zzrm_v2_syntax_error/00README.yaml (100%) rename {tex2pdf/zerozeroreadme/tests => tests/zerozeroreadme}/test_typings.py (96%) rename {tex2pdf/zerozeroreadme/tests => tests/zerozeroreadme}/test_zzrm.py (100%) diff --git a/tex2pdf/zerozeroreadme/tests/__init__.py b/tests/zerozeroreadme/__init__.py similarity index 100% rename from tex2pdf/zerozeroreadme/tests/__init__.py rename to tests/zerozeroreadme/__init__.py diff --git a/tex2pdf/zerozeroreadme/tests/fixture/zzrm_bad_01/00README.XXX b/tests/zerozeroreadme/fixture/zzrm_bad_01/00README.XXX similarity index 100% rename from tex2pdf/zerozeroreadme/tests/fixture/zzrm_bad_01/00README.XXX rename to tests/zerozeroreadme/fixture/zzrm_bad_01/00README.XXX diff --git a/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v1_01/00README.XXX b/tests/zerozeroreadme/fixture/zzrm_v1_01/00README.XXX similarity index 100% rename from tex2pdf/zerozeroreadme/tests/fixture/zzrm_v1_01/00README.XXX rename to tests/zerozeroreadme/fixture/zzrm_v1_01/00README.XXX diff --git a/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_01/00README.yaml b/tests/zerozeroreadme/fixture/zzrm_v2_01/00README.yaml similarity index 100% rename from tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_01/00README.yaml rename to tests/zerozeroreadme/fixture/zzrm_v2_01/00README.yaml diff --git a/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_02/00README.json b/tests/zerozeroreadme/fixture/zzrm_v2_02/00README.json similarity index 100% rename from tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_02/00README.json rename to tests/zerozeroreadme/fixture/zzrm_v2_02/00README.json diff --git a/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_03/00README.toml b/tests/zerozeroreadme/fixture/zzrm_v2_03/00README.toml similarity index 100% rename from tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_03/00README.toml rename to tests/zerozeroreadme/fixture/zzrm_v2_03/00README.toml diff --git a/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.json b/tests/zerozeroreadme/fixture/zzrm_v2_04/00README.json similarity index 100% rename from tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.json rename to tests/zerozeroreadme/fixture/zzrm_v2_04/00README.json diff --git a/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.toml b/tests/zerozeroreadme/fixture/zzrm_v2_04/00README.toml similarity index 100% rename from tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.toml rename to tests/zerozeroreadme/fixture/zzrm_v2_04/00README.toml diff --git a/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.yaml b/tests/zerozeroreadme/fixture/zzrm_v2_04/00README.yaml similarity index 100% rename from tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_04/00README.yaml rename to tests/zerozeroreadme/fixture/zzrm_v2_04/00README.yaml diff --git a/tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_syntax_error/00README.yaml b/tests/zerozeroreadme/fixture/zzrm_v2_syntax_error/00README.yaml similarity index 100% rename from tex2pdf/zerozeroreadme/tests/fixture/zzrm_v2_syntax_error/00README.yaml rename to tests/zerozeroreadme/fixture/zzrm_v2_syntax_error/00README.yaml diff --git a/tex2pdf/zerozeroreadme/tests/test_typings.py b/tests/zerozeroreadme/test_typings.py similarity index 96% rename from tex2pdf/zerozeroreadme/tests/test_typings.py rename to tests/zerozeroreadme/test_typings.py index 37bbab9..6b12a2b 100644 --- a/tex2pdf/zerozeroreadme/tests/test_typings.py +++ b/tests/zerozeroreadme/test_typings.py @@ -15,7 +15,7 @@ def test_run_mypy_module(self) -> None: mypy = shutil.which("mypy") if mypy is None: raise OSError("mypy not found in PATH") - root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..")) + root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) result: int = subprocess.call([mypy, "tex2pdf/zerozeroreadme"], env=os.environ, cwd=root_dir) self.assertEqual(result, 0, "Expect 0 type errors when running mypy") diff --git a/tex2pdf/zerozeroreadme/tests/test_zzrm.py b/tests/zerozeroreadme/test_zzrm.py similarity index 100% rename from tex2pdf/zerozeroreadme/tests/test_zzrm.py rename to tests/zerozeroreadme/test_zzrm.py From ff698190976d0dc7d23dd25739a03bc48ed66c12 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 14:48:37 +0900 Subject: [PATCH 19/27] Move service tests to test/preflight so they don't end up in the docker image --- pyproject.toml | 2 ++ .../tests => tests/service}/fixture/smoke/Test.pdf | Bin .../service}/fixture/tarballs/test1/00README.XXX | 0 .../service}/fixture/tarballs/test1/Makefile | 0 .../service}/fixture/tarballs/test1/fake-file-1.bbl | 0 .../service}/fixture/tarballs/test1/fake-file-1.tex | 0 .../service}/fixture/tarballs/test1/fake-file-2.bbl | 0 .../service}/fixture/tarballs/test1/fake-file-2.tex | 0 .../service}/fixture/tarballs/test1/fake-file-3.tex | 0 .../service}/fixture/tarballs/test1/test1.tar.gz | Bin .../service}/fixture/tarballs/test2/00README.XXX | 0 .../service}/fixture/tarballs/test2/Makefile | 0 .../service}/fixture/tarballs/test2/fake-file-1.bbl | 0 .../service}/fixture/tarballs/test2/fake-file-1.tex | 0 .../service}/fixture/tarballs/test2/fake-file-2.bbl | 0 .../service}/fixture/tarballs/test2/fake-file-2.tex | 0 .../service}/fixture/tarballs/test2/fake-file-3.tex | 0 .../service}/fixture/tarballs/test2/test2.tar.gz | Bin .../service}/fixture/tarballs/test3/00readme.yaml | 0 .../service}/fixture/tarballs/test3/Makefile | 0 .../service}/fixture/tarballs/test3/fake-file-1.bbl | 0 .../service}/fixture/tarballs/test3/fake-file-1.tex | 0 .../service}/fixture/tarballs/test3/fake-file-2.bbl | 0 .../service}/fixture/tarballs/test3/fake-file-2.tex | 0 .../service}/fixture/tarballs/test3/fake-file-3.tex | 0 .../service}/fixture/tarballs/test3/test3.tar.gz | Bin .../service}/fixture/tarballs/test4/00readme.yaml | 0 .../service}/fixture/tarballs/test4/Makefile | 0 .../service}/fixture/tarballs/test4/gdp.tex | 0 .../service}/fixture/tarballs/test4/main.tex | 0 .../service}/fixture/tarballs/test4/test4.tar.gz | Bin .../service/tests => tests/service}/test_docker.py | 0 .../service/tests => tests/service}/test_patch.py | 0 .../service/tests => tests/service}/test_typings.py | 2 +- .../tests => tests/service}/test_watermark.py | 0 35 files changed, 3 insertions(+), 1 deletion(-) rename {tex2pdf/service/tests => tests/service}/fixture/smoke/Test.pdf (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test1/00README.XXX (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test1/Makefile (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test1/fake-file-1.bbl (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test1/fake-file-1.tex (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test1/fake-file-2.bbl (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test1/fake-file-2.tex (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test1/fake-file-3.tex (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test1/test1.tar.gz (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test2/00README.XXX (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test2/Makefile (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test2/fake-file-1.bbl (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test2/fake-file-1.tex (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test2/fake-file-2.bbl (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test2/fake-file-2.tex (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test2/fake-file-3.tex (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test2/test2.tar.gz (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test3/00readme.yaml (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test3/Makefile (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test3/fake-file-1.bbl (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test3/fake-file-1.tex (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test3/fake-file-2.bbl (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test3/fake-file-2.tex (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test3/fake-file-3.tex (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test3/test3.tar.gz (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test4/00readme.yaml (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test4/Makefile (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test4/gdp.tex (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test4/main.tex (100%) rename {tex2pdf/service/tests => tests/service}/fixture/tarballs/test4/test4.tar.gz (100%) rename {tex2pdf/service/tests => tests/service}/test_docker.py (100%) rename {tex2pdf/service/tests => tests/service}/test_patch.py (100%) rename {tex2pdf/service/tests => tests/service}/test_typings.py (96%) rename {tex2pdf/service/tests => tests/service}/test_watermark.py (100%) diff --git a/pyproject.toml b/pyproject.toml index 103836f..37101d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,6 +39,7 @@ pytest = "^8.3.3" mypy = "*" mypy-extensions = "*" types-toml = "^0.10.8.20240310" +types-requests = "^2.32.0" click = "^8.1.7" tqdm = "^4.66.2" uvicorn = "^0.29.0" @@ -52,6 +53,7 @@ extend-exclude = [ "tests/preflight_parser", "tests/zerozeroreadme", "tests/tex_inspection", + "tests/service", "pdf_profile", "bin", "service-various", diff --git a/tex2pdf/service/tests/fixture/smoke/Test.pdf b/tests/service/fixture/smoke/Test.pdf similarity index 100% rename from tex2pdf/service/tests/fixture/smoke/Test.pdf rename to tests/service/fixture/smoke/Test.pdf diff --git a/tex2pdf/service/tests/fixture/tarballs/test1/00README.XXX b/tests/service/fixture/tarballs/test1/00README.XXX similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test1/00README.XXX rename to tests/service/fixture/tarballs/test1/00README.XXX diff --git a/tex2pdf/service/tests/fixture/tarballs/test1/Makefile b/tests/service/fixture/tarballs/test1/Makefile similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test1/Makefile rename to tests/service/fixture/tarballs/test1/Makefile diff --git a/tex2pdf/service/tests/fixture/tarballs/test1/fake-file-1.bbl b/tests/service/fixture/tarballs/test1/fake-file-1.bbl similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test1/fake-file-1.bbl rename to tests/service/fixture/tarballs/test1/fake-file-1.bbl diff --git a/tex2pdf/service/tests/fixture/tarballs/test1/fake-file-1.tex b/tests/service/fixture/tarballs/test1/fake-file-1.tex similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test1/fake-file-1.tex rename to tests/service/fixture/tarballs/test1/fake-file-1.tex diff --git a/tex2pdf/service/tests/fixture/tarballs/test1/fake-file-2.bbl b/tests/service/fixture/tarballs/test1/fake-file-2.bbl similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test1/fake-file-2.bbl rename to tests/service/fixture/tarballs/test1/fake-file-2.bbl diff --git a/tex2pdf/service/tests/fixture/tarballs/test1/fake-file-2.tex b/tests/service/fixture/tarballs/test1/fake-file-2.tex similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test1/fake-file-2.tex rename to tests/service/fixture/tarballs/test1/fake-file-2.tex diff --git a/tex2pdf/service/tests/fixture/tarballs/test1/fake-file-3.tex b/tests/service/fixture/tarballs/test1/fake-file-3.tex similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test1/fake-file-3.tex rename to tests/service/fixture/tarballs/test1/fake-file-3.tex diff --git a/tex2pdf/service/tests/fixture/tarballs/test1/test1.tar.gz b/tests/service/fixture/tarballs/test1/test1.tar.gz similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test1/test1.tar.gz rename to tests/service/fixture/tarballs/test1/test1.tar.gz diff --git a/tex2pdf/service/tests/fixture/tarballs/test2/00README.XXX b/tests/service/fixture/tarballs/test2/00README.XXX similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test2/00README.XXX rename to tests/service/fixture/tarballs/test2/00README.XXX diff --git a/tex2pdf/service/tests/fixture/tarballs/test2/Makefile b/tests/service/fixture/tarballs/test2/Makefile similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test2/Makefile rename to tests/service/fixture/tarballs/test2/Makefile diff --git a/tex2pdf/service/tests/fixture/tarballs/test2/fake-file-1.bbl b/tests/service/fixture/tarballs/test2/fake-file-1.bbl similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test2/fake-file-1.bbl rename to tests/service/fixture/tarballs/test2/fake-file-1.bbl diff --git a/tex2pdf/service/tests/fixture/tarballs/test2/fake-file-1.tex b/tests/service/fixture/tarballs/test2/fake-file-1.tex similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test2/fake-file-1.tex rename to tests/service/fixture/tarballs/test2/fake-file-1.tex diff --git a/tex2pdf/service/tests/fixture/tarballs/test2/fake-file-2.bbl b/tests/service/fixture/tarballs/test2/fake-file-2.bbl similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test2/fake-file-2.bbl rename to tests/service/fixture/tarballs/test2/fake-file-2.bbl diff --git a/tex2pdf/service/tests/fixture/tarballs/test2/fake-file-2.tex b/tests/service/fixture/tarballs/test2/fake-file-2.tex similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test2/fake-file-2.tex rename to tests/service/fixture/tarballs/test2/fake-file-2.tex diff --git a/tex2pdf/service/tests/fixture/tarballs/test2/fake-file-3.tex b/tests/service/fixture/tarballs/test2/fake-file-3.tex similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test2/fake-file-3.tex rename to tests/service/fixture/tarballs/test2/fake-file-3.tex diff --git a/tex2pdf/service/tests/fixture/tarballs/test2/test2.tar.gz b/tests/service/fixture/tarballs/test2/test2.tar.gz similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test2/test2.tar.gz rename to tests/service/fixture/tarballs/test2/test2.tar.gz diff --git a/tex2pdf/service/tests/fixture/tarballs/test3/00readme.yaml b/tests/service/fixture/tarballs/test3/00readme.yaml similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test3/00readme.yaml rename to tests/service/fixture/tarballs/test3/00readme.yaml diff --git a/tex2pdf/service/tests/fixture/tarballs/test3/Makefile b/tests/service/fixture/tarballs/test3/Makefile similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test3/Makefile rename to tests/service/fixture/tarballs/test3/Makefile diff --git a/tex2pdf/service/tests/fixture/tarballs/test3/fake-file-1.bbl b/tests/service/fixture/tarballs/test3/fake-file-1.bbl similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test3/fake-file-1.bbl rename to tests/service/fixture/tarballs/test3/fake-file-1.bbl diff --git a/tex2pdf/service/tests/fixture/tarballs/test3/fake-file-1.tex b/tests/service/fixture/tarballs/test3/fake-file-1.tex similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test3/fake-file-1.tex rename to tests/service/fixture/tarballs/test3/fake-file-1.tex diff --git a/tex2pdf/service/tests/fixture/tarballs/test3/fake-file-2.bbl b/tests/service/fixture/tarballs/test3/fake-file-2.bbl similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test3/fake-file-2.bbl rename to tests/service/fixture/tarballs/test3/fake-file-2.bbl diff --git a/tex2pdf/service/tests/fixture/tarballs/test3/fake-file-2.tex b/tests/service/fixture/tarballs/test3/fake-file-2.tex similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test3/fake-file-2.tex rename to tests/service/fixture/tarballs/test3/fake-file-2.tex diff --git a/tex2pdf/service/tests/fixture/tarballs/test3/fake-file-3.tex b/tests/service/fixture/tarballs/test3/fake-file-3.tex similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test3/fake-file-3.tex rename to tests/service/fixture/tarballs/test3/fake-file-3.tex diff --git a/tex2pdf/service/tests/fixture/tarballs/test3/test3.tar.gz b/tests/service/fixture/tarballs/test3/test3.tar.gz similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test3/test3.tar.gz rename to tests/service/fixture/tarballs/test3/test3.tar.gz diff --git a/tex2pdf/service/tests/fixture/tarballs/test4/00readme.yaml b/tests/service/fixture/tarballs/test4/00readme.yaml similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test4/00readme.yaml rename to tests/service/fixture/tarballs/test4/00readme.yaml diff --git a/tex2pdf/service/tests/fixture/tarballs/test4/Makefile b/tests/service/fixture/tarballs/test4/Makefile similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test4/Makefile rename to tests/service/fixture/tarballs/test4/Makefile diff --git a/tex2pdf/service/tests/fixture/tarballs/test4/gdp.tex b/tests/service/fixture/tarballs/test4/gdp.tex similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test4/gdp.tex rename to tests/service/fixture/tarballs/test4/gdp.tex diff --git a/tex2pdf/service/tests/fixture/tarballs/test4/main.tex b/tests/service/fixture/tarballs/test4/main.tex similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test4/main.tex rename to tests/service/fixture/tarballs/test4/main.tex diff --git a/tex2pdf/service/tests/fixture/tarballs/test4/test4.tar.gz b/tests/service/fixture/tarballs/test4/test4.tar.gz similarity index 100% rename from tex2pdf/service/tests/fixture/tarballs/test4/test4.tar.gz rename to tests/service/fixture/tarballs/test4/test4.tar.gz diff --git a/tex2pdf/service/tests/test_docker.py b/tests/service/test_docker.py similarity index 100% rename from tex2pdf/service/tests/test_docker.py rename to tests/service/test_docker.py diff --git a/tex2pdf/service/tests/test_patch.py b/tests/service/test_patch.py similarity index 100% rename from tex2pdf/service/tests/test_patch.py rename to tests/service/test_patch.py diff --git a/tex2pdf/service/tests/test_typings.py b/tests/service/test_typings.py similarity index 96% rename from tex2pdf/service/tests/test_typings.py rename to tests/service/test_typings.py index f24da02..8f1e3a1 100644 --- a/tex2pdf/service/tests/test_typings.py +++ b/tests/service/test_typings.py @@ -14,7 +14,7 @@ def test_run_mypy_module(self) -> None: mypy = shutil.which("mypy") if mypy is None: raise EnvironmentError("mypy not found in PATH") - root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..")) + root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) result: int = subprocess.call([mypy, "tex2pdf.service"], env=os.environ, cwd=root_dir) self.assertEqual(result, 0, 'Expect 0 type errors when running mypy') diff --git a/tex2pdf/service/tests/test_watermark.py b/tests/service/test_watermark.py similarity index 100% rename from tex2pdf/service/tests/test_watermark.py rename to tests/service/test_watermark.py From f21c209c0ad04b01f129f9456eda0e25aceeff62 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 14:50:02 +0900 Subject: [PATCH 20/27] Fixes for typing in tex2pdf.service --- tex2pdf/service/__init__.py | 4 ++-- tex2pdf/service/converter_driver.py | 9 +++++++-- tex2pdf/service/tex_to_pdf_converters.py | 6 +++++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/tex2pdf/service/__init__.py b/tex2pdf/service/__init__.py index 956a6ac..ee7f0af 100644 --- a/tex2pdf/service/__init__.py +++ b/tex2pdf/service/__init__.py @@ -30,9 +30,9 @@ class CustomJsonFormatter(JsonFormatter): """Logging formatter to play nice with JSON logger""" - def __init__(self, *args: list, **kwargs: Any): + def __init__(self, *args: list, **kwargs: Any) -> None: super().__init__(*args, **kwargs, - rename_fields={"levelname": LOG_LEVEL_NAME, "asctime": "time"}) + rename_fields={"levelname": LOG_LEVEL_NAME, "asctime": "time"}) # type:ignore[no-untyped-call] def _perform_rename_log_fields(self, log_record: dict) -> None: if "color_message" in log_record: diff --git a/tex2pdf/service/converter_driver.py b/tex2pdf/service/converter_driver.py index 2a49e6b..010cd49 100644 --- a/tex2pdf/service/converter_driver.py +++ b/tex2pdf/service/converter_driver.py @@ -64,7 +64,7 @@ class ConverterDriver: converter: BaseConverter | None converters: typing.List[type[BaseConverter]] tex_files: typing.List[str] - zzrm: ZeroZeroReadMe + zzrm: ZeroZeroReadMe | None t0: float max_time_budget: float outcome: dict @@ -108,6 +108,7 @@ def __init__(self, work_dir: str, source: str, use_addon_tree: bool | None = Non self.today = None self.preflight = preflight self.auto_detect = auto_detect + self.zzrm = None pass @property @@ -150,6 +151,8 @@ def generate_pdf(self) -> str|None: raise ZZRMUnderspecified("Not ready for compilation and auto-detect disabled") logger.debug("Running preflight for input since no 00README present") preflight_response = generate_preflight_response(self.in_dir) + if isinstance(preflight_response, str): + raise Exception("We didn't request a JSON object but received one?") self.outcome["preflight_v2"] = preflight_response.to_json() logger.debug("Got preflight response: %s", preflight_response) if preflight_response.status.key != PreflightStatusValues.success: @@ -408,6 +411,8 @@ def _finalize_pdf(self) -> None: else: raise exc + assert self.zzrm is not None + if self.water.text and (not self.zzrm.nostamp): pdf_file = os.path.join(self.out_dir, outcome["pdf_file"]) temp_name = outcome["pdf_file"] + ".watermarked.pdf" @@ -485,6 +490,7 @@ def create_outcome(self, converter_driver: ConverterDriver, outcome: dict, pass zzrm = converter_driver.zzrm + assert zzrm is not None zzrm_generated = io.StringIO() zzrm.to_yaml(zzrm_generated) zzrm_generated.seek(0) @@ -557,7 +563,6 @@ class RemoteConverterDriver(ConverterDriver): def __init__(self, service: str, post_timeout: int, work_dir: str, source: str, **kwargs: typing.Any): super().__init__(work_dir, source, **kwargs) - self.zzrm: ZeroZeroReadMe | None = None self.service = service self.post_timeout = post_timeout diff --git a/tex2pdf/service/tex_to_pdf_converters.py b/tex2pdf/service/tex_to_pdf_converters.py index e27251d..f8a6a83 100644 --- a/tex2pdf/service/tex_to_pdf_converters.py +++ b/tex2pdf/service/tex_to_pdf_converters.py @@ -302,8 +302,12 @@ def check_missing(self, in_dir: str, run: dict, artifact: str) -> dict: pass -def select_converter_class(zzrm: ZeroZeroReadMe) -> type[BaseConverter]: +def select_converter_class(zzrm: ZeroZeroReadMe | None) -> type[BaseConverter]: """Select converter based on ZZRM.""" + if zzrm is None: + raise ValueError("Compiler is not defined.") + if zzrm.process.compiler is None: + raise ValueError("Compiler is not defined.") process_spec = zzrm.process.compiler.compiler_string if process_spec == "etex+dvips_ps2pdf": return VanillaTexConverter From 49dd3a51a528b864da7084fc92c1b10fcf56d56d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 14:50:39 +0900 Subject: [PATCH 21/27] Fixes for service unittests --- tests/service/test_typings.py | 2 +- tests/service/test_watermark.py | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/service/test_typings.py b/tests/service/test_typings.py index 8f1e3a1..e2f6faa 100644 --- a/tests/service/test_typings.py +++ b/tests/service/test_typings.py @@ -15,7 +15,7 @@ def test_run_mypy_module(self) -> None: if mypy is None: raise EnvironmentError("mypy not found in PATH") root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) - result: int = subprocess.call([mypy, "tex2pdf.service"], + result: int = subprocess.call([mypy, "tex2pdf/service"], env=os.environ, cwd=root_dir) self.assertEqual(result, 0, 'Expect 0 type errors when running mypy') diff --git a/tests/service/test_watermark.py b/tests/service/test_watermark.py index 4a0efb2..6ec1aa0 100644 --- a/tests/service/test_watermark.py +++ b/tests/service/test_watermark.py @@ -3,8 +3,10 @@ from tex2pdf.service.pdf_watermark import add_watermark_text_to_pdf, Watermark -watermark_pdf = "tests/test-output/watermark.pdf" -in_pdf = "tests/fixture/smoke/Test.pdf" +SELF_DIR = os.path.abspath(os.path.dirname(__file__)) + +watermark_pdf = os.path.join(SELF_DIR, "output/watermark.pdf") +in_pdf = os.path.join(SELF_DIR, "fixture/smoke/Test.pdf") class MyTestCase(unittest.TestCase): @@ -16,7 +18,7 @@ def test_watermarking(self): "Water World is in Orlando, FL.", "https://en.wikipedia.org/wiki/Waterworld" ), - in_pdf, "tests/test-output/Test.pdf" + in_pdf, os.path.join(SELF_DIR, "output/Test.pdf") ) if __name__ == '__main__': From 33c6d50a0c79e5f4868ad5dd328c8e0d2d1209de Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 14:50:51 +0900 Subject: [PATCH 22/27] update poetry.lock --- poetry.lock | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/poetry.lock b/poetry.lock index c16a5c0..08dfeae 100644 --- a/poetry.lock +++ b/poetry.lock @@ -961,6 +961,20 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "types-requests" +version = "2.32.0.20241016" +description = "Typing stubs for requests" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-requests-2.32.0.20241016.tar.gz", hash = "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95"}, + {file = "types_requests-2.32.0.20241016-py3-none-any.whl", hash = "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747"}, +] + +[package.dependencies] +urllib3 = ">=2" + [[package]] name = "types-toml" version = "0.10.8.20240310" @@ -987,7 +1001,7 @@ files = [ name = "urllib3" version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, @@ -1058,4 +1072,4 @@ service = ["fastapi", "hypercorn", "pillow", "pymupdf", "python-json-logger", "p [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "1c665bb8f2209a2f3964ae2cc4e9e7e0d3256fa19dffe60cf1e6083fb28caf3a" +content-hash = "7ca19b6cedcb1e8caaa83d44ad0e1915c3034da29a967223b822c426f6af0103" From 6c8f71eb6ffeaba928f31bb6b22898ae68a0d488 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 15:04:53 +0900 Subject: [PATCH 23/27] Test streamlining, all output in same dir --- tests/service/test_docker.py | 3 +-- tests/service/test_patch.py | 10 ++++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/service/test_docker.py b/tests/service/test_docker.py index 553de87..ff29cbb 100644 --- a/tests/service/test_docker.py +++ b/tests/service/test_docker.py @@ -38,6 +38,7 @@ def submit_tarball(service: str, tarball: str, outcome_file: str, tex2pdf_timeou if json_response: return json.loads(res.content) else: + os.makedirs(os.path.dirname(outcome_file), exist_ok=True) with open(outcome_file, "wb") as out: out.write(res.content) meta, lines, clsfiles, styfiles, pdfchecksum = get_outcome_meta_and_files_info(outcome_file) @@ -59,8 +60,6 @@ def docker_container(request): PORT = request.config.getoption('--docker-port') url = f"http://localhost:{PORT}" - os.makedirs("tests/output", exist_ok=True) - if not request.config.getoption('--no-docker-setup'): image_name = "public-tex2pdf-app-2024-2024-07-21" container_name = "test-arxiv-tex2pdf" diff --git a/tests/service/test_patch.py b/tests/service/test_patch.py index bf8655b..bd72568 100644 --- a/tests/service/test_patch.py +++ b/tests/service/test_patch.py @@ -2,6 +2,8 @@ import unittest from tex2pdf.service.tex_patching import fix_tex_sources +TEST_DIR = os.path.join(os.path.abspath(os.path.dirname(__file__)), "output/test-patch") + test1 = r""" \usepackage{minted} \usepackage[frozencache]{minted} @@ -26,14 +28,14 @@ def read_file(filename) -> str: class TestTexPatch(unittest.TestCase): def setUp(self): - os.makedirs("tests/test-output", exist_ok=True) - with open("tests/test-output/test.tex", "w", encoding="utf-8") as fd: + os.makedirs(TEST_DIR, exist_ok=True) + with open(os.path.join(TEST_DIR, "test.tex"), "w", encoding="utf-8") as fd: fd.write(test1) pass def test_fixer(self): - fix_tex_sources("tests/test-output", toplevels=["test.tex"]) - result = read_file("tests/test-output/test.tex") + fix_tex_sources(TEST_DIR, toplevels=["test.tex"]) + result = read_file(os.path.join(TEST_DIR, "test.tex")) self.assertEqual(first_expected, result) From 00ec1c51146d03c5da27970dacca99254de2131b Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 15:32:17 +0900 Subject: [PATCH 24/27] Update README.md and authors --- README.md | 37 +++++++++++++++++++++++++++++++++---- pyproject.toml | 2 +- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f38ae97..aad9f0f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,35 @@ # submission-tools -arXiv submission related tool repository -- **pdf_profile**: Read PDF file and outputs a digst. -- **tex2pdf_service**: Compile arXiv TeX submission and generates PDF. -- **tex_inspection**: A library to inspect the arXiv TeX submission files +arXiv submission related tool repository, mainly collection `tex2pdf` with +its subpackages (`preflight_parser`, `zerozeroreadme`, `tex_inspection`, and `service`) +and the `pdf_profile` package. + +# PDF Profile + +TBD. + +# TeX Inspection + +Package: `tex2pdf.tex_inspection` + +A library that inspects the arXiv submission + +# Preflight Parser + +Package: `tex2pdf.preflight_parser` + +Full specification: [GenPDF Preflight & 00README Spec Proposal](https://docs.google.com/document/d/1X1ZVvNX75GtFqejcOI1AHb7PkRbkT-syJlpsU4v_-o4/edit?usp=sharing) + +# ZeroZeroReadme + +Package: `tex2pdf.zerozeroreadme` + +Full specification: [00README for authors](https://docs.google.com/document/d/1WbAh2atcDLG0-yJEP9WDKqujHtwH1Kp_TojykeC2HFQ/edit?usp=sharing) + +# TeX2PDF Service + +Package: `tex2pdf.service` + +arXiv's next generation TeX compilation based on TexLive Docker container. + +See detailed [README.md](tex2pdf/service/README.md) diff --git a/pyproject.toml b/pyproject.toml index 37101d5..89b6ee0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,7 +2,7 @@ name = "arxiv-tex2pdf" version = "0.1.0" description = "Compiling TeX to PDF as a service" -authors = ["arxiv.org"] +authors = ["Naoyuki Tai ", "Norbert Preining "] packages = [ { include = "tex2pdf" } ] From e54f420ce7dd136e98b9a7020b7d12fb3917a03f Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 15:35:28 +0900 Subject: [PATCH 25/27] Move tex_inspection tests into test directory --- pyproject.toml | 5 +---- .../tests => tests/tex_inspection}/__init__.py | 0 .../fixture/inspection/multi_tex_1/fake-file-1.Tex | 0 .../fixture/inspection/multi_tex_1/fake-file-1.bbl | 0 .../fixture/inspection/multi_tex_1/fake-file-2.bbl | 0 .../fixture/inspection/multi_tex_1/fake-file-2.tex | 0 .../fixture/inspection/multi_tex_1/fake-file-3.TEX | 0 .../fixture/inspection/multi_tex_2/00README.XXX | 0 .../fixture/inspection/multi_tex_2/fake-file-1.Tex | 0 .../fixture/inspection/multi_tex_2/fake-file-1.bbl | 0 .../fixture/inspection/multi_tex_2/fake-file-2.bbl | 0 .../fixture/inspection/multi_tex_2/fake-file-2.tex | 0 .../fixture/inspection/multi_tex_2/fake-file-3.TEX | 0 .../tex_inspection}/fixture/inspection/pdfoutput_1/artic.cls | 0 .../fixture/inspection/pdfoutput_1/fake-file-1.Tex | 0 .../fixture/inspection/pdfoutput_1/fake-file-1.bbl | 0 .../fixture/inspection/pdfoutput_1/fake-file-2.bbl | 0 .../fixture/inspection/pdfoutput_1/fake-file-2.tex | 0 .../fixture/inspection/pdfoutput_1/test/fake-file-3.inc | 0 .../fixture/inspection/single_tex_1/NOBEL_PRIZE_WINNER.TEX | 0 .../fixture/inspection/single_tex_2/00README.XXX | 0 .../fixture/inspection/single_tex_2/fake-file-1.bbl | 0 .../fixture/inspection/single_tex_2/fake-file-1.tex | 0 .../fixture/inspection/single_tex_2/fake-file-2.TEX | 0 .../fixture/inspection/single_tex_2/fake-file-2.bbl | 0 .../fixture/inspection/single_tex_2/fake-file-3.tex | 0 .../fixture/inspection/single_tex_3/fake-file-1.bbl | 0 .../fixture/inspection/single_tex_3/fake-file-1.tex | 0 .../fixture/inspection/single_tex_3/fake-file-2.TEX | 0 .../fixture/inspection/single_tex_3/fake-file-3.tex | 0 .../fixture/inspection/single_tex_4/fake-file-1.bbl | 0 .../fixture/inspection/single_tex_4/fake-file-1.tex | 0 .../fixture/inspection/single_tex_4/fake-file-2.TEX | 0 .../fixture/inspection/single_tex_4/fake-file-3.tex | 0 .../fixture/inspection/single_tex_4/fake-package.tex | 0 .../fixture/inspection/single_tex_5/00README.XXX | 0 .../fixture/inspection/single_tex_5/fake-file-1.bbl | 0 .../fixture/inspection/single_tex_5/fake-file-1.tex | 0 .../fixture/inspection/single_tex_5/fake-file-2.TEX | 0 .../fixture/inspection/single_tex_5/fake-file-2.bbl | 0 .../fixture/inspection/single_tex_5/fake-file-3.tex | 0 .../tex_inspection}/readme-files/t1/00README.yaml | 0 .../tex_inspection}/readme-files/t2/00README.json | 0 .../tex_inspection}/readme-files/t3/00README.XXX | 0 .../tests => tests/tex_inspection}/test_ban.py | 0 .../tests => tests/tex_inspection}/test_conveter_opts.py | 0 .../tests => tests/tex_inspection}/test_typings.py | 2 +- 47 files changed, 2 insertions(+), 5 deletions(-) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/__init__.py (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/multi_tex_1/fake-file-1.Tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/multi_tex_1/fake-file-1.bbl (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/multi_tex_1/fake-file-2.bbl (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/multi_tex_1/fake-file-2.tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/multi_tex_1/fake-file-3.TEX (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/multi_tex_2/00README.XXX (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/multi_tex_2/fake-file-1.Tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/multi_tex_2/fake-file-1.bbl (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/multi_tex_2/fake-file-2.bbl (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/multi_tex_2/fake-file-2.tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/multi_tex_2/fake-file-3.TEX (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/pdfoutput_1/artic.cls (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/pdfoutput_1/fake-file-1.Tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/pdfoutput_1/fake-file-1.bbl (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/pdfoutput_1/fake-file-2.bbl (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/pdfoutput_1/fake-file-2.tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/pdfoutput_1/test/fake-file-3.inc (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_1/NOBEL_PRIZE_WINNER.TEX (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_2/00README.XXX (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_2/fake-file-1.bbl (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_2/fake-file-1.tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_2/fake-file-2.TEX (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_2/fake-file-2.bbl (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_2/fake-file-3.tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_3/fake-file-1.bbl (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_3/fake-file-1.tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_3/fake-file-2.TEX (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_3/fake-file-3.tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_4/fake-file-1.bbl (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_4/fake-file-1.tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_4/fake-file-2.TEX (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_4/fake-file-3.tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_4/fake-package.tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_5/00README.XXX (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_5/fake-file-1.bbl (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_5/fake-file-1.tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_5/fake-file-2.TEX (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_5/fake-file-2.bbl (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/fixture/inspection/single_tex_5/fake-file-3.tex (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/readme-files/t1/00README.yaml (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/readme-files/t2/00README.json (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/readme-files/t3/00README.XXX (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/test_ban.py (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/test_conveter_opts.py (100%) rename {tex2pdf/tex_inspection/tests => tests/tex_inspection}/test_typings.py (96%) diff --git a/pyproject.toml b/pyproject.toml index 89b6ee0..d3f8f5e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -50,10 +50,7 @@ pre-commit = "*" [tool.ruff] line-length = 120 extend-exclude = [ - "tests/preflight_parser", - "tests/zerozeroreadme", - "tests/tex_inspection", - "tests/service", + "tests", "pdf_profile", "bin", "service-various", diff --git a/tex2pdf/tex_inspection/tests/__init__.py b/tests/tex_inspection/__init__.py similarity index 100% rename from tex2pdf/tex_inspection/tests/__init__.py rename to tests/tex_inspection/__init__.py diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-1.Tex b/tests/tex_inspection/fixture/inspection/multi_tex_1/fake-file-1.Tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-1.Tex rename to tests/tex_inspection/fixture/inspection/multi_tex_1/fake-file-1.Tex diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-1.bbl b/tests/tex_inspection/fixture/inspection/multi_tex_1/fake-file-1.bbl similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-1.bbl rename to tests/tex_inspection/fixture/inspection/multi_tex_1/fake-file-1.bbl diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-2.bbl b/tests/tex_inspection/fixture/inspection/multi_tex_1/fake-file-2.bbl similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-2.bbl rename to tests/tex_inspection/fixture/inspection/multi_tex_1/fake-file-2.bbl diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-2.tex b/tests/tex_inspection/fixture/inspection/multi_tex_1/fake-file-2.tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-2.tex rename to tests/tex_inspection/fixture/inspection/multi_tex_1/fake-file-2.tex diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-3.TEX b/tests/tex_inspection/fixture/inspection/multi_tex_1/fake-file-3.TEX similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_1/fake-file-3.TEX rename to tests/tex_inspection/fixture/inspection/multi_tex_1/fake-file-3.TEX diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/00README.XXX b/tests/tex_inspection/fixture/inspection/multi_tex_2/00README.XXX similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/00README.XXX rename to tests/tex_inspection/fixture/inspection/multi_tex_2/00README.XXX diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-1.Tex b/tests/tex_inspection/fixture/inspection/multi_tex_2/fake-file-1.Tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-1.Tex rename to tests/tex_inspection/fixture/inspection/multi_tex_2/fake-file-1.Tex diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-1.bbl b/tests/tex_inspection/fixture/inspection/multi_tex_2/fake-file-1.bbl similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-1.bbl rename to tests/tex_inspection/fixture/inspection/multi_tex_2/fake-file-1.bbl diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-2.bbl b/tests/tex_inspection/fixture/inspection/multi_tex_2/fake-file-2.bbl similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-2.bbl rename to tests/tex_inspection/fixture/inspection/multi_tex_2/fake-file-2.bbl diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-2.tex b/tests/tex_inspection/fixture/inspection/multi_tex_2/fake-file-2.tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-2.tex rename to tests/tex_inspection/fixture/inspection/multi_tex_2/fake-file-2.tex diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-3.TEX b/tests/tex_inspection/fixture/inspection/multi_tex_2/fake-file-3.TEX similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/multi_tex_2/fake-file-3.TEX rename to tests/tex_inspection/fixture/inspection/multi_tex_2/fake-file-3.TEX diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/artic.cls b/tests/tex_inspection/fixture/inspection/pdfoutput_1/artic.cls similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/artic.cls rename to tests/tex_inspection/fixture/inspection/pdfoutput_1/artic.cls diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-1.Tex b/tests/tex_inspection/fixture/inspection/pdfoutput_1/fake-file-1.Tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-1.Tex rename to tests/tex_inspection/fixture/inspection/pdfoutput_1/fake-file-1.Tex diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-1.bbl b/tests/tex_inspection/fixture/inspection/pdfoutput_1/fake-file-1.bbl similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-1.bbl rename to tests/tex_inspection/fixture/inspection/pdfoutput_1/fake-file-1.bbl diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-2.bbl b/tests/tex_inspection/fixture/inspection/pdfoutput_1/fake-file-2.bbl similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-2.bbl rename to tests/tex_inspection/fixture/inspection/pdfoutput_1/fake-file-2.bbl diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-2.tex b/tests/tex_inspection/fixture/inspection/pdfoutput_1/fake-file-2.tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/fake-file-2.tex rename to tests/tex_inspection/fixture/inspection/pdfoutput_1/fake-file-2.tex diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/test/fake-file-3.inc b/tests/tex_inspection/fixture/inspection/pdfoutput_1/test/fake-file-3.inc similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/pdfoutput_1/test/fake-file-3.inc rename to tests/tex_inspection/fixture/inspection/pdfoutput_1/test/fake-file-3.inc diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_1/NOBEL_PRIZE_WINNER.TEX b/tests/tex_inspection/fixture/inspection/single_tex_1/NOBEL_PRIZE_WINNER.TEX similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_1/NOBEL_PRIZE_WINNER.TEX rename to tests/tex_inspection/fixture/inspection/single_tex_1/NOBEL_PRIZE_WINNER.TEX diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/00README.XXX b/tests/tex_inspection/fixture/inspection/single_tex_2/00README.XXX similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/00README.XXX rename to tests/tex_inspection/fixture/inspection/single_tex_2/00README.XXX diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-1.bbl b/tests/tex_inspection/fixture/inspection/single_tex_2/fake-file-1.bbl similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-1.bbl rename to tests/tex_inspection/fixture/inspection/single_tex_2/fake-file-1.bbl diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-1.tex b/tests/tex_inspection/fixture/inspection/single_tex_2/fake-file-1.tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-1.tex rename to tests/tex_inspection/fixture/inspection/single_tex_2/fake-file-1.tex diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-2.TEX b/tests/tex_inspection/fixture/inspection/single_tex_2/fake-file-2.TEX similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-2.TEX rename to tests/tex_inspection/fixture/inspection/single_tex_2/fake-file-2.TEX diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-2.bbl b/tests/tex_inspection/fixture/inspection/single_tex_2/fake-file-2.bbl similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-2.bbl rename to tests/tex_inspection/fixture/inspection/single_tex_2/fake-file-2.bbl diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-3.tex b/tests/tex_inspection/fixture/inspection/single_tex_2/fake-file-3.tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_2/fake-file-3.tex rename to tests/tex_inspection/fixture/inspection/single_tex_2/fake-file-3.tex diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-1.bbl b/tests/tex_inspection/fixture/inspection/single_tex_3/fake-file-1.bbl similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-1.bbl rename to tests/tex_inspection/fixture/inspection/single_tex_3/fake-file-1.bbl diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-1.tex b/tests/tex_inspection/fixture/inspection/single_tex_3/fake-file-1.tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-1.tex rename to tests/tex_inspection/fixture/inspection/single_tex_3/fake-file-1.tex diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-2.TEX b/tests/tex_inspection/fixture/inspection/single_tex_3/fake-file-2.TEX similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-2.TEX rename to tests/tex_inspection/fixture/inspection/single_tex_3/fake-file-2.TEX diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-3.tex b/tests/tex_inspection/fixture/inspection/single_tex_3/fake-file-3.tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_3/fake-file-3.tex rename to tests/tex_inspection/fixture/inspection/single_tex_3/fake-file-3.tex diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-1.bbl b/tests/tex_inspection/fixture/inspection/single_tex_4/fake-file-1.bbl similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-1.bbl rename to tests/tex_inspection/fixture/inspection/single_tex_4/fake-file-1.bbl diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-1.tex b/tests/tex_inspection/fixture/inspection/single_tex_4/fake-file-1.tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-1.tex rename to tests/tex_inspection/fixture/inspection/single_tex_4/fake-file-1.tex diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-2.TEX b/tests/tex_inspection/fixture/inspection/single_tex_4/fake-file-2.TEX similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-2.TEX rename to tests/tex_inspection/fixture/inspection/single_tex_4/fake-file-2.TEX diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-3.tex b/tests/tex_inspection/fixture/inspection/single_tex_4/fake-file-3.tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-file-3.tex rename to tests/tex_inspection/fixture/inspection/single_tex_4/fake-file-3.tex diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-package.tex b/tests/tex_inspection/fixture/inspection/single_tex_4/fake-package.tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_4/fake-package.tex rename to tests/tex_inspection/fixture/inspection/single_tex_4/fake-package.tex diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/00README.XXX b/tests/tex_inspection/fixture/inspection/single_tex_5/00README.XXX similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/00README.XXX rename to tests/tex_inspection/fixture/inspection/single_tex_5/00README.XXX diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-1.bbl b/tests/tex_inspection/fixture/inspection/single_tex_5/fake-file-1.bbl similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-1.bbl rename to tests/tex_inspection/fixture/inspection/single_tex_5/fake-file-1.bbl diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-1.tex b/tests/tex_inspection/fixture/inspection/single_tex_5/fake-file-1.tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-1.tex rename to tests/tex_inspection/fixture/inspection/single_tex_5/fake-file-1.tex diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-2.TEX b/tests/tex_inspection/fixture/inspection/single_tex_5/fake-file-2.TEX similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-2.TEX rename to tests/tex_inspection/fixture/inspection/single_tex_5/fake-file-2.TEX diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-2.bbl b/tests/tex_inspection/fixture/inspection/single_tex_5/fake-file-2.bbl similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-2.bbl rename to tests/tex_inspection/fixture/inspection/single_tex_5/fake-file-2.bbl diff --git a/tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-3.tex b/tests/tex_inspection/fixture/inspection/single_tex_5/fake-file-3.tex similarity index 100% rename from tex2pdf/tex_inspection/tests/fixture/inspection/single_tex_5/fake-file-3.tex rename to tests/tex_inspection/fixture/inspection/single_tex_5/fake-file-3.tex diff --git a/tex2pdf/tex_inspection/tests/readme-files/t1/00README.yaml b/tests/tex_inspection/readme-files/t1/00README.yaml similarity index 100% rename from tex2pdf/tex_inspection/tests/readme-files/t1/00README.yaml rename to tests/tex_inspection/readme-files/t1/00README.yaml diff --git a/tex2pdf/tex_inspection/tests/readme-files/t2/00README.json b/tests/tex_inspection/readme-files/t2/00README.json similarity index 100% rename from tex2pdf/tex_inspection/tests/readme-files/t2/00README.json rename to tests/tex_inspection/readme-files/t2/00README.json diff --git a/tex2pdf/tex_inspection/tests/readme-files/t3/00README.XXX b/tests/tex_inspection/readme-files/t3/00README.XXX similarity index 100% rename from tex2pdf/tex_inspection/tests/readme-files/t3/00README.XXX rename to tests/tex_inspection/readme-files/t3/00README.XXX diff --git a/tex2pdf/tex_inspection/tests/test_ban.py b/tests/tex_inspection/test_ban.py similarity index 100% rename from tex2pdf/tex_inspection/tests/test_ban.py rename to tests/tex_inspection/test_ban.py diff --git a/tex2pdf/tex_inspection/tests/test_conveter_opts.py b/tests/tex_inspection/test_conveter_opts.py similarity index 100% rename from tex2pdf/tex_inspection/tests/test_conveter_opts.py rename to tests/tex_inspection/test_conveter_opts.py diff --git a/tex2pdf/tex_inspection/tests/test_typings.py b/tests/tex_inspection/test_typings.py similarity index 96% rename from tex2pdf/tex_inspection/tests/test_typings.py rename to tests/tex_inspection/test_typings.py index aa03ab1..808ae3d 100644 --- a/tex2pdf/tex_inspection/tests/test_typings.py +++ b/tests/tex_inspection/test_typings.py @@ -14,7 +14,7 @@ def test_run_mypy_module(self) -> None: mypy = shutil.which("mypy") if mypy is None: raise EnvironmentError("mypy not found in PATH") - root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..")) + root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) result: int = subprocess.call([mypy, "tex2pdf/tex_inspection"], env=os.environ, cwd=root_dir) self.assertEqual(result, 0, 'Expect 0 type errors when running mypy') From 66bc48dab1ea4ab250009caabd68e2c4655e561f Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Nov 2024 15:45:48 +0900 Subject: [PATCH 26/27] Enable ruff for tests, fix failures, format --- pyproject.toml | 6 +- tests/preflight_parser/test_preflight.py | 5 +- tests/service/test_docker.py | 83 ++++++++++++++-------- tests/service/test_patch.py | 8 ++- tests/service/test_typings.py | 10 +-- tests/service/test_watermark.py | 20 +++--- tests/tex_inspection/test_ban.py | 19 +++-- tests/tex_inspection/test_conveter_opts.py | 5 +- tests/tex_inspection/test_typings.py | 10 +-- tests/zerozeroreadme/test_zzrm.py | 4 +- 10 files changed, 101 insertions(+), 69 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d3f8f5e..f341c24 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -50,7 +50,6 @@ pre-commit = "*" [tool.ruff] line-length = 120 extend-exclude = [ - "tests", "pdf_profile", "bin", "service-various", @@ -78,13 +77,16 @@ lint.ignore = [ "D107", # no docstring in __init__ ] - output-format = "grouped" # Assume Python 3.11 # Note: helps prevent breaking autofixes from, e.g., pyupgrade target-version = "py311" +[tool.ruff.lint.per-file-ignores] +# ignore all the "missing docstring" checks in the test directory +"tests/*" = ["D100", "D101", "D102", "D103", "D104"] + [tool.ruff.lint.pydocstyle] convention = "pep257" diff --git a/tests/preflight_parser/test_preflight.py b/tests/preflight_parser/test_preflight.py index 1c888bd..aefc14f 100644 --- a/tests/preflight_parser/test_preflight.py +++ b/tests/preflight_parser/test_preflight.py @@ -156,7 +156,4 @@ def test_preflight_pdf_only_submission(self): pf.detected_toplevel_files[0].process.compiler.json(exclude_none=True, exclude_defaults=True), """{"engine": "unknown", "lang": "pdf", "output": "unknown", "postp": "none"}""", ) - self.assertEqual( - pf.detected_toplevel_files[0].process.compiler.compiler_string, - "pdf_submission" - ) + self.assertEqual(pf.detected_toplevel_files[0].process.compiler.compiler_string, "pdf_submission") diff --git a/tests/service/test_docker.py b/tests/service/test_docker.py index ff29cbb..f51b95c 100644 --- a/tests/service/test_docker.py +++ b/tests/service/test_docker.py @@ -3,30 +3,38 @@ import os import shutil import subprocess -import tempfile import time import urllib.parse import pytest import requests + from bin.compile_submissions import get_outcome_meta_and_files_info from tex2pdf.service.converter_driver import RemoteConverterDriver PORT = 33031 SELF_DIR = os.path.abspath(os.path.dirname(__file__)) -def submit_tarball(service: str, tarball: str, outcome_file: str, tex2pdf_timeout: int = 30, post_timeout: int = 10, json_response: bool = False, api_args: dict= {}) -> None | dict: + +def submit_tarball( + service: str, + tarball: str, + outcome_file: str, + tex2pdf_timeout: int = 30, + post_timeout: int = 10, + json_response: bool = False, + api_args: dict = {}, +) -> None | dict: meta = None - params_dict = { "timeout": tex2pdf_timeout } + params_dict = {"timeout": tex2pdf_timeout} params_dict.update(api_args) params = urllib.parse.urlencode(params_dict) url = f"{service}/?{params}" with open(tarball, "rb") as data_fd: - uploading = {'incoming': (os.path.basename(tarball), data_fd, 'application/gzip')} + uploading = {"incoming": (os.path.basename(tarball), data_fd, "application/gzip")} while True: try: - res = requests.post(url, files=uploading, - timeout=post_timeout, allow_redirects=False) + res = requests.post(url, files=uploading, timeout=post_timeout, allow_redirects=False) status_code = res.status_code if status_code == 504: logging.warning("Got 504 for %s", service) @@ -43,7 +51,7 @@ def submit_tarball(service: str, tarball: str, outcome_file: str, tex2pdf_timeou out.write(res.content) meta, lines, clsfiles, styfiles, pdfchecksum = get_outcome_meta_and_files_info(outcome_file) else: - logging.warning(f"%s: status code %d", url, status_code) + logging.warning("%s: status code %d", url, status_code) except TimeoutError: logging.warning("%s: Connection timed out", tarball) @@ -54,13 +62,14 @@ def submit_tarball(service: str, tarball: str, outcome_file: str, tex2pdf_timeou return meta + @pytest.fixture(scope="module") def docker_container(request): - global PORT - PORT = request.config.getoption('--docker-port') + global PORT # noqa: PLW0603 + PORT = request.config.getoption("--docker-port") url = f"http://localhost:{PORT}" - if not request.config.getoption('--no-docker-setup'): + if not request.config.getoption("--no-docker-setup"): image_name = "public-tex2pdf-app-2024-2024-07-21" container_name = "test-arxiv-tex2pdf" dockerport = "8080" @@ -69,20 +78,31 @@ def docker_container(request): # Make sure the container is the latest args = ["make", "app.docker"] - make = subprocess.run(args, encoding='utf-8', stdout=subprocess.PIPE, stderr=subprocess.PIPE) + make = subprocess.run(args, encoding="utf-8", capture_output=True, check=False) if make.returncode != 0: print(make.stdout) print(make.stderr) pass # Start the container - args = ["docker", "run", '--security-opt', "no-new-privileges=true", "--cpus", "1", "--rm", - "-d", - "-p", f"{PORT}:{dockerport}", - "-e", f"PORT={dockerport}", - "--name", container_name, - image_name] - docker = subprocess.run(args, encoding='utf-8', stdout=subprocess.PIPE, stderr=subprocess.PIPE) + args = [ + "docker", + "run", + "--security-opt", + "no-new-privileges=true", + "--cpus", + "1", + "--rm", + "-d", + "-p", + f"{PORT}:{dockerport}", + "-e", + f"PORT={dockerport}", + "--name", + container_name, + image_name, + ] + docker = subprocess.run(args, encoding="utf-8", capture_output=True, check=False) if docker.returncode != 0: logging.error("tex2pdf container did not start") pass @@ -101,12 +121,13 @@ def docker_container(request): yield url - if not request.config.getoption('--no-docker-setup') and not request.config.getoption('--keep-docker-running'): + if not request.config.getoption("--no-docker-setup") and not request.config.getoption("--keep-docker-running"): # Stop the container after tests with open("tex2pdf.log", "w", encoding="utf-8") as log: subprocess.call(["docker", "logs", container_name], stdout=log, stderr=log) subprocess.call(["docker", "kill", container_name]) + @pytest.mark.integration def test_api_hello(docker_container): url = docker_container @@ -136,9 +157,10 @@ def test_api_test2(docker_container): meta = submit_tarball(url, tarball, outcome, api_args={"auto_detect": "true"}) assert meta is not None assert meta.get("pdf_file") == "test2.pdf" - assert meta.get("tex_files") == ['fake-file-2.tex'] + assert meta.get("tex_files") == ["fake-file-2.tex"] # autotex says that the documents are combined alphabetically - assert meta.get("documents") == ['out/fake-file-2.pdf'] + assert meta.get("documents") == ["out/fake-file-2.pdf"] + @pytest.mark.integration def test_api_test3(docker_container): @@ -148,10 +170,10 @@ def test_api_test3(docker_container): meta = submit_tarball(url, tarball, outcome, api_args={"auto_detect": "true"}) assert meta is not None assert meta.get("pdf_file") == "test3.pdf" - assert meta.get("tex_files") == ['fake-file-2.tex', 'fake-file-1.tex', 'fake-file-3.tex'] - assert meta.get("pdf_files") == ['fake-file-2.pdf', 'fake-file-1.pdf', 'fake-file-3.pdf'] + assert meta.get("tex_files") == ["fake-file-2.tex", "fake-file-1.tex", "fake-file-3.tex"] + assert meta.get("pdf_files") == ["fake-file-2.pdf", "fake-file-1.pdf", "fake-file-3.pdf"] # v2 keeps the order which is what we'd expect - assert meta.get("documents") == ['out/fake-file-2.pdf', 'out/fake-file-1.pdf', 'out/fake-file-3.pdf'] + assert meta.get("documents") == ["out/fake-file-2.pdf", "out/fake-file-1.pdf", "out/fake-file-3.pdf"] @pytest.mark.integration @@ -162,10 +184,11 @@ def test_api_test4(docker_container): meta = submit_tarball(url, tarball, outcome, api_args={"auto_detect": "true"}) assert meta is not None assert meta.get("pdf_file") == "test4.pdf" - assert meta.get("tex_files") == ['main.tex', 'gdp.tex'] + assert meta.get("tex_files") == ["main.tex", "gdp.tex"] assert len(meta.get("converters", [])) == 2 assert len(meta["converters"][0]["runs"]) == 4 # latex, latex, dvi2ps, ps2pdf + @pytest.mark.integration def test_api_preflight(docker_container): url = docker_container + "/convert" @@ -176,7 +199,11 @@ def test_api_preflight(docker_container): print(meta) assert meta.get("status").get("key") == "success" assert len(meta.get("detected_toplevel_files")) == 3 - assert [f["filename"] for f in meta.get("detected_toplevel_files")] == ['fake-file-1.tex', 'fake-file-2.tex', 'fake-file-3.tex'] + assert [f["filename"] for f in meta.get("detected_toplevel_files")] == [ + "fake-file-1.tex", + "fake-file-2.tex", + "fake-file-3.tex", + ] @pytest.mark.integration @@ -190,9 +217,7 @@ def test_remote2023(docker_container) -> None: shutil.rmtree(out_dir, ignore_errors=True) - converter = RemoteConverterDriver(url, 600, out_dir, tarball, - use_addon_tree=False, tag=tag, - auto_detect=True) + converter = RemoteConverterDriver(url, 600, out_dir, tarball, use_addon_tree=False, tag=tag, auto_detect=True) logging.debug("Calling generate_pdf") pdf = converter.generate_pdf() assert os.path.isfile(f"{out_dir}/outcome-test1.json") diff --git a/tests/service/test_patch.py b/tests/service/test_patch.py index bd72568..d8c965d 100644 --- a/tests/service/test_patch.py +++ b/tests/service/test_patch.py @@ -1,5 +1,6 @@ import os import unittest + from tex2pdf.service.tex_patching import fix_tex_sources TEST_DIR = os.path.join(os.path.abspath(os.path.dirname(__file__)), "output/test-patch") @@ -22,10 +23,12 @@ \graphicspath{{foo}{foo/}{bar/}{baz}{baz/}} """ + def read_file(filename) -> str: - with open(filename, "r", encoding="utf-8") as fd: + with open(filename, encoding="utf-8") as fd: return fd.read() + class TestTexPatch(unittest.TestCase): def setUp(self): os.makedirs(TEST_DIR, exist_ok=True) @@ -39,6 +42,5 @@ def test_fixer(self): self.assertEqual(first_expected, result) - -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/tests/service/test_typings.py b/tests/service/test_typings.py index e2f6faa..fdb3fd8 100644 --- a/tests/service/test_typings.py +++ b/tests/service/test_typings.py @@ -1,4 +1,5 @@ """Tests using mypy.""" + import os import shutil import subprocess @@ -13,12 +14,11 @@ def test_run_mypy_module(self) -> None: """Run mypy on all module sources.""" mypy = shutil.which("mypy") if mypy is None: - raise EnvironmentError("mypy not found in PATH") + raise OSError("mypy not found in PATH") root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) - result: int = subprocess.call([mypy, "tex2pdf/service"], - env=os.environ, cwd=root_dir) - self.assertEqual(result, 0, 'Expect 0 type errors when running mypy') + result: int = subprocess.call([mypy, "tex2pdf/service"], env=os.environ, cwd=root_dir) + self.assertEqual(result, 0, "Expect 0 type errors when running mypy") -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/tests/service/test_watermark.py b/tests/service/test_watermark.py index 6ec1aa0..045c63a 100644 --- a/tests/service/test_watermark.py +++ b/tests/service/test_watermark.py @@ -1,25 +1,25 @@ import os import unittest -from tex2pdf.service.pdf_watermark import add_watermark_text_to_pdf, Watermark +from tex2pdf.service.pdf_watermark import Watermark, add_watermark_text_to_pdf SELF_DIR = os.path.abspath(os.path.dirname(__file__)) watermark_pdf = os.path.join(SELF_DIR, "output/watermark.pdf") in_pdf = os.path.join(SELF_DIR, "fixture/smoke/Test.pdf") -class MyTestCase(unittest.TestCase): +class MyTestCase(unittest.TestCase): def setUp(self) -> None: os.makedirs(os.path.dirname(watermark_pdf), exist_ok=True) def test_watermarking(self): - add_watermark_text_to_pdf(Watermark( - "Water World is in Orlando, FL.", - "https://en.wikipedia.org/wiki/Waterworld" - ), - in_pdf, os.path.join(SELF_DIR, "output/Test.pdf") - ) - -if __name__ == '__main__': + add_watermark_text_to_pdf( + Watermark("Water World is in Orlando, FL.", "https://en.wikipedia.org/wiki/Waterworld"), + in_pdf, + os.path.join(SELF_DIR, "output/Test.pdf"), + ) + + +if __name__ == "__main__": unittest.main() diff --git a/tests/tex_inspection/test_ban.py b/tests/tex_inspection/test_ban.py index 5191f13..12f42bb 100644 --- a/tests/tex_inspection/test_ban.py +++ b/tests/tex_inspection/test_ban.py @@ -1,9 +1,9 @@ import unittest -from tex2pdf.tex_inspection import maybe_banned_tex_file, is_banned_tex +from tex2pdf.tex_inspection import is_banned_tex, maybe_banned_tex_file -class BanTest(unittest.TestCase): +class BanTest(unittest.TestCase): def test_ban_1(self): self.assertTrue(maybe_banned_tex_file("sample-foo.tex")) self.assertFalse(maybe_banned_tex_file("main.tex")) @@ -16,9 +16,14 @@ def test_ban_2(self): pass def test_ban_3(self): - self.assertTrue(is_banned_tex("docsimart.tex", - "\\title{Guide to Using SIAM's \\LaTeX\\ Style\\thanks{Submitted to the editors DATE.")) - self.assertFalse(is_banned_tex("docsimart.text", - "\\title{Guide to Using SIAM's \\LaTeX\\ Style\\thanks{Submitted to the editors DATE.")) + self.assertTrue( + is_banned_tex( + "docsimart.tex", "\\title{Guide to Using SIAM's \\LaTeX\\ Style\\thanks{Submitted to the editors DATE." + ) + ) + self.assertFalse( + is_banned_tex( + "docsimart.text", "\\title{Guide to Using SIAM's \\LaTeX\\ Style\\thanks{Submitted to the editors DATE." + ) + ) pass - diff --git a/tests/tex_inspection/test_conveter_opts.py b/tests/tex_inspection/test_conveter_opts.py index d9a0540..e9c98a5 100644 --- a/tests/tex_inspection/test_conveter_opts.py +++ b/tests/tex_inspection/test_conveter_opts.py @@ -1,9 +1,10 @@ import os import unittest + from tex2pdf.tex_inspection import find_pdfoutput_1 -class TestConverterSelection(unittest.TestCase): +class TestConverterSelection(unittest.TestCase): def setUp(self): self.fixture_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "fixture")) @@ -20,5 +21,5 @@ def test_no(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/tests/tex_inspection/test_typings.py b/tests/tex_inspection/test_typings.py index 808ae3d..177c37a 100644 --- a/tests/tex_inspection/test_typings.py +++ b/tests/tex_inspection/test_typings.py @@ -1,4 +1,5 @@ """Tests using mypy.""" + import os import shutil import subprocess @@ -13,12 +14,11 @@ def test_run_mypy_module(self) -> None: """Run mypy on all module sources.""" mypy = shutil.which("mypy") if mypy is None: - raise EnvironmentError("mypy not found in PATH") + raise OSError("mypy not found in PATH") root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) - result: int = subprocess.call([mypy, "tex2pdf/tex_inspection"], - env=os.environ, cwd=root_dir) - self.assertEqual(result, 0, 'Expect 0 type errors when running mypy') + result: int = subprocess.call([mypy, "tex2pdf/tex_inspection"], env=os.environ, cwd=root_dir) + self.assertEqual(result, 0, "Expect 0 type errors when running mypy") -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/tests/zerozeroreadme/test_zzrm.py b/tests/zerozeroreadme/test_zzrm.py index 67b06b3..9c31db3 100644 --- a/tests/zerozeroreadme/test_zzrm.py +++ b/tests/zerozeroreadme/test_zzrm.py @@ -3,8 +3,8 @@ import unittest import pytest -from tex2pdf.preflight_parser import ParseSyntaxError +from tex2pdf.preflight_parser import ParseSyntaxError from tex2pdf.zerozeroreadme import ZeroZeroReadMe @@ -39,7 +39,7 @@ def test_zzrm_v2_01(self) -> None: def test_zzrm_v2_syntax_error(self) -> None: dir_path = os.path.join(self.fixture_dir, "zzrm_v2_syntax_error") with pytest.raises(ParseSyntaxError) as exc_info: - zzrm = ZeroZeroReadMe(dir_path) + _ = ZeroZeroReadMe(dir_path) assert str(exc_info.value).startswith("Validation error on parsing: ") def test_zzrm_v2_02(self) -> None: From e0f4157b2648f801a032bd9911c892cc87715358 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 3 Dec 2024 15:17:06 +0900 Subject: [PATCH 27/27] GH workflow: run all tests --- .github/workflows/test_modules.yaml | 55 ----------------------------- .github/workflows/tex2pdf.yaml | 9 ++--- 2 files changed, 5 insertions(+), 59 deletions(-) delete mode 100644 .github/workflows/test_modules.yaml diff --git a/.github/workflows/test_modules.yaml b/.github/workflows/test_modules.yaml deleted file mode 100644 index 386bd1f..0000000 --- a/.github/workflows/test_modules.yaml +++ /dev/null @@ -1,55 +0,0 @@ -# This workflow will install Python dependencies, run tests and lint with a single version of Python -# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python - -name: tex_inspection library - -on: - push: - branches: [ "master" ] - pull_request: - branches: [ "master" ] - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - name: Set up Python 3.11 - uses: actions/setup-python@v4 - with: - python-version: "3.11" - - name: Setup TeX Live - uses: teatimeguest/setup-texlive-action@v3 - with: - packages: scheme-basic - - name: Install dependencies for tex_inspection - run: | - cd tex_inspection - python -m pip install --upgrade pip - pip install pytest poetry - poetry install - - name: pytest for tex_inspection - run: | - cd tex_inspection - export PYTHONPATH=$PWD - poetry run pytest tests - - name: Install dependencies for preflight_parser - run: | - cd preflight_parser - poetry install - - name: pytest for preflight_parser - run: | - cd preflight_parser - export PYTHONPATH=$PWD - poetry run pytest tests - - name: Install dependencies for zerozeroreadme - run: | - cd zerozeroreadme - poetry install - - name: pytest for zerozeroreadme - run: | - cd zerozeroreadme - export PYTHONPATH=$PWD - poetry run pytest tests - diff --git a/.github/workflows/tex2pdf.yaml b/.github/workflows/tex2pdf.yaml index ce4fb43..7117d8f 100644 --- a/.github/workflows/tex2pdf.yaml +++ b/.github/workflows/tex2pdf.yaml @@ -19,15 +19,16 @@ jobs: uses: actions/setup-python@v4 with: python-version: "3.11" + - name: Setup TeX Live + uses: teatimeguest/setup-texlive-action@v3 + with: + packages: scheme-basic - name: Install dependencies for tex2pdf run: | - cd tex2pdf_service python -m pip install --upgrade pip pip install pytest poetry - poetry install - poetry run pip install types-requests + poetry install --extras service - name: pytest for tex2pdf run: | - cd tex2pdf_service export PYTHONPATH=$PWD poetry run pytest -k "not integration" tests