From 5cf640af8a61aed0b6da359985b4862920c6eaea Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Mon, 28 Apr 2025 11:08:00 +0100 Subject: [PATCH 001/107] experiments with seleniumbase --- .gitignore | 5 + plugin.zip | Bin 0 -> 615103 bytes poetry.lock | 493 +++++++++++++++++- pyproject.toml | 1 + .../modules/selenium_extractor/__init__.py | 0 .../selenium_extractor/__manifest__.py | 0 .../selenium_extractor/selenium_extractor.py | 15 + 7 files changed, 501 insertions(+), 13 deletions(-) create mode 100644 plugin.zip create mode 100644 src/auto_archiver/modules/selenium_extractor/__init__.py create mode 100644 src/auto_archiver/modules/selenium_extractor/__manifest__.py create mode 100644 src/auto_archiver/modules/selenium_extractor/selenium_extractor.py diff --git a/.gitignore b/.gitignore index 704947b..c33ed62 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,8 @@ docs/source/modules/autogen/ scripts/settings_page.html scripts/settings/src/schema.json .vite +extensions +recordings +saved_cookies +downloaded_files +face.py \ No newline at end of file diff --git a/plugin.zip b/plugin.zip new file mode 100644 index 0000000000000000000000000000000000000000..ecc06ab251b8ac1292f9f1c622bad1a1bcf3ef7c GIT binary patch literal 615103 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�-OeKnko&9_pi{V_xPexVm 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/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�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

O}PAR?9`iXUcyp;T?uGnDjh6`rbqifD+A_ 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 v|D46$)$8ur&VO)Tz}xP=0.21.0)", "modernize (>=0.5)", "path.py (>=8.1.2)", "pathlib", "pycmd", "pylint", "pytest (>=3.0)", "pytest-cov", "tox"] +docs = ["sphinx (>=1.6)", "sphinx-bootstrap-theme (>=0.6)"] + [[package]] name = "bgutil-ytdlp-pot-provider" version = "0.7.4" @@ -481,6 +502,18 @@ files = [ {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" +groups = ["main"] +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.1" @@ -609,7 +642,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"}, ] -markers = {main = "sys_platform == \"win32\" or platform_system == \"Windows\"", dev = "sys_platform == \"win32\""} +markers = {dev = "sys_platform == \"win32\""} [[package]] name = "cryptography" @@ -669,6 +702,18 @@ ssh = ["bcrypt (>=3.1.5)"] test = ["certifi (>=2024)", "cryptography-vectors (==44.0.2)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] test-randomorder = ["pytest-randomly"] +[[package]] +name = "cssselect" +version = "1.3.0" +description = "cssselect parses CSS3 Selectors and translates them to XPath 1.0" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "cssselect-1.3.0-py3-none-any.whl", hash = "sha256:56d1bf3e198080cc1667e137bc51de9cadfca259f03c2d4e09037b3e01e30f0d"}, + {file = "cssselect-1.3.0.tar.gz", hash = "sha256:57f8a99424cfab289a1b6a816a43075a4b00948c86b4dcf3ef4ee7e15f7ab0c7"}, +] + [[package]] name = "dataclasses-json" version = "0.6.7" @@ -739,15 +784,42 @@ description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["main", "dev", "docs"] -markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, ] +markers = {dev = "python_version < \"3.11\"", docs = "python_version < \"3.11\""} [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "execnet" +version = "2.1.1" +description = "execnet: rapid multi-Python deployment" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, + {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, +] + +[package.extras] +testing = ["hatch", "pre-commit", "pytest", "tox"] + +[[package]] +name = "fasteners" +version = "0.19" +description = "A python package that provides useful locks" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "fasteners-0.19-py3-none-any.whl", hash = "sha256:758819cb5d94cdedf4e836988b74de396ceacb8e2794d21f82d131fd9ee77237"}, + {file = "fasteners-0.19.tar.gz", hash = "sha256:b4f37c3ac52d8a445af3a66bce57b33b5e90b97c696b7b984f530cf8f0ded09c"}, +] + [[package]] name = "ffmpeg-python" version = "0.2.0" @@ -772,7 +844,7 @@ version = "3.18.0" description = "A platform independent file lock." optional = false python-versions = ">=3.9" -groups = ["dev"] +groups = ["main", "dev"] files = [ {file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, @@ -1008,7 +1080,7 @@ version = "2.1.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["main", "dev"] files = [ {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, @@ -1277,6 +1349,18 @@ files = [ {file = "mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99"}, ] +[[package]] +name = "mycdp" +version = "1.1.1" +description = "Autogenerated CDP utilities for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "mycdp-1.1.1-py3-none-any.whl", hash = "sha256:5df4d7e1849de267893ed833eac7e1a6e9dc994285becb73a68352f045ad2301"}, + {file = "mycdp-1.1.1.tar.gz", hash = "sha256:b17bd02fafcd93d82b1b34ae8701fa773ab0e773c55fd330cb9eea62185cfaf0"}, +] + [[package]] name = "mypy-extensions" version = "1.0.0" @@ -1472,6 +1556,71 @@ files = [ {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] +[[package]] +name = "parameterized" +version = "0.9.0" +description = "Parameterized testing with any Python test framework" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "parameterized-0.9.0-py2.py3-none-any.whl", hash = "sha256:4e0758e3d41bea3bbd05ec14fc2c24736723f243b28d702081aef438c9372b1b"}, + {file = "parameterized-0.9.0.tar.gz", hash = "sha256:7fc905272cefa4f364c1a3429cbbe9c0f98b793988efb5bf90aac80f08db09b1"}, +] + +[package.extras] +dev = ["jinja2"] + +[[package]] +name = "parse" +version = "1.20.2" +description = "parse() is the opposite of format()" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "parse-1.20.2-py2.py3-none-any.whl", hash = "sha256:967095588cb802add9177d0c0b6133b5ba33b1ea9007ca800e526f42a85af558"}, + {file = "parse-1.20.2.tar.gz", hash = "sha256:b41d604d16503c79d81af5165155c0b20f6c8d6c559efa66b4b695c3e5a0a0ce"}, +] + +[[package]] +name = "parse-type" +version = "0.6.4" +description = "Simplifies to build parse types based on the parse module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,>=2.7" +groups = ["main"] +files = [ + {file = "parse_type-0.6.4-py2.py3-none-any.whl", hash = "sha256:83d41144a82d6b8541127bf212dd76c7f01baff680b498ce8a4d052a7a5bce4c"}, + {file = "parse_type-0.6.4.tar.gz", hash = "sha256:5e1ec10440b000c3f818006033372939e693a9ec0176f446d9303e4db88489a6"}, +] + +[package.dependencies] +parse = {version = ">=1.18.0", markers = "python_version >= \"3.0\""} +six = ">=1.15" + +[package.extras] +develop = ["build (>=0.5.1)", "coverage (>=4.4)", "pylint", "pytest (<5.0) ; python_version < \"3.0\"", "pytest (>=5.0) ; python_version >= \"3.0\"", "pytest-cov", "pytest-html (>=1.19.0)", "ruff ; python_version >= \"3.7\"", "setuptools", "setuptools-scm", "tox (>=2.8,<4.0)", "twine (>=1.13.0)", "virtualenv (<20.22.0) ; python_version <= \"3.6\"", "virtualenv (>=20.0.0) ; python_version > \"3.6\"", "wheel"] +docs = ["Sphinx (>=1.6)", "sphinx-bootstrap-theme (>=0.6.0)"] +testing = ["pytest (<5.0) ; python_version < \"3.0\"", "pytest (>=5.0) ; python_version >= \"3.0\"", "pytest-html (>=1.19.0)"] + +[[package]] +name = "pdbp" +version = "1.7.0" +description = "pdbp (Pdb+): A drop-in replacement for pdb and pdbpp." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pdbp-1.7.0-py3-none-any.whl", hash = "sha256:6ad99cb4e9f2fc1a5b4ef4f2e0acdb28b18b271bf71f6c9f997b652d935caa19"}, + {file = "pdbp-1.7.0.tar.gz", hash = "sha256:d0a5b275720c451f5574427e35523aeb61c244f3faf622a80fe03019ef82d380"}, +] + +[package.dependencies] +colorama = {version = ">=0.4.6", markers = "platform_system == \"Windows\""} +pygments = ">=2.19.1" +tabcompleter = ">=1.4.0" + [[package]] name = "pdqhash" version = "0.2.7" @@ -1582,13 +1731,25 @@ tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "ole typing = ["typing-extensions ; python_version < \"3.10\""] xmp = ["defusedxml"] +[[package]] +name = "pip" +version = "25.0.1" +description = "The PyPA recommended tool for installing Python packages." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pip-25.0.1-py3-none-any.whl", hash = "sha256:c46efd13b6aa8279f33f2864459c8ce587ea6a1a59ee20de055868d8f7688f7f"}, + {file = "pip-25.0.1.tar.gz", hash = "sha256:88f96547ea48b940a3a385494e181e29fb8637898f88d88737c5049780f196ea"}, +] + [[package]] name = "platformdirs" version = "4.3.7" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.9" -groups = ["dev"] +groups = ["main", "dev"] files = [ {file = "platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94"}, {file = "platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351"}, @@ -1605,7 +1766,7 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["main", "dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -1817,6 +1978,33 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pynose" +version = "1.5.4" +description = "pynose fixes nose to extend unittest and make testing easier" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "pynose-1.5.4-py3-none-any.whl", hash = "sha256:ee4ae91c9e2b54d46647f5d81b95392dd27e02ed26f016dadb5f1ac10f949d96"}, + {file = "pynose-1.5.4.tar.gz", hash = "sha256:97dd0b7e85cf990120a01147e83ccd960c09ffcd69f6822f18e14128c6655e67"}, +] + +[[package]] +name = "pyotp" +version = "2.9.0" +description = "Python One Time Password Library" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "pyotp-2.9.0-py3-none-any.whl", hash = "sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612"}, + {file = "pyotp-2.9.0.tar.gz", hash = "sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63"}, +] + +[package.extras] +test = ["coverage", "mypy", "ruff", "wheel"] + [[package]] name = "pyparsing" version = "3.2.2" @@ -1832,6 +2020,22 @@ files = [ [package.extras] diagrams = ["jinja2", "railroad-diagrams"] +[[package]] +name = "pyreadline3" +version = "3.5.4" +description = "A python implementation of GNU readline." +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "platform_system == \"Windows\"" +files = [ + {file = "pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6"}, + {file = "pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7"}, +] + +[package.extras] +dev = ["build", "flake8", "mypy", "pytest", "twine"] + [[package]] name = "pysocks" version = "1.7.1" @@ -1863,7 +2067,7 @@ version = "8.3.5" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["main", "dev"] files = [ {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, @@ -1880,6 +2084,27 @@ tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +[[package]] +name = "pytest-html" +version = "4.0.2" +description = "pytest plugin for generating HTML reports" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pytest_html-4.0.2-py3-none-any.whl", hash = "sha256:907c3e68462df129d3ee96dee58bd63f70216b06421836b22fd3fd57ef314acb"}, + {file = "pytest_html-4.0.2.tar.gz", hash = "sha256:88682b9e8e51392472546a70a2139b27d6bc1834a4afd3e41da33c9d9f91e4a4"}, +] + +[package.dependencies] +jinja2 = ">=3.0.0" +pytest = ">=7.0.0" +pytest-metadata = ">=2.0.0" + +[package.extras] +docs = ["pip-tools (>=6.13.0)"] +test = ["assertpy (>=1.1)", "beautifulsoup4 (>=4.11.1)", "black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "pytest-mock (>=3.7.0)", "pytest-rerunfailures (>=11.1.2)", "pytest-xdist (>=2.4.0)", "selenium (>=4.3.0)", "tox (>=3.24.5)"] + [[package]] name = "pytest-loguru" version = "0.4.0" @@ -1898,6 +2123,24 @@ loguru = "*" [package.extras] test = ["pytest", "pytest-cov"] +[[package]] +name = "pytest-metadata" +version = "3.1.1" +description = "pytest plugin for test session metadata" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pytest_metadata-3.1.1-py3-none-any.whl", hash = "sha256:c8e0844db684ee1c798cfa38908d20d67d0463ecb6137c72e91f418558dd5f4b"}, + {file = "pytest_metadata-3.1.1.tar.gz", hash = "sha256:d2a29b0355fbc03f168aa96d41ff88b1a3b44a3b02acbe491801c98a048017c8"}, +] + +[package.dependencies] +pytest = ">=7.0.0" + +[package.extras] +test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (>=3.24.5)"] + [[package]] name = "pytest-mock" version = "3.14.0" @@ -1916,6 +2159,59 @@ pytest = ">=6.2.5" [package.extras] dev = ["pre-commit", "pytest-asyncio", "tox"] +[[package]] +name = "pytest-ordering" +version = "0.6" +description = "pytest plugin to run your tests in a specific order" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "pytest-ordering-0.6.tar.gz", hash = "sha256:561ad653626bb171da78e682f6d39ac33bb13b3e272d406cd555adb6b006bda6"}, + {file = "pytest_ordering-0.6-py2-none-any.whl", hash = "sha256:27fba3fc265f5d0f8597e7557885662c1bdc1969497cd58aff6ed21c3b617de2"}, + {file = "pytest_ordering-0.6-py3-none-any.whl", hash = "sha256:3f314a178dbeb6777509548727dc69edf22d6d9a2867bf2d310ab85c403380b6"}, +] + +[package.dependencies] +pytest = "*" + +[[package]] +name = "pytest-rerunfailures" +version = "15.0" +description = "pytest plugin to re-run tests to eliminate flaky failures" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pytest-rerunfailures-15.0.tar.gz", hash = "sha256:2d9ac7baf59f4c13ac730b47f6fa80e755d1ba0581da45ce30b72fb3542b4474"}, + {file = "pytest_rerunfailures-15.0-py3-none-any.whl", hash = "sha256:dd150c4795c229ef44320adc9a0c0532c51b78bb7a6843a8c53556b9a611df1a"}, +] + +[package.dependencies] +packaging = ">=17.1" +pytest = ">=7.4,<8.2.2 || >8.2.2" + +[[package]] +name = "pytest-xdist" +version = "3.6.1" +description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, + {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, +] + +[package.dependencies] +execnet = ">=2.1" +pytest = ">=7.0.0" + +[package.extras] +psutil = ["psutil (>=3.0)"] +setproctitle = ["setproctitle"] +testing = ["filelock"] + [[package]] name = "python-bitcoinlib" version = "0.12.2" @@ -1978,6 +2274,22 @@ Authlib = ">=1.0.0" dataclasses-json = ">=0.5.7" requests = ">=2.28" +[[package]] +name = "python-xlib" +version = "0.33" +description = "Python X Library" +optional = false +python-versions = "*" +groups = ["main"] +markers = "platform_system == \"Linux\"" +files = [ + {file = "python-xlib-0.33.tar.gz", hash = "sha256:55af7906a2c75ce6cb280a584776080602444f75815a7aff4d287bb2d7018b32"}, + {file = "python_xlib-0.33-py2.py3-none-any.whl", hash = "sha256:c3534038d42e0df2f1392a1b30a15a4ff5fdc2b86cfa94f072bf11b10a164398"}, +] + +[package.dependencies] +six = ">=1.10.0" + [[package]] name = "pytz" version = "2025.1" @@ -1996,7 +2308,7 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" -groups = ["dev", "docs"] +groups = ["main", "dev", "docs"] 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"}, @@ -2417,6 +2729,22 @@ botocore = ">=1.37.4,<2.0a.0" [package.extras] crt = ["botocore[crt] (>=1.37.4,<2.0a.0)"] +[[package]] +name = "sbvirtualdisplay" +version = "1.4.0" +description = "A customized pyvirtualdisplay for SeleniumBase." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "sbvirtualdisplay-1.4.0-py3-none-any.whl", hash = "sha256:516de155219aa342c4e090a3c5126cfe6b12416334bcba3255268e44a5e8a206"}, + {file = "sbvirtualdisplay-1.4.0.tar.gz", hash = "sha256:29a365b509cd7bfde4f758603b7b75703909b11cdf4245abc8f828ed35660d9b"}, +] + +[package.extras] +coverage = ["coverage (>=7.6.1) ; python_version < \"3.9\"", "coverage (>=7.6.9) ; python_version >= \"3.9\"", "pytest-cov (>=5.0.0) ; python_version < \"3.9\"", "pytest-cov (>=6.0.0) ; python_version >= \"3.9\""] +flake8 = ["flake8 (==5.0.4) ; python_version < \"3.9\"", "flake8 (==7.1.1) ; python_version >= \"3.9\"", "mccabe (==0.7.0)", "pycodestyle (==2.12.1) ; python_version >= \"3.9\"", "pycodestyle (==2.9.1) ; python_version < \"3.9\"", "pyflakes (==2.5.0) ; python_version < \"3.9\"", "pyflakes (==3.2.0) ; python_version >= \"3.9\""] + [[package]] name = "selenium" version = "4.30.0" @@ -2437,6 +2765,115 @@ typing_extensions = ">=4.9,<5.0" urllib3 = {version = ">=1.26,<3", extras = ["socks"]} websocket-client = ">=1.8,<2.0" +[[package]] +name = "seleniumbase" +version = "4.36.4" +description = "A complete web automation framework for end-to-end testing." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "seleniumbase-4.36.4-py3-none-any.whl", hash = "sha256:2355f4ff0a023e8701acb75d2739aba31c26bdaf379fbb252d4f90072b31f6f9"}, + {file = "seleniumbase-4.36.4.tar.gz", hash = "sha256:4c481bcdd5d42f6c88bba7756589649b055592ebedb4b97db627c5eea00612ca"}, +] + +[package.dependencies] +attrs = ">=25.3.0" +beautifulsoup4 = "4.13.3" +behave = "1.2.6" +certifi = ">=2025.1.31" +chardet = "5.2.0" +charset-normalizer = "3.4.1" +colorama = ">=0.4.6" +cssselect = {version = "1.3.0", markers = "python_version >= \"3.9\""} +exceptiongroup = ">=1.2.2" +execnet = "2.1.1" +fasteners = ">=0.19" +filelock = {version = ">=3.18.0", markers = "python_version >= \"3.9\""} +h11 = "0.14.0" +idna = "3.10" +iniconfig = "2.1.0" +Jinja2 = ">=3.1.6" +markdown-it-py = "3.0.0" +MarkupSafe = {version = ">=3.0.2", markers = "python_version >= \"3.9\""} +mdurl = "0.1.2" +mycdp = ">=1.1.1" +outcome = "1.3.0.post0" +packaging = ">=24.2" +parameterized = "0.9.0" +parse = ">=1.20.2" +parse-type = ">=0.6.4" +pdbp = ">=1.7.0" +pip = ">=25.0.1" +platformdirs = {version = ">=4.3.7", markers = "python_version >= \"3.9\""} +pluggy = "1.5.0" +pygments = ">=2.19.1" +pynose = ">=1.5.4" +pyotp = "2.9.0" +pyreadline3 = {version = ">=3.5.3", markers = "platform_system == \"Windows\""} +pytest = "8.3.5" +pytest-html = "4.0.2" +pytest-metadata = "3.1.1" +pytest-ordering = "0.6" +pytest-rerunfailures = {version = "15.0", markers = "python_version >= \"3.9\""} +pytest-xdist = "3.6.1" +python-xlib = {version = "0.33", markers = "platform_system == \"Linux\""} +pyyaml = ">=6.0.2" +requests = "2.32.3" +rich = "13.9.4" +sbvirtualdisplay = ">=1.4.0" +selenium = {version = "4.30.0", markers = "python_version >= \"3.9\""} +setuptools = {version = ">=78.1.0", markers = "python_version >= \"3.10\""} +six = ">=1.17.0" +sniffio = "1.3.1" +sortedcontainers = "2.4.0" +soupsieve = "2.6" +tabcompleter = ">=1.4.0" +trio = {version = "0.29.0", markers = "python_version >= \"3.9\""} +trio-websocket = "0.12.2" +typing-extensions = ">=4.13.0" +urllib3 = {version = ">=1.26.20,<2.4.0", markers = "python_version >= \"3.10\""} +websocket-client = "1.8.0" +websockets = {version = ">=15.0.1", markers = "python_version >= \"3.9\""} +wheel = ">=0.45.1" +wsproto = "1.2.0" + +[package.extras] +allure = ["allure-behave (>=2.13.5)", "allure-pytest (>=2.13.5)", "allure-python-commons (>=2.13.5)"] +coverage = ["coverage (>=7.6.1) ; python_version < \"3.9\"", "coverage (>=7.7.1) ; python_version >= \"3.9\"", "pytest-cov (>=5.0.0) ; python_version < \"3.9\"", "pytest-cov (>=6.0.0) ; python_version >= \"3.9\""] +flake8 = ["flake8 (==5.0.4) ; python_version < \"3.9\"", "flake8 (==7.1.2) ; python_version >= \"3.9\"", "mccabe (==0.7.0)", "pycodestyle (==2.12.1) ; python_version >= \"3.9\"", "pycodestyle (==2.9.1) ; python_version < \"3.9\"", "pyflakes (==2.5.0) ; python_version < \"3.9\"", "pyflakes (==3.2.0) ; python_version >= \"3.9\""] +ipdb = ["ipdb (==0.13.13)", "ipython (==7.34.0)"] +mss = ["mss (==10.0.0) ; python_version >= \"3.9\"", "mss (==9.0.2) ; python_version < \"3.9\""] +pdfminer = ["cffi (==1.17.1)", "cryptography (==39.0.2) ; python_version < \"3.9\"", "cryptography (==44.0.2) ; python_version >= \"3.9\"", "pdfminer.six (==20250324) ; python_version < \"3.9\"", "pdfminer.six (==20250327) ; python_version >= \"3.9\"", "pycparser (==2.22)"] +pillow = ["Pillow (>=10.4.0) ; python_version < \"3.9\"", "Pillow (>=11.1.0) ; python_version >= \"3.9\""] +pip-system-certs = ["pip-system-certs (==4.0) ; platform_system == \"Windows\""] +proxy = ["proxy.py (==2.4.3)"] +psutil = ["psutil (==7.0.0)"] +pyautogui = ["PyAutoGUI (==0.9.54)"] +selenium-stealth = ["selenium-stealth (==1.0.6)"] +selenium-wire = ["Brotli (==1.1.0)", "blinker (==1.7.0)", "h2 (==4.1.0)", "hpack (==4.0.0)", "hyperframe (==6.0.1)", "kaitaistruct (==0.10)", "pyOpenSSL (==24.2.1)", "pyasn1 (==0.6.1)", "pyparsing (>=3.1.4)", "selenium-wire (==5.1.0)", "zstandard (==0.23.0)"] + +[[package]] +name = "setuptools" +version = "78.1.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "setuptools-78.1.0-py3-none-any.whl", hash = "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8"}, + {file = "setuptools-78.1.0.tar.gz", hash = "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] + [[package]] name = "six" version = "1.17.0" @@ -2754,6 +3191,21 @@ anyio = ">=3.6.2,<5" [package.extras] full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"] +[[package]] +name = "tabcompleter" +version = "1.4.0" +description = "tabcompleter --- Autocompletion in the Python console." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "tabcompleter-1.4.0-py3-none-any.whl", hash = "sha256:d744aa735b49c0a6cc2fb8fcd40077fec47425e4388301010b14e6ce3311368b"}, + {file = "tabcompleter-1.4.0.tar.gz", hash = "sha256:7562a9938e62f8e7c3be612c3ac4e14c5ec4307b58ba9031c148260e866e8814"}, +] + +[package.dependencies] +pyreadline3 = {version = "*", markers = "platform_system == \"Windows\""} + [[package]] name = "telethon" version = "1.39.0" @@ -2791,7 +3243,7 @@ version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" -groups = ["dev", "docs"] +groups = ["main", "dev", "docs"] markers = "python_version < \"3.11\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, @@ -2891,14 +3343,14 @@ wsproto = ">=0.14" [[package]] name = "typing-extensions" -version = "4.12.2" +version = "4.13.1" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" groups = ["main", "docs"] 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"}, + {file = "typing_extensions-4.13.1-py3-none-any.whl", hash = "sha256:4b6cf02909eb5495cfbc3f6e8fd49217e6cc7944e145cdda8caa3734777f9e69"}, + {file = "typing_extensions-4.13.1.tar.gz", hash = "sha256:98795af00fb9640edec5b8e31fc647597b4691f099ad75f469a2616be1a76dff"}, ] [[package]] @@ -3283,6 +3735,21 @@ files = [ {file = "websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee"}, ] +[[package]] +name = "wheel" +version = "0.45.1" +description = "A built-package format for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248"}, + {file = "wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729"}, +] + +[package.extras] +test = ["pytest (>=6.0.0)", "setuptools (>=65)"] + [[package]] name = "win32-setctime" version = "1.2.0" @@ -3351,4 +3818,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "c612e9f98ca5199092141bb04a0de4cd5314a8fdc8cb12c1d63eafe26bbf16aa" +content-hash = "f6ba12e052e46bbc4d18f936e0663b97cecde474879a9ee336d7aa92675afe15" diff --git a/pyproject.toml b/pyproject.toml index 86f385a..3533c1c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -57,6 +57,7 @@ dependencies = [ "cryptography (>44.0.1,<45.0.0)", "opentimestamps (>=0.4.5,<0.5.0)", "bgutil-ytdlp-pot-provider (>=0.7.3,<0.8.0)", + "seleniumbase (>=4.36.4,<5.0.0)", ] [tool.poetry.group.dev.dependencies] diff --git a/src/auto_archiver/modules/selenium_extractor/__init__.py b/src/auto_archiver/modules/selenium_extractor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/auto_archiver/modules/selenium_extractor/__manifest__.py b/src/auto_archiver/modules/selenium_extractor/__manifest__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/auto_archiver/modules/selenium_extractor/selenium_extractor.py b/src/auto_archiver/modules/selenium_extractor/selenium_extractor.py new file mode 100644 index 0000000..1a02d9c --- /dev/null +++ b/src/auto_archiver/modules/selenium_extractor/selenium_extractor.py @@ -0,0 +1,15 @@ + +from auto_archiver.core import Extractor +from auto_archiver.core import Metadata +from auto_archiver.core import Media + + +class SeleniumExtractor(Extractor): + def download(self, item: Metadata) -> Metadata | False: + """ + Downloads the media from the given URL and returns a Metadata object with the downloaded media. + + If the URL is not supported or the download fails, this method should return False. + + """ + pass From ee3e871dd873ed0494db036ffbcc78b6fc857fb2 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 28 May 2025 11:53:29 +0100 Subject: [PATCH 002/107] wacz: allow exceptional cases where more than one resource image is available --- .../wacz_extractor_enricher.py | 15 ++++++++------- tests/enrichers/test_wacz_enricher.py | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py b/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py index 447d78f..7722865 100644 --- a/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py +++ b/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py @@ -194,7 +194,8 @@ class WaczExtractorEnricher(Enricher, Extractor): shutil.copyfileobj(infile, outfile) # get media out of .warc - counter = 0 + counter_warc_files = 0 + counter_screenshots = 0 seen_urls = set() with open(warc_filename, "rb") as warc_stream: @@ -203,12 +204,12 @@ class WaczExtractorEnricher(Enricher, Extractor): if ( record.rec_type == "resource" and record.content_type == "image/png" and self.extract_screenshot ): # screenshots - fn = os.path.join(tmp_dir, f"warc-file-{counter}.png") + fn = os.path.join(tmp_dir, f"warc-file-{counter_screenshots}.png") with open(fn, "wb") as outf: outf.write(record.raw_stream.read()) m = Media(filename=fn) - to_enrich.add_media(m, "browsertrix-screenshot") - counter += 1 + to_enrich.add_media(m, f"browsertrix-screenshot-{counter_screenshots}") + counter_screenshots += 1 if not self.extract_media: continue @@ -231,7 +232,7 @@ class WaczExtractorEnricher(Enricher, Extractor): # create local file and add media ext = mimetypes.guess_extension(content_type) - warc_fn = f"warc-file-{counter}{ext}" + warc_fn = f"warc-file-{counter_screenshots}{ext}" fn = os.path.join(tmp_dir, warc_fn) record_url_best_qual = UrlUtil.twitter_best_quality_url(record_url) @@ -256,6 +257,6 @@ class WaczExtractorEnricher(Enricher, Extractor): continue to_enrich.add_media(m, warc_fn) - counter += 1 + counter_warc_files += 1 seen_urls.add(record_url) - logger.info(f"WACZ extract_media/extract_screenshot finished, found {counter} relevant media file(s)") + logger.info(f"WACZ extract_media/extract_screenshot finished, found {counter_warc_files + counter_screenshots} relevant media file(s)") diff --git a/tests/enrichers/test_wacz_enricher.py b/tests/enrichers/test_wacz_enricher.py index f4d1557..c45c0c3 100644 --- a/tests/enrichers/test_wacz_enricher.py +++ b/tests/enrichers/test_wacz_enricher.py @@ -119,4 +119,4 @@ def test_extract_media(wacz_enricher, metadata, tmp_path, mocker) -> None: metadata.add_media(Media("something.wacz"), "browsertrix") wacz_enricher.extract_media_from_wacz(metadata, str(wacz_file)) assert len(metadata.media) == 2 - assert metadata.media[1].properties.get("id") == "browsertrix-screenshot" + assert metadata.media[1].properties.get("id") == "browsertrix-screenshot-0" From ac24fd8f49beba64836a124eba8c1a0939fe4a0c Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Mon, 2 Jun 2025 12:03:51 +0100 Subject: [PATCH 003/107] improves generic extractor edge-cases and yt-dlp updates --- .../modules/generic_extractor/generic_extractor.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/auto_archiver/modules/generic_extractor/generic_extractor.py b/src/auto_archiver/modules/generic_extractor/generic_extractor.py index e56167a..1a4a0f1 100644 --- a/src/auto_archiver/modules/generic_extractor/generic_extractor.py +++ b/src/auto_archiver/modules/generic_extractor/generic_extractor.py @@ -156,7 +156,7 @@ class GenericExtractor(Extractor): logger.error("generate_once.js not found after transpilation.") return - self.extractor_args.setdefault("youtube", {})["getpot_bgutil_script"] = script_path + self.extractor_args.setdefault("youtubepot-bgutilscript", {})["script_path"] = script_path logger.info(f"PO Token script configured at: {script_path}") except Exception as e: @@ -301,7 +301,7 @@ class GenericExtractor(Extractor): result.set_url(url) if "description" in video_data and not result.get("content"): - result.set_content(video_data["description"]) + result.set_content(video_data.pop("description")) # extract comments if enabled if self.comments: result.set( @@ -370,7 +370,6 @@ class GenericExtractor(Extractor): return False else: entries = [data] - result = Metadata() for entry in entries: @@ -379,6 +378,10 @@ class GenericExtractor(Extractor): if not os.path.exists(filename): filename = filename.split(".")[0] + ".mkv" + if not os.path.exists(filename): + logger.warning(f"File {filename} does not exist (see yt-dlp logs), skipping this entry.") + continue + new_media = Media(filename) for x in ["duration", "original_url", "fulltitle", "description", "upload_date"]: if x in entry: @@ -396,6 +399,9 @@ class GenericExtractor(Extractor): result.add_media(new_media) except Exception as e: logger.error(f"Error processing entry {entry}: {e}") + if not len(result.media): + logger.warning(f"No media found for entry {entry}, skipping.") + return False return self.add_metadata(data, info_extractor, url, result) From 2d7206f99dddadc7c27861950ad88dd254064d8d Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Mon, 2 Jun 2025 12:06:02 +0100 Subject: [PATCH 004/107] REMOVES vk_extractor until further notice --- docs/source/how_to/new_config_format.md | 1 - docs/source/installation/faq.md | 1 - poetry.lock | 1324 ++++++++--------- pyproject.toml | 6 +- .../modules/vk_extractor/__init__.py | 1 - .../modules/vk_extractor/__manifest__.py | 37 - .../modules/vk_extractor/vk_extractor.py | 43 - tests/extractors/test_vk_extractor.py | 77 - 8 files changed, 618 insertions(+), 872 deletions(-) delete mode 100644 src/auto_archiver/modules/vk_extractor/__init__.py delete mode 100644 src/auto_archiver/modules/vk_extractor/__manifest__.py delete mode 100644 src/auto_archiver/modules/vk_extractor/vk_extractor.py delete mode 100644 tests/extractors/test_vk_extractor.py diff --git a/docs/source/how_to/new_config_format.md b/docs/source/how_to/new_config_format.md index 5cef3c8..a1d2035 100644 --- a/docs/source/how_to/new_config_format.md +++ b/docs/source/how_to/new_config_format.md @@ -71,7 +71,6 @@ The names of the actual modules have also changed, so for any extractor modules - `telethon_archiver` → `telethon_extractor` - `wacz_archiver_enricher` → `wacz_extractor_enricher` - `wayback_archiver_enricher` → `wayback_extractor_enricher` -- `vk_archiver` → `vk_extractor` #### c) Module Renaming diff --git a/docs/source/installation/faq.md b/docs/source/installation/faq.md index 246fbc4..41721c5 100644 --- a/docs/source/installation/faq.md +++ b/docs/source/installation/faq.md @@ -11,7 +11,6 @@ are available on the [extractors](../modules/extractor.md) page. Some sites supp * Twitter * Instagram * Telegram -* VKontact * Tiktok * Bluesky diff --git a/poetry.lock b/poetry.lock index e9db266..550b2aa 100644 --- a/poetry.lock +++ b/poetry.lock @@ -56,18 +56,18 @@ trio = ["trio (>=0.26.1)"] [[package]] name = "astroid" -version = "3.3.9" +version = "3.3.10" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.9.0" groups = ["docs"] files = [ - {file = "astroid-3.3.9-py3-none-any.whl", hash = "sha256:d05bfd0acba96a7bd43e222828b7d9bc1e138aaeb0649707908d3702a9831248"}, - {file = "astroid-3.3.9.tar.gz", hash = "sha256:622cc8e3048684aa42c820d9d218978021c3c3d174fb03a9f0d615921744f550"}, + {file = "astroid-3.3.10-py3-none-any.whl", hash = "sha256:104fb9cb9b27ea95e847a94c003be03a9e039334a8ebca5ee27dafaf5c5711eb"}, + {file = "astroid-3.3.10.tar.gz", hash = "sha256:c332157953060c6deb9caa57303ae0d20b0fbdb2e59b4a4f2a6ba49d0a7961ce"}, ] [package.dependencies] -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} [[package]] name = "attrs" @@ -91,14 +91,14 @@ tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" a [[package]] name = "authlib" -version = "1.5.1" +version = "1.6.0" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "authlib-1.5.1-py2.py3-none-any.whl", hash = "sha256:8408861cbd9b4ea2ff759b00b6f02fd7d81ac5a56d0b2b22c08606c6049aae11"}, - {file = "authlib-1.5.1.tar.gz", hash = "sha256:5cbc85ecb0667312c1cdc2f9095680bb735883b123fb509fde1e65b1c5df972e"}, + {file = "authlib-1.6.0-py2.py3-none-any.whl", hash = "sha256:91685589498f79e8655e8a8947431ad6288831d643f11c55c2143ffcc738048d"}, + {file = "authlib-1.6.0.tar.gz", hash = "sha256:4367d32031b7af175ad3a323d571dc7257b7099d55978087ceae4a0d88cd3210"}, ] [package.dependencies] @@ -137,14 +137,14 @@ dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)" [[package]] name = "beautifulsoup4" -version = "4.13.3" +version = "4.13.4" description = "Screen-scraping library" optional = false python-versions = ">=3.7.0" groups = ["main", "docs"] files = [ - {file = "beautifulsoup4-4.13.3-py3-none-any.whl", hash = "sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16"}, - {file = "beautifulsoup4-4.13.3.tar.gz", hash = "sha256:1bd32405dacc920b42b83ba01644747ed77456a65760e285fbc47633ceddaf8b"}, + {file = "beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b"}, + {file = "beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195"}, ] [package.dependencies] @@ -160,49 +160,46 @@ lxml = ["lxml"] [[package]] name = "bgutil-ytdlp-pot-provider" -version = "0.7.4" +version = "1.1.0" description = "" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "bgutil_ytdlp_pot_provider-0.7.4-py3-none-any.whl", hash = "sha256:5f0b1d884fec66dff703c421ea06f5fc9b11022d9c0babdaa0cab13ed99b9d77"}, - {file = "bgutil_ytdlp_pot_provider-0.7.4.tar.gz", hash = "sha256:b6c1462b8f979540078085cd82462ef967b8b70cd0810d469243a31f5081e5c6"}, + {file = "bgutil_ytdlp_pot_provider-1.1.0-py3-none-any.whl", hash = "sha256:25bea57effcf5ef82de584d4ca843387cec7900a52b331d269ed6e0a85395fa8"}, + {file = "bgutil_ytdlp_pot_provider-1.1.0.tar.gz", hash = "sha256:75acedfa92cbe22d071ee6a3142bedd4094115b69cdec84a467b58ae25c7196d"}, ] -[package.dependencies] -yt-dlp-get-pot = ">=0.1.1" - [[package]] name = "boto3" -version = "1.37.18" +version = "1.38.27" description = "The AWS SDK for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "boto3-1.37.18-py3-none-any.whl", hash = "sha256:1545c943f36db41853cdfdb6ff09c4eda9220dd95bd2fae76fc73091603525d1"}, - {file = "boto3-1.37.18.tar.gz", hash = "sha256:9b272268794172b0b8bb9fb1f3c470c3b6c0ffb92fbd4882465cc740e40fbdcd"}, + {file = "boto3-1.38.27-py3-none-any.whl", hash = "sha256:95f5fe688795303a8a15e8b7e7f255cadab35eae459d00cc281a4fd77252ea80"}, + {file = "boto3-1.38.27.tar.gz", hash = "sha256:94bd7fdd92d5701b362d4df100d21e28f8307a67ff56b6a8b0398119cf22f859"}, ] [package.dependencies] -botocore = ">=1.37.18,<1.38.0" +botocore = ">=1.38.27,<1.39.0" jmespath = ">=0.7.1,<2.0.0" -s3transfer = ">=0.11.0,<0.12.0" +s3transfer = ">=0.13.0,<0.14.0" [package.extras] crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.37.18" +version = "1.38.27" description = "Low-level, data-driven core of boto 3." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "botocore-1.37.18-py3-none-any.whl", hash = "sha256:a8b97d217d82b3c4f6bcc906e264df7ebb51e2c6a62b3548a97cd173fb8759a1"}, - {file = "botocore-1.37.18.tar.gz", hash = "sha256:99e8eefd5df6347ead15df07ce55f4e62a51ea7b54de1127522a08597923b726"}, + {file = "botocore-1.38.27-py3-none-any.whl", hash = "sha256:a785d5e9a5eda88ad6ab9ed8b87d1f2ac409d0226bba6ff801c55359e94d91a8"}, + {file = "botocore-1.38.27.tar.gz", hash = "sha256:9788f7efe974328a38cbade64cc0b1e67d27944b899f88cb786ae362973133b6"}, ] [package.dependencies] @@ -213,142 +210,6 @@ urllib3 = {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version > [package.extras] crt = ["awscrt (==0.23.8)"] -[[package]] -name = "brotli" -version = "1.1.0" -description = "Python bindings for the Brotli compression library" -optional = false -python-versions = "*" -groups = ["main"] -markers = "platform_python_implementation >= \"CPython\"" -files = [ - {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, - {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, - {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"}, - {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"}, - {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"}, - {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"}, - {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"}, - {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"}, - {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"}, - {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"}, - {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5dab0844f2cf82be357a0eb11a9087f70c5430b2c241493fc122bb6f2bb0917c"}, - {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e4fe605b917c70283db7dfe5ada75e04561479075761a0b3866c081d035b01c1"}, - {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1e9a65b5736232e7a7f91ff3d02277f11d339bf34099a56cdab6a8b3410a02b2"}, - {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:58d4b711689366d4a03ac7957ab8c28890415e267f9b6589969e74b6e42225ec"}, - {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"}, - {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"}, - {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"}, - {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"}, - {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"}, - {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"}, - {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"}, - {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"}, - {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"}, - {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"}, - {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"}, - {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"}, - {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c247dd99d39e0338a604f8c2b3bc7061d5c2e9e2ac7ba9cc1be5a69cb6cd832f"}, - {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1b2c248cd517c222d89e74669a4adfa5577e06ab68771a529060cf5a156e9757"}, - {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2a24c50840d89ded6c9a8fdc7b6ed3692ed4e86f1c4a4a938e1e92def92933e0"}, - {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f31859074d57b4639318523d6ffdca586ace54271a73ad23ad021acd807eb14b"}, - {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"}, - {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"}, - {file = "Brotli-1.1.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:32d95b80260d79926f5fab3c41701dbb818fde1c9da590e77e571eefd14abe28"}, - {file = "Brotli-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b760c65308ff1e462f65d69c12e4ae085cff3b332d894637f6273a12a482d09f"}, - {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"}, - {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"}, - {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"}, - {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"}, - {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"}, - {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"}, - {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"}, - {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"}, - {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"}, - {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"}, - {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:87a3044c3a35055527ac75e419dfa9f4f3667a1e887ee80360589eb8c90aabb9"}, - {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c5529b34c1c9d937168297f2c1fde7ebe9ebdd5e121297ff9c043bdb2ae3d6fb"}, - {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ca63e1890ede90b2e4454f9a65135a4d387a4585ff8282bb72964fab893f2111"}, - {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e79e6520141d792237c70bcd7a3b122d00f2613769ae0cb61c52e89fd3443839"}, - {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"}, - {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"}, - {file = "Brotli-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8bf32b98b75c13ec7cf774164172683d6e7891088f6316e54425fde1efc276d5"}, - {file = "Brotli-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7bc37c4d6b87fb1017ea28c9508b36bbcb0c3d18b4260fcdf08b200c74a6aee8"}, - {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c0ef38c7a7014ffac184db9e04debe495d317cc9c6fb10071f7fefd93100a4f"}, - {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91d7cc2a76b5567591d12c01f019dd7afce6ba8cba6571187e21e2fc418ae648"}, - {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a93dde851926f4f2678e704fadeb39e16c35d8baebd5252c9fd94ce8ce68c4a0"}, - {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0db75f47be8b8abc8d9e31bc7aad0547ca26f24a54e6fd10231d623f183d089"}, - {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6967ced6730aed543b8673008b5a391c3b1076d834ca438bbd70635c73775368"}, - {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7eedaa5d036d9336c95915035fb57422054014ebdeb6f3b42eac809928e40d0c"}, - {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d487f5432bf35b60ed625d7e1b448e2dc855422e87469e3f450aa5552b0eb284"}, - {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:832436e59afb93e1836081a20f324cb185836c617659b07b129141a8426973c7"}, - {file = "Brotli-1.1.0-cp313-cp313-win32.whl", hash = "sha256:43395e90523f9c23a3d5bdf004733246fba087f2948f87ab28015f12359ca6a0"}, - {file = "Brotli-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b"}, - {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"}, - {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"}, - {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"}, - {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"}, - {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"}, - {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"}, - {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"}, - {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"}, - {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"}, - {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:aea440a510e14e818e67bfc4027880e2fb500c2ccb20ab21c7a7c8b5b4703d75"}, - {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_i686.whl", hash = "sha256:6974f52a02321b36847cd19d1b8e381bf39939c21efd6ee2fc13a28b0d99348c"}, - {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:a7e53012d2853a07a4a79c00643832161a910674a893d296c9f1259859a289d2"}, - {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:d7702622a8b40c49bffb46e1e3ba2e81268d5c04a34f460978c6b5517a34dd52"}, - {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"}, - {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"}, - {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"}, - {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"}, - {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"}, - {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"}, - {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"}, - {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"}, - {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"}, - {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"}, - {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"}, - {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:cb1dac1770878ade83f2ccdf7d25e494f05c9165f5246b46a621cc849341dc01"}, - {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:3ee8a80d67a4334482d9712b8e83ca6b1d9bc7e351931252ebef5d8f7335a547"}, - {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:5e55da2c8724191e5b557f8e18943b1b4839b8efc3ef60d65985bcf6f587dd38"}, - {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:d342778ef319e1026af243ed0a07c97acf3bad33b9f29e7ae6a1f68fd083e90c"}, - {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"}, - {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"}, - {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"}, - {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"}, - {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"}, - {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"}, - {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"}, - {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"}, - {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"}, - {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"}, - {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"}, - {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"}, - {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d2b35ca2c7f81d173d2fadc2f4f31e88cc5f7a39ae5b6db5513cf3383b0e0ec7"}, - {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:af6fa6817889314555aede9a919612b23739395ce767fe7fcbea9a80bf140fe5"}, - {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:2feb1d960f760a575dbc5ab3b1c00504b24caaf6986e2dc2b01c09c87866a943"}, - {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4410f84b33374409552ac9b6903507cdb31cd30d2501fc5ca13d18f73548444a"}, - {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"}, - {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"}, - {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"}, - {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"}, - {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"}, - {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"}, - {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"}, - {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"}, - {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"}, - {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"}, - {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"}, - {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"}, - {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0737ddb3068957cf1b054899b0883830bb1fec522ec76b1098f9b6e0f02d9419"}, - {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4f3607b129417e111e30637af1b56f24f7a49e64763253bbc275c75fa887d4b2"}, - {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:6c6e0c425f22c1c719c42670d561ad682f7bfeeef918edea971a79ac5252437f"}, - {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:494994f807ba0b92092a163a0a283961369a65f6cbe01e8891132b7a320e61eb"}, - {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"}, - {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"}, - {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, -] - [[package]] name = "bs4" version = "0.0.2" @@ -378,14 +239,14 @@ files = [ [[package]] name = "certifi" -version = "2025.1.31" +version = "2025.4.26" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" groups = ["main", "docs"] files = [ - {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, - {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, + {file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"}, + {file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"}, ] [[package]] @@ -483,116 +344,116 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.4.1" +version = "3.4.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" groups = ["main", "docs"] files = [ - {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, - {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, - {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-win32.whl", hash = "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-win32.whl", hash = "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-win32.whl", hash = "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e"}, + {file = "charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0"}, + {file = "charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63"}, ] [[package]] name = "click" -version = "8.1.8" +version = "8.2.1" description = "Composable command line interface toolkit" optional = false -python-versions = ">=3.7" +python-versions = ">=3.10" groups = ["docs"] files = [ - {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, - {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, + {file = "click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b"}, + {file = "click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202"}, ] [package.dependencies] @@ -613,47 +474,49 @@ markers = {main = "sys_platform == \"win32\" or platform_system == \"Windows\"", [[package]] name = "cryptography" -version = "44.0.2" +version = "44.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = "!=3.9.0,!=3.9.1,>=3.7" groups = ["main"] files = [ - {file = "cryptography-44.0.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:efcfe97d1b3c79e486554efddeb8f6f53a4cdd4cf6086642784fa31fc384e1d7"}, - {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29ecec49f3ba3f3849362854b7253a9f59799e3763b0c9d0826259a88efa02f1"}, - {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc821e161ae88bfe8088d11bb39caf2916562e0a2dc7b6d56714a48b784ef0bb"}, - {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3c00b6b757b32ce0f62c574b78b939afab9eecaf597c4d624caca4f9e71e7843"}, - {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7bdcd82189759aba3816d1f729ce42ffded1ac304c151d0a8e89b9996ab863d5"}, - {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:4973da6ca3db4405c54cd0b26d328be54c7747e89e284fcff166132eb7bccc9c"}, - {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4e389622b6927d8133f314949a9812972711a111d577a5d1f4bee5e58736b80a"}, - {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:f514ef4cd14bb6fb484b4a60203e912cfcb64f2ab139e88c2274511514bf7308"}, - {file = "cryptography-44.0.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1bc312dfb7a6e5d66082c87c34c8a62176e684b6fe3d90fcfe1568de675e6688"}, - {file = "cryptography-44.0.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b721b8b4d948b218c88cb8c45a01793483821e709afe5f622861fc6182b20a7"}, - {file = "cryptography-44.0.2-cp37-abi3-win32.whl", hash = "sha256:51e4de3af4ec3899d6d178a8c005226491c27c4ba84101bfb59c901e10ca9f79"}, - {file = "cryptography-44.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:c505d61b6176aaf982c5717ce04e87da5abc9a36a5b39ac03905c4aafe8de7aa"}, - {file = "cryptography-44.0.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8e0ddd63e6bf1161800592c71ac794d3fb8001f2caebe0966e77c5234fa9efc3"}, - {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81276f0ea79a208d961c433a947029e1a15948966658cf6710bbabb60fcc2639"}, - {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a1e657c0f4ea2a23304ee3f964db058c9e9e635cc7019c4aa21c330755ef6fd"}, - {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6210c05941994290f3f7f175a4a57dbbb2afd9273657614c506d5976db061181"}, - {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1c3572526997b36f245a96a2b1713bf79ce99b271bbcf084beb6b9b075f29ea"}, - {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b042d2a275c8cee83a4b7ae30c45a15e6a4baa65a179a0ec2d78ebb90e4f6699"}, - {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:d03806036b4f89e3b13b6218fefea8d5312e450935b1a2d55f0524e2ed7c59d9"}, - {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:c7362add18b416b69d58c910caa217f980c5ef39b23a38a0880dfd87bdf8cd23"}, - {file = "cryptography-44.0.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8cadc6e3b5a1f144a039ea08a0bdb03a2a92e19c46be3285123d32029f40a922"}, - {file = "cryptography-44.0.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6f101b1f780f7fc613d040ca4bdf835c6ef3b00e9bd7125a4255ec574c7916e4"}, - {file = "cryptography-44.0.2-cp39-abi3-win32.whl", hash = "sha256:3dc62975e31617badc19a906481deacdeb80b4bb454394b4098e3f2525a488c5"}, - {file = "cryptography-44.0.2-cp39-abi3-win_amd64.whl", hash = "sha256:5f6f90b72d8ccadb9c6e311c775c8305381db88374c65fa1a68250aa8a9cb3a6"}, - {file = "cryptography-44.0.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:af4ff3e388f2fa7bff9f7f2b31b87d5651c45731d3e8cfa0944be43dff5cfbdb"}, - {file = "cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:0529b1d5a0105dd3731fa65680b45ce49da4d8115ea76e9da77a875396727b41"}, - {file = "cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7ca25849404be2f8e4b3c59483d9d3c51298a22c1c61a0e84415104dacaf5562"}, - {file = "cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:268e4e9b177c76d569e8a145a6939eca9a5fec658c932348598818acf31ae9a5"}, - {file = "cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:9eb9d22b0a5d8fd9925a7764a054dca914000607dff201a24c791ff5c799e1fa"}, - {file = "cryptography-44.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2bf7bf75f7df9715f810d1b038870309342bff3069c5bd8c6b96128cb158668d"}, - {file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:909c97ab43a9c0c0b0ada7a1281430e4e5ec0458e6d9244c0e821bbf152f061d"}, - {file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:96e7a5e9d6e71f9f4fca8eebfd603f8e86c5225bb18eb621b2c1e50b290a9471"}, - {file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:d1b3031093a366ac767b3feb8bcddb596671b3aaff82d4050f984da0c248b615"}, - {file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:04abd71114848aa25edb28e225ab5f268096f44cf0127f3d36975bdf1bdf3390"}, - {file = "cryptography-44.0.2.tar.gz", hash = "sha256:c63454aa261a0cf0c5b4718349629793e9e634993538db841165b3df74f37ec0"}, + {file = "cryptography-44.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:962bc30480a08d133e631e8dfd4783ab71cc9e33d5d7c1e192f0b7c06397bb88"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffc61e8f3bf5b60346d89cd3d37231019c17a081208dfbbd6e1605ba03fa137"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58968d331425a6f9eedcee087f77fd3c927c88f55368f43ff7e0a19891f2642c"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e28d62e59a4dbd1d22e747f57d4f00c459af22181f0b2f787ea83f5a876d7c76"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:af653022a0c25ef2e3ffb2c673a50e5a0d02fecc41608f4954176f1933b12359"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:157f1f3b8d941c2bd8f3ffee0af9b049c9665c39d3da9db2dc338feca5e98a43"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:c6cd67722619e4d55fdb42ead64ed8843d64638e9c07f4011163e46bc512cf01"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:b424563394c369a804ecbee9b06dfb34997f19d00b3518e39f83a5642618397d"}, + {file = "cryptography-44.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c91fc8e8fd78af553f98bc7f2a1d8db977334e4eea302a4bfd75b9461c2d8904"}, + {file = "cryptography-44.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:25cd194c39fa5a0aa4169125ee27d1172097857b27109a45fadc59653ec06f44"}, + {file = "cryptography-44.0.3-cp37-abi3-win32.whl", hash = "sha256:3be3f649d91cb182c3a6bd336de8b61a0a71965bd13d1a04a0e15b39c3d5809d"}, + {file = "cryptography-44.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:3883076d5c4cc56dbef0b898a74eb6992fdac29a7b9013870b34efe4ddb39a0d"}, + {file = "cryptography-44.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:5639c2b16764c6f76eedf722dbad9a0914960d3489c0cc38694ddf9464f1bb2f"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3ffef566ac88f75967d7abd852ed5f182da252d23fac11b4766da3957766759"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:192ed30fac1728f7587c6f4613c29c584abdc565d7417c13904708db10206645"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7d5fe7195c27c32a64955740b949070f21cba664604291c298518d2e255931d2"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3f07943aa4d7dad689e3bb1638ddc4944cc5e0921e3c227486daae0e31a05e54"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb90f60e03d563ca2445099edf605c16ed1d5b15182d21831f58460c48bffb93"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ab0b005721cc0039e885ac3503825661bd9810b15d4f374e473f8c89b7d5460c"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:3bb0847e6363c037df8f6ede57d88eaf3410ca2267fb12275370a76f85786a6f"}, + {file = "cryptography-44.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b0cc66c74c797e1db750aaa842ad5b8b78e14805a9b5d1348dc603612d3e3ff5"}, + {file = "cryptography-44.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6866df152b581f9429020320e5eb9794c8780e90f7ccb021940d7f50ee00ae0b"}, + {file = "cryptography-44.0.3-cp39-abi3-win32.whl", hash = "sha256:c138abae3a12a94c75c10499f1cbae81294a6f983b3af066390adee73f433028"}, + {file = "cryptography-44.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:5d186f32e52e66994dce4f766884bcb9c68b8da62d61d9d215bfe5fb56d21334"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:cad399780053fb383dc067475135e41c9fe7d901a97dd5d9c5dfb5611afc0d7d"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:21a83f6f35b9cc656d71b5de8d519f566df01e660ac2578805ab245ffd8523f8"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fc3c9babc1e1faefd62704bb46a69f359a9819eb0292e40df3fb6e3574715cd4"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:e909df4053064a97f1e6565153ff8bb389af12c5c8d29c343308760890560aff"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:dad80b45c22e05b259e33ddd458e9e2ba099c86ccf4e88db7bbab4b747b18d06"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:479d92908277bed6e1a1c69b277734a7771c2b78633c224445b5c60a9f4bc1d9"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:896530bc9107b226f265effa7ef3f21270f18a2026bc09fed1ebd7b66ddf6375"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9b4d4a5dbee05a2c390bf212e78b99434efec37b17a4bff42f50285c5c8c9647"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02f55fb4f8b79c1221b0961488eaae21015b69b210e18c386b69de182ebb1259"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:dd3db61b8fe5be220eee484a17233287d0be6932d056cf5738225b9c05ef4fff"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:978631ec51a6bbc0b7e58f23b68a8ce9e5f09721940933e9c217068388789fe5"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:5d20cc348cca3a8aa7312f42ab953a56e15323800ca3ab0706b8cd452a3a056c"}, + {file = "cryptography-44.0.3.tar.gz", hash = "sha256:fe19d8bc5536a91a24a8133328880a41831b6c5df54599a8417b62fe015d3053"}, ] [package.dependencies] @@ -666,7 +529,7 @@ nox = ["nox (>=2024.4.15)", "nox[uv] (>=2024.3.2) ; python_version >= \"3.8\""] pep8test = ["check-sdist ; python_version >= \"3.8\"", "click (>=8.0.1)", "mypy (>=1.4)", "ruff (>=0.3.6)"] sdist = ["build (>=1.0.0)"] ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi (>=2024)", "cryptography-vectors (==44.0.2)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] +test = ["certifi (>=2024)", "cryptography-vectors (==44.0.3)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] test-randomorder = ["pytest-randomly"] [[package]] @@ -734,17 +597,20 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.2" +version = "1.3.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["main", "dev", "docs"] markers = "python_version < \"3.11\"" files = [ - {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, - {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, + {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, + {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, ] +[package.dependencies] +typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} + [package.extras] test = ["pytest (>=6)"] @@ -822,14 +688,14 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-api-python-client" -version = "2.165.0" +version = "2.170.0" description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "google_api_python_client-2.165.0-py2.py3-none-any.whl", hash = "sha256:4eaab7d4a20be0d3d1dde462fa95e9e0ccc2a3e177a656701bf73fe738ddef7d"}, - {file = "google_api_python_client-2.165.0.tar.gz", hash = "sha256:0d2aee76727a104705630bebbc43669c864b766924e9329051ef7b7e2468eb72"}, + {file = "google_api_python_client-2.170.0-py3-none-any.whl", hash = "sha256:7bf518a0527ad23322f070fa69f4f24053170d5c766821dc970ff0571ec22748"}, + {file = "google_api_python_client-2.170.0.tar.gz", hash = "sha256:75f3a1856f11418ea3723214e0abc59d9b217fd7ed43dcf743aab7f06ab9e2b1"}, ] [package.dependencies] @@ -841,14 +707,14 @@ uritemplate = ">=3.0.1,<5" [[package]] name = "google-auth" -version = "2.38.0" +version = "2.40.2" description = "Google Authentication Library" optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "google_auth-2.38.0-py2.py3-none-any.whl", hash = "sha256:e7dae6694313f434a2727bf2906f27ad259bae090d7aa896590d86feec3d9d4a"}, - {file = "google_auth-2.38.0.tar.gz", hash = "sha256:8285113607d3b80a3f1543b75962447ba8a09fe85783432a784fdeef6ac094c4"}, + {file = "google_auth-2.40.2-py2.py3-none-any.whl", hash = "sha256:f7e568d42eedfded58734f6a60c58321896a621f7c116c411550a4b4a13da90b"}, + {file = "google_auth-2.40.2.tar.gz", hash = "sha256:a33cde547a2134273226fa4b853883559947ebe9207521f7afc707efbf690f58"}, ] [package.dependencies] @@ -857,12 +723,14 @@ pyasn1-modules = ">=0.2.1" rsa = ">=3.1.4,<5" [package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0)", "requests (>=2.20.0,<3.0.0)"] enterprise-cert = ["cryptography", "pyopenssl"] -pyjwt = ["cryptography (>=38.0.3)", "pyjwt (>=2.0)"] -pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +pyjwt = ["cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "pyjwt (>=2.0)"] +pyopenssl = ["cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] -requests = ["requests (>=2.20.0,<3.0.0.dev0)"] +requests = ["requests (>=2.20.0,<3.0.0)"] +testing = ["aiohttp (<3.10.0)", "aiohttp (>=3.6.2,<4.0.0)", "aioresponses", "cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "flask", "freezegun", "grpcio", "mock", "oauth2client", "packaging", "pyjwt (>=2.0)", "pyopenssl (<24.3.0)", "pyopenssl (>=20.0.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-localserver", "pyu2f (>=0.1.5)", "requests (>=2.20.0,<3.0.0)", "responses", "urllib3"] +urllib3 = ["packaging", "urllib3"] [[package]] name = "google-auth-httplib2" @@ -882,14 +750,14 @@ httplib2 = ">=0.19.0" [[package]] name = "google-auth-oauthlib" -version = "1.2.1" +version = "1.2.2" description = "Google Authentication Library" optional = false python-versions = ">=3.6" groups = ["main"] files = [ - {file = "google_auth_oauthlib-1.2.1-py2.py3-none-any.whl", hash = "sha256:2d58a27262d55aa1b87678c3ba7142a080098cbc2024f903c62355deb235d91f"}, - {file = "google_auth_oauthlib-1.2.1.tar.gz", hash = "sha256:afd0cad092a2eaa53cd8e8298557d6de1034c6cb4a740500b5357b648af97263"}, + {file = "google_auth_oauthlib-1.2.2-py3-none-any.whl", hash = "sha256:fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2"}, + {file = "google_auth_oauthlib-1.2.2.tar.gz", hash = "sha256:11046fb8d3348b296302dd939ace8af0a724042e8029c1b872d87fabc9f41684"}, ] [package.dependencies] @@ -901,14 +769,14 @@ tool = ["click (>=6.0.0)"] [[package]] name = "googleapis-common-protos" -version = "1.69.2" +version = "1.70.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "googleapis_common_protos-1.69.2-py3-none-any.whl", hash = "sha256:0b30452ff9c7a27d80bfc5718954063e8ab53dd3697093d3bc99581f5fd24212"}, - {file = "googleapis_common_protos-1.69.2.tar.gz", hash = "sha256:3e1b904a27a33c821b4b749fd31d334c0c9c30e6113023d495e48979a3dc9c5f"}, + {file = "googleapis_common_protos-1.70.0-py3-none-any.whl", hash = "sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8"}, + {file = "googleapis_common_protos-1.70.0.tar.gz", hash = "sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257"}, ] [package.dependencies] @@ -919,14 +787,14 @@ grpc = ["grpcio (>=1.44.0,<2.0.0)"] [[package]] name = "gspread" -version = "6.2.0" +version = "6.2.1" description = "Google Spreadsheets Python API" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "gspread-6.2.0-py3-none-any.whl", hash = "sha256:7fa1a11e1ecacc6c5946fa016be05941baca8540404314f59aec963dd8ae5db3"}, - {file = "gspread-6.2.0.tar.gz", hash = "sha256:bc3d02d1c39e0b40bfc8035b4fec407aa71a17f343fc81cc7e3f75bfa6555de6"}, + {file = "gspread-6.2.1-py3-none-any.whl", hash = "sha256:6d4ec9f1c23ae3c704a9219026dac01f2b328ac70b96f1495055d453c4c184db"}, + {file = "gspread-6.2.1.tar.gz", hash = "sha256:2c7c99f7c32ebea6ec0d36f2d5cbe8a2be5e8f2a48bde87ad1ea203eff32bd03"}, ] [package.dependencies] @@ -935,14 +803,14 @@ google-auth-oauthlib = ">=0.4.1" [[package]] name = "h11" -version = "0.14.0" +version = "0.16.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" groups = ["main", "docs"] files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, + {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, + {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, ] [[package]] @@ -962,14 +830,14 @@ pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0 [[package]] name = "identify" -version = "2.6.9" +version = "2.6.12" description = "File identification library for Python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "identify-2.6.9-py2.py3-none-any.whl", hash = "sha256:c98b4322da415a8e5a70ff6e51fbc2d2932c015532d77e9f8537b4ba7813b150"}, - {file = "identify-2.6.9.tar.gz", hash = "sha256:d40dfe3142a1421d8518e3d3985ef5ac42890683e32306ad614a29490abeb6bf"}, + {file = "identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2"}, + {file = "identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6"}, ] [package.extras] @@ -1032,6 +900,22 @@ requests = ">=2.25" [package.extras] browser-cookie3 = ["browser_cookie3 (>=0.19.1)"] +[[package]] +name = "jeepney" +version = "0.9.0" +description = "Low-level, pure Python DBus protocol wrapper." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683"}, + {file = "jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732"}, +] + +[package.extras] +test = ["async-timeout ; python_version < \"3.11\"", "pytest", "pytest-asyncio (>=0.17)", "pytest-trio", "testpath", "trio"] +trio = ["trio"] + [[package]] name = "jinja2" version = "3.1.6" @@ -1265,28 +1149,16 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] -[[package]] -name = "mutagen" -version = "1.47.0" -description = "read and write audio tags for many formats" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "mutagen-1.47.0-py3-none-any.whl", hash = "sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719"}, - {file = "mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99"}, -] - [[package]] name = "mypy-extensions" -version = "1.0.0" +version = "1.1.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" groups = ["main"] 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"}, + {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, + {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, ] [[package]] @@ -1462,136 +1334,145 @@ attrs = ">=19.2.0" [[package]] name = "packaging" -version = "24.2" +version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" groups = ["main", "dev", "docs"] files = [ - {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, - {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, + {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, + {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, ] [[package]] name = "pdqhash" -version = "0.2.7" +version = "0.2.8" description = "\"Python bindings for Facebook's PDQ hash\"" optional = false python-versions = "*" groups = ["main"] files = [ - {file = "pdqhash-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7efd5b4e1ded44ec2a32ea2d32c29fef37d1adca03ce0867975526aea0ffe7fe"}, - {file = "pdqhash-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:33bc5d22c458e5245c2649c0e54968d13e7b5940f6ace268f4a05016481b2253"}, - {file = "pdqhash-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:91652e70d017c8fd60003ea0bfcf4eefeceb3896b93deb2dec43a2ae896da6cd"}, - {file = "pdqhash-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:68549e2071499a5a19748505eb00f52384f24830fe14a437f982d046a8edb498"}, - {file = "pdqhash-0.2.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:6eab8a3112853f18adfaf1482b48bff8003d822de927b7397a421c5e7f0f76d7"}, - {file = "pdqhash-0.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:262ec2881b80877a4005f408000f27e492d08b0d4e84269e1cfcc8a31e96c3bf"}, - {file = "pdqhash-0.2.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a7d943874df8b2ca8c97755f60d1b6ae66e654fe8b2bb6ac8e8be216cae7d130"}, - {file = "pdqhash-0.2.7-cp313-cp313-win_amd64.whl", hash = "sha256:d63886b1edea4134eaa9862987393391e8958f35569918b91804b528f23c5e6c"}, - {file = "pdqhash-0.2.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fc6c53cdc395f5421c857e4e30a92862cc918e18f91d7e4452bb5eb746e454f2"}, - {file = "pdqhash-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:9648abdfdbccb5edfc55fa2a61183766e51d140080fe08213f5daa885c3d5c66"}, - {file = "pdqhash-0.2.7.tar.gz", hash = "sha256:df6375fef513089191cadcbf07c90715d40e882867141e04360a39d8a0861cb5"}, + {file = "pdqhash-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:01e615089a7a22067627e97c383e371d6db363aca9587f4080a6e43cb6228fff"}, + {file = "pdqhash-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:fa49dfeb82b1549318bd3743ae112e4a1feb3dfeb8a6bb859d7f0cbdc5b7c0be"}, + {file = "pdqhash-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5459e57ae2c432429bc2ee1077cd2973a0c24d491f54777d5b4bf249bef35f48"}, + {file = "pdqhash-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:a7b3a626413bad245e3cdd815a4d644a68736982c4b9eb130b52d74dcb48f8e5"}, + {file = "pdqhash-0.2.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:13f106595b566677b0a125d96c6910fd1f1bbf2e86aae3a36ca8e0ed67ded02c"}, + {file = "pdqhash-0.2.8-cp312-cp312-win_amd64.whl", hash = "sha256:fe082d83432583eaf7938fade50ec14e2ecc597b648dbca3419703b7a36f07f0"}, + {file = "pdqhash-0.2.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e7f50d8382a8850917a77232e00bc649b63db8e018423e6175842a226b01fad8"}, + {file = "pdqhash-0.2.8-cp313-cp313-win_amd64.whl", hash = "sha256:b3f892a767708eb63a7b3498e23582a34890a0f2a31833d28fd16c355e1f0d4d"}, + {file = "pdqhash-0.2.8.tar.gz", hash = "sha256:eb9a9de36745937ce3e481a02ce933fe907c84e0b1748c9dfea52c12ca5c1e35"}, ] [[package]] name = "pillow" -version = "11.1.0" +version = "11.2.1" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"}, - {file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"}, - {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07dba04c5e22824816b2615ad7a7484432d7f540e6fa86af60d2de57b0fcee2"}, - {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e267b0ed063341f3e60acd25c05200df4193e15a4a5807075cd71225a2386e26"}, - {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd165131fd51697e22421d0e467997ad31621b74bfc0b75956608cb2906dda07"}, - {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:abc56501c3fd148d60659aae0af6ddc149660469082859fa7b066a298bde9482"}, - {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:54ce1c9a16a9561b6d6d8cb30089ab1e5eb66918cb47d457bd996ef34182922e"}, - {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73ddde795ee9b06257dac5ad42fcb07f3b9b813f8c1f7f870f402f4dc54b5269"}, - {file = "pillow-11.1.0-cp310-cp310-win32.whl", hash = "sha256:3a5fe20a7b66e8135d7fd617b13272626a28278d0e578c98720d9ba4b2439d49"}, - {file = "pillow-11.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:b6123aa4a59d75f06e9dd3dac5bf8bc9aa383121bb3dd9a7a612e05eabc9961a"}, - {file = "pillow-11.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:a76da0a31da6fcae4210aa94fd779c65c75786bc9af06289cd1c184451ef7a65"}, - {file = "pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457"}, - {file = "pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35"}, - {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2"}, - {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070"}, - {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6"}, - {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1"}, - {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2"}, - {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96"}, - {file = "pillow-11.1.0-cp311-cp311-win32.whl", hash = "sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f"}, - {file = "pillow-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761"}, - {file = "pillow-11.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71"}, - {file = "pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a"}, - {file = "pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b"}, - {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3"}, - {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a"}, - {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1"}, - {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f"}, - {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91"}, - {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c"}, - {file = "pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6"}, - {file = "pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf"}, - {file = "pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5"}, - {file = "pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc"}, - {file = "pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0"}, - {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1"}, - {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec"}, - {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5"}, - {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114"}, - {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352"}, - {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3"}, - {file = "pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9"}, - {file = "pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c"}, - {file = "pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65"}, - {file = "pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861"}, - {file = "pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081"}, - {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c"}, - {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547"}, - {file = "pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab"}, - {file = "pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9"}, - {file = "pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe"}, - {file = "pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756"}, - {file = "pillow-11.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bf902d7413c82a1bfa08b06a070876132a5ae6b2388e2712aab3a7cbc02205c6"}, - {file = "pillow-11.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1eec9d950b6fe688edee07138993e54ee4ae634c51443cfb7c1e7613322718e"}, - {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e275ee4cb11c262bd108ab2081f750db2a1c0b8c12c1897f27b160c8bd57bbc"}, - {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db853948ce4e718f2fc775b75c37ba2efb6aaea41a1a5fc57f0af59eee774b2"}, - {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ab8a209b8485d3db694fa97a896d96dd6533d63c22829043fd9de627060beade"}, - {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:54251ef02a2309b5eec99d151ebf5c9904b77976c8abdcbce7891ed22df53884"}, - {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5bb94705aea800051a743aa4874bb1397d4695fb0583ba5e425ee0328757f196"}, - {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89dbdb3e6e9594d512780a5a1c42801879628b38e3efc7038094430844e271d8"}, - {file = "pillow-11.1.0-cp39-cp39-win32.whl", hash = "sha256:e5449ca63da169a2e6068dd0e2fcc8d91f9558aba89ff6d02121ca8ab11e79e5"}, - {file = "pillow-11.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:3362c6ca227e65c54bf71a5f88b3d4565ff1bcbc63ae72c34b07bbb1cc59a43f"}, - {file = "pillow-11.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:b20be51b37a75cc54c2c55def3fa2c65bb94ba859dde241cd0a4fd302de5ae0a"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8c730dc3a83e5ac137fbc92dfcfe1511ce3b2b5d7578315b63dbbb76f7f51d90"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d33d2fae0e8b170b6a6c57400e077412240f6f5bb2a342cf1ee512a787942bb"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8d65b38173085f24bc07f8b6c505cbb7418009fa1a1fcb111b1f4961814a442"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:015c6e863faa4779251436db398ae75051469f7c903b043a48f078e437656f83"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d44ff19eea13ae4acdaaab0179fa68c0c6f2f45d66a4d8ec1eda7d6cecbcc15f"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d3d8da4a631471dfaf94c10c85f5277b1f8e42ac42bade1ac67da4b4a7359b73"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4637b88343166249fe8aa94e7c4a62a180c4b3898283bb5d3d2fd5fe10d8e4e0"}, - {file = "pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20"}, + {file = "pillow-11.2.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:d57a75d53922fc20c165016a20d9c44f73305e67c351bbc60d1adaf662e74047"}, + {file = "pillow-11.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:127bf6ac4a5b58b3d32fc8289656f77f80567d65660bc46f72c0d77e6600cc95"}, + {file = "pillow-11.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4ba4be812c7a40280629e55ae0b14a0aafa150dd6451297562e1764808bbe61"}, + {file = "pillow-11.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8bd62331e5032bc396a93609982a9ab6b411c05078a52f5fe3cc59234a3abd1"}, + {file = "pillow-11.2.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:562d11134c97a62fe3af29581f083033179f7ff435f78392565a1ad2d1c2c45c"}, + {file = "pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:c97209e85b5be259994eb5b69ff50c5d20cca0f458ef9abd835e262d9d88b39d"}, + {file = "pillow-11.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0c3e6d0f59171dfa2e25d7116217543310908dfa2770aa64b8f87605f8cacc97"}, + {file = "pillow-11.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc1c3bc53befb6096b84165956e886b1729634a799e9d6329a0c512ab651e579"}, + {file = "pillow-11.2.1-cp310-cp310-win32.whl", hash = "sha256:312c77b7f07ab2139924d2639860e084ec2a13e72af54d4f08ac843a5fc9c79d"}, + {file = "pillow-11.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9bc7ae48b8057a611e5fe9f853baa88093b9a76303937449397899385da06fad"}, + {file = "pillow-11.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:2728567e249cdd939f6cc3d1f049595c66e4187f3c34078cbc0a7d21c47482d2"}, + {file = "pillow-11.2.1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35ca289f712ccfc699508c4658a1d14652e8033e9b69839edf83cbdd0ba39e70"}, + {file = "pillow-11.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0409af9f829f87a2dfb7e259f78f317a5351f2045158be321fd135973fff7bf"}, + {file = "pillow-11.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4e5c5edee874dce4f653dbe59db7c73a600119fbea8d31f53423586ee2aafd7"}, + {file = "pillow-11.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b93a07e76d13bff9444f1a029e0af2964e654bfc2e2c2d46bfd080df5ad5f3d8"}, + {file = "pillow-11.2.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:e6def7eed9e7fa90fde255afaf08060dc4b343bbe524a8f69bdd2a2f0018f600"}, + {file = "pillow-11.2.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8f4f3724c068be008c08257207210c138d5f3731af6c155a81c2b09a9eb3a788"}, + {file = "pillow-11.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a0a6709b47019dff32e678bc12c63008311b82b9327613f534e496dacaefb71e"}, + {file = "pillow-11.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f6b0c664ccb879109ee3ca702a9272d877f4fcd21e5eb63c26422fd6e415365e"}, + {file = "pillow-11.2.1-cp311-cp311-win32.whl", hash = "sha256:cc5d875d56e49f112b6def6813c4e3d3036d269c008bf8aef72cd08d20ca6df6"}, + {file = "pillow-11.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:0f5c7eda47bf8e3c8a283762cab94e496ba977a420868cb819159980b6709193"}, + {file = "pillow-11.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:4d375eb838755f2528ac8cbc926c3e31cc49ca4ad0cf79cff48b20e30634a4a7"}, + {file = "pillow-11.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:78afba22027b4accef10dbd5eed84425930ba41b3ea0a86fa8d20baaf19d807f"}, + {file = "pillow-11.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78092232a4ab376a35d68c4e6d5e00dfd73454bd12b230420025fbe178ee3b0b"}, + {file = "pillow-11.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25a5f306095c6780c52e6bbb6109624b95c5b18e40aab1c3041da3e9e0cd3e2d"}, + {file = "pillow-11.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c7b29dbd4281923a2bfe562acb734cee96bbb129e96e6972d315ed9f232bef4"}, + {file = "pillow-11.2.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:3e645b020f3209a0181a418bffe7b4a93171eef6c4ef6cc20980b30bebf17b7d"}, + {file = "pillow-11.2.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b2dbea1012ccb784a65349f57bbc93730b96e85b42e9bf7b01ef40443db720b4"}, + {file = "pillow-11.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:da3104c57bbd72948d75f6a9389e6727d2ab6333c3617f0a89d72d4940aa0443"}, + {file = "pillow-11.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:598174aef4589af795f66f9caab87ba4ff860ce08cd5bb447c6fc553ffee603c"}, + {file = "pillow-11.2.1-cp312-cp312-win32.whl", hash = "sha256:1d535df14716e7f8776b9e7fee118576d65572b4aad3ed639be9e4fa88a1cad3"}, + {file = "pillow-11.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:14e33b28bf17c7a38eede290f77db7c664e4eb01f7869e37fa98a5aa95978941"}, + {file = "pillow-11.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:21e1470ac9e5739ff880c211fc3af01e3ae505859392bf65458c224d0bf283eb"}, + {file = "pillow-11.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fdec757fea0b793056419bca3e9932eb2b0ceec90ef4813ea4c1e072c389eb28"}, + {file = "pillow-11.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b0e130705d568e2f43a17bcbe74d90958e8a16263868a12c3e0d9c8162690830"}, + {file = "pillow-11.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bdb5e09068332578214cadd9c05e3d64d99e0e87591be22a324bdbc18925be0"}, + {file = "pillow-11.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d189ba1bebfbc0c0e529159631ec72bb9e9bc041f01ec6d3233d6d82eb823bc1"}, + {file = "pillow-11.2.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:191955c55d8a712fab8934a42bfefbf99dd0b5875078240943f913bb66d46d9f"}, + {file = "pillow-11.2.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ad275964d52e2243430472fc5d2c2334b4fc3ff9c16cb0a19254e25efa03a155"}, + {file = "pillow-11.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:750f96efe0597382660d8b53e90dd1dd44568a8edb51cb7f9d5d918b80d4de14"}, + {file = "pillow-11.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fe15238d3798788d00716637b3d4e7bb6bde18b26e5d08335a96e88564a36b6b"}, + {file = "pillow-11.2.1-cp313-cp313-win32.whl", hash = "sha256:3fe735ced9a607fee4f481423a9c36701a39719252a9bb251679635f99d0f7d2"}, + {file = "pillow-11.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:74ee3d7ecb3f3c05459ba95eed5efa28d6092d751ce9bf20e3e253a4e497e691"}, + {file = "pillow-11.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:5119225c622403afb4b44bad4c1ca6c1f98eed79db8d3bc6e4e160fc6339d66c"}, + {file = "pillow-11.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8ce2e8411c7aaef53e6bb29fe98f28cd4fbd9a1d9be2eeea434331aac0536b22"}, + {file = "pillow-11.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9ee66787e095127116d91dea2143db65c7bb1e232f617aa5957c0d9d2a3f23a7"}, + {file = "pillow-11.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9622e3b6c1d8b551b6e6f21873bdcc55762b4b2126633014cea1803368a9aa16"}, + {file = "pillow-11.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63b5dff3a68f371ea06025a1a6966c9a1e1ee452fc8020c2cd0ea41b83e9037b"}, + {file = "pillow-11.2.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:31df6e2d3d8fc99f993fd253e97fae451a8db2e7207acf97859732273e108406"}, + {file = "pillow-11.2.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:062b7a42d672c45a70fa1f8b43d1d38ff76b63421cbbe7f88146b39e8a558d91"}, + {file = "pillow-11.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4eb92eca2711ef8be42fd3f67533765d9fd043b8c80db204f16c8ea62ee1a751"}, + {file = "pillow-11.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f91ebf30830a48c825590aede79376cb40f110b387c17ee9bd59932c961044f9"}, + {file = "pillow-11.2.1-cp313-cp313t-win32.whl", hash = "sha256:e0b55f27f584ed623221cfe995c912c61606be8513bfa0e07d2c674b4516d9dd"}, + {file = "pillow-11.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:36d6b82164c39ce5482f649b437382c0fb2395eabc1e2b1702a6deb8ad647d6e"}, + {file = "pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681"}, + {file = "pillow-11.2.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:7491cf8a79b8eb867d419648fff2f83cb0b3891c8b36da92cc7f1931d46108c8"}, + {file = "pillow-11.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b02d8f9cb83c52578a0b4beadba92e37d83a4ef11570a8688bbf43f4ca50909"}, + {file = "pillow-11.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:014ca0050c85003620526b0ac1ac53f56fc93af128f7546623cc8e31875ab928"}, + {file = "pillow-11.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3692b68c87096ac6308296d96354eddd25f98740c9d2ab54e1549d6c8aea9d79"}, + {file = "pillow-11.2.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:f781dcb0bc9929adc77bad571b8621ecb1e4cdef86e940fe2e5b5ee24fd33b35"}, + {file = "pillow-11.2.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:2b490402c96f907a166615e9a5afacf2519e28295f157ec3a2bb9bd57de638cb"}, + {file = "pillow-11.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dd6b20b93b3ccc9c1b597999209e4bc5cf2853f9ee66e3fc9a400a78733ffc9a"}, + {file = "pillow-11.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4b835d89c08a6c2ee7781b8dd0a30209a8012b5f09c0a665b65b0eb3560b6f36"}, + {file = "pillow-11.2.1-cp39-cp39-win32.whl", hash = "sha256:b10428b3416d4f9c61f94b494681280be7686bda15898a3a9e08eb66a6d92d67"}, + {file = "pillow-11.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:6ebce70c3f486acf7591a3d73431fa504a4e18a9b97ff27f5f47b7368e4b9dd1"}, + {file = "pillow-11.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:c27476257b2fdcd7872d54cfd119b3a9ce4610fb85c8e32b70b42e3680a29a1e"}, + {file = "pillow-11.2.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9b7b0d4fd2635f54ad82785d56bc0d94f147096493a79985d0ab57aedd563156"}, + {file = "pillow-11.2.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:aa442755e31c64037aa7c1cb186e0b369f8416c567381852c63444dd666fb772"}, + {file = "pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0d3348c95b766f54b76116d53d4cb171b52992a1027e7ca50c81b43b9d9e363"}, + {file = "pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85d27ea4c889342f7e35f6d56e7e1cb345632ad592e8c51b693d7b7556043ce0"}, + {file = "pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:bf2c33d6791c598142f00c9c4c7d47f6476731c31081331664eb26d6ab583e01"}, + {file = "pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e616e7154c37669fc1dfc14584f11e284e05d1c650e1c0f972f281c4ccc53193"}, + {file = "pillow-11.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:39ad2e0f424394e3aebc40168845fee52df1394a4673a6ee512d840d14ab3013"}, + {file = "pillow-11.2.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:80f1df8dbe9572b4b7abdfa17eb5d78dd620b1d55d9e25f834efdbee872d3aed"}, + {file = "pillow-11.2.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ea926cfbc3957090becbcbbb65ad177161a2ff2ad578b5a6ec9bb1e1cd78753c"}, + {file = "pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:738db0e0941ca0376804d4de6a782c005245264edaa253ffce24e5a15cbdc7bd"}, + {file = "pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db98ab6565c69082ec9b0d4e40dd9f6181dab0dd236d26f7a50b8b9bfbd5076"}, + {file = "pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:036e53f4170e270ddb8797d4c590e6dd14d28e15c7da375c18978045f7e6c37b"}, + {file = "pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:14f73f7c291279bd65fda51ee87affd7c1e097709f7fdd0188957a16c264601f"}, + {file = "pillow-11.2.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:208653868d5c9ecc2b327f9b9ef34e0e42a4cdd172c2988fd81d62d2bc9bc044"}, + {file = "pillow-11.2.1.tar.gz", hash = "sha256:a64dd61998416367b7ef979b73d3a85853ba9bec4c2925f74e588879a58716b6"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=8.2)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] fpx = ["olefile"] mic = ["olefile"] +test-arrow = ["pyarrow"] tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] typing = ["typing-extensions ; python_version < \"3.10\""] xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.3.7" +version = "4.3.8" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94"}, - {file = "platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351"}, + {file = "platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4"}, + {file = "platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc"}, ] [package.extras] @@ -1601,19 +1482,19 @@ type = ["mypy (>=1.14.1)"] [[package]] name = "pluggy" -version = "1.5.0" +version = "1.6.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, + {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, ] [package.extras] dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] +testing = ["coverage", "pytest", "pytest-benchmark"] [[package]] name = "pre-commit" @@ -1654,21 +1535,21 @@ testing = ["google-api-core (>=1.31.5)"] [[package]] name = "protobuf" -version = "6.30.1" +version = "6.31.1" description = "" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "protobuf-6.30.1-cp310-abi3-win32.whl", hash = "sha256:ba0706f948d0195f5cac504da156d88174e03218d9364ab40d903788c1903d7e"}, - {file = "protobuf-6.30.1-cp310-abi3-win_amd64.whl", hash = "sha256:ed484f9ddd47f0f1bf0648806cccdb4fe2fb6b19820f9b79a5adf5dcfd1b8c5f"}, - {file = "protobuf-6.30.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aa4f7dfaed0d840b03d08d14bfdb41348feaee06a828a8c455698234135b4075"}, - {file = "protobuf-6.30.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:47cd320b7db63e8c9ac35f5596ea1c1e61491d8a8eb6d8b45edc44760b53a4f6"}, - {file = "protobuf-6.30.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:e3083660225fa94748ac2e407f09a899e6a28bf9c0e70c75def8d15706bf85fc"}, - {file = "protobuf-6.30.1-cp39-cp39-win32.whl", hash = "sha256:554d7e61cce2aa4c63ca27328f757a9f3867bce8ec213bf09096a8d16bcdcb6a"}, - {file = "protobuf-6.30.1-cp39-cp39-win_amd64.whl", hash = "sha256:b510f55ce60f84dc7febc619b47215b900466e3555ab8cb1ba42deb4496d6cc0"}, - {file = "protobuf-6.30.1-py3-none-any.whl", hash = "sha256:3c25e51e1359f1f5fa3b298faa6016e650d148f214db2e47671131b9063c53be"}, - {file = "protobuf-6.30.1.tar.gz", hash = "sha256:535fb4e44d0236893d5cf1263a0f706f1160b689a7ab962e9da8a9ce4050b780"}, + {file = "protobuf-6.31.1-cp310-abi3-win32.whl", hash = "sha256:7fa17d5a29c2e04b7d90e5e32388b8bfd0e7107cd8e616feef7ed3fa6bdab5c9"}, + {file = "protobuf-6.31.1-cp310-abi3-win_amd64.whl", hash = "sha256:426f59d2964864a1a366254fa703b8632dcec0790d8862d30034d8245e1cd447"}, + {file = "protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:6f1227473dc43d44ed644425268eb7c2e488ae245d51c6866d19fe158e207402"}, + {file = "protobuf-6.31.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:a40fc12b84c154884d7d4c4ebd675d5b3b5283e155f324049ae396b95ddebc39"}, + {file = "protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4ee898bf66f7a8b0bd21bce523814e6fbd8c6add948045ce958b73af7e8878c6"}, + {file = "protobuf-6.31.1-cp39-cp39-win32.whl", hash = "sha256:0414e3aa5a5f3ff423828e1e6a6e907d6c65c1d5b7e6e975793d5590bdeecc16"}, + {file = "protobuf-6.31.1-cp39-cp39-win_amd64.whl", hash = "sha256:8764cf4587791e7564051b35524b72844f845ad0bb011704c3736cce762d8fe9"}, + {file = "protobuf-6.31.1-py3-none-any.whl", hash = "sha256:720a6c7e6b77288b85063569baae8536671b39f15cc22037ec7045658d80489e"}, + {file = "protobuf-6.31.1.tar.gz", hash = "sha256:d8cac4c982f0b957a4dc73a80e2ea24fab08e679c0de9deb835f4a12d69aca9a"}, ] [[package]] @@ -1696,29 +1577,29 @@ files = [ [[package]] name = "pyasn1-modules" -version = "0.4.1" +version = "0.4.2" description = "A collection of ASN.1-based protocols modules" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"}, - {file = "pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c"}, + {file = "pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a"}, + {file = "pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6"}, ] [package.dependencies] -pyasn1 = ">=0.4.6,<0.7.0" +pyasn1 = ">=0.6.1,<0.7.0" [[package]] name = "pycodestyle" -version = "2.12.1" +version = "2.13.0" description = "Python style guide checker" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "pycodestyle-2.12.1-py2.py3-none-any.whl", hash = "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3"}, - {file = "pycodestyle-2.12.1.tar.gz", hash = "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"}, + {file = "pycodestyle-2.13.0-py2.py3-none-any.whl", hash = "sha256:35863c5974a271c7a726ed228a14a4f6daf49df369d8c50cd9a6f58a5e143ba9"}, + {file = "pycodestyle-2.13.0.tar.gz", hash = "sha256:c8415bf09abe81d9c7f872502a6eee881fbe85d8763dd5b9924bb0a01d67efae"}, ] [[package]] @@ -1736,41 +1617,53 @@ files = [ [[package]] name = "pycryptodomex" -version = "3.22.0" +version = "3.23.0" description = "Cryptographic library for Python" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["main"] files = [ - {file = "pycryptodomex-3.22.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:41673e5cc39a8524557a0472077635d981172182c9fe39ce0b5f5c19381ffaff"}, - {file = "pycryptodomex-3.22.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:276be1ed006e8fd01bba00d9bd9b60a0151e478033e86ea1cb37447bbc057edc"}, - {file = "pycryptodomex-3.22.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:813e57da5ceb4b549bab96fa548781d9a63f49f1d68fdb148eeac846238056b7"}, - {file = "pycryptodomex-3.22.0-cp27-cp27m-win32.whl", hash = "sha256:d7beeacb5394765aa8dabed135389a11ee322d3ee16160d178adc7f8ee3e1f65"}, - {file = "pycryptodomex-3.22.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:b3746dedf74787da43e4a2f85bd78f5ec14d2469eb299ddce22518b3891f16ea"}, - {file = "pycryptodomex-3.22.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:5ebc09b7d8964654aaf8a4f5ac325f2b0cc038af9bea12efff0cd4a5bb19aa42"}, - {file = "pycryptodomex-3.22.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:aef4590263b9f2f6283469e998574d0bd45c14fb262241c27055b82727426157"}, - {file = "pycryptodomex-3.22.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:5ac608a6dce9418d4f300fab7ba2f7d499a96b462f2b9b5c90d8d994cd36dcad"}, - {file = "pycryptodomex-3.22.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a24f681365ec9757ccd69b85868bbd7216ba451d0f86f6ea0eed75eeb6975db"}, - {file = "pycryptodomex-3.22.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:259664c4803a1fa260d5afb322972813c5fe30ea8b43e54b03b7e3a27b30856b"}, - {file = "pycryptodomex-3.22.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7127d9de3c7ce20339e06bcd4f16f1a1a77f1471bcf04e3b704306dde101b719"}, - {file = "pycryptodomex-3.22.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ee75067b35c93cc18b38af47b7c0664998d8815174cfc66dd00ea1e244eb27e6"}, - {file = "pycryptodomex-3.22.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:1a8b0c5ba061ace4bcd03496d42702c3927003db805b8ec619ea6506080b381d"}, - {file = "pycryptodomex-3.22.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:bfe4fe3233ef3e58028a3ad8f28473653b78c6d56e088ea04fe7550c63d4d16b"}, - {file = "pycryptodomex-3.22.0-cp37-abi3-win32.whl", hash = "sha256:2cac9ed5c343bb3d0075db6e797e6112514764d08d667c74cb89b931aac9dddd"}, - {file = "pycryptodomex-3.22.0-cp37-abi3-win_amd64.whl", hash = "sha256:ff46212fda7ee86ec2f4a64016c994e8ad80f11ef748131753adb67e9b722ebd"}, - {file = "pycryptodomex-3.22.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:5bf3ce9211d2a9877b00b8e524593e2209e370a287b3d5e61a8c45f5198487e2"}, - {file = "pycryptodomex-3.22.0-pp27-pypy_73-win32.whl", hash = "sha256:684cb57812cd243217c3d1e01a720c5844b30f0b7b64bb1a49679f7e1e8a54ac"}, - {file = "pycryptodomex-3.22.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c8cffb03f5dee1026e3f892f7cffd79926a538c67c34f8b07c90c0bd5c834e27"}, - {file = "pycryptodomex-3.22.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:140b27caa68a36d0501b05eb247bd33afa5f854c1ee04140e38af63c750d4e39"}, - {file = "pycryptodomex-3.22.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:644834b1836bb8e1d304afaf794d5ae98a1d637bd6e140c9be7dd192b5374811"}, - {file = "pycryptodomex-3.22.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72c506aba3318505dbeecf821ed7b9a9f86f422ed085e2d79c4fba0ae669920a"}, - {file = "pycryptodomex-3.22.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7cd39f7a110c1ab97ce9ee3459b8bc615920344dc00e56d1b709628965fba3f2"}, - {file = "pycryptodomex-3.22.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e4eaaf6163ff13788c1f8f615ad60cdc69efac6d3bf7b310b21e8cfe5f46c801"}, - {file = "pycryptodomex-3.22.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eac39e237d65981554c2d4c6668192dc7051ad61ab5fc383ed0ba049e4007ca2"}, - {file = "pycryptodomex-3.22.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ab0d89d1761959b608952c7b347b0e76a32d1a5bb278afbaa10a7f3eaef9a0a"}, - {file = "pycryptodomex-3.22.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e64164f816f5e43fd69f8ed98eb28f98157faf68208cd19c44ed9d8e72d33e8"}, - {file = "pycryptodomex-3.22.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f005de31efad6f9acefc417296c641f13b720be7dbfec90edeaca601c0fab048"}, - {file = "pycryptodomex-3.22.0.tar.gz", hash = "sha256:a1da61bacc22f93a91cbe690e3eb2022a03ab4123690ab16c46abb693a9df63d"}, + {file = "pycryptodomex-3.23.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:add243d204e125f189819db65eed55e6b4713f70a7e9576c043178656529cec7"}, + {file = "pycryptodomex-3.23.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1c6d919fc8429e5cb228ba8c0d4d03d202a560b421c14867a65f6042990adc8e"}, + {file = "pycryptodomex-3.23.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:1c3a65ad441746b250d781910d26b7ed0a396733c6f2dbc3327bd7051ec8a541"}, + {file = "pycryptodomex-3.23.0-cp27-cp27m-win32.whl", hash = "sha256:47f6d318fe864d02d5e59a20a18834819596c4ed1d3c917801b22b92b3ffa648"}, + {file = "pycryptodomex-3.23.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:d9825410197a97685d6a1fa2a86196430b01877d64458a20e95d4fd00d739a08"}, + {file = "pycryptodomex-3.23.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:267a3038f87a8565bd834317dbf053a02055915acf353bf42ededb9edaf72010"}, + {file = "pycryptodomex-3.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886"}, + {file = "pycryptodomex-3.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d"}, + {file = "pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa"}, + {file = "pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8"}, + {file = "pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5"}, + {file = "pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314"}, + {file = "pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006"}, + {file = "pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462"}, + {file = "pycryptodomex-3.23.0-cp313-cp313t-win32.whl", hash = "sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328"}, + {file = "pycryptodomex-3.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708"}, + {file = "pycryptodomex-3.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4"}, + {file = "pycryptodomex-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6"}, + {file = "pycryptodomex-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545"}, + {file = "pycryptodomex-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587"}, + {file = "pycryptodomex-3.23.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c"}, + {file = "pycryptodomex-3.23.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c"}, + {file = "pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003"}, + {file = "pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744"}, + {file = "pycryptodomex-3.23.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd"}, + {file = "pycryptodomex-3.23.0-cp37-abi3-win32.whl", hash = "sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c"}, + {file = "pycryptodomex-3.23.0-cp37-abi3-win_amd64.whl", hash = "sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9"}, + {file = "pycryptodomex-3.23.0-cp37-abi3-win_arm64.whl", hash = "sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51"}, + {file = "pycryptodomex-3.23.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:febec69c0291efd056c65691b6d9a339f8b4bc43c6635b8699471248fe897fea"}, + {file = "pycryptodomex-3.23.0-pp27-pypy_73-win32.whl", hash = "sha256:c84b239a1f4ec62e9c789aafe0543f0594f0acd90c8d9e15bcece3efe55eca66"}, + {file = "pycryptodomex-3.23.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ebfff755c360d674306e5891c564a274a47953562b42fb74a5c25b8fc1fb1cb5"}, + {file = "pycryptodomex-3.23.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eca54f4bb349d45afc17e3011ed4264ef1cc9e266699874cdd1349c504e64798"}, + {file = "pycryptodomex-3.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2596e643d4365e14d0879dc5aafe6355616c61c2176009270f3048f6d9a61f"}, + {file = "pycryptodomex-3.23.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fdfac7cda115bca3a5abb2f9e43bc2fb66c2b65ab074913643803ca7083a79ea"}, + {file = "pycryptodomex-3.23.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:14c37aaece158d0ace436f76a7bb19093db3b4deade9797abfc39ec6cd6cc2fe"}, + {file = "pycryptodomex-3.23.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7de1e40a41a5d7f1ac42b6569b10bcdded34339950945948529067d8426d2785"}, + {file = "pycryptodomex-3.23.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bffc92138d75664b6d543984db7893a628559b9e78658563b0395e2a5fb47ed9"}, + {file = "pycryptodomex-3.23.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df027262368334552db2c0ce39706b3fb32022d1dce34673d0f9422df004b96a"}, + {file = "pycryptodomex-3.23.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e79f1aaff5a3a374e92eb462fa9e598585452135012e2945f96874ca6eeb1ff"}, + {file = "pycryptodomex-3.23.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:27e13c80ac9a0a1d050ef0a7e0a18cc04c8850101ec891815b6c5a0375e8a245"}, + {file = "pycryptodomex-3.23.0.tar.gz", hash = "sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da"}, ] [[package]] @@ -1819,14 +1712,14 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyparsing" -version = "3.2.2" +version = "3.2.3" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pyparsing-3.2.2-py3-none-any.whl", hash = "sha256:6ab05e1cb111cc72acc8ed811a3ca4c2be2af8d7b6df324347f04fd057d8d793"}, - {file = "pyparsing-3.2.2.tar.gz", hash = "sha256:2a857aee851f113c2de9d4bfd9061baea478cb0f1c7ca6cbf594942d6d111575"}, + {file = "pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf"}, + {file = "pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be"}, ] [package.extras] @@ -1900,14 +1793,14 @@ test = ["pytest", "pytest-cov"] [[package]] name = "pytest-mock" -version = "3.14.0" +version = "3.14.1" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, - {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, + {file = "pytest_mock-3.14.1-py3-none-any.whl", hash = "sha256:178aefcd11307d874b4cd3100344e7e2d888d9791a6a1d9bfe90fbc1b74fd1d0"}, + {file = "pytest_mock-3.14.1.tar.gz", hash = "sha256:159e9edac4c451ce77a5cdb9fc5d1100708d2dd4ba3c3df572f14097351af80e"}, ] [package.dependencies] @@ -1980,14 +1873,14 @@ requests = ">=2.28" [[package]] name = "pytz" -version = "2025.1" +version = "2025.2" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" groups = ["main"] files = [ - {file = "pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57"}, - {file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"}, + {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, + {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, ] [[package]] @@ -2216,29 +2109,29 @@ six = ">=1.7.0" [[package]] name = "rfc3161-client" -version = "1.0.1" +version = "1.0.2" description = "" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "rfc3161_client-1.0.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:75d8c9d255fa79b9ae4aa27cee519893599efd79f9e6c24a1194dd296ce1c210"}, - {file = "rfc3161_client-1.0.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:0d3db059fe08d8b6b06aff89e133fcc352ffea1a1dafadb116dda9dae59d0689"}, - {file = "rfc3161_client-1.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdef0c9d3213ca5b79d7f76ada48ae10c5011cb25abed2f6df07b344d16d1c28"}, - {file = "rfc3161_client-1.0.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c34ce4d7d2bf5207c54de3a771e757f1f8bb04a8469d3cef6aefe074841064d"}, - {file = "rfc3161_client-1.0.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4809f2fcfb5f8b42261a7b831929f62a297b584c8d1f4d242eae5e9447674b6"}, - {file = "rfc3161_client-1.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a644b220b7f0f0be7856f49b043651982bd76e7aa9eb17b3e4e303fde36ed5a1"}, - {file = "rfc3161_client-1.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:bb03a5a77b07adf766b7daac6cb8b7a8337ffc8f6d6046af74469973f52df8e1"}, - {file = "rfc3161_client-1.0.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:d6c6e4626780b1c531d32d6a126d6c27865b1eb59c65e8b0f1f8f94aa3205285"}, - {file = "rfc3161_client-1.0.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:912c2f049ce23d0f1c173b6fbd8673f964a27ad97907064dbc74f86dd0d95d15"}, - {file = "rfc3161_client-1.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:081211a1b602b6dff7feb314d39ca2229c8db4e8cf55eef0c35b460470f4b2bb"}, - {file = "rfc3161_client-1.0.1-cp39-abi3-win32.whl", hash = "sha256:59efa8fddf72a15e397276fe512dbfb99c0dc95032b495815bfc4f8f16302f2c"}, - {file = "rfc3161_client-1.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:5381a63d5ed5b3c257cb18aacf3f737b1a1ad6df634290fe689b6d601c61cd24"}, - {file = "rfc3161_client-1.0.1.tar.gz", hash = "sha256:1c951f3912b90c6d3f3505e644b74ee08543387253647b86459addbffb16f63f"}, + {file = "rfc3161_client-1.0.2-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:9cf9a8f813028ef2d5d737f738f27c7abe41a4c5c0570fbc2ddfd5e4d03aee7a"}, + {file = "rfc3161_client-1.0.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8db097d98b9e3bca4ca68babbeaed8436c4f8d455623c46821bf0cfd8492533f"}, + {file = "rfc3161_client-1.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8397241db132602e38bc6c4e416cb47d541528b6665aee9788705949487560f7"}, + {file = "rfc3161_client-1.0.2-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8fe3c05f050b18719dac4accce6fdae88e7d5309eb36292eac0cad2f989d159e"}, + {file = "rfc3161_client-1.0.2-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af30b5e46db8b88c1bf7eae182e1bd4080f5d2475044f6ae04ab545e0faaa217"}, + {file = "rfc3161_client-1.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a93b3b3f79f83fefd5399004d3cd522fe93f49dbbb4865dba2c6ac6d8190ab60"}, + {file = "rfc3161_client-1.0.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:714b5fd21b56b5d47136e4ca2ad346db26320a47b282b20d14337711e2bdec5b"}, + {file = "rfc3161_client-1.0.2-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:19cf1cdfa7a3c189d10e58ffdc9553f78972b45bce9dc713c78752b6dd696b5a"}, + {file = "rfc3161_client-1.0.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:24653746e2d3868ac53bb47a46d2b891ffddd7fa939954df47301566919ed7e3"}, + {file = "rfc3161_client-1.0.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5a2e502d60176c3d376a7c81a3748b96df64c3c7ff46934f8f0e35b72f9922d"}, + {file = "rfc3161_client-1.0.2-cp39-abi3-win32.whl", hash = "sha256:8cb9d6aa413362b98f40ce4c6667e69ae29a31c91c657547de99203e353ebc43"}, + {file = "rfc3161_client-1.0.2-cp39-abi3-win_amd64.whl", hash = "sha256:03bb5c92a59dd028959142a2dba8edfbf7575d3ccd74ac50eaf2c0ada45e3a40"}, + {file = "rfc3161_client-1.0.2.tar.gz", hash = "sha256:37c78277d78aab02baf17393c30f66d1c2ab1a398d3540b0657792c0ceb81858"}, ] [package.dependencies] -cryptography = ">=43,<45" +cryptography = ">=43,<46" [package.extras] dev = ["maturin (>=1.7,<2.0)", "rfc3161-client[doc,lint,test]"] @@ -2247,14 +2140,14 @@ test = ["coverage[toml]", "pretend", "pytest", "pytest-cov"] [[package]] name = "rich" -version = "13.9.4" +version = "14.0.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" groups = ["main"] files = [ - {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, - {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, + {file = "rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0"}, + {file = "rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725"}, ] [package.dependencies] @@ -2267,29 +2160,46 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rich-argparse" -version = "1.7.0" +version = "1.7.1" description = "Rich help formatters for argparse and optparse" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "rich_argparse-1.7.0-py3-none-any.whl", hash = "sha256:b8ec8943588e9731967f4f97b735b03dc127c416f480a083060433a97baf2fd3"}, - {file = "rich_argparse-1.7.0.tar.gz", hash = "sha256:f31d809c465ee43f367d599ccaf88b73bc2c4d75d74ed43f2d538838c53544ba"}, + {file = "rich_argparse-1.7.1-py3-none-any.whl", hash = "sha256:a8650b42e4a4ff72127837632fba6b7da40784842f08d7395eb67a9cbd7b4bf9"}, + {file = "rich_argparse-1.7.1.tar.gz", hash = "sha256:d7a493cde94043e41ea68fb43a74405fa178de981bf7b800f7a3bd02ac5c27be"}, ] [package.dependencies] rich = ">=11.0.0" +[[package]] +name = "roman-numerals-py" +version = "3.1.0" +description = "Manipulate well-formed Roman numerals" +optional = false +python-versions = ">=3.9" +groups = ["docs"] +markers = "python_version >= \"3.12\"" +files = [ + {file = "roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c"}, + {file = "roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d"}, +] + +[package.extras] +lint = ["mypy (==1.15.0)", "pyright (==1.1.394)", "ruff (==0.9.7)"] +test = ["pytest (>=8)"] + [[package]] name = "rsa" -version = "4.9" +version = "4.9.1" description = "Pure-Python RSA implementation" optional = false -python-versions = ">=3.6,<4" +python-versions = "<4,>=3.6" groups = ["main"] files = [ - {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, - {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, + {file = "rsa-4.9.1-py3-none-any.whl", hash = "sha256:68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762"}, + {file = "rsa-4.9.1.tar.gz", hash = "sha256:e7bdbfdb5497da4c07dfd35530e1a902659db6ff241e39d9953cad06ebd0ae75"}, ] [package.dependencies] @@ -2297,18 +2207,18 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruamel-yaml" -version = "0.18.10" +version = "0.18.12" 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" groups = ["main"] files = [ - {file = "ruamel.yaml-0.18.10-py3-none-any.whl", hash = "sha256:30f22513ab2301b3d2b577adc121c6471f28734d3d9728581245f1e76468b4f1"}, - {file = "ruamel.yaml-0.18.10.tar.gz", hash = "sha256:20c86ab29ac2153f80a428e1254a8adf686d3383df04490514ca3b79a362db58"}, + {file = "ruamel.yaml-0.18.12-py3-none-any.whl", hash = "sha256:790ba4c48b6a6e6b12b532a7308779eb12d2aaab3a80fdb8389216f28ea2b287"}, + {file = "ruamel.yaml-0.18.12.tar.gz", hash = "sha256:5a38fd5ce39d223bebb9e3a6779e86b9427a03fb0bf9f270060f8b149cffe5e2"}, ] [package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.14\""} [package.extras] docs = ["mercurial (>5.7)", "ryd"] @@ -2401,14 +2311,14 @@ files = [ [[package]] name = "s3transfer" -version = "0.11.4" +version = "0.13.0" description = "An Amazon S3 Transfer Manager" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "s3transfer-0.11.4-py3-none-any.whl", hash = "sha256:ac265fa68318763a03bf2dc4f39d5cbd6a9e178d81cc9483ad27da33637e320d"}, - {file = "s3transfer-0.11.4.tar.gz", hash = "sha256:559f161658e1cf0a911f45940552c696735f5c74e64362e515f333ebed87d679"}, + {file = "s3transfer-0.13.0-py3-none-any.whl", hash = "sha256:0148ef34d6dd964d0d8cf4311b2b21c474693e57c2e069ec708ce043d2b527be"}, + {file = "s3transfer-0.13.0.tar.gz", hash = "sha256:f5e6db74eb7776a37208001113ea7aa97695368242b364d73e91c981ac522177"}, ] [package.dependencies] @@ -2417,25 +2327,41 @@ botocore = ">=1.37.4,<2.0a.0" [package.extras] crt = ["botocore[crt] (>=1.37.4,<2.0a.0)"] +[[package]] +name = "secretstorage" +version = "3.3.3" +description = "Python bindings to FreeDesktop.org Secret Service API" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"}, + {file = "SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77"}, +] + +[package.dependencies] +cryptography = ">=2.0" +jeepney = ">=0.6" + [[package]] name = "selenium" -version = "4.30.0" +version = "4.33.0" description = "Official Python bindings for Selenium WebDriver" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "selenium-4.30.0-py3-none-any.whl", hash = "sha256:90bcd3be86a1762100a093b33e5e4530b328226da94208caadb15ce13243dffd"}, - {file = "selenium-4.30.0.tar.gz", hash = "sha256:16ab890fc7cb21a01e1b1e9a0fbaa9445fe30837eabc66e90b3bacf12138126a"}, + {file = "selenium-4.33.0-py3-none-any.whl", hash = "sha256:af9ea757813918bddfe05cc677bf63c8a0cd277ebf8474b3dd79caa5727fca85"}, + {file = "selenium-4.33.0.tar.gz", hash = "sha256:d90974db95d2cdeb34d2fb1b13f03dc904f53e6c5d228745b0635ada10cd625d"}, ] [package.dependencies] -certifi = ">=2021.10.8" -trio = ">=0.17,<1.0" -trio-websocket = ">=0.9,<1.0" -typing_extensions = ">=4.9,<5.0" -urllib3 = {version = ">=1.26,<3", extras = ["socks"]} -websocket-client = ">=1.8,<2.0" +certifi = ">=2025.4.26" +trio = ">=0.30.0,<0.31.0" +trio-websocket = ">=0.12.2,<0.13.0" +typing_extensions = ">=4.13.2,<4.14.0" +urllib3 = {version = ">=2.4.0,<2.5.0", extras = ["socks"]} +websocket-client = ">=1.8.0,<1.9.0" [[package]] name = "six" @@ -2463,14 +2389,14 @@ files = [ [[package]] name = "snowballstemmer" -version = "2.2.0" -description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +version = "3.0.1" +description = "This package provides 32 stemmers for 30 languages generated from Snowball algorithms." optional = false -python-versions = "*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*" groups = ["docs"] files = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, + {file = "snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064"}, + {file = "snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895"}, ] [[package]] @@ -2487,14 +2413,14 @@ files = [ [[package]] name = "soupsieve" -version = "2.6" +version = "2.7" description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.8" groups = ["main", "docs"] files = [ - {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, - {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, + {file = "soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4"}, + {file = "soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a"}, ] [[package]] @@ -2504,6 +2430,7 @@ description = "Python documentation generator" optional = false python-versions = ">=3.10" groups = ["docs"] +markers = "python_version < \"3.12\"" files = [ {file = "sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2"}, {file = "sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927"}, @@ -2533,6 +2460,43 @@ docs = ["sphinxcontrib-websupport"] lint = ["flake8 (>=6.0)", "mypy (==1.11.1)", "pyright (==1.1.384)", "pytest (>=6.0)", "ruff (==0.6.9)", "sphinx-lint (>=0.9)", "tomli (>=2)", "types-Pillow (==10.2.0.20240822)", "types-Pygments (==2.18.0.20240506)", "types-colorama (==0.4.15.20240311)", "types-defusedxml (==0.7.0.20240218)", "types-docutils (==0.21.0.20241005)", "types-requests (==2.32.0.20240914)", "types-urllib3 (==1.26.25.14)"] test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "setuptools (>=70.0)", "typing_extensions (>=4.9)"] +[[package]] +name = "sphinx" +version = "8.2.3" +description = "Python documentation generator" +optional = false +python-versions = ">=3.11" +groups = ["docs"] +markers = "python_version >= \"3.12\"" +files = [ + {file = "sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3"}, + {file = "sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348"}, +] + +[package.dependencies] +alabaster = ">=0.7.14" +babel = ">=2.13" +colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\""} +docutils = ">=0.20,<0.22" +imagesize = ">=1.3" +Jinja2 = ">=3.1" +packaging = ">=23.0" +Pygments = ">=2.17" +requests = ">=2.30.0" +roman-numerals-py = ">=1.0.0" +snowballstemmer = ">=2.2" +sphinxcontrib-applehelp = ">=1.0.7" +sphinxcontrib-devhelp = ">=1.0.6" +sphinxcontrib-htmlhelp = ">=2.0.6" +sphinxcontrib-jsmath = ">=1.0.1" +sphinxcontrib-qthelp = ">=1.0.6" +sphinxcontrib-serializinghtml = ">=1.1.9" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["betterproto (==2.0.0b6)", "mypy (==1.15.0)", "pypi-attestations (==0.0.21)", "pyright (==1.1.395)", "pytest (>=8.0)", "ruff (==0.9.9)", "sphinx-lint (>=0.9)", "types-Pillow (==10.2.0.20240822)", "types-Pygments (==2.19.0.20250219)", "types-colorama (==0.4.15.20240311)", "types-defusedxml (==0.7.0.20240218)", "types-docutils (==0.21.0.20241128)", "types-requests (==2.32.0.20241016)", "types-urllib3 (==1.26.25.14)"] +test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "pytest-xdist[psutil] (>=3.4)", "setuptools (>=70.0)", "typing_extensions (>=4.9)"] + [[package]] name = "sphinx-autoapi" version = "3.6.0" @@ -2738,14 +2702,14 @@ test = ["pytest"] [[package]] name = "starlette" -version = "0.46.1" +version = "0.47.0" description = "The little ASGI library that shines." optional = false python-versions = ">=3.9" groups = ["docs"] files = [ - {file = "starlette-0.46.1-py3-none-any.whl", hash = "sha256:77c74ed9d2720138b25875133f3a2dae6d854af2ec37dceb56aef370c1d8a227"}, - {file = "starlette-0.46.1.tar.gz", hash = "sha256:3c88d58ee4bd1bb807c0d1acb381838afc7752f9ddaec81bbe4383611d833230"}, + {file = "starlette-0.47.0-py3-none-any.whl", hash = "sha256:9d052d4933683af40ffd47c7465433570b4949dc937e20ad1d73b34e72f10c37"}, + {file = "starlette-0.47.0.tar.gz", hash = "sha256:1f64887e94a447fed5f23309fb6890ef23349b7e478faa7b24a851cd4eb844af"}, ] [package.dependencies] @@ -2756,14 +2720,14 @@ full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart [[package]] name = "telethon" -version = "1.39.0" +version = "1.40.0" description = "Full-featured Telegram client library for Python 3" optional = false python-versions = ">=3.5" groups = ["main"] files = [ - {file = "Telethon-1.39.0-py3-none-any.whl", hash = "sha256:aa9f394b94be144799a6f6a93ab463867bc7c63503ede9631751940a98f6c703"}, - {file = "telethon-1.39.0.tar.gz", hash = "sha256:35d4795d8c91deac515fb0bcb3723866b924de1c724e1d5c230460e96f284a63"}, + {file = "Telethon-1.40.0-py3-none-any.whl", hash = "sha256:146fd4cb2a7afa66bc67f9c2167756096a37b930f65711a3e7399ec9874dcfa7"}, + {file = "telethon-1.40.0.tar.gz", hash = "sha256:40e83326877a2e68b754d4b6d0d1ca5ac924110045b039e02660f2d67add97db"}, ] [package.dependencies] @@ -2852,14 +2816,14 @@ telegram = ["requests"] [[package]] name = "trio" -version = "0.29.0" +version = "0.30.0" description = "A friendly Python library for async concurrency and I/O" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "trio-0.29.0-py3-none-any.whl", hash = "sha256:d8c463f1a9cc776ff63e331aba44c125f423a5a13c684307e828d930e625ba66"}, - {file = "trio-0.29.0.tar.gz", hash = "sha256:ea0d3967159fc130acb6939a0be0e558e364fee26b5deeecc893a6b08c361bdf"}, + {file = "trio-0.30.0-py3-none-any.whl", hash = "sha256:3bf4f06b8decf8d3cf00af85f40a89824669e2d033bb32469d34840edcfc22a5"}, + {file = "trio-0.30.0.tar.gz", hash = "sha256:0781c857c0c81f8f51e0089929a26b5bb63d57f927728a5586f7e36171f064df"}, ] [package.dependencies] @@ -2891,15 +2855,16 @@ wsproto = ">=0.14" [[package]] name = "typing-extensions" -version = "4.12.2" +version = "4.13.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" -groups = ["main", "docs"] +groups = ["main", "dev", "docs"] 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"}, + {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, + {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, ] +markers = {dev = "python_version < \"3.11\""} [[package]] name = "typing-inspect" @@ -2977,14 +2942,14 @@ files = [ [[package]] name = "urllib3" -version = "2.3.0" +version = "2.4.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" groups = ["main", "docs"] files = [ - {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, - {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, + {file = "urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"}, + {file = "urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466"}, ] [package.dependencies] @@ -2998,14 +2963,14 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "uvicorn" -version = "0.34.0" +version = "0.34.3" description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.9" groups = ["docs"] files = [ - {file = "uvicorn-0.34.0-py3-none-any.whl", hash = "sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4"}, - {file = "uvicorn-0.34.0.tar.gz", hash = "sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9"}, + {file = "uvicorn-0.34.3-py3-none-any.whl", hash = "sha256:16246631db62bdfbf069b0645177d6e8a77ba950cfedbfd093acef9444e4d885"}, + {file = "uvicorn-0.34.3.tar.gz", hash = "sha256:35919a9a979d7a59334b6b10e05d77c1d0d574c50e0fc98b8b1a0f165708b55a"}, ] [package.dependencies] @@ -3014,18 +2979,18 @@ h11 = ">=0.8" typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} [package.extras] -standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"] +standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"] [[package]] name = "virtualenv" -version = "20.29.3" +version = "20.31.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "virtualenv-20.29.3-py3-none-any.whl", hash = "sha256:3e3d00f5807e83b234dfb6122bf37cfadf4be216c53a49ac059d02414f819170"}, - {file = "virtualenv-20.29.3.tar.gz", hash = "sha256:95e39403fcf3940ac45bc717597dba16110b74506131845d9b687d5e73d947ac"}, + {file = "virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11"}, + {file = "virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af"}, ] [package.dependencies] @@ -3035,54 +3000,7 @@ 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) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] - -[[package]] -name = "vk-api" -version = "11.9.9" -description = "Python модуль для создания скриптов для социальной сети Вконтакте (vk.com API wrapper)" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "vk_api-11.9.9-py3-none-any.whl", hash = "sha256:c71021506449afe5b9bbb1c4acb0d86b35a007ddc21678478e46fbbeabd1f3ef"}, - {file = "vk_api-11.9.9.tar.gz", hash = "sha256:c7741e40bc05980c91ed94c84542e1e7e7370e101b5eaa74222958d4130fe3c2"}, -] - -[package.dependencies] -requests = "*" - -[package.extras] -vkaudio = ["beautifulsoup4"] -vkstreaming = ["websocket-client"] - -[[package]] -name = "vk-url-scraper" -version = "0.3.27" -description = "Scrape VK URLs to fetch info and media - python API or command line tool." -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "vk-url-scraper-0.3.27.tar.gz", hash = "sha256:133d252ee94ceb1ee9515fb448d410ba471cbccc19e303b548076cd44cc81f30"}, - {file = "vk_url_scraper-0.3.27-py3-none-any.whl", hash = "sha256:c1c001b66b80343a991628080398d8a923e8753183b952f99f40ecafe1087070"}, -] - -[package.dependencies] -brotli = {version = ">=1.0.9", markers = "platform_python_implementation >= \"CPython\""} -certifi = {version = ">=2022.12.7", markers = "python_version >= \"3.6\""} -charset-normalizer = {version = ">=3.0.1", markers = "python_version >= \"3.6\""} -idna = {version = ">=3.4", markers = "python_version >= \"3.5\""} -mutagen = {version = ">=1.46.0", markers = "python_version >= \"3.7\""} -pycryptodomex = {version = ">=3.17", markers = "python_version >= \"2.7\" and python_version not in \"3.0, 3.1, 3.2, 3.3, 3.4\""} -requests = {version = ">=2.28.2", markers = "python_version >= \"3.7\" and python_version < \"4\""} -urllib3 = {version = ">=1.26.14", markers = "python_version >= \"2.7\" and python_version not in \"3.0, 3.1, 3.2, 3.3, 3.4, 3.5\""} -vk-api = ">=11.9.9" -websockets = {version = ">=10.4", markers = "python_version >= \"3.7\""} -yt-dlp = ">=2023.2.17" - -[package.extras] -dev = ["Sphinx (>=4.3.0,<5.1.0)", "black (>=22.3.0)", "flake8", "furo (>=2022.6.4.1)", "isort (>=5.10.1)", "mypy (>=0.961)", "myst-parser (>=0.15.2,<0.19.0)", "packaging", "pytest", "pytest-cov", "pytest-sphinx", "python-dotenv (>=0.21.1)", "setuptools", "sphinx-autobuild (>=2021.3.14)", "sphinx-autodoc-typehints", "sphinx-copybutton (>=0.5.0)", "twine (>=1.11.0)", "wheel"] +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) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"GraalVM\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] [[package]] name = "warcio" @@ -3105,83 +3023,83 @@ testing = ["hookdns", "httpbin (>=0.10.2)", "pytest", "pytest-cov", "requests", [[package]] name = "watchfiles" -version = "1.0.4" +version = "1.0.5" description = "Simple, modern and high performance file watching and code reload in python." optional = false python-versions = ">=3.9" groups = ["docs"] files = [ - {file = "watchfiles-1.0.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ba5bb3073d9db37c64520681dd2650f8bd40902d991e7b4cfaeece3e32561d08"}, - {file = "watchfiles-1.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f25d0ba0fe2b6d2c921cf587b2bf4c451860086534f40c384329fb96e2044d1"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47eb32ef8c729dbc4f4273baece89398a4d4b5d21a1493efea77a17059f4df8a"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:076f293100db3b0b634514aa0d294b941daa85fc777f9c698adb1009e5aca0b1"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1eacd91daeb5158c598fe22d7ce66d60878b6294a86477a4715154990394c9b3"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:13c2ce7b72026cfbca120d652f02c7750f33b4c9395d79c9790b27f014c8a5a2"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:90192cdc15ab7254caa7765a98132a5a41471cf739513cc9bcf7d2ffcc0ec7b2"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:278aaa395f405972e9f523bd786ed59dfb61e4b827856be46a42130605fd0899"}, - {file = "watchfiles-1.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a462490e75e466edbb9fc4cd679b62187153b3ba804868452ef0577ec958f5ff"}, - {file = "watchfiles-1.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8d0d0630930f5cd5af929040e0778cf676a46775753e442a3f60511f2409f48f"}, - {file = "watchfiles-1.0.4-cp310-cp310-win32.whl", hash = "sha256:cc27a65069bcabac4552f34fd2dce923ce3fcde0721a16e4fb1b466d63ec831f"}, - {file = "watchfiles-1.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:8b1f135238e75d075359cf506b27bf3f4ca12029c47d3e769d8593a2024ce161"}, - {file = "watchfiles-1.0.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2a9f93f8439639dc244c4d2902abe35b0279102bca7bbcf119af964f51d53c19"}, - {file = "watchfiles-1.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9eea33ad8c418847dd296e61eb683cae1c63329b6d854aefcd412e12d94ee235"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31f1a379c9dcbb3f09cf6be1b7e83b67c0e9faabed0471556d9438a4a4e14202"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab594e75644421ae0a2484554832ca5895f8cab5ab62de30a1a57db460ce06c6"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc2eb5d14a8e0d5df7b36288979176fbb39672d45184fc4b1c004d7c3ce29317"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f68d8e9d5a321163ddacebe97091000955a1b74cd43724e346056030b0bacee"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9ce064e81fe79faa925ff03b9f4c1a98b0bbb4a1b8c1b015afa93030cb21a49"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b77d5622ac5cc91d21ae9c2b284b5d5c51085a0bdb7b518dba263d0af006132c"}, - {file = "watchfiles-1.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1941b4e39de9b38b868a69b911df5e89dc43767feeda667b40ae032522b9b5f1"}, - {file = "watchfiles-1.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4f8c4998506241dedf59613082d1c18b836e26ef2a4caecad0ec41e2a15e4226"}, - {file = "watchfiles-1.0.4-cp311-cp311-win32.whl", hash = "sha256:4ebbeca9360c830766b9f0df3640b791be569d988f4be6c06d6fae41f187f105"}, - {file = "watchfiles-1.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:05d341c71f3d7098920f8551d4df47f7b57ac5b8dad56558064c3431bdfc0b74"}, - {file = "watchfiles-1.0.4-cp311-cp311-win_arm64.whl", hash = "sha256:32b026a6ab64245b584acf4931fe21842374da82372d5c039cba6bf99ef722f3"}, - {file = "watchfiles-1.0.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:229e6ec880eca20e0ba2f7e2249c85bae1999d330161f45c78d160832e026ee2"}, - {file = "watchfiles-1.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5717021b199e8353782dce03bd8a8f64438832b84e2885c4a645f9723bf656d9"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0799ae68dfa95136dde7c472525700bd48777875a4abb2ee454e3ab18e9fc712"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43b168bba889886b62edb0397cab5b6490ffb656ee2fcb22dec8bfeb371a9e12"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb2c46e275fbb9f0c92e7654b231543c7bbfa1df07cdc4b99fa73bedfde5c844"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:857f5fc3aa027ff5e57047da93f96e908a35fe602d24f5e5d8ce64bf1f2fc733"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55ccfd27c497b228581e2838d4386301227fc0cb47f5a12923ec2fe4f97b95af"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c11ea22304d17d4385067588123658e9f23159225a27b983f343fcffc3e796a"}, - {file = "watchfiles-1.0.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:74cb3ca19a740be4caa18f238298b9d472c850f7b2ed89f396c00a4c97e2d9ff"}, - {file = "watchfiles-1.0.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c7cce76c138a91e720d1df54014a047e680b652336e1b73b8e3ff3158e05061e"}, - {file = "watchfiles-1.0.4-cp312-cp312-win32.whl", hash = "sha256:b045c800d55bc7e2cadd47f45a97c7b29f70f08a7c2fa13241905010a5493f94"}, - {file = "watchfiles-1.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:c2acfa49dd0ad0bf2a9c0bb9a985af02e89345a7189be1efc6baa085e0f72d7c"}, - {file = "watchfiles-1.0.4-cp312-cp312-win_arm64.whl", hash = "sha256:22bb55a7c9e564e763ea06c7acea24fc5d2ee5dfc5dafc5cfbedfe58505e9f90"}, - {file = "watchfiles-1.0.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:8012bd820c380c3d3db8435e8cf7592260257b378b649154a7948a663b5f84e9"}, - {file = "watchfiles-1.0.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa216f87594f951c17511efe5912808dfcc4befa464ab17c98d387830ce07b60"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c9953cf85529c05b24705639ffa390f78c26449e15ec34d5339e8108c7c407"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7cf684aa9bba4cd95ecb62c822a56de54e3ae0598c1a7f2065d51e24637a3c5d"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f44a39aee3cbb9b825285ff979ab887a25c5d336e5ec3574f1506a4671556a8d"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38320582736922be8c865d46520c043bff350956dfc9fbaee3b2df4e1740a4b"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39f4914548b818540ef21fd22447a63e7be6e24b43a70f7642d21f1e73371590"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f12969a3765909cf5dc1e50b2436eb2c0e676a3c75773ab8cc3aa6175c16e902"}, - {file = "watchfiles-1.0.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:0986902677a1a5e6212d0c49b319aad9cc48da4bd967f86a11bde96ad9676ca1"}, - {file = "watchfiles-1.0.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:308ac265c56f936636e3b0e3f59e059a40003c655228c131e1ad439957592303"}, - {file = "watchfiles-1.0.4-cp313-cp313-win32.whl", hash = "sha256:aee397456a29b492c20fda2d8961e1ffb266223625346ace14e4b6d861ba9c80"}, - {file = "watchfiles-1.0.4-cp313-cp313-win_amd64.whl", hash = "sha256:d6097538b0ae5c1b88c3b55afa245a66793a8fec7ada6755322e465fb1a0e8cc"}, - {file = "watchfiles-1.0.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:d3452c1ec703aa1c61e15dfe9d482543e4145e7c45a6b8566978fbb044265a21"}, - {file = "watchfiles-1.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7b75fee5a16826cf5c46fe1c63116e4a156924d668c38b013e6276f2582230f0"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e997802d78cdb02623b5941830ab06f8860038faf344f0d288d325cc9c5d2ff"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0611d244ce94d83f5b9aff441ad196c6e21b55f77f3c47608dcf651efe54c4a"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9745a4210b59e218ce64c91deb599ae8775c8a9da4e95fb2ee6fe745fc87d01a"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4810ea2ae622add560f4aa50c92fef975e475f7ac4900ce5ff5547b2434642d8"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:740d103cd01458f22462dedeb5a3382b7f2c57d07ff033fbc9465919e5e1d0f3"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdbd912a61543a36aef85e34f212e5d2486e7c53ebfdb70d1e0b060cc50dd0bf"}, - {file = "watchfiles-1.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0bc80d91ddaf95f70258cf78c471246846c1986bcc5fd33ccc4a1a67fcb40f9a"}, - {file = "watchfiles-1.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab0311bb2ffcd9f74b6c9de2dda1612c13c84b996d032cd74799adb656af4e8b"}, - {file = "watchfiles-1.0.4-cp39-cp39-win32.whl", hash = "sha256:02a526ee5b5a09e8168314c905fc545c9bc46509896ed282aeb5a8ba9bd6ca27"}, - {file = "watchfiles-1.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:a5ae5706058b27c74bac987d615105da17724172d5aaacc6c362a40599b6de43"}, - {file = "watchfiles-1.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdcc92daeae268de1acf5b7befcd6cfffd9a047098199056c72e4623f531de18"}, - {file = "watchfiles-1.0.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d8d3d9203705b5797f0af7e7e5baa17c8588030aaadb7f6a86107b7247303817"}, - {file = "watchfiles-1.0.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdef5a1be32d0b07dcea3318a0be95d42c98ece24177820226b56276e06b63b0"}, - {file = "watchfiles-1.0.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:342622287b5604ddf0ed2d085f3a589099c9ae8b7331df3ae9845571586c4f3d"}, - {file = "watchfiles-1.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9fe37a2de80aa785d340f2980276b17ef697ab8db6019b07ee4fd28a8359d2f3"}, - {file = "watchfiles-1.0.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9d1ef56b56ed7e8f312c934436dea93bfa3e7368adfcf3df4c0da6d4de959a1e"}, - {file = "watchfiles-1.0.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b42cac65beae3a362629950c444077d1b44f1790ea2772beaea95451c086bb"}, - {file = "watchfiles-1.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e0227b8ed9074c6172cf55d85b5670199c99ab11fd27d2c473aa30aec67ee42"}, - {file = "watchfiles-1.0.4.tar.gz", hash = "sha256:6ba473efd11062d73e4f00c2b730255f9c1bdd73cd5f9fe5b5da8dbd4a717205"}, + {file = "watchfiles-1.0.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5c40fe7dd9e5f81e0847b1ea64e1f5dd79dd61afbedb57759df06767ac719b40"}, + {file = "watchfiles-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8c0db396e6003d99bb2d7232c957b5f0b5634bbd1b24e381a5afcc880f7373fb"}, + {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b551d4fb482fc57d852b4541f911ba28957d051c8776e79c3b4a51eb5e2a1b11"}, + {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:830aa432ba5c491d52a15b51526c29e4a4b92bf4f92253787f9726fe01519487"}, + {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a16512051a822a416b0d477d5f8c0e67b67c1a20d9acecb0aafa3aa4d6e7d256"}, + {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe0cbc787770e52a96c6fda6726ace75be7f840cb327e1b08d7d54eadc3bc85"}, + {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d363152c5e16b29d66cbde8fa614f9e313e6f94a8204eaab268db52231fe5358"}, + {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ee32c9a9bee4d0b7bd7cbeb53cb185cf0b622ac761efaa2eba84006c3b3a614"}, + {file = "watchfiles-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:29c7fd632ccaf5517c16a5188e36f6612d6472ccf55382db6c7fe3fcccb7f59f"}, + {file = "watchfiles-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e637810586e6fe380c8bc1b3910accd7f1d3a9a7262c8a78d4c8fb3ba6a2b3d"}, + {file = "watchfiles-1.0.5-cp310-cp310-win32.whl", hash = "sha256:cd47d063fbeabd4c6cae1d4bcaa38f0902f8dc5ed168072874ea11d0c7afc1ff"}, + {file = "watchfiles-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:86c0df05b47a79d80351cd179893f2f9c1b1cae49d96e8b3290c7f4bd0ca0a92"}, + {file = "watchfiles-1.0.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:237f9be419e977a0f8f6b2e7b0475ababe78ff1ab06822df95d914a945eac827"}, + {file = "watchfiles-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0da39ff917af8b27a4bdc5a97ac577552a38aac0d260a859c1517ea3dc1a7c4"}, + {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cfcb3952350e95603f232a7a15f6c5f86c5375e46f0bd4ae70d43e3e063c13d"}, + {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:68b2dddba7a4e6151384e252a5632efcaa9bc5d1c4b567f3cb621306b2ca9f63"}, + {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:95cf944fcfc394c5f9de794ce581914900f82ff1f855326f25ebcf24d5397418"}, + {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecf6cd9f83d7c023b1aba15d13f705ca7b7d38675c121f3cc4a6e25bd0857ee9"}, + {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:852de68acd6212cd6d33edf21e6f9e56e5d98c6add46f48244bd479d97c967c6"}, + {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5730f3aa35e646103b53389d5bc77edfbf578ab6dab2e005142b5b80a35ef25"}, + {file = "watchfiles-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:18b3bd29954bc4abeeb4e9d9cf0b30227f0f206c86657674f544cb032296acd5"}, + {file = "watchfiles-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ba5552a1b07c8edbf197055bc9d518b8f0d98a1c6a73a293bc0726dce068ed01"}, + {file = "watchfiles-1.0.5-cp311-cp311-win32.whl", hash = "sha256:2f1fefb2e90e89959447bc0420fddd1e76f625784340d64a2f7d5983ef9ad246"}, + {file = "watchfiles-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:b6e76ceb1dd18c8e29c73f47d41866972e891fc4cc7ba014f487def72c1cf096"}, + {file = "watchfiles-1.0.5-cp311-cp311-win_arm64.whl", hash = "sha256:266710eb6fddc1f5e51843c70e3bebfb0f5e77cf4f27129278c70554104d19ed"}, + {file = "watchfiles-1.0.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b5eb568c2aa6018e26da9e6c86f3ec3fd958cee7f0311b35c2630fa4217d17f2"}, + {file = "watchfiles-1.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0a04059f4923ce4e856b4b4e5e783a70f49d9663d22a4c3b3298165996d1377f"}, + {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e380c89983ce6e6fe2dd1e1921b9952fb4e6da882931abd1824c092ed495dec"}, + {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fe43139b2c0fdc4a14d4f8d5b5d967f7a2777fd3d38ecf5b1ec669b0d7e43c21"}, + {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee0822ce1b8a14fe5a066f93edd20aada932acfe348bede8aa2149f1a4489512"}, + {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a0dbcb1c2d8f2ab6e0a81c6699b236932bd264d4cef1ac475858d16c403de74d"}, + {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a2014a2b18ad3ca53b1f6c23f8cd94a18ce930c1837bd891262c182640eb40a6"}, + {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f6ae86d5cb647bf58f9f655fcf577f713915a5d69057a0371bc257e2553234"}, + {file = "watchfiles-1.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1a7bac2bde1d661fb31f4d4e8e539e178774b76db3c2c17c4bb3e960a5de07a2"}, + {file = "watchfiles-1.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ab626da2fc1ac277bbf752446470b367f84b50295264d2d313e28dc4405d663"}, + {file = "watchfiles-1.0.5-cp312-cp312-win32.whl", hash = "sha256:9f4571a783914feda92018ef3901dab8caf5b029325b5fe4558c074582815249"}, + {file = "watchfiles-1.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:360a398c3a19672cf93527f7e8d8b60d8275119c5d900f2e184d32483117a705"}, + {file = "watchfiles-1.0.5-cp312-cp312-win_arm64.whl", hash = "sha256:1a2902ede862969077b97523987c38db28abbe09fb19866e711485d9fbf0d417"}, + {file = "watchfiles-1.0.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0b289572c33a0deae62daa57e44a25b99b783e5f7aed81b314232b3d3c81a11d"}, + {file = "watchfiles-1.0.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a056c2f692d65bf1e99c41045e3bdcaea3cb9e6b5a53dcaf60a5f3bd95fc9763"}, + {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9dca99744991fc9850d18015c4f0438865414e50069670f5f7eee08340d8b40"}, + {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:894342d61d355446d02cd3988a7326af344143eb33a2fd5d38482a92072d9563"}, + {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab44e1580924d1ffd7b3938e02716d5ad190441965138b4aa1d1f31ea0877f04"}, + {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6f9367b132078b2ceb8d066ff6c93a970a18c3029cea37bfd7b2d3dd2e5db8f"}, + {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2e55a9b162e06e3f862fb61e399fe9f05d908d019d87bf5b496a04ef18a970a"}, + {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0125f91f70e0732a9f8ee01e49515c35d38ba48db507a50c5bdcad9503af5827"}, + {file = "watchfiles-1.0.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:13bb21f8ba3248386337c9fa51c528868e6c34a707f729ab041c846d52a0c69a"}, + {file = "watchfiles-1.0.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:839ebd0df4a18c5b3c1b890145b5a3f5f64063c2a0d02b13c76d78fe5de34936"}, + {file = "watchfiles-1.0.5-cp313-cp313-win32.whl", hash = "sha256:4a8ec1e4e16e2d5bafc9ba82f7aaecfeec990ca7cd27e84fb6f191804ed2fcfc"}, + {file = "watchfiles-1.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:f436601594f15bf406518af922a89dcaab416568edb6f65c4e5bbbad1ea45c11"}, + {file = "watchfiles-1.0.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2cfb371be97d4db374cba381b9f911dd35bb5f4c58faa7b8b7106c8853e5d225"}, + {file = "watchfiles-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a3904d88955fda461ea2531fcf6ef73584ca921415d5cfa44457a225f4a42bc1"}, + {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b7a21715fb12274a71d335cff6c71fe7f676b293d322722fe708a9ec81d91f5"}, + {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dfd6ae1c385ab481766b3c61c44aca2b3cd775f6f7c0fa93d979ddec853d29d5"}, + {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b659576b950865fdad31fa491d31d37cf78b27113a7671d39f919828587b429b"}, + {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1909e0a9cd95251b15bff4261de5dd7550885bd172e3536824bf1cf6b121e200"}, + {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:832ccc221927c860e7286c55c9b6ebcc0265d5e072f49c7f6456c7798d2b39aa"}, + {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85fbb6102b3296926d0c62cfc9347f6237fb9400aecd0ba6bbda94cae15f2b3b"}, + {file = "watchfiles-1.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:15ac96dd567ad6c71c71f7b2c658cb22b7734901546cd50a475128ab557593ca"}, + {file = "watchfiles-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4b6227351e11c57ae997d222e13f5b6f1f0700d84b8c52304e8675d33a808382"}, + {file = "watchfiles-1.0.5-cp39-cp39-win32.whl", hash = "sha256:974866e0db748ebf1eccab17862bc0f0303807ed9cda465d1324625b81293a18"}, + {file = "watchfiles-1.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:9848b21ae152fe79c10dd0197304ada8f7b586d3ebc3f27f43c506e5a52a863c"}, + {file = "watchfiles-1.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f59b870db1f1ae5a9ac28245707d955c8721dd6565e7f411024fa374b5362d1d"}, + {file = "watchfiles-1.0.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9475b0093767e1475095f2aeb1d219fb9664081d403d1dff81342df8cd707034"}, + {file = "watchfiles-1.0.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc533aa50664ebd6c628b2f30591956519462f5d27f951ed03d6c82b2dfd9965"}, + {file = "watchfiles-1.0.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fed1cd825158dcaae36acce7b2db33dcbfd12b30c34317a88b8ed80f0541cc57"}, + {file = "watchfiles-1.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:554389562c29c2c182e3908b149095051f81d28c2fec79ad6c8997d7d63e0009"}, + {file = "watchfiles-1.0.5-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a74add8d7727e6404d5dc4dcd7fac65d4d82f95928bbee0cf5414c900e86773e"}, + {file = "watchfiles-1.0.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb1489f25b051a89fae574505cc26360c8e95e227a9500182a7fe0afcc500ce0"}, + {file = "watchfiles-1.0.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0901429650652d3f0da90bad42bdafc1f9143ff3605633c455c999a2d786cac"}, + {file = "watchfiles-1.0.5.tar.gz", hash = "sha256:b7529b5dcc114679d43827d8c35a07c493ad6f083633d573d81c660abc5979e9"}, ] [package.dependencies] @@ -3210,7 +3128,7 @@ version = "15.0.1" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false python-versions = ">=3.9" -groups = ["main", "docs"] +groups = ["docs"] files = [ {file = "websockets-15.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b"}, {file = "websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205"}, @@ -3316,39 +3234,27 @@ h11 = ">=0.9.0,<1" [[package]] name = "yt-dlp" -version = "2025.3.21" +version = "2025.5.22" description = "A feature-rich command-line audio/video downloader" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "yt_dlp-2025.3.21-py3-none-any.whl", hash = "sha256:80d5ce15f9223e0c27020b861a4c5b72c6ba5d6c957c1b8fd2a022a69783f482"}, - {file = "yt_dlp-2025.3.21.tar.gz", hash = "sha256:5bcf47b2897254ea3816935a8dde47d243bff556782cced6b16a2b85e6b682ba"}, + {file = "yt_dlp-2025.5.22-py3-none-any.whl", hash = "sha256:a49c4b76afeaded6254c3e2b759d8d5a13271aa963d5fccb51fe059d1c313151"}, + {file = "yt_dlp-2025.5.22.tar.gz", hash = "sha256:ea73854c5dabc124f29a35a8fae9bc5d422ef3231bebeea2bdfa82ac191a9c29"}, ] [package.extras] build = ["build", "hatchling", "pip", "setuptools (>=71.0.2)", "wheel"] -curl-cffi = ["curl-cffi (==0.5.10) ; os_name == \"nt\" and implementation_name == \"cpython\"", "curl-cffi (>=0.5.10,!=0.6.*,<0.7.2) ; os_name != \"nt\" and implementation_name == \"cpython\""] +curl-cffi = ["curl-cffi (>=0.5.10,<0.6.dev0 || ==0.10.*) ; implementation_name == \"cpython\""] default = ["brotli ; implementation_name == \"cpython\"", "brotlicffi ; implementation_name != \"cpython\"", "certifi", "mutagen", "pycryptodomex", "requests (>=2.32.2,<3)", "urllib3 (>=1.26.17,<3)", "websockets (>=13.0)"] dev = ["autopep8 (>=2.0,<3.0)", "pre-commit", "pytest (>=8.1,<9.0)", "pytest-rerunfailures (>=14.0,<15.0)", "ruff (>=0.11.0,<0.12.0)"] -pyinstaller = ["pyinstaller (>=6.11.1)"] +pyinstaller = ["pyinstaller (>=6.13.0)"] secretstorage = ["cffi", "secretstorage"] static-analysis = ["autopep8 (>=2.0,<3.0)", "ruff (>=0.11.0,<0.12.0)"] test = ["pytest (>=8.1,<9.0)", "pytest-rerunfailures (>=14.0,<15.0)"] -[[package]] -name = "yt-dlp-get-pot" -version = "0.3.0" -description = "" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "yt_dlp_get_pot-0.3.0-py3-none-any.whl", hash = "sha256:a49a596a3e3c02cd9ce051192ea3fe8168cf24ece8954bed6aa331a87d86954f"}, - {file = "yt_dlp_get_pot-0.3.0.tar.gz", hash = "sha256:ac9530b9e7b3d667235b9119da475f595d2dc7e6f6bbf98b965011be454e8833"}, -] - [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "c612e9f98ca5199092141bb04a0de4cd5314a8fdc8cb12c1d63eafe26bbf16aa" +content-hash = "eb903c84f80d07c41e7dad7622a11ac43f585d7b94ee6e5d182b7a42772bc63a" diff --git a/pyproject.toml b/pyproject.toml index 86f385a..cc19a00 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,9 +43,7 @@ dependencies = [ "jinja2 (>=0.0.0)", "boto3 (>=1.28.0,<2.0.0)", "dataclasses-json (>=0.0.0)", - "yt-dlp (>=2025.3.21,<2026.0.0)", "numpy (==2.1.3)", - "vk-url-scraper (>=0.0.0)", "requests[socks] (>=0.0.0)", "warcio (>=0.0.0)", "jsonlines (>=0.0.0)", @@ -56,7 +54,9 @@ dependencies = [ "rfc3161-client (>=1.0.1,<2.0.0)", "cryptography (>44.0.1,<45.0.0)", "opentimestamps (>=0.4.5,<0.5.0)", - "bgutil-ytdlp-pot-provider (>=0.7.3,<0.8.0)", + "bgutil-ytdlp-pot-provider (>=1.0.0)", + "yt-dlp (>=2025.5.22,<2026.0.0)", + "secretstorage (>=3.3.3,<4.0.0)", ] [tool.poetry.group.dev.dependencies] diff --git a/src/auto_archiver/modules/vk_extractor/__init__.py b/src/auto_archiver/modules/vk_extractor/__init__.py deleted file mode 100644 index 0f9bcad..0000000 --- a/src/auto_archiver/modules/vk_extractor/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .vk_extractor import VkExtractor diff --git a/src/auto_archiver/modules/vk_extractor/__manifest__.py b/src/auto_archiver/modules/vk_extractor/__manifest__.py deleted file mode 100644 index ed16331..0000000 --- a/src/auto_archiver/modules/vk_extractor/__manifest__.py +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "VKontakte Extractor", - "type": ["extractor"], - "requires_setup": True, - "depends": ["core", "utils"], - "dependencies": { - "python": ["loguru", "vk_url_scraper"], - }, - "configs": { - "username": {"required": True, "help": "valid VKontakte username"}, - "password": {"required": True, "help": "valid VKontakte password"}, - "session_file": { - "default": "secrets/vk_config.v2.json", - "help": "valid VKontakte password", - }, - }, - "description": """ -The `VkExtractor` fetches posts, text, and images from VK (VKontakte) social media pages. -This archiver is specialized for `/wall` posts and uses the `VkScraper` library to extract -and download content. Note that VK videos are handled separately by the `YTDownloader`. - -### Features -- Extracts text, timestamps, and metadata from VK `/wall` posts. -- Downloads associated images and attaches them to the resulting `Metadata` object. -- Processes multiple segments of VK URLs that contain mixed content (e.g., wall, photo). -- Outputs structured metadata and media using `Metadata` and `Media` objects. - -### Setup -To use the `VkArchiver`, you must provide valid VKontakte login credentials and session information: -- **Username**: A valid VKontakte account username. -- **Password**: The corresponding password for the VKontakte account. -- **Session File**: Optional. Path to a session configuration file (`.json`) for persistent VK login. - -Credentials can be set in the configuration file or directly via environment variables. Ensure you -have access to the VKontakte API by creating an account at [VKontakte](https://vk.com/). -""", -} diff --git a/src/auto_archiver/modules/vk_extractor/vk_extractor.py b/src/auto_archiver/modules/vk_extractor/vk_extractor.py deleted file mode 100644 index 997b0a8..0000000 --- a/src/auto_archiver/modules/vk_extractor/vk_extractor.py +++ /dev/null @@ -1,43 +0,0 @@ -from loguru import logger -from vk_url_scraper import VkScraper - -from auto_archiver.utils.misc import dump_payload -from auto_archiver.core import Extractor -from auto_archiver.core import Metadata, Media - - -class VkExtractor(Extractor): - """ " - VK videos are handled by YTDownloader, this archiver gets posts text and images. - Currently only works for /wall posts - """ - - def setup(self) -> None: - self.vks = VkScraper(self.username, self.password, session_file=self.session_file) - - def download(self, item: Metadata) -> Metadata: - url = item.get_url() - - if "vk.com" not in item.netloc: - return False - - # some urls can contain multiple wall/photo/... parts and all will be fetched - vk_scrapes = self.vks.scrape(url) - if not len(vk_scrapes): - return False - logger.debug(f"VK: got {len(vk_scrapes)} scraped instances") - - result = Metadata() - for scrape in vk_scrapes: - if not result.get_title(): - result.set_title(scrape["text"]) - if not result.get_timestamp(): - result.set_timestamp(scrape["datetime"]) - - result.set_content(dump_payload(vk_scrapes)) - - filenames = self.vks.download_media(vk_scrapes, self.tmp_dir) - for filename in filenames: - result.add_media(Media(filename)) - - return result.success("vk") diff --git a/tests/extractors/test_vk_extractor.py b/tests/extractors/test_vk_extractor.py deleted file mode 100644 index 040e5f7..0000000 --- a/tests/extractors/test_vk_extractor.py +++ /dev/null @@ -1,77 +0,0 @@ -import pytest - -from auto_archiver.core import Metadata -from auto_archiver.modules.vk_extractor import VkExtractor - - -@pytest.fixture -def mock_vk_scraper(mocker): - """Fixture to mock VkScraper.""" - return mocker.patch("auto_archiver.modules.vk_extractor.vk_extractor.VkScraper") - - -@pytest.fixture -def vk_extractor(setup_module, mock_vk_scraper) -> VkExtractor: - """Fixture to initialize VkExtractor with mocked VkScraper.""" - extractor_module = "vk_extractor" - configs = { - "username": "name", - "password": "password123", - "session_file": "secrets/vk_config.v2.json", - } - vk = setup_module(extractor_module, configs) - vk.vks = mock_vk_scraper.return_value - return vk - - -def test_netloc(vk_extractor, metadata): - # metadata url set as: "https://example.com/" - assert vk_extractor.download(metadata) is False - - -def test_vk_url_but_scrape_returns_empty(vk_extractor, metadata): - metadata.set_url("https://vk.com/valid-wall") - vk_extractor.vks.scrape.return_value = [] - assert vk_extractor.download(metadata) is False - assert metadata.netloc == "vk.com" - vk_extractor.vks.scrape.assert_called_once_with(metadata.get_url()) - - -def test_successful_scrape_and_download(vk_extractor, metadata, mocker): - mock_scrapes = [ - {"text": "Post Title", "datetime": "2023-01-01T00:00:00", "id": 1}, - {"text": "Another Post", "datetime": "2023-01-02T00:00:00", "id": 2}, - ] - mock_filenames = ["image1.jpg", "image2.png"] - vk_extractor.vks.scrape.return_value = mock_scrapes - vk_extractor.vks.download_media.return_value = mock_filenames - metadata.set_url("https://vk.com/valid-wall") - result = vk_extractor.download(metadata) - # Test metadata - assert result.is_success() - assert result.status == "vk: success" - assert result.get_title() == "Post Title" - assert result.get_timestamp() == "2023-01-01T00:00:00+00:00" - assert "Another Post" in result.metadata["content"] - # Test Media objects - assert len(result.media) == 2 - assert result.media[0].filename == "image1.jpg" - assert result.media[1].filename == "image2.png" - vk_extractor.vks.download_media.assert_called_once_with(mock_scrapes, vk_extractor.tmp_dir) - - -def test_adds_first_title_and_timestamp(vk_extractor): - metadata = Metadata().set_url("https://vk.com/no-metadata") - metadata.set_url("https://vk.com/no-metadata") - mock_scrapes = [ - {"text": "value", "datetime": "2023-01-01T00:00:00"}, - {"text": "value2", "datetime": "2023-01-02T00:00:00"}, - ] - vk_extractor.vks.scrape.return_value = mock_scrapes - vk_extractor.vks.download_media.return_value = [] - result = vk_extractor.download(metadata) - - assert result.get_title() == "value" - # formatted timestamp - assert result.get_timestamp() == "2023-01-01T00:00:00+00:00" - assert result.is_success() From 2f36e50e0b2a298b796a69aa335831b8b4fa4020 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Mon, 2 Jun 2025 12:06:14 +0100 Subject: [PATCH 005/107] bumps browsertrix in docker image --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e51884f..8100f95 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM webrecorder/browsertrix-crawler:1.5.8 AS base +FROM webrecorder/browsertrix-crawler:1.6.1 AS base ENV RUNNING_IN_DOCKER=1 \ LANG=C.UTF-8 \ From 9ad6213efae318bae4bbbddc3e7e8330c88ba3c8 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Mon, 2 Jun 2025 12:47:31 +0100 Subject: [PATCH 006/107] npm version bump on scripts/settings --- scripts/settings/package-lock.json | 816 +++++++++++++++-------------- 1 file changed, 428 insertions(+), 388 deletions(-) diff --git a/scripts/settings/package-lock.json b/scripts/settings/package-lock.json index 3bec617..ebbac19 100644 --- a/scripts/settings/package-lock.json +++ b/scripts/settings/package-lock.json @@ -43,23 +43,23 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.3.tgz", + "integrity": "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==", "dev": true, "license": "MIT", "engines": { @@ -67,22 +67,22 @@ } }, "node_modules/@babel/core": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", - "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", + "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.10", - "@babel/types": "^7.26.10", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.4", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.27.4", + "@babel/types": "^7.27.3", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -105,13 +105,13 @@ "license": "MIT" }, "node_modules/@babel/generator": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz", - "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.3.tgz", + "integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.10", - "@babel/types": "^7.26.10", + "@babel/parser": "^7.27.3", + "@babel/types": "^7.27.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -121,14 +121,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -138,28 +138,28 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" }, "engines": { "node": ">=6.9.0" @@ -169,9 +169,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "license": "MIT", "engines": { @@ -179,27 +179,27 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "engines": { @@ -207,26 +207,26 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", - "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.4.tgz", + "integrity": "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.10" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", - "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.4.tgz", + "integrity": "sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.10" + "@babel/types": "^7.27.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -236,13 +236,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", - "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -252,13 +252,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", - "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -268,42 +268,39 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", - "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.4.tgz", + "integrity": "sha512-t3yaEOuGu9NlIZ+hIeGbBjFtZT7j2cb2tg0fuaJKeGotchRjjLfrBA9Kwf8quhpP1EUuxModQg04q/mBwyg8uA==", "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz", - "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.10", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -312,13 +309,13 @@ } }, "node_modules/@babel/types": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", - "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz", + "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -524,9 +521,9 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", - "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", "cpu": [ "ppc64" ], @@ -541,9 +538,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", - "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", "cpu": [ "arm" ], @@ -558,9 +555,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", - "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", "cpu": [ "arm64" ], @@ -575,9 +572,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", - "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", "cpu": [ "x64" ], @@ -592,9 +589,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", - "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", "cpu": [ "arm64" ], @@ -609,9 +606,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", - "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", "cpu": [ "x64" ], @@ -626,9 +623,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", - "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", "cpu": [ "arm64" ], @@ -643,9 +640,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", - "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", "cpu": [ "x64" ], @@ -660,9 +657,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", - "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", "cpu": [ "arm" ], @@ -677,9 +674,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", - "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", "cpu": [ "arm64" ], @@ -694,9 +691,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", - "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", "cpu": [ "ia32" ], @@ -711,9 +708,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", - "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", "cpu": [ "loong64" ], @@ -728,9 +725,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", - "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", "cpu": [ "mips64el" ], @@ -745,9 +742,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", - "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", "cpu": [ "ppc64" ], @@ -762,9 +759,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", - "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", "cpu": [ "riscv64" ], @@ -779,9 +776,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", - "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", "cpu": [ "s390x" ], @@ -796,9 +793,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", - "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", "cpu": [ "x64" ], @@ -813,9 +810,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", - "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", "cpu": [ "arm64" ], @@ -830,9 +827,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", - "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", "cpu": [ "x64" ], @@ -847,9 +844,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", - "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", "cpu": [ "arm64" ], @@ -864,9 +861,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", - "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", "cpu": [ "x64" ], @@ -881,9 +878,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", - "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", "cpu": [ "x64" ], @@ -898,9 +895,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", - "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", "cpu": [ "arm64" ], @@ -915,9 +912,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", - "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", "cpu": [ "ia32" ], @@ -932,9 +929,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", - "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", "cpu": [ "x64" ], @@ -997,9 +994,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.8.tgz", - "integrity": "sha512-vjP4+A1ybyCRhDZC7r5EPWu/gLseFZxaGyPdDl94vzVvk6Yj6gahdaqcjbhkaCrJjdZj90m3VioltWPAnWF/zw==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.12.tgz", + "integrity": "sha512-M7IkG4LqSJfkY+thlQQHNkcS5NdmMDwLq/2RKoW40XR0mv/2BYb6X8fRnyaxP4zGdPD2M4MQdbzKihSVormJ7Q==", "license": "MIT", "funding": { "type": "opencollective", @@ -1007,9 +1004,9 @@ } }, "node_modules/@mui/icons-material": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.8.tgz", - "integrity": "sha512-LKGWiLWRyoOw3dWxZQ+lV//mK+4DVTTAiLd2ljmJdD6XV0rDB8JFKjRD9nyn9cJAU5XgWnii7ZR3c93ttUnMKg==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.12.tgz", + "integrity": "sha512-ILTe3A2te0+Vb9TG4P1AZVmZFOjDDCV/b2nBmV1rNOmSu3Q/xkHghW+yMhMffwHcXklMlcajMlc4iFSkPbrTKw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0" @@ -1022,7 +1019,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@mui/material": "^6.4.8", + "@mui/material": "^6.4.12", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -1033,16 +1030,16 @@ } }, "node_modules/@mui/material": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.8.tgz", - "integrity": "sha512-5S9UTjKZZBd9GfbcYh/nYfD9cv6OXmj5Y7NgKYfk7JcSoshp8/pW5zP4wecRiroBSZX8wcrywSgogpVNO+5W0Q==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.12.tgz", + "integrity": "sha512-VqoLNS5UaNqoS1FybezZR/PaAvzbTmRe0Mx//afXbolIah43eozpX2FckaFffLvMoiSIyxx1+AMHyENTr2Es0Q==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/core-downloads-tracker": "^6.4.8", - "@mui/system": "^6.4.8", + "@mui/core-downloads-tracker": "^6.4.12", + "@mui/system": "^6.4.12", "@mui/types": "~7.2.24", - "@mui/utils": "^6.4.8", + "@mui/utils": "^6.4.9", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", @@ -1061,7 +1058,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^6.4.8", + "@mui/material-pigment-css": "^6.4.12", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -1082,13 +1079,13 @@ } }, "node_modules/@mui/private-theming": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.8.tgz", - "integrity": "sha512-sWwQoNSn6elsPTAtSqCf+w5aaGoh7AASURNmpy+QTTD/zwJ0Jgwt0ZaaP6mXq2IcgHxYnYloM/+vJgHPMkRKTQ==", + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.9.tgz", + "integrity": "sha512-LktcVmI5X17/Q5SkwjCcdOLBzt1hXuc14jYa7NPShog0GBDCDvKtcnP0V7a2s6EiVRlv7BzbWEJzH6+l/zaCxw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/utils": "^6.4.8", + "@mui/utils": "^6.4.9", "prop-types": "^15.8.1" }, "engines": { @@ -1109,9 +1106,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.8.tgz", - "integrity": "sha512-oyjx1b1FvUCI85ZMO4trrjNxGm90eLN3Ohy0AP/SqK5gWvRQg1677UjNf7t6iETOKAleHctJjuq0B3aXO2gtmw==", + "version": "6.4.11", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.11.tgz", + "integrity": "sha512-74AUmlHXaGNbyUqdK/+NwDJOZqgRQw6BcNvhoWYLq3LGbLTkE+khaJ7soz6cIabE4CPYqO2/QAIU1Z/HEjjpcw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", @@ -1143,16 +1140,16 @@ } }, "node_modules/@mui/system": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.8.tgz", - "integrity": "sha512-gV7iBHoqlsIenU2BP0wq14BefRoZcASZ/4LeyuQglayBl+DfLX5rEd3EYR3J409V2EZpR0NOM1LATAGlNk2cyA==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.12.tgz", + "integrity": "sha512-fgEfm1qxpKCztndESeL1L0sLwA2c7josZ2w42D8OM3pbLee4bH2twEjoMo6qf7z2rNw1Uc9EU9haXeMoq0oTdQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/private-theming": "^6.4.8", - "@mui/styled-engine": "^6.4.8", + "@mui/private-theming": "^6.4.9", + "@mui/styled-engine": "^6.4.11", "@mui/types": "~7.2.24", - "@mui/utils": "^6.4.8", + "@mui/utils": "^6.4.9", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -1197,9 +1194,9 @@ } }, "node_modules/@mui/utils": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.4.8.tgz", - "integrity": "sha512-C86gfiZ5BfZ51KqzqoHi1WuuM2QdSKoFhbkZeAfQRB+jCc4YNhhj11UXFVMMsqBgZ+Zy8IHNJW3M9Wj/LOwRXQ==", + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.4.9.tgz", + "integrity": "sha512-Y12Q9hbK9g+ZY0T3Rxrx9m2m10gaphDuUMgWxyV5kNJevVxXYCLclYUCC9vXaIk1/NdNDTcW2Yfr2OGvNFNmHg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", @@ -1236,10 +1233,17 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.9", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.9.tgz", + "integrity": "sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==", + "dev": true, + "license": "MIT" + }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.37.0.tgz", - "integrity": "sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", + "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", "cpu": [ "arm" ], @@ -1251,9 +1255,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.37.0.tgz", - "integrity": "sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", + "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", "cpu": [ "arm64" ], @@ -1265,9 +1269,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.37.0.tgz", - "integrity": "sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", + "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", "cpu": [ "arm64" ], @@ -1279,9 +1283,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.37.0.tgz", - "integrity": "sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", + "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", "cpu": [ "x64" ], @@ -1293,9 +1297,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.37.0.tgz", - "integrity": "sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz", + "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==", "cpu": [ "arm64" ], @@ -1307,9 +1311,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.37.0.tgz", - "integrity": "sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz", + "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==", "cpu": [ "x64" ], @@ -1321,9 +1325,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.37.0.tgz", - "integrity": "sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz", + "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==", "cpu": [ "arm" ], @@ -1335,9 +1339,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.37.0.tgz", - "integrity": "sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz", + "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==", "cpu": [ "arm" ], @@ -1349,9 +1353,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.37.0.tgz", - "integrity": "sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz", + "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==", "cpu": [ "arm64" ], @@ -1363,9 +1367,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.37.0.tgz", - "integrity": "sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz", + "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==", "cpu": [ "arm64" ], @@ -1377,9 +1381,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.37.0.tgz", - "integrity": "sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz", + "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==", "cpu": [ "loong64" ], @@ -1391,9 +1395,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.37.0.tgz", - "integrity": "sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz", + "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==", "cpu": [ "ppc64" ], @@ -1405,9 +1409,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.37.0.tgz", - "integrity": "sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz", + "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==", "cpu": [ "riscv64" ], @@ -1419,9 +1423,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.37.0.tgz", - "integrity": "sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz", + "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==", "cpu": [ "riscv64" ], @@ -1433,9 +1437,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.37.0.tgz", - "integrity": "sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz", + "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==", "cpu": [ "s390x" ], @@ -1447,9 +1451,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.37.0.tgz", - "integrity": "sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", + "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", "cpu": [ "x64" ], @@ -1461,9 +1465,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.37.0.tgz", - "integrity": "sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", + "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", "cpu": [ "x64" ], @@ -1475,9 +1479,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.37.0.tgz", - "integrity": "sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz", + "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==", "cpu": [ "arm64" ], @@ -1489,9 +1493,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.37.0.tgz", - "integrity": "sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz", + "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==", "cpu": [ "ia32" ], @@ -1503,9 +1507,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.37.0.tgz", - "integrity": "sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz", + "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==", "cpu": [ "x64" ], @@ -1531,9 +1535,9 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, "license": "MIT", "dependencies": { @@ -1552,9 +1556,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", "dev": true, "license": "MIT", "dependencies": { @@ -1622,18 +1626,18 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.0.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.12.tgz", - "integrity": "sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==", + "version": "19.1.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.6.tgz", + "integrity": "sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q==", "license": "MIT", "dependencies": { "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz", - "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==", + "version": "19.1.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.5.tgz", + "integrity": "sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1662,17 +1666,18 @@ "license": "ISC" }, "node_modules/@vitejs/plugin-react": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", - "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.5.0.tgz", + "integrity": "sha512-JuLWaEqypaJmOJPLWwO335Ig6jSgC1FTONCWAxnqcQthLTK/Yc9aH6hr9z/87xciejbQcnP3GnA1FWUSWeXaeg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.26.10", "@babel/plugin-transform-react-jsx-self": "^7.25.9", "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@rolldown/pluginutils": "1.0.0-beta.9", "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.2" + "react-refresh": "^0.17.0" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -1720,9 +1725,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", + "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", "dev": true, "funding": [ { @@ -1740,10 +1745,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001718", + "electron-to-chromium": "^1.5.160", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -1762,9 +1767,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001707", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", - "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", + "version": "1.0.30001720", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz", + "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==", "dev": true, "funding": [ { @@ -1889,9 +1894,9 @@ "license": "MIT" }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -1951,9 +1956,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.123", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz", - "integrity": "sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==", + "version": "1.5.161", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz", + "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==", "dev": true, "license": "ISC" }, @@ -1967,9 +1972,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", - "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -1980,31 +1985,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.1", - "@esbuild/android-arm": "0.25.1", - "@esbuild/android-arm64": "0.25.1", - "@esbuild/android-x64": "0.25.1", - "@esbuild/darwin-arm64": "0.25.1", - "@esbuild/darwin-x64": "0.25.1", - "@esbuild/freebsd-arm64": "0.25.1", - "@esbuild/freebsd-x64": "0.25.1", - "@esbuild/linux-arm": "0.25.1", - "@esbuild/linux-arm64": "0.25.1", - "@esbuild/linux-ia32": "0.25.1", - "@esbuild/linux-loong64": "0.25.1", - "@esbuild/linux-mips64el": "0.25.1", - "@esbuild/linux-ppc64": "0.25.1", - "@esbuild/linux-riscv64": "0.25.1", - "@esbuild/linux-s390x": "0.25.1", - "@esbuild/linux-x64": "0.25.1", - "@esbuild/netbsd-arm64": "0.25.1", - "@esbuild/netbsd-x64": "0.25.1", - "@esbuild/openbsd-arm64": "0.25.1", - "@esbuild/openbsd-x64": "0.25.1", - "@esbuild/sunos-x64": "0.25.1", - "@esbuild/win32-arm64": "0.25.1", - "@esbuild/win32-ia32": "0.25.1", - "@esbuild/win32-x64": "0.25.1" + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" } }, "node_modules/escalade": { @@ -2045,6 +2050,21 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "license": "MIT" }, + "node_modules/fdir": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", + "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -2977,6 +2997,19 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -3095,22 +3128,22 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", + "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", "dev": true, "funding": [ { @@ -3128,7 +3161,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -3154,9 +3187,9 @@ "license": "MIT" }, "node_modules/property-information": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", - "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", "license": "MIT", "funding": { "type": "github", @@ -3185,9 +3218,9 @@ } }, "node_modules/react-is": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", - "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==", + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz", + "integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==", "license": "MIT" }, "node_modules/react-markdown": { @@ -3218,9 +3251,9 @@ } }, "node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", "dev": true, "license": "MIT", "engines": { @@ -3243,12 +3276,6 @@ "react-dom": ">=16.6.0" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, "node_modules/remark-parse": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", @@ -3266,9 +3293,9 @@ } }, "node_modules/remark-rehype": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz", - "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==", + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -3312,13 +3339,13 @@ } }, "node_modules/rollup": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.37.0.tgz", - "integrity": "sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", + "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.7" }, "bin": { "rollup": "dist/bin/rollup" @@ -3328,36 +3355,29 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.37.0", - "@rollup/rollup-android-arm64": "4.37.0", - "@rollup/rollup-darwin-arm64": "4.37.0", - "@rollup/rollup-darwin-x64": "4.37.0", - "@rollup/rollup-freebsd-arm64": "4.37.0", - "@rollup/rollup-freebsd-x64": "4.37.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.37.0", - "@rollup/rollup-linux-arm-musleabihf": "4.37.0", - "@rollup/rollup-linux-arm64-gnu": "4.37.0", - "@rollup/rollup-linux-arm64-musl": "4.37.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.37.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.37.0", - "@rollup/rollup-linux-riscv64-gnu": "4.37.0", - "@rollup/rollup-linux-riscv64-musl": "4.37.0", - "@rollup/rollup-linux-s390x-gnu": "4.37.0", - "@rollup/rollup-linux-x64-gnu": "4.37.0", - "@rollup/rollup-linux-x64-musl": "4.37.0", - "@rollup/rollup-win32-arm64-msvc": "4.37.0", - "@rollup/rollup-win32-ia32-msvc": "4.37.0", - "@rollup/rollup-win32-x64-msvc": "4.37.0", + "@rollup/rollup-android-arm-eabi": "4.41.1", + "@rollup/rollup-android-arm64": "4.41.1", + "@rollup/rollup-darwin-arm64": "4.41.1", + "@rollup/rollup-darwin-x64": "4.41.1", + "@rollup/rollup-freebsd-arm64": "4.41.1", + "@rollup/rollup-freebsd-x64": "4.41.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", + "@rollup/rollup-linux-arm-musleabihf": "4.41.1", + "@rollup/rollup-linux-arm64-gnu": "4.41.1", + "@rollup/rollup-linux-arm64-musl": "4.41.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-musl": "4.41.1", + "@rollup/rollup-linux-s390x-gnu": "4.41.1", + "@rollup/rollup-linux-x64-gnu": "4.41.1", + "@rollup/rollup-linux-x64-musl": "4.41.1", + "@rollup/rollup-win32-arm64-msvc": "4.41.1", + "@rollup/rollup-win32-ia32-msvc": "4.41.1", + "@rollup/rollup-win32-x64-msvc": "4.41.1", "fsevents": "~2.3.2" } }, - "node_modules/rollup/node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true, - "license": "MIT" - }, "node_modules/scheduler": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", @@ -3453,6 +3473,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3493,9 +3530,9 @@ "license": "0BSD" }, "node_modules/typescript": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3653,15 +3690,18 @@ } }, "node_modules/vite": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.3.tgz", - "integrity": "sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==", + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", "postcss": "^8.5.3", - "rollup": "^4.30.1" + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" }, "bin": { "vite": "bin/vite.js" @@ -3749,15 +3789,15 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" } }, "node_modules/zwitch": { From 258e56aa26c66822935f6ed04656635f8f34c70f Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Mon, 2 Jun 2025 12:52:26 +0100 Subject: [PATCH 007/107] poetry updates --- poetry.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 550b2aa..15573ce 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. [[package]] name = "accessible-pygments" @@ -602,7 +602,7 @@ description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["main", "dev", "docs"] -markers = "python_version < \"3.11\"" +markers = "python_version == \"3.10\"" files = [ {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, @@ -2180,7 +2180,7 @@ description = "Manipulate well-formed Roman numerals" optional = false python-versions = ">=3.9" groups = ["docs"] -markers = "python_version >= \"3.12\"" +markers = "python_version == \"3.12\"" files = [ {file = "roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c"}, {file = "roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d"}, @@ -2467,7 +2467,7 @@ description = "Python documentation generator" optional = false python-versions = ">=3.11" groups = ["docs"] -markers = "python_version >= \"3.12\"" +markers = "python_version == \"3.12\"" files = [ {file = "sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3"}, {file = "sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348"}, @@ -2756,7 +2756,7 @@ description = "A lil' TOML parser" optional = false python-versions = ">=3.8" groups = ["dev", "docs"] -markers = "python_version < \"3.11\"" +markers = "python_version == \"3.10\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, @@ -2864,7 +2864,7 @@ files = [ {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, ] -markers = {dev = "python_version < \"3.11\""} +markers = {dev = "python_version == \"3.10\""} [[package]] name = "typing-inspect" From 4aae5047f5d0c3149df7ebe492cab9eb05ebc2d7 Mon Sep 17 00:00:00 2001 From: Dave Mateer Date: Mon, 2 Jun 2025 12:53:21 +0100 Subject: [PATCH 008/107] Changed log level on gsheet_feeder_db started from warning to info (#301) --- src/auto_archiver/modules/gsheet_feeder_db/gsheet_feeder_db.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auto_archiver/modules/gsheet_feeder_db/gsheet_feeder_db.py b/src/auto_archiver/modules/gsheet_feeder_db/gsheet_feeder_db.py index 7ad5734..04a7336 100644 --- a/src/auto_archiver/modules/gsheet_feeder_db/gsheet_feeder_db.py +++ b/src/auto_archiver/modules/gsheet_feeder_db/gsheet_feeder_db.py @@ -98,7 +98,7 @@ class GsheetsFeederDB(Feeder, Database): return missing def started(self, item: Metadata) -> None: - logger.warning(f"STARTED {item}") + logger.info(f"STARTED {item}") gw, row = self._retrieve_gsheet(item) gw.set_cell(row, "status", "Archive in progress") From b9f7927a3b082a2bed80fde883ed04f771a8de74 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Mon, 2 Jun 2025 19:14:09 +0100 Subject: [PATCH 009/107] closes 305 and further fixes finding local downloads from uncommon ytdlp extractors --- .../generic_extractor/generic_extractor.py | 48 ++++++++++++++----- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/src/auto_archiver/modules/generic_extractor/generic_extractor.py b/src/auto_archiver/modules/generic_extractor/generic_extractor.py index 1049907..2941270 100644 --- a/src/auto_archiver/modules/generic_extractor/generic_extractor.py +++ b/src/auto_archiver/modules/generic_extractor/generic_extractor.py @@ -1,3 +1,4 @@ +import mimetypes import shutil import sys import datetime @@ -11,6 +12,7 @@ from urllib.request import urlretrieve import yt_dlp from yt_dlp.extractor.common import InfoExtractor +from yt_dlp.utils import MaxDownloadsReached import pysubs2 from loguru import logger @@ -362,7 +364,12 @@ class GenericExtractor(Extractor): # this time download ydl.params["getcomments"] = self.comments # TODO: for playlist or long lists of videos, how to download one at a time so they can be stored before the next one is downloaded? - data = ydl.extract_info(url, ie_key=info_extractor.ie_key(), download=True) + try: + data = ydl.extract_info(url, ie_key=info_extractor.ie_key(), download=True) + except MaxDownloadsReached: # proceed as normal once MaxDownloadsReached is raised + pass + logger.success(data) + if "entries" in data: entries = data.get("entries", []) if not len(entries): @@ -372,14 +379,25 @@ class GenericExtractor(Extractor): entries = [data] result = Metadata() + def _helper_get_filename(entry: dict) -> str: + entry_url = entry.get("url") + + filename = ydl.prepare_filename(entry) + base_filename, _ = os.path.splitext(filename) # '/get/path/to/file' ignore '.ext' + directory = os.path.dirname(base_filename) # '/get/path/to' + basename = os.path.basename(base_filename) # 'file' + for f in os.listdir(directory): + if f.startswith(basename) or (entry_url and os.path.splitext(f)[0] in entry_url) and "video/" in (mimetypes.guess_type(f)[0] or ""): + return os.path.join(directory, f) + return False + for entry in entries: try: - filename = ydl.prepare_filename(entry) - if not os.path.exists(filename): - filename = filename.split(".")[0] + ".mkv" + filename = _helper_get_filename(entry) + logger.warning(f"Using filename {filename} for entry {entry.get('id', 'unknown')}") - if not os.path.exists(filename): - logger.warning(f"File {filename} does not exist (see yt-dlp logs), skipping this entry.") + if not filename or not os.path.exists(filename): + # file was not downloaded or could not be retrieved, example: sensitive videos on YT without using cookies. continue new_media = Media(filename) @@ -460,6 +478,13 @@ class GenericExtractor(Extractor): dropin_submodule = self.dropin_for_name(info_extractor.ie_key()) + def _helper_for_successful_extract_info(data, info_extractor, url, ydl): + if data.get("is_live", False) and not self.livestreams: + logger.warning("Livestream detected, skipping due to 'livestreams' configuration setting") + return False + # it's a valid video, that the youtubdedl can download out of the box + return self.get_metadata_for_video(data, info_extractor, url, ydl) + try: if dropin_submodule and dropin_submodule.skip_ytdlp_download(url, info_extractor): logger.debug(f"Skipping using ytdlp to download files for {info_extractor.ie_key()}") @@ -467,11 +492,12 @@ class GenericExtractor(Extractor): # don't download since it can be a live stream data = ydl.extract_info(url, ie_key=info_extractor.ie_key(), download=False) - if data.get("is_live", False) and not self.livestreams: - logger.warning("Livestream detected, skipping due to 'livestreams' configuration setting") - return False - # it's a valid video, that the youtubdedl can download out of the box - result = self.get_metadata_for_video(data, info_extractor, url, ydl) + + result = _helper_for_successful_extract_info(data, info_extractor, url, ydl) + + except MaxDownloadsReached: + # yt-dlp raises an error when the max downloads limit is reached, and it shouldn't for our purposes, so we consider that a success + result = _helper_for_successful_extract_info(data, info_extractor, url, ydl) except Exception as e: if info_extractor.IE_NAME == "generic": From dd4e372703105edc202d38b67496435b54a21c7d Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Mon, 2 Jun 2025 19:33:53 +0100 Subject: [PATCH 010/107] use ffmpeg -bitexact to reduce duplicate content storing --- .../modules/generic_extractor/generic_extractor.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/auto_archiver/modules/generic_extractor/generic_extractor.py b/src/auto_archiver/modules/generic_extractor/generic_extractor.py index 2941270..9a75352 100644 --- a/src/auto_archiver/modules/generic_extractor/generic_extractor.py +++ b/src/auto_archiver/modules/generic_extractor/generic_extractor.py @@ -394,12 +394,13 @@ class GenericExtractor(Extractor): for entry in entries: try: filename = _helper_get_filename(entry) - logger.warning(f"Using filename {filename} for entry {entry.get('id', 'unknown')}") if not filename or not os.path.exists(filename): # file was not downloaded or could not be retrieved, example: sensitive videos on YT without using cookies. continue + logger.debug(f"Using filename {filename} for entry {entry.get('id', 'unknown')}") + new_media = Media(filename) for x in ["duration", "original_url", "fulltitle", "description", "upload_date"]: if x in entry: @@ -551,6 +552,7 @@ class GenericExtractor(Extractor): "--write-subs" if self.subtitles else "--no-write-subs", "--write-auto-subs" if self.subtitles else "--no-write-auto-subs", "--live-from-start" if self.live_from_start else "--no-live-from-start", + "--postprocessor-args", "ffmpeg:-bitexact" # ensure bitexact output to avoid mismatching hashes for same video ] # proxy handling From 4170c2011c3e3c553bacb6ec9c288da7c055868f Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Mon, 2 Jun 2025 19:33:55 +0100 Subject: [PATCH 011/107] formatting --- .../wacz_extractor_enricher/wacz_extractor_enricher.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py b/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py index 7722865..bb8838f 100644 --- a/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py +++ b/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py @@ -259,4 +259,6 @@ class WaczExtractorEnricher(Enricher, Extractor): to_enrich.add_media(m, warc_fn) counter_warc_files += 1 seen_urls.add(record_url) - logger.info(f"WACZ extract_media/extract_screenshot finished, found {counter_warc_files + counter_screenshots} relevant media file(s)") + logger.info( + f"WACZ extract_media/extract_screenshot finished, found {counter_warc_files + counter_screenshots} relevant media file(s)" + ) From 87e1cdc102fad155ad5b7e7cdc345124d796c719 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Mon, 2 Jun 2025 20:02:35 +0100 Subject: [PATCH 012/107] adds yt-dlp curl-cffi --- poetry.lock | 236 ++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 2 +- 2 files changed, 233 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 15573ce..1c845cf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -210,6 +210,183 @@ urllib3 = {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version > [package.extras] crt = ["awscrt (==0.23.8)"] +[[package]] +name = "brotli" +version = "1.1.0" +description = "Python bindings for the Brotli compression library" +optional = false +python-versions = "*" +groups = ["main"] +markers = "implementation_name == \"cpython\"" +files = [ + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5dab0844f2cf82be357a0eb11a9087f70c5430b2c241493fc122bb6f2bb0917c"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e4fe605b917c70283db7dfe5ada75e04561479075761a0b3866c081d035b01c1"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1e9a65b5736232e7a7f91ff3d02277f11d339bf34099a56cdab6a8b3410a02b2"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:58d4b711689366d4a03ac7957ab8c28890415e267f9b6589969e74b6e42225ec"}, + {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"}, + {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c247dd99d39e0338a604f8c2b3bc7061d5c2e9e2ac7ba9cc1be5a69cb6cd832f"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1b2c248cd517c222d89e74669a4adfa5577e06ab68771a529060cf5a156e9757"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2a24c50840d89ded6c9a8fdc7b6ed3692ed4e86f1c4a4a938e1e92def92933e0"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f31859074d57b4639318523d6ffdca586ace54271a73ad23ad021acd807eb14b"}, + {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"}, + {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:32d95b80260d79926f5fab3c41701dbb818fde1c9da590e77e571eefd14abe28"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b760c65308ff1e462f65d69c12e4ae085cff3b332d894637f6273a12a482d09f"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:87a3044c3a35055527ac75e419dfa9f4f3667a1e887ee80360589eb8c90aabb9"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c5529b34c1c9d937168297f2c1fde7ebe9ebdd5e121297ff9c043bdb2ae3d6fb"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ca63e1890ede90b2e4454f9a65135a4d387a4585ff8282bb72964fab893f2111"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e79e6520141d792237c70bcd7a3b122d00f2613769ae0cb61c52e89fd3443839"}, + {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"}, + {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"}, + {file = "Brotli-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8bf32b98b75c13ec7cf774164172683d6e7891088f6316e54425fde1efc276d5"}, + {file = "Brotli-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7bc37c4d6b87fb1017ea28c9508b36bbcb0c3d18b4260fcdf08b200c74a6aee8"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c0ef38c7a7014ffac184db9e04debe495d317cc9c6fb10071f7fefd93100a4f"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91d7cc2a76b5567591d12c01f019dd7afce6ba8cba6571187e21e2fc418ae648"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a93dde851926f4f2678e704fadeb39e16c35d8baebd5252c9fd94ce8ce68c4a0"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0db75f47be8b8abc8d9e31bc7aad0547ca26f24a54e6fd10231d623f183d089"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6967ced6730aed543b8673008b5a391c3b1076d834ca438bbd70635c73775368"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7eedaa5d036d9336c95915035fb57422054014ebdeb6f3b42eac809928e40d0c"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d487f5432bf35b60ed625d7e1b448e2dc855422e87469e3f450aa5552b0eb284"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:832436e59afb93e1836081a20f324cb185836c617659b07b129141a8426973c7"}, + {file = "Brotli-1.1.0-cp313-cp313-win32.whl", hash = "sha256:43395e90523f9c23a3d5bdf004733246fba087f2948f87ab28015f12359ca6a0"}, + {file = "Brotli-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b"}, + {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:aea440a510e14e818e67bfc4027880e2fb500c2ccb20ab21c7a7c8b5b4703d75"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_i686.whl", hash = "sha256:6974f52a02321b36847cd19d1b8e381bf39939c21efd6ee2fc13a28b0d99348c"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:a7e53012d2853a07a4a79c00643832161a910674a893d296c9f1259859a289d2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:d7702622a8b40c49bffb46e1e3ba2e81268d5c04a34f460978c6b5517a34dd52"}, + {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"}, + {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"}, + {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:cb1dac1770878ade83f2ccdf7d25e494f05c9165f5246b46a621cc849341dc01"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:3ee8a80d67a4334482d9712b8e83ca6b1d9bc7e351931252ebef5d8f7335a547"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:5e55da2c8724191e5b557f8e18943b1b4839b8efc3ef60d65985bcf6f587dd38"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:d342778ef319e1026af243ed0a07c97acf3bad33b9f29e7ae6a1f68fd083e90c"}, + {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"}, + {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d2b35ca2c7f81d173d2fadc2f4f31e88cc5f7a39ae5b6db5513cf3383b0e0ec7"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:af6fa6817889314555aede9a919612b23739395ce767fe7fcbea9a80bf140fe5"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:2feb1d960f760a575dbc5ab3b1c00504b24caaf6986e2dc2b01c09c87866a943"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4410f84b33374409552ac9b6903507cdb31cd30d2501fc5ca13d18f73548444a"}, + {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"}, + {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0737ddb3068957cf1b054899b0883830bb1fec522ec76b1098f9b6e0f02d9419"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4f3607b129417e111e30637af1b56f24f7a49e64763253bbc275c75fa887d4b2"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:6c6e0c425f22c1c719c42670d561ad682f7bfeeef918edea971a79ac5252437f"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:494994f807ba0b92092a163a0a283961369a65f6cbe01e8891132b7a320e61eb"}, + {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"}, + {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"}, + {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, +] + +[[package]] +name = "brotlicffi" +version = "1.1.0.0" +description = "Python CFFI bindings to the Brotli library" +optional = false +python-versions = ">=3.7" +groups = ["main"] +markers = "implementation_name != \"cpython\"" +files = [ + {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win32.whl", hash = "sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb"}, + {file = "brotlicffi-1.1.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e4aeb0bd2540cb91b069dbdd54d458da8c4334ceaf2d25df2f4af576d6766ca"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7b0033b0d37bb33009fb2fef73310e432e76f688af76c156b3594389d81391"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35"}, + {file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:246f1d1a90279bb6069de3de8d75a8856e073b8ff0b09dcca18ccc14cec85979"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4bc5d82bc56ebd8b514fb8350cfac4627d6b0743382e46d033976a5f80fab6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c26ecb14386a44b118ce36e546ce307f4810bc9598a6e6cb4f7fca725ae7e6"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca72968ae4eaf6470498d5c2887073f7efe3b1e7d7ec8be11a06a79cc810e990"}, + {file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:add0de5b9ad9e9aa293c3aa4e9deb2b61e99ad6c1634e01d01d98c03e6a354cc"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b6068e0f3769992d6b622a1cd2e7835eae3cf8d9da123d7f51ca9c1e9c333e5"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8557a8559509b61e65083f8782329188a250102372576093c88930c875a69838"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a7ae37e5d79c5bdfb5b4b99f2715a6035e6c5bf538c3746abc8e26694f92f33"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391151ec86bb1c683835980f4816272a87eaddc46bb91cbf44f62228b84d8cca"}, + {file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2f3711be9290f0453de8eed5275d93d286abe26b08ab4a35d7452caa1fef532f"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0"}, + {file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808"}, + {file = "brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13"}, +] + +[package.dependencies] +cffi = ">=1.0.0" + [[package]] name = "bs4" version = "0.0.2" @@ -256,7 +433,6 @@ description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "os_name == \"nt\" and implementation_name != \"pypy\" or platform_python_implementation != \"PyPy\"" files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -532,6 +708,36 @@ ssh = ["bcrypt (>=3.1.5)"] test = ["certifi (>=2024)", "cryptography-vectors (==44.0.3)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] test-randomorder = ["pytest-randomly"] +[[package]] +name = "curl-cffi" +version = "0.10.0" +description = "libcurl ffi bindings for Python, with impersonation support." +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "implementation_name == \"cpython\"" +files = [ + {file = "curl_cffi-0.10.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:15053d01c6a3e3c4c5331ce9e07e1dc31ca5aa063babca05d18b1b5aad369fac"}, + {file = "curl_cffi-0.10.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:3969e4260ad4dab638fb6dbe349623f9f5f022435c7fd21daf760231380367fa"}, + {file = "curl_cffi-0.10.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:458f53c41bd76d90d8974d60c3a8a0dd902a1af1f9056215cf24f454bcedc6fd"}, + {file = "curl_cffi-0.10.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfc74f09e44d2d8d61b8e8fda3a7004b5bc0217a703fbbe9e16ef8caa1f3d4e4"}, + {file = "curl_cffi-0.10.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f03f4b17dc679c82bd3c946feb1ad38749b2ad731d7c26daefaac857d1c72fd9"}, + {file = "curl_cffi-0.10.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:f1b0c7b7b81afca15a0e56c593d3c2bdcd4fd4c9ca49b9ded5b9d8076ba78ff9"}, + {file = "curl_cffi-0.10.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:04b1d23f0f54f94b8298ed417e6bece85a635d674723cde2b155da686efbf78f"}, + {file = "curl_cffi-0.10.0-cp39-abi3-win32.whl", hash = "sha256:1e60b8ecc80bfb0da4ff73ac9d194e80482b50ecbb8aefec1b0edaf45fafd80e"}, + {file = "curl_cffi-0.10.0-cp39-abi3-win_amd64.whl", hash = "sha256:59389773a1556e087120e91eac1e33f84f1599d853e1bc168b153e4cdf360002"}, + {file = "curl_cffi-0.10.0.tar.gz", hash = "sha256:3e37b35268ca58492f54ed020ae4b50c33ee0debad4145db9f746f04ed466eb0"}, +] + +[package.dependencies] +certifi = ">=2024.2.2" +cffi = ">=1.12.0" + +[package.extras] +build = ["cibuildwheel", "wheel"] +dev = ["charset_normalizer (>=3.3.2,<4.0)", "coverage (>=6.4.1,<7.0)", "cryptography (>=42.0.5,<43.0)", "httpx (==0.23.1)", "mypy (>=1.9.0,<2.0)", "pytest (>=8.1.1,<9.0)", "pytest-asyncio (>=0.23.6,<1.0)", "pytest-trio (>=0.8.0,<1.0)", "ruff (>=0.3.5,<1.0)", "trio (>=0.25.0,<1.0)", "trustme (>=1.1.0,<2.0)", "typing_extensions", "uvicorn (>=0.29.0,<1.0)", "websockets (>=12.0,<13.0)"] +test = ["charset_normalizer (>=3.3.2,<4.0)", "cryptography (>=42.0.5,<43.0)", "fastapi (==0.110.0)", "httpx (==0.23.1)", "proxy.py (>=2.4.3,<3.0)", "pytest (>=8.1.1,<9.0)", "pytest-asyncio (>=0.23.6,<1.0)", "pytest-trio (>=0.8.0,<1.0)", "python-multipart (>=0.0.9,<1.0)", "trio (>=0.25.0,<1.0)", "trustme (>=1.1.0,<2.0)", "typing_extensions", "uvicorn (>=0.29.0,<1.0)", "websockets (>=12.0,<13.0)"] + [[package]] name = "dataclasses-json" version = "0.6.7" @@ -1149,6 +1355,18 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[[package]] +name = "mutagen" +version = "1.47.0" +description = "read and write audio tags for many formats" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "mutagen-1.47.0-py3-none-any.whl", hash = "sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719"}, + {file = "mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99"}, +] + [[package]] name = "mypy-extensions" version = "1.1.0" @@ -1609,7 +1827,6 @@ description = "C parser in Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "os_name == \"nt\" and implementation_name != \"pypy\" or platform_python_implementation != \"PyPy\"" files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, @@ -3128,7 +3345,7 @@ version = "15.0.1" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false python-versions = ">=3.9" -groups = ["docs"] +groups = ["main", "docs"] files = [ {file = "websockets-15.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b"}, {file = "websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205"}, @@ -3244,6 +3461,17 @@ files = [ {file = "yt_dlp-2025.5.22.tar.gz", hash = "sha256:ea73854c5dabc124f29a35a8fae9bc5d422ef3231bebeea2bdfa82ac191a9c29"}, ] +[package.dependencies] +brotli = {version = "*", optional = true, markers = "implementation_name == \"cpython\" and extra == \"default\""} +brotlicffi = {version = "*", optional = true, markers = "implementation_name != \"cpython\" and extra == \"default\""} +certifi = {version = "*", optional = true, markers = "extra == \"default\""} +curl-cffi = {version = ">=0.5.10,<0.6.dev0 || ==0.10.*", optional = true, markers = "implementation_name == \"cpython\" and extra == \"curl-cffi\""} +mutagen = {version = "*", optional = true, markers = "extra == \"default\""} +pycryptodomex = {version = "*", optional = true, markers = "extra == \"default\""} +requests = {version = ">=2.32.2,<3", optional = true, markers = "extra == \"default\""} +urllib3 = {version = ">=1.26.17,<3", optional = true, markers = "extra == \"default\""} +websockets = {version = ">=13.0", optional = true, markers = "extra == \"default\""} + [package.extras] build = ["build", "hatchling", "pip", "setuptools (>=71.0.2)", "wheel"] curl-cffi = ["curl-cffi (>=0.5.10,<0.6.dev0 || ==0.10.*) ; implementation_name == \"cpython\""] @@ -3257,4 +3485,4 @@ test = ["pytest (>=8.1,<9.0)", "pytest-rerunfailures (>=14.0,<15.0)"] [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "eb903c84f80d07c41e7dad7622a11ac43f585d7b94ee6e5d182b7a42772bc63a" +content-hash = "03a5cc0c06de5cc1227dc36895013562697a481f1e41aa405cc33545c29bbef3" diff --git a/pyproject.toml b/pyproject.toml index cc19a00..d5478a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -55,7 +55,7 @@ dependencies = [ "cryptography (>44.0.1,<45.0.0)", "opentimestamps (>=0.4.5,<0.5.0)", "bgutil-ytdlp-pot-provider (>=1.0.0)", - "yt-dlp (>=2025.5.22,<2026.0.0)", + "yt-dlp[curl-cffi,default] (>=2025.5.22,<2026.0.0)", "secretstorage (>=3.3.3,<4.0.0)", ] From b351a335938eed30c89a4738ff9aea9283cbc152 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Mon, 2 Jun 2025 20:03:48 +0100 Subject: [PATCH 013/107] version bump --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d5478a2..0f4e5b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [project] name = "auto-archiver" -version = "1.0.0" +version = "1.0.1" description = "Automatically archive links to videos, images, and social media content from Google Sheets (and more)." requires-python = ">=3.10,<3.13" From 69028588b3b029a089c11de270d3711799de44f7 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Mon, 2 Jun 2025 20:04:34 +0100 Subject: [PATCH 014/107] linting --- .../modules/generic_extractor/generic_extractor.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/auto_archiver/modules/generic_extractor/generic_extractor.py b/src/auto_archiver/modules/generic_extractor/generic_extractor.py index 9a75352..8e7da8b 100644 --- a/src/auto_archiver/modules/generic_extractor/generic_extractor.py +++ b/src/auto_archiver/modules/generic_extractor/generic_extractor.py @@ -387,7 +387,11 @@ class GenericExtractor(Extractor): directory = os.path.dirname(base_filename) # '/get/path/to' basename = os.path.basename(base_filename) # 'file' for f in os.listdir(directory): - if f.startswith(basename) or (entry_url and os.path.splitext(f)[0] in entry_url) and "video/" in (mimetypes.guess_type(f)[0] or ""): + if ( + f.startswith(basename) + or (entry_url and os.path.splitext(f)[0] in entry_url) + and "video/" in (mimetypes.guess_type(f)[0] or "") + ): return os.path.join(directory, f) return False @@ -552,7 +556,8 @@ class GenericExtractor(Extractor): "--write-subs" if self.subtitles else "--no-write-subs", "--write-auto-subs" if self.subtitles else "--no-write-auto-subs", "--live-from-start" if self.live_from_start else "--no-live-from-start", - "--postprocessor-args", "ffmpeg:-bitexact" # ensure bitexact output to avoid mismatching hashes for same video + "--postprocessor-args", + "ffmpeg:-bitexact", # ensure bitexact output to avoid mismatching hashes for same video ] # proxy handling From efe2a1a8b6ff7121bd4a4caa394466cbe576fd01 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 20:21:07 +0000 Subject: [PATCH 015/107] Bump the actions group in /scripts/settings with 4 updates Bumps the actions group in /scripts/settings with 4 updates: [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material), [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material), [react](https://github.com/facebook/react/tree/HEAD/packages/react) and [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom). Updates `@mui/icons-material` from 6.4.12 to 7.1.1 - [Release notes](https://github.com/mui/material-ui/releases) - [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md) - [Commits](https://github.com/mui/material-ui/commits/v7.1.1/packages/mui-icons-material) Updates `@mui/material` from 6.4.12 to 7.1.1 - [Release notes](https://github.com/mui/material-ui/releases) - [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md) - [Commits](https://github.com/mui/material-ui/commits/v7.1.1/packages/mui-material) Updates `react` from 19.0.0 to 19.1.0 - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v19.1.0/packages/react) Updates `react-dom` from 19.0.0 to 19.1.0 - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v19.1.0/packages/react-dom) --- updated-dependencies: - dependency-name: "@mui/icons-material" dependency-version: 7.1.1 dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: "@mui/material" dependency-version: 7.1.1 dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: react dependency-version: 19.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: actions - dependency-name: react-dom dependency-version: 19.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: actions ... Signed-off-by: dependabot[bot] --- scripts/settings/package-lock.json | 135 +++++++++++++++-------------- scripts/settings/package.json | 6 +- 2 files changed, 72 insertions(+), 69 deletions(-) diff --git a/scripts/settings/package-lock.json b/scripts/settings/package-lock.json index ebbac19..a60d74e 100644 --- a/scripts/settings/package-lock.json +++ b/scripts/settings/package-lock.json @@ -10,21 +10,21 @@ "dependencies": { "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", - "@emotion/react": "latest", - "@emotion/styled": "latest", - "@mui/icons-material": "^6.4.7", - "@mui/material": "latest", - "react": "19.0.0", - "react-dom": "19.0.0", + "@emotion/react": "*", + "@emotion/styled": "*", + "@mui/icons-material": "^7.1.1", + "@mui/material": "*", + "react": "19.1.0", + "react-dom": "19.1.0", "react-markdown": "^10.0.0", "yaml": "^2.7.0" }, "devDependencies": { - "@types/react": "latest", - "@types/react-dom": "latest", - "@vitejs/plugin-react": "latest", - "typescript": "latest", - "vite": "latest", + "@types/react": "*", + "@types/react-dom": "*", + "@vitejs/plugin-react": "*", + "typescript": "*", + "vite": "*", "vite-plugin-singlefile": "^2.1.0" } }, @@ -994,9 +994,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "6.4.12", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.12.tgz", - "integrity": "sha512-M7IkG4LqSJfkY+thlQQHNkcS5NdmMDwLq/2RKoW40XR0mv/2BYb6X8fRnyaxP4zGdPD2M4MQdbzKihSVormJ7Q==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.1.1.tgz", + "integrity": "sha512-yBckQs4aQ8mqukLnPC6ivIRv6guhaXi8snVl00VtyojBbm+l6VbVhyTSZ68Abcx7Ah8B+GZhrB7BOli+e+9LkQ==", "license": "MIT", "funding": { "type": "opencollective", @@ -1004,12 +1004,12 @@ } }, "node_modules/@mui/icons-material": { - "version": "6.4.12", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.12.tgz", - "integrity": "sha512-ILTe3A2te0+Vb9TG4P1AZVmZFOjDDCV/b2nBmV1rNOmSu3Q/xkHghW+yMhMffwHcXklMlcajMlc4iFSkPbrTKw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.1.1.tgz", + "integrity": "sha512-X37+Yc8QpEnl0sYmz+WcLFy2dWgNRzbswDzLPXG7QU1XDVlP5TPp1HXjdmCupOWLL/I9m1fyhcyZl8/HPpp/Cg==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.26.0" + "@babel/runtime": "^7.27.1" }, "engines": { "node": ">=14.0.0" @@ -1019,7 +1019,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@mui/material": "^6.4.12", + "@mui/material": "^7.1.1", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -1030,22 +1030,22 @@ } }, "node_modules/@mui/material": { - "version": "6.4.12", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.12.tgz", - "integrity": "sha512-VqoLNS5UaNqoS1FybezZR/PaAvzbTmRe0Mx//afXbolIah43eozpX2FckaFffLvMoiSIyxx1+AMHyENTr2Es0Q==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.1.1.tgz", + "integrity": "sha512-mTpdmdZCaHCGOH3SrYM41+XKvNL0iQfM9KlYgpSjgadXx/fEKhhvOktxm8++Xw6FFeOHoOiV+lzOI8X1rsv71A==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.26.0", - "@mui/core-downloads-tracker": "^6.4.12", - "@mui/system": "^6.4.12", - "@mui/types": "~7.2.24", - "@mui/utils": "^6.4.9", + "@babel/runtime": "^7.27.1", + "@mui/core-downloads-tracker": "^7.1.1", + "@mui/system": "^7.1.1", + "@mui/types": "^7.4.3", + "@mui/utils": "^7.1.1", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1", - "react-is": "^19.0.0", + "react-is": "^19.1.0", "react-transition-group": "^4.4.5" }, "engines": { @@ -1058,7 +1058,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^6.4.12", + "@mui/material-pigment-css": "^7.1.1", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -1079,13 +1079,13 @@ } }, "node_modules/@mui/private-theming": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.9.tgz", - "integrity": "sha512-LktcVmI5X17/Q5SkwjCcdOLBzt1hXuc14jYa7NPShog0GBDCDvKtcnP0V7a2s6EiVRlv7BzbWEJzH6+l/zaCxw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.1.1.tgz", + "integrity": "sha512-M8NbLUx+armk2ZuaxBkkMk11ultnWmrPlN0Xe3jUEaBChg/mcxa5HWIWS1EE4DF36WRACaAHVAvyekWlDQf0PQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.26.0", - "@mui/utils": "^6.4.9", + "@babel/runtime": "^7.27.1", + "@mui/utils": "^7.1.1", "prop-types": "^15.8.1" }, "engines": { @@ -1106,12 +1106,12 @@ } }, "node_modules/@mui/styled-engine": { - "version": "6.4.11", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.11.tgz", - "integrity": "sha512-74AUmlHXaGNbyUqdK/+NwDJOZqgRQw6BcNvhoWYLq3LGbLTkE+khaJ7soz6cIabE4CPYqO2/QAIU1Z/HEjjpcw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.1.1.tgz", + "integrity": "sha512-R2wpzmSN127j26HrCPYVQ53vvMcT5DaKLoWkrfwUYq3cYytL6TQrCH8JBH3z79B6g4nMZZVoaXrxO757AlShaw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.26.0", + "@babel/runtime": "^7.27.1", "@emotion/cache": "^11.13.5", "@emotion/serialize": "^1.3.3", "@emotion/sheet": "^1.4.0", @@ -1140,16 +1140,16 @@ } }, "node_modules/@mui/system": { - "version": "6.4.12", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.12.tgz", - "integrity": "sha512-fgEfm1qxpKCztndESeL1L0sLwA2c7josZ2w42D8OM3pbLee4bH2twEjoMo6qf7z2rNw1Uc9EU9haXeMoq0oTdQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.1.1.tgz", + "integrity": "sha512-Kj1uhiqnj4Zo7PDjAOghtXJtNABunWvhcRU0O7RQJ7WOxeynoH6wXPcilphV8QTFtkKaip8EiNJRiCD+B3eROA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.26.0", - "@mui/private-theming": "^6.4.9", - "@mui/styled-engine": "^6.4.11", - "@mui/types": "~7.2.24", - "@mui/utils": "^6.4.9", + "@babel/runtime": "^7.27.1", + "@mui/private-theming": "^7.1.1", + "@mui/styled-engine": "^7.1.1", + "@mui/types": "^7.4.3", + "@mui/utils": "^7.1.1", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -1180,10 +1180,13 @@ } }, "node_modules/@mui/types": { - "version": "7.2.24", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.24.tgz", - "integrity": "sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.3.tgz", + "integrity": "sha512-2UCEiK29vtiZTeLdS2d4GndBKacVyxGvReznGXGr+CzW/YhjIX+OHUdCIczZjzcRAgKBGmE9zCIgoV9FleuyRQ==", "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.27.1" + }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -1194,17 +1197,17 @@ } }, "node_modules/@mui/utils": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.4.9.tgz", - "integrity": "sha512-Y12Q9hbK9g+ZY0T3Rxrx9m2m10gaphDuUMgWxyV5kNJevVxXYCLclYUCC9vXaIk1/NdNDTcW2Yfr2OGvNFNmHg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.1.1.tgz", + "integrity": "sha512-BkOt2q7MBYl7pweY2JWwfrlahhp+uGLR8S+EhiyRaofeRYUWL2YKbSGQvN4hgSN1i8poN0PaUiii1kEMrchvzg==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.26.0", - "@mui/types": "~7.2.24", + "@babel/runtime": "^7.27.1", + "@mui/types": "^7.4.3", "@types/prop-types": "^15.7.14", "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^19.0.0" + "react-is": "^19.1.0" }, "engines": { "node": ">=14.0.0" @@ -3197,24 +3200,24 @@ } }, "node_modules/react": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", - "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", - "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", "license": "MIT", "dependencies": { - "scheduler": "^0.25.0" + "scheduler": "^0.26.0" }, "peerDependencies": { - "react": "^19.0.0" + "react": "^19.1.0" } }, "node_modules/react-is": { @@ -3379,9 +3382,9 @@ } }, "node_modules/scheduler": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", - "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", "license": "MIT" }, "node_modules/semver": { diff --git a/scripts/settings/package.json b/scripts/settings/package.json index 5315619..44de0ac 100644 --- a/scripts/settings/package.json +++ b/scripts/settings/package.json @@ -13,10 +13,10 @@ "@dnd-kit/sortable": "^10.0.0", "@emotion/react": "latest", "@emotion/styled": "latest", - "@mui/icons-material": "^6.4.7", + "@mui/icons-material": "^7.1.1", "@mui/material": "latest", - "react": "19.0.0", - "react-dom": "19.0.0", + "react": "19.1.0", + "react-dom": "19.1.0", "react-markdown": "^10.0.0", "yaml": "^2.7.0" }, From c772082f0ef3893f9d2140591c5aeb93c881a2cb Mon Sep 17 00:00:00 2001 From: Dave Mateer Date: Tue, 3 Jun 2025 12:30:18 +0100 Subject: [PATCH 016/107] counter_screenshots to counter_warc_files in wacz_extractor so don't get error about add mulitple items with same id. --- .../wacz_extractor_enricher/wacz_extractor_enricher.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py b/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py index bb8838f..3a7c2f8 100644 --- a/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py +++ b/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py @@ -232,7 +232,9 @@ class WaczExtractorEnricher(Enricher, Extractor): # create local file and add media ext = mimetypes.guess_extension(content_type) - warc_fn = f"warc-file-{counter_screenshots}{ext}" + + warc_fn = f"warc-file-{counter_warc_files}{ext}" + fn = os.path.join(tmp_dir, warc_fn) record_url_best_qual = UrlUtil.twitter_best_quality_url(record_url) From 488802b6327e49d54979d9371cc6a371b70b5deb Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 11:08:44 +0100 Subject: [PATCH 017/107] poetry update --- poetry.lock | 238 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 220 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0a4a132..2081015 100644 --- a/poetry.lock +++ b/poetry.lock @@ -741,6 +741,18 @@ ssh = ["bcrypt (>=3.1.5)"] test = ["certifi (>=2024)", "cryptography-vectors (==44.0.3)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] test-randomorder = ["pytest-randomly"] +[[package]] +name = "cssselect" +version = "1.3.0" +description = "cssselect parses CSS3 Selectors and translates them to XPath 1.0" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "cssselect-1.3.0-py3-none-any.whl", hash = "sha256:56d1bf3e198080cc1667e137bc51de9cadfca259f03c2d4e09037b3e01e30f0d"}, + {file = "cssselect-1.3.0.tar.gz", hash = "sha256:57f8a99424cfab289a1b6a816a43075a4b00948c86b4dcf3ef4ee7e15f7ab0c7"}, +] + [[package]] name = "curl-cffi" version = "0.10.0" @@ -841,11 +853,11 @@ description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["main", "dev", "docs"] -markers = "python_version == \"3.10\"" files = [ {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, ] +markers = {dev = "python_version == \"3.10\"", docs = "python_version == \"3.10\""} [package.dependencies] typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} @@ -1429,14 +1441,14 @@ files = [ [[package]] name = "mycdp" -version = "1.1.1" +version = "1.2.0" description = "Autogenerated CDP utilities for Python" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "mycdp-1.1.1-py3-none-any.whl", hash = "sha256:5df4d7e1849de267893ed833eac7e1a6e9dc994285becb73a68352f045ad2301"}, - {file = "mycdp-1.1.1.tar.gz", hash = "sha256:b17bd02fafcd93d82b1b34ae8701fa773ab0e773c55fd330cb9eea62185cfaf0"}, + {file = "mycdp-1.2.0-py3-none-any.whl", hash = "sha256:8f9ef628fa68e391f59ad9cd555ae75746bd3a48947017c9ecc65a63624a1d41"}, + {file = "mycdp-1.2.0.tar.gz", hash = "sha256:0603fd8e3454147c4f549edaa13f5294f57ecb481640c03f808ed548a03f796f"}, ] [[package]] @@ -1634,6 +1646,71 @@ files = [ {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, ] +[[package]] +name = "parameterized" +version = "0.9.0" +description = "Parameterized testing with any Python test framework" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "parameterized-0.9.0-py2.py3-none-any.whl", hash = "sha256:4e0758e3d41bea3bbd05ec14fc2c24736723f243b28d702081aef438c9372b1b"}, + {file = "parameterized-0.9.0.tar.gz", hash = "sha256:7fc905272cefa4f364c1a3429cbbe9c0f98b793988efb5bf90aac80f08db09b1"}, +] + +[package.extras] +dev = ["jinja2"] + +[[package]] +name = "parse" +version = "1.20.2" +description = "parse() is the opposite of format()" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "parse-1.20.2-py2.py3-none-any.whl", hash = "sha256:967095588cb802add9177d0c0b6133b5ba33b1ea9007ca800e526f42a85af558"}, + {file = "parse-1.20.2.tar.gz", hash = "sha256:b41d604d16503c79d81af5165155c0b20f6c8d6c559efa66b4b695c3e5a0a0ce"}, +] + +[[package]] +name = "parse-type" +version = "0.6.4" +description = "Simplifies to build parse types based on the parse module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,>=2.7" +groups = ["main"] +files = [ + {file = "parse_type-0.6.4-py2.py3-none-any.whl", hash = "sha256:83d41144a82d6b8541127bf212dd76c7f01baff680b498ce8a4d052a7a5bce4c"}, + {file = "parse_type-0.6.4.tar.gz", hash = "sha256:5e1ec10440b000c3f818006033372939e693a9ec0176f446d9303e4db88489a6"}, +] + +[package.dependencies] +parse = {version = ">=1.18.0", markers = "python_version >= \"3.0\""} +six = ">=1.15" + +[package.extras] +develop = ["build (>=0.5.1)", "coverage (>=4.4)", "pylint", "pytest (<5.0) ; python_version < \"3.0\"", "pytest (>=5.0) ; python_version >= \"3.0\"", "pytest-cov", "pytest-html (>=1.19.0)", "ruff ; python_version >= \"3.7\"", "setuptools", "setuptools-scm", "tox (>=2.8,<4.0)", "twine (>=1.13.0)", "virtualenv (<20.22.0) ; python_version <= \"3.6\"", "virtualenv (>=20.0.0) ; python_version > \"3.6\"", "wheel"] +docs = ["Sphinx (>=1.6)", "sphinx-bootstrap-theme (>=0.6.0)"] +testing = ["pytest (<5.0) ; python_version < \"3.0\"", "pytest (>=5.0) ; python_version >= \"3.0\"", "pytest-html (>=1.19.0)"] + +[[package]] +name = "pdbp" +version = "1.7.0" +description = "pdbp (Pdb+): A drop-in replacement for pdb and pdbpp." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pdbp-1.7.0-py3-none-any.whl", hash = "sha256:6ad99cb4e9f2fc1a5b4ef4f2e0acdb28b18b271bf71f6c9f997b652d935caa19"}, + {file = "pdbp-1.7.0.tar.gz", hash = "sha256:d0a5b275720c451f5574427e35523aeb61c244f3faf622a80fe03019ef82d380"}, +] + +[package.dependencies] +colorama = {version = ">=0.4.6", markers = "platform_system == \"Windows\""} +pygments = ">=2.19.1" +tabcompleter = ">=1.4.0" + [[package]] name = "pdqhash" version = "0.2.8" @@ -1755,14 +1832,14 @@ xmp = ["defusedxml"] [[package]] name = "pip" -version = "25.0.1" +version = "25.1.1" description = "The PyPA recommended tool for installing Python packages." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pip-25.0.1-py3-none-any.whl", hash = "sha256:c46efd13b6aa8279f33f2864459c8ce587ea6a1a59ee20de055868d8f7688f7f"}, - {file = "pip-25.0.1.tar.gz", hash = "sha256:88f96547ea48b940a3a385494e181e29fb8637898f88d88737c5049780f196ea"}, + {file = "pip-25.1.1-py3-none-any.whl", hash = "sha256:2913a38a2abf4ea6b64ab507bd9e967f3b53dc1ede74b01b0931e1ce548751af"}, + {file = "pip-25.1.1.tar.gz", hash = "sha256:3de45d411d308d5054c2168185d8da7f9a2cd753dbac8acbfa88a8909ecd9077"}, ] [[package]] @@ -1788,7 +1865,7 @@ version = "1.6.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.9" -groups = ["dev"] +groups = ["main", "dev"] files = [ {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, @@ -2210,14 +2287,14 @@ pytest = "*" [[package]] name = "pytest-rerunfailures" -version = "15.0" +version = "15.1" description = "pytest plugin to re-run tests to eliminate flaky failures" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pytest-rerunfailures-15.0.tar.gz", hash = "sha256:2d9ac7baf59f4c13ac730b47f6fa80e755d1ba0581da45ce30b72fb3542b4474"}, - {file = "pytest_rerunfailures-15.0-py3-none-any.whl", hash = "sha256:dd150c4795c229ef44320adc9a0c0532c51b78bb7a6843a8c53556b9a611df1a"}, + {file = "pytest_rerunfailures-15.1-py3-none-any.whl", hash = "sha256:f674c3594845aba8b23c78e99b1ff8068556cc6a8b277f728071fdc4f4b0b355"}, + {file = "pytest_rerunfailures-15.1.tar.gz", hash = "sha256:c6040368abd7b8138c5b67288be17d6e5611b7368755ce0465dda0362c8ece80"}, ] [package.dependencies] @@ -2226,14 +2303,14 @@ pytest = ">=7.4,<8.2.2 || >8.2.2" [[package]] name = "pytest-xdist" -version = "3.6.1" +version = "3.7.0" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, - {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, + {file = "pytest_xdist-3.7.0-py3-none-any.whl", hash = "sha256:7d3fbd255998265052435eb9daa4e99b62e6fb9cfb6efd1f858d4d8c0c7f0ca0"}, + {file = "pytest_xdist-3.7.0.tar.gz", hash = "sha256:f9248c99a7c15b7d2f90715df93610353a485827bc06eefb6566d23f6400f126"}, ] [package.dependencies] @@ -2779,6 +2856,22 @@ botocore = ">=1.37.4,<2.0a.0" [package.extras] crt = ["botocore[crt] (>=1.37.4,<2.0a.0)"] +[[package]] +name = "sbvirtualdisplay" +version = "1.4.0" +description = "A customized pyvirtualdisplay for SeleniumBase." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "sbvirtualdisplay-1.4.0-py3-none-any.whl", hash = "sha256:516de155219aa342c4e090a3c5126cfe6b12416334bcba3255268e44a5e8a206"}, + {file = "sbvirtualdisplay-1.4.0.tar.gz", hash = "sha256:29a365b509cd7bfde4f758603b7b75703909b11cdf4245abc8f828ed35660d9b"}, +] + +[package.extras] +coverage = ["coverage (>=7.6.1) ; python_version < \"3.9\"", "coverage (>=7.6.9) ; python_version >= \"3.9\"", "pytest-cov (>=5.0.0) ; python_version < \"3.9\"", "pytest-cov (>=6.0.0) ; python_version >= \"3.9\""] +flake8 = ["flake8 (==5.0.4) ; python_version < \"3.9\"", "flake8 (==7.1.1) ; python_version >= \"3.9\"", "mccabe (==0.7.0)", "pycodestyle (==2.12.1) ; python_version >= \"3.9\"", "pycodestyle (==2.9.1) ; python_version < \"3.9\"", "pyflakes (==2.5.0) ; python_version < \"3.9\"", "pyflakes (==3.2.0) ; python_version >= \"3.9\""] + [[package]] name = "secretstorage" version = "3.3.3" @@ -2815,6 +2908,115 @@ typing_extensions = ">=4.13.2,<4.14.0" urllib3 = {version = ">=2.4.0,<2.5.0", extras = ["socks"]} websocket-client = ">=1.8.0,<1.9.0" +[[package]] +name = "seleniumbase" +version = "4.39.2" +description = "A complete web automation framework for end-to-end testing." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "seleniumbase-4.39.2-py3-none-any.whl", hash = "sha256:23b2d071c02ba269a8239b828fd5098edb208d04171143c93b40d8a351ba2861"}, + {file = "seleniumbase-4.39.2.tar.gz", hash = "sha256:3a18d582ca90f4d633debb8ec45871db1b7aed71e5876fc634962fba79731967"}, +] + +[package.dependencies] +attrs = ">=25.3.0" +beautifulsoup4 = "4.13.4" +behave = "1.2.6" +certifi = ">=2025.4.26" +chardet = "5.2.0" +charset-normalizer = ">=3.4.2,<4" +colorama = ">=0.4.6" +cssselect = {version = "1.3.0", markers = "python_version >= \"3.9\""} +exceptiongroup = ">=1.3.0" +execnet = "2.1.1" +fasteners = ">=0.19" +filelock = {version = ">=3.18.0", markers = "python_version >= \"3.9\""} +h11 = "0.16.0" +idna = "3.10" +iniconfig = "2.1.0" +Jinja2 = ">=3.1.6" +markdown-it-py = "3.0.0" +MarkupSafe = {version = ">=3.0.2", markers = "python_version >= \"3.9\""} +mdurl = "0.1.2" +mycdp = ">=1.2.0" +outcome = "1.3.0.post0" +packaging = ">=25.0" +parameterized = "0.9.0" +parse = ">=1.20.2" +parse-type = ">=0.6.4" +pdbp = ">=1.7.0" +pip = {version = ">=25.1.1", markers = "python_version >= \"3.9\""} +platformdirs = {version = ">=4.3.8", markers = "python_version >= \"3.9\""} +pluggy = {version = "1.6.0", markers = "python_version >= \"3.9\""} +pygments = ">=2.19.1" +pynose = ">=1.5.4" +pyotp = "2.9.0" +pyreadline3 = {version = ">=3.5.3", markers = "platform_system == \"Windows\""} +pytest = "8.3.5" +pytest-html = "4.0.2" +pytest-metadata = "3.1.1" +pytest-ordering = "0.6" +pytest-rerunfailures = {version = "15.1", markers = "python_version >= \"3.9\""} +pytest-xdist = {version = "3.7.0", markers = "python_version >= \"3.9\""} +python-xlib = {version = "0.33", markers = "platform_system == \"Linux\""} +pyyaml = ">=6.0.2" +requests = "2.32.3" +rich = ">=14.0.0,<15" +sbvirtualdisplay = ">=1.4.0" +selenium = {version = "4.33.0", markers = "python_version >= \"3.10\""} +setuptools = {version = ">=80.8.0", markers = "python_version >= \"3.10\""} +six = ">=1.17.0" +sniffio = "1.3.1" +sortedcontainers = "2.4.0" +soupsieve = "2.7" +tabcompleter = ">=1.4.0" +trio = {version = "0.30.0", markers = "python_version >= \"3.9\""} +trio-websocket = "0.12.2" +typing-extensions = ">=4.13.2" +urllib3 = {version = ">=1.26.20,<2.5.0", markers = "python_version >= \"3.10\""} +websocket-client = "1.8.0" +websockets = {version = ">=15.0.1", markers = "python_version >= \"3.9\""} +wheel = ">=0.45.1" +wsproto = "1.2.0" + +[package.extras] +allure = ["allure-behave (>=2.13.5)", "allure-pytest (>=2.13.5)", "allure-python-commons (>=2.13.5)"] +coverage = ["coverage (>=7.6.1) ; python_version < \"3.9\"", "coverage (>=7.8.2) ; python_version >= \"3.9\"", "pytest-cov (>=5.0.0) ; python_version < \"3.9\"", "pytest-cov (>=6.1.1) ; python_version >= \"3.9\""] +flake8 = ["flake8 (==5.0.4) ; python_version < \"3.9\"", "flake8 (==7.2.0) ; python_version >= \"3.9\"", "mccabe (==0.7.0)", "pycodestyle (==2.13.0) ; python_version >= \"3.9\"", "pycodestyle (==2.9.1) ; python_version < \"3.9\"", "pyflakes (==2.5.0) ; python_version < \"3.9\"", "pyflakes (==3.3.2) ; python_version >= \"3.9\""] +ipdb = ["ipdb (==0.13.13)", "ipython (==7.34.0)"] +mss = ["mss (==10.0.0) ; python_version >= \"3.9\"", "mss (==9.0.2) ; python_version < \"3.9\""] +pdfminer = ["cffi (==1.17.1)", "cryptography (==39.0.2) ; python_version < \"3.9\"", "cryptography (==45.0.3) ; python_version >= \"3.9\"", "pdfminer.six (==20250324) ; python_version < \"3.9\"", "pdfminer.six (==20250506) ; python_version >= \"3.9\"", "pycparser (==2.22)"] +pillow = ["Pillow (>=10.4.0) ; python_version < \"3.9\"", "Pillow (>=11.2.1) ; python_version >= \"3.9\""] +pip-system-certs = ["pip-system-certs (==4.0) ; platform_system == \"Windows\""] +proxy = ["proxy.py (==2.4.3)"] +psutil = ["psutil (==7.0.0)"] +pyautogui = ["PyAutoGUI (==0.9.54)"] +selenium-stealth = ["selenium-stealth (==1.0.6)"] +selenium-wire = ["Brotli (==1.1.0)", "blinker (==1.7.0)", "h2 (==4.1.0)", "hpack (==4.0.0)", "hyperframe (==6.0.1)", "kaitaistruct (==0.10)", "pyOpenSSL (==24.2.1)", "pyasn1 (==0.6.1)", "pyparsing (>=3.1.4)", "selenium-wire (==5.1.0)", "zstandard (==0.23.0)"] + +[[package]] +name = "setuptools" +version = "80.9.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, + {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] + [[package]] name = "six" version = "1.17.0" @@ -3222,7 +3424,7 @@ version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" -groups = ["dev", "docs"] +groups = ["main", "dev", "docs"] markers = "python_version == \"3.10\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, @@ -3750,4 +3952,4 @@ test = ["pytest (>=8.1,<9.0)", "pytest-rerunfailures (>=14.0,<15.0)"] [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "03a5cc0c06de5cc1227dc36895013562697a481f1e41aa405cc33545c29bbef3" +content-hash = "15c74c97bd0ba172fc81d7aafc7a720ede30b5e7fd61bea693a26f66692f53d3" From d2e8f1a512454fd14a7fae5e8c25a732debf2021 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 11:20:46 +0100 Subject: [PATCH 018/107] introduces antibot step with seleniumbase --- .../antibot_extractor_enricher/__init__.py | 0 .../__manifest__.py | 44 ++++ .../antibot_extractor_enricher.py | 216 ++++++++++++++++++ 3 files changed, 260 insertions(+) create mode 100644 src/auto_archiver/modules/antibot_extractor_enricher/__init__.py create mode 100644 src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py create mode 100644 src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/__init__.py b/src/auto_archiver/modules/antibot_extractor_enricher/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py new file mode 100644 index 0000000..a550b62 --- /dev/null +++ b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py @@ -0,0 +1,44 @@ +{ + "name": "Antibot Extractor/Enricher", + "type": ["extractor", "enricher"], + "requires_setup": True, + "dependencies": { + "python": ["loguru", "seleniumbase"], + }, + "configs": { + "save_to_pdf": { + "default": False, + "type": "bool", + "help": "save a PDF snapshot of the page.", + }, + "max_download_images": { + "default": 50, + "help": "maximum number of images to download from the page (0 = no download, inf = no limit).", + }, + "max_download_videos": { + "default": 50, + "help": "maximum number of videos to download from the page (0 = no download, inf = no limit).", + }, + "exclude_media_extensions": { + "default": ".svg,.ico,.gif", + "help": "CSV of media (image/video) file extensions to exclude from download", + }, + "proxy": { + "default": None, + "help": "proxy to use for the webdriver, Format: 'SERVER:PORT' or 'USER:PASS@SERVER:PORT'", + }, + }, + "description": """ + Uses a browser controlled by SeleniumBase to capture HTML, media, and screenshots/PDFs of a web page, by bypassing anti-bot measures like Cloudflare's Turnstile. + + ### Features + - Extracts the HTML source code of the page. + - Takes full-page screenshots of web pages. + - Takes full-page PDF snapshots of web pages. + - Downloads images and videos from the page, excluding specified file extensions. + + ### Notes + - Requires a WebDriver (e.g., ChromeDriver) installed and accessible via the system's PATH. + - Using a proxy affects Cloudflare Turnstile captcha handling, so it is recommended to use a proxy only if necessary. + """, +} diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py new file mode 100644 index 0000000..969c70f --- /dev/null +++ b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py @@ -0,0 +1,216 @@ +import base64 +import math +import mimetypes +import os +import sys +from urllib.parse import urljoin + +from loguru import logger +from seleniumbase import SB + +from auto_archiver.core import Extractor, Enricher, Metadata, Media +from auto_archiver.utils.misc import random_str + + +class AntibotExtractorEnricher(Extractor, Enricher): + def setup(self) -> None: + self.agent = "cool" + if "linux" in sys.platform or "win32" in sys.platform: + self.agent = None # Use the default UserAgent + + # parse configuration options + self.exclude_media_mimetypes = set( + [mimetypes.guess_type(f"file{m}")[0] for m in self.exclude_media_extensions.split(",")] + ) - {None} + + if self.max_download_images == "inf": + self.max_download_images = math.inf + else: + self.max_download_images = int(self.max_download_images) + + if self.max_download_videos == "inf": + self.max_download_videos = math.inf + else: + self.max_download_videos = int(self.max_download_videos) + + def download(self, item: Metadata) -> Metadata: + result = Metadata() + result.merge(item) + if self.enrich(result): + result.status = "antibot" + return result + + def enrich(self, to_enrich: Metadata) -> bool: + url = to_enrich.get_url() + # TODO: implement cookies auth = self.auth_for_site(url) + url_sample = url[:75] + try: + with SB(uc=True, agent=self.agent, headed=None, proxy=self.proxy) as sb: + logger.info(f"ANTIBOT selenium browser is up with agent {self.agent}, opening {url_sample}...") + sb.uc_open_with_reconnect(url, 4) + + logger.debug(f"ANTIBOT handling CAPTCHAs for {url_sample}...") + + # TODO: implement other Captcha handling + sb.uc_gui_handle_captcha() # handles Cloudflare Turnstile captcha if detected + + # time.sleep(1) # wait for the page to load + if self._hit_auth_wall(sb): + logger.warning(f"ANTIBOT SKIP since auth wall or CAPTCHA was detected for {url_sample}") + return False + logger.debug(f"ANTIBOT no auth wall detected for {url_sample}...") + + to_enrich.set_title(sb.get_title()) + self._enrich_html_source_code(sb, to_enrich) + self._enrich_full_page_screenshot(sb, to_enrich) + if self.save_to_pdf: + self._enrich_full_page_pdf(sb, to_enrich) + + self._enrich_download_media(sb, to_enrich, css_selector="img", max_media=self.max_download_images) + self._enrich_download_media( + sb, to_enrich, css_selector="video, source", max_media=self.max_download_videos + ) + + logger.success(f"ANTIBOT completed for {url_sample}") + + return to_enrich + except Exception as e: + logger.error(f"ANTIBOT runtime error: {e}") + return False + + def _hit_auth_wall(self, sb: SB) -> bool: + """ + Tries to detect if the currently loaded page is an auth/login wall. + Returns True if login is likely required. + """ + # TODO: improve this detection logic, currently it is very basic and may not cover all cases + + # Common URL patterns + url = sb.get_current_url().lower() + if any(kw in url for kw in ["login", "signin", "signup", "register", "captcha"]): + return True + + # Common visible text markers + login_keywords = [ + "sign up or log in", + "log in to continue", + "sign in to continue", + "login required", + "please log in", + "please sign up", + "please sign in", + "login to access", + "sign up to access", + "register to access", + "captcha verification", + ] + for word in login_keywords + [w.capitalize() for w in login_keywords]: + if sb.is_text_visible(word): + return True + + # Common title markers + title = sb.get_title().lower() + if any( + kw in title + for kw in [ + "just a moment...", + "tiktok - make your day", + "um momento...", + "log in", + "sign in", + "sign up", + "register", + "captcha", + "verification required", + "access denied", + ] + ): + return True + + # Common form fields + elements = [ + "input[type='password']", + "input[type='email']", + "input[type='username']", + "input[type='phone']", + "input[name='username']", + "input[name='email']", + "input[name='password']", + "input[name='login']", + ] + if any(sb.is_element_visible(el) for el in elements): + return True + + return False + + @logger.catch + def _enrich_html_source_code(self, sb: SB, to_enrich: Metadata): + """ + Enriches the HTML source code of the Metadata object. + This method is called by the enrich method. + """ + source = sb.get_page_source() + + html_filename = os.path.join(self.tmp_dir, f"source{random_str(6)}.html") + with open(html_filename, "w", encoding="utf-8") as f: + f.write(source) + + to_enrich.add_media(Media(filename=html_filename), id="html_source_code") + + @logger.catch + def _enrich_full_page_screenshot(self, sb: SB, to_enrich: Metadata): + """ + Enriches the full page screenshot of the Metadata object. + This method is called by the enrich method. + """ + x = sb.execute_script("return document.documentElement.scrollWidth") + y = min(sb.execute_script("return document.documentElement.scrollHeight"), 25_000) + sb.set_window_size(x, y) + + screen_filename = os.path.join(self.tmp_dir, f"screenshot{random_str(6)}.png") + sb.save_screenshot(screen_filename) + + to_enrich.add_media(Media(filename=screen_filename), id="screenshot") + + @logger.catch + def _enrich_full_page_pdf(self, sb: SB, to_enrich: Metadata): + """ + Enriches the full page PDF of the Metadata object. + This method is called by the enrich method. + """ + result = sb.driver.execute_cdp_cmd("Page.printToPDF", {"printBackground": True, "landscape": False}) + + pdf_data = base64.b64decode(result["data"]) + + pdf_filename = os.path.join(self.tmp_dir, f"pdf{random_str(6)}.pdf") + with open(pdf_filename, "wb") as f: + f.write(pdf_data) + + to_enrich.add_media(Media(filename=pdf_filename), id="pdf") + + @logger.catch + def _enrich_download_media(self, sb: SB, to_enrich: Metadata, css_selector: str, max_media: int): + """ + Downloads media from the page and adds them to the Metadata object. + This method is called by the enrich method. + """ + if max_media == 0: + return + logger.debug( + f"Downloading media from {to_enrich.get_url()} with selector '{css_selector}' up to {max_media} items." + ) + url = to_enrich.get_url() + all_urls = set() + media_elements = sb.find_elements(css_selector) + for media in media_elements: + if len(all_urls) >= max_media: + logger.debug(f"Reached max download limit of {max_media} images/videos.") + break + if src := media.get_attribute("src"): + mimerype = mimetypes.guess_type(src)[0] + if mimerype in self.exclude_media_mimetypes: + continue + full_src = urljoin(url, src) + if full_src not in all_urls and (filename := self.download_from_url(full_src)): + all_urls.add(full_src) + to_enrich.add_media(Media(filename=filename, properties={"url": full_src})) From cbd189c97d7a3394c2db244cc3e6c1b0ddf56dc5 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 11:53:01 +0100 Subject: [PATCH 019/107] general cleanup --- .../modules/generic_extractor/__manifest__.py | 2 +- .../modules/selenium_extractor/__init__.py | 0 .../modules/selenium_extractor/__manifest__.py | 0 .../selenium_extractor/selenium_extractor.py | 15 --------------- tests/extractors/test_generic_extractor.py | 2 +- 5 files changed, 2 insertions(+), 17 deletions(-) delete mode 100644 src/auto_archiver/modules/selenium_extractor/__init__.py delete mode 100644 src/auto_archiver/modules/selenium_extractor/__manifest__.py delete mode 100644 src/auto_archiver/modules/selenium_extractor/selenium_extractor.py diff --git a/src/auto_archiver/modules/generic_extractor/__manifest__.py b/src/auto_archiver/modules/generic_extractor/__manifest__.py index b734421..c9b9dc4 100644 --- a/src/auto_archiver/modules/generic_extractor/__manifest__.py +++ b/src/auto_archiver/modules/generic_extractor/__manifest__.py @@ -62,7 +62,7 @@ If you are having issues with the extractor, you can review the version of `yt-d }, "end_means_success": { "default": True, - "help": "if True, any archived content will mean a 'success', if False this archiver will not return a 'success' stage; this is useful for cases when the yt-dlp will archive a video but ignore other types of content like images or text only pages that the subsequent archivers can retrieve.", + "help": "if True, any archived content will mean a 'success', if False this extractor will not return a 'success' stage; this is useful for cases when the yt-dlp will archive a video but ignore other types of content like images or text only pages that the subsequent extractors can retrieve.", "type": "bool", }, "allow_playlist": { diff --git a/src/auto_archiver/modules/selenium_extractor/__init__.py b/src/auto_archiver/modules/selenium_extractor/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/auto_archiver/modules/selenium_extractor/__manifest__.py b/src/auto_archiver/modules/selenium_extractor/__manifest__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/auto_archiver/modules/selenium_extractor/selenium_extractor.py b/src/auto_archiver/modules/selenium_extractor/selenium_extractor.py deleted file mode 100644 index 1a02d9c..0000000 --- a/src/auto_archiver/modules/selenium_extractor/selenium_extractor.py +++ /dev/null @@ -1,15 +0,0 @@ - -from auto_archiver.core import Extractor -from auto_archiver.core import Metadata -from auto_archiver.core import Media - - -class SeleniumExtractor(Extractor): - def download(self, item: Metadata) -> Metadata | False: - """ - Downloads the media from the given URL and returns a Metadata object with the downloaded media. - - If the URL is not supported or the download fails, this method should return False. - - """ - pass diff --git a/tests/extractors/test_generic_extractor.py b/tests/extractors/test_generic_extractor.py index f737794..de5470b 100644 --- a/tests/extractors/test_generic_extractor.py +++ b/tests/extractors/test_generic_extractor.py @@ -97,7 +97,7 @@ class TestGenericExtractor(TestExtractorBase): ) def test_download_nonexistent_media(self, make_item, url): """ - Test to make sure that the extractor doesn't break on non-existend posts/media + Test to make sure that the extractor doesn't break on non-existent posts/media It should return 'False' """ From d130c1b3fa647ac5a037c827d1cbabe466a3162d Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 11:53:18 +0100 Subject: [PATCH 020/107] WIP attempt at ytdlp impersonation --- .../modules/generic_extractor/generic_extractor.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/auto_archiver/modules/generic_extractor/generic_extractor.py b/src/auto_archiver/modules/generic_extractor/generic_extractor.py index 8e7da8b..3ed6629 100644 --- a/src/auto_archiver/modules/generic_extractor/generic_extractor.py +++ b/src/auto_archiver/modules/generic_extractor/generic_extractor.py @@ -33,6 +33,9 @@ class GenericExtractor(Extractor): def setup(self): self.check_for_extractor_updates() self.setup_po_tokens() + # TODO: figure out why the following is not properly recognised by yt-dlp: + # if "generic" not in self.extractor_args: + # self.extractor_args["generic"] = "impersonate" def check_for_extractor_updates(self): """Checks whether yt-dlp or its plugins need updating and triggers a restart if so.""" @@ -590,11 +593,11 @@ class GenericExtractor(Extractor): # Applying user-defined extractor_args if self.extractor_args: for key, args in self.extractor_args.items(): - logger.debug(f"Setting extractor_args: {key}") if isinstance(args, dict): arg_str = ";".join(f"{k}={v}" for k, v in args.items()) else: arg_str = str(args) + logger.debug(f"Setting extractor_args: {key}:{arg_str}") ydl_options.extend(["--extractor-args", f"{key}:{arg_str}"]) if self.ytdlp_args: From 378b1a6d229946fd47b9be2e4cf37a3dacc9e2cb Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 11:53:41 +0100 Subject: [PATCH 021/107] expand S3 objects content type for better preview results in non-latin languages --- src/auto_archiver/modules/s3_storage/s3_storage.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/auto_archiver/modules/s3_storage/s3_storage.py b/src/auto_archiver/modules/s3_storage/s3_storage.py index abac4f7..b5d905d 100644 --- a/src/auto_archiver/modules/s3_storage/s3_storage.py +++ b/src/auto_archiver/modules/s3_storage/s3_storage.py @@ -40,6 +40,8 @@ class S3Storage(Storage): try: if media.mimetype: extra_args["ContentType"] = media.mimetype + if "text" in media.mimetype: + extra_args["ContentType"] += "; charset=utf-8" except Exception as e: logger.warning(f"Unable to get mimetype for {media.key=}, error: {e}") self.s3.upload_fileobj(file, Bucket=self.bucket, Key=media.key, ExtraArgs=extra_args) From 22408e2a983983cfc981ebbf91f11aaa61f5a912 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 11:59:59 +0100 Subject: [PATCH 022/107] adds test for antibot --- .../antibot_extractor_enricher.py | 3 +- .../test_antibot_extractor_enricher.py | 173 ++++++++++++++++++ 2 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 tests/extractors/test_antibot_extractor_enricher.py diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py index 969c70f..6071fb1 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py @@ -3,6 +3,7 @@ import math import mimetypes import os import sys +import traceback from urllib.parse import urljoin from loguru import logger @@ -75,7 +76,7 @@ class AntibotExtractorEnricher(Extractor, Enricher): return to_enrich except Exception as e: - logger.error(f"ANTIBOT runtime error: {e}") + logger.error(f"ANTIBOT runtime error: {e}: {traceback.format_exc()}") return False def _hit_auth_wall(self, sb: SB) -> bool: diff --git a/tests/extractors/test_antibot_extractor_enricher.py b/tests/extractors/test_antibot_extractor_enricher.py new file mode 100644 index 0000000..0dd166c --- /dev/null +++ b/tests/extractors/test_antibot_extractor_enricher.py @@ -0,0 +1,173 @@ +import pytest + +from auto_archiver.modules.antibot_extractor_enricher.antibot_extractor_enricher import AntibotExtractorEnricher +from .test_extractor_base import TestExtractorBase + + +class DummySB: + def __init__(self, url="", title="", visible_texts=None, visible_elements=None): + self._url = url + self._title = title + self._visible_texts = visible_texts or set() + self._visible_elements = visible_elements or set() + + def get_current_url(self): + return self._url + + def get_title(self): + return self._title + + def is_text_visible(self, text): + return text in self._visible_texts + + def is_element_visible(self, selector): + return selector in self._visible_elements + + +class TestAntibotExtractorEnricher(TestExtractorBase): + """Tests Antibot Extractor/Enricher""" + + extractor_module = "antibot_extractor_enricher" + extractor: AntibotExtractorEnricher + + config = { + "save_to_pdf": False, + "max_download_images": 0, + "max_download_videos": 0, + "exclude_media_extensions": ".svg,.ico,.gif", + "proxy": None, + } + + @pytest.mark.download + @pytest.mark.parametrize( + "url,in_title,image_count,video_count", + [ + ( + "https://en.wikipedia.org/wiki/Western_barn_owl", + "western barn owl", + 5, + 0, + ), + ( + "https://www.bellingcat.com/news/2025/04/29/open-sources-show-myanmar-junta-airstrike-damages-despite-post-earthquake-ceasefire/", + "open sources show myanmar", + 5, + 0, + ), + ( + "https://www.bellingcat.com/news/2025/03/27/gaza-israel-palestine-shot-killed-injured-destroyed-dangerous-drone-journalists-in-gaza/", + "shot from above", + 5, + 1, + ), + ( + "https://www.bellingcat.com/about/general-information", + "general information", + 0, # SVGs are ignored + 0, + ), + ], + ) + def test_download_pages_with_media(self, setup_module, make_item, url, in_title, image_count, video_count): + """ + Test downloading pages with media. + """ + + self.extractor = setup_module( + self.extractor_module, + { + "save_to_pdf": True, + "max_download_images": 5, + "max_download_videos": "inf", + }, + ) + + item = make_item(url) + result = self.extractor.download(item) + + assert result.status == "antibot", "Expected status to be 'antibot'" + + # Check title contains all required words (case-insensitive) + page_title = result.get_title() or "" + assert in_title in page_title.lower(), f"Expected title to contain '{in_title}', got '{page_title}'" + + image_media = [m for m in result.media if m.is_image() and not m.get("id") == "screenshot"] + assert len(image_media) == image_count, f"Expected {image_count} image items, got {len(image_media)}" + video_media = [m for m in result.media if m.is_video()] + assert len(video_media) == video_count, f"Expected {video_count} video items, got {len(video_media)}" + + for expected_id in ["screenshot", "pdf", "html_source_code"]: + assert any(m.get("id") == expected_id for m in result.media), ( + f"Expected media with id '{expected_id}' not found" + ) + + @pytest.mark.download + @pytest.mark.parametrize( + "url,in_html", + [ + ( + "https://myrotvorets.center/about/", + "Центр «Миротворець»", + ), + ( + "https://seleniumbase.io/apps/turnstile", + 'id="captcha-success"', + ), + ], + ) + def test_download_with_cloudflare_turnstile(self, setup_module, make_item, url, in_html): + """ + Test downloading a page with Cloudflare Turnstile captcha. + """ + + item = make_item(url) + self.extractor.enrich(item) + + assert item.status != "antibot", "Expected status not to be 'antibot' after handling Cloudflare Turnstile" + + html_media = item.get_media_by_id("html_source_code") + with open(html_media.filename, "r", encoding="utf-8") as f: + html_content = f.read() + assert in_html.lower() in html_content.lower(), f"Expected HTML to contain '{in_html}'" + + @pytest.mark.parametrize( + "url,title,visible_texts,visible_elements,expected", + [ + # URL triggers + ("https://example.com/login", "Welcome", set(), set(), True), + ("https://example.com/somepage", "Just a moment...", set(), set(), True), + ("https://example.com/", "Welcome", {"Please log in"}, set(), True), + ("https://example.com/", "Welcome", set(), {"input[type='password']"}, True), + ("https://example.com/", "Welcome", set("No issue here"), set(), False), + # Title triggers + ("https://example.com/", "Log in", set(), set(), True), + ("https://example.com/", "Verification required", set(), set(), True), + # Text triggers (case-insensitive) + ("https://example.com/", "Welcome", {"Sign up or log in"}, set(), True), + ("https://example.com/", "Welcome", {"sign up or log in"}, set(), True), + # Element triggers + ("https://example.com/", "Welcome", set(), {"input[name='email']"}, True), + # No triggers + ("https://example.com/", "Welcome", set(), set(), False), + ], + ) + def test_hit_auth_wall(self, url, title, visible_texts, visible_elements, expected): + extractor = AntibotExtractorEnricher() + sb = DummySB(url=url, title=title, visible_texts=visible_texts, visible_elements=visible_elements) + assert extractor._hit_auth_wall(sb) == expected + + def test_enrich_handles_sb_exception(self, make_item, mocker): + """ + Test that enrich returns False and logs error if SB raises an exception. + """ + + # Patch SB to raise an exception on context enter + mock_sb = mocker.patch("auto_archiver.modules.antibot_extractor_enricher.antibot_extractor_enricher.SB") + mock_logger = mocker.patch("auto_archiver.modules.antibot_extractor_enricher.antibot_extractor_enricher.logger") + mock_sb.side_effect = Exception("SB failed") + + item = make_item("https://example.com/") + result = self.extractor.enrich(item) + + assert result is False + mock_logger.error.assert_called() From 5ec00f781133bc25259941106d23520aa3c8451e Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 12:00:22 +0100 Subject: [PATCH 023/107] adds dependencies for seleniumbase --- Dockerfile | 2 +- poetry.lock | 210 ++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 3 files changed, 208 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8100f95..6637f7d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,7 @@ ARG TARGETARCH # Installing system dependencies RUN add-apt-repository ppa:mozillateam/ppa && \ apt-get update && \ - apt-get install -y --no-install-recommends gcc ffmpeg fonts-noto exiftool && \ + apt-get install -y --no-install-recommends gcc ffmpeg fonts-noto exiftool python3-tk && \ apt-get install -y --no-install-recommends firefox-esr && \ ln -s /usr/bin/firefox-esr /usr/bin/firefox diff --git a/poetry.lock b/poetry.lock index 2081015..52dc143 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1427,6 +1427,22 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[[package]] +name = "mouseinfo" +version = "0.1.3" +description = "An application to display XY position and RGB color information for the pixel currently under the mouse. Works on Python 2 and 3." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "MouseInfo-0.1.3.tar.gz", hash = "sha256:2c62fb8885062b8e520a3cce0a297c657adcc08c60952eb05bc8256ef6f7f6e7"}, +] + +[package.dependencies] +pyperclip = "*" +python3-Xlib = {version = "*", markers = "platform_system == \"Linux\" and python_version >= \"3.0\""} +rubicon-objc = {version = "*", markers = "platform_system == \"Darwin\""} + [[package]] name = "mutagen" version = "1.47.0" @@ -1969,6 +1985,27 @@ files = [ [package.dependencies] pyasn1 = ">=0.6.1,<0.7.0" +[[package]] +name = "pyautogui" +version = "0.9.54" +description = "PyAutoGUI lets Python control the mouse and keyboard, and other GUI automation tasks. For Windows, macOS, and Linux, on Python 3 and 2." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "PyAutoGUI-0.9.54.tar.gz", hash = "sha256:dd1d29e8fd118941cb193f74df57e5c6ff8e9253b99c7b04f39cfc69f3ae04b2"}, +] + +[package.dependencies] +mouseinfo = "*" +pygetwindow = ">=0.0.5" +pymsgbox = "*" +pyobjc-core = {version = "*", markers = "platform_system == \"Darwin\""} +pyobjc-framework-quartz = {version = "*", markers = "platform_system == \"Darwin\""} +pyscreeze = ">=0.1.21" +python3-Xlib = {version = "*", markers = "platform_system == \"Linux\" and python_version >= \"3.0\""} +pytweening = ">=1.0.4" + [[package]] name = "pycodestyle" version = "2.13.0" @@ -2073,6 +2110,20 @@ doc = ["ablog (>=0.11.8)", "colorama", "graphviz", "ipykernel", "ipyleaflet", "i i18n = ["Babel", "jinja2"] test = ["pytest", "pytest-cov", "pytest-regressions", "sphinx[test]"] +[[package]] +name = "pygetwindow" +version = "0.0.9" +description = "A simple, cross-platform module for obtaining GUI information on application's windows." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "PyGetWindow-0.0.9.tar.gz", hash = "sha256:17894355e7d2b305cd832d717708384017c1698a90ce24f6f7fbf0242dd0a688"}, +] + +[package.dependencies] +pyrect = "*" + [[package]] name = "pygments" version = "2.19.1" @@ -2088,6 +2139,17 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pymsgbox" +version = "1.0.9" +description = "A simple, cross-platform, pure Python module for JavaScript-like message boxes." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "PyMsgBox-1.0.9.tar.gz", hash = "sha256:2194227de8bff7a3d6da541848705a155dcbb2a06ee120d9f280a1d7f51263ff"}, +] + [[package]] name = "pynose" version = "1.5.4" @@ -2100,6 +2162,67 @@ files = [ {file = "pynose-1.5.4.tar.gz", hash = "sha256:97dd0b7e85cf990120a01147e83ccd960c09ffcd69f6822f18e14128c6655e67"}, ] +[[package]] +name = "pyobjc-core" +version = "11.0" +description = "Python<->ObjC Interoperability Module" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "platform_system == \"Darwin\"" +files = [ + {file = "pyobjc_core-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:10866b3a734d47caf48e456eea0d4815c2c9b21856157db5917b61dee06893a1"}, + {file = "pyobjc_core-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:50675c0bb8696fe960a28466f9baf6943df2928a1fd85625d678fa2f428bd0bd"}, + {file = "pyobjc_core-11.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a03061d4955c62ddd7754224a80cdadfdf17b6b5f60df1d9169a3b1b02923f0b"}, + {file = "pyobjc_core-11.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c338c1deb7ab2e9436d4175d1127da2eeed4a1b564b3d83b9f3ae4844ba97e86"}, + {file = "pyobjc_core-11.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b4e9dc4296110f251a4033ff3f40320b35873ea7f876bd29a1c9705bb5e08c59"}, + {file = "pyobjc_core-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:02406ece449d0f41b31e579e47ca77ced3eb57533df955281bfcecc99da74fba"}, + {file = "pyobjc_core-11.0.tar.gz", hash = "sha256:63bced211cb8a8fb5c8ff46473603da30e51112861bd02c438fbbbc8578d9a70"}, +] + +[[package]] +name = "pyobjc-framework-cocoa" +version = "11.0" +description = "Wrappers for the Cocoa frameworks on macOS" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "platform_system == \"Darwin\"" +files = [ + {file = "pyobjc_framework_Cocoa-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fbc65f260d617d5463c7fb9dbaaffc23c9a4fabfe3b1a50b039b61870b8daefd"}, + {file = "pyobjc_framework_Cocoa-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3ea7be6e6dd801b297440de02d312ba3fa7fd3c322db747ae1cb237e975f5d33"}, + {file = "pyobjc_framework_Cocoa-11.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:280a577b83c68175a28b2b7138d1d2d3111f2b2b66c30e86f81a19c2b02eae71"}, + {file = "pyobjc_framework_Cocoa-11.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:15b2bd977ed340074f930f1330f03d42912d5882b697d78bd06f8ebe263ef92e"}, + {file = "pyobjc_framework_Cocoa-11.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:5750001db544e67f2b66f02067d8f0da96bb2ef71732bde104f01b8628f9d7ea"}, + {file = "pyobjc_framework_Cocoa-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ddff25b0755d59873d186e1e07d6aaddb19d55e3ae890d69ff2d9babf8627657"}, + {file = "pyobjc_framework_cocoa-11.0.tar.gz", hash = "sha256:00346a8cb81ad7b017b32ff7bf596000f9faa905807b1bd234644ebd47f692c5"}, +] + +[package.dependencies] +pyobjc-core = ">=11.0" + +[[package]] +name = "pyobjc-framework-quartz" +version = "11.0" +description = "Wrappers for the Quartz frameworks on macOS" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "platform_system == \"Darwin\"" +files = [ + {file = "pyobjc_framework_Quartz-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:da3ab13c9f92361959b41b0ad4cdd41ae872f90a6d8c58a9ed699bc08ab1c45c"}, + {file = "pyobjc_framework_Quartz-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d251696bfd8e8ef72fbc90eb29fec95cb9d1cc409008a183d5cc3246130ae8c2"}, + {file = "pyobjc_framework_Quartz-11.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cb4a9f2d9d580ea15e25e6b270f47681afb5689cafc9e25712445ce715bcd18e"}, + {file = "pyobjc_framework_Quartz-11.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:973b4f9b8ab844574461a038bd5269f425a7368d6e677e3cc81fcc9b27b65498"}, + {file = "pyobjc_framework_Quartz-11.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:66ab58d65348863b8707e63b2ec5cdc54569ee8189d1af90d52f29f5fdf6272c"}, + {file = "pyobjc_framework_Quartz-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1032f63f2a4ee98366764e69c249f1d93813821e17d224cf626cf11fb1801fc4"}, + {file = "pyobjc_framework_quartz-11.0.tar.gz", hash = "sha256:3205bf7795fb9ae34747f701486b3db6dfac71924894d1f372977c4d70c3c619"}, +] + +[package.dependencies] +pyobjc-core = ">=11.0" +pyobjc-framework-Cocoa = ">=11.0" + [[package]] name = "pyotp" version = "2.9.0" @@ -2130,6 +2253,17 @@ files = [ [package.extras] diagrams = ["jinja2", "railroad-diagrams"] +[[package]] +name = "pyperclip" +version = "1.9.0" +description = "A cross-platform clipboard module for Python. (Only handles plain text for now.)" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "pyperclip-1.9.0.tar.gz", hash = "sha256:b7de0142ddc81bfc5c7507eea19da920b92252b548b96186caf94a5e2527d310"}, +] + [[package]] name = "pyreadline3" version = "3.5.4" @@ -2146,6 +2280,34 @@ files = [ [package.extras] dev = ["build", "flake8", "mypy", "pytest", "twine"] +[[package]] +name = "pyrect" +version = "0.2.0" +description = "PyRect is a simple module with a Rect class for Pygame-like rectangular areas." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "PyRect-0.2.0.tar.gz", hash = "sha256:f65155f6df9b929b67caffbd57c0947c5ae5449d3b580d178074bffb47a09b78"}, +] + +[[package]] +name = "pyscreeze" +version = "1.0.1" +description = "A simple, cross-platform screenshot module for Python 2 and 3." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "pyscreeze-1.0.1.tar.gz", hash = "sha256:cf1662710f1b46aa5ff229ee23f367da9e20af4a78e6e365bee973cad0ead4be"}, +] + +[package.dependencies] +Pillow = [ + {version = ">=9.3.0", markers = "python_version == \"3.11\""}, + {version = ">=9.2.0", markers = "python_version == \"3.10\""}, +] + [[package]] name = "pysocks" version = "1.7.1" @@ -2400,6 +2562,29 @@ files = [ [package.dependencies] six = ">=1.10.0" +[[package]] +name = "python3-xlib" +version = "0.15" +description = "Python3 X Library" +optional = false +python-versions = "*" +groups = ["main"] +markers = "platform_system == \"Linux\"" +files = [ + {file = "python3-xlib-0.15.tar.gz", hash = "sha256:dc4245f3ae4aa5949c1d112ee4723901ade37a96721ba9645f2bfa56e5b383f8"}, +] + +[[package]] +name = "pytweening" +version = "1.2.0" +description = "A collection of tweening (aka easing) functions." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "pytweening-1.2.0.tar.gz", hash = "sha256:243318b7736698066c5f362ec5c2b6434ecf4297c3c8e7caa8abfe6af4cac71b"}, +] + [[package]] name = "pytz" version = "2025.2" @@ -2709,7 +2894,7 @@ description = "Manipulate well-formed Roman numerals" optional = false python-versions = ">=3.9" groups = ["docs"] -markers = "python_version == \"3.12\"" +markers = "python_version >= \"3.11\"" files = [ {file = "roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c"}, {file = "roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d"}, @@ -2810,6 +2995,23 @@ files = [ {file = "ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f"}, ] +[[package]] +name = "rubicon-objc" +version = "0.5.1" +description = "A bridge between an Objective C runtime environment and Python." +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "platform_system == \"Darwin\"" +files = [ + {file = "rubicon_objc-0.5.1-py3-none-any.whl", hash = "sha256:17092756241b8370231cfaad45ad6e8ce99534987f2acbc944d65df5bdf8f6cd"}, + {file = "rubicon_objc-0.5.1.tar.gz", hash = "sha256:90bee9fc1de4515e17615e15648989b88bb8d4d2ffc8c7c52748272cd7f30a66"}, +] + +[package.extras] +dev = ["pre-commit (==4.2.0)", "pytest (==8.3.5)", "setuptools_scm (==8.3.1)", "tox (==4.26.0)"] +docs = ["furo (==2024.8.6)", "pyenchant (==3.2.2)", "sphinx (==8.2.3)", "sphinx-autobuild (==2024.10.3)", "sphinx-copybutton (==0.5.2)", "sphinx_tabs (==3.4.7)", "sphinxcontrib-spelling (==8.0.1)"] + [[package]] name = "ruff" version = "0.9.10" @@ -3084,7 +3286,7 @@ description = "Python documentation generator" optional = false python-versions = ">=3.10" groups = ["docs"] -markers = "python_version < \"3.12\"" +markers = "python_version == \"3.10\"" files = [ {file = "sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2"}, {file = "sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927"}, @@ -3121,7 +3323,7 @@ description = "Python documentation generator" optional = false python-versions = ">=3.11" groups = ["docs"] -markers = "python_version == \"3.12\"" +markers = "python_version >= \"3.11\"" files = [ {file = "sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3"}, {file = "sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348"}, @@ -3952,4 +4154,4 @@ test = ["pytest (>=8.1,<9.0)", "pytest-rerunfailures (>=14.0,<15.0)"] [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "15c74c97bd0ba172fc81d7aafc7a720ede30b5e7fd61bea693a26f66692f53d3" +content-hash = "f142f1b7907266898024fbab926401f52bc4b281aef5f52e96382ce21afca1d1" diff --git a/pyproject.toml b/pyproject.toml index 83ad127..3fcbc9b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,6 +58,7 @@ dependencies = [ "yt-dlp[curl-cffi,default] (>=2025.5.22,<2026.0.0)", "secretstorage (>=3.3.3,<4.0.0)", "seleniumbase (>=4.36.4,<5.0.0)", + "pyautogui (>=0.9.54,<0.10.0)", ] [tool.poetry.group.dev.dependencies] From 258fb4faaf98c1c498b885d3081b8455465c155b Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 12:00:40 +0100 Subject: [PATCH 024/107] visual HTML preview improvements --- .../html_formatter/templates/html_template.html | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/auto_archiver/modules/html_formatter/templates/html_template.html b/src/auto_archiver/modules/html_formatter/templates/html_template.html index 62d6b0b..be4f151 100644 --- a/src/auto_archiver/modules/html_formatter/templates/html_template.html +++ b/src/auto_archiver/modules/html_formatter/templates/html_template.html @@ -12,6 +12,12 @@ font-family: 'Roboto', sans-serif; } + h2 { + white-space: normal; + overflow-wrap: break-word; + word-break: break-word; + } + table { table-layout: fixed; width: 90%; @@ -97,13 +103,17 @@ background-color: #f1f1f1; } - .pem-certificate, .text-preview { + .pem-certificate, + .text-preview { text-align: left; font-size: small; } - .text-preview{ + + .text-preview { padding-left: 10px; padding-right: 10px; + max-height: 300px; + overflow: auto; white-space: pre-wrap; } From e5a78a5d06e2719364b35f1f4c0155b854a6b0e5 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 12:01:42 +0100 Subject: [PATCH 025/107] antibot can be used out of the box --- .../modules/antibot_extractor_enricher/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py index a550b62..22a5aea 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py @@ -1,7 +1,7 @@ { "name": "Antibot Extractor/Enricher", "type": ["extractor", "enricher"], - "requires_setup": True, + "requires_setup": False, "dependencies": { "python": ["loguru", "seleniumbase"], }, From e6f3826a3a4db97bf0aafe2d594fb6f69bdb0b34 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 12:08:59 +0100 Subject: [PATCH 026/107] dropping screenshot enricher --- plugin.zip | Bin 615103 -> 0 bytes poetry.lock | 2 +- pyproject.toml | 1 - .../modules/screenshot_enricher/__init__.py | 1 - .../screenshot_enricher/__manifest__.py | 44 ------------- .../screenshot_enricher.py | 61 ------------------ 6 files changed, 1 insertion(+), 108 deletions(-) delete mode 100644 plugin.zip delete mode 100644 src/auto_archiver/modules/screenshot_enricher/__init__.py delete mode 100644 src/auto_archiver/modules/screenshot_enricher/__manifest__.py delete mode 100644 src/auto_archiver/modules/screenshot_enricher/screenshot_enricher.py diff --git a/plugin.zip b/plugin.zip deleted file mode 100644 index ecc06ab251b8ac1292f9f1c622bad1a1bcf3ef7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 615103 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�-OeKnko&9_pi{V_xPexVm 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/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�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

O}PAR?9`iXUcyp;T?uGnDjh6`rbqifD+A_ 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 v|D46$)$8ur&VO)Tz}xP=8.1,<9.0)", "pytest-rerunfailures (>=14.0,<15.0)"] [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "f142f1b7907266898024fbab926401f52bc4b281aef5f52e96382ce21afca1d1" +content-hash = "1ab1e4c9b8beb51116052c1e8d180616a0938757f173f05b7355e279902d3350" diff --git a/pyproject.toml b/pyproject.toml index 3fcbc9b..466d090 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,6 @@ dependencies = [ "bs4 (>=0.0.0)", "loguru (>=0.0.0)", "ffmpeg-python (>=0.0.0)", - "selenium (>=0.0.0)", "telethon (>=0.0.0)", "google-api-python-client (>=0.0.0)", "google-auth-httplib2 (>=0.0.0)", diff --git a/src/auto_archiver/modules/screenshot_enricher/__init__.py b/src/auto_archiver/modules/screenshot_enricher/__init__.py deleted file mode 100644 index 393f726..0000000 --- a/src/auto_archiver/modules/screenshot_enricher/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .screenshot_enricher import ScreenshotEnricher diff --git a/src/auto_archiver/modules/screenshot_enricher/__manifest__.py b/src/auto_archiver/modules/screenshot_enricher/__manifest__.py deleted file mode 100644 index db04e6c..0000000 --- a/src/auto_archiver/modules/screenshot_enricher/__manifest__.py +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "Screenshot Enricher", - "type": ["enricher"], - "requires_setup": True, - "dependencies": { - "python": ["loguru", "selenium"], - }, - "configs": { - "width": {"default": 1280, "type": "int", "help": "width of the screenshots"}, - "height": {"default": 1024, "type": "int", "help": "height of the screenshots"}, - "timeout": {"default": 60, "type": "int", "help": "timeout for taking the screenshot"}, - "sleep_before_screenshot": { - "default": 4, - "type": "int", - "help": "seconds to wait for the pages to load before taking screenshot", - }, - "http_proxy": { - "default": "", - "help": "http proxy to use for the webdriver, eg http://proxy-user:password@proxy-ip:port", - }, - "save_to_pdf": { - "default": False, - "type": "bool", - "help": "save the page as pdf along with the screenshot. PDF saving options can be adjusted with the 'print_options' parameter", - }, - "print_options": { - "default": {}, - "help": "options to pass to the pdf printer, in JSON format. See https://www.selenium.dev/documentation/webdriver/interactions/print_page/ for more information", - "type": "json_loader", - }, - }, - "description": """ - Captures screenshots and optionally saves web pages as PDFs using a WebDriver. - - ### Features - - Takes screenshots of web pages, with configurable width, height, and timeout settings. - - Optionally saves pages as PDFs, with additional configuration for PDF printing options. - - Bypasses URLs detected as authentication walls. - - Integrates seamlessly with the metadata enrichment pipeline, adding screenshots and PDFs as media. - - ### Notes - - Requires a WebDriver (e.g., ChromeDriver) installed and accessible via the system's PATH. - """, -} diff --git a/src/auto_archiver/modules/screenshot_enricher/screenshot_enricher.py b/src/auto_archiver/modules/screenshot_enricher/screenshot_enricher.py deleted file mode 100644 index 4e01357..0000000 --- a/src/auto_archiver/modules/screenshot_enricher/screenshot_enricher.py +++ /dev/null @@ -1,61 +0,0 @@ -from loguru import logger -import time -import os -import base64 - -from selenium.common.exceptions import TimeoutException - - -from auto_archiver.core import Enricher -from auto_archiver.utils import Webdriver, url as UrlUtil, random_str -from auto_archiver.core import Media, Metadata - - -class ScreenshotEnricher(Enricher): - def __init__(self, webdriver_factory=None): - super().__init__() - self.webdriver_factory = webdriver_factory or Webdriver - - def enrich(self, to_enrich: Metadata) -> None: - url = to_enrich.get_url() - - logger.debug(f"Enriching screenshot for {url=}") - auth = self.auth_for_site(url) - - # screenshot enricher only supports cookie-type auth (selenium) - has_valid_auth = auth and (auth.get("cookies") or auth.get("cookies_jar") or auth.get("cookie")) - - if UrlUtil.is_auth_wall(url) and not has_valid_auth: - logger.warning(f"[SKIP] SCREENSHOT since url is behind AUTH WALL and no login details provided: {url=}") - if any(auth.get(key) for key in ["username", "password", "api_key", "api_secret"]): - logger.warning( - f"Screenshot enricher only supports cookie-type authentication, you have provided {auth.keys()} which are not supported.\ - Consider adding 'cookie', 'cookies_file' or 'cookies_from_browser' to your auth for this site." - ) - return - - with self.webdriver_factory( - self.width, - self.height, - self.timeout, - facebook_accept_cookies="facebook.com" in url, - http_proxy=self.http_proxy, - print_options=self.print_options, - auth=auth, - ) as driver: - try: - driver.get(url) - time.sleep(int(self.sleep_before_screenshot)) - screenshot_file = os.path.join(self.tmp_dir, f"screenshot_{random_str(8)}.png") - driver.save_screenshot(screenshot_file) - to_enrich.add_media(Media(filename=screenshot_file), id="screenshot") - if self.save_to_pdf: - pdf_file = os.path.join(self.tmp_dir, f"pdf_{random_str(8)}.pdf") - pdf = driver.print_page(driver.print_options) - with open(pdf_file, "wb") as f: - f.write(base64.b64decode(pdf)) - to_enrich.add_media(Media(filename=pdf_file), id="pdf") - except TimeoutException: - logger.info("TimeoutException loading page for screenshot") - except Exception as e: - logger.error(f"Got error while loading webdriver for screenshot enricher: {e}") From f066111d49a1ac55cf10d1a6c52bb00b02fc7ca9 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 14:09:13 +0100 Subject: [PATCH 027/107] removes geckodriver dependencies following screenshot enricher removal --- Dockerfile | 22 ++-------------------- docs/source/installation/installation.md | 4 ++-- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6637f7d..fc92ce3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,26 +11,8 @@ ENV RUNNING_IN_DOCKER=1 \ ARG TARGETARCH # Installing system dependencies -RUN add-apt-repository ppa:mozillateam/ppa && \ - apt-get update && \ - apt-get install -y --no-install-recommends gcc ffmpeg fonts-noto exiftool python3-tk && \ - apt-get install -y --no-install-recommends firefox-esr && \ - ln -s /usr/bin/firefox-esr /usr/bin/firefox - -ARG GECKODRIVER_VERSION=0.36.0 - -RUN if [ $(uname -m) = "aarch64" ]; then \ - GECKODRIVER_ARCH=linux-aarch64; \ - else \ - GECKODRIVER_ARCH=linux64; \ - fi && \ - wget https://github.com/mozilla/geckodriver/releases/download/v${GECKODRIVER_VERSION}/geckodriver-v${GECKODRIVER_VERSION}-${GECKODRIVER_ARCH}.tar.gz && \ - tar -xvzf geckodriver* -C /usr/local/bin && \ - chmod +x /usr/local/bin/geckodriver && \ - rm geckodriver-v* && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* - +RUN apt-get update && \ + apt-get install -y --no-install-recommends gcc ffmpeg fonts-noto exiftool python3-tk # Poetry and runtime FROM base AS runtime diff --git a/docs/source/installation/installation.md b/docs/source/installation/installation.md index 40b21cf..5f68dad 100644 --- a/docs/source/installation/installation.md +++ b/docs/source/installation/installation.md @@ -51,8 +51,8 @@ After this, you're ready to set up your [your configuration file](configurations If using the local installation method, you will also need to install the following dependencies locally: 1.[ffmpeg](https://www.ffmpeg.org/) - for handling of downloaded videos -2. [firefox](https://www.mozilla.org/en-US/firefox/new/) and [geckodriver](https://github.com/mozilla/geckodriver/releases) on a path folder like `/usr/local/bin` - for taking webpage screenshots with the screenshot enricher -3. (optional) [fonts-noto](https://fonts.google.com/noto) to deal with multiple unicode characters during selenium/geckodriver's screenshots: `sudo apt install fonts-noto -y`. + +3. (optional) [fonts-noto](https://fonts.google.com/noto) to deal with multiple unicode characters during selenium screenshots: `sudo apt install fonts-noto -y`. 4. [Browsertrix Crawler docker image](https://hub.docker.com/r/webrecorder/browsertrix-crawler) for the WACZ enricher/archiver From bc8cf2fb291e0e567d179da58ee0bee9c146337e Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 14:10:19 +0100 Subject: [PATCH 028/107] minor TODO --- .../antibot_extractor_enricher/antibot_extractor_enricher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py index 6071fb1..63ca3e5 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py @@ -43,7 +43,7 @@ class AntibotExtractorEnricher(Extractor, Enricher): def enrich(self, to_enrich: Metadata) -> bool: url = to_enrich.get_url() - # TODO: implement cookies auth = self.auth_for_site(url) + # TODO: implement cookies auth = self.auth_for_site(url) and combine with if UrlUtil.is_auth_wall(url) like in ScreenshotEnricher url_sample = url[:75] try: with SB(uc=True, agent=self.agent, headed=None, proxy=self.proxy) as sb: From 5f68c151a078880dd6d004a5321728c3fa9ed178 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 14:17:19 +0100 Subject: [PATCH 029/107] removes webdriver utils used by screenshot enricher --- src/auto_archiver/utils/__init__.py | 1 - src/auto_archiver/utils/webdriver.py | 167 --------------------------- 2 files changed, 168 deletions(-) delete mode 100644 src/auto_archiver/utils/webdriver.py diff --git a/src/auto_archiver/utils/__init__.py b/src/auto_archiver/utils/__init__.py index a8fa77f..bbb66fe 100644 --- a/src/auto_archiver/utils/__init__.py +++ b/src/auto_archiver/utils/__init__.py @@ -2,7 +2,6 @@ # we need to explicitly expose the available imports here from .misc import * -from .webdriver import Webdriver # handy utils from ytdlp from yt_dlp.utils import clean_html, traverse_obj, strip_or_none, url_or_none diff --git a/src/auto_archiver/utils/webdriver.py b/src/auto_archiver/utils/webdriver.py deleted file mode 100644 index bd47f9d..0000000 --- a/src/auto_archiver/utils/webdriver.py +++ /dev/null @@ -1,167 +0,0 @@ -"""This Webdriver class acts as a context manager for the selenium webdriver.""" - -from __future__ import annotations - -import os -import time -import re - -# import domain_for_url -from urllib.parse import urlparse, urlunparse -from http.cookiejar import MozillaCookieJar - -from selenium import webdriver -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from selenium.common import exceptions as selenium_exceptions -from selenium.webdriver.common.print_page_options import PrintOptions -from selenium.webdriver.common.by import By - -from loguru import logger - - -class CookieSettingDriver(webdriver.Firefox): - facebook_accept_cookies: bool - cookie: str - cookie_jar: MozillaCookieJar - - def __init__(self, cookie, cookie_jar, facebook_accept_cookies, *args, **kwargs): - if os.environ.get("RUNNING_IN_DOCKER"): - # Selenium doesn't support linux-aarch64 driver, we need to set this manually - kwargs["service"] = webdriver.FirefoxService(executable_path="/usr/local/bin/geckodriver") - - super(CookieSettingDriver, self).__init__(*args, **kwargs) - self.cookie = cookie - self.cookie_jar = cookie_jar - self.facebook_accept_cookies = facebook_accept_cookies - - def get(self, url: str): - if self.cookie_jar or self.cookie: - # set up the driver to make it not 'cookie averse' (needs a context/URL) - # get the 'robots.txt' file which should be quick and easy - robots_url = urlunparse(urlparse(url)._replace(path="/robots.txt", query="", fragment="")) - super(CookieSettingDriver, self).get(robots_url) - - if self.cookie: - # an explicit cookie is set for this site, use that first - for cookie in self.cookies.split(";"): - for name, value in cookie.split("="): - self.driver.add_cookie({"name": name, "value": value}) - elif self.cookie_jar: - domain = urlparse(url).netloc.removeprefix("www.") - regex = re.compile(f"(www)?.?{domain}$") - for cookie in self.cookie_jar: - if regex.match(cookie.domain): - try: - self.add_cookie( - { - "name": cookie.name, - "value": cookie.value, - "path": cookie.path, - "domain": cookie.domain, - "secure": bool(cookie.secure), - "expiry": cookie.expires, - } - ) - except Exception as e: - logger.warning(f"Failed to add cookie ({cookie.domain}) to webdriver for url {domain}: {e}") - - super(CookieSettingDriver, self).get(url) - time.sleep(2) - - # Try and use some common button text to reject/accept cookies - for text in [ - "Refuse non-essential cookies", - "Decline optional cookies", - "Reject additional cookies", - "Reject all", - "Accept all cookies", - ]: - try: - xpath = f"//*[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '{text.lower()}')]" - self.find_element(By.XPATH, xpath).click() - time.sleep(2) - except selenium_exceptions.NoSuchElementException: - pass - - # now get the actual URL - if self.facebook_accept_cookies: - # try and click the 'close' button on the 'login' window to close it - try: - xpath = "//div[@role='dialog']//div[@aria-label='Close']" - self.find_element(By.XPATH, xpath).click() - time.sleep(2) - except selenium_exceptions.NoSuchElementException: - logger.warning("Unable to find the 'close' button on the facebook login window") - pass - - else: - # for all other sites, try and use some common button text to reject/accept cookies - for text in [ - "Refuse non-essential cookies", - "Decline optional cookies", - "Reject additional cookies", - "Reject all", - "Accept all cookies", - ]: - try: - xpath = f"//*[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '{text.lower()}')]" - WebDriverWait(self, 5).until(EC.element_to_be_clickable((By.XPATH, xpath))).click() - break - except selenium_exceptions.WebDriverException: - pass - - -class Webdriver: - def __init__( - self, - width: int, - height: int, - timeout_seconds: int, - facebook_accept_cookies: bool = False, - http_proxy: str = "", - print_options: dict = {}, - auth: dict = {}, - ) -> webdriver: - self.width = width - self.height = height - self.timeout_seconds = timeout_seconds - self.auth = auth - self.facebook_accept_cookies = facebook_accept_cookies - self.http_proxy = http_proxy - # create and set print options - self.print_options = PrintOptions() - for k, v in print_options.items(): - setattr(self.print_options, k, v) - - def __enter__(self) -> webdriver: - options = webdriver.FirefoxOptions() - options.add_argument("--headless") - options.add_argument(f"--proxy-server={self.http_proxy}") - options.set_preference("network.protocol-handler.external.tg", False) - # if facebook cookie popup is present, force the browser to English since then it's easier to click the 'Decline optional cookies' option - if self.facebook_accept_cookies: - options.add_argument("--lang=en") - - try: - self.driver = CookieSettingDriver( - cookie=self.auth.get("cookie"), - cookie_jar=self.auth.get("cookies_jar"), - facebook_accept_cookies=self.facebook_accept_cookies, - options=options, - ) - self.driver.set_window_size(self.width, self.height) - self.driver.set_page_load_timeout(self.timeout_seconds) - self.driver.print_options = self.print_options - except selenium_exceptions.TimeoutException as e: - logger.error( - f"failed to get new webdriver, possibly due to insufficient system resources or timeout settings: {e}" - ) - - return self.driver - - def __exit__(self, exc_type, exc_val, exc_tb): - self.driver.close() - self.driver.quit() - del self.driver - return True From 2c6be4447fabfbe0ee579ce34111dde95b394daa Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 14:17:38 +0100 Subject: [PATCH 030/107] linting --- tests/extractors/test_antibot_extractor_enricher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/extractors/test_antibot_extractor_enricher.py b/tests/extractors/test_antibot_extractor_enricher.py index 0dd166c..3eee3bd 100644 --- a/tests/extractors/test_antibot_extractor_enricher.py +++ b/tests/extractors/test_antibot_extractor_enricher.py @@ -168,6 +168,6 @@ class TestAntibotExtractorEnricher(TestExtractorBase): item = make_item("https://example.com/") result = self.extractor.enrich(item) - + assert result is False mock_logger.error.assert_called() From 05231445d9846e49686ae7772e408f3603b9e425 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 14:19:25 +0100 Subject: [PATCH 031/107] removes unnecessary ignored files --- .gitignore | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index c33ed62..dd37e69 100644 --- a/.gitignore +++ b/.gitignore @@ -36,9 +36,4 @@ docs/source/autoapi/ docs/source/modules/autogen/ scripts/settings_page.html scripts/settings/src/schema.json -.vite -extensions -recordings -saved_cookies -downloaded_files -face.py \ No newline at end of file +.vite \ No newline at end of file From 264ba82ea0c8b5ec3203ec8f85fe3e2cff07c765 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 14:31:07 +0100 Subject: [PATCH 032/107] finish removing screenshot_enricher references --- docs/source/flow_overview.md | 2 +- .../modules/pdq_hash_enricher/__manifest__.py | 2 +- .../pdq_hash_enricher/pdq_hash_enricher.py | 2 +- tests/enrichers/test_screenshot_enricher.py | 216 ------------------ 4 files changed, 3 insertions(+), 219 deletions(-) delete mode 100644 tests/enrichers/test_screenshot_enricher.py diff --git a/docs/source/flow_overview.md b/docs/source/flow_overview.md index 5ffa3a8..ff1409a 100644 --- a/docs/source/flow_overview.md +++ b/docs/source/flow_overview.md @@ -8,7 +8,7 @@ The archiver archives web pages using the following workflow 4. **Formatter** creates a report from all the archived content (HTML, PDF, ...) 5. **Database** knows what's been archived and also stores the archive result (spreadsheet, CSV, or just the console) -Each step in the workflow is handled by 'modules' that interact with the data in different ways. For example, the Twitter Extractor Module would extract information from the Twitter website. The Screenshot Enricher Module will take screenshots of the given page. See the [core modules page](core_modules.md) for an overview of all the modules that are available. +Each step in the workflow is handled by 'modules' that interact with the data in different ways. For example, the Twitter Extractor Module would extract information from the Twitter website. The AntiBot Module will download HTML and take screenshots of the given page. See the [core modules page](core_modules.md) for an overview of all the modules that are available. Auto-archiver must have at least one module defined for each step of the workflow. This is done by setting the [configuration](installation/configurations.md) for your auto-archiver instance. diff --git a/src/auto_archiver/modules/pdq_hash_enricher/__manifest__.py b/src/auto_archiver/modules/pdq_hash_enricher/__manifest__.py index 9c7a5c8..d02dfb7 100644 --- a/src/auto_archiver/modules/pdq_hash_enricher/__manifest__.py +++ b/src/auto_archiver/modules/pdq_hash_enricher/__manifest__.py @@ -15,7 +15,7 @@ - Skips non-image media or files unsuitable for hashing (e.g., corrupted or unsupported formats). ### Notes - - Best used after enrichers like `thumbnail_enricher` or `screenshot_enricher` to ensure images are available. + - Best used after enrichers like `thumbnail_enricher` or `antibot_extractor_enricher` (takes screenshots) to ensure images are available. - Uses the `pdqhash` library to compute 256-bit perceptual hashes, which are stored as hexadecimal strings. """, } diff --git a/src/auto_archiver/modules/pdq_hash_enricher/pdq_hash_enricher.py b/src/auto_archiver/modules/pdq_hash_enricher/pdq_hash_enricher.py index c7d4a47..19b9c59 100644 --- a/src/auto_archiver/modules/pdq_hash_enricher/pdq_hash_enricher.py +++ b/src/auto_archiver/modules/pdq_hash_enricher/pdq_hash_enricher.py @@ -6,7 +6,7 @@ objects and calculates perceptual hashes using the PDQ hashing algorithm. These hashes are designed specifically for images and can be used for detecting duplicate or near-duplicate visual content. -This enricher is typically used after thumbnail or screenshot enrichers +This enricher is typically used after thumbnail or screenshot (antibot) enrichers to ensure images are available for hashing. """ diff --git a/tests/enrichers/test_screenshot_enricher.py b/tests/enrichers/test_screenshot_enricher.py deleted file mode 100644 index ec56345..0000000 --- a/tests/enrichers/test_screenshot_enricher.py +++ /dev/null @@ -1,216 +0,0 @@ -import base64 - -import pytest -from selenium.common.exceptions import TimeoutException - -from auto_archiver.core import Metadata, Media -from auto_archiver.modules.screenshot_enricher import ScreenshotEnricher - - -@pytest.fixture -def mock_selenium_env(mocker): - """Patches Selenium calls and driver checks in one place.""" - - # Patch external dependencies - mock_which = mocker.patch("shutil.which") - mock_driver_class = mocker.patch("auto_archiver.utils.webdriver.CookieSettingDriver") - mock_binary_paths = mocker.patch("selenium.webdriver.common.selenium_manager.SeleniumManager.binary_paths") - mocker.patch("pathlib.Path.is_file", return_value=True) - mock_popen = mocker.patch("subprocess.Popen") - mocker.patch("selenium.webdriver.common.service.Service.is_connectable", return_value=True) - mock_firefox_options = mocker.patch("selenium.webdriver.FirefoxOptions") - - # Define side effect for `shutil.which` - def mock_which_side_effect(dep): - return "/mock/geckodriver" if dep == "geckodriver" else None - - mock_which.side_effect = mock_which_side_effect - - # Mock binary paths - mock_binary_paths.return_value = { - "driver_path": "/mock/driver", - "browser_path": "/mock/browser", - } - # Mock `subprocess.Popen` - mock_proc = mocker.MagicMock() - mock_proc.poll.return_value = None - mock_popen.return_value = mock_proc - # Mock `CookieSettingDriver` - mock_driver = mocker.MagicMock() - mock_driver_class.return_value = mock_driver - # Mock `FirefoxOptions` - mock_options_instance = mocker.MagicMock() - mock_firefox_options.return_value = mock_options_instance - yield mock_driver, mock_driver_class, mock_options_instance - - -@pytest.fixture -def common_patches(tmp_path, mocker): - """Patches common utilities used across multiple tests.""" - mocker.patch("auto_archiver.utils.url.is_auth_wall", return_value=False) - mocker.patch("os.path.join", return_value=str(tmp_path / "test.png")) - mocker.patch("time.sleep") - yield - - -@pytest.fixture -def screenshot_enricher(setup_module, mock_binary_dependencies) -> ScreenshotEnricher: - configs: dict = { - "width": 1280, - "height": 720, - "timeout": 60, - "sleep_before_screenshot": 4, - "http_proxy": "", - "save_to_pdf": "False", - "print_options": {}, - } - return setup_module("screenshot_enricher", configs) - - -@pytest.fixture -def metadata_with_video(): - m = Metadata() - m.set_url("https://example.com") - m.add_media(Media(filename="video.mp4").set("id", "video1")) - return m - - -def test_enrich_adds_screenshot( - screenshot_enricher, - metadata_with_video, - mock_selenium_env, - common_patches, - tmp_path, -): - mock_driver, mock_driver_class, mock_options_instance = mock_selenium_env - screenshot_enricher.enrich(metadata_with_video) - mock_driver_class.assert_called_once_with( - cookie=None, - cookie_jar=None, - facebook_accept_cookies=False, - options=mock_options_instance, - ) - # Verify the actual calls on the returned mock_driver - mock_driver.get.assert_called_once_with("https://example.com") - mock_driver.save_screenshot.assert_called_once_with(str(tmp_path / "test.png")) - # Check that the media was added (2 = original video + screenshot) - assert len(metadata_with_video.media) == 2 - assert metadata_with_video.media[1].properties.get("id") == "screenshot" - - -@pytest.mark.parametrize( - "url,is_auth", - [ - ("https://example.com", False), - ("https://private.com", True), - ], -) -def test_enrich_auth_wall( - screenshot_enricher, metadata_with_video, mock_selenium_env, common_patches, url, is_auth, mocker -): - # Testing with and without is_auth_wall - mock_driver, mock_driver_class, _ = mock_selenium_env - mocker.patch("auto_archiver.utils.url.is_auth_wall", return_value=is_auth) - metadata_with_video.set_url(url) - screenshot_enricher.enrich(metadata_with_video) - - if is_auth: - mock_driver.get.assert_not_called() - assert len(metadata_with_video.media) == 1 - assert metadata_with_video.media[0].properties.get("id") == "video1" - else: - mock_driver.get.assert_called_once_with(url) - assert len(metadata_with_video.media) == 2 - assert metadata_with_video.media[1].properties.get("id") == "screenshot" - - -def test_skip_authwall_no_cookies(screenshot_enricher, caplog): - with caplog.at_level("WARNING"): - screenshot_enricher.enrich(Metadata().set_url("https://instagram.com")) - assert "[SKIP] SCREENSHOT since url" in caplog.text - - -@pytest.mark.parametrize( - "auth", - [ - {"cookie": "cookie"}, - {"cookies_jar": "cookie"}, - ], -) -def test_dont_skip_authwall_with_cookies(screenshot_enricher, caplog, mocker, mock_selenium_env, auth): - mocker.patch("auto_archiver.utils.url.is_auth_wall", return_value=True) - - # patch the authentication dict: - screenshot_enricher.authentication = {"example.com": auth} - with caplog.at_level("WARNING"): - screenshot_enricher.enrich(Metadata().set_url("https://example.com")) - assert "[SKIP] SCREENSHOT since url" not in caplog.text - - -def test_show_warning_wrong_auth_type(screenshot_enricher, caplog, mocker, mock_selenium_env): - mock_driver, mock_driver_class, _ = mock_selenium_env - mocker.patch("auto_archiver.utils.url.is_auth_wall", return_value=True) - screenshot_enricher.authentication = {"example.com": {"username": "user", "password": "pass"}} - with caplog.at_level("WARNING"): - screenshot_enricher.enrich(Metadata().set_url("https://example.com")) - assert "Screenshot enricher only supports cookie-type authentication" in caplog.text - - -def test_handle_timeout_exception(screenshot_enricher, metadata_with_video, mock_selenium_env, mocker): - mock_driver, mock_driver_class, mock_options_instance = mock_selenium_env - - mock_driver.get.side_effect = TimeoutException - mock_log = mocker.patch("loguru.logger.info") - screenshot_enricher.enrich(metadata_with_video) - mock_log.assert_called_once_with("TimeoutException loading page for screenshot") - assert len(metadata_with_video.media) == 1 - - -def test_handle_general_exception(screenshot_enricher, metadata_with_video, mock_selenium_env, mocker): - """Test proper handling of unexpected general exceptions""" - mock_driver, mock_driver_class, mock_options_instance = mock_selenium_env - # Simulate a generic exception when save_screenshot is called - mock_driver.get.return_value = None - mock_driver.save_screenshot.side_effect = Exception("Unexpected Error") - - mock_log = mocker.patch("loguru.logger.error") - screenshot_enricher.enrich(metadata_with_video) - # Verify that the exception was logged with the log - mock_log.assert_called_once_with("Got error while loading webdriver for screenshot enricher: Unexpected Error") - # And no new media was added due to the error - assert len(metadata_with_video.media) == 1 - - -def test_pdf_creation(mocker, screenshot_enricher, metadata_with_video, mock_selenium_env): - """Test PDF creation when save_to_pdf is enabled""" - mock_driver, mock_driver_class, mock_options_instance = mock_selenium_env - # Override the save_to_pdf option - screenshot_enricher.save_to_pdf = True - # Mock the print_page method to return base64-encoded content - mock_driver.print_page.return_value = base64.b64encode(b"fake_pdf_content").decode("utf-8") - # Patch functions with mocker - mocker.patch("os.path.join", side_effect=lambda *args: f"{args[-1]}") - mocker.patch( - "auto_archiver.modules.screenshot_enricher.screenshot_enricher.random_str", - return_value="fixed123", - ) - mock_open = mocker.patch("builtins.open", new_callable=mocker.mock_open) - - screenshot_enricher.enrich(metadata_with_video) - # Verify screenshot and PDF creation - mock_driver.save_screenshot.assert_called_once() - mock_driver.print_page.assert_called_once_with(mock_driver.print_options) - # Check that PDF file was opened and written - mock_open.assert_any_call("pdf_fixed123.pdf", "wb") - - # Ensure both screenshot and PDF were added as media - assert len(metadata_with_video.media) == 3 - assert metadata_with_video.media[1].properties.get("id") == "screenshot" - assert metadata_with_video.media[2].properties.get("id") == "pdf" - - -@pytest.fixture(autouse=True) -def cleanup_files(tmp_path): - yield - for file in tmp_path.iterdir(): - file.unlink() From 5491f3e9e73b556ef3b0809e8700aa821412d6f1 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 14:41:00 +0100 Subject: [PATCH 033/107] fixing s3 storage tests --- tests/storages/test_S3_storage.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tests/storages/test_S3_storage.py b/tests/storages/test_S3_storage.py index 87da776..528170e 100644 --- a/tests/storages/test_S3_storage.py +++ b/tests/storages/test_S3_storage.py @@ -45,6 +45,19 @@ class TestS3Storage: assert self.storage.get_cdn_url(media) == "https://cdn.example.com/another/path.jpg" def test_uploadf_sets_acl_public(self, mocker): + media = Media("test.png") + mock_file = mocker.MagicMock() + mock_s3_upload = mocker.patch.object(self.storage.s3, "upload_fileobj") + mocker.patch.object(self.storage, "is_upload_needed", return_value=True) + self.storage.uploadf(mock_file, media) + mock_s3_upload.assert_called_once_with( + mock_file, + Bucket="test-bucket", + Key=media.key, + ExtraArgs={"ACL": "public-read", "ContentType": "image/png"}, + ) + + def test_uploadf_detects_charset_for_text_files(self, mocker): media = Media("test.txt") mock_file = mocker.MagicMock() mock_s3_upload = mocker.patch.object(self.storage.s3, "upload_fileobj") @@ -54,7 +67,7 @@ class TestS3Storage: mock_file, Bucket="test-bucket", Key=media.key, - ExtraArgs={"ACL": "public-read", "ContentType": "text/plain"}, + ExtraArgs={"ACL": "public-read", "ContentType": "text/plain; charset=utf-8"}, ) def test_upload_decision_logic(self, mocker): From 8a897cf601a7476d02f4efb3f008a4dec3f45bcf Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 4 Jun 2025 15:06:08 +0100 Subject: [PATCH 034/107] minimal changes: standard naming --- .../wacz_extractor_enricher/wacz_extractor_enricher.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py b/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py index 3a7c2f8..b1fbd80 100644 --- a/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py +++ b/src/auto_archiver/modules/wacz_extractor_enricher/wacz_extractor_enricher.py @@ -204,7 +204,7 @@ class WaczExtractorEnricher(Enricher, Extractor): if ( record.rec_type == "resource" and record.content_type == "image/png" and self.extract_screenshot ): # screenshots - fn = os.path.join(tmp_dir, f"warc-file-{counter_screenshots}.png") + fn = os.path.join(tmp_dir, f"browsertrix-screenshot-{counter_screenshots}.png") with open(fn, "wb") as outf: outf.write(record.raw_stream.read()) m = Media(filename=fn) @@ -232,9 +232,7 @@ class WaczExtractorEnricher(Enricher, Extractor): # create local file and add media ext = mimetypes.guess_extension(content_type) - warc_fn = f"warc-file-{counter_warc_files}{ext}" - fn = os.path.join(tmp_dir, warc_fn) record_url_best_qual = UrlUtil.twitter_best_quality_url(record_url) From c7a84bc97a51afc3bed37f992afba71bf7d71fa0 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Sat, 7 Jun 2025 18:14:08 +0100 Subject: [PATCH 035/107] generalizes ydl info to filename method for reusing --- .../generic_extractor/generic_extractor.py | 19 +++------------ src/auto_archiver/utils/misc.py | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/auto_archiver/modules/generic_extractor/generic_extractor.py b/src/auto_archiver/modules/generic_extractor/generic_extractor.py index 3ed6629..87bdbf6 100644 --- a/src/auto_archiver/modules/generic_extractor/generic_extractor.py +++ b/src/auto_archiver/modules/generic_extractor/generic_extractor.py @@ -20,6 +20,7 @@ from loguru import logger from auto_archiver.core.extractor import Extractor from auto_archiver.core import Metadata, Media from auto_archiver.utils import get_datetime_from_str +from auto_archiver.utils.misc import ydl_entry_to_filename from .dropin import GenericDropin @@ -382,27 +383,13 @@ class GenericExtractor(Extractor): entries = [data] result = Metadata() - def _helper_get_filename(entry: dict) -> str: - entry_url = entry.get("url") - filename = ydl.prepare_filename(entry) - base_filename, _ = os.path.splitext(filename) # '/get/path/to/file' ignore '.ext' - directory = os.path.dirname(base_filename) # '/get/path/to' - basename = os.path.basename(base_filename) # 'file' - for f in os.listdir(directory): - if ( - f.startswith(basename) - or (entry_url and os.path.splitext(f)[0] in entry_url) - and "video/" in (mimetypes.guess_type(f)[0] or "") - ): - return os.path.join(directory, f) - return False for entry in entries: try: - filename = _helper_get_filename(entry) + filename = ydl_entry_to_filename(ydl, entry) - if not filename or not os.path.exists(filename): + if not filename: # file was not downloaded or could not be retrieved, example: sensitive videos on YT without using cookies. continue diff --git a/src/auto_archiver/utils/misc.py b/src/auto_archiver/utils/misc.py index fe1864b..5b41a04 100644 --- a/src/auto_archiver/utils/misc.py +++ b/src/auto_archiver/utils/misc.py @@ -1,5 +1,6 @@ import hashlib import json +import mimetypes import os import uuid from datetime import datetime, timezone @@ -116,3 +117,26 @@ def get_timestamp(ts, utc=True, iso=True, dayfirst=True) -> str | datetime | Non def get_current_timestamp() -> str: return get_timestamp(datetime.now()) + + +def ydl_entry_to_filename(ydl, entry: dict) -> str: + import yt_dlp + + ydl: yt_dlp.YoutubeDL + entry_url = entry.get("url") + + filename = ydl.prepare_filename(entry) + if os.path.exists(filename): + return filename + + base_filename, _ = os.path.splitext(filename) # '/get/path/to/file' ignore '.ext' + directory = os.path.dirname(base_filename) # '/get/path/to' + basename = os.path.basename(base_filename) # 'file' + for f in os.listdir(directory): + if ( + f.startswith(basename) + or (entry_url and os.path.splitext(f)[0] in entry_url) + and "video/" in (mimetypes.guess_type(f)[0] or "") + ): + return os.path.join(directory, f) + return False \ No newline at end of file From 952487da3070fe00926249c9319c541a671782f4 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Sat, 7 Jun 2025 18:14:42 +0100 Subject: [PATCH 036/107] adds missing bin dependency --- src/auto_archiver/modules/generic_extractor/__manifest__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/auto_archiver/modules/generic_extractor/__manifest__.py b/src/auto_archiver/modules/generic_extractor/__manifest__.py index c9b9dc4..09388e8 100644 --- a/src/auto_archiver/modules/generic_extractor/__manifest__.py +++ b/src/auto_archiver/modules/generic_extractor/__manifest__.py @@ -5,7 +5,8 @@ "type": ["extractor"], "requires_setup": False, "dependencies": { - "python": ["yt_dlp", "requests", "loguru", "slugify"], + "python": ["yt_dlp", "requests", "loguru", "slugify"], + "bin": ["ffmpeg"] }, "description": """ This is the generic extractor used by auto-archiver, which uses `yt-dlp` under the hood. From e2e6490b49f68168c2a10edccb70a1c2e42908dd Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Sat, 7 Jun 2025 18:15:21 +0100 Subject: [PATCH 037/107] minimal changes --- .gitignore | 3 ++- src/auto_archiver/core/orchestrator.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index dd37e69..35eee83 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,5 @@ docs/source/autoapi/ docs/source/modules/autogen/ scripts/settings_page.html scripts/settings/src/schema.json -.vite \ No newline at end of file +.vite +downloaded_files \ No newline at end of file diff --git a/src/auto_archiver/core/orchestrator.py b/src/auto_archiver/core/orchestrator.py index f110f1b..0bff376 100644 --- a/src/auto_archiver/core/orchestrator.py +++ b/src/auto_archiver/core/orchestrator.py @@ -578,6 +578,7 @@ Here's how that would look: \n\nsteps:\n extractors:\n - [your_extractor_name_ result.set_url(url) if original_url != url: + logger.debug(f"Sanitized URL from {original_url} to {url}") result.set("original_url", original_url) # 2 - notify start to DBs, propagate already archived if feature enabled in DBs From d202d79e0f37c97423ead17c4751bd85dd19a94e Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Sat, 7 Jun 2025 19:06:14 +0100 Subject: [PATCH 038/107] lint --- src/auto_archiver/modules/generic_extractor/generic_extractor.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/auto_archiver/modules/generic_extractor/generic_extractor.py b/src/auto_archiver/modules/generic_extractor/generic_extractor.py index 87bdbf6..8d3bfb7 100644 --- a/src/auto_archiver/modules/generic_extractor/generic_extractor.py +++ b/src/auto_archiver/modules/generic_extractor/generic_extractor.py @@ -1,4 +1,3 @@ -import mimetypes import shutil import sys import datetime From 07ff5baf07c3d6189151895568691b649bd7753c Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Sat, 7 Jun 2025 19:09:37 +0100 Subject: [PATCH 039/107] adds Dropin flexible integration for antibot --- .../__manifest__.py | 8 +- .../antibot_extractor_enricher.py | 119 +++++++++++++++--- .../antibot_extractor_enricher/dropin.py | 55 ++++++++ .../modules/generic_extractor/__manifest__.py | 5 +- .../generic_extractor/generic_extractor.py | 2 - src/auto_archiver/utils/misc.py | 4 +- 6 files changed, 165 insertions(+), 28 deletions(-) create mode 100644 src/auto_archiver/modules/antibot_extractor_enricher/dropin.py diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py index 22a5aea..e48dc4a 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py @@ -2,9 +2,7 @@ "name": "Antibot Extractor/Enricher", "type": ["extractor", "enricher"], "requires_setup": False, - "dependencies": { - "python": ["loguru", "seleniumbase"], - }, + "dependencies": {"python": ["loguru", "seleniumbase", "yt_dlp"], "bin": ["ffmpeg"]}, "configs": { "save_to_pdf": { "default": False, @@ -23,6 +21,10 @@ "default": ".svg,.ico,.gif", "help": "CSV of media (image/video) file extensions to exclude from download", }, + "user_data_dir": { + "default": "secrets/antibot_user_data", + "help": "Path to the user data directory for the webdriver. This is used to persist browser state, such as cookies and local storage. When using docker it's best to let docker create the folder otherwise there may be permission issues. The Extractor will try to work without it if that error occurs but login sessions will be lost.", + }, "proxy": { "default": None, "help": "proxy to use for the webdriver, Format: 'SERVER:PORT' or 'USER:PASS@SERVER:PORT'", diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py index 63ca3e5..0401468 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py @@ -5,11 +5,16 @@ import os import sys import traceback from urllib.parse import urljoin +import glob +import stat +import importlib.util from loguru import logger +import selenium from seleniumbase import SB from auto_archiver.core import Extractor, Enricher, Metadata, Media +from auto_archiver.modules.antibot_extractor_enricher.dropin import Dropin from auto_archiver.utils.misc import random_str @@ -34,6 +39,38 @@ class AntibotExtractorEnricher(Extractor, Enricher): else: self.max_download_videos = int(self.max_download_videos) + os.makedirs(self.user_data_dir, exist_ok=True) + self._warn_about_docker_and_user_data_dir() + + self.dropins = self.load_dropins() + + def load_dropins(self): + dropins = [] + + # TODO: add user-configurable drop-ins via config like generic_extractor + dropins_dir = os.path.join(os.path.dirname(__file__), "dropins") + for file_path in glob.glob(os.path.join(dropins_dir, "*.py")): + if os.path.basename(file_path).startswith("_"): + continue # skip __init__.py or private modules + module_name = f"auto_archiver.modules.antibot_extractor_enricher.dropins.{os.path.splitext(os.path.basename(file_path))[0]}" + spec = importlib.util.spec_from_file_location(module_name, file_path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + for attr in dir(module): + obj = getattr(module, attr) + if getattr(obj, "__module__", None) != module.__name__: + continue # Skip imported modules/classes/functions + if isinstance(obj, type) and issubclass(obj, Dropin): + dropins.append(obj) + logger.debug(f"ANTIBOT loaded drop-in classes: {', '.join([d.__name__ for d in dropins])}") + return dropins + + def sanitize_url(self, url: str) -> str: + for dropin in self.dropins: + if dropin.suitable(url): + return dropin.sanitize_url(url) + return url + def download(self, item: Metadata) -> Metadata: result = Metadata() result.merge(item) @@ -41,12 +78,26 @@ class AntibotExtractorEnricher(Extractor, Enricher): result.status = "antibot" return result - def enrich(self, to_enrich: Metadata) -> bool: + def _warn_about_docker_and_user_data_dir(self): + in_docker = os.environ.get("RUNNING_IN_DOCKER") + if in_docker and self.user_data_dir: + st = os.stat(self.user_data_dir) + perms = stat.filemode(st.st_mode) + owner = st.st_uid + group = st.st_gid + if owner != 0 or group != 0: + logger.warning( + f"""ANTIBOT: Running in Docker with user_data_dir {self.user_data_dir} with permissions {perms} and non-root {owner=}. This may cause issues with Chrome, if you get 'session not created' errors make sure to remove the folder and let docker create it.""" + ) + + def enrich(self, to_enrich: Metadata, custom_data_dir: bool = True) -> bool: + using_user_data_dir = self.user_data_dir if custom_data_dir else None url = to_enrich.get_url() # TODO: implement cookies auth = self.auth_for_site(url) and combine with if UrlUtil.is_auth_wall(url) like in ScreenshotEnricher url_sample = url[:75] + try: - with SB(uc=True, agent=self.agent, headed=None, proxy=self.proxy) as sb: + with SB(uc=True, agent=self.agent, headed=None, user_data_dir=using_user_data_dir, proxy=self.proxy) as sb: logger.info(f"ANTIBOT selenium browser is up with agent {self.agent}, opening {url_sample}...") sb.uc_open_with_reconnect(url, 4) @@ -55,11 +106,17 @@ class AntibotExtractorEnricher(Extractor, Enricher): # TODO: implement other Captcha handling sb.uc_gui_handle_captcha() # handles Cloudflare Turnstile captcha if detected - # time.sleep(1) # wait for the page to load + suitable_dropin = self._get_suitable_dropin(url, sb) + + if suitable_dropin: + suitable_dropin.open_page(url) + if self._hit_auth_wall(sb): logger.warning(f"ANTIBOT SKIP since auth wall or CAPTCHA was detected for {url_sample}") return False logger.debug(f"ANTIBOT no auth wall detected for {url_sample}...") + sb.wait_for_ready_state_complete() + sb.sleep(1) # margin for the page to load completely to_enrich.set_title(sb.get_title()) self._enrich_html_source_code(sb, to_enrich) @@ -67,18 +124,42 @@ class AntibotExtractorEnricher(Extractor, Enricher): if self.save_to_pdf: self._enrich_full_page_pdf(sb, to_enrich) - self._enrich_download_media(sb, to_enrich, css_selector="img", max_media=self.max_download_images) - self._enrich_download_media( - sb, to_enrich, css_selector="video, source", max_media=self.max_download_videos - ) + downloaded_images, downloaded_videos = 0, 0 + if suitable_dropin: + downloaded_images, downloaded_videos = suitable_dropin.add_extra_media(to_enrich) + self._enrich_download_media( + sb, to_enrich, css_selector="img", max_media=self.max_download_images - downloaded_images + ) + self._enrich_download_media( + sb, to_enrich, css_selector="video, source", max_media=self.max_download_videos - downloaded_videos + ) logger.success(f"ANTIBOT completed for {url_sample}") return to_enrich + except selenium.common.exceptions.SessionNotCreatedException as e: + if custom_data_dir: # the retry logic only works once + logger.error( + f"ANTIBOT session not created error: {e}. Please remove the user_data_dir {self.user_data_dir} and try again, will retry without user data dir though." + ) + return self.enrich(to_enrich, custom_data_dir=False) + raise e # re-raise except Exception as e: logger.error(f"ANTIBOT runtime error: {e}: {traceback.format_exc()}") return False + def _get_suitable_dropin(self, url: str, sb: SB): + """ + Returns a suitable drop-in for the given URL. + This method checks if the URL is suitable for any of the registered drop-ins. + """ + for dropin in self.dropins: + if dropin.suitable(url): + logger.debug(f"ANTIBOT using drop-in {dropin.__class__.__name__} for {url}") + return dropin(sb, self) + # logger.warning(f"ANTIBOT no suitable drop-in found for {url}") + return None + def _hit_auth_wall(self, sb: SB) -> bool: """ Tries to detect if the currently loaded page is an auth/login wall. @@ -202,16 +283,20 @@ class AntibotExtractorEnricher(Extractor, Enricher): ) url = to_enrich.get_url() all_urls = set() - media_elements = sb.find_elements(css_selector) - for media in media_elements: + # media_elements = sb.find_elements(css_selector) + sources = sb.execute_script(f""" + return Array.from(document.querySelectorAll("{css_selector}")) + .map(el => el.src || el.href) + .filter(Boolean); + """) + for src in sources: if len(all_urls) >= max_media: logger.debug(f"Reached max download limit of {max_media} images/videos.") break - if src := media.get_attribute("src"): - mimerype = mimetypes.guess_type(src)[0] - if mimerype in self.exclude_media_mimetypes: - continue - full_src = urljoin(url, src) - if full_src not in all_urls and (filename := self.download_from_url(full_src)): - all_urls.add(full_src) - to_enrich.add_media(Media(filename=filename, properties={"url": full_src})) + mimerype = mimetypes.guess_type(src)[0] + if mimerype in self.exclude_media_mimetypes: + continue + full_src = urljoin(url, src) + if full_src not in all_urls and (filename := self.download_from_url(full_src)): + all_urls.add(full_src) + to_enrich.add_media(Media(filename=filename, properties={"url": full_src})) diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py new file mode 100644 index 0000000..39e34a9 --- /dev/null +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py @@ -0,0 +1,55 @@ +from seleniumbase import SB + +from auto_archiver.core.extractor import Extractor +from auto_archiver.core.metadata import Metadata + + +class Dropin: + """ + A class to handle drop-in functionality for the antibot extractor enricher module. + This class is designed to be a base class for drop-ins that can handle specific websites. + """ + + def __init__(self, sb: SB, extractor: Extractor): + """ + Initialize the Dropin with the given SeleniumBase instance. + + :param sb: An instance of the SeleniumBase class that this drop-in will use. + :param extractor: An instance of the Extractor class that this drop-in will use. + """ + self.sb: SB = sb + self.extractor: Extractor = extractor + + @staticmethod + def suitable(url: str) -> bool: + """ + Check if the URL is suitable for processing with this dropin. + + :param url: The URL to check. + :return: True if the URL is suitable for processing, False otherwise. + """ + raise NotImplementedError("This method should be implemented in the subclass") + + @staticmethod + def sanitize_url(url: str) -> str: + """ + Used to clean unnecessary URL parameters OR unfurl redirect links + """ + return url + + def open_page(self, url) -> bool: + """ + Make sure the page is opened, even if it requires authentication, captcha solving, etc. + :param url: The URL to open. + :return: True if success, False otherwise. + """ + raise NotImplementedError("This method should be implemented in the subclass") + + def add_extra_media(self, to_enrich: Metadata) -> tuple[int, int]: + """ + Extract image and/or video data from the currently open post with SeleniumBase. Media is added to the `to_enrich` Metadata object. + + + :return: A tuple (number of Images added, number of Videos added). + """ + raise NotImplementedError("This method should be implemented in the subclass") diff --git a/src/auto_archiver/modules/generic_extractor/__manifest__.py b/src/auto_archiver/modules/generic_extractor/__manifest__.py index 09388e8..72db630 100644 --- a/src/auto_archiver/modules/generic_extractor/__manifest__.py +++ b/src/auto_archiver/modules/generic_extractor/__manifest__.py @@ -4,10 +4,7 @@ "author": "Bellingcat", "type": ["extractor"], "requires_setup": False, - "dependencies": { - "python": ["yt_dlp", "requests", "loguru", "slugify"], - "bin": ["ffmpeg"] - }, + "dependencies": {"python": ["yt_dlp", "requests", "loguru", "slugify"], "bin": ["ffmpeg"]}, "description": """ This is the generic extractor used by auto-archiver, which uses `yt-dlp` under the hood. diff --git a/src/auto_archiver/modules/generic_extractor/generic_extractor.py b/src/auto_archiver/modules/generic_extractor/generic_extractor.py index 8d3bfb7..3417465 100644 --- a/src/auto_archiver/modules/generic_extractor/generic_extractor.py +++ b/src/auto_archiver/modules/generic_extractor/generic_extractor.py @@ -382,8 +382,6 @@ class GenericExtractor(Extractor): entries = [data] result = Metadata() - - for entry in entries: try: filename = ydl_entry_to_filename(ydl, entry) diff --git a/src/auto_archiver/utils/misc.py b/src/auto_archiver/utils/misc.py index 5b41a04..27a1bc9d 100644 --- a/src/auto_archiver/utils/misc.py +++ b/src/auto_archiver/utils/misc.py @@ -128,7 +128,7 @@ def ydl_entry_to_filename(ydl, entry: dict) -> str: filename = ydl.prepare_filename(entry) if os.path.exists(filename): return filename - + base_filename, _ = os.path.splitext(filename) # '/get/path/to/file' ignore '.ext' directory = os.path.dirname(base_filename) # '/get/path/to' basename = os.path.basename(base_filename) # 'file' @@ -139,4 +139,4 @@ def ydl_entry_to_filename(ydl, entry: dict) -> str: and "video/" in (mimetypes.guess_type(f)[0] or "") ): return os.path.join(directory, f) - return False \ No newline at end of file + return False From b2ee42ee9559d061fb0531828632b8a214d8eec4 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Sat, 7 Jun 2025 19:10:01 +0100 Subject: [PATCH 040/107] adds the first antibot dropin: VKontakte --- .../antibot_extractor_enricher/dropins/vk.py | 130 ++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py new file mode 100644 index 0000000..9f33239 --- /dev/null +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py @@ -0,0 +1,130 @@ +import os +import re + +from auto_archiver.core.media import Media +from auto_archiver.core.metadata import Metadata +from auto_archiver.modules.antibot_extractor_enricher.dropin import Dropin +from auto_archiver.utils.misc import ydl_entry_to_filename + +import yt_dlp +from loguru import logger + + +class VkDropin(Dropin): + """ + A class to handle VK drop-in functionality for the antibot extractor enricher module. + """ + + WALL_PATTERN = re.compile(r"(wall.{0,1}\d+_\d+)") + PHOTO_PATTERN = re.compile(r"(photo.{0,1}\d+_\d+)") + VIDEO_PATTERN = re.compile(r"(video.{0,1}\d+_\d+(?:_\w+)?)") + + @staticmethod + def suitable(url: str) -> bool: + """ + Only suitable for VK URLs that match the wall, photo, or video patterns. + Otherwise, for example, for pages a large amount of media may be downloaded. + """ + return "vk.com" in url + + @staticmethod + def sanitize_url(url: str) -> str: + # TODO: test method + """ + Transforms modal URLs like 'https://vk.com/page_name?w=wall-123456_7890' to 'https://vk.com/wall-123456_7890' + """ + for pattern in [VkDropin.WALL_PATTERN, VkDropin.PHOTO_PATTERN, VkDropin.VIDEO_PATTERN]: + match = pattern.search(url) + if match: + return f"https://vk.com/{match.group(1)}" + return url + + def open_page(self, url) -> bool: + logger.debug("Checking if authenticated for VK...") + if self.sb.get_current_url() != url or self.sb.is_text_visible("Sign in to VK"): + logger.info("Opening VK page: {}", url) + self._login() + self.sb.open(url) + logger.debug("VK page opened successfully.") + return True + + def _login(self) -> bool: + self.sb.activate_cdp_mode("https://vk.com") + self.sb.wait_for_ready_state_complete() + if "/feed" in self.sb.get_current_url(): + logger.debug("Already logged in to VK.") + return True + + # need to login + logger.debug("Logging in to VK...") + auth = self.extractor.auth_for_site("vk.com") + username = auth.get("username", "") + password = auth.get("password", "") + if not username or not password: + raise ValueError("VK authentication requires a username and password.") + logger.debug("Using username: {}", username) + self.sb.click('[data-testid="enter-another-way"]', timeout=10) + self.sb.clear('input[name="login"][type="tel"]', by="css selector", timeout=10) + self.sb.type('input[name="login"][type="tel"]', username, by="css selector", timeout=10) + self.sb.click('button[type="submit"]') + + # TODO: handle captcha if it appears + # if sb.is_element_visible("img.vkc__CaptchaPopup__image"): + # captcha_url = sb.get_attribute("img.vkc__CaptchaPopup__image", "src") + # print("CAPTCHA detected:", captcha_url) + # image_url = sb.get_attribute("img[alt*='captcha']", "src") + # solution = solve_captcha(image_url) + # sb.type("input#captcha-text, input[name='captcha']", solution) + # sb.click("button[type='submit']") + + self.sb.type('input[name="password"]', password, timeout=15) + self.sb.click('button[type="submit"]') + self.sb.wait_for_ready_state_complete(timeout=10) + self.sb.wait_for_element("body", timeout=10) + # self.sb.sleep(2) + return "/feed" in self.sb.get_current_url() + + @logger.catch + def add_extra_media(self, to_enrich: Metadata) -> tuple[int, int]: + """ + Extract video data from the currently open post with SeleniumBase. + + :return: A tuple (number of Images added, number of Videos added). + """ + max_videos = self.extractor.max_download_videos + video_urls = [v.get_attribute("href") for v in self.sb.find_elements('a[href*="/video-"]')][:max_videos] + if not video_urls: + return 0, 0 + + logger.debug(f"Found {len(video_urls)} video URLs in the post, using ytdlp for download.") + ydl_options = [ + "-o", + os.path.join(self.extractor.tmp_dir, "%(id)s.%(ext)s"), + # "--quiet", + "--no-playlist", + "--no-write-subs", + "--no-write-auto-subs", + "--postprocessor-args", + "ffmpeg:-bitexact", + "--max-filesize", + "1000M", # Limit to 1GB per video + ] + *_, validated_options = yt_dlp.parse_options(ydl_options) + downloaded = 0 + with yt_dlp.YoutubeDL(validated_options) as ydl: + for url in video_urls: + try: + logger.debug(f"Downloading video from URL: {url}") + info = ydl.extract_info(url, download=True) + filename = ydl_entry_to_filename(ydl, info) + if not filename: # Failed to download video. + continue + media = Media(filename) + for x in ["duration", "original_url", "fulltitle", "description", "upload_date"]: + if x in info: + media.set(x, info[x]) + to_enrich.add_media(media) + downloaded += 1 + except Exception as e: + logger.error(f"Error downloading {url}: {e}") + return 0, downloaded From 48c1ab3c1ff118ffe7aa2619d0ce7c0816aec2bd Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Sat, 7 Jun 2025 19:14:16 +0100 Subject: [PATCH 041/107] doc improvements --- .../modules/antibot_extractor_enricher/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py index e48dc4a..d2e9d66 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py @@ -23,7 +23,7 @@ }, "user_data_dir": { "default": "secrets/antibot_user_data", - "help": "Path to the user data directory for the webdriver. This is used to persist browser state, such as cookies and local storage. When using docker it's best to let docker create the folder otherwise there may be permission issues. The Extractor will try to work without it if that error occurs but login sessions will be lost.", + "help": "Path to the user data directory for the webdriver. This is used to persist browser state, such as cookies and local storage. When using docker it's best to let docker create the folder otherwise there may be permission issues. The Extractor will try to work without it if that error occurs but login sessions will not be used or preserved on those runs.", }, "proxy": { "default": None, From d13a5ef00392452658e8799686ea902d18b683ff Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Sat, 7 Jun 2025 19:58:18 +0100 Subject: [PATCH 042/107] adds tests in minor improvements --- .../antibot_extractor_enricher.py | 1 - .../antibot_extractor_enricher/dropin.py | 5 +- .../antibot_extractor_enricher/dropins/vk.py | 16 ++-- tests/extractors/test_antibot_dropin_vk.py | 81 +++++++++++++++++++ .../test_antibot_extractor_enricher.py | 26 +++++- 5 files changed, 111 insertions(+), 18 deletions(-) create mode 100644 tests/extractors/test_antibot_dropin_vk.py diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py index 0401468..c8dc137 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py @@ -93,7 +93,6 @@ class AntibotExtractorEnricher(Extractor, Enricher): def enrich(self, to_enrich: Metadata, custom_data_dir: bool = True) -> bool: using_user_data_dir = self.user_data_dir if custom_data_dir else None url = to_enrich.get_url() - # TODO: implement cookies auth = self.auth_for_site(url) and combine with if UrlUtil.is_auth_wall(url) like in ScreenshotEnricher url_sample = url[:75] try: diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py index 39e34a9..805edfd 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py @@ -24,7 +24,6 @@ class Dropin: def suitable(url: str) -> bool: """ Check if the URL is suitable for processing with this dropin. - :param url: The URL to check. :return: True if the URL is suitable for processing, False otherwise. """ @@ -33,7 +32,7 @@ class Dropin: @staticmethod def sanitize_url(url: str) -> str: """ - Used to clean unnecessary URL parameters OR unfurl redirect links + Used to clean URLs before processing them. """ return url @@ -48,8 +47,6 @@ class Dropin: def add_extra_media(self, to_enrich: Metadata) -> tuple[int, int]: """ Extract image and/or video data from the currently open post with SeleniumBase. Media is added to the `to_enrich` Metadata object. - - :return: A tuple (number of Images added, number of Videos added). """ raise NotImplementedError("This method should be implemented in the subclass") diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py index 9f33239..b36b517 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py @@ -21,19 +21,14 @@ class VkDropin(Dropin): @staticmethod def suitable(url: str) -> bool: - """ - Only suitable for VK URLs that match the wall, photo, or video patterns. - Otherwise, for example, for pages a large amount of media may be downloaded. - """ return "vk.com" in url @staticmethod def sanitize_url(url: str) -> str: - # TODO: test method """ Transforms modal URLs like 'https://vk.com/page_name?w=wall-123456_7890' to 'https://vk.com/wall-123456_7890' """ - for pattern in [VkDropin.WALL_PATTERN, VkDropin.PHOTO_PATTERN, VkDropin.VIDEO_PATTERN]: + for pattern in [VkDropin.WALL_PATTERN, VkDropin.VIDEO_PATTERN, VkDropin.PHOTO_PATTERN]: match = pattern.search(url) if match: return f"https://vk.com/{match.group(1)}" @@ -49,6 +44,7 @@ class VkDropin(Dropin): return True def _login(self) -> bool: + # TODO: test method self.sb.activate_cdp_mode("https://vk.com") self.sb.wait_for_ready_state_complete() if "/feed" in self.sb.get_current_url(): @@ -91,8 +87,10 @@ class VkDropin(Dropin): :return: A tuple (number of Images added, number of Videos added). """ - max_videos = self.extractor.max_download_videos - video_urls = [v.get_attribute("href") for v in self.sb.find_elements('a[href*="/video-"]')][:max_videos] + video_urls = [v.get_attribute("href") for v in self.sb.find_elements('a[href*="/video-"]')] + if type(self.extractor.max_download_videos) is int: + video_urls = video_urls[: self.extractor.max_download_videos] + if not video_urls: return 0, 0 @@ -100,7 +98,7 @@ class VkDropin(Dropin): ydl_options = [ "-o", os.path.join(self.extractor.tmp_dir, "%(id)s.%(ext)s"), - # "--quiet", + "--quiet", "--no-playlist", "--no-write-subs", "--no-write-auto-subs", diff --git a/tests/extractors/test_antibot_dropin_vk.py b/tests/extractors/test_antibot_dropin_vk.py new file mode 100644 index 0000000..c39e2a3 --- /dev/null +++ b/tests/extractors/test_antibot_dropin_vk.py @@ -0,0 +1,81 @@ +import pytest +from auto_archiver.modules.antibot_extractor_enricher.dropins.vk import VkDropin + + +@pytest.mark.parametrize( + "input_url,expected", + [ + # Wall post modal URL + ( + "https://vk.com/somepage?w=wall-123456_7890", + "https://vk.com/wall-123456_7890", + ), + # Wall post modal URL with no dash + ( + "https://vk.com/somepage?w=wall123456_7890", + "https://vk.com/wall123456_7890", + ), + # Photo modal URL + ( + "https://vk.com/somepage?w=photo-654321_9876", + "https://vk.com/photo-654321_9876", + ), + # Photo modal URL with no dash + ( + "https://vk.com/somepage?w=photo654321_9876", + "https://vk.com/photo654321_9876", + ), + # Video modal URL + ( + "https://vk.com/somepage?w=video-111222_3334", + "https://vk.com/video-111222_3334", + ), + # Video modal URL with extra part + ( + "https://vk.com/somepage?w=video-111222_3334_ABC", + "https://vk.com/video-111222_3334_ABC", + ), + # Video modal URL with no dash + ( + "https://vk.com/somepage?w=video111222_3334", + "https://vk.com/video111222_3334", + ), + # No modal, should return unchanged + ( + "https://vk.com/wall-123456_7890", + "https://vk.com/wall-123456_7890", + ), + ( + "https://vk.com/photo-654321_9876", + "https://vk.com/photo-654321_9876", + ), + ( + "https://vk.com/video-111222_3334", + "https://vk.com/video-111222_3334", + ), + # Unrelated URL, should return unchanged + ( + "https://vk.com/id123456", + "https://vk.com/id123456", + ), + ( + "https://example.com/", + "https://example.com/", + ), + # Modal with multiple params, should still work with right priority + ( + "https://vk.com/somepage?z=photo-654321_9876&w=wall-123456_7890", + "https://vk.com/wall-123456_7890", + ), + ( + "https://vk.com/somepage?z=photo-654321_9876&w=video-111222_3334", + "https://vk.com/video-111222_3334", + ), + ( + "https://vk.com/somepage?z=video-111222_3334&w=wall-654321_9876", + "https://vk.com/wall-654321_9876", + ), + ], +) +def test_sanitize_url(input_url, expected): + assert VkDropin.sanitize_url(input_url) == expected diff --git a/tests/extractors/test_antibot_extractor_enricher.py b/tests/extractors/test_antibot_extractor_enricher.py index 3eee3bd..1da025d 100644 --- a/tests/extractors/test_antibot_extractor_enricher.py +++ b/tests/extractors/test_antibot_extractor_enricher.py @@ -40,35 +40,46 @@ class TestAntibotExtractorEnricher(TestExtractorBase): @pytest.mark.download @pytest.mark.parametrize( - "url,in_title,image_count,video_count", + "url,in_title,in_text,image_count,video_count", [ ( "https://en.wikipedia.org/wiki/Western_barn_owl", "western barn owl", + "Tyto alba", 5, 0, ), ( "https://www.bellingcat.com/news/2025/04/29/open-sources-show-myanmar-junta-airstrike-damages-despite-post-earthquake-ceasefire/", "open sources show myanmar", + "Bellingcat has geolocated", 5, 0, ), ( "https://www.bellingcat.com/news/2025/03/27/gaza-israel-palestine-shot-killed-injured-destroyed-dangerous-drone-journalists-in-gaza/", "shot from above", + "continued the work of Gazan journalists", 5, 1, ), ( "https://www.bellingcat.com/about/general-information", "general information", + "Stichting Bellingcat", 0, # SVGs are ignored 0, ), + ( + "https://vk.com/wikipedia?from=search&w=wall-36156673_20451", + "Hounds of Love", + "16 сентября 1985 года лейблом EMI Records.", + 5, + 0, + ), ], ) - def test_download_pages_with_media(self, setup_module, make_item, url, in_title, image_count, video_count): + def test_download_pages_with_media(self, setup_module, make_item, url, in_title, in_text, image_count, video_count): """ Test downloading pages with media. """ @@ -81,7 +92,7 @@ class TestAntibotExtractorEnricher(TestExtractorBase): "max_download_videos": "inf", }, ) - + url = self.extractor.sanitize_url(url) item = make_item(url) result = self.extractor.download(item) @@ -89,7 +100,14 @@ class TestAntibotExtractorEnricher(TestExtractorBase): # Check title contains all required words (case-insensitive) page_title = result.get_title() or "" - assert in_title in page_title.lower(), f"Expected title to contain '{in_title}', got '{page_title}'" + assert in_title.lower() in page_title.lower(), f"Expected title to contain '{in_title}', got '{page_title}'" + + # Check text contains all required words (case-insensitive) + with open(result.get_media_by_id("html_source_code").filename, "r", encoding="utf-8") as f: + html_content = f.read() + assert in_text.lower() in html_content.lower(), ( + f"Expected HTML to contain '{in_text}', got '{html_content}'" + ) image_media = [m for m in result.media if m.is_image() and not m.get("id") == "screenshot"] assert len(image_media) == image_count, f"Expected {image_count} image items, got {len(image_media)}" From b3183510eae3404ca9049668d1e1a082d514abbf Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Sat, 7 Jun 2025 20:03:26 +0100 Subject: [PATCH 043/107] installs ffmpeg in GH actions --- .github/workflows/tests-core.yaml | 5 ++++- .github/workflows/tests-download.yaml | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests-core.yaml b/.github/workflows/tests-core.yaml index 768f9b8..5a664a5 100644 --- a/.github/workflows/tests-core.yaml +++ b/.github/workflows/tests-core.yaml @@ -28,6 +28,9 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Install ffmpeg + run: sudo apt-get update && sudo apt-get install -y ffmpeg + - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: @@ -35,7 +38,7 @@ jobs: - name: Install latest Poetry run: pipx install poetry - + - name: Cache Poetry and pip artifacts uses: actions/cache@v4 with: diff --git a/.github/workflows/tests-download.yaml b/.github/workflows/tests-download.yaml index 6c1e600..51102be 100644 --- a/.github/workflows/tests-download.yaml +++ b/.github/workflows/tests-download.yaml @@ -22,6 +22,9 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Install ffmpeg + run: sudo apt-get update && sudo apt-get install -y ffmpeg + - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: From c96fd71f35a692890585ed3e84cfc1582403070d Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Sat, 7 Jun 2025 20:06:53 +0100 Subject: [PATCH 044/107] minor cleanup --- .../antibot_extractor_enricher.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py index c8dc137..e82a2f8 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py @@ -39,8 +39,7 @@ class AntibotExtractorEnricher(Extractor, Enricher): else: self.max_download_videos = int(self.max_download_videos) - os.makedirs(self.user_data_dir, exist_ok=True) - self._warn_about_docker_and_user_data_dir() + self._prepare_and_warn_about_docker_and_user_data_dir() self.dropins = self.load_dropins() @@ -78,7 +77,9 @@ class AntibotExtractorEnricher(Extractor, Enricher): result.status = "antibot" return result - def _warn_about_docker_and_user_data_dir(self): + def _prepare_and_warn_about_docker_and_user_data_dir(self): + os.makedirs(self.user_data_dir, exist_ok=True) + in_docker = os.environ.get("RUNNING_IN_DOCKER") if in_docker and self.user_data_dir: st = os.stat(self.user_data_dir) From 18cc05a2fe5c6ceae596d11146446f649bca7604 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Sun, 8 Jun 2025 14:16:12 +0100 Subject: [PATCH 045/107] allows auth_for_site to receive do.main directly --- src/auto_archiver/core/base_module.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/auto_archiver/core/base_module.py b/src/auto_archiver/core/base_module.py index bcaa59b..6461ab7 100644 --- a/src/auto_archiver/core/base_module.py +++ b/src/auto_archiver/core/base_module.py @@ -98,12 +98,11 @@ class BaseModule(ABC): """ # TODO: think about if/how we can deal with sites that have multiple domains (main one is x.com/twitter.com) # for now the user must enter them both, like "x.com,twitter.com" in their config. Maybe we just hard-code? - - site = UrlUtil.domain_for_url(site).removeprefix("www.") + domain = UrlUtil.domain_for_url(site).removeprefix("www.") # add the 'www' version of the site to the list of sites to check authdict = {} - for to_try in [site, f"www.{site}"]: + for to_try in [site, domain, f"www.{domain}"]: if to_try in self.authentication: authdict.update(self.authentication[to_try]) break @@ -111,9 +110,9 @@ class BaseModule(ABC): # do a fuzzy string match just to print a warning - don't use it since it's insecure if not authdict: for key in self.authentication.keys(): - if key in site or site in key: + if key in domain or domain in key: logger.debug( - f"Could not find exact authentication information for site '{site}'. \ + f"Could not find exact authentication information for '{domain}'. \ did find information for '{key}' which is close, is this what you meant? \ If so, edit your authentication settings to make sure it exactly matches." ) From 1f2d6379288c79e63a39dd25713b4d6055ff868d Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Sun, 8 Jun 2025 14:16:21 +0100 Subject: [PATCH 046/107] minor improvements --- docs/source/installation/authentication.md | 10 +++++----- .../modules/generic_extractor/generic_extractor.py | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/source/installation/authentication.md b/docs/source/installation/authentication.md index f8ba9ea..16e650f 100644 --- a/docs/source/installation/authentication.md +++ b/docs/source/installation/authentication.md @@ -52,12 +52,12 @@ authentication: username: myusername password: 123 - facebook.com: - cookie: single_cookie + facebook.com: + cookie: single_cookie - othersite.com: - api_key: 123 - api_secret: 1234 + othersite.com: + api_key: 123 + api_secret: 1234 ``` diff --git a/src/auto_archiver/modules/generic_extractor/generic_extractor.py b/src/auto_archiver/modules/generic_extractor/generic_extractor.py index 3417465..8838528 100644 --- a/src/auto_archiver/modules/generic_extractor/generic_extractor.py +++ b/src/auto_archiver/modules/generic_extractor/generic_extractor.py @@ -371,7 +371,6 @@ class GenericExtractor(Extractor): data = ydl.extract_info(url, ie_key=info_extractor.ie_key(), download=True) except MaxDownloadsReached: # proceed as normal once MaxDownloadsReached is raised pass - logger.success(data) if "entries" in data: entries = data.get("entries", []) From 6f02493ff1aa9ae3f738bde945161d9096ab5dfa Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Sun, 8 Jun 2025 14:36:55 +0100 Subject: [PATCH 047/107] adds clips extraction to VK, though generic_extractor should still be run for those --- .../antibot_extractor_enricher/dropins/vk.py | 12 ++++---- tests/extractors/test_antibot_dropin_vk.py | 30 +++++++++++++++---- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py index b36b517..6f54187 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py @@ -16,8 +16,9 @@ class VkDropin(Dropin): """ WALL_PATTERN = re.compile(r"(wall.{0,1}\d+_\d+)") - PHOTO_PATTERN = re.compile(r"(photo.{0,1}\d+_\d+)") VIDEO_PATTERN = re.compile(r"(video.{0,1}\d+_\d+(?:_\w+)?)") + CLIP_PATTERN = re.compile(r"(clip.{0,1}\d+_\d+)") + PHOTO_PATTERN = re.compile(r"(photo.{0,1}\d+_\d+)") @staticmethod def suitable(url: str) -> bool: @@ -28,24 +29,21 @@ class VkDropin(Dropin): """ Transforms modal URLs like 'https://vk.com/page_name?w=wall-123456_7890' to 'https://vk.com/wall-123456_7890' """ - for pattern in [VkDropin.WALL_PATTERN, VkDropin.VIDEO_PATTERN, VkDropin.PHOTO_PATTERN]: + for pattern in [VkDropin.WALL_PATTERN, VkDropin.VIDEO_PATTERN, VkDropin.CLIP_PATTERN, VkDropin.PHOTO_PATTERN]: match = pattern.search(url) if match: return f"https://vk.com/{match.group(1)}" return url def open_page(self, url) -> bool: - logger.debug("Checking if authenticated for VK...") - if self.sb.get_current_url() != url or self.sb.is_text_visible("Sign in to VK"): - logger.info("Opening VK page: {}", url) + if self.sb.is_text_visible("Sign in to VK"): self._login() self.sb.open(url) - logger.debug("VK page opened successfully.") return True def _login(self) -> bool: # TODO: test method - self.sb.activate_cdp_mode("https://vk.com") + self.sb.open("https://vk.com") self.sb.wait_for_ready_state_complete() if "/feed" in self.sb.get_current_url(): logger.debug("Already logged in to VK.") diff --git a/tests/extractors/test_antibot_dropin_vk.py b/tests/extractors/test_antibot_dropin_vk.py index c39e2a3..8b3d9c2 100644 --- a/tests/extractors/test_antibot_dropin_vk.py +++ b/tests/extractors/test_antibot_dropin_vk.py @@ -5,6 +5,15 @@ from auto_archiver.modules.antibot_extractor_enricher.dropins.vk import VkDropin @pytest.mark.parametrize( "input_url,expected", [ + # Unrelated URL, should return unchanged + ( + "https://vk.com/id123456", + "https://vk.com/id123456", + ), + ( + "https://example.com/", + "https://example.com/", + ), # Wall post modal URL ( "https://vk.com/somepage?w=wall-123456_7890", @@ -53,14 +62,25 @@ from auto_archiver.modules.antibot_extractor_enricher.dropins.vk import VkDropin "https://vk.com/video-111222_3334", "https://vk.com/video-111222_3334", ), - # Unrelated URL, should return unchanged + # Clip modal URL ( - "https://vk.com/id123456", - "https://vk.com/id123456", + "https://vk.com/somepage?w=clip-555666_7778", + "https://vk.com/clip-555666_7778", ), + # Clip modal URL with no dash ( - "https://example.com/", - "https://example.com/", + "https://vk.com/somepage?w=clip555666_7778", + "https://vk.com/clip555666_7778", + ), + # Clip modal URL with extra part + ( + "https://vk.com/somepage?w=clip-555666_7778_ABC", + "https://vk.com/clip-555666_7778", + ), + # No modal, should return unchanged (clip) + ( + "https://vk.com/clip-555666_7778", + "https://vk.com/clip-555666_7778", ), # Modal with multiple params, should still work with right priority ( From f53e34d6bda85c3d62964c2fe4d9485747335d5f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Jun 2025 20:55:07 +0000 Subject: [PATCH 048/107] Bump webrecorder/browsertrix-crawler from 1.6.1 to 1.6.2 Bumps webrecorder/browsertrix-crawler from 1.6.1 to 1.6.2. --- updated-dependencies: - dependency-name: webrecorder/browsertrix-crawler dependency-version: 1.6.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 8100f95..f9d037d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM webrecorder/browsertrix-crawler:1.6.1 AS base +FROM webrecorder/browsertrix-crawler:1.6.2 AS base ENV RUNNING_IN_DOCKER=1 \ LANG=C.UTF-8 \ From c815488daa9a9e44b4737eafdeb05c19bdc7c5bb Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 15:44:52 +0100 Subject: [PATCH 049/107] adds new URLs to ignore --- src/auto_archiver/utils/url.py | 8 ++++++++ tests/utils/test_urls.py | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/src/auto_archiver/utils/url.py b/src/auto_archiver/utils/url.py index 368d93c..9d7730b 100644 --- a/src/auto_archiver/utils/url.py +++ b/src/auto_archiver/utils/url.py @@ -78,6 +78,8 @@ def remove_get_parameters(url: str) -> str: def is_relevant_url(url: str) -> bool: """ Detect if a detected media URL is recurring and therefore irrelevant to a specific archive. Useful, for example, for the enumeration of the media files in WARC files which include profile pictures, favicons, etc. + + Assumption: URLs are relevant if they refer to files that can be downloaded with curl/requests, so excludes extensions like .m3u8. """ clean_url = remove_get_parameters(url) @@ -104,11 +106,17 @@ def is_relevant_url(url: str) -> bool: ("vk.com/images/reaction/",), # wikipedia ("wikipedia.org/static",), + # reddit + ("styles.redditmedia.com",), # opinionated but excludes may irrelevant images like avatars and banners + ("emoji.redditmedia.com",), ] IRRELEVANT_ENDS_WITH = [ ".svg", # ignore SVGs ".ico", # ignore icons + ".m3u8", + ".mpd", + ".ism", # ignore index files for videos, these should be handled by ytdlp ] for end in IRRELEVANT_ENDS_WITH: diff --git a/tests/utils/test_urls.py b/tests/utils/test_urls.py index 7871847..2fb66a5 100644 --- a/tests/utils/test_urls.py +++ b/tests/utils/test_urls.py @@ -95,6 +95,11 @@ def test_remove_get_parameters(url, without_get): ("https://example.com/150x150.jpg", True), ("https://example.com/rsrc.php/", True), ("https://example.com/img/emoji/", True), + ("https://styles.redditmedia.com/123", False), + ("https://emoji.redditmedia.com/abc.jpg", False), + ("https://example.com/rsrc.m3u8?asdasd=10", False), + ("https://example.com/rsrc.mpd", False), + ("https://example.com/rsrc.ism?vid=12", False), ], ) def test_is_relevant_url(url, relevant): From 287e823f43ffeb5a85facaed9f6587279a4cf2a6 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:09:38 +0100 Subject: [PATCH 050/107] improves twitter URL cleaning and introduces another bestquality check --- src/auto_archiver/utils/url.py | 34 ++++++++++++++++++++++++-- tests/utils/test_urls.py | 44 +++++++++++++++++++++++++++++++++- 2 files changed, 75 insertions(+), 3 deletions(-) diff --git a/src/auto_archiver/utils/url.py b/src/auto_archiver/utils/url.py index 9d7730b..ea03d7f 100644 --- a/src/auto_archiver/utils/url.py +++ b/src/auto_archiver/utils/url.py @@ -133,6 +133,36 @@ def is_relevant_url(url: str) -> bool: def twitter_best_quality_url(url: str) -> str: """ some twitter image URLs point to a less-than best quality - this returns the URL pointing to the highest (original) quality + this returns the URL pointing to the highest (original) quality (with 'name=orig') """ - return re.sub(r"name=(\w+)", "name=orig", url, 1) + parsed = urlparse(url) + query = parsed.query + if "name=" in query: + # Replace only the first occurrence of name=xxx with name=orig + new_query = re.sub(r"name=[^&]*", "name=orig", query, 1) + parsed = parsed._replace(query=new_query) + return urlunparse(parsed) + return url + + +def get_media_url_best_quality(url: str) -> str: + """ + Returns the best quality URL for the given media URL, it may not exist. + """ + parsed = urlparse(url) + + # twitter case + if any(d in parsed.netloc.replace("www", "") for d in ("twitter.com", "twimg.com", "x.com")): + url = twitter_best_quality_url(url) + parsed = urlparse(url) + + # some cases https://example.com/media-1280x720.mp4 to https://example.com/media.mp4 + basename = parsed.path.split("/")[-1] + match = re.match(r"(.+)-\d+x\d+(\.[a-zA-Z0-9]+)$", basename) + if match: + orig_basename = match.group(1) + match.group(2) + new_path = "/".join(parsed.path.split("/")[:-1] + [orig_basename]) + parsed = parsed._replace(path=new_path) # keep the query unchanged + url = urlunparse(parsed) + + return url diff --git a/tests/utils/test_urls.py b/tests/utils/test_urls.py index 2fb66a5..df8e0f3 100644 --- a/tests/utils/test_urls.py +++ b/tests/utils/test_urls.py @@ -6,6 +6,7 @@ from auto_archiver.utils.url import ( is_relevant_url, remove_get_parameters, twitter_best_quality_url, + get_media_url_best_quality, ) @@ -109,10 +110,51 @@ def test_is_relevant_url(url, relevant): @pytest.mark.parametrize( "url, best_quality", [ - ("https://twitter.com/some_image.jpg?name=small", "https://twitter.com/some_image.jpg?name=orig"), + ( + "https://twitter.com/some_image.jpg?name=small&this_is_another=145", + "https://twitter.com/some_image.jpg?name=orig&this_is_another=145", + ), ("https://twitter.com/some_image.jpg", "https://twitter.com/some_image.jpg"), ("https://twitter.com/some_image.jpg?name=orig", "https://twitter.com/some_image.jpg?name=orig"), ], ) def test_twitter_best_quality_url(url, best_quality): assert twitter_best_quality_url(url) == best_quality + + +@pytest.mark.parametrize( + "input_url,expected_url", + [ + # Twitter: add/replace name= to name=orig + ( + "https://pbs.twimg.com/media/abc123?format=jpg&name=small", + "https://pbs.twimg.com/media/abc123?format=jpg&name=orig", + ), + ("https://pbs.twimg.com/media/abc123?name=large", "https://pbs.twimg.com/media/abc123?name=orig"), + ("https://pbs.twimg.com/media/abc123?format=jpg", "https://pbs.twimg.com/media/abc123?format=jpg"), + # Twitter: already orig + ( + "https://pbs.twimg.com/media/abc123?format=jpg&name=orig", + "https://pbs.twimg.com/media/abc123?format=jpg&name=orig", + ), + # X.com domain + ("https://x.com/media/abc123?name=medium", "https://x.com/media/abc123?name=orig"), + # twimg.com domain + ("https://twimg.com/media/abc123?name=thumb", "https://twimg.com/media/abc123?name=orig"), + # Non-twitter domain, no change + ("https://example.com/media/file.mp4", "https://example.com/media/file.mp4"), + # Remove -WxH from basename + ("https://example.com/media/file-1280x720.mp4", "https://example.com/media/file.mp4"), + ("https://example.com/media/file-1920x1080.jpg?foo=bar", "https://example.com/media/file.jpg?foo=bar"), + # Both twitter and -WxH + ("https://pbs.twimg.com/media/abc-1280x720.jpg?name=small", "https://pbs.twimg.com/media/abc.jpg?name=orig"), + # No match for -WxH, no change + ("https://example.com/media/file.mp4?foo=bar", "https://example.com/media/file.mp4?foo=bar"), + # Path with multiple directories + ("https://example.com/a/b/c/file-640x480.png", "https://example.com/a/b/c/file.png"), + # -WxH in directory, not basename (should not change) + ("https://example.com/media-1280x720/file.mp4", "https://example.com/media-1280x720/file.mp4"), + ], +) +def test_get_media_url_best_quality(input_url, expected_url): + assert get_media_url_best_quality(input_url) == expected_url From 6bd493a79179b1e3e259728594f9a807435b90af Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:11:55 +0100 Subject: [PATCH 051/107] dropin with new ytdlp feature and helper method --- .../antibot_extractor_enricher/dropin.py | 77 ++++++++++++++++++- .../antibot_extractor_enricher/dropins/vk.py | 61 ++------------- 2 files changed, 81 insertions(+), 57 deletions(-) diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py index 805edfd..15c2e28 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py @@ -1,7 +1,10 @@ +import os +from loguru import logger from seleniumbase import SB +import yt_dlp -from auto_archiver.core.extractor import Extractor -from auto_archiver.core.metadata import Metadata +from auto_archiver.core import Extractor, Media, Metadata +from auto_archiver.utils.misc import ydl_entry_to_filename class Dropin: @@ -36,6 +39,20 @@ class Dropin: """ return url + @staticmethod + def images_selectors() -> str: + """ + CSS selector to find images in the HTML page + """ + return "img" + + @staticmethod + def video_selectors() -> str: + """ + CSS selector to find videos in the HTML page. + """ + return "video, source" + def open_page(self, url) -> bool: """ Make sure the page is opened, even if it requires authentication, captcha solving, etc. @@ -50,3 +67,59 @@ class Dropin: :return: A tuple (number of Images added, number of Videos added). """ raise NotImplementedError("This method should be implemented in the subclass") + + def _get_username_password(self, site) -> tuple[str, str]: + """ + Get the username and password for the site from the extractor's auth data. + :return: A tuple (username, password). + """ + auth = self.extractor.auth_for_site(site) + username = auth.get("username", "") + password = auth.get("password", "") + if not username or not password: + raise ValueError(f"{site} authentication requires a username and password.") + return username, password + + def _download_videos_with_ytdlp(self, video_urls: list[str], to_enrich: Metadata) -> int: + """ + Download videos using yt-dlp. + :param video_urls: List of video URLs to download. + :return: The number of videos downloaded. + """ + if type(self.extractor.max_download_videos) is int: + video_urls = video_urls[: self.extractor.max_download_videos] + + if not video_urls: + return 0 + + ydl_options = [ + "-o", + os.path.join(self.extractor.tmp_dir, "%(id)s.%(ext)s"), + "--quiet", + "--no-playlist", + "--no-write-subs", + "--no-write-auto-subs", + "--postprocessor-args", + "ffmpeg:-bitexact", + "--max-filesize", + "1000M", # Limit to 1GB per video + ] + *_, validated_options = yt_dlp.parse_options(ydl_options) + downloaded = 0 + with yt_dlp.YoutubeDL(validated_options) as ydl: + for url in video_urls: + try: + logger.debug(f"Downloading video from URL: {url}") + info = ydl.extract_info(url, download=True) + filename = ydl_entry_to_filename(ydl, info) + if not filename: # Failed to download video. + continue + media = Media(filename) + for x in ["duration", "original_url", "fulltitle", "description", "upload_date"]: + if x in info: + media.set(x, info[x]) + to_enrich.add_media(media) + downloaded += 1 + except Exception as e: + logger.error(f"Error downloading {url}: {e}") + return downloaded diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py index 6f54187..76e176e 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py @@ -1,12 +1,8 @@ -import os import re -from auto_archiver.core.media import Media from auto_archiver.core.metadata import Metadata from auto_archiver.modules.antibot_extractor_enricher.dropin import Dropin -from auto_archiver.utils.misc import ydl_entry_to_filename -import yt_dlp from loguru import logger @@ -37,8 +33,8 @@ class VkDropin(Dropin): def open_page(self, url) -> bool: if self.sb.is_text_visible("Sign in to VK"): - self._login() - self.sb.open(url) + if self._login(): + self.sb.open(url) return True def _login(self) -> bool: @@ -50,13 +46,9 @@ class VkDropin(Dropin): return True # need to login - logger.debug("Logging in to VK...") - auth = self.extractor.auth_for_site("vk.com") - username = auth.get("username", "") - password = auth.get("password", "") - if not username or not password: - raise ValueError("VK authentication requires a username and password.") - logger.debug("Using username: {}", username) + username, password = self._get_username_password("vk.com") + logger.debug("Logging in to VK with username: {}", username) + self.sb.click('[data-testid="enter-another-way"]', timeout=10) self.sb.clear('input[name="login"][type="tel"]', by="css selector", timeout=10) self.sb.type('input[name="login"][type="tel"]', username, by="css selector", timeout=10) @@ -80,47 +72,6 @@ class VkDropin(Dropin): @logger.catch def add_extra_media(self, to_enrich: Metadata) -> tuple[int, int]: - """ - Extract video data from the currently open post with SeleniumBase. - - :return: A tuple (number of Images added, number of Videos added). - """ video_urls = [v.get_attribute("href") for v in self.sb.find_elements('a[href*="/video-"]')] - if type(self.extractor.max_download_videos) is int: - video_urls = video_urls[: self.extractor.max_download_videos] - if not video_urls: - return 0, 0 - - logger.debug(f"Found {len(video_urls)} video URLs in the post, using ytdlp for download.") - ydl_options = [ - "-o", - os.path.join(self.extractor.tmp_dir, "%(id)s.%(ext)s"), - "--quiet", - "--no-playlist", - "--no-write-subs", - "--no-write-auto-subs", - "--postprocessor-args", - "ffmpeg:-bitexact", - "--max-filesize", - "1000M", # Limit to 1GB per video - ] - *_, validated_options = yt_dlp.parse_options(ydl_options) - downloaded = 0 - with yt_dlp.YoutubeDL(validated_options) as ydl: - for url in video_urls: - try: - logger.debug(f"Downloading video from URL: {url}") - info = ydl.extract_info(url, download=True) - filename = ydl_entry_to_filename(ydl, info) - if not filename: # Failed to download video. - continue - media = Media(filename) - for x in ["duration", "original_url", "fulltitle", "description", "upload_date"]: - if x in info: - media.set(x, info[x]) - to_enrich.add_media(media) - downloaded += 1 - except Exception as e: - logger.error(f"Error downloading {url}: {e}") - return 0, downloaded + return 0, self._download_videos_with_ytdlp(video_urls, to_enrich) From 6d82655cc40e2a817be73b1725ec2b31dd6ed872 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:14:34 +0100 Subject: [PATCH 052/107] manifest improvement for antibot --- .../modules/antibot_extractor_enricher/__manifest__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py index d2e9d66..d93c072 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py @@ -31,7 +31,9 @@ }, }, "description": """ - Uses a browser controlled by SeleniumBase to capture HTML, media, and screenshots/PDFs of a web page, by bypassing anti-bot measures like Cloudflare's Turnstile. + Uses a browser controlled by SeleniumBase to capture HTML, media, and screenshots/PDFs of a web page, by bypassing anti-bot measures like Cloudflare's Turnstile or Google Recaptcha. + + Still in trial development, please report any issues or suggestions via GitHub Issues. ### Features - Extracts the HTML source code of the page. @@ -40,7 +42,6 @@ - Downloads images and videos from the page, excluding specified file extensions. ### Notes - - Requires a WebDriver (e.g., ChromeDriver) installed and accessible via the system's PATH. - Using a proxy affects Cloudflare Turnstile captcha handling, so it is recommended to use a proxy only if necessary. """, } From 809b8c7749168cf36f11406ee3eafd2c97a443ed Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:14:42 +0100 Subject: [PATCH 053/107] default dropin introduced --- .../dropins/default.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/auto_archiver/modules/antibot_extractor_enricher/dropins/default.py diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/default.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/default.py new file mode 100644 index 0000000..c5c865a --- /dev/null +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/default.py @@ -0,0 +1,18 @@ +from auto_archiver.core.metadata import Metadata +from auto_archiver.modules.antibot_extractor_enricher.dropin import Dropin + + +class DefaultDropin(Dropin): + """ + A default fallback drop-in class for handling generic cases in the antibot extractor enricher module. + """ + + @staticmethod + def suitable(url: str) -> bool: + return False + + def open_page(self, url) -> bool: + return True + + def add_extra_media(self, to_enrich: Metadata) -> tuple[int, int]: + return 0, 0 From 6bbc7fb47a67a52d244083eb9159bda692bfe382 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:29:07 +0100 Subject: [PATCH 054/107] improves antibot flow and makes auth_wall detection optional --- .../__manifest__.py | 5 ++ .../antibot_extractor_enricher.py | 68 +++++++++++-------- .../test_antibot_extractor_enricher.py | 22 +++++- 3 files changed, 64 insertions(+), 31 deletions(-) diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py index d93c072..214653c 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py @@ -25,6 +25,11 @@ "default": "secrets/antibot_user_data", "help": "Path to the user data directory for the webdriver. This is used to persist browser state, such as cookies and local storage. When using docker it's best to let docker create the folder otherwise there may be permission issues. The Extractor will try to work without it if that error occurs but login sessions will not be used or preserved on those runs.", }, + "detect_auth_wall": { + "default": True, + "type": "bool", + "help": "detect if the page is behind an authentication wall (e.g. login required) and skip it. disable if you want to archive pages where logins are required.", + }, "proxy": { "default": None, "help": "proxy to use for the webdriver, Format: 'SERVER:PORT' or 'USER:PASS@SERVER:PORT'", diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py index e82a2f8..08d0c03 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py @@ -15,7 +15,9 @@ from seleniumbase import SB from auto_archiver.core import Extractor, Enricher, Metadata, Media from auto_archiver.modules.antibot_extractor_enricher.dropin import Dropin +from auto_archiver.modules.antibot_extractor_enricher.dropins.default import DefaultDropin from auto_archiver.utils.misc import random_str +from auto_archiver.utils.url import is_relevant_url class AntibotExtractorEnricher(Extractor, Enricher): @@ -102,39 +104,41 @@ class AntibotExtractorEnricher(Extractor, Enricher): sb.uc_open_with_reconnect(url, 4) logger.debug(f"ANTIBOT handling CAPTCHAs for {url_sample}...") + sb.uc_gui_handle_cf() + sb.uc_gui_click_rc() # NB: using handle instead of click breaks some sites like reddit, for now we separate here but can have dropins deciding this in the future - # TODO: implement other Captcha handling - sb.uc_gui_handle_captcha() # handles Cloudflare Turnstile captcha if detected + dropin = self._get_suitable_dropin(url, sb) + dropin.open_page(url) - suitable_dropin = self._get_suitable_dropin(url, sb) - - if suitable_dropin: - suitable_dropin.open_page(url) - - if self._hit_auth_wall(sb): + if self.detect_auth_wall and self._hit_auth_wall(sb): logger.warning(f"ANTIBOT SKIP since auth wall or CAPTCHA was detected for {url_sample}") return False - logger.debug(f"ANTIBOT no auth wall detected for {url_sample}...") + sb.wait_for_ready_state_complete() sb.sleep(1) # margin for the page to load completely to_enrich.set_title(sb.get_title()) self._enrich_html_source_code(sb, to_enrich) + self._enrich_full_page_screenshot(sb, to_enrich) if self.save_to_pdf: self._enrich_full_page_pdf(sb, to_enrich) - downloaded_images, downloaded_videos = 0, 0 - if suitable_dropin: - downloaded_images, downloaded_videos = suitable_dropin.add_extra_media(to_enrich) + downloaded_images, downloaded_videos = dropin.add_extra_media(to_enrich) self._enrich_download_media( - sb, to_enrich, css_selector="img", max_media=self.max_download_images - downloaded_images + sb, + to_enrich, + css_selector=dropin.images_selectors(), + max_media=self.max_download_images - downloaded_images, ) self._enrich_download_media( - sb, to_enrich, css_selector="video, source", max_media=self.max_download_videos - downloaded_videos + sb, + to_enrich, + css_selector=dropin.video_selectors(), + max_media=self.max_download_videos - downloaded_videos, ) - logger.success(f"ANTIBOT completed for {url_sample}") + logger.info(f"ANTIBOT completed for {url_sample}") return to_enrich except selenium.common.exceptions.SessionNotCreatedException as e: @@ -155,10 +159,10 @@ class AntibotExtractorEnricher(Extractor, Enricher): """ for dropin in self.dropins: if dropin.suitable(url): - logger.debug(f"ANTIBOT using drop-in {dropin.__class__.__name__} for {url}") + logger.debug(f"ANTIBOT using drop-in {dropin.__name__} for {url}") return dropin(sb, self) - # logger.warning(f"ANTIBOT no suitable drop-in found for {url}") - return None + + return DefaultDropin(sb, self) def _hit_auth_wall(self, sb: SB) -> bool: """ @@ -168,8 +172,8 @@ class AntibotExtractorEnricher(Extractor, Enricher): # TODO: improve this detection logic, currently it is very basic and may not cover all cases # Common URL patterns - url = sb.get_current_url().lower() - if any(kw in url for kw in ["login", "signin", "signup", "register", "captcha"]): + current_url = sb.get_current_url().lower() + if any(kw in current_url for kw in ["login", "signin", "signup", "register", "captcha"]): return True # Common visible text markers @@ -245,8 +249,12 @@ class AntibotExtractorEnricher(Extractor, Enricher): Enriches the full page screenshot of the Metadata object. This method is called by the enrich method. """ - x = sb.execute_script("return document.documentElement.scrollWidth") - y = min(sb.execute_script("return document.documentElement.scrollHeight"), 25_000) + start_size = sb.get_window_size() + w, h = start_size["width"], start_size["height"] + + x = max(sb.execute_script("return document.documentElement.scrollWidth"), w) + y = min(max(sb.execute_script("return document.documentElement.scrollHeight"), h), 25_000) + logger.debug(f"Setting window size to {x}x{y} for full page screenshot.") sb.set_window_size(x, y) screen_filename = os.path.join(self.tmp_dir, f"screenshot{random_str(6)}.png") @@ -278,12 +286,9 @@ class AntibotExtractorEnricher(Extractor, Enricher): """ if max_media == 0: return - logger.debug( - f"Downloading media from {to_enrich.get_url()} with selector '{css_selector}' up to {max_media} items." - ) url = to_enrich.get_url() all_urls = set() - # media_elements = sb.find_elements(css_selector) + sources = sb.execute_script(f""" return Array.from(document.querySelectorAll("{css_selector}")) .map(el => el.src || el.href) @@ -293,10 +298,15 @@ class AntibotExtractorEnricher(Extractor, Enricher): if len(all_urls) >= max_media: logger.debug(f"Reached max download limit of {max_media} images/videos.") break - mimerype = mimetypes.guess_type(src)[0] - if mimerype in self.exclude_media_mimetypes: + if not is_relevant_url(src): + continue + mimetype = mimetypes.guess_type(src)[0] + if mimetype in self.exclude_media_mimetypes: continue full_src = urljoin(url, src) - if full_src not in all_urls and (filename := self.download_from_url(full_src)): + if full_src not in all_urls: + filename, full_src = self.download_from_url(full_src, try_best_quality=True) + if not filename: + continue all_urls.add(full_src) to_enrich.add_media(Media(filename=filename, properties={"url": full_src})) diff --git a/tests/extractors/test_antibot_extractor_enricher.py b/tests/extractors/test_antibot_extractor_enricher.py index 1da025d..600baf2 100644 --- a/tests/extractors/test_antibot_extractor_enricher.py +++ b/tests/extractors/test_antibot_extractor_enricher.py @@ -129,15 +129,33 @@ class TestAntibotExtractorEnricher(TestExtractorBase): ), ( "https://seleniumbase.io/apps/turnstile", - 'id="captcha-success"', + '', + ), + ( + "https://seleniumbase.io/apps/form_turnstile", + '', + ), + ( + "https://gitlab.com/users/sign_in", + "Password", ), ], ) - def test_download_with_cloudflare_turnstile(self, setup_module, make_item, url, in_html): + def test_overcome_cloudflare_turnstile(self, setup_module, make_item, url, in_html): """ Test downloading a page with Cloudflare Turnstile captcha. """ + self.extractor = setup_module( + self.extractor_module, + { + "save_to_pdf": True, + "detect_auth_wall": False, + "max_download_images": 5, + "max_download_videos": "inf", + }, + ) + item = make_item(url) self.extractor.enrich(item) From ef0e909a728e1adada532cb39a235718e45e6633 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:29:35 +0100 Subject: [PATCH 055/107] extractor to auto detect best quality --- src/auto_archiver/core/extractor.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/auto_archiver/core/extractor.py b/src/auto_archiver/core/extractor.py index cf42f1e..ca3359d 100644 --- a/src/auto_archiver/core/extractor.py +++ b/src/auto_archiver/core/extractor.py @@ -8,6 +8,7 @@ Factory method to initialize an extractor instance based on its name. from __future__ import annotations from abc import abstractmethod +from contextlib import suppress import mimetypes import os import requests @@ -16,6 +17,7 @@ from retrying import retry import re from auto_archiver.core import Metadata, BaseModule +from auto_archiver.utils.url import get_media_url_best_quality class Extractor(BaseModule): @@ -70,10 +72,20 @@ class Extractor(BaseModule): return "" @retry(wait_random_min=500, wait_random_max=3500, stop_max_attempt_number=5) - def download_from_url(self, url: str, to_filename: str = None, verbose=True) -> str: + def download_from_url(self, url: str, to_filename: str = None, verbose=True, try_best_quality=False) -> str: """ downloads a URL to provided filename, or inferred from URL, returns local filename + Warning: if try_best_quality is True, it will return a tuple of (filename, best_quality_url) if the download was successful. """ + + if try_best_quality: + with suppress(Exception): + # Attempt to download the original URL + best_quality_url = get_media_url_best_quality(url) + orig_download = self.download_from_url(best_quality_url, to_filename, verbose) + if orig_download: + return orig_download, best_quality_url + if not to_filename: to_filename = url.split("/")[-1].split("?")[0] if len(to_filename) > 64: @@ -98,10 +110,12 @@ class Extractor(BaseModule): with open(to_filename, "wb") as f: for chunk in d.iter_content(chunk_size=8192): f.write(chunk) + if try_best_quality: + return to_filename, url return to_filename except requests.RequestException as e: - logger.warning(f"Failed to fetch the Media URL: {e}") + logger.warning(f"Failed to fetch the Media URL: {str(e)[:250]}") @abstractmethod def download(self, item: Metadata) -> Metadata | False: From 773fa82f0687e296cc94db78703fabecb56aba76 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:31:19 +0100 Subject: [PATCH 056/107] introduces reddit dropin --- .../dropins/reddit.py | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py new file mode 100644 index 0000000..c46ca17 --- /dev/null +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py @@ -0,0 +1,77 @@ +from contextlib import suppress +from auto_archiver.core.metadata import Metadata +from auto_archiver.modules.antibot_extractor_enricher.dropin import Dropin + +from loguru import logger + + +class RedditDropin(Dropin): + """ + A class to handle Reddit drop-in functionality for the antibot extractor enricher module. + """ + + @staticmethod + def suitable(url: str) -> bool: + return "reddit.com" in url + + @staticmethod + def images_selectors() -> str: + return "shreddit-post img" + + @staticmethod + def video_selectors() -> str: + return "shreddit-post video, shreddit-post source" + + def open_page(self, url) -> bool: + if self.sb.is_text_visible("You've been blocked by network security."): + self._login() + if url != self.sb.get_current_url(): + self.sb.open(url) + return True + + def _login(self): + self.sb.click_link_text("Log in") + self.sb.wait_for_ready_state_complete() + self._close_cookies_banner() + + username, password = self._get_username_password("reddit.com") + logger.debug("RedditDropin Logging in to VK with username: {}", username) + + self.sb.type("#login-username", username) + self.sb.type("#login-password", password) + + elem = self.sb.find_element("button.login") + self.sb.execute_script("arguments[0].scrollIntoView(true);", elem) + self.sb.slow_click("button.login") + self.sb.wait_for_ready_state_complete() + + if "https://www.reddit.com/login/" in self.sb.get_current_url(): + self.sb.sleep(5) + self.sb.wait_for_ready_state_complete() + + if self.sb.is_text_visible("You've been blocked by network security."): + self.sb.click_link_text("Log in") + self.sb.wait_for_ready_state_complete() + if self.sb.is_text_visible("Welcome back"): + logger.debug("RedditDropin Login successful") + self.sb.click_if_visible("this link") + + def _close_cookies_banner(self): + with suppress(Exception): # selenium.common.exceptions.JavascriptException + self.sb.execute_script(""" + document + .querySelector("reddit-cookie-banner") + .shadowRoot.querySelector("faceplate-dialog") + .querySelector("#accept-all-cookies-button button") + .click() + """) + + @logger.catch + def add_extra_media(self, to_enrich: Metadata) -> tuple[int, int]: + filtered_urls = self.sb.execute_script(f""" + return [...document.querySelectorAll("{self.video_selectors()}")] + .map(el => el.src || el.href) + .filter(url => url && /\.(m3u8|mpd|ism)$/.test(url)); + """) + logger.debug("RedditDropin Found {} video URLs", len(filtered_urls)) + return 0, self._download_videos_with_ytdlp(filtered_urls, to_enrich) From ca00aa302d291c3eff5b33951ec701f36d0a8ab9 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:31:32 +0100 Subject: [PATCH 057/107] version bump breaking --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 466d090..cdbb86b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [project] name = "auto-archiver" -version = "1.0.1" +version = "1.1.0" description = "Automatically archive links to videos, images, and social media content from Google Sheets (and more)." requires-python = ">=3.10,<3.13" From 4270e067286ea2d52ae3f0663c931af69963bbad Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:33:47 +0100 Subject: [PATCH 058/107] npm update on scripts/settings --- scripts/settings/package-lock.json | 293 +++++++++++++++-------------- 1 file changed, 150 insertions(+), 143 deletions(-) diff --git a/scripts/settings/package-lock.json b/scripts/settings/package-lock.json index a60d74e..4aced9a 100644 --- a/scripts/settings/package-lock.json +++ b/scripts/settings/package-lock.json @@ -10,21 +10,21 @@ "dependencies": { "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", - "@emotion/react": "*", - "@emotion/styled": "*", + "@emotion/react": "latest", + "@emotion/styled": "latest", "@mui/icons-material": "^7.1.1", - "@mui/material": "*", + "@mui/material": "latest", "react": "19.1.0", "react-dom": "19.1.0", "react-markdown": "^10.0.0", "yaml": "^2.7.0" }, "devDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "@vitejs/plugin-react": "*", - "typescript": "*", - "vite": "*", + "@types/react": "latest", + "@types/react-dom": "latest", + "@vitejs/plugin-react": "latest", + "typescript": "latest", + "vite": "latest", "vite-plugin-singlefile": "^2.1.0" } }, @@ -57,9 +57,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.3.tgz", - "integrity": "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", + "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", "dev": true, "license": "MIT", "engines": { @@ -105,12 +105,12 @@ "license": "MIT" }, "node_modules/@babel/generator": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.3.tgz", - "integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.3", + "@babel/parser": "^7.27.5", "@babel/types": "^7.27.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", @@ -207,23 +207,23 @@ } }, "node_modules/@babel/helpers": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.4.tgz", - "integrity": "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3" + "@babel/types": "^7.27.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.4.tgz", - "integrity": "sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", "license": "MIT", "dependencies": { "@babel/types": "^7.27.3" @@ -268,9 +268,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.4.tgz", - "integrity": "sha512-t3yaEOuGu9NlIZ+hIeGbBjFtZT7j2cb2tg0fuaJKeGotchRjjLfrBA9Kwf8quhpP1EUuxModQg04q/mBwyg8uA==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -309,9 +309,9 @@ } }, "node_modules/@babel/types": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz", - "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -1237,16 +1237,16 @@ } }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.9", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.9.tgz", - "integrity": "sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==", + "version": "1.0.0-beta.11", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.11.tgz", + "integrity": "sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==", "dev": true, "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", - "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.42.0.tgz", + "integrity": "sha512-gldmAyS9hpj+H6LpRNlcjQWbuKUtb94lodB9uCz71Jm+7BxK1VIOo7y62tZZwxhA7j1ylv/yQz080L5WkS+LoQ==", "cpu": [ "arm" ], @@ -1258,9 +1258,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", - "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.42.0.tgz", + "integrity": "sha512-bpRipfTgmGFdCZDFLRvIkSNO1/3RGS74aWkJJTFJBH7h3MRV4UijkaEUeOMbi9wxtxYmtAbVcnMtHTPBhLEkaw==", "cpu": [ "arm64" ], @@ -1272,9 +1272,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", - "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.42.0.tgz", + "integrity": "sha512-JxHtA081izPBVCHLKnl6GEA0w3920mlJPLh89NojpU2GsBSB6ypu4erFg/Wx1qbpUbepn0jY4dVWMGZM8gplgA==", "cpu": [ "arm64" ], @@ -1286,9 +1286,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", - "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.42.0.tgz", + "integrity": "sha512-rv5UZaWVIJTDMyQ3dCEK+m0SAn6G7H3PRc2AZmExvbDvtaDc+qXkei0knQWcI3+c9tEs7iL/4I4pTQoPbNL2SA==", "cpu": [ "x64" ], @@ -1300,9 +1300,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz", - "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.42.0.tgz", + "integrity": "sha512-fJcN4uSGPWdpVmvLuMtALUFwCHgb2XiQjuECkHT3lWLZhSQ3MBQ9pq+WoWeJq2PrNxr9rPM1Qx+IjyGj8/c6zQ==", "cpu": [ "arm64" ], @@ -1314,9 +1314,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz", - "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.42.0.tgz", + "integrity": "sha512-CziHfyzpp8hJpCVE/ZdTizw58gr+m7Y2Xq5VOuCSrZR++th2xWAz4Nqk52MoIIrV3JHtVBhbBsJcAxs6NammOQ==", "cpu": [ "x64" ], @@ -1328,9 +1328,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz", - "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.42.0.tgz", + "integrity": "sha512-UsQD5fyLWm2Fe5CDM7VPYAo+UC7+2Px4Y+N3AcPh/LdZu23YcuGPegQly++XEVaC8XUTFVPscl5y5Cl1twEI4A==", "cpu": [ "arm" ], @@ -1342,9 +1342,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz", - "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.42.0.tgz", + "integrity": "sha512-/i8NIrlgc/+4n1lnoWl1zgH7Uo0XK5xK3EDqVTf38KvyYgCU/Rm04+o1VvvzJZnVS5/cWSd07owkzcVasgfIkQ==", "cpu": [ "arm" ], @@ -1356,9 +1356,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz", - "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.42.0.tgz", + "integrity": "sha512-eoujJFOvoIBjZEi9hJnXAbWg+Vo1Ov8n/0IKZZcPZ7JhBzxh2A+2NFyeMZIRkY9iwBvSjloKgcvnjTbGKHE44Q==", "cpu": [ "arm64" ], @@ -1370,9 +1370,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz", - "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.42.0.tgz", + "integrity": "sha512-/3NrcOWFSR7RQUQIuZQChLND36aTU9IYE4j+TB40VU78S+RA0IiqHR30oSh6P1S9f9/wVOenHQnacs/Byb824g==", "cpu": [ "arm64" ], @@ -1384,9 +1384,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz", - "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.42.0.tgz", + "integrity": "sha512-O8AplvIeavK5ABmZlKBq9/STdZlnQo7Sle0LLhVA7QT+CiGpNVe197/t8Aph9bhJqbDVGCHpY2i7QyfEDDStDg==", "cpu": [ "loong64" ], @@ -1398,9 +1398,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz", - "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.42.0.tgz", + "integrity": "sha512-6Qb66tbKVN7VyQrekhEzbHRxXXFFD8QKiFAwX5v9Xt6FiJ3BnCVBuyBxa2fkFGqxOCSGGYNejxd8ht+q5SnmtA==", "cpu": [ "ppc64" ], @@ -1412,9 +1412,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz", - "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.42.0.tgz", + "integrity": "sha512-KQETDSEBamQFvg/d8jajtRwLNBlGc3aKpaGiP/LvEbnmVUKlFta1vqJqTrvPtsYsfbE/DLg5CC9zyXRX3fnBiA==", "cpu": [ "riscv64" ], @@ -1426,9 +1426,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz", - "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.42.0.tgz", + "integrity": "sha512-qMvnyjcU37sCo/tuC+JqeDKSuukGAd+pVlRl/oyDbkvPJ3awk6G6ua7tyum02O3lI+fio+eM5wsVd66X0jQtxw==", "cpu": [ "riscv64" ], @@ -1440,9 +1440,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz", - "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.42.0.tgz", + "integrity": "sha512-I2Y1ZUgTgU2RLddUHXTIgyrdOwljjkmcZ/VilvaEumtS3Fkuhbw4p4hgHc39Ypwvo2o7sBFNl2MquNvGCa55Iw==", "cpu": [ "s390x" ], @@ -1454,9 +1454,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", - "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.42.0.tgz", + "integrity": "sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw==", "cpu": [ "x64" ], @@ -1468,9 +1468,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", - "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.42.0.tgz", + "integrity": "sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==", "cpu": [ "x64" ], @@ -1482,9 +1482,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz", - "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.42.0.tgz", + "integrity": "sha512-+axkdyDGSp6hjyzQ5m1pgcvQScfHnMCcsXkx8pTgy/6qBmWVhtRVlgxjWwDp67wEXXUr0x+vD6tp5W4x6V7u1A==", "cpu": [ "arm64" ], @@ -1496,9 +1496,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz", - "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.42.0.tgz", + "integrity": "sha512-F+5J9pelstXKwRSDq92J0TEBXn2nfUrQGg+HK1+Tk7VOL09e0gBqUHugZv7SW4MGrYj41oNCUe3IKCDGVlis2g==", "cpu": [ "ia32" ], @@ -1510,9 +1510,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz", - "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.42.0.tgz", + "integrity": "sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==", "cpu": [ "x64" ], @@ -1578,9 +1578,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "license": "MIT" }, "node_modules/@types/estree-jsx": { @@ -1623,24 +1623,24 @@ "license": "MIT" }, "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", "license": "MIT" }, "node_modules/@types/react": { - "version": "19.1.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.6.tgz", - "integrity": "sha512-JeG0rEWak0N6Itr6QUx+X60uQmN+5t3j9r/OVDtWzFXKaj6kD1BwJzOksD0FF6iWxZlbE1kB0q9vtnU2ekqa1Q==", + "version": "19.1.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.7.tgz", + "integrity": "sha512-BnsPLV43ddr05N71gaGzyZ5hzkCmGwhMvYc8zmvI8Ci1bRkkDSzDDVfAXfN2tk748OwI7ediiPX6PfT9p0QGVg==", "license": "MIT", "dependencies": { "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "19.1.5", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.5.tgz", - "integrity": "sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==", + "version": "19.1.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", + "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1669,16 +1669,16 @@ "license": "ISC" }, "node_modules/@vitejs/plugin-react": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.5.0.tgz", - "integrity": "sha512-JuLWaEqypaJmOJPLWwO335Ig6jSgC1FTONCWAxnqcQthLTK/Yc9aH6hr9z/87xciejbQcnP3GnA1FWUSWeXaeg==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.5.2.tgz", + "integrity": "sha512-QNVT3/Lxx99nMQWJWF7K4N6apUEuT0KlZA3mx/mVaoGj3smm/8rc8ezz15J1pcbcjDK0V15rpHetVfya08r76Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.26.10", - "@babel/plugin-transform-react-jsx-self": "^7.25.9", - "@babel/plugin-transform-react-jsx-source": "^7.25.9", - "@rolldown/pluginutils": "1.0.0-beta.9", + "@babel/core": "^7.27.4", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.11", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, @@ -1686,7 +1686,7 @@ "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" } }, "node_modules/babel-plugin-macros": { @@ -1770,9 +1770,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001720", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz", - "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==", + "version": "1.0.30001721", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz", + "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==", "dev": true, "funding": [ { @@ -1959,9 +1959,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.161", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz", - "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==", + "version": "1.5.166", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.166.tgz", + "integrity": "sha512-QPWqHL0BglzPYyJJ1zSSmwFFL6MFXhbACOCcsCdUMCkzPdS9/OIBVxg516X/Ado2qwAq8k0nJJ7phQPCqiaFAw==", "dev": true, "license": "ISC" }, @@ -2054,9 +2054,9 @@ "license": "MIT" }, "node_modules/fdir": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", - "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", "dev": true, "license": "MIT", "peerDependencies": { @@ -3342,9 +3342,9 @@ } }, "node_modules/rollup": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", - "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.42.0.tgz", + "integrity": "sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==", "dev": true, "license": "MIT", "dependencies": { @@ -3358,29 +3358,36 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.41.1", - "@rollup/rollup-android-arm64": "4.41.1", - "@rollup/rollup-darwin-arm64": "4.41.1", - "@rollup/rollup-darwin-x64": "4.41.1", - "@rollup/rollup-freebsd-arm64": "4.41.1", - "@rollup/rollup-freebsd-x64": "4.41.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", - "@rollup/rollup-linux-arm-musleabihf": "4.41.1", - "@rollup/rollup-linux-arm64-gnu": "4.41.1", - "@rollup/rollup-linux-arm64-musl": "4.41.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", - "@rollup/rollup-linux-riscv64-gnu": "4.41.1", - "@rollup/rollup-linux-riscv64-musl": "4.41.1", - "@rollup/rollup-linux-s390x-gnu": "4.41.1", - "@rollup/rollup-linux-x64-gnu": "4.41.1", - "@rollup/rollup-linux-x64-musl": "4.41.1", - "@rollup/rollup-win32-arm64-msvc": "4.41.1", - "@rollup/rollup-win32-ia32-msvc": "4.41.1", - "@rollup/rollup-win32-x64-msvc": "4.41.1", + "@rollup/rollup-android-arm-eabi": "4.42.0", + "@rollup/rollup-android-arm64": "4.42.0", + "@rollup/rollup-darwin-arm64": "4.42.0", + "@rollup/rollup-darwin-x64": "4.42.0", + "@rollup/rollup-freebsd-arm64": "4.42.0", + "@rollup/rollup-freebsd-x64": "4.42.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.42.0", + "@rollup/rollup-linux-arm-musleabihf": "4.42.0", + "@rollup/rollup-linux-arm64-gnu": "4.42.0", + "@rollup/rollup-linux-arm64-musl": "4.42.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.42.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.42.0", + "@rollup/rollup-linux-riscv64-gnu": "4.42.0", + "@rollup/rollup-linux-riscv64-musl": "4.42.0", + "@rollup/rollup-linux-s390x-gnu": "4.42.0", + "@rollup/rollup-linux-x64-gnu": "4.42.0", + "@rollup/rollup-linux-x64-musl": "4.42.0", + "@rollup/rollup-win32-arm64-msvc": "4.42.0", + "@rollup/rollup-win32-ia32-msvc": "4.42.0", + "@rollup/rollup-win32-x64-msvc": "4.42.0", "fsevents": "~2.3.2" } }, + "node_modules/rollup/node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/scheduler": { "version": "0.26.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", From 499c272260844bacf6eeb19dd739c74701b6f718 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:37:52 +0100 Subject: [PATCH 059/107] dependabot switch to monthly --- .github/dependabot.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 34e7a24..0042295 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -12,7 +12,7 @@ updates: patterns: - "*" schedule: - interval: "weekly" + interval: "monthly" - package-ecosystem: "github-actions" directory: "/" @@ -21,7 +21,7 @@ updates: patterns: - "*" schedule: - interval: "weekly" + interval: "monthly" - package-ecosystem: "npm" directory: "/scripts/settings/" @@ -30,11 +30,11 @@ updates: patterns: - "*" schedule: - interval: "weekly" + interval: "monthly" - package-ecosystem: "docker" # Look for a `Dockerfile` in the `root` directory directory: "/" # Check for updates once a week schedule: - interval: "weekly" \ No newline at end of file + interval: "monthly" \ No newline at end of file From 22bd8727dfa950e5541ab5df14bd87ead439688b Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:43:55 +0100 Subject: [PATCH 060/107] python dependencies bump --- poetry.lock | 109 ++++++++++++++++++++++++++-------------------------- 1 file changed, 55 insertions(+), 54 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8adf6b9..786ae5f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -193,18 +193,18 @@ files = [ [[package]] name = "boto3" -version = "1.38.27" +version = "1.38.33" description = "The AWS SDK for Python" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "boto3-1.38.27-py3-none-any.whl", hash = "sha256:95f5fe688795303a8a15e8b7e7f255cadab35eae459d00cc281a4fd77252ea80"}, - {file = "boto3-1.38.27.tar.gz", hash = "sha256:94bd7fdd92d5701b362d4df100d21e28f8307a67ff56b6a8b0398119cf22f859"}, + {file = "boto3-1.38.33-py3-none-any.whl", hash = "sha256:25d0717489c658f7ae6c3c7f0f7e1b4d611b30b2f08f0fcef6455ac6864a8768"}, + {file = "boto3-1.38.33.tar.gz", hash = "sha256:6467909c1ae01ff67981f021bb2568592211765ec8a9a1d2c4529191e46c3541"}, ] [package.dependencies] -botocore = ">=1.38.27,<1.39.0" +botocore = ">=1.38.33,<1.39.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.13.0,<0.14.0" @@ -213,14 +213,14 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.38.27" +version = "1.38.33" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "botocore-1.38.27-py3-none-any.whl", hash = "sha256:a785d5e9a5eda88ad6ab9ed8b87d1f2ac409d0226bba6ff801c55359e94d91a8"}, - {file = "botocore-1.38.27.tar.gz", hash = "sha256:9788f7efe974328a38cbade64cc0b1e67d27944b899f88cb786ae362973133b6"}, + {file = "botocore-1.38.33-py3-none-any.whl", hash = "sha256:ad25233e93dcebe95809b1f9393c1f11a639696327793d166295fb78dd7bc597"}, + {file = "botocore-1.38.33.tar.gz", hash = "sha256:dbe8fea9d0426c644c89ef2018ead886ccbcc22901a02b377b4e65ce1cb69a2b"}, ] [package.dependencies] @@ -941,14 +941,14 @@ files = [ [[package]] name = "google-api-core" -version = "2.24.2" +version = "2.25.0" description = "Google API client core library" optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "google_api_core-2.24.2-py3-none-any.whl", hash = "sha256:810a63ac95f3c441b7c0e43d344e372887f62ce9071ba972eacf32672e072de9"}, - {file = "google_api_core-2.24.2.tar.gz", hash = "sha256:81718493daf06d96d6bc76a91c23874dbf2fac0adbbf542831b805ee6e974696"}, + {file = "google_api_core-2.25.0-py3-none-any.whl", hash = "sha256:1db79d1281dcf9f3d10023283299ba38f3dc9f639ec41085968fd23e5bcf512e"}, + {file = "google_api_core-2.25.0.tar.gz", hash = "sha256:9b548e688702f82a34ed8409fb8a6961166f0b7795032f0be8f48308dff4333a"}, ] [package.dependencies] @@ -959,21 +959,21 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4 requests = ">=2.18.0,<3.0.0" [package.extras] -async-rest = ["google-auth[aiohttp] (>=2.35.0,<3.0.dev0)"] -grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev) ; python_version >= \"3.11\"", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0) ; python_version >= \"3.11\""] -grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] -grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +async-rest = ["google-auth[aiohttp] (>=2.35.0,<3.0.0)"] +grpc = ["grpcio (>=1.33.2,<2.0.0)", "grpcio (>=1.49.1,<2.0.0) ; python_version >= \"3.11\"", "grpcio-status (>=1.33.2,<2.0.0)", "grpcio-status (>=1.49.1,<2.0.0) ; python_version >= \"3.11\""] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.0)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.0)"] [[package]] name = "google-api-python-client" -version = "2.170.0" +version = "2.171.0" description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "google_api_python_client-2.170.0-py3-none-any.whl", hash = "sha256:7bf518a0527ad23322f070fa69f4f24053170d5c766821dc970ff0571ec22748"}, - {file = "google_api_python_client-2.170.0.tar.gz", hash = "sha256:75f3a1856f11418ea3723214e0abc59d9b217fd7ed43dcf743aab7f06ab9e2b1"}, + {file = "google_api_python_client-2.171.0-py3-none-any.whl", hash = "sha256:c9c9b76f561e9d9ac14e54a9e2c0842876201d5b96e69e48f967373f0784cbe9"}, + {file = "google_api_python_client-2.171.0.tar.gz", hash = "sha256:057a5c08d28463c6b9eb89746355de5f14b7ed27a65c11fdbf1d06c66bb66b23"}, ] [package.dependencies] @@ -985,14 +985,14 @@ uritemplate = ">=3.0.1,<5" [[package]] name = "google-auth" -version = "2.40.2" +version = "2.40.3" description = "Google Authentication Library" optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "google_auth-2.40.2-py2.py3-none-any.whl", hash = "sha256:f7e568d42eedfded58734f6a60c58321896a621f7c116c411550a4b4a13da90b"}, - {file = "google_auth-2.40.2.tar.gz", hash = "sha256:a33cde547a2134273226fa4b853883559947ebe9207521f7afc707efbf690f58"}, + {file = "google_auth-2.40.3-py2.py3-none-any.whl", hash = "sha256:1370d4593e86213563547f97a92752fc658456fe4514c809544f330fed45a7ca"}, + {file = "google_auth-2.40.3.tar.gz", hash = "sha256:500c3a29adedeb36ea9cf24b8d10858e152f2412e3ca37829b3fa18e33d63b77"}, ] [package.dependencies] @@ -2130,7 +2130,7 @@ version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" -groups = ["main", "docs"] +groups = ["main", "dev", "docs"] files = [ {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, @@ -2335,26 +2335,27 @@ files = [ [[package]] name = "pytest" -version = "8.3.5" +version = "8.4.0" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main", "dev"] files = [ - {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, - {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, + {file = "pytest-8.4.0-py3-none-any.whl", hash = "sha256:f40f825768ad76c0977cbacdf1fd37c6f7a468e460ea6a0636078f8972d4517e"}, + {file = "pytest-8.4.0.tar.gz", hash = "sha256:14d920b48472ea0dbf68e45b96cd1ffda4705f33307dcc86c676c1b5104838a6"}, ] [package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" +colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1", markers = "python_version < \"3.11\""} +iniconfig = ">=1" +packaging = ">=20" pluggy = ">=1.5,<2" +pygments = ">=2.7.2" tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-html" @@ -2766,19 +2767,19 @@ files = [ [[package]] name = "requests" -version = "2.32.3" +version = "2.32.4" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" groups = ["main", "docs"] files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, + {file = "requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c"}, + {file = "requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422"}, ] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" +charset_normalizer = ">=2,<4" idna = ">=2.5,<4" PySocks = {version = ">=1.5.6,<1.5.7 || >1.5.7", optional = true, markers = "extra == \"socks\""} urllib3 = ">=1.21.1,<3" @@ -2894,7 +2895,7 @@ description = "Manipulate well-formed Roman numerals" optional = false python-versions = ">=3.9" groups = ["docs"] -markers = "python_version >= \"3.11\"" +markers = "python_version != \"3.10\"" files = [ {file = "roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c"}, {file = "roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d"}, @@ -2921,14 +2922,14 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruamel-yaml" -version = "0.18.12" +version = "0.18.14" 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" +python-versions = ">=3.8" groups = ["main"] files = [ - {file = "ruamel.yaml-0.18.12-py3-none-any.whl", hash = "sha256:790ba4c48b6a6e6b12b532a7308779eb12d2aaab3a80fdb8389216f28ea2b287"}, - {file = "ruamel.yaml-0.18.12.tar.gz", hash = "sha256:5a38fd5ce39d223bebb9e3a6779e86b9427a03fb0bf9f270060f8b149cffe5e2"}, + {file = "ruamel.yaml-0.18.14-py3-none-any.whl", hash = "sha256:710ff198bb53da66718c7db27eec4fbcc9aa6ca7204e4c1df2f282b6fe5eb6b2"}, + {file = "ruamel.yaml-0.18.14.tar.gz", hash = "sha256:7227b76aaec364df15936730efbf7d72b30c0b79b1d578bbb8e3dcb2d81f52b7"}, ] [package.dependencies] @@ -3112,14 +3113,14 @@ websocket-client = ">=1.8.0,<1.9.0" [[package]] name = "seleniumbase" -version = "4.39.2" +version = "4.39.3" description = "A complete web automation framework for end-to-end testing." optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "seleniumbase-4.39.2-py3-none-any.whl", hash = "sha256:23b2d071c02ba269a8239b828fd5098edb208d04171143c93b40d8a351ba2861"}, - {file = "seleniumbase-4.39.2.tar.gz", hash = "sha256:3a18d582ca90f4d633debb8ec45871db1b7aed71e5876fc634962fba79731967"}, + {file = "seleniumbase-4.39.3-py3-none-any.whl", hash = "sha256:cbb94d7858a9ef3b0b4431a5879150649f4a73029afaa8ecfb7bda113f2565e1"}, + {file = "seleniumbase-4.39.3.tar.gz", hash = "sha256:b32978e685b1e4e2c7859b2dcb377ac14ba99bf748ea428548f9e450257b861b"}, ] [package.dependencies] @@ -3156,7 +3157,7 @@ pygments = ">=2.19.1" pynose = ">=1.5.4" pyotp = "2.9.0" pyreadline3 = {version = ">=3.5.3", markers = "platform_system == \"Windows\""} -pytest = "8.3.5" +pytest = {version = "8.4.0", markers = "python_version >= \"3.9\""} pytest-html = "4.0.2" pytest-metadata = "3.1.1" pytest-ordering = "0.6" @@ -3164,11 +3165,11 @@ pytest-rerunfailures = {version = "15.1", markers = "python_version >= \"3.9\""} pytest-xdist = {version = "3.7.0", markers = "python_version >= \"3.9\""} python-xlib = {version = "0.33", markers = "platform_system == \"Linux\""} pyyaml = ">=6.0.2" -requests = "2.32.3" +requests = "2.32.4" rich = ">=14.0.0,<15" sbvirtualdisplay = ">=1.4.0" selenium = {version = "4.33.0", markers = "python_version >= \"3.10\""} -setuptools = {version = ">=80.8.0", markers = "python_version >= \"3.10\""} +setuptools = {version = ">=80.9.0", markers = "python_version >= \"3.10\""} six = ">=1.17.0" sniffio = "1.3.1" sortedcontainers = "2.4.0" @@ -3323,7 +3324,7 @@ description = "Python documentation generator" optional = false python-versions = ">=3.11" groups = ["docs"] -markers = "python_version >= \"3.11\"" +markers = "python_version != \"3.10\"" files = [ {file = "sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3"}, {file = "sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348"}, @@ -3801,14 +3802,14 @@ test = ["coverage", "pytest", "pytest-cov"] [[package]] name = "uritemplate" -version = "4.1.1" +version = "4.2.0" description = "Implementation of RFC 6570 URI Templates" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, - {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, + {file = "uritemplate-4.2.0-py3-none-any.whl", hash = "sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686"}, + {file = "uritemplate-4.2.0.tar.gz", hash = "sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e"}, ] [[package]] @@ -4120,14 +4121,14 @@ h11 = ">=0.9.0,<1" [[package]] name = "yt-dlp" -version = "2025.5.22" +version = "2025.6.9" description = "A feature-rich command-line audio/video downloader" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "yt_dlp-2025.5.22-py3-none-any.whl", hash = "sha256:a49c4b76afeaded6254c3e2b759d8d5a13271aa963d5fccb51fe059d1c313151"}, - {file = "yt_dlp-2025.5.22.tar.gz", hash = "sha256:ea73854c5dabc124f29a35a8fae9bc5d422ef3231bebeea2bdfa82ac191a9c29"}, + {file = "yt_dlp-2025.6.9-py3-none-any.whl", hash = "sha256:ebdfda9ffa807f6a26aed7c8f906e5557cd06b4c388dc547df1ec2078631fca8"}, + {file = "yt_dlp-2025.6.9.tar.gz", hash = "sha256:751f53a3b61353522bf805fa30bbcbd16666126537e39706eab4f8c368f111ac"}, ] [package.dependencies] @@ -4142,7 +4143,7 @@ urllib3 = {version = ">=1.26.17,<3", optional = true, markers = "extra == \"defa websockets = {version = ">=13.0", optional = true, markers = "extra == \"default\""} [package.extras] -build = ["build", "hatchling", "pip", "setuptools (>=71.0.2)", "wheel"] +build = ["build", "hatchling", "pip", "setuptools (>=71.0.2,<81)", "wheel"] curl-cffi = ["curl-cffi (>=0.5.10,<0.6.dev0 || ==0.10.*) ; implementation_name == \"cpython\""] default = ["brotli ; implementation_name == \"cpython\"", "brotlicffi ; implementation_name != \"cpython\"", "certifi", "mutagen", "pycryptodomex", "requests (>=2.32.2,<3)", "urllib3 (>=1.26.17,<3)", "websockets (>=13.0)"] dev = ["autopep8 (>=2.0,<3.0)", "pre-commit", "pytest (>=8.1,<9.0)", "pytest-rerunfailures (>=14.0,<15.0)", "ruff (>=0.11.0,<0.12.0)"] From fdbe96f2e44fd87b88e8a6fd1cab8436cdebcee1 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:44:14 +0100 Subject: [PATCH 061/107] vk and reddit should work without credentials but log the error --- .../modules/antibot_extractor_enricher/dropins/reddit.py | 1 + .../modules/antibot_extractor_enricher/dropins/vk.py | 1 + 2 files changed, 2 insertions(+) diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py index c46ca17..14d9c8c 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py @@ -29,6 +29,7 @@ class RedditDropin(Dropin): self.sb.open(url) return True + @logger.catch def _login(self): self.sb.click_link_text("Log in") self.sb.wait_for_ready_state_complete() diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py index 76e176e..6888727 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py @@ -37,6 +37,7 @@ class VkDropin(Dropin): self.sb.open(url) return True + @logger.catch def _login(self) -> bool: # TODO: test method self.sb.open("https://vk.com") From 71636233cbd537a6eca1cd5b47eb895abbbf89aa Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 17:07:10 +0100 Subject: [PATCH 062/107] adds migration information and VkDropin info. --- .../source/how_to/upgrading_1_0_1_to_1_1_0.md | 40 +++++++++++++++++++ .../modules/generic_extractor/__manifest__.py | 2 + 2 files changed, 42 insertions(+) create mode 100644 docs/source/how_to/upgrading_1_0_1_to_1_1_0.md diff --git a/docs/source/how_to/upgrading_1_0_1_to_1_1_0.md b/docs/source/how_to/upgrading_1_0_1_to_1_1_0.md new file mode 100644 index 0000000..7e8d398 --- /dev/null +++ b/docs/source/how_to/upgrading_1_0_1_to_1_1_0.md @@ -0,0 +1,40 @@ +# Upgrading from v1.0.1 + +```{note} This how-to is only relevant for people who used Auto Archiver before June 2025 (versions prior to 1.0.1). + +If you are new to Auto Archiver, then you are already using the latest configuration format and this how-to is not relevant for you. +``` + +Versions 1.1.0+ of Auto Archiver has breaking changes in the configuration format, which means earlier configuration formats will not work without slight modifications. + + +## Dropping `vk_extractor` module +We have dropped the `vk_extractor` because of problems in a project we relied on. You will need to remove it from your configuration file, otherwise you will see an error like: + +```{code} console +Module 'vk_extractor' not found. Are you sure it's installed/exists? +``` + +## New `antibot_extractor_enricher` module +We have added a new `antibot_extractor_enricher` module that uses a computer-controlled browser to extract content from websites that use anti-bot measures. You can add it to your configuration file like this: + +```{code} yaml +steps: + extractor_enrichers: + - antibot_extractor_enricher +``` + +It comes with Dropins that we will be adding and maintaining. + +> Dropin: A module that is loaded automatically. You don't need to add them to your configuration steps for them to run. Sometimes they need `authentication` configurations though. + +One such Dropin is the VkDropin which uses this automated browser to access VKontakte (VK) pages. You should add a username/password to the configuration file if you get authentication blocks from VK, to do so use the [authentication settings](authentication_how_to.md): + +```{code} yaml +authentication: + vk: + username: your_username + password: your_password +``` + +See all available Dropins in [the source code](https://github.com/bellingcat/auto-archiver/tree/main/src/auto_archiver/modules/antibot_extractor_enricher/dropins). Usually each Dropin needs its own authentication settings, similarly to the VkDropin. \ No newline at end of file diff --git a/src/auto_archiver/modules/generic_extractor/__manifest__.py b/src/auto_archiver/modules/generic_extractor/__manifest__.py index 72db630..52cf8b8 100644 --- a/src/auto_archiver/modules/generic_extractor/__manifest__.py +++ b/src/auto_archiver/modules/generic_extractor/__manifest__.py @@ -30,6 +30,8 @@ For a full list of video platforms supported by `yt-dlp`, see the custom dropins can be created to handle additional websites and passed to the archiver via the command line using the `--dropins` option (TODO!). +You can see all currently implemented dropins in [the source code](https://github.com/bellingcat/auto-archiver/tree/main/src/auto_archiver/modules/generic_extractor). + ### Auto-Updates The Generic Extractor will also automatically check for updates to `yt-dlp` (every 5 days by default). From 54fda9cad4a83bec52d522ca64d07b6acd8330f6 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 18:04:27 +0100 Subject: [PATCH 063/107] antibot in docker uses a different user_data_dir --- .../__manifest__.py | 2 +- .../antibot_extractor_enricher.py | 22 ++++++------------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py index 214653c..c7be89f 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py @@ -23,7 +23,7 @@ }, "user_data_dir": { "default": "secrets/antibot_user_data", - "help": "Path to the user data directory for the webdriver. This is used to persist browser state, such as cookies and local storage. When using docker it's best to let docker create the folder otherwise there may be permission issues. The Extractor will try to work without it if that error occurs but login sessions will not be used or preserved on those runs.", + "help": "Path to the user data directory for the webdriver. This is used to persist browser state, such as cookies and local storage. If you use the docker deployment, this path will be appended with `_docker` that is because the folder cannot be shared between the host and the container due to user permissions.", }, "detect_auth_wall": { "default": True, diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py index 08d0c03..549cced 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py @@ -6,7 +6,6 @@ import sys import traceback from urllib.parse import urljoin import glob -import stat import importlib.util from loguru import logger @@ -41,7 +40,7 @@ class AntibotExtractorEnricher(Extractor, Enricher): else: self.max_download_videos = int(self.max_download_videos) - self._prepare_and_warn_about_docker_and_user_data_dir() + self._prepare_user_data_dir() self.dropins = self.load_dropins() @@ -79,19 +78,12 @@ class AntibotExtractorEnricher(Extractor, Enricher): result.status = "antibot" return result - def _prepare_and_warn_about_docker_and_user_data_dir(self): - os.makedirs(self.user_data_dir, exist_ok=True) - - in_docker = os.environ.get("RUNNING_IN_DOCKER") - if in_docker and self.user_data_dir: - st = os.stat(self.user_data_dir) - perms = stat.filemode(st.st_mode) - owner = st.st_uid - group = st.st_gid - if owner != 0 or group != 0: - logger.warning( - f"""ANTIBOT: Running in Docker with user_data_dir {self.user_data_dir} with permissions {perms} and non-root {owner=}. This may cause issues with Chrome, if you get 'session not created' errors make sure to remove the folder and let docker create it.""" - ) + def _prepare_user_data_dir(self): + if self.user_data_dir: + in_docker = os.environ.get("RUNNING_IN_DOCKER") + if in_docker: + self.user_data_dir = self.user_data_dir.rstrip(os.path.sep) + "_docker" + os.makedirs(self.user_data_dir, exist_ok=True) def enrich(self, to_enrich: Metadata, custom_data_dir: bool = True) -> bool: using_user_data_dir = self.user_data_dir if custom_data_dir else None From fc89d9651758dce463c060da8c114e05b9f0a946 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 18:04:33 +0100 Subject: [PATCH 064/107] escape sequence --- .../modules/antibot_extractor_enricher/dropins/reddit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py index 14d9c8c..44d572b 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py @@ -69,7 +69,7 @@ class RedditDropin(Dropin): @logger.catch def add_extra_media(self, to_enrich: Metadata) -> tuple[int, int]: - filtered_urls = self.sb.execute_script(f""" + filtered_urls = self.sb.execute_script(rf""" return [...document.querySelectorAll("{self.video_selectors()}")] .map(el => el.src || el.href) .filter(url => url && /\.(m3u8|mpd|ism)$/.test(url)); From 6279610a43c4cd78317b74c1a10c589b019cac31 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 18:28:45 +0100 Subject: [PATCH 065/107] updates docs --- docs/source/how_to/upgrading_1_0_1_to_1_1_0.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/source/how_to/upgrading_1_0_1_to_1_1_0.md b/docs/source/how_to/upgrading_1_0_1_to_1_1_0.md index 7e8d398..81e00e2 100644 --- a/docs/source/how_to/upgrading_1_0_1_to_1_1_0.md +++ b/docs/source/how_to/upgrading_1_0_1_to_1_1_0.md @@ -1,6 +1,6 @@ # Upgrading from v1.0.1 -```{note} This how-to is only relevant for people who used Auto Archiver before June 2025 (versions prior to 1.0.1). +```{note} This how-to is only relevant for people who used Auto Archiver before June 2025 (versions prior to 1.1.0). If you are new to Auto Archiver, then you are already using the latest configuration format and this how-to is not relevant for you. ``` @@ -15,18 +15,22 @@ We have dropped the `vk_extractor` because of problems in a project we relied on Module 'vk_extractor' not found. Are you sure it's installed/exists? ``` -## New `antibot_extractor_enricher` module +## New `antibot_extractor_enricher` module and VkDropin We have added a new `antibot_extractor_enricher` module that uses a computer-controlled browser to extract content from websites that use anti-bot measures. You can add it to your configuration file like this: ```{code} yaml steps: - extractor_enrichers: - - antibot_extractor_enricher + extractors: + - antibot_extractor_enricher + + # or alternatively, if you want to use it as an enricher: + enrichers: + - antibot_extractor_enricher ``` It comes with Dropins that we will be adding and maintaining. -> Dropin: A module that is loaded automatically. You don't need to add them to your configuration steps for them to run. Sometimes they need `authentication` configurations though. +> Dropin: A module with site-specific behaviours that is loaded automatically. You don't need to add them to your configuration steps for them to run. Sometimes they need `authentication` configurations though. One such Dropin is the VkDropin which uses this automated browser to access VKontakte (VK) pages. You should add a username/password to the configuration file if you get authentication blocks from VK, to do so use the [authentication settings](authentication_how_to.md): From 8314833ae8ef1117112ed947e79b0f9cabde98a2 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 10 Jun 2025 18:34:33 +0100 Subject: [PATCH 066/107] removes exclude_media_extensions option --- .../modules/antibot_extractor_enricher/__manifest__.py | 4 ---- .../antibot_extractor_enricher.py | 8 -------- src/auto_archiver/utils/url.py | 4 +++- tests/extractors/test_antibot_extractor_enricher.py | 1 - 4 files changed, 3 insertions(+), 14 deletions(-) diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py index c7be89f..e2bcad9 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py @@ -17,10 +17,6 @@ "default": 50, "help": "maximum number of videos to download from the page (0 = no download, inf = no limit).", }, - "exclude_media_extensions": { - "default": ".svg,.ico,.gif", - "help": "CSV of media (image/video) file extensions to exclude from download", - }, "user_data_dir": { "default": "secrets/antibot_user_data", "help": "Path to the user data directory for the webdriver. This is used to persist browser state, such as cookies and local storage. If you use the docker deployment, this path will be appended with `_docker` that is because the folder cannot be shared between the host and the container due to user permissions.", diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py index 549cced..1982389 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py @@ -1,6 +1,5 @@ import base64 import math -import mimetypes import os import sys import traceback @@ -26,10 +25,6 @@ class AntibotExtractorEnricher(Extractor, Enricher): self.agent = None # Use the default UserAgent # parse configuration options - self.exclude_media_mimetypes = set( - [mimetypes.guess_type(f"file{m}")[0] for m in self.exclude_media_extensions.split(",")] - ) - {None} - if self.max_download_images == "inf": self.max_download_images = math.inf else: @@ -292,9 +287,6 @@ class AntibotExtractorEnricher(Extractor, Enricher): break if not is_relevant_url(src): continue - mimetype = mimetypes.guess_type(src)[0] - if mimetype in self.exclude_media_mimetypes: - continue full_src = urljoin(url, src) if full_src not in all_urls: filename, full_src = self.download_from_url(full_src, try_best_quality=True) diff --git a/src/auto_archiver/utils/url.py b/src/auto_archiver/utils/url.py index ea03d7f..2bb19cf 100644 --- a/src/auto_archiver/utils/url.py +++ b/src/auto_archiver/utils/url.py @@ -111,12 +111,14 @@ def is_relevant_url(url: str) -> bool: ("emoji.redditmedia.com",), ] + # TODO: make these globally configurable IRRELEVANT_ENDS_WITH = [ ".svg", # ignore SVGs ".ico", # ignore icons + # ignore index files for videos, these should be handled by ytdlp ".m3u8", ".mpd", - ".ism", # ignore index files for videos, these should be handled by ytdlp + ".ism", ] for end in IRRELEVANT_ENDS_WITH: diff --git a/tests/extractors/test_antibot_extractor_enricher.py b/tests/extractors/test_antibot_extractor_enricher.py index 600baf2..06107b4 100644 --- a/tests/extractors/test_antibot_extractor_enricher.py +++ b/tests/extractors/test_antibot_extractor_enricher.py @@ -34,7 +34,6 @@ class TestAntibotExtractorEnricher(TestExtractorBase): "save_to_pdf": False, "max_download_images": 0, "max_download_videos": 0, - "exclude_media_extensions": ".svg,.ico,.gif", "proxy": None, } From 1039e9631f0c13cca0f23bac4710b7bc6a7be1b7 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 11 Jun 2025 11:22:23 +0100 Subject: [PATCH 067/107] new reddit tests with .env.test --- .gitignore | 1 + docs/source/development/testing.md | 15 +++++++++++++-- .../dropins/reddit.py | 2 +- tests/.env.test.example | 6 ++++++ tests/conftest.py | 19 +++++++++++++++++++ .../test_antibot_extractor_enricher.py | 19 +++++++++++++++++-- 6 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 tests/.env.test.example diff --git a/.gitignore b/.gitignore index 35eee83..2c579fa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ tmp*/ temp/ .env* +!.env*.example .DS_Store expmt/ service_account.json diff --git a/docs/source/development/testing.md b/docs/source/development/testing.md index 5de9574..290592c 100644 --- a/docs/source/development/testing.md +++ b/docs/source/development/testing.md @@ -3,14 +3,14 @@ `pytest` is used for testing. There are two main types of tests: 1. 'core' tests which should be run on every change -2. 'download' tests which hit the network. These tests will do things like make API calls (e.g. Twitter, Bluesky etc.) and should be run regularly to make sure that APIs have not changed. +2. 'download' tests which hit the network. These tests will do things like make API calls (e.g. Twitter, Bluesky etc.) and should be run regularly to make sure that APIs have not changed, they take longer. ## Running Tests 1. Make sure you've installed the dev dependencies with `pytest install --with dev` 2. Tests can be run as follows: -``` +```{code} bash #### Command prefix of 'poetry run' removed here for simplicity # run core tests pytest -ra -v -m "not download" @@ -18,4 +18,15 @@ pytest -ra -v -m "not download" pytest -ra -v -m "download" # run all tests pytest -ra -v + + +# run a specific test file +pytest -ra -v tests/test_file.py +# run a specific test function +pytest -ra -v tests/test_file.py::test_function_name +``` + +3. Some tests require environment variables to be set. You can use the example `.env.test.example` file as a template. Copy it to `.env.test` and fill in the required values. This file will be loaded automatically by `pytest`. +```{code} bash +cp .env.test.example .env.test ``` \ No newline at end of file diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py index 44d572b..78bc510 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py @@ -36,7 +36,7 @@ class RedditDropin(Dropin): self._close_cookies_banner() username, password = self._get_username_password("reddit.com") - logger.debug("RedditDropin Logging in to VK with username: {}", username) + logger.debug("RedditDropin Logging in to Reddit with username: {}", username) self.sb.type("#login-username", username) self.sb.type("#login-password", password) diff --git a/tests/.env.test.example b/tests/.env.test.example new file mode 100644 index 0000000..2e058ab --- /dev/null +++ b/tests/.env.test.example @@ -0,0 +1,6 @@ +# reddit test credentials +REDDIT_TEST_USERNAME="" +REDDIT_TEST_PASSWORD="" + +# twitter test credentials +TWITTER_BEARER_TOKEN="TEST_KEY" \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index ba7b48d..a54f01d 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -9,6 +9,7 @@ from tempfile import TemporaryDirectory from typing import Dict, Tuple import hashlib +from loguru import logger import pytest from auto_archiver.core.metadata import Metadata, Media from auto_archiver.core.module import ModuleFactory @@ -20,6 +21,24 @@ from auto_archiver.core.module import ModuleFactory TESTS_TO_RUN_LAST = ["test_generic_archiver", "test_twitter_api_archiver"] +def pytest_configure(): + # load environment variables from .env.test file. + env_path = os.path.join(os.path.dirname(__file__), ".env.test") + if os.path.exists(env_path): + with open(env_path) as f: + for line in f: + line = line.strip() + if not line or line.startswith("#"): + continue + if "=" in line: + key, value = line.split("=", 1) + os.environ[key.strip()] = value.strip().lstrip('"').rstrip('"') + else: + logger.warning( + f"Environment file {env_path} not found. Skipping loading environment variables, some tests may fail." + ) + + # don't check for ytdlp updates in tests @pytest.fixture(autouse=True) def skip_check_for_update(mocker): diff --git a/tests/extractors/test_antibot_extractor_enricher.py b/tests/extractors/test_antibot_extractor_enricher.py index 06107b4..c0044b9 100644 --- a/tests/extractors/test_antibot_extractor_enricher.py +++ b/tests/extractors/test_antibot_extractor_enricher.py @@ -1,3 +1,4 @@ +import os import pytest from auto_archiver.modules.antibot_extractor_enricher.antibot_extractor_enricher import AntibotExtractorEnricher @@ -34,7 +35,14 @@ class TestAntibotExtractorEnricher(TestExtractorBase): "save_to_pdf": False, "max_download_images": 0, "max_download_videos": 0, + "user_data_dir": "./tests/tmp/user_data", "proxy": None, + "authentication": { + "reddit.com": { + "username": os.environ.get("REDDIT_TEST_USERNAME"), + "password": os.environ.get("REDDIT_TEST_PASSWORD"), + } + }, } @pytest.mark.download @@ -76,16 +84,23 @@ class TestAntibotExtractorEnricher(TestExtractorBase): 5, 0, ), + ( + "https://www.reddit.com/r/BeAmazed/comments/1l6b1n4/duy_tran_is_the_owner_and_prime_wood_work_artist/", + "Duy tran is the owner and prime wood work artist", + " Created Jan 26, 2015", + 4, + 0, + ), ], ) def test_download_pages_with_media(self, setup_module, make_item, url, in_title, in_text, image_count, video_count): """ Test downloading pages with media. """ - self.extractor = setup_module( self.extractor_module, - { + self.config + | { "save_to_pdf": True, "max_download_images": 5, "max_download_videos": "inf", From 69ddb7214676113b3670e3afa3bd2b1d4b5d72df Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 11 Jun 2025 11:27:11 +0100 Subject: [PATCH 068/107] separate reddit tests --- .../test_antibot_extractor_enricher.py | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/tests/extractors/test_antibot_extractor_enricher.py b/tests/extractors/test_antibot_extractor_enricher.py index c0044b9..642d0ec 100644 --- a/tests/extractors/test_antibot_extractor_enricher.py +++ b/tests/extractors/test_antibot_extractor_enricher.py @@ -84,13 +84,6 @@ class TestAntibotExtractorEnricher(TestExtractorBase): 5, 0, ), - ( - "https://www.reddit.com/r/BeAmazed/comments/1l6b1n4/duy_tran_is_the_owner_and_prime_wood_work_artist/", - "Duy tran is the owner and prime wood work artist", - " Created Jan 26, 2015", - 4, - 0, - ), ], ) def test_download_pages_with_media(self, setup_module, make_item, url, in_title, in_text, image_count, video_count): @@ -133,6 +126,28 @@ class TestAntibotExtractorEnricher(TestExtractorBase): f"Expected media with id '{expected_id}' not found" ) + @pytest.mark.skipif( + not os.environ.get("REDDIT_TEST_USERNAME") or not os.environ.get("REDDIT_TEST_PASSWORD"), + reason="No Reddit test credentials provided", + ) + @pytest.mark.download + @pytest.mark.parametrize( + "url,in_title,in_text,image_count,video_count", + [ + ( + "https://www.reddit.com/r/BeAmazed/comments/1l6b1n4/duy_tran_is_the_owner_and_prime_wood_work_artist/", + "Duy tran is the owner and prime wood work artist", + " Created Jan 26, 2015", + 4, + 0, + ), + ], + ) + def test_reddit_download_with_login( + self, setup_module, make_item, url, in_title, in_text, image_count, video_count + ): + self.test_download_pages_with_media(setup_module, make_item, url, in_title, in_text, image_count, video_count) + @pytest.mark.download @pytest.mark.parametrize( "url,in_html", From 3cf51dd8744d98848b31dee0e095d6167a61ca40 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 11 Jun 2025 11:56:42 +0100 Subject: [PATCH 069/107] adds tracker remove feature and tests --- src/auto_archiver/core/orchestrator.py | 4 +-- src/auto_archiver/utils/url.py | 8 ++++-- tests/utils/test_urls.py | 37 ++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/auto_archiver/core/orchestrator.py b/src/auto_archiver/core/orchestrator.py index 0bff376..66073a7 100644 --- a/src/auto_archiver/core/orchestrator.py +++ b/src/auto_archiver/core/orchestrator.py @@ -34,7 +34,7 @@ from .config import ( from .module import ModuleFactory, LazyBaseModule from . import validators, Feeder, Extractor, Database, Storage, Formatter, Enricher from .consts import MODULE_TYPES, SetupError -from auto_archiver.utils.url import check_url_or_raise +from auto_archiver.utils.url import check_url_or_raise, clean if TYPE_CHECKING: from .base_module import BaseModule @@ -572,7 +572,7 @@ Here's how that would look: \n\nsteps:\n extractors:\n - [your_extractor_name_ raise e # 1 - sanitize - each archiver is responsible for cleaning/expanding its own URLs - url = original_url + url = clean(original_url) for a in self.extractors: url = a.sanitize_url(url) diff --git a/src/auto_archiver/utils/url.py b/src/auto_archiver/utils/url.py index 2bb19cf..a44a91d 100644 --- a/src/auto_archiver/utils/url.py +++ b/src/auto_archiver/utils/url.py @@ -1,5 +1,5 @@ import re -from urllib.parse import urlparse, urlunparse +from urllib.parse import parse_qsl, urlencode, urlparse, urlunparse from ipaddress import ip_address @@ -53,7 +53,11 @@ def domain_for_url(url: str) -> str: def clean(url: str) -> str: - return url + TRACKERS = {"utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content", "fbclid", "gclid"} + + parsed = urlparse(url) + clean_qs = [(k, v) for k, v in parse_qsl(parsed.query) if k not in TRACKERS] + return parsed._replace(query=urlencode(clean_qs)).geturl() def is_auth_wall(url: str) -> bool: diff --git a/tests/utils/test_urls.py b/tests/utils/test_urls.py index df8e0f3..2c77122 100644 --- a/tests/utils/test_urls.py +++ b/tests/utils/test_urls.py @@ -1,5 +1,6 @@ import pytest from auto_archiver.utils.url import ( + clean, is_auth_wall, check_url_or_raise, domain_for_url, @@ -158,3 +159,39 @@ def test_twitter_best_quality_url(url, best_quality): ) def test_get_media_url_best_quality(input_url, expected_url): assert get_media_url_best_quality(input_url) == expected_url + + +@pytest.mark.parametrize( + "input_url,expected_url", + [ + # No trackers present + ("https://example.com/page?foo=bar&baz=qux", "https://example.com/page?foo=bar&baz=qux"), + # Single tracker present + ("https://example.com/page?utm_source=google&foo=bar", "https://example.com/page?foo=bar"), + # Multiple trackers present + ("https://example.com/page?utm_source=google&utm_medium=email&utm_campaign=spring", "https://example.com/page"), + # Trackers mixed with other params + ( + "https://example.com/page?foo=bar&utm_content=abc&baz=qux&gclid=123", + "https://example.com/page?foo=bar&baz=qux", + ), + # Only trackers present + ("https://example.com/page?utm_source=google&gclid=123", "https://example.com/page"), + # No query string + ("https://example.com/page", "https://example.com/page"), + # Trackers in fragment (should not be removed) + ("https://example.com/page#utm_source=google", "https://example.com/page#utm_source=google"), + # Trackers after fragment + ("https://example.com/page?utm_source=google#section-1", "https://example.com/page#section-1"), + # Trackers with empty value + ("https://example.com/page?utm_source=&foo=bar", "https://example.com/page?foo=bar"), + # Trackers with multiple values + ("https://example.com/page?utm_source=google&utm_source=bing&foo=bar", "https://example.com/page?foo=bar"), + # Trackers with encoded values + ("https://example.com/page?utm_source=google%20ads&foo=bar", "https://example.com/page?foo=bar"), + # Unrelated param with similar name + ("https://example.com/page?utm_sourc=keepme&foo=bar", "https://example.com/page?utm_sourc=keepme&foo=bar"), + ], +) +def test_clean_removes_trackers(input_url, expected_url): + assert clean(input_url) == expected_url From e567bba6f919069b7cfb26fe2b4398b01b05a4a0 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 11 Jun 2025 13:37:03 +0100 Subject: [PATCH 070/107] improves docs for how-to and migrations --- ..._how_to.md => 01_authentication_how_to.md} | 0 .../{gsheets_setup.md => 02_gsheets_setup.md} | 0 .../how_to/{logging.md => 03_logging.md} | 0 ..._server.md => 04_run_instagrapi_server.md} | 0 ...1_to_1_1_0.md => 05_upgrading_to_1_1_0.md} | 28 +++++++++++++------ ...nfig_format.md => 06_new_config_format.md} | 0 .../modules/generic_extractor/twitter.py | 3 +- 7 files changed, 20 insertions(+), 11 deletions(-) rename docs/source/how_to/{authentication_how_to.md => 01_authentication_how_to.md} (100%) rename docs/source/how_to/{gsheets_setup.md => 02_gsheets_setup.md} (100%) rename docs/source/how_to/{logging.md => 03_logging.md} (100%) rename docs/source/how_to/{run_instagrapi_server.md => 04_run_instagrapi_server.md} (100%) rename docs/source/how_to/{upgrading_1_0_1_to_1_1_0.md => 05_upgrading_to_1_1_0.md} (61%) rename docs/source/how_to/{new_config_format.md => 06_new_config_format.md} (100%) diff --git a/docs/source/how_to/authentication_how_to.md b/docs/source/how_to/01_authentication_how_to.md similarity index 100% rename from docs/source/how_to/authentication_how_to.md rename to docs/source/how_to/01_authentication_how_to.md diff --git a/docs/source/how_to/gsheets_setup.md b/docs/source/how_to/02_gsheets_setup.md similarity index 100% rename from docs/source/how_to/gsheets_setup.md rename to docs/source/how_to/02_gsheets_setup.md diff --git a/docs/source/how_to/logging.md b/docs/source/how_to/03_logging.md similarity index 100% rename from docs/source/how_to/logging.md rename to docs/source/how_to/03_logging.md diff --git a/docs/source/how_to/run_instagrapi_server.md b/docs/source/how_to/04_run_instagrapi_server.md similarity index 100% rename from docs/source/how_to/run_instagrapi_server.md rename to docs/source/how_to/04_run_instagrapi_server.md diff --git a/docs/source/how_to/upgrading_1_0_1_to_1_1_0.md b/docs/source/how_to/05_upgrading_to_1_1_0.md similarity index 61% rename from docs/source/how_to/upgrading_1_0_1_to_1_1_0.md rename to docs/source/how_to/05_upgrading_to_1_1_0.md index 81e00e2..57bc253 100644 --- a/docs/source/how_to/upgrading_1_0_1_to_1_1_0.md +++ b/docs/source/how_to/05_upgrading_to_1_1_0.md @@ -15,19 +15,29 @@ We have dropped the `vk_extractor` because of problems in a project we relied on Module 'vk_extractor' not found. Are you sure it's installed/exists? ``` +## Dropping `screenshot_enricher` module +We have dropped the `screenshot_enricher` module because a new `antibot_extractor_enricher` (see below) module replaces its functionality more robustly and with less dependency hassle on geckodriver/firefox. You will need to remove it from your configuration file, otherwise you will see an error like: + +```{code} console +Module 'screenshot_enricher' not found. Are you sure it's installed/exists? +``` + + ## New `antibot_extractor_enricher` module and VkDropin -We have added a new `antibot_extractor_enricher` module that uses a computer-controlled browser to extract content from websites that use anti-bot measures. You can add it to your configuration file like this: +We have added a new [`antibot_extractor_enricher`](../modules/autogen/extractor/antibot_extractor_enricher.md) module that uses a computer-controlled browser to extract content from websites that use anti-bot measures. You can add it to your configuration file like this: ```{code} yaml steps: - extractors: - - antibot_extractor_enricher + extractors: + - antibot_extractor_enricher - # or alternatively, if you want to use it as an enricher: - enrichers: - - antibot_extractor_enricher + # or alternatively, if you want to use it as an enricher: + enrichers: + - antibot_extractor_enricher ``` +It will take a full page screenshot, a PDF capture, extract HTML source code, and any other relevant media. + It comes with Dropins that we will be adding and maintaining. > Dropin: A module with site-specific behaviours that is loaded automatically. You don't need to add them to your configuration steps for them to run. Sometimes they need `authentication` configurations though. @@ -36,9 +46,9 @@ One such Dropin is the VkDropin which uses this automated browser to access VKon ```{code} yaml authentication: - vk: - username: your_username - password: your_password + vk.com: + username: your_username + password: your_password ``` See all available Dropins in [the source code](https://github.com/bellingcat/auto-archiver/tree/main/src/auto_archiver/modules/antibot_extractor_enricher/dropins). Usually each Dropin needs its own authentication settings, similarly to the VkDropin. \ No newline at end of file diff --git a/docs/source/how_to/new_config_format.md b/docs/source/how_to/06_new_config_format.md similarity index 100% rename from docs/source/how_to/new_config_format.md rename to docs/source/how_to/06_new_config_format.md diff --git a/src/auto_archiver/modules/generic_extractor/twitter.py b/src/auto_archiver/modules/generic_extractor/twitter.py index 189a7e6..9006e57 100644 --- a/src/auto_archiver/modules/generic_extractor/twitter.py +++ b/src/auto_archiver/modules/generic_extractor/twitter.py @@ -7,8 +7,7 @@ from slugify import slugify from auto_archiver.core.metadata import Metadata, Media from auto_archiver.utils import url as UrlUtil, get_datetime_from_str from auto_archiver.core.extractor import Extractor - -from .dropin import GenericDropin, InfoExtractor +from auto_archiver.modules.generic_extractor.dropin import GenericDropin, InfoExtractor class Twitter(GenericDropin): From d60d02c16ebfded91c9b6d88652de77c1227b1d1 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 11 Jun 2025 16:50:31 +0100 Subject: [PATCH 071/107] improves download_from_url --- src/auto_archiver/core/extractor.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/auto_archiver/core/extractor.py b/src/auto_archiver/core/extractor.py index ca3359d..5dca928 100644 --- a/src/auto_archiver/core/extractor.py +++ b/src/auto_archiver/core/extractor.py @@ -77,6 +77,8 @@ class Extractor(BaseModule): downloads a URL to provided filename, or inferred from URL, returns local filename Warning: if try_best_quality is True, it will return a tuple of (filename, best_quality_url) if the download was successful. """ + if any(url.startswith(x) for x in ["blob:", "data:"]): + return None, url if try_best_quality else None if try_best_quality: with suppress(Exception): @@ -116,6 +118,8 @@ class Extractor(BaseModule): except requests.RequestException as e: logger.warning(f"Failed to fetch the Media URL: {str(e)[:250]}") + if try_best_quality: + return None, url @abstractmethod def download(self, item: Metadata) -> Metadata | False: From b60469767ace97d11c7b5c940779bbd57ecbeb8b Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 11 Jun 2025 16:51:22 +0100 Subject: [PATCH 072/107] more flexibility to antibot dropins media finding process --- .../antibot_extractor_enricher.py | 13 +++++------ .../antibot_extractor_enricher/dropin.py | 22 ++++++++++++++++++- .../dropins/default.py | 4 ---- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py index 1982389..04e4702 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/antibot_extractor_enricher.py @@ -116,13 +116,13 @@ class AntibotExtractorEnricher(Extractor, Enricher): self._enrich_download_media( sb, to_enrich, - css_selector=dropin.images_selectors(), + js_css_selector=dropin.js_for_image_css_selectors(), max_media=self.max_download_images - downloaded_images, ) self._enrich_download_media( sb, to_enrich, - css_selector=dropin.video_selectors(), + js_css_selector=dropin.js_for_video_css_selectors(), max_media=self.max_download_videos - downloaded_videos, ) logger.info(f"ANTIBOT completed for {url_sample}") @@ -266,7 +266,7 @@ class AntibotExtractorEnricher(Extractor, Enricher): to_enrich.add_media(Media(filename=pdf_filename), id="pdf") @logger.catch - def _enrich_download_media(self, sb: SB, to_enrich: Metadata, css_selector: str, max_media: int): + def _enrich_download_media(self, sb: SB, to_enrich: Metadata, js_css_selector: str, max_media: int): """ Downloads media from the page and adds them to the Metadata object. This method is called by the enrich method. @@ -276,11 +276,8 @@ class AntibotExtractorEnricher(Extractor, Enricher): url = to_enrich.get_url() all_urls = set() - sources = sb.execute_script(f""" - return Array.from(document.querySelectorAll("{css_selector}")) - .map(el => el.src || el.href) - .filter(Boolean); - """) + sources = sb.execute_script(js_css_selector) + # js_for_css_selectors for src in sources: if len(all_urls) >= max_media: logger.debug(f"Reached max download limit of {max_media} images/videos.") diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py index 15c2e28..2e8c4f6 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py @@ -53,6 +53,26 @@ class Dropin: """ return "video, source" + def js_for_image_css_selectors(self) -> str: + """ + A configurable JS script that receives a css selector from the dropin itself and returns an array of Image elements according to the selection. + + You can overwrite this instead of `images_selector` for more control over scraped images. + """ + return f""" + return Array.from(document.querySelectorAll("{self.images_selectors()}")).map(el => el.src || el.href).filter(Boolean); + """ + + def js_for_video_css_selectors(self) -> str: + """ + A configurable JS script that receives a css selector from the dropin itself and returns an array of Video elements according to the selection. + + You can overwrite this instead of `video_selector` for more control over scraped videos. + """ + return f""" + return Array.from(document.querySelectorAll("{self.video_selectors()}")).map(el => el.src || el.href).filter(Boolean); + """ + def open_page(self, url) -> bool: """ Make sure the page is opened, even if it requires authentication, captcha solving, etc. @@ -66,7 +86,7 @@ class Dropin: Extract image and/or video data from the currently open post with SeleniumBase. Media is added to the `to_enrich` Metadata object. :return: A tuple (number of Images added, number of Videos added). """ - raise NotImplementedError("This method should be implemented in the subclass") + return 0, 0 def _get_username_password(self, site) -> tuple[str, str]: """ diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/default.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/default.py index c5c865a..72ec3f0 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/default.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/default.py @@ -1,4 +1,3 @@ -from auto_archiver.core.metadata import Metadata from auto_archiver.modules.antibot_extractor_enricher.dropin import Dropin @@ -13,6 +12,3 @@ class DefaultDropin(Dropin): def open_page(self, url) -> bool: return True - - def add_extra_media(self, to_enrich: Metadata) -> tuple[int, int]: - return 0, 0 From cd19181d8f6e8f69f09e4990c9a7a9f871ee3785 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 11 Jun 2025 16:51:42 +0100 Subject: [PATCH 073/107] minor improvements --- .gitignore | 3 ++- src/auto_archiver/utils/url.py | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2c579fa..d14e3bb 100644 --- a/.gitignore +++ b/.gitignore @@ -38,4 +38,5 @@ docs/source/modules/autogen/ scripts/settings_page.html scripts/settings/src/schema.json .vite -downloaded_files \ No newline at end of file +downloaded_files +latest_logs \ No newline at end of file diff --git a/src/auto_archiver/utils/url.py b/src/auto_archiver/utils/url.py index a44a91d..79438bc 100644 --- a/src/auto_archiver/utils/url.py +++ b/src/auto_archiver/utils/url.py @@ -113,6 +113,8 @@ def is_relevant_url(url: str) -> bool: # reddit ("styles.redditmedia.com",), # opinionated but excludes may irrelevant images like avatars and banners ("emoji.redditmedia.com",), + # linkedin + ("static.licdn.com",), ] # TODO: make these globally configurable From 2adcf231f79b98882d5365e9c4eb6cdd7f0af2ea Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 11 Jun 2025 16:51:52 +0100 Subject: [PATCH 074/107] new LinkedIn Dropin for Antibot --- .../dropins/linkedin.py | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/auto_archiver/modules/antibot_extractor_enricher/dropins/linkedin.py diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/linkedin.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/linkedin.py new file mode 100644 index 0000000..3917af9 --- /dev/null +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/linkedin.py @@ -0,0 +1,59 @@ +from loguru import logger +from auto_archiver.modules.antibot_extractor_enricher.dropin import Dropin + + +class LinkedinDropin(Dropin): + """ + A class to handle LinkedIn drop-in functionality for the antibot extractor enricher module. + """ + + notifications_css_selector = 'a[href*="linkedin.com/notifications"]' + + @staticmethod + def suitable(url: str) -> bool: + return "linkedin.com" in url + + def js_for_image_css_selectors(self) -> str: + get_all_css = "main img:not([src*='profile-displayphoto']):not([src*='profile-framedphoto'])" + get_first_css = ( + "main img[src*='profile-framedphoto'], main img[src*='profile-displayphoto'], main img[src*='company-logo']" + ) + + return f""" + const all = Array.from(document.querySelectorAll("{get_all_css}")).map(el => el.src || el.href).filter(Boolean); + const profile = document.querySelector("{get_first_css}"); + return all.concat(profile?.src || profile?.href || []).filter(Boolean); + """ + + @staticmethod + def video_selectors() -> str: + # usually videos are from blob: but running the generic extractor should handle that + return "main video" + + def open_page(self, url) -> bool: + if not self.sb.is_element_present(self.notifications_css_selector): + self._login() + if url != self.sb.get_current_url(): + self.sb.open(url) + return True + + @logger.catch + def _login(self) -> bool: + if self.sb.is_text_visible("Sign in to view more content"): + self.sb.click_link_text("Sign in", timeout=2) + self.sb.wait_for_ready_state_complete() + else: + self.sb.open("https://www.linkedin.com/login") + self.sb.wait_for_ready_state_complete() + + username, password = self._get_username_password("linkedin.com") + logger.debug("LinkedinDropin Logging in to Linkedin with username: {}", username) + self.sb.type("#username", username) + self.sb.type("#password", password) + self.sb.click_if_visible("#password-visibility-toggle", timeout=0.5) + self.sb.click("button[type='submit']") + self.sb.wait_for_ready_state_complete() + # TODO: on suspicious login, LinkedIn may require an email verification code + + if not self.sb.is_element_present(self.notifications_css_selector): + self.sb.click_if_visible('button[aria-label="Dismiss"]', timeout=0.5) From f5be7a50c15240f4549bb599165e98d1cf548780 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 11 Jun 2025 16:52:03 +0100 Subject: [PATCH 075/107] Testing Linkedin Dropin for Antibot --- tests/.env.test.example | 6 +++- .../test_antibot_extractor_enricher.py | 28 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/tests/.env.test.example b/tests/.env.test.example index 2e058ab..367d3f5 100644 --- a/tests/.env.test.example +++ b/tests/.env.test.example @@ -1,6 +1,10 @@ -# reddit test credentials +# ANTIBOT reddit test credentials REDDIT_TEST_USERNAME="" REDDIT_TEST_PASSWORD="" +# ANTIBOT linkedin test credentials +LINKEDIN_TEST_USERNAME="" +LINKEDIN_TEST_PASSWORD="" + # twitter test credentials TWITTER_BEARER_TOKEN="TEST_KEY" \ No newline at end of file diff --git a/tests/extractors/test_antibot_extractor_enricher.py b/tests/extractors/test_antibot_extractor_enricher.py index 642d0ec..516357e 100644 --- a/tests/extractors/test_antibot_extractor_enricher.py +++ b/tests/extractors/test_antibot_extractor_enricher.py @@ -41,7 +41,11 @@ class TestAntibotExtractorEnricher(TestExtractorBase): "reddit.com": { "username": os.environ.get("REDDIT_TEST_USERNAME"), "password": os.environ.get("REDDIT_TEST_PASSWORD"), - } + }, + "linkedin.com": { + "username": os.environ.get("LINKEDIN_TEST_USERNAME"), + "password": os.environ.get("LINKEDIN_TEST_PASSWORD"), + }, }, } @@ -148,6 +152,28 @@ class TestAntibotExtractorEnricher(TestExtractorBase): ): self.test_download_pages_with_media(setup_module, make_item, url, in_title, in_text, image_count, video_count) + @pytest.mark.skipif( + not os.environ.get("REDDIT_TEST_USERNAME") or not os.environ.get("REDDIT_TEST_PASSWORD"), + reason="No Reddit test credentials provided", + ) + @pytest.mark.download + @pytest.mark.parametrize( + "url,in_title,in_text,image_count,video_count", + [ + ( + "https://www.linkedin.com/posts/bellingcat_live-podcast-bellingcat-activity-7331725631799398400-xocM/", + "Post", + "It takes time to go from hunch to reporting...", + 2, + 0, + ), + ], + ) + def test_linkedin_download_with_login( + self, setup_module, make_item, url, in_title, in_text, image_count, video_count + ): + self.test_download_pages_with_media(setup_module, make_item, url, in_title, in_text, image_count, video_count) + @pytest.mark.download @pytest.mark.parametrize( "url,in_html", From aaa9ead39d267ae07ce4bb9e1c3f4e1479e72805 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 11 Jun 2025 17:58:53 +0100 Subject: [PATCH 076/107] adds documentation for dropins --- docs/scripts/scripts.py | 22 ++++++++++++++++++- .../__manifest__.py | 9 ++++++-- .../antibot_extractor_enricher/dropin.py | 14 ++++++++++++ .../dropins/linkedin.py | 15 +++++++++++++ .../dropins/reddit.py | 14 ++++++++++++ .../antibot_extractor_enricher/dropins/vk.py | 16 +++++++++++++- 6 files changed, 86 insertions(+), 4 deletions(-) diff --git a/docs/scripts/scripts.py b/docs/scripts/scripts.py index bfddd29..f9cb13d 100644 --- a/docs/scripts/scripts.py +++ b/docs/scripts/scripts.py @@ -47,7 +47,6 @@ def generate_module_docs(): for module in sorted(ModuleFactory().available_modules(), key=lambda x: (x.requires_setup, x.name)): # generate the markdown file from the __manifest__.py file. - manifest = module.manifest for type in manifest["type"]: modules_by_type.setdefault(type, []).append(module) @@ -64,6 +63,27 @@ def generate_module_docs(): """ steps_str = "\n".join(f" {t}s:\n - {module.name}" for t in manifest["type"]) + if manifest.get("autodoc_dropins"): + loaded_module = module.load({}) + dropins = loaded_module.load_dropins() + dropin_str = "\n##### Available Dropins\n" + for dropin in dropins: + if not (ddoc := dropin.documentation()): + continue + dropin_str += f"\n###### {ddoc.get('name', dropin.__name__)}\n\n" + dropin_str += f"{ddoc.get('description')}\n\n" + if ddoc.get("site"): + dropin_str += f"**Site**: {ddoc['site']}\n\n" + if dauth := ddoc.get("authentication"): + dropin_str += "**YAML configuration**:\n" + dropin_auth_yaml = "authentication:\n...\n" + for site, creds in dauth.items(): + dropin_auth_yaml += f" {site}:\n" + for k, v in creds.items(): + dropin_auth_yaml += f' {k}: "{v}"\n' + dropin_str += f"```{{code}} yaml\n{dropin_auth_yaml}...\n```\n" + readme_str += dropin_str + if not manifest["configs"]: config_string = f"# No configuration options for {module.name}.*\n" else: diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py index e2bcad9..f08547b 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/__manifest__.py @@ -31,11 +31,12 @@ "help": "proxy to use for the webdriver, Format: 'SERVER:PORT' or 'USER:PASS@SERVER:PORT'", }, }, + "autodoc_dropins": True, "description": """ Uses a browser controlled by SeleniumBase to capture HTML, media, and screenshots/PDFs of a web page, by bypassing anti-bot measures like Cloudflare's Turnstile or Google Recaptcha. - Still in trial development, please report any issues or suggestions via GitHub Issues. - + > ⚠️ Still in trial development, please report any issues or suggestions via [GitHub Issues](https://github.com/bellingcat/auto-archiver/issues). + ### Features - Extracts the HTML source code of the page. - Takes full-page screenshots of web pages. @@ -44,5 +45,9 @@ ### Notes - Using a proxy affects Cloudflare Turnstile captcha handling, so it is recommended to use a proxy only if necessary. + + ### Dropins + This module uses sub-modules called Dropins for specific sites that allow it to handle anti-bot measures and custom Login flows. You don't need to include the dropins in your configuration, but you do need to add authentication credentials if you want to overcome login walls on those sites, see detailed instructions for each Dropin below. + """, } diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py index 2e8c4f6..d4b255d 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropin.py @@ -1,4 +1,5 @@ import os +from typing import Mapping from loguru import logger from seleniumbase import SB import yt_dlp @@ -13,6 +14,19 @@ class Dropin: This class is designed to be a base class for drop-ins that can handle specific websites. """ + @staticmethod + def documentation() -> Mapping[str, str]: + """ + Each Dropin should auto-document itself with this method. + Return dictionary can include: + - 'name': A string representing the name of the dropin. + - 'description': A string describing the functionality of the dropin. + - 'site': A string representing the site this dropin is for. + - 'authentication': A dictionary with authentication example for the site. + + """ + return {} + def __init__(self, sb: SB, extractor: Extractor): """ Initialize the Dropin with the given SeleniumBase instance. diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/linkedin.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/linkedin.py index 3917af9..336b630 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/linkedin.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/linkedin.py @@ -1,3 +1,4 @@ +from typing import Mapping from loguru import logger from auto_archiver.modules.antibot_extractor_enricher.dropin import Dropin @@ -7,6 +8,20 @@ class LinkedinDropin(Dropin): A class to handle LinkedIn drop-in functionality for the antibot extractor enricher module. """ + @staticmethod + def documentation() -> Mapping[str, str]: + return { + "name": "Linkedin Dropin", + "description": "Handles LinkedIn pages/posts and requires authentication to access most content but will still be useful without it. The first time you login to a new IP, LinkedIn may require an email verification code, you can do a manual login first and then it won't ask for it again.", + "site": "linkedin.com", + "authentication": { + "linkedin.com": { + "username": "email address or phone number", + "password": "password", + } + }, + } + notifications_css_selector = 'a[href*="linkedin.com/notifications"]' @staticmethod diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py index 78bc510..3f699b6 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/reddit.py @@ -1,4 +1,5 @@ from contextlib import suppress +from typing import Mapping from auto_archiver.core.metadata import Metadata from auto_archiver.modules.antibot_extractor_enricher.dropin import Dropin @@ -10,6 +11,19 @@ class RedditDropin(Dropin): A class to handle Reddit drop-in functionality for the antibot extractor enricher module. """ + def documentation() -> Mapping[str, str]: + return { + "name": "Reddit Dropin", + "description": "Handles Reddit posts and works without authentication until Reddit flags your IP, so authentication is advised.", + "site": "reddit.com", + "authentication": { + "reddit.com": { + "username": "email address or username", + "password": "password", + } + }, + } + @staticmethod def suitable(url: str) -> bool: return "reddit.com" in url diff --git a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py index 6888727..3f92eda 100644 --- a/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py +++ b/src/auto_archiver/modules/antibot_extractor_enricher/dropins/vk.py @@ -1,4 +1,5 @@ import re +from typing import Mapping from auto_archiver.core.metadata import Metadata from auto_archiver.modules.antibot_extractor_enricher.dropin import Dropin @@ -16,6 +17,19 @@ class VkDropin(Dropin): CLIP_PATTERN = re.compile(r"(clip.{0,1}\d+_\d+)") PHOTO_PATTERN = re.compile(r"(photo.{0,1}\d+_\d+)") + def documentation() -> Mapping[str, str]: + return { + "name": "VKontakte Dropin", + "description": "Handles VKontakte posts and works without authentication for some content.", + "site": "vk.com", + "authentication": { + "vk.com": { + "username": "phone number with country code", + "password": "password", + } + }, + } + @staticmethod def suitable(url: str) -> bool: return "vk.com" in url @@ -39,7 +53,7 @@ class VkDropin(Dropin): @logger.catch def _login(self) -> bool: - # TODO: test method + # TODO: test method, because current tests work without a login self.sb.open("https://vk.com") self.sb.wait_for_ready_state_complete() if "/feed" in self.sb.get_current_url(): From d7a48e465be2d2ea4bb2b91a091d1af49d98a4b9 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 11 Jun 2025 18:04:49 +0100 Subject: [PATCH 077/107] fix copypasta --- tests/extractors/test_antibot_extractor_enricher.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/extractors/test_antibot_extractor_enricher.py b/tests/extractors/test_antibot_extractor_enricher.py index 516357e..a8a51dd 100644 --- a/tests/extractors/test_antibot_extractor_enricher.py +++ b/tests/extractors/test_antibot_extractor_enricher.py @@ -153,8 +153,8 @@ class TestAntibotExtractorEnricher(TestExtractorBase): self.test_download_pages_with_media(setup_module, make_item, url, in_title, in_text, image_count, video_count) @pytest.mark.skipif( - not os.environ.get("REDDIT_TEST_USERNAME") or not os.environ.get("REDDIT_TEST_PASSWORD"), - reason="No Reddit test credentials provided", + not os.environ.get("LINKEDIN_TEST_USERNAME") or not os.environ.get("LINKEDIN_TEST_PASSWORD"), + reason="No LinkedIn test credentials provided", ) @pytest.mark.download @pytest.mark.parametrize( From dfb361e3a054ec8ea21e4c94cddd09a7073d64bf Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 11 Jun 2025 19:55:54 +0100 Subject: [PATCH 078/107] reset generic_extractor description in result --- .../modules/generic_extractor/generic_extractor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auto_archiver/modules/generic_extractor/generic_extractor.py b/src/auto_archiver/modules/generic_extractor/generic_extractor.py index 8838528..6107099 100644 --- a/src/auto_archiver/modules/generic_extractor/generic_extractor.py +++ b/src/auto_archiver/modules/generic_extractor/generic_extractor.py @@ -306,7 +306,7 @@ class GenericExtractor(Extractor): result.set_url(url) if "description" in video_data and not result.get("content"): - result.set_content(video_data.pop("description")) + result.set_content(video_data.get("description")) # extract comments if enabled if self.comments and video_data.get("comments", []) is not None: result.set( From cd6a2b6031e57de98ae3b49e0a36425c7974ad82 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Wed, 11 Jun 2025 20:05:35 +0100 Subject: [PATCH 079/107] generic_extractor download tests adaptations --- tests/.env.test.example | 5 ++++- tests/extractors/test_generic_extractor.py | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/.env.test.example b/tests/.env.test.example index 367d3f5..1f6f45f 100644 --- a/tests/.env.test.example +++ b/tests/.env.test.example @@ -7,4 +7,7 @@ LINKEDIN_TEST_USERNAME="" LINKEDIN_TEST_PASSWORD="" # twitter test credentials -TWITTER_BEARER_TOKEN="TEST_KEY" \ No newline at end of file +TWITTER_BEARER_TOKEN="TEST_KEY" + +# some geo/VPN IPs are blocked by truth social, disable if you have issues +TEST_TRUTH_SOCIAL="true" \ No newline at end of file diff --git a/tests/extractors/test_generic_extractor.py b/tests/extractors/test_generic_extractor.py index de5470b..fe3baf5 100644 --- a/tests/extractors/test_generic_extractor.py +++ b/tests/extractors/test_generic_extractor.py @@ -10,6 +10,7 @@ from auto_archiver.modules.generic_extractor.generic_extractor import GenericExt from .test_extractor_base import TestExtractorBase CI = os.getenv("GITHUB_ACTIONS", "") == "true" +TEST_TRUTH_SOCIAL = os.getenv("TEST_TRUTH_SOCIAL", "") == "true" class TestGenericExtractor(TestExtractorBase): @@ -149,6 +150,7 @@ class TestGenericExtractor(TestExtractorBase): result = self.extractor.download(item) assert result is not False + @pytest.mark.skipif(not TEST_TRUTH_SOCIAL, reason="Truth social download tests disabled in environment variables.") @pytest.mark.skipif(CI, reason="Truth social blocks GH actions.") @pytest.mark.download def test_truthsocial_download_video(self, make_item): @@ -157,6 +159,7 @@ class TestGenericExtractor(TestExtractorBase): assert len(result.media) == 1 assert result is not False + @pytest.mark.skipif(not TEST_TRUTH_SOCIAL, reason="Truth social download tests disabled in environment variables.") @pytest.mark.skipif(CI, reason="Truth social blocks GH actions.") @pytest.mark.download def test_truthsocial_download_no_media(self, make_item): @@ -164,6 +167,7 @@ class TestGenericExtractor(TestExtractorBase): result = self.extractor.download(item) assert result is not False + @pytest.mark.skipif(not TEST_TRUTH_SOCIAL, reason="Truth social download tests disabled in environment variables.") @pytest.mark.skipif(CI, reason="Truth social blocks GH actions.") @pytest.mark.download def test_truthsocial_download_poll(self, make_item): @@ -171,6 +175,7 @@ class TestGenericExtractor(TestExtractorBase): result = self.extractor.download(item) assert result is not False + @pytest.mark.skipif(not TEST_TRUTH_SOCIAL, reason="Truth social download tests disabled in environment variables.") @pytest.mark.skipif(CI, reason="Truth social blocks GH actions.") @pytest.mark.download def test_truthsocial_download_single_image(self, make_item): @@ -179,6 +184,7 @@ class TestGenericExtractor(TestExtractorBase): assert len(result.media) == 1 assert result is not False + @pytest.mark.skipif(not TEST_TRUTH_SOCIAL, reason="Truth social download tests disabled in environment variables.") @pytest.mark.skipif(CI, reason="Truth social blocks GH actions.") @pytest.mark.download def test_truthsocial_download_multiple_images(self, make_item): @@ -276,6 +282,7 @@ class TestGenericExtractor(TestExtractorBase): assert "Bellingchat Premium is with Kolina Koltai" in post.get_title() + @pytest.mark.skip(reason="Newer yt-dlp versions don't support image download.") @pytest.mark.download def test_download_facebook_image(self, make_item): post = self.extractor.download( From 529d8b60bf141afa78898a7304e33dd794f39bd5 Mon Sep 17 00:00:00 2001 From: Dave Mateer Date: Mon, 16 Jun 2025 14:37:21 +0100 Subject: [PATCH 080/107] Gitgnore to include launch.json and installtion docs to include build script. --- .gitignore | 4 +- docs/source/installation/installation.md | 266 +++++++++++++++++++++++ 2 files changed, 269 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d14e3bb..3906b23 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,6 @@ scripts/settings_page.html scripts/settings/src/schema.json .vite downloaded_files -latest_logs \ No newline at end of file +latest_logs +# for launch.json +.vscode \ No newline at end of file diff --git a/docs/source/installation/installation.md b/docs/source/installation/installation.md index 5f68dad..13c3131 100644 --- a/docs/source/installation/installation.md +++ b/docs/source/installation/installation.md @@ -55,6 +55,272 @@ If using the local installation method, you will also need to install the follow 3. (optional) [fonts-noto](https://fonts.google.com/noto) to deal with multiple unicode characters during selenium screenshots: `sudo apt install fonts-noto -y`. 4. [Browsertrix Crawler docker image](https://hub.docker.com/r/webrecorder/browsertrix-crawler) for the WACZ enricher/archiver +### Bash script for Ubuntu Server install + +This acts as a handy guide on all requirements. This is built and tested on the 29th of May 2025 on Ubuntu Server 24.04.2 LTS (which is the current latest LTS) + +```bash +#!/bin/sh + +# I usually run steps manually as logged in with the user: dave +# which the application runs under which makes debugging easier + +cd ~ + +# Clone only my latest branch +git clone -b v1-test --single-branch https://github.com/djhmateer/auto-archiver + +mkdir ~/auto-archiver/secrets +sudo chown -R dave ~/auto-archiver + +sudo apt update -y +sudo apt upgrade -y + +## Python 3.12.3 comes with Ubuntu 24.04.2 + +# Poetry install 2.1.3 on 2nd June 25 +curl -sSL https://install.python-poetry.org | python3 - + +# had to restart shell here.. neither of below worked +# source ~/.bashrc +# exec bash + +cd auto-archiver + +# C++ compiler so pdqhash will install next +sudo apt install build-essential python3-dev + +poetry install + +# FFMpeg +# 6.1.1-3ubuntu5 on 2nd June 25 +sudo apt install ffmpeg -y + +## Firefox +# 139.0+build2-0ubuntu0.24.04.1~mt1 on 2nd Jun 25 +# 16th Jun - don't need anymore as using Chrome in antibot +# cd ~ +# sudo add-apt-repository ppa:mozillateam/ppa -y + +# echo ' +# Package: * +# Pin: release o=LP-PPA-mozillateam +# Pin-Priority: 1001 +# ' | sudo tee /etc/apt/preferences.d/mozilla-firefox + +# echo 'Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:${distro_codename}";' | sudo tee /etc/apt/apt.conf.d/51unattended-upgrades-firefox + +# sudo apt install firefox -y + +wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb + +# Chrome +cd ~ +# got problems here - fixed below +# 137.0.7151.103 on 16th Jun 2025 +sudo dpkg -i google-chrome-stable_current_amd64.deb + +# fix dependencies on install above +sudo apt-get install -f + +# had to click a lot on UI to get going. +# to test +# google-chrome + +## Gecko driver +# check version numbers for new ones +# https://github.com/mozilla/geckodriver/releases/ +cd ~ +wget https://github.com/mozilla/geckodriver/releases/download/v0.35.0/geckodriver-v0.35.0-linux64.tar.gz +tar -xvzf geckodriver* +chmod +x geckodriver +sudo mv geckodriver /usr/local/bin/ +rm geckodriver* + +# Fonts +sudo apt install fonts-noto -y + +# Docker +# Add Docker's official GPG key: +sudo apt-get update -y +sudo apt-get install ca-certificates curl -y +sudo install -m 0755 -d /etc/apt/keyrings +sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc +sudo chmod a+r /etc/apt/keyrings/docker.asc + +# Add the repository to Apt sources: +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ + $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +sudo apt-get update -y + +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y + +# add dave user to docker group +sudo usermod -aG docker $USER + +# restart shell +# TODO try: source ~/.bashrc +# exec bash + +docker pull webrecorder/browsertrix-crawler:latest + +# exif +sudo apt install libimage-exiftool-perl -y + + +## CRON run every minute +# the cron job running as user dave will execute the shell script +sudo chmod +x ~/auto-archiver/scripts/cron_1.sh + +# don't want service to run until a reboot otherwise problems with Gecko driver +sudo service cron stop + +# runs the script every minute +# notice put in a # to disable so will have to manually start it. +cat <> run-auto-archive +#*/1 * * * * dave /home/dave/auto-archiver/scripts/cron_1.sh +EOT + +sudo mv run-auto-archive /etc/cron.d +sudo chown root /etc/cron.d/run-auto-archive +sudo chmod 600 /etc/cron.d/run-auto-archive + + +# secrets folder copy +# I run dev from: +# \\wsl.localhost\Ubuntu-24.04\home\dave\code\auto-archiver\secrets\ + +# orchestration.yaml - for aa config +# service_account - for google spreadsheet +# anon.session - for telethon so don't have to type in phone number +# vk_config.v2.json - so don't have to login to vk again +# profile.tar.gz - for wacz to have a logged in profile for facebook, x.com and instagram to get data + + +# Youtube - POT Tokens +# https://github.com/Brainicism/bgutil-ytdlp-pot-provider +docker run --name bgutil-provider --restart unless-stopped -d -p 4416:4416 brainicism/bgutil-ytdlp-pot-provider + + +# test run +cd ~/auto-archiver + +poetry run python src/auto_archiver --config secrets/orchestration-aa-demo-main.yaml + + + + + + +## HERE + +## OLD +sudo pip install pytest-playwright + +# x virtual frame buffer +# for playwright (screenshotter) to run in headed mode +sudo apt install xvfb -y + +sudo playwright install-deps + +sudo apt-get install libvpx7 -y + +TARGET_USER="dave" +sudo -i -u $TARGET_USER bash << EOF +playwright install +EOF + +#sudo apt-get install libgbm1 + +cat <> run-auto-archive +*/2 * * * * dave /home/dave/auto-archiver/infra/cron_pluro.sh +EOT + +sudo mv run-auto-archive /etc/cron.d + +sudo chown root /etc/cron.d/run-auto-archive +sudo chmod 600 /etc/cron.d/run-auto-archive + + +sudo reboot now + + +## DM 16th Oct 2024 +# am using playwright as a general screenshotter +# so need to install the dependencies for that + +sudo pip install pytest-playwright + +sudo apt install xvfb -y + +# playwright install + + + + + + + + +## +## FB Archiver from here down!!!! +## + +# specialised version of the archiver which runs on proxmox currently only +cat <> fb-run-auto-archive +#* * * * * dave /home/dave/auto-archiver/infra/cron_fb.sh +EOT + +# docker +# https://docs.docker.com/engine/install/ubuntu/ +sudo apt-get update -y +sudo apt-get install ca-certificates curl gnupg lsb-release -y + +sudo mkdir -p /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +sudo apt-get update + +sudo chmod a+r /etc/apt/keyrings/docker.gpg +sudo apt-get update + + +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y + +# docker as non sudo https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user +# cron runs as user dave +sudo usermod -aG docker dave + +sudo pip install pytest-playwright + +# x virtual frame buffer +# for playwright (screenshotter) to run in headed mode +sudo apt install xvfb -y + +# **need to run playwright install to download chrome** +# **NOT TESTED** +##sudo playwright install-deps +#sudo apt-get install libgbm1 + + +sudo reboot now + + + + +# MONITORING +# syslog in /var/log/syslog +# cron output is in /home/dave/log.txt + +# sudo service cron restart + + +``` + ## Developer Install From b236f2510d9612428f0a81e3a2dbe71fc628579b Mon Sep 17 00:00:00 2001 From: Dave Mateer Date: Mon, 16 Jun 2025 14:40:40 +0100 Subject: [PATCH 081/107] Updates to installation docs --- docs/source/installation/installation.md | 111 ----------------------- 1 file changed, 111 deletions(-) diff --git a/docs/source/installation/installation.md b/docs/source/installation/installation.md index 13c3131..fff7d26 100644 --- a/docs/source/installation/installation.md +++ b/docs/source/installation/installation.md @@ -208,117 +208,6 @@ docker run --name bgutil-provider --restart unless-stopped -d -p 4416:4416 brain cd ~/auto-archiver poetry run python src/auto_archiver --config secrets/orchestration-aa-demo-main.yaml - - - - - - -## HERE - -## OLD -sudo pip install pytest-playwright - -# x virtual frame buffer -# for playwright (screenshotter) to run in headed mode -sudo apt install xvfb -y - -sudo playwright install-deps - -sudo apt-get install libvpx7 -y - -TARGET_USER="dave" -sudo -i -u $TARGET_USER bash << EOF -playwright install -EOF - -#sudo apt-get install libgbm1 - -cat <> run-auto-archive -*/2 * * * * dave /home/dave/auto-archiver/infra/cron_pluro.sh -EOT - -sudo mv run-auto-archive /etc/cron.d - -sudo chown root /etc/cron.d/run-auto-archive -sudo chmod 600 /etc/cron.d/run-auto-archive - - -sudo reboot now - - -## DM 16th Oct 2024 -# am using playwright as a general screenshotter -# so need to install the dependencies for that - -sudo pip install pytest-playwright - -sudo apt install xvfb -y - -# playwright install - - - - - - - - -## -## FB Archiver from here down!!!! -## - -# specialised version of the archiver which runs on proxmox currently only -cat <> fb-run-auto-archive -#* * * * * dave /home/dave/auto-archiver/infra/cron_fb.sh -EOT - -# docker -# https://docs.docker.com/engine/install/ubuntu/ -sudo apt-get update -y -sudo apt-get install ca-certificates curl gnupg lsb-release -y - -sudo mkdir -p /etc/apt/keyrings -curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg - -echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - -sudo apt-get update - -sudo chmod a+r /etc/apt/keyrings/docker.gpg -sudo apt-get update - - -sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y - -# docker as non sudo https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user -# cron runs as user dave -sudo usermod -aG docker dave - -sudo pip install pytest-playwright - -# x virtual frame buffer -# for playwright (screenshotter) to run in headed mode -sudo apt install xvfb -y - -# **need to run playwright install to download chrome** -# **NOT TESTED** -##sudo playwright install-deps -#sudo apt-get install libgbm1 - - -sudo reboot now - - - - -# MONITORING -# syslog in /var/log/syslog -# cron output is in /home/dave/log.txt - -# sudo service cron restart - - ``` From f07fdbc500b593c7d805c628f3750e8a783cb32d Mon Sep 17 00:00:00 2001 From: Dave Mateer Date: Mon, 16 Jun 2025 14:54:15 +0100 Subject: [PATCH 082/107] Custom local version comment in toml file --- pyproject.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index cdbb86b..2299350 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,6 +4,8 @@ build-backend = "poetry.core.masonry.api" [project] name = "auto-archiver" +# to add a custom version use local versioning eg 1.1.0+dm.1 +# then poetry install version = "1.1.0" description = "Automatically archive links to videos, images, and social media content from Google Sheets (and more)." From f2e80758a7bbac5c253624c610713ef1c61823a2 Mon Sep 17 00:00:00 2001 From: Dave Mateer Date: Mon, 16 Jun 2025 14:59:55 +0100 Subject: [PATCH 083/107] typo on authentication docs. Updated install docs. --- docs/source/installation/authentication.md | 2 +- docs/source/installation/installation.md | 37 ++++++++++++---------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/docs/source/installation/authentication.md b/docs/source/installation/authentication.md index 16e650f..a8b6ff5 100644 --- a/docs/source/installation/authentication.md +++ b/docs/source/installation/authentication.md @@ -34,7 +34,7 @@ You can save your authentication information directly inside your orchestration ```{note} -The Username & Password, and API settings only work with the Generic Extractor. Other modules (like the screenshot enricher) can only use the `cookies` options. Furthermore, many sites can still detect bots and block username/password logins. Twitter/X and YouTube are two prominent ones that block username/password logging. +The Username & Password, and API settings only work with the Generic Extractor. Other modules (like the screenshot enricher) can only use the `cookies` options. Furthermore, many sites can still detect bots and block username/password logins. Twitter/X and YouTube are two prominent ones that block username/password logins. One of the 'Cookies' options is recommended for the most robust archiving, but it still isn't guaranteed to work. ``` diff --git a/docs/source/installation/installation.md b/docs/source/installation/installation.md index fff7d26..38d955b 100644 --- a/docs/source/installation/installation.md +++ b/docs/source/installation/installation.md @@ -55,7 +55,7 @@ If using the local installation method, you will also need to install the follow 3. (optional) [fonts-noto](https://fonts.google.com/noto) to deal with multiple unicode characters during selenium screenshots: `sudo apt install fonts-noto -y`. 4. [Browsertrix Crawler docker image](https://hub.docker.com/r/webrecorder/browsertrix-crawler) for the WACZ enricher/archiver -### Bash script for Ubuntu Server install +### Bash script for Ubuntu 24 Server install This acts as a handy guide on all requirements. This is built and tested on the 29th of May 2025 on Ubuntu Server 24.04.2 LTS (which is the current latest LTS) @@ -66,6 +66,8 @@ This acts as a handy guide on all requirements. This is built and tested on the # which the application runs under which makes debugging easier cd ~ +sudo apt update -y +sudo apt upgrade -y # Clone only my latest branch git clone -b v1-test --single-branch https://github.com/djhmateer/auto-archiver @@ -81,14 +83,13 @@ sudo apt upgrade -y # Poetry install 2.1.3 on 2nd June 25 curl -sSL https://install.python-poetry.org | python3 - -# had to restart shell here.. neither of below worked -# source ~/.bashrc -# exec bash - -cd auto-archiver +# had to restart here.. +sudo reboot # C++ compiler so pdqhash will install next -sudo apt install build-essential python3-dev +sudo apt install build-essential python3-dev -y + +cd auto-archiver poetry install @@ -130,14 +131,13 @@ sudo apt-get install -f ## Gecko driver # check version numbers for new ones # https://github.com/mozilla/geckodriver/releases/ -cd ~ -wget https://github.com/mozilla/geckodriver/releases/download/v0.35.0/geckodriver-v0.35.0-linux64.tar.gz +wget https://github.com/mozilla/geckodriver/releases/download/v0.36.0/geckodriver-v0.36.0-linux64.tar.gz tar -xvzf geckodriver* chmod +x geckodriver sudo mv geckodriver /usr/local/bin/ rm geckodriver* -# Fonts +# Fonts so selenium via firefox can render other languages eg Burmese sudo apt install fonts-noto -y # Docker @@ -160,10 +160,11 @@ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin # add dave user to docker group sudo usermod -aG docker $USER -# restart shell -# TODO try: source ~/.bashrc -# exec bash +# reboot otherwise can't pull images +# https://github.com/webrecorder/browsertrix-crawler +# https://hub.docker.com/r/webrecorder/browsertrix-crawler/tags +# 1.6.2 on 4th Jun 2025 docker pull webrecorder/browsertrix-crawler:latest # exif @@ -172,7 +173,9 @@ sudo apt install libimage-exiftool-perl -y ## CRON run every minute # the cron job running as user dave will execute the shell script -sudo chmod +x ~/auto-archiver/scripts/cron_1.sh +# I have many scripts running from cron_11 upwards. +# patch in the correct number +sudo chmod +x ~/auto-archiver/scripts/cron_15.sh # don't want service to run until a reboot otherwise problems with Gecko driver sudo service cron stop @@ -180,13 +183,15 @@ sudo service cron stop # runs the script every minute # notice put in a # to disable so will have to manually start it. cat <> run-auto-archive -#*/1 * * * * dave /home/dave/auto-archiver/scripts/cron_1.sh +#*/1 * * * * dave /home/dave/auto-archiver/scripts/cron_15.sh EOT sudo mv run-auto-archive /etc/cron.d sudo chown root /etc/cron.d/run-auto-archive sudo chmod 600 /etc/cron.d/run-auto-archive +# Helper alias 'c' to open the above file +echo "alias c='sudo vim /etc/cron.d/run-auto-archive'" >> ~/.bashrc # secrets folder copy # I run dev from: @@ -195,10 +200,8 @@ sudo chmod 600 /etc/cron.d/run-auto-archive # orchestration.yaml - for aa config # service_account - for google spreadsheet # anon.session - for telethon so don't have to type in phone number -# vk_config.v2.json - so don't have to login to vk again # profile.tar.gz - for wacz to have a logged in profile for facebook, x.com and instagram to get data - # Youtube - POT Tokens # https://github.com/Brainicism/bgutil-ytdlp-pot-provider docker run --name bgutil-provider --restart unless-stopped -d -p 4416:4416 brainicism/bgutil-ytdlp-pot-provider From a60d800b31fd0354858375841c492f363cdd0ec6 Mon Sep 17 00:00:00 2001 From: Dave Mateer Date: Mon, 16 Jun 2025 15:07:39 +0100 Subject: [PATCH 084/107] Changed log level for media --- src/auto_archiver/core/media.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/auto_archiver/core/media.py b/src/auto_archiver/core/media.py index 826b920..75fb366 100644 --- a/src/auto_archiver/core/media.py +++ b/src/auto_archiver/core/media.py @@ -116,7 +116,12 @@ class Media: # self.is_video() should be used together with this method try: streams = ffmpeg.probe(self.filename, select_streams="v")["streams"] - logger.warning(f"STREAMS FOR {self.filename} {streams}") + # DM 27th May 2025 + # https://x.com/dave_mateer/status/1524341442738638848 + # shows this warning for the gif file + # Have changed to debug for now to clean up logs + # logger.warning(f"STREAMS FOR {self.filename} {streams}") + logger.debug(f"STREAMS FOR {self.filename} {streams}") return any(s.get("duration_ts", 0) > 0 for s in streams) except Error: return False # ffmpeg errors when reading bad files From ba3f1a52e8b954b05a7c4650daec5f0724f202dc Mon Sep 17 00:00:00 2001 From: Dave Mateer Date: Mon, 16 Jun 2025 16:15:54 +0100 Subject: [PATCH 085/107] Logging each_level_in_separate_file feature --- poetry.lock | 283 ++++++++++++++----------- src/auto_archiver/core/orchestrator.py | 33 ++- 2 files changed, 191 insertions(+), 125 deletions(-) diff --git a/poetry.lock b/poetry.lock index 786ae5f..f641617 100644 --- a/poetry.lock +++ b/poetry.lock @@ -193,18 +193,18 @@ files = [ [[package]] name = "boto3" -version = "1.38.33" +version = "1.38.36" description = "The AWS SDK for Python" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "boto3-1.38.33-py3-none-any.whl", hash = "sha256:25d0717489c658f7ae6c3c7f0f7e1b4d611b30b2f08f0fcef6455ac6864a8768"}, - {file = "boto3-1.38.33.tar.gz", hash = "sha256:6467909c1ae01ff67981f021bb2568592211765ec8a9a1d2c4529191e46c3541"}, + {file = "boto3-1.38.36-py3-none-any.whl", hash = "sha256:34c27d7317cadb62c0e9856e5d5aa0271ef47202d340584831048bc7ac904136"}, + {file = "boto3-1.38.36.tar.gz", hash = "sha256:efe0aaa060f8fedd76e5c942055f051aee0432fc722d79d8830a9fd9db83593e"}, ] [package.dependencies] -botocore = ">=1.38.33,<1.39.0" +botocore = ">=1.38.36,<1.39.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.13.0,<0.14.0" @@ -213,14 +213,14 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.38.33" +version = "1.38.36" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "botocore-1.38.33-py3-none-any.whl", hash = "sha256:ad25233e93dcebe95809b1f9393c1f11a639696327793d166295fb78dd7bc597"}, - {file = "botocore-1.38.33.tar.gz", hash = "sha256:dbe8fea9d0426c644c89ef2018ead886ccbcc22901a02b377b4e65ce1cb69a2b"}, + {file = "botocore-1.38.36-py3-none-any.whl", hash = "sha256:b6a50b853f6d23af9edfed89a59800c6bc1687a947cdd3492879f7d64e002d30"}, + {file = "botocore-1.38.36.tar.gz", hash = "sha256:4a1ced1a4218bdff0ed5b46abb54570d473154ddefafa5d121a8d96e4b76ebc1"}, ] [package.dependencies] @@ -437,14 +437,14 @@ files = [ [[package]] name = "certifi" -version = "2025.4.26" +version = "2025.6.15" description = "Python package for providing Mozilla's CA Bundle." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" groups = ["main", "docs"] files = [ - {file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"}, - {file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"}, + {file = "certifi-2025.6.15-py3-none-any.whl", hash = "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057"}, + {file = "certifi-2025.6.15.tar.gz", hash = "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b"}, ] [[package]] @@ -941,14 +941,14 @@ files = [ [[package]] name = "google-api-core" -version = "2.25.0" +version = "2.25.1" description = "Google API client core library" optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "google_api_core-2.25.0-py3-none-any.whl", hash = "sha256:1db79d1281dcf9f3d10023283299ba38f3dc9f639ec41085968fd23e5bcf512e"}, - {file = "google_api_core-2.25.0.tar.gz", hash = "sha256:9b548e688702f82a34ed8409fb8a6961166f0b7795032f0be8f48308dff4333a"}, + {file = "google_api_core-2.25.1-py3-none-any.whl", hash = "sha256:8a2a56c1fef82987a524371f99f3bd0143702fecc670c72e600c1cda6bf8dbb7"}, + {file = "google_api_core-2.25.1.tar.gz", hash = "sha256:d2aaa0b13c78c61cb3f4282c464c046e45fbd75755683c9c525e6e8f7ed0a5e8"}, ] [package.dependencies] @@ -966,14 +966,14 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.0)"] [[package]] name = "google-api-python-client" -version = "2.171.0" +version = "2.172.0" description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "google_api_python_client-2.171.0-py3-none-any.whl", hash = "sha256:c9c9b76f561e9d9ac14e54a9e2c0842876201d5b96e69e48f967373f0784cbe9"}, - {file = "google_api_python_client-2.171.0.tar.gz", hash = "sha256:057a5c08d28463c6b9eb89746355de5f14b7ed27a65c11fdbf1d06c66bb66b23"}, + {file = "google_api_python_client-2.172.0-py3-none-any.whl", hash = "sha256:9f1b9a268d5dc1228207d246c673d3a09ee211b41a11521d38d9212aeaa43af7"}, + {file = "google_api_python_client-2.172.0.tar.gz", hash = "sha256:dcb3b7e067154b2aa41f1776cf86584a5739c0ac74e6ff46fc665790dca0e6a6"}, ] [package.dependencies] @@ -2164,64 +2164,70 @@ files = [ [[package]] name = "pyobjc-core" -version = "11.0" +version = "11.1" description = "Python<->ObjC Interoperability Module" optional = false python-versions = ">=3.8" groups = ["main"] markers = "platform_system == \"Darwin\"" files = [ - {file = "pyobjc_core-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:10866b3a734d47caf48e456eea0d4815c2c9b21856157db5917b61dee06893a1"}, - {file = "pyobjc_core-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:50675c0bb8696fe960a28466f9baf6943df2928a1fd85625d678fa2f428bd0bd"}, - {file = "pyobjc_core-11.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a03061d4955c62ddd7754224a80cdadfdf17b6b5f60df1d9169a3b1b02923f0b"}, - {file = "pyobjc_core-11.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c338c1deb7ab2e9436d4175d1127da2eeed4a1b564b3d83b9f3ae4844ba97e86"}, - {file = "pyobjc_core-11.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b4e9dc4296110f251a4033ff3f40320b35873ea7f876bd29a1c9705bb5e08c59"}, - {file = "pyobjc_core-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:02406ece449d0f41b31e579e47ca77ced3eb57533df955281bfcecc99da74fba"}, - {file = "pyobjc_core-11.0.tar.gz", hash = "sha256:63bced211cb8a8fb5c8ff46473603da30e51112861bd02c438fbbbc8578d9a70"}, + {file = "pyobjc_core-11.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4c7536f3e94de0a3eae6bb382d75f1219280aa867cdf37beef39d9e7d580173c"}, + {file = "pyobjc_core-11.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ec36680b5c14e2f73d432b03ba7c1457dc6ca70fa59fd7daea1073f2b4157d33"}, + {file = "pyobjc_core-11.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:765b97dea6b87ec4612b3212258024d8496ea23517c95a1c5f0735f96b7fd529"}, + {file = "pyobjc_core-11.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:18986f83998fbd5d3f56d8a8428b2f3e0754fd15cef3ef786ca0d29619024f2c"}, + {file = "pyobjc_core-11.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8849e78cfe6595c4911fbba29683decfb0bf57a350aed8a43316976ba6f659d2"}, + {file = "pyobjc_core-11.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:8cb9ed17a8d84a312a6e8b665dd22393d48336ea1d8277e7ad20c19a38edf731"}, + {file = "pyobjc_core-11.1-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:f2455683e807f8541f0d83fbba0f5d9a46128ab0d5cc83ea208f0bec759b7f96"}, + {file = "pyobjc_core-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4a99e6558b48b8e47c092051e7b3be05df1c8d0617b62f6fa6a316c01902d157"}, + {file = "pyobjc_core-11.1.tar.gz", hash = "sha256:b63d4d90c5df7e762f34739b39cc55bc63dbcf9fb2fb3f2671e528488c7a87fe"}, ] [[package]] name = "pyobjc-framework-cocoa" -version = "11.0" +version = "11.1" description = "Wrappers for the Cocoa frameworks on macOS" optional = false python-versions = ">=3.9" groups = ["main"] markers = "platform_system == \"Darwin\"" files = [ - {file = "pyobjc_framework_Cocoa-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fbc65f260d617d5463c7fb9dbaaffc23c9a4fabfe3b1a50b039b61870b8daefd"}, - {file = "pyobjc_framework_Cocoa-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3ea7be6e6dd801b297440de02d312ba3fa7fd3c322db747ae1cb237e975f5d33"}, - {file = "pyobjc_framework_Cocoa-11.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:280a577b83c68175a28b2b7138d1d2d3111f2b2b66c30e86f81a19c2b02eae71"}, - {file = "pyobjc_framework_Cocoa-11.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:15b2bd977ed340074f930f1330f03d42912d5882b697d78bd06f8ebe263ef92e"}, - {file = "pyobjc_framework_Cocoa-11.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:5750001db544e67f2b66f02067d8f0da96bb2ef71732bde104f01b8628f9d7ea"}, - {file = "pyobjc_framework_Cocoa-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ddff25b0755d59873d186e1e07d6aaddb19d55e3ae890d69ff2d9babf8627657"}, - {file = "pyobjc_framework_cocoa-11.0.tar.gz", hash = "sha256:00346a8cb81ad7b017b32ff7bf596000f9faa905807b1bd234644ebd47f692c5"}, + {file = "pyobjc_framework_cocoa-11.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b27a5bdb3ab6cdeb998443ff3fce194ffae5f518c6a079b832dbafc4426937f9"}, + {file = "pyobjc_framework_cocoa-11.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7b9a9b8ba07f5bf84866399e3de2aa311ed1c34d5d2788a995bdbe82cc36cfa0"}, + {file = "pyobjc_framework_cocoa-11.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:806de56f06dfba8f301a244cce289d54877c36b4b19818e3b53150eb7c2424d0"}, + {file = "pyobjc_framework_cocoa-11.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:54e93e1d9b0fc41c032582a6f0834befe1d418d73893968f3f450281b11603da"}, + {file = "pyobjc_framework_cocoa-11.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:fd5245ee1997d93e78b72703be1289d75d88ff6490af94462b564892e9266350"}, + {file = "pyobjc_framework_cocoa-11.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:aede53a1afc5433e1e7d66568cc52acceeb171b0a6005407a42e8e82580b4fc0"}, + {file = "pyobjc_framework_cocoa-11.1-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:1b5de4e1757bb65689d6dc1f8d8717de9ec8587eb0c4831c134f13aba29f9b71"}, + {file = "pyobjc_framework_cocoa-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bbee71eeb93b1b31ffbac8560b59a0524a8a4b90846a260d2c4f2188f3d4c721"}, + {file = "pyobjc_framework_cocoa-11.1.tar.gz", hash = "sha256:87df76b9b73e7ca699a828ff112564b59251bb9bbe72e610e670a4dc9940d038"}, ] [package.dependencies] -pyobjc-core = ">=11.0" +pyobjc-core = ">=11.1" [[package]] name = "pyobjc-framework-quartz" -version = "11.0" +version = "11.1" description = "Wrappers for the Quartz frameworks on macOS" optional = false python-versions = ">=3.9" groups = ["main"] markers = "platform_system == \"Darwin\"" files = [ - {file = "pyobjc_framework_Quartz-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:da3ab13c9f92361959b41b0ad4cdd41ae872f90a6d8c58a9ed699bc08ab1c45c"}, - {file = "pyobjc_framework_Quartz-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d251696bfd8e8ef72fbc90eb29fec95cb9d1cc409008a183d5cc3246130ae8c2"}, - {file = "pyobjc_framework_Quartz-11.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cb4a9f2d9d580ea15e25e6b270f47681afb5689cafc9e25712445ce715bcd18e"}, - {file = "pyobjc_framework_Quartz-11.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:973b4f9b8ab844574461a038bd5269f425a7368d6e677e3cc81fcc9b27b65498"}, - {file = "pyobjc_framework_Quartz-11.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:66ab58d65348863b8707e63b2ec5cdc54569ee8189d1af90d52f29f5fdf6272c"}, - {file = "pyobjc_framework_Quartz-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1032f63f2a4ee98366764e69c249f1d93813821e17d224cf626cf11fb1801fc4"}, - {file = "pyobjc_framework_quartz-11.0.tar.gz", hash = "sha256:3205bf7795fb9ae34747f701486b3db6dfac71924894d1f372977c4d70c3c619"}, + {file = "pyobjc_framework_quartz-11.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b5ef75c416b0209e25b2eb07a27bd7eedf14a8c6b2f968711969d45ceceb0f84"}, + {file = "pyobjc_framework_quartz-11.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2d501fe95ef15d8acf587cb7dc4ab4be3c5a84e2252017da8dbb7df1bbe7a72a"}, + {file = "pyobjc_framework_quartz-11.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9ac806067541917d6119b98d90390a6944e7d9bd737f5c0a79884202327c9204"}, + {file = "pyobjc_framework_quartz-11.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43a1138280571bbf44df27a7eef519184b5c4183a588598ebaaeb887b9e73e76"}, + {file = "pyobjc_framework_quartz-11.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b23d81c30c564adf6336e00b357f355b35aad10075dd7e837cfd52a9912863e5"}, + {file = "pyobjc_framework_quartz-11.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:07cbda78b4a8fcf3a2d96e047a2ff01f44e3e1820f46f0f4b3b6d77ff6ece07c"}, + {file = "pyobjc_framework_quartz-11.1-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:39d02a3df4b5e3eee1e0da0fb150259476910d2a9aa638ab94153c24317a9561"}, + {file = "pyobjc_framework_quartz-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9b1f451ddb5243d8d6316af55f240a02b0fffbfe165bff325628bf73f3df7f44"}, + {file = "pyobjc_framework_quartz-11.1.tar.gz", hash = "sha256:a57f35ccfc22ad48c87c5932818e583777ff7276605fef6afad0ac0741169f75"}, ] [package.dependencies] -pyobjc-core = ">=11.0" -pyobjc-framework-Cocoa = ">=11.0" +pyobjc-core = ">=11.1" +pyobjc-framework-Cocoa = ">=11.1" [[package]] name = "pyotp" @@ -3113,14 +3119,14 @@ websocket-client = ">=1.8.0,<1.9.0" [[package]] name = "seleniumbase" -version = "4.39.3" +version = "4.39.4" description = "A complete web automation framework for end-to-end testing." optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "seleniumbase-4.39.3-py3-none-any.whl", hash = "sha256:cbb94d7858a9ef3b0b4431a5879150649f4a73029afaa8ecfb7bda113f2565e1"}, - {file = "seleniumbase-4.39.3.tar.gz", hash = "sha256:b32978e685b1e4e2c7859b2dcb377ac14ba99bf748ea428548f9e450257b861b"}, + {file = "seleniumbase-4.39.4-py3-none-any.whl", hash = "sha256:15562b2550ce6f6fdcc524ff9bd87a1d7381a558767245f10ff63982f508c281"}, + {file = "seleniumbase-4.39.4.tar.gz", hash = "sha256:8880869b88fa5a48c649a776488bafa1ca97d786fb8a25f63e6d5b5b5fc47f44"}, ] [package.dependencies] @@ -3186,11 +3192,11 @@ wsproto = "1.2.0" [package.extras] allure = ["allure-behave (>=2.13.5)", "allure-pytest (>=2.13.5)", "allure-python-commons (>=2.13.5)"] -coverage = ["coverage (>=7.6.1) ; python_version < \"3.9\"", "coverage (>=7.8.2) ; python_version >= \"3.9\"", "pytest-cov (>=5.0.0) ; python_version < \"3.9\"", "pytest-cov (>=6.1.1) ; python_version >= \"3.9\""] +coverage = ["coverage (>=7.6.1) ; python_version < \"3.9\"", "coverage (>=7.9.0) ; python_version >= \"3.9\"", "pytest-cov (>=5.0.0) ; python_version < \"3.9\"", "pytest-cov (>=6.2.1) ; python_version >= \"3.9\""] flake8 = ["flake8 (==5.0.4) ; python_version < \"3.9\"", "flake8 (==7.2.0) ; python_version >= \"3.9\"", "mccabe (==0.7.0)", "pycodestyle (==2.13.0) ; python_version >= \"3.9\"", "pycodestyle (==2.9.1) ; python_version < \"3.9\"", "pyflakes (==2.5.0) ; python_version < \"3.9\"", "pyflakes (==3.3.2) ; python_version >= \"3.9\""] ipdb = ["ipdb (==0.13.13)", "ipython (==7.34.0)"] mss = ["mss (==10.0.0) ; python_version >= \"3.9\"", "mss (==9.0.2) ; python_version < \"3.9\""] -pdfminer = ["cffi (==1.17.1)", "cryptography (==39.0.2) ; python_version < \"3.9\"", "cryptography (==45.0.3) ; python_version >= \"3.9\"", "pdfminer.six (==20250324) ; python_version < \"3.9\"", "pdfminer.six (==20250506) ; python_version >= \"3.9\"", "pycparser (==2.22)"] +pdfminer = ["cffi (==1.17.1)", "cryptography (==39.0.2) ; python_version < \"3.9\"", "cryptography (==45.0.4) ; python_version >= \"3.9\"", "pdfminer.six (==20250324) ; python_version < \"3.9\"", "pdfminer.six (==20250506) ; python_version >= \"3.9\"", "pycparser (==2.22)"] pillow = ["Pillow (>=10.4.0) ; python_version < \"3.9\"", "Pillow (>=11.2.1) ; python_version >= \"3.9\""] pip-system-certs = ["pip-system-certs (==4.0) ; platform_system == \"Windows\""] proxy = ["proxy.py (==2.4.3)"] @@ -3895,83 +3901,118 @@ testing = ["hookdns", "httpbin (>=0.10.2)", "pytest", "pytest-cov", "requests", [[package]] name = "watchfiles" -version = "1.0.5" +version = "1.1.0" description = "Simple, modern and high performance file watching and code reload in python." optional = false python-versions = ">=3.9" groups = ["docs"] files = [ - {file = "watchfiles-1.0.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5c40fe7dd9e5f81e0847b1ea64e1f5dd79dd61afbedb57759df06767ac719b40"}, - {file = "watchfiles-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8c0db396e6003d99bb2d7232c957b5f0b5634bbd1b24e381a5afcc880f7373fb"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b551d4fb482fc57d852b4541f911ba28957d051c8776e79c3b4a51eb5e2a1b11"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:830aa432ba5c491d52a15b51526c29e4a4b92bf4f92253787f9726fe01519487"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a16512051a822a416b0d477d5f8c0e67b67c1a20d9acecb0aafa3aa4d6e7d256"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe0cbc787770e52a96c6fda6726ace75be7f840cb327e1b08d7d54eadc3bc85"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d363152c5e16b29d66cbde8fa614f9e313e6f94a8204eaab268db52231fe5358"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ee32c9a9bee4d0b7bd7cbeb53cb185cf0b622ac761efaa2eba84006c3b3a614"}, - {file = "watchfiles-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:29c7fd632ccaf5517c16a5188e36f6612d6472ccf55382db6c7fe3fcccb7f59f"}, - {file = "watchfiles-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e637810586e6fe380c8bc1b3910accd7f1d3a9a7262c8a78d4c8fb3ba6a2b3d"}, - {file = "watchfiles-1.0.5-cp310-cp310-win32.whl", hash = "sha256:cd47d063fbeabd4c6cae1d4bcaa38f0902f8dc5ed168072874ea11d0c7afc1ff"}, - {file = "watchfiles-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:86c0df05b47a79d80351cd179893f2f9c1b1cae49d96e8b3290c7f4bd0ca0a92"}, - {file = "watchfiles-1.0.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:237f9be419e977a0f8f6b2e7b0475ababe78ff1ab06822df95d914a945eac827"}, - {file = "watchfiles-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0da39ff917af8b27a4bdc5a97ac577552a38aac0d260a859c1517ea3dc1a7c4"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cfcb3952350e95603f232a7a15f6c5f86c5375e46f0bd4ae70d43e3e063c13d"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:68b2dddba7a4e6151384e252a5632efcaa9bc5d1c4b567f3cb621306b2ca9f63"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:95cf944fcfc394c5f9de794ce581914900f82ff1f855326f25ebcf24d5397418"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecf6cd9f83d7c023b1aba15d13f705ca7b7d38675c121f3cc4a6e25bd0857ee9"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:852de68acd6212cd6d33edf21e6f9e56e5d98c6add46f48244bd479d97c967c6"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5730f3aa35e646103b53389d5bc77edfbf578ab6dab2e005142b5b80a35ef25"}, - {file = "watchfiles-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:18b3bd29954bc4abeeb4e9d9cf0b30227f0f206c86657674f544cb032296acd5"}, - {file = "watchfiles-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ba5552a1b07c8edbf197055bc9d518b8f0d98a1c6a73a293bc0726dce068ed01"}, - {file = "watchfiles-1.0.5-cp311-cp311-win32.whl", hash = "sha256:2f1fefb2e90e89959447bc0420fddd1e76f625784340d64a2f7d5983ef9ad246"}, - {file = "watchfiles-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:b6e76ceb1dd18c8e29c73f47d41866972e891fc4cc7ba014f487def72c1cf096"}, - {file = "watchfiles-1.0.5-cp311-cp311-win_arm64.whl", hash = "sha256:266710eb6fddc1f5e51843c70e3bebfb0f5e77cf4f27129278c70554104d19ed"}, - {file = "watchfiles-1.0.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b5eb568c2aa6018e26da9e6c86f3ec3fd958cee7f0311b35c2630fa4217d17f2"}, - {file = "watchfiles-1.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0a04059f4923ce4e856b4b4e5e783a70f49d9663d22a4c3b3298165996d1377f"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e380c89983ce6e6fe2dd1e1921b9952fb4e6da882931abd1824c092ed495dec"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fe43139b2c0fdc4a14d4f8d5b5d967f7a2777fd3d38ecf5b1ec669b0d7e43c21"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee0822ce1b8a14fe5a066f93edd20aada932acfe348bede8aa2149f1a4489512"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a0dbcb1c2d8f2ab6e0a81c6699b236932bd264d4cef1ac475858d16c403de74d"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a2014a2b18ad3ca53b1f6c23f8cd94a18ce930c1837bd891262c182640eb40a6"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f6ae86d5cb647bf58f9f655fcf577f713915a5d69057a0371bc257e2553234"}, - {file = "watchfiles-1.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1a7bac2bde1d661fb31f4d4e8e539e178774b76db3c2c17c4bb3e960a5de07a2"}, - {file = "watchfiles-1.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ab626da2fc1ac277bbf752446470b367f84b50295264d2d313e28dc4405d663"}, - {file = "watchfiles-1.0.5-cp312-cp312-win32.whl", hash = "sha256:9f4571a783914feda92018ef3901dab8caf5b029325b5fe4558c074582815249"}, - {file = "watchfiles-1.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:360a398c3a19672cf93527f7e8d8b60d8275119c5d900f2e184d32483117a705"}, - {file = "watchfiles-1.0.5-cp312-cp312-win_arm64.whl", hash = "sha256:1a2902ede862969077b97523987c38db28abbe09fb19866e711485d9fbf0d417"}, - {file = "watchfiles-1.0.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0b289572c33a0deae62daa57e44a25b99b783e5f7aed81b314232b3d3c81a11d"}, - {file = "watchfiles-1.0.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a056c2f692d65bf1e99c41045e3bdcaea3cb9e6b5a53dcaf60a5f3bd95fc9763"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9dca99744991fc9850d18015c4f0438865414e50069670f5f7eee08340d8b40"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:894342d61d355446d02cd3988a7326af344143eb33a2fd5d38482a92072d9563"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab44e1580924d1ffd7b3938e02716d5ad190441965138b4aa1d1f31ea0877f04"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6f9367b132078b2ceb8d066ff6c93a970a18c3029cea37bfd7b2d3dd2e5db8f"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2e55a9b162e06e3f862fb61e399fe9f05d908d019d87bf5b496a04ef18a970a"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0125f91f70e0732a9f8ee01e49515c35d38ba48db507a50c5bdcad9503af5827"}, - {file = "watchfiles-1.0.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:13bb21f8ba3248386337c9fa51c528868e6c34a707f729ab041c846d52a0c69a"}, - {file = "watchfiles-1.0.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:839ebd0df4a18c5b3c1b890145b5a3f5f64063c2a0d02b13c76d78fe5de34936"}, - {file = "watchfiles-1.0.5-cp313-cp313-win32.whl", hash = "sha256:4a8ec1e4e16e2d5bafc9ba82f7aaecfeec990ca7cd27e84fb6f191804ed2fcfc"}, - {file = "watchfiles-1.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:f436601594f15bf406518af922a89dcaab416568edb6f65c4e5bbbad1ea45c11"}, - {file = "watchfiles-1.0.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2cfb371be97d4db374cba381b9f911dd35bb5f4c58faa7b8b7106c8853e5d225"}, - {file = "watchfiles-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a3904d88955fda461ea2531fcf6ef73584ca921415d5cfa44457a225f4a42bc1"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b7a21715fb12274a71d335cff6c71fe7f676b293d322722fe708a9ec81d91f5"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dfd6ae1c385ab481766b3c61c44aca2b3cd775f6f7c0fa93d979ddec853d29d5"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b659576b950865fdad31fa491d31d37cf78b27113a7671d39f919828587b429b"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1909e0a9cd95251b15bff4261de5dd7550885bd172e3536824bf1cf6b121e200"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:832ccc221927c860e7286c55c9b6ebcc0265d5e072f49c7f6456c7798d2b39aa"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85fbb6102b3296926d0c62cfc9347f6237fb9400aecd0ba6bbda94cae15f2b3b"}, - {file = "watchfiles-1.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:15ac96dd567ad6c71c71f7b2c658cb22b7734901546cd50a475128ab557593ca"}, - {file = "watchfiles-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4b6227351e11c57ae997d222e13f5b6f1f0700d84b8c52304e8675d33a808382"}, - {file = "watchfiles-1.0.5-cp39-cp39-win32.whl", hash = "sha256:974866e0db748ebf1eccab17862bc0f0303807ed9cda465d1324625b81293a18"}, - {file = "watchfiles-1.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:9848b21ae152fe79c10dd0197304ada8f7b586d3ebc3f27f43c506e5a52a863c"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f59b870db1f1ae5a9ac28245707d955c8721dd6565e7f411024fa374b5362d1d"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9475b0093767e1475095f2aeb1d219fb9664081d403d1dff81342df8cd707034"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc533aa50664ebd6c628b2f30591956519462f5d27f951ed03d6c82b2dfd9965"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fed1cd825158dcaae36acce7b2db33dcbfd12b30c34317a88b8ed80f0541cc57"}, - {file = "watchfiles-1.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:554389562c29c2c182e3908b149095051f81d28c2fec79ad6c8997d7d63e0009"}, - {file = "watchfiles-1.0.5-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a74add8d7727e6404d5dc4dcd7fac65d4d82f95928bbee0cf5414c900e86773e"}, - {file = "watchfiles-1.0.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb1489f25b051a89fae574505cc26360c8e95e227a9500182a7fe0afcc500ce0"}, - {file = "watchfiles-1.0.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0901429650652d3f0da90bad42bdafc1f9143ff3605633c455c999a2d786cac"}, - {file = "watchfiles-1.0.5.tar.gz", hash = "sha256:b7529b5dcc114679d43827d8c35a07c493ad6f083633d573d81c660abc5979e9"}, + {file = "watchfiles-1.1.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:27f30e14aa1c1e91cb653f03a63445739919aef84c8d2517997a83155e7a2fcc"}, + {file = "watchfiles-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3366f56c272232860ab45c77c3ca7b74ee819c8e1f6f35a7125556b198bbc6df"}, + {file = "watchfiles-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8412eacef34cae2836d891836a7fff7b754d6bcac61f6c12ba5ca9bc7e427b68"}, + {file = "watchfiles-1.1.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df670918eb7dd719642e05979fc84704af913d563fd17ed636f7c4783003fdcc"}, + {file = "watchfiles-1.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7642b9bc4827b5518ebdb3b82698ada8c14c7661ddec5fe719f3e56ccd13c97"}, + {file = "watchfiles-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:199207b2d3eeaeb80ef4411875a6243d9ad8bc35b07fc42daa6b801cc39cc41c"}, + {file = "watchfiles-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a479466da6db5c1e8754caee6c262cd373e6e6c363172d74394f4bff3d84d7b5"}, + {file = "watchfiles-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:935f9edd022ec13e447e5723a7d14456c8af254544cefbc533f6dd276c9aa0d9"}, + {file = "watchfiles-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8076a5769d6bdf5f673a19d51da05fc79e2bbf25e9fe755c47595785c06a8c72"}, + {file = "watchfiles-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86b1e28d4c37e89220e924305cd9f82866bb0ace666943a6e4196c5df4d58dcc"}, + {file = "watchfiles-1.1.0-cp310-cp310-win32.whl", hash = "sha256:d1caf40c1c657b27858f9774d5c0e232089bca9cb8ee17ce7478c6e9264d2587"}, + {file = "watchfiles-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:a89c75a5b9bc329131115a409d0acc16e8da8dfd5867ba59f1dd66ae7ea8fa82"}, + {file = "watchfiles-1.1.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c9649dfc57cc1f9835551deb17689e8d44666315f2e82d337b9f07bd76ae3aa2"}, + {file = "watchfiles-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:406520216186b99374cdb58bc48e34bb74535adec160c8459894884c983a149c"}, + {file = "watchfiles-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45350fd1dc75cd68d3d72c47f5b513cb0578da716df5fba02fff31c69d5f2d"}, + {file = "watchfiles-1.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11ee4444250fcbeb47459a877e5e80ed994ce8e8d20283857fc128be1715dac7"}, + {file = "watchfiles-1.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bda8136e6a80bdea23e5e74e09df0362744d24ffb8cd59c4a95a6ce3d142f79c"}, + {file = "watchfiles-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b915daeb2d8c1f5cee4b970f2e2c988ce6514aace3c9296e58dd64dc9aa5d575"}, + {file = "watchfiles-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed8fc66786de8d0376f9f913c09e963c66e90ced9aa11997f93bdb30f7c872a8"}, + {file = "watchfiles-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe4371595edf78c41ef8ac8df20df3943e13defd0efcb732b2e393b5a8a7a71f"}, + {file = "watchfiles-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b7c5f6fe273291f4d414d55b2c80d33c457b8a42677ad14b4b47ff025d0893e4"}, + {file = "watchfiles-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7738027989881e70e3723c75921f1efa45225084228788fc59ea8c6d732eb30d"}, + {file = "watchfiles-1.1.0-cp311-cp311-win32.whl", hash = "sha256:622d6b2c06be19f6e89b1d951485a232e3b59618def88dbeda575ed8f0d8dbf2"}, + {file = "watchfiles-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:48aa25e5992b61debc908a61ab4d3f216b64f44fdaa71eb082d8b2de846b7d12"}, + {file = "watchfiles-1.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:00645eb79a3faa70d9cb15c8d4187bb72970b2470e938670240c7998dad9f13a"}, + {file = "watchfiles-1.1.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9dc001c3e10de4725c749d4c2f2bdc6ae24de5a88a339c4bce32300a31ede179"}, + {file = "watchfiles-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9ba68ec283153dead62cbe81872d28e053745f12335d037de9cbd14bd1877f5"}, + {file = "watchfiles-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130fc497b8ee68dce163e4254d9b0356411d1490e868bd8790028bc46c5cc297"}, + {file = "watchfiles-1.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50a51a90610d0845a5931a780d8e51d7bd7f309ebc25132ba975aca016b576a0"}, + {file = "watchfiles-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc44678a72ac0910bac46fa6a0de6af9ba1355669b3dfaf1ce5f05ca7a74364e"}, + {file = "watchfiles-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a543492513a93b001975ae283a51f4b67973662a375a403ae82f420d2c7205ee"}, + {file = "watchfiles-1.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ac164e20d17cc285f2b94dc31c384bc3aa3dd5e7490473b3db043dd70fbccfd"}, + {file = "watchfiles-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7590d5a455321e53857892ab8879dce62d1f4b04748769f5adf2e707afb9d4f"}, + {file = "watchfiles-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:37d3d3f7defb13f62ece99e9be912afe9dd8a0077b7c45ee5a57c74811d581a4"}, + {file = "watchfiles-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7080c4bb3efd70a07b1cc2df99a7aa51d98685be56be6038c3169199d0a1c69f"}, + {file = "watchfiles-1.1.0-cp312-cp312-win32.whl", hash = "sha256:cbcf8630ef4afb05dc30107bfa17f16c0896bb30ee48fc24bf64c1f970f3b1fd"}, + {file = "watchfiles-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:cbd949bdd87567b0ad183d7676feb98136cde5bb9025403794a4c0db28ed3a47"}, + {file = "watchfiles-1.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:0a7d40b77f07be87c6faa93d0951a0fcd8cbca1ddff60a1b65d741bac6f3a9f6"}, + {file = "watchfiles-1.1.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5007f860c7f1f8df471e4e04aaa8c43673429047d63205d1630880f7637bca30"}, + {file = "watchfiles-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:20ecc8abbd957046f1fe9562757903f5eaf57c3bce70929fda6c7711bb58074a"}, + {file = "watchfiles-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2f0498b7d2a3c072766dba3274fe22a183dbea1f99d188f1c6c72209a1063dc"}, + {file = "watchfiles-1.1.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:239736577e848678e13b201bba14e89718f5c2133dfd6b1f7846fa1b58a8532b"}, + {file = "watchfiles-1.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eff4b8d89f444f7e49136dc695599a591ff769300734446c0a86cba2eb2f9895"}, + {file = "watchfiles-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12b0a02a91762c08f7264e2e79542f76870c3040bbc847fb67410ab81474932a"}, + {file = "watchfiles-1.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29e7bc2eee15cbb339c68445959108803dc14ee0c7b4eea556400131a8de462b"}, + {file = "watchfiles-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9481174d3ed982e269c090f780122fb59cee6c3796f74efe74e70f7780ed94c"}, + {file = "watchfiles-1.1.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:80f811146831c8c86ab17b640801c25dc0a88c630e855e2bef3568f30434d52b"}, + {file = "watchfiles-1.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:60022527e71d1d1fda67a33150ee42869042bce3d0fcc9cc49be009a9cded3fb"}, + {file = "watchfiles-1.1.0-cp313-cp313-win32.whl", hash = "sha256:32d6d4e583593cb8576e129879ea0991660b935177c0f93c6681359b3654bfa9"}, + {file = "watchfiles-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:f21af781a4a6fbad54f03c598ab620e3a77032c5878f3d780448421a6e1818c7"}, + {file = "watchfiles-1.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:5366164391873ed76bfdf618818c82084c9db7fac82b64a20c44d335eec9ced5"}, + {file = "watchfiles-1.1.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:17ab167cca6339c2b830b744eaf10803d2a5b6683be4d79d8475d88b4a8a4be1"}, + {file = "watchfiles-1.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:328dbc9bff7205c215a7807da7c18dce37da7da718e798356212d22696404339"}, + {file = "watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7208ab6e009c627b7557ce55c465c98967e8caa8b11833531fdf95799372633"}, + {file = "watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8f6f72974a19efead54195bc9bed4d850fc047bb7aa971268fd9a8387c89011"}, + {file = "watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d181ef50923c29cf0450c3cd47e2f0557b62218c50b2ab8ce2ecaa02bd97e670"}, + {file = "watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adb4167043d3a78280d5d05ce0ba22055c266cf8655ce942f2fb881262ff3cdf"}, + {file = "watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5701dc474b041e2934a26d31d39f90fac8a3dee2322b39f7729867f932b1d4"}, + {file = "watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b067915e3c3936966a8607f6fe5487df0c9c4afb85226613b520890049deea20"}, + {file = "watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:9c733cda03b6d636b4219625a4acb5c6ffb10803338e437fb614fef9516825ef"}, + {file = "watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:cc08ef8b90d78bfac66f0def80240b0197008e4852c9f285907377b2947ffdcb"}, + {file = "watchfiles-1.1.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9974d2f7dc561cce3bb88dfa8eb309dab64c729de85fba32e98d75cf24b66297"}, + {file = "watchfiles-1.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c68e9f1fcb4d43798ad8814c4c1b61547b014b667216cb754e606bfade587018"}, + {file = "watchfiles-1.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95ab1594377effac17110e1352989bdd7bdfca9ff0e5eeccd8c69c5389b826d0"}, + {file = "watchfiles-1.1.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fba9b62da882c1be1280a7584ec4515d0a6006a94d6e5819730ec2eab60ffe12"}, + {file = "watchfiles-1.1.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3434e401f3ce0ed6b42569128b3d1e3af773d7ec18751b918b89cd49c14eaafb"}, + {file = "watchfiles-1.1.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa257a4d0d21fcbca5b5fcba9dca5a78011cb93c0323fb8855c6d2dfbc76eb77"}, + {file = "watchfiles-1.1.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fd1b3879a578a8ec2076c7961076df540b9af317123f84569f5a9ddee64ce92"}, + {file = "watchfiles-1.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc7a30eeb0e20ecc5f4bd113cd69dcdb745a07c68c0370cea919f373f65d9e"}, + {file = "watchfiles-1.1.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:891c69e027748b4a73847335d208e374ce54ca3c335907d381fde4e41661b13b"}, + {file = "watchfiles-1.1.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:12fe8eaffaf0faa7906895b4f8bb88264035b3f0243275e0bf24af0436b27259"}, + {file = "watchfiles-1.1.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:bfe3c517c283e484843cb2e357dd57ba009cff351edf45fb455b5fbd1f45b15f"}, + {file = "watchfiles-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a9ccbf1f129480ed3044f540c0fdbc4ee556f7175e5ab40fe077ff6baf286d4e"}, + {file = "watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba0e3255b0396cac3cc7bbace76404dd72b5438bf0d8e7cefa2f79a7f3649caa"}, + {file = "watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4281cd9fce9fc0a9dbf0fc1217f39bf9cf2b4d315d9626ef1d4e87b84699e7e8"}, + {file = "watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d2404af8db1329f9a3c9b79ff63e0ae7131986446901582067d9304ae8aaf7f"}, + {file = "watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e78b6ed8165996013165eeabd875c5dfc19d41b54f94b40e9fff0eb3193e5e8e"}, + {file = "watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:249590eb75ccc117f488e2fabd1bfa33c580e24b96f00658ad88e38844a040bb"}, + {file = "watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05686b5487cfa2e2c28ff1aa370ea3e6c5accfe6435944ddea1e10d93872147"}, + {file = "watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d0e10e6f8f6dc5762adee7dece33b722282e1f59aa6a55da5d493a97282fedd8"}, + {file = "watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:af06c863f152005c7592df1d6a7009c836a247c9d8adb78fef8575a5a98699db"}, + {file = "watchfiles-1.1.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:865c8e95713744cf5ae261f3067861e9da5f1370ba91fc536431e29b418676fa"}, + {file = "watchfiles-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42f92befc848bb7a19658f21f3e7bae80d7d005d13891c62c2cd4d4d0abb3433"}, + {file = "watchfiles-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa0cc8365ab29487eb4f9979fd41b22549853389e22d5de3f134a6796e1b05a4"}, + {file = "watchfiles-1.1.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:90ebb429e933645f3da534c89b29b665e285048973b4d2b6946526888c3eb2c7"}, + {file = "watchfiles-1.1.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c588c45da9b08ab3da81d08d7987dae6d2a3badd63acdb3e206a42dbfa7cb76f"}, + {file = "watchfiles-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7c55b0f9f68590115c25272b06e63f0824f03d4fc7d6deed43d8ad5660cabdbf"}, + {file = "watchfiles-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd17a1e489f02ce9117b0de3c0b1fab1c3e2eedc82311b299ee6b6faf6c23a29"}, + {file = "watchfiles-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da71945c9ace018d8634822f16cbc2a78323ef6c876b1d34bbf5d5222fd6a72e"}, + {file = "watchfiles-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:51556d5004887045dba3acdd1fdf61dddea2be0a7e18048b5e853dcd37149b86"}, + {file = "watchfiles-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04e4ed5d1cd3eae68c89bcc1a485a109f39f2fd8de05f705e98af6b5f1861f1f"}, + {file = "watchfiles-1.1.0-cp39-cp39-win32.whl", hash = "sha256:c600e85f2ffd9f1035222b1a312aff85fd11ea39baff1d705b9b047aad2ce267"}, + {file = "watchfiles-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:3aba215958d88182e8d2acba0fdaf687745180974946609119953c0e112397dc"}, + {file = "watchfiles-1.1.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3a6fd40bbb50d24976eb275ccb55cd1951dfb63dbc27cae3066a6ca5f4beabd5"}, + {file = "watchfiles-1.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9f811079d2f9795b5d48b55a37aa7773680a5659afe34b54cc1d86590a51507d"}, + {file = "watchfiles-1.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2726d7bfd9f76158c84c10a409b77a320426540df8c35be172444394b17f7ea"}, + {file = "watchfiles-1.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df32d59cb9780f66d165a9a7a26f19df2c7d24e3bd58713108b41d0ff4f929c6"}, + {file = "watchfiles-1.1.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0ece16b563b17ab26eaa2d52230c9a7ae46cf01759621f4fbbca280e438267b3"}, + {file = "watchfiles-1.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:51b81e55d40c4b4aa8658427a3ee7ea847c591ae9e8b81ef94a90b668999353c"}, + {file = "watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2bcdc54ea267fe72bfc7d83c041e4eb58d7d8dc6f578dfddb52f037ce62f432"}, + {file = "watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:923fec6e5461c42bd7e3fd5ec37492c6f3468be0499bc0707b4bbbc16ac21792"}, + {file = "watchfiles-1.1.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7b3443f4ec3ba5aa00b0e9fa90cf31d98321cbff8b925a7c7b84161619870bc9"}, + {file = "watchfiles-1.1.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7049e52167fc75fc3cc418fc13d39a8e520cbb60ca08b47f6cedb85e181d2f2a"}, + {file = "watchfiles-1.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54062ef956807ba806559b3c3d52105ae1827a0d4ab47b621b31132b6b7e2866"}, + {file = "watchfiles-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a7bd57a1bb02f9d5c398c0c1675384e7ab1dd39da0ca50b7f09af45fa435277"}, + {file = "watchfiles-1.1.0.tar.gz", hash = "sha256:693ed7ec72cbfcee399e92c895362b6e66d63dac6b91e2c11ae03d10d503e575"}, ] [package.dependencies] diff --git a/src/auto_archiver/core/orchestrator.py b/src/auto_archiver/core/orchestrator.py index 66073a7..00065e2 100644 --- a/src/auto_archiver/core/orchestrator.py +++ b/src/auto_archiver/core/orchestrator.py @@ -264,6 +264,14 @@ Here's how that would look: \n\nsteps:\n extractors:\n - [your_extractor_name_ default=None, ) + parser.add_argument( + "--logging.each_level_in_separate_file", + action="store", + dest="logging.each_level_in_separate_file", + help="whether to write each logging level to a separate file", + default=False, + ) + def add_individual_module_args( self, modules: list[LazyBaseModule] = None, parser: argparse.ArgumentParser = None ) -> None: @@ -334,10 +342,27 @@ Here's how that would look: \n\nsteps:\n extractors:\n - [your_extractor_name_ # add other logging info if self.logger_id is None: # note - need direct comparison to None since need to consider falsy value 0 self.logger_id = logger.add(sys.stderr, level=logging_config["level"]) - if log_file := logging_config["file"]: - logger.add(log_file) if not logging_config["rotation"] else logger.add( - log_file, rotation=logging_config["rotation"] - ) + + # Default to False (above in parser code) + separate_file = logging_config["each_level_in_separate_file"] + + # Default to None if not set + rotation=logging_config["rotation"] + + if separate_file: + logger.add("logs/1debug.log", level="DEBUG", rotation=rotation) + logger.add("logs/2info.log", level="INFO", rotation=rotation) + logger.add("logs/3success.log", level="SUCCESS", rotation=rotation) + logger.add("logs/4warning.log", level="WARNING", rotation=rotation) + logger.add("logs/5error.log", level="ERROR", rotation=rotation) + else: + log_file = logging_config["file"] + logger.add(log_file, rotation=rotation) + + # if log_file := logging_config["file"]: + # logger.add(log_file) if not logging_config["rotation"] else logger.add( + # log_file, rotation=logging_config["rotation"] + # ) def install_modules(self, modules_by_type): """ From b3adc5603a44ad29af12c91b78cbec53cfa330c3 Mon Sep 17 00:00:00 2001 From: Dave Mateer Date: Tue, 17 Jun 2025 09:51:19 +0100 Subject: [PATCH 086/107] metadata.json hardcode in storage. add new metadata_json_enricher. log level change in orchestrator --- src/auto_archiver/core/orchestrator.py | 2 +- src/auto_archiver/core/storage.py | 7 +++- .../metadata_json_enricher/__init__.py | 1 + .../metadata_json_enricher/__manifest__.py | 37 +++++++++++++++++++ .../metadata_json_enricher.py | 21 +++++++++++ 5 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 src/auto_archiver/modules/metadata_json_enricher/__init__.py create mode 100644 src/auto_archiver/modules/metadata_json_enricher/__manifest__.py create mode 100644 src/auto_archiver/modules/metadata_json_enricher/metadata_json_enricher.py diff --git a/src/auto_archiver/core/orchestrator.py b/src/auto_archiver/core/orchestrator.py index 00065e2..b45afc0 100644 --- a/src/auto_archiver/core/orchestrator.py +++ b/src/auto_archiver/core/orchestrator.py @@ -541,7 +541,7 @@ Here's how that would look: \n\nsteps:\n extractors:\n - [your_extractor_name_ yield self.feed_item(item) url_count += 1 - logger.success(f"Processed {url_count} URL(s)") + logger.info(f"Processed {url_count} URL(s)") self.cleanup() def feed_item(self, item: Metadata) -> Metadata: diff --git a/src/auto_archiver/core/storage.py b/src/auto_archiver/core/storage.py index 3205f5a..feb3d5f 100644 --- a/src/auto_archiver/core/storage.py +++ b/src/auto_archiver/core/storage.py @@ -100,7 +100,12 @@ class Storage(BaseModule): # Handle filename_generator logic filename_generator = self.filename_generator - if filename_generator == "random": + # DM 9th Jun 25 - special case for metadata.json file in metadata_json_enricher + # where we want the filename to remain metadata.json + # TODO - should this be a config option to keep the original filename? Is it useful anywhere else? + if filename.endswith('metadata'): + filename = 'metadata' + elif filename_generator == "random": filename = random_str(24) elif filename_generator == "static": # load the hash_enricher module diff --git a/src/auto_archiver/modules/metadata_json_enricher/__init__.py b/src/auto_archiver/modules/metadata_json_enricher/__init__.py new file mode 100644 index 0000000..4eed90b --- /dev/null +++ b/src/auto_archiver/modules/metadata_json_enricher/__init__.py @@ -0,0 +1 @@ +from .metadata_json_enricher import MetadataJsonEnricher \ No newline at end of file diff --git a/src/auto_archiver/modules/metadata_json_enricher/__manifest__.py b/src/auto_archiver/modules/metadata_json_enricher/__manifest__.py new file mode 100644 index 0000000..b737b16 --- /dev/null +++ b/src/auto_archiver/modules/metadata_json_enricher/__manifest__.py @@ -0,0 +1,37 @@ +{ + "name": "Metadata JSON Enricher", + "type": ["enricher"], + "requires_setup": True, + "dependencies": { + "python": ["loguru"], + }, + "configs": { + # "width": {"default": 1280, "type": "int", "help": "width of the screenshots"}, + # "height": {"default": 1024, "type": "int", "help": "height of the screenshots"}, + # "timeout": {"default": 60, "type": "int", "help": "timeout for taking the screenshot"}, + # "sleep_before_screenshot": { + # "default": 4, + # "type": "int", + # "help": "seconds to wait for the pages to load before taking screenshot", + # }, + # "http_proxy": { + # "default": "", + # "help": "http proxy to use for the webdriver, eg http://proxy-user:password@proxy-ip:port", + # }, + # "save_to_pdf": { + # "default": False, + # "type": "bool", + # "help": "save the page as pdf along with the screenshot. PDF saving options can be adjusted with the 'print_options' parameter", + # }, + # "print_options": { + # "default": {}, + # "help": "options to pass to the pdf printer, in JSON format. See https://www.selenium.dev/documentation/webdriver/interactions/print_page/ for more information", + # "type": "json_loader", + # }, + }, + "description": """ + + Writes all the metadata to a json file so can be parsed by other tools. + + """, +} diff --git a/src/auto_archiver/modules/metadata_json_enricher/metadata_json_enricher.py b/src/auto_archiver/modules/metadata_json_enricher/metadata_json_enricher.py new file mode 100644 index 0000000..312f922 --- /dev/null +++ b/src/auto_archiver/modules/metadata_json_enricher/metadata_json_enricher.py @@ -0,0 +1,21 @@ +import json +from loguru import logger +import os + +from auto_archiver.core import Enricher +from auto_archiver.core import Media, Metadata + +class MetadataJsonEnricher(Enricher): + def __init__(self): + super().__init__() + + def enrich(self, to_enrich: Metadata) -> None: + url = to_enrich.get_url() + + logger.debug(f"Metadata JSON Enricher for {url=}") + + item_path = os.path.join(self.tmp_dir, f"metadata.json") + with open(item_path, mode="w", encoding="utf-8") as outf: + json.dump(to_enrich.to_dict(), outf, indent=4, default=str) + + to_enrich.add_media(Media(filename=item_path), id="metadata_json") \ No newline at end of file From 7ab804d16303ec470bc69041171ad44949ced437 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 12:50:35 +0100 Subject: [PATCH 087/107] dependencies update --- poetry.lock | 283 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 162 insertions(+), 121 deletions(-) diff --git a/poetry.lock b/poetry.lock index 786ae5f..37b37fa 100644 --- a/poetry.lock +++ b/poetry.lock @@ -193,18 +193,18 @@ files = [ [[package]] name = "boto3" -version = "1.38.33" +version = "1.38.37" description = "The AWS SDK for Python" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "boto3-1.38.33-py3-none-any.whl", hash = "sha256:25d0717489c658f7ae6c3c7f0f7e1b4d611b30b2f08f0fcef6455ac6864a8768"}, - {file = "boto3-1.38.33.tar.gz", hash = "sha256:6467909c1ae01ff67981f021bb2568592211765ec8a9a1d2c4529191e46c3541"}, + {file = "boto3-1.38.37-py3-none-any.whl", hash = "sha256:46a512b1fbc4c51a9abfef8e2130db0806cb00ef137e161f6f751421c78a7c0c"}, + {file = "boto3-1.38.37.tar.gz", hash = "sha256:4ccd700a2a36de0cd63bd8c79cca6164cb684e34fc1126de5c41525e4d0bfaee"}, ] [package.dependencies] -botocore = ">=1.38.33,<1.39.0" +botocore = ">=1.38.37,<1.39.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.13.0,<0.14.0" @@ -213,14 +213,14 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.38.33" +version = "1.38.37" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "botocore-1.38.33-py3-none-any.whl", hash = "sha256:ad25233e93dcebe95809b1f9393c1f11a639696327793d166295fb78dd7bc597"}, - {file = "botocore-1.38.33.tar.gz", hash = "sha256:dbe8fea9d0426c644c89ef2018ead886ccbcc22901a02b377b4e65ce1cb69a2b"}, + {file = "botocore-1.38.37-py3-none-any.whl", hash = "sha256:f8ad063b7dcdbf12f2c1b5a4405f390ce52beff3b2861af2e5169816ee0146f2"}, + {file = "botocore-1.38.37.tar.gz", hash = "sha256:06ce46da5420ea7cf542ece4ff1ec9045922fef977adf4bbec618c96c7a478bf"}, ] [package.dependencies] @@ -437,14 +437,14 @@ files = [ [[package]] name = "certifi" -version = "2025.4.26" +version = "2025.6.15" description = "Python package for providing Mozilla's CA Bundle." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" groups = ["main", "docs"] files = [ - {file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"}, - {file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"}, + {file = "certifi-2025.6.15-py3-none-any.whl", hash = "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057"}, + {file = "certifi-2025.6.15.tar.gz", hash = "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b"}, ] [[package]] @@ -941,14 +941,14 @@ files = [ [[package]] name = "google-api-core" -version = "2.25.0" +version = "2.25.1" description = "Google API client core library" optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "google_api_core-2.25.0-py3-none-any.whl", hash = "sha256:1db79d1281dcf9f3d10023283299ba38f3dc9f639ec41085968fd23e5bcf512e"}, - {file = "google_api_core-2.25.0.tar.gz", hash = "sha256:9b548e688702f82a34ed8409fb8a6961166f0b7795032f0be8f48308dff4333a"}, + {file = "google_api_core-2.25.1-py3-none-any.whl", hash = "sha256:8a2a56c1fef82987a524371f99f3bd0143702fecc670c72e600c1cda6bf8dbb7"}, + {file = "google_api_core-2.25.1.tar.gz", hash = "sha256:d2aaa0b13c78c61cb3f4282c464c046e45fbd75755683c9c525e6e8f7ed0a5e8"}, ] [package.dependencies] @@ -966,14 +966,14 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.0)"] [[package]] name = "google-api-python-client" -version = "2.171.0" +version = "2.172.0" description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "google_api_python_client-2.171.0-py3-none-any.whl", hash = "sha256:c9c9b76f561e9d9ac14e54a9e2c0842876201d5b96e69e48f967373f0784cbe9"}, - {file = "google_api_python_client-2.171.0.tar.gz", hash = "sha256:057a5c08d28463c6b9eb89746355de5f14b7ed27a65c11fdbf1d06c66bb66b23"}, + {file = "google_api_python_client-2.172.0-py3-none-any.whl", hash = "sha256:9f1b9a268d5dc1228207d246c673d3a09ee211b41a11521d38d9212aeaa43af7"}, + {file = "google_api_python_client-2.172.0.tar.gz", hash = "sha256:dcb3b7e067154b2aa41f1776cf86584a5739c0ac74e6ff46fc665790dca0e6a6"}, ] [package.dependencies] @@ -2164,64 +2164,70 @@ files = [ [[package]] name = "pyobjc-core" -version = "11.0" +version = "11.1" description = "Python<->ObjC Interoperability Module" optional = false python-versions = ">=3.8" groups = ["main"] markers = "platform_system == \"Darwin\"" files = [ - {file = "pyobjc_core-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:10866b3a734d47caf48e456eea0d4815c2c9b21856157db5917b61dee06893a1"}, - {file = "pyobjc_core-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:50675c0bb8696fe960a28466f9baf6943df2928a1fd85625d678fa2f428bd0bd"}, - {file = "pyobjc_core-11.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a03061d4955c62ddd7754224a80cdadfdf17b6b5f60df1d9169a3b1b02923f0b"}, - {file = "pyobjc_core-11.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c338c1deb7ab2e9436d4175d1127da2eeed4a1b564b3d83b9f3ae4844ba97e86"}, - {file = "pyobjc_core-11.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b4e9dc4296110f251a4033ff3f40320b35873ea7f876bd29a1c9705bb5e08c59"}, - {file = "pyobjc_core-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:02406ece449d0f41b31e579e47ca77ced3eb57533df955281bfcecc99da74fba"}, - {file = "pyobjc_core-11.0.tar.gz", hash = "sha256:63bced211cb8a8fb5c8ff46473603da30e51112861bd02c438fbbbc8578d9a70"}, + {file = "pyobjc_core-11.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4c7536f3e94de0a3eae6bb382d75f1219280aa867cdf37beef39d9e7d580173c"}, + {file = "pyobjc_core-11.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ec36680b5c14e2f73d432b03ba7c1457dc6ca70fa59fd7daea1073f2b4157d33"}, + {file = "pyobjc_core-11.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:765b97dea6b87ec4612b3212258024d8496ea23517c95a1c5f0735f96b7fd529"}, + {file = "pyobjc_core-11.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:18986f83998fbd5d3f56d8a8428b2f3e0754fd15cef3ef786ca0d29619024f2c"}, + {file = "pyobjc_core-11.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8849e78cfe6595c4911fbba29683decfb0bf57a350aed8a43316976ba6f659d2"}, + {file = "pyobjc_core-11.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:8cb9ed17a8d84a312a6e8b665dd22393d48336ea1d8277e7ad20c19a38edf731"}, + {file = "pyobjc_core-11.1-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:f2455683e807f8541f0d83fbba0f5d9a46128ab0d5cc83ea208f0bec759b7f96"}, + {file = "pyobjc_core-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4a99e6558b48b8e47c092051e7b3be05df1c8d0617b62f6fa6a316c01902d157"}, + {file = "pyobjc_core-11.1.tar.gz", hash = "sha256:b63d4d90c5df7e762f34739b39cc55bc63dbcf9fb2fb3f2671e528488c7a87fe"}, ] [[package]] name = "pyobjc-framework-cocoa" -version = "11.0" +version = "11.1" description = "Wrappers for the Cocoa frameworks on macOS" optional = false python-versions = ">=3.9" groups = ["main"] markers = "platform_system == \"Darwin\"" files = [ - {file = "pyobjc_framework_Cocoa-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fbc65f260d617d5463c7fb9dbaaffc23c9a4fabfe3b1a50b039b61870b8daefd"}, - {file = "pyobjc_framework_Cocoa-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3ea7be6e6dd801b297440de02d312ba3fa7fd3c322db747ae1cb237e975f5d33"}, - {file = "pyobjc_framework_Cocoa-11.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:280a577b83c68175a28b2b7138d1d2d3111f2b2b66c30e86f81a19c2b02eae71"}, - {file = "pyobjc_framework_Cocoa-11.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:15b2bd977ed340074f930f1330f03d42912d5882b697d78bd06f8ebe263ef92e"}, - {file = "pyobjc_framework_Cocoa-11.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:5750001db544e67f2b66f02067d8f0da96bb2ef71732bde104f01b8628f9d7ea"}, - {file = "pyobjc_framework_Cocoa-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ddff25b0755d59873d186e1e07d6aaddb19d55e3ae890d69ff2d9babf8627657"}, - {file = "pyobjc_framework_cocoa-11.0.tar.gz", hash = "sha256:00346a8cb81ad7b017b32ff7bf596000f9faa905807b1bd234644ebd47f692c5"}, + {file = "pyobjc_framework_cocoa-11.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b27a5bdb3ab6cdeb998443ff3fce194ffae5f518c6a079b832dbafc4426937f9"}, + {file = "pyobjc_framework_cocoa-11.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7b9a9b8ba07f5bf84866399e3de2aa311ed1c34d5d2788a995bdbe82cc36cfa0"}, + {file = "pyobjc_framework_cocoa-11.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:806de56f06dfba8f301a244cce289d54877c36b4b19818e3b53150eb7c2424d0"}, + {file = "pyobjc_framework_cocoa-11.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:54e93e1d9b0fc41c032582a6f0834befe1d418d73893968f3f450281b11603da"}, + {file = "pyobjc_framework_cocoa-11.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:fd5245ee1997d93e78b72703be1289d75d88ff6490af94462b564892e9266350"}, + {file = "pyobjc_framework_cocoa-11.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:aede53a1afc5433e1e7d66568cc52acceeb171b0a6005407a42e8e82580b4fc0"}, + {file = "pyobjc_framework_cocoa-11.1-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:1b5de4e1757bb65689d6dc1f8d8717de9ec8587eb0c4831c134f13aba29f9b71"}, + {file = "pyobjc_framework_cocoa-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bbee71eeb93b1b31ffbac8560b59a0524a8a4b90846a260d2c4f2188f3d4c721"}, + {file = "pyobjc_framework_cocoa-11.1.tar.gz", hash = "sha256:87df76b9b73e7ca699a828ff112564b59251bb9bbe72e610e670a4dc9940d038"}, ] [package.dependencies] -pyobjc-core = ">=11.0" +pyobjc-core = ">=11.1" [[package]] name = "pyobjc-framework-quartz" -version = "11.0" +version = "11.1" description = "Wrappers for the Quartz frameworks on macOS" optional = false python-versions = ">=3.9" groups = ["main"] markers = "platform_system == \"Darwin\"" files = [ - {file = "pyobjc_framework_Quartz-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:da3ab13c9f92361959b41b0ad4cdd41ae872f90a6d8c58a9ed699bc08ab1c45c"}, - {file = "pyobjc_framework_Quartz-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d251696bfd8e8ef72fbc90eb29fec95cb9d1cc409008a183d5cc3246130ae8c2"}, - {file = "pyobjc_framework_Quartz-11.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cb4a9f2d9d580ea15e25e6b270f47681afb5689cafc9e25712445ce715bcd18e"}, - {file = "pyobjc_framework_Quartz-11.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:973b4f9b8ab844574461a038bd5269f425a7368d6e677e3cc81fcc9b27b65498"}, - {file = "pyobjc_framework_Quartz-11.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:66ab58d65348863b8707e63b2ec5cdc54569ee8189d1af90d52f29f5fdf6272c"}, - {file = "pyobjc_framework_Quartz-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1032f63f2a4ee98366764e69c249f1d93813821e17d224cf626cf11fb1801fc4"}, - {file = "pyobjc_framework_quartz-11.0.tar.gz", hash = "sha256:3205bf7795fb9ae34747f701486b3db6dfac71924894d1f372977c4d70c3c619"}, + {file = "pyobjc_framework_quartz-11.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b5ef75c416b0209e25b2eb07a27bd7eedf14a8c6b2f968711969d45ceceb0f84"}, + {file = "pyobjc_framework_quartz-11.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2d501fe95ef15d8acf587cb7dc4ab4be3c5a84e2252017da8dbb7df1bbe7a72a"}, + {file = "pyobjc_framework_quartz-11.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9ac806067541917d6119b98d90390a6944e7d9bd737f5c0a79884202327c9204"}, + {file = "pyobjc_framework_quartz-11.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43a1138280571bbf44df27a7eef519184b5c4183a588598ebaaeb887b9e73e76"}, + {file = "pyobjc_framework_quartz-11.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b23d81c30c564adf6336e00b357f355b35aad10075dd7e837cfd52a9912863e5"}, + {file = "pyobjc_framework_quartz-11.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:07cbda78b4a8fcf3a2d96e047a2ff01f44e3e1820f46f0f4b3b6d77ff6ece07c"}, + {file = "pyobjc_framework_quartz-11.1-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:39d02a3df4b5e3eee1e0da0fb150259476910d2a9aa638ab94153c24317a9561"}, + {file = "pyobjc_framework_quartz-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9b1f451ddb5243d8d6316af55f240a02b0fffbfe165bff325628bf73f3df7f44"}, + {file = "pyobjc_framework_quartz-11.1.tar.gz", hash = "sha256:a57f35ccfc22ad48c87c5932818e583777ff7276605fef6afad0ac0741169f75"}, ] [package.dependencies] -pyobjc-core = ">=11.0" -pyobjc-framework-Cocoa = ">=11.0" +pyobjc-core = ">=11.1" +pyobjc-framework-Cocoa = ">=11.1" [[package]] name = "pyotp" @@ -3113,14 +3119,14 @@ websocket-client = ">=1.8.0,<1.9.0" [[package]] name = "seleniumbase" -version = "4.39.3" +version = "4.39.4" description = "A complete web automation framework for end-to-end testing." optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "seleniumbase-4.39.3-py3-none-any.whl", hash = "sha256:cbb94d7858a9ef3b0b4431a5879150649f4a73029afaa8ecfb7bda113f2565e1"}, - {file = "seleniumbase-4.39.3.tar.gz", hash = "sha256:b32978e685b1e4e2c7859b2dcb377ac14ba99bf748ea428548f9e450257b861b"}, + {file = "seleniumbase-4.39.4-py3-none-any.whl", hash = "sha256:15562b2550ce6f6fdcc524ff9bd87a1d7381a558767245f10ff63982f508c281"}, + {file = "seleniumbase-4.39.4.tar.gz", hash = "sha256:8880869b88fa5a48c649a776488bafa1ca97d786fb8a25f63e6d5b5b5fc47f44"}, ] [package.dependencies] @@ -3186,11 +3192,11 @@ wsproto = "1.2.0" [package.extras] allure = ["allure-behave (>=2.13.5)", "allure-pytest (>=2.13.5)", "allure-python-commons (>=2.13.5)"] -coverage = ["coverage (>=7.6.1) ; python_version < \"3.9\"", "coverage (>=7.8.2) ; python_version >= \"3.9\"", "pytest-cov (>=5.0.0) ; python_version < \"3.9\"", "pytest-cov (>=6.1.1) ; python_version >= \"3.9\""] +coverage = ["coverage (>=7.6.1) ; python_version < \"3.9\"", "coverage (>=7.9.0) ; python_version >= \"3.9\"", "pytest-cov (>=5.0.0) ; python_version < \"3.9\"", "pytest-cov (>=6.2.1) ; python_version >= \"3.9\""] flake8 = ["flake8 (==5.0.4) ; python_version < \"3.9\"", "flake8 (==7.2.0) ; python_version >= \"3.9\"", "mccabe (==0.7.0)", "pycodestyle (==2.13.0) ; python_version >= \"3.9\"", "pycodestyle (==2.9.1) ; python_version < \"3.9\"", "pyflakes (==2.5.0) ; python_version < \"3.9\"", "pyflakes (==3.3.2) ; python_version >= \"3.9\""] ipdb = ["ipdb (==0.13.13)", "ipython (==7.34.0)"] mss = ["mss (==10.0.0) ; python_version >= \"3.9\"", "mss (==9.0.2) ; python_version < \"3.9\""] -pdfminer = ["cffi (==1.17.1)", "cryptography (==39.0.2) ; python_version < \"3.9\"", "cryptography (==45.0.3) ; python_version >= \"3.9\"", "pdfminer.six (==20250324) ; python_version < \"3.9\"", "pdfminer.six (==20250506) ; python_version >= \"3.9\"", "pycparser (==2.22)"] +pdfminer = ["cffi (==1.17.1)", "cryptography (==39.0.2) ; python_version < \"3.9\"", "cryptography (==45.0.4) ; python_version >= \"3.9\"", "pdfminer.six (==20250324) ; python_version < \"3.9\"", "pdfminer.six (==20250506) ; python_version >= \"3.9\"", "pycparser (==2.22)"] pillow = ["Pillow (>=10.4.0) ; python_version < \"3.9\"", "Pillow (>=11.2.1) ; python_version >= \"3.9\""] pip-system-certs = ["pip-system-certs (==4.0) ; platform_system == \"Windows\""] proxy = ["proxy.py (==2.4.3)"] @@ -3895,83 +3901,118 @@ testing = ["hookdns", "httpbin (>=0.10.2)", "pytest", "pytest-cov", "requests", [[package]] name = "watchfiles" -version = "1.0.5" +version = "1.1.0" description = "Simple, modern and high performance file watching and code reload in python." optional = false python-versions = ">=3.9" groups = ["docs"] files = [ - {file = "watchfiles-1.0.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5c40fe7dd9e5f81e0847b1ea64e1f5dd79dd61afbedb57759df06767ac719b40"}, - {file = "watchfiles-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8c0db396e6003d99bb2d7232c957b5f0b5634bbd1b24e381a5afcc880f7373fb"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b551d4fb482fc57d852b4541f911ba28957d051c8776e79c3b4a51eb5e2a1b11"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:830aa432ba5c491d52a15b51526c29e4a4b92bf4f92253787f9726fe01519487"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a16512051a822a416b0d477d5f8c0e67b67c1a20d9acecb0aafa3aa4d6e7d256"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe0cbc787770e52a96c6fda6726ace75be7f840cb327e1b08d7d54eadc3bc85"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d363152c5e16b29d66cbde8fa614f9e313e6f94a8204eaab268db52231fe5358"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ee32c9a9bee4d0b7bd7cbeb53cb185cf0b622ac761efaa2eba84006c3b3a614"}, - {file = "watchfiles-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:29c7fd632ccaf5517c16a5188e36f6612d6472ccf55382db6c7fe3fcccb7f59f"}, - {file = "watchfiles-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e637810586e6fe380c8bc1b3910accd7f1d3a9a7262c8a78d4c8fb3ba6a2b3d"}, - {file = "watchfiles-1.0.5-cp310-cp310-win32.whl", hash = "sha256:cd47d063fbeabd4c6cae1d4bcaa38f0902f8dc5ed168072874ea11d0c7afc1ff"}, - {file = "watchfiles-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:86c0df05b47a79d80351cd179893f2f9c1b1cae49d96e8b3290c7f4bd0ca0a92"}, - {file = "watchfiles-1.0.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:237f9be419e977a0f8f6b2e7b0475ababe78ff1ab06822df95d914a945eac827"}, - {file = "watchfiles-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0da39ff917af8b27a4bdc5a97ac577552a38aac0d260a859c1517ea3dc1a7c4"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cfcb3952350e95603f232a7a15f6c5f86c5375e46f0bd4ae70d43e3e063c13d"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:68b2dddba7a4e6151384e252a5632efcaa9bc5d1c4b567f3cb621306b2ca9f63"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:95cf944fcfc394c5f9de794ce581914900f82ff1f855326f25ebcf24d5397418"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecf6cd9f83d7c023b1aba15d13f705ca7b7d38675c121f3cc4a6e25bd0857ee9"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:852de68acd6212cd6d33edf21e6f9e56e5d98c6add46f48244bd479d97c967c6"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5730f3aa35e646103b53389d5bc77edfbf578ab6dab2e005142b5b80a35ef25"}, - {file = "watchfiles-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:18b3bd29954bc4abeeb4e9d9cf0b30227f0f206c86657674f544cb032296acd5"}, - {file = "watchfiles-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ba5552a1b07c8edbf197055bc9d518b8f0d98a1c6a73a293bc0726dce068ed01"}, - {file = "watchfiles-1.0.5-cp311-cp311-win32.whl", hash = "sha256:2f1fefb2e90e89959447bc0420fddd1e76f625784340d64a2f7d5983ef9ad246"}, - {file = "watchfiles-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:b6e76ceb1dd18c8e29c73f47d41866972e891fc4cc7ba014f487def72c1cf096"}, - {file = "watchfiles-1.0.5-cp311-cp311-win_arm64.whl", hash = "sha256:266710eb6fddc1f5e51843c70e3bebfb0f5e77cf4f27129278c70554104d19ed"}, - {file = "watchfiles-1.0.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b5eb568c2aa6018e26da9e6c86f3ec3fd958cee7f0311b35c2630fa4217d17f2"}, - {file = "watchfiles-1.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0a04059f4923ce4e856b4b4e5e783a70f49d9663d22a4c3b3298165996d1377f"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e380c89983ce6e6fe2dd1e1921b9952fb4e6da882931abd1824c092ed495dec"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fe43139b2c0fdc4a14d4f8d5b5d967f7a2777fd3d38ecf5b1ec669b0d7e43c21"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee0822ce1b8a14fe5a066f93edd20aada932acfe348bede8aa2149f1a4489512"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a0dbcb1c2d8f2ab6e0a81c6699b236932bd264d4cef1ac475858d16c403de74d"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a2014a2b18ad3ca53b1f6c23f8cd94a18ce930c1837bd891262c182640eb40a6"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f6ae86d5cb647bf58f9f655fcf577f713915a5d69057a0371bc257e2553234"}, - {file = "watchfiles-1.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1a7bac2bde1d661fb31f4d4e8e539e178774b76db3c2c17c4bb3e960a5de07a2"}, - {file = "watchfiles-1.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ab626da2fc1ac277bbf752446470b367f84b50295264d2d313e28dc4405d663"}, - {file = "watchfiles-1.0.5-cp312-cp312-win32.whl", hash = "sha256:9f4571a783914feda92018ef3901dab8caf5b029325b5fe4558c074582815249"}, - {file = "watchfiles-1.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:360a398c3a19672cf93527f7e8d8b60d8275119c5d900f2e184d32483117a705"}, - {file = "watchfiles-1.0.5-cp312-cp312-win_arm64.whl", hash = "sha256:1a2902ede862969077b97523987c38db28abbe09fb19866e711485d9fbf0d417"}, - {file = "watchfiles-1.0.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0b289572c33a0deae62daa57e44a25b99b783e5f7aed81b314232b3d3c81a11d"}, - {file = "watchfiles-1.0.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a056c2f692d65bf1e99c41045e3bdcaea3cb9e6b5a53dcaf60a5f3bd95fc9763"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9dca99744991fc9850d18015c4f0438865414e50069670f5f7eee08340d8b40"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:894342d61d355446d02cd3988a7326af344143eb33a2fd5d38482a92072d9563"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab44e1580924d1ffd7b3938e02716d5ad190441965138b4aa1d1f31ea0877f04"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6f9367b132078b2ceb8d066ff6c93a970a18c3029cea37bfd7b2d3dd2e5db8f"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2e55a9b162e06e3f862fb61e399fe9f05d908d019d87bf5b496a04ef18a970a"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0125f91f70e0732a9f8ee01e49515c35d38ba48db507a50c5bdcad9503af5827"}, - {file = "watchfiles-1.0.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:13bb21f8ba3248386337c9fa51c528868e6c34a707f729ab041c846d52a0c69a"}, - {file = "watchfiles-1.0.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:839ebd0df4a18c5b3c1b890145b5a3f5f64063c2a0d02b13c76d78fe5de34936"}, - {file = "watchfiles-1.0.5-cp313-cp313-win32.whl", hash = "sha256:4a8ec1e4e16e2d5bafc9ba82f7aaecfeec990ca7cd27e84fb6f191804ed2fcfc"}, - {file = "watchfiles-1.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:f436601594f15bf406518af922a89dcaab416568edb6f65c4e5bbbad1ea45c11"}, - {file = "watchfiles-1.0.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2cfb371be97d4db374cba381b9f911dd35bb5f4c58faa7b8b7106c8853e5d225"}, - {file = "watchfiles-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a3904d88955fda461ea2531fcf6ef73584ca921415d5cfa44457a225f4a42bc1"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b7a21715fb12274a71d335cff6c71fe7f676b293d322722fe708a9ec81d91f5"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dfd6ae1c385ab481766b3c61c44aca2b3cd775f6f7c0fa93d979ddec853d29d5"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b659576b950865fdad31fa491d31d37cf78b27113a7671d39f919828587b429b"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1909e0a9cd95251b15bff4261de5dd7550885bd172e3536824bf1cf6b121e200"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:832ccc221927c860e7286c55c9b6ebcc0265d5e072f49c7f6456c7798d2b39aa"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85fbb6102b3296926d0c62cfc9347f6237fb9400aecd0ba6bbda94cae15f2b3b"}, - {file = "watchfiles-1.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:15ac96dd567ad6c71c71f7b2c658cb22b7734901546cd50a475128ab557593ca"}, - {file = "watchfiles-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4b6227351e11c57ae997d222e13f5b6f1f0700d84b8c52304e8675d33a808382"}, - {file = "watchfiles-1.0.5-cp39-cp39-win32.whl", hash = "sha256:974866e0db748ebf1eccab17862bc0f0303807ed9cda465d1324625b81293a18"}, - {file = "watchfiles-1.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:9848b21ae152fe79c10dd0197304ada8f7b586d3ebc3f27f43c506e5a52a863c"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f59b870db1f1ae5a9ac28245707d955c8721dd6565e7f411024fa374b5362d1d"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9475b0093767e1475095f2aeb1d219fb9664081d403d1dff81342df8cd707034"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc533aa50664ebd6c628b2f30591956519462f5d27f951ed03d6c82b2dfd9965"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fed1cd825158dcaae36acce7b2db33dcbfd12b30c34317a88b8ed80f0541cc57"}, - {file = "watchfiles-1.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:554389562c29c2c182e3908b149095051f81d28c2fec79ad6c8997d7d63e0009"}, - {file = "watchfiles-1.0.5-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a74add8d7727e6404d5dc4dcd7fac65d4d82f95928bbee0cf5414c900e86773e"}, - {file = "watchfiles-1.0.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb1489f25b051a89fae574505cc26360c8e95e227a9500182a7fe0afcc500ce0"}, - {file = "watchfiles-1.0.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0901429650652d3f0da90bad42bdafc1f9143ff3605633c455c999a2d786cac"}, - {file = "watchfiles-1.0.5.tar.gz", hash = "sha256:b7529b5dcc114679d43827d8c35a07c493ad6f083633d573d81c660abc5979e9"}, + {file = "watchfiles-1.1.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:27f30e14aa1c1e91cb653f03a63445739919aef84c8d2517997a83155e7a2fcc"}, + {file = "watchfiles-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3366f56c272232860ab45c77c3ca7b74ee819c8e1f6f35a7125556b198bbc6df"}, + {file = "watchfiles-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8412eacef34cae2836d891836a7fff7b754d6bcac61f6c12ba5ca9bc7e427b68"}, + {file = "watchfiles-1.1.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df670918eb7dd719642e05979fc84704af913d563fd17ed636f7c4783003fdcc"}, + {file = "watchfiles-1.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7642b9bc4827b5518ebdb3b82698ada8c14c7661ddec5fe719f3e56ccd13c97"}, + {file = "watchfiles-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:199207b2d3eeaeb80ef4411875a6243d9ad8bc35b07fc42daa6b801cc39cc41c"}, + {file = "watchfiles-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a479466da6db5c1e8754caee6c262cd373e6e6c363172d74394f4bff3d84d7b5"}, + {file = "watchfiles-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:935f9edd022ec13e447e5723a7d14456c8af254544cefbc533f6dd276c9aa0d9"}, + {file = "watchfiles-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8076a5769d6bdf5f673a19d51da05fc79e2bbf25e9fe755c47595785c06a8c72"}, + {file = "watchfiles-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86b1e28d4c37e89220e924305cd9f82866bb0ace666943a6e4196c5df4d58dcc"}, + {file = "watchfiles-1.1.0-cp310-cp310-win32.whl", hash = "sha256:d1caf40c1c657b27858f9774d5c0e232089bca9cb8ee17ce7478c6e9264d2587"}, + {file = "watchfiles-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:a89c75a5b9bc329131115a409d0acc16e8da8dfd5867ba59f1dd66ae7ea8fa82"}, + {file = "watchfiles-1.1.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c9649dfc57cc1f9835551deb17689e8d44666315f2e82d337b9f07bd76ae3aa2"}, + {file = "watchfiles-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:406520216186b99374cdb58bc48e34bb74535adec160c8459894884c983a149c"}, + {file = "watchfiles-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45350fd1dc75cd68d3d72c47f5b513cb0578da716df5fba02fff31c69d5f2d"}, + {file = "watchfiles-1.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11ee4444250fcbeb47459a877e5e80ed994ce8e8d20283857fc128be1715dac7"}, + {file = "watchfiles-1.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bda8136e6a80bdea23e5e74e09df0362744d24ffb8cd59c4a95a6ce3d142f79c"}, + {file = "watchfiles-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b915daeb2d8c1f5cee4b970f2e2c988ce6514aace3c9296e58dd64dc9aa5d575"}, + {file = "watchfiles-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed8fc66786de8d0376f9f913c09e963c66e90ced9aa11997f93bdb30f7c872a8"}, + {file = "watchfiles-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe4371595edf78c41ef8ac8df20df3943e13defd0efcb732b2e393b5a8a7a71f"}, + {file = "watchfiles-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b7c5f6fe273291f4d414d55b2c80d33c457b8a42677ad14b4b47ff025d0893e4"}, + {file = "watchfiles-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7738027989881e70e3723c75921f1efa45225084228788fc59ea8c6d732eb30d"}, + {file = "watchfiles-1.1.0-cp311-cp311-win32.whl", hash = "sha256:622d6b2c06be19f6e89b1d951485a232e3b59618def88dbeda575ed8f0d8dbf2"}, + {file = "watchfiles-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:48aa25e5992b61debc908a61ab4d3f216b64f44fdaa71eb082d8b2de846b7d12"}, + {file = "watchfiles-1.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:00645eb79a3faa70d9cb15c8d4187bb72970b2470e938670240c7998dad9f13a"}, + {file = "watchfiles-1.1.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9dc001c3e10de4725c749d4c2f2bdc6ae24de5a88a339c4bce32300a31ede179"}, + {file = "watchfiles-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9ba68ec283153dead62cbe81872d28e053745f12335d037de9cbd14bd1877f5"}, + {file = "watchfiles-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130fc497b8ee68dce163e4254d9b0356411d1490e868bd8790028bc46c5cc297"}, + {file = "watchfiles-1.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50a51a90610d0845a5931a780d8e51d7bd7f309ebc25132ba975aca016b576a0"}, + {file = "watchfiles-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc44678a72ac0910bac46fa6a0de6af9ba1355669b3dfaf1ce5f05ca7a74364e"}, + {file = "watchfiles-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a543492513a93b001975ae283a51f4b67973662a375a403ae82f420d2c7205ee"}, + {file = "watchfiles-1.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ac164e20d17cc285f2b94dc31c384bc3aa3dd5e7490473b3db043dd70fbccfd"}, + {file = "watchfiles-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7590d5a455321e53857892ab8879dce62d1f4b04748769f5adf2e707afb9d4f"}, + {file = "watchfiles-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:37d3d3f7defb13f62ece99e9be912afe9dd8a0077b7c45ee5a57c74811d581a4"}, + {file = "watchfiles-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7080c4bb3efd70a07b1cc2df99a7aa51d98685be56be6038c3169199d0a1c69f"}, + {file = "watchfiles-1.1.0-cp312-cp312-win32.whl", hash = "sha256:cbcf8630ef4afb05dc30107bfa17f16c0896bb30ee48fc24bf64c1f970f3b1fd"}, + {file = "watchfiles-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:cbd949bdd87567b0ad183d7676feb98136cde5bb9025403794a4c0db28ed3a47"}, + {file = "watchfiles-1.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:0a7d40b77f07be87c6faa93d0951a0fcd8cbca1ddff60a1b65d741bac6f3a9f6"}, + {file = "watchfiles-1.1.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5007f860c7f1f8df471e4e04aaa8c43673429047d63205d1630880f7637bca30"}, + {file = "watchfiles-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:20ecc8abbd957046f1fe9562757903f5eaf57c3bce70929fda6c7711bb58074a"}, + {file = "watchfiles-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2f0498b7d2a3c072766dba3274fe22a183dbea1f99d188f1c6c72209a1063dc"}, + {file = "watchfiles-1.1.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:239736577e848678e13b201bba14e89718f5c2133dfd6b1f7846fa1b58a8532b"}, + {file = "watchfiles-1.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eff4b8d89f444f7e49136dc695599a591ff769300734446c0a86cba2eb2f9895"}, + {file = "watchfiles-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12b0a02a91762c08f7264e2e79542f76870c3040bbc847fb67410ab81474932a"}, + {file = "watchfiles-1.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29e7bc2eee15cbb339c68445959108803dc14ee0c7b4eea556400131a8de462b"}, + {file = "watchfiles-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9481174d3ed982e269c090f780122fb59cee6c3796f74efe74e70f7780ed94c"}, + {file = "watchfiles-1.1.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:80f811146831c8c86ab17b640801c25dc0a88c630e855e2bef3568f30434d52b"}, + {file = "watchfiles-1.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:60022527e71d1d1fda67a33150ee42869042bce3d0fcc9cc49be009a9cded3fb"}, + {file = "watchfiles-1.1.0-cp313-cp313-win32.whl", hash = "sha256:32d6d4e583593cb8576e129879ea0991660b935177c0f93c6681359b3654bfa9"}, + {file = "watchfiles-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:f21af781a4a6fbad54f03c598ab620e3a77032c5878f3d780448421a6e1818c7"}, + {file = "watchfiles-1.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:5366164391873ed76bfdf618818c82084c9db7fac82b64a20c44d335eec9ced5"}, + {file = "watchfiles-1.1.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:17ab167cca6339c2b830b744eaf10803d2a5b6683be4d79d8475d88b4a8a4be1"}, + {file = "watchfiles-1.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:328dbc9bff7205c215a7807da7c18dce37da7da718e798356212d22696404339"}, + {file = "watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7208ab6e009c627b7557ce55c465c98967e8caa8b11833531fdf95799372633"}, + {file = "watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8f6f72974a19efead54195bc9bed4d850fc047bb7aa971268fd9a8387c89011"}, + {file = "watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d181ef50923c29cf0450c3cd47e2f0557b62218c50b2ab8ce2ecaa02bd97e670"}, + {file = "watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adb4167043d3a78280d5d05ce0ba22055c266cf8655ce942f2fb881262ff3cdf"}, + {file = "watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5701dc474b041e2934a26d31d39f90fac8a3dee2322b39f7729867f932b1d4"}, + {file = "watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b067915e3c3936966a8607f6fe5487df0c9c4afb85226613b520890049deea20"}, + {file = "watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:9c733cda03b6d636b4219625a4acb5c6ffb10803338e437fb614fef9516825ef"}, + {file = "watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:cc08ef8b90d78bfac66f0def80240b0197008e4852c9f285907377b2947ffdcb"}, + {file = "watchfiles-1.1.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9974d2f7dc561cce3bb88dfa8eb309dab64c729de85fba32e98d75cf24b66297"}, + {file = "watchfiles-1.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c68e9f1fcb4d43798ad8814c4c1b61547b014b667216cb754e606bfade587018"}, + {file = "watchfiles-1.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95ab1594377effac17110e1352989bdd7bdfca9ff0e5eeccd8c69c5389b826d0"}, + {file = "watchfiles-1.1.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fba9b62da882c1be1280a7584ec4515d0a6006a94d6e5819730ec2eab60ffe12"}, + {file = "watchfiles-1.1.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3434e401f3ce0ed6b42569128b3d1e3af773d7ec18751b918b89cd49c14eaafb"}, + {file = "watchfiles-1.1.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa257a4d0d21fcbca5b5fcba9dca5a78011cb93c0323fb8855c6d2dfbc76eb77"}, + {file = "watchfiles-1.1.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fd1b3879a578a8ec2076c7961076df540b9af317123f84569f5a9ddee64ce92"}, + {file = "watchfiles-1.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc7a30eeb0e20ecc5f4bd113cd69dcdb745a07c68c0370cea919f373f65d9e"}, + {file = "watchfiles-1.1.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:891c69e027748b4a73847335d208e374ce54ca3c335907d381fde4e41661b13b"}, + {file = "watchfiles-1.1.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:12fe8eaffaf0faa7906895b4f8bb88264035b3f0243275e0bf24af0436b27259"}, + {file = "watchfiles-1.1.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:bfe3c517c283e484843cb2e357dd57ba009cff351edf45fb455b5fbd1f45b15f"}, + {file = "watchfiles-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a9ccbf1f129480ed3044f540c0fdbc4ee556f7175e5ab40fe077ff6baf286d4e"}, + {file = "watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba0e3255b0396cac3cc7bbace76404dd72b5438bf0d8e7cefa2f79a7f3649caa"}, + {file = "watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4281cd9fce9fc0a9dbf0fc1217f39bf9cf2b4d315d9626ef1d4e87b84699e7e8"}, + {file = "watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d2404af8db1329f9a3c9b79ff63e0ae7131986446901582067d9304ae8aaf7f"}, + {file = "watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e78b6ed8165996013165eeabd875c5dfc19d41b54f94b40e9fff0eb3193e5e8e"}, + {file = "watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:249590eb75ccc117f488e2fabd1bfa33c580e24b96f00658ad88e38844a040bb"}, + {file = "watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05686b5487cfa2e2c28ff1aa370ea3e6c5accfe6435944ddea1e10d93872147"}, + {file = "watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d0e10e6f8f6dc5762adee7dece33b722282e1f59aa6a55da5d493a97282fedd8"}, + {file = "watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:af06c863f152005c7592df1d6a7009c836a247c9d8adb78fef8575a5a98699db"}, + {file = "watchfiles-1.1.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:865c8e95713744cf5ae261f3067861e9da5f1370ba91fc536431e29b418676fa"}, + {file = "watchfiles-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42f92befc848bb7a19658f21f3e7bae80d7d005d13891c62c2cd4d4d0abb3433"}, + {file = "watchfiles-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa0cc8365ab29487eb4f9979fd41b22549853389e22d5de3f134a6796e1b05a4"}, + {file = "watchfiles-1.1.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:90ebb429e933645f3da534c89b29b665e285048973b4d2b6946526888c3eb2c7"}, + {file = "watchfiles-1.1.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c588c45da9b08ab3da81d08d7987dae6d2a3badd63acdb3e206a42dbfa7cb76f"}, + {file = "watchfiles-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7c55b0f9f68590115c25272b06e63f0824f03d4fc7d6deed43d8ad5660cabdbf"}, + {file = "watchfiles-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd17a1e489f02ce9117b0de3c0b1fab1c3e2eedc82311b299ee6b6faf6c23a29"}, + {file = "watchfiles-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da71945c9ace018d8634822f16cbc2a78323ef6c876b1d34bbf5d5222fd6a72e"}, + {file = "watchfiles-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:51556d5004887045dba3acdd1fdf61dddea2be0a7e18048b5e853dcd37149b86"}, + {file = "watchfiles-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04e4ed5d1cd3eae68c89bcc1a485a109f39f2fd8de05f705e98af6b5f1861f1f"}, + {file = "watchfiles-1.1.0-cp39-cp39-win32.whl", hash = "sha256:c600e85f2ffd9f1035222b1a312aff85fd11ea39baff1d705b9b047aad2ce267"}, + {file = "watchfiles-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:3aba215958d88182e8d2acba0fdaf687745180974946609119953c0e112397dc"}, + {file = "watchfiles-1.1.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3a6fd40bbb50d24976eb275ccb55cd1951dfb63dbc27cae3066a6ca5f4beabd5"}, + {file = "watchfiles-1.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9f811079d2f9795b5d48b55a37aa7773680a5659afe34b54cc1d86590a51507d"}, + {file = "watchfiles-1.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2726d7bfd9f76158c84c10a409b77a320426540df8c35be172444394b17f7ea"}, + {file = "watchfiles-1.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df32d59cb9780f66d165a9a7a26f19df2c7d24e3bd58713108b41d0ff4f929c6"}, + {file = "watchfiles-1.1.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0ece16b563b17ab26eaa2d52230c9a7ae46cf01759621f4fbbca280e438267b3"}, + {file = "watchfiles-1.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:51b81e55d40c4b4aa8658427a3ee7ea847c591ae9e8b81ef94a90b668999353c"}, + {file = "watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2bcdc54ea267fe72bfc7d83c041e4eb58d7d8dc6f578dfddb52f037ce62f432"}, + {file = "watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:923fec6e5461c42bd7e3fd5ec37492c6f3468be0499bc0707b4bbbc16ac21792"}, + {file = "watchfiles-1.1.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7b3443f4ec3ba5aa00b0e9fa90cf31d98321cbff8b925a7c7b84161619870bc9"}, + {file = "watchfiles-1.1.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7049e52167fc75fc3cc418fc13d39a8e520cbb60ca08b47f6cedb85e181d2f2a"}, + {file = "watchfiles-1.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54062ef956807ba806559b3c3d52105ae1827a0d4ab47b621b31132b6b7e2866"}, + {file = "watchfiles-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a7bd57a1bb02f9d5c398c0c1675384e7ab1dd39da0ca50b7f09af45fa435277"}, + {file = "watchfiles-1.1.0.tar.gz", hash = "sha256:693ed7ec72cbfcee399e92c895362b6e66d63dac6b91e2c11ae03d10d503e575"}, ] [package.dependencies] From 1b6d85884b95dd0b4932a07088915950c484fc2f Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 12:54:43 +0100 Subject: [PATCH 088/107] complements authentication changes --- docs/source/installation/authentication.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/installation/authentication.md b/docs/source/installation/authentication.md index 16e650f..851de15 100644 --- a/docs/source/installation/authentication.md +++ b/docs/source/installation/authentication.md @@ -9,8 +9,8 @@ There are two main use cases for authentication: ```{note} The Authentication framework currently only works with the following modules: -* Generic Extractor -* Screenshot Enricher +* [Generic Extractor](../modules/autogen/extractor/generic_extractor.md) - the main module for extracting content from websites +* [Antibot Extractor/Enricher](../modules/autogen/extractor/antibot_extractor_enricher.md) To authenticate for WACZ archiving, see the instructions on the [](../modules/autogen/enricher/wacz_extractor_enricher.md) page. ``` @@ -34,7 +34,7 @@ You can save your authentication information directly inside your orchestration ```{note} -The Username & Password, and API settings only work with the Generic Extractor. Other modules (like the screenshot enricher) can only use the `cookies` options. Furthermore, many sites can still detect bots and block username/password logins. Twitter/X and YouTube are two prominent ones that block username/password logging. +Currently, the Username & Password, and API settings only work with the Generic and Antibot Extractors. Furthermore, many sites can still detect bots and block username/password logins. Twitter/X and YouTube are two prominent ones that block username/password logging. One of the 'Cookies' options is recommended for the most robust archiving, but it still isn't guaranteed to work. ``` From 8067da0f608fc7bddfa18abd08e2f3b239113a6b Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 13:15:13 +0100 Subject: [PATCH 089/107] custom user to its own file --- .../ubuntu_24_server_install.md | 160 ++++++++++++++++++ docs/source/installation/installation.md | 159 +---------------- 2 files changed, 162 insertions(+), 157 deletions(-) create mode 100644 docs/source/installation/example_scripts/ubuntu_24_server_install.md diff --git a/docs/source/installation/example_scripts/ubuntu_24_server_install.md b/docs/source/installation/example_scripts/ubuntu_24_server_install.md new file mode 100644 index 0000000..ea31519 --- /dev/null +++ b/docs/source/installation/example_scripts/ubuntu_24_server_install.md @@ -0,0 +1,160 @@ + +### Bash script for Ubuntu 24 Server install + +> NOTE: this script has not been tested by the maintainers and results from the personal experience of a user. It is meant as a guide and not an out of the box script, as you will see it's aimed at a custom branches, users, and features like the Geckodriver which are removed as of version 1.0.2. + +This acts as a handy guide on all requirements. This is built and tested on the 29th of May 2025 on Ubuntu Server 24.04.2 LTS (which is the current latest LTS) + +```bash +#!/bin/sh + +# I usually run steps manually as logged in with the user: dave +# which the application runs under which makes debugging easier + +cd ~ +sudo apt update -y +sudo apt upgrade -y + +# Clone only my latest branch +git clone -b v1-test --single-branch https://github.com/djhmateer/auto-archiver + +mkdir ~/auto-archiver/secrets +sudo chown -R dave ~/auto-archiver + +sudo apt update -y +sudo apt upgrade -y + +## Python 3.12.3 comes with Ubuntu 24.04.2 + +# Poetry install 2.1.3 on 2nd June 25 +curl -sSL https://install.python-poetry.org | python3 - + +# had to restart here.. +sudo reboot + +# C++ compiler so pdqhash will install next +sudo apt install build-essential python3-dev -y + +cd auto-archiver + +poetry install + +# FFMpeg +# 6.1.1-3ubuntu5 on 2nd June 25 +sudo apt install ffmpeg -y + +## Firefox +# 139.0+build2-0ubuntu0.24.04.1~mt1 on 2nd Jun 25 +# 16th Jun - don't need anymore as using Chrome in antibot +# cd ~ +# sudo add-apt-repository ppa:mozillateam/ppa -y + +# echo ' +# Package: * +# Pin: release o=LP-PPA-mozillateam +# Pin-Priority: 1001 +# ' | sudo tee /etc/apt/preferences.d/mozilla-firefox + +# echo 'Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:${distro_codename}";' | sudo tee /etc/apt/apt.conf.d/51unattended-upgrades-firefox + +# sudo apt install firefox -y + +wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb + +# Chrome +cd ~ +# got problems here - fixed below +# 137.0.7151.103 on 16th Jun 2025 +sudo dpkg -i google-chrome-stable_current_amd64.deb + +# fix dependencies on install above +sudo apt-get install -f + +# had to click a lot on UI to get going. +# to test +# google-chrome + +## Gecko driver +# check version numbers for new ones +# https://github.com/mozilla/geckodriver/releases/ +wget https://github.com/mozilla/geckodriver/releases/download/v0.36.0/geckodriver-v0.36.0-linux64.tar.gz +tar -xvzf geckodriver* +chmod +x geckodriver +sudo mv geckodriver /usr/local/bin/ +rm geckodriver* + +# Fonts so selenium via firefox can render other languages eg Burmese +sudo apt install fonts-noto -y + +# Docker +# Add Docker's official GPG key: +sudo apt-get update -y +sudo apt-get install ca-certificates curl -y +sudo install -m 0755 -d /etc/apt/keyrings +sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc +sudo chmod a+r /etc/apt/keyrings/docker.asc + +# Add the repository to Apt sources: +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ + $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +sudo apt-get update -y + +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y + +# add dave user to docker group +sudo usermod -aG docker $USER + +# reboot otherwise can't pull images + +# https://github.com/webrecorder/browsertrix-crawler +# https://hub.docker.com/r/webrecorder/browsertrix-crawler/tags +# 1.6.2 on 4th Jun 2025 +docker pull webrecorder/browsertrix-crawler:latest + +# exif +sudo apt install libimage-exiftool-perl -y + + +## CRON run every minute +# the cron job running as user dave will execute the shell script +# I have many scripts running from cron_11 upwards. +# patch in the correct number +sudo chmod +x ~/auto-archiver/scripts/cron_15.sh + +# don't want service to run until a reboot otherwise problems with Gecko driver +sudo service cron stop + +# runs the script every minute +# notice put in a # to disable so will have to manually start it. +cat <> run-auto-archive +#*/1 * * * * dave /home/dave/auto-archiver/scripts/cron_15.sh +EOT + +sudo mv run-auto-archive /etc/cron.d +sudo chown root /etc/cron.d/run-auto-archive +sudo chmod 600 /etc/cron.d/run-auto-archive + +# Helper alias 'c' to open the above file +echo "alias c='sudo vim /etc/cron.d/run-auto-archive'" >> ~/.bashrc + +# secrets folder copy +# I run dev from: +# \\wsl.localhost\Ubuntu-24.04\home\dave\code\auto-archiver\secrets\ + +# orchestration.yaml - for aa config +# service_account - for google spreadsheet +# anon.session - for telethon so don't have to type in phone number +# profile.tar.gz - for wacz to have a logged in profile for facebook, x.com and instagram to get data + +# Youtube - POT Tokens +# https://github.com/Brainicism/bgutil-ytdlp-pot-provider +docker run --name bgutil-provider --restart unless-stopped -d -p 4416:4416 brainicism/bgutil-ytdlp-pot-provider + + +# test run +cd ~/auto-archiver + +poetry run python src/auto_archiver --config secrets/orchestration-aa-demo-main.yaml +``` diff --git a/docs/source/installation/installation.md b/docs/source/installation/installation.md index 38d955b..1bc67a4 100644 --- a/docs/source/installation/installation.md +++ b/docs/source/installation/installation.md @@ -55,164 +55,9 @@ If using the local installation method, you will also need to install the follow 3. (optional) [fonts-noto](https://fonts.google.com/noto) to deal with multiple unicode characters during selenium screenshots: `sudo apt install fonts-noto -y`. 4. [Browsertrix Crawler docker image](https://hub.docker.com/r/webrecorder/browsertrix-crawler) for the WACZ enricher/archiver -### Bash script for Ubuntu 24 Server install - -This acts as a handy guide on all requirements. This is built and tested on the 29th of May 2025 on Ubuntu Server 24.04.2 LTS (which is the current latest LTS) - -```bash -#!/bin/sh - -# I usually run steps manually as logged in with the user: dave -# which the application runs under which makes debugging easier - -cd ~ -sudo apt update -y -sudo apt upgrade -y - -# Clone only my latest branch -git clone -b v1-test --single-branch https://github.com/djhmateer/auto-archiver - -mkdir ~/auto-archiver/secrets -sudo chown -R dave ~/auto-archiver - -sudo apt update -y -sudo apt upgrade -y - -## Python 3.12.3 comes with Ubuntu 24.04.2 - -# Poetry install 2.1.3 on 2nd June 25 -curl -sSL https://install.python-poetry.org | python3 - - -# had to restart here.. -sudo reboot - -# C++ compiler so pdqhash will install next -sudo apt install build-essential python3-dev -y - -cd auto-archiver - -poetry install - -# FFMpeg -# 6.1.1-3ubuntu5 on 2nd June 25 -sudo apt install ffmpeg -y - -## Firefox -# 139.0+build2-0ubuntu0.24.04.1~mt1 on 2nd Jun 25 -# 16th Jun - don't need anymore as using Chrome in antibot -# cd ~ -# sudo add-apt-repository ppa:mozillateam/ppa -y - -# echo ' -# Package: * -# Pin: release o=LP-PPA-mozillateam -# Pin-Priority: 1001 -# ' | sudo tee /etc/apt/preferences.d/mozilla-firefox - -# echo 'Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:${distro_codename}";' | sudo tee /etc/apt/apt.conf.d/51unattended-upgrades-firefox - -# sudo apt install firefox -y - -wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb - -# Chrome -cd ~ -# got problems here - fixed below -# 137.0.7151.103 on 16th Jun 2025 -sudo dpkg -i google-chrome-stable_current_amd64.deb - -# fix dependencies on install above -sudo apt-get install -f - -# had to click a lot on UI to get going. -# to test -# google-chrome - -## Gecko driver -# check version numbers for new ones -# https://github.com/mozilla/geckodriver/releases/ -wget https://github.com/mozilla/geckodriver/releases/download/v0.36.0/geckodriver-v0.36.0-linux64.tar.gz -tar -xvzf geckodriver* -chmod +x geckodriver -sudo mv geckodriver /usr/local/bin/ -rm geckodriver* - -# Fonts so selenium via firefox can render other languages eg Burmese -sudo apt install fonts-noto -y - -# Docker -# Add Docker's official GPG key: -sudo apt-get update -y -sudo apt-get install ca-certificates curl -y -sudo install -m 0755 -d /etc/apt/keyrings -sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc -sudo chmod a+r /etc/apt/keyrings/docker.asc - -# Add the repository to Apt sources: -echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ - $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ - sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - -sudo apt-get update -y - -sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y - -# add dave user to docker group -sudo usermod -aG docker $USER - -# reboot otherwise can't pull images - -# https://github.com/webrecorder/browsertrix-crawler -# https://hub.docker.com/r/webrecorder/browsertrix-crawler/tags -# 1.6.2 on 4th Jun 2025 -docker pull webrecorder/browsertrix-crawler:latest - -# exif -sudo apt install libimage-exiftool-perl -y - - -## CRON run every minute -# the cron job running as user dave will execute the shell script -# I have many scripts running from cron_11 upwards. -# patch in the correct number -sudo chmod +x ~/auto-archiver/scripts/cron_15.sh - -# don't want service to run until a reboot otherwise problems with Gecko driver -sudo service cron stop - -# runs the script every minute -# notice put in a # to disable so will have to manually start it. -cat <> run-auto-archive -#*/1 * * * * dave /home/dave/auto-archiver/scripts/cron_15.sh -EOT - -sudo mv run-auto-archive /etc/cron.d -sudo chown root /etc/cron.d/run-auto-archive -sudo chmod 600 /etc/cron.d/run-auto-archive - -# Helper alias 'c' to open the above file -echo "alias c='sudo vim /etc/cron.d/run-auto-archive'" >> ~/.bashrc - -# secrets folder copy -# I run dev from: -# \\wsl.localhost\Ubuntu-24.04\home\dave\code\auto-archiver\secrets\ - -# orchestration.yaml - for aa config -# service_account - for google spreadsheet -# anon.session - for telethon so don't have to type in phone number -# profile.tar.gz - for wacz to have a logged in profile for facebook, x.com and instagram to get data - -# Youtube - POT Tokens -# https://github.com/Brainicism/bgutil-ytdlp-pot-provider -docker run --name bgutil-provider --restart unless-stopped -d -p 4416:4416 brainicism/bgutil-ytdlp-pot-provider - - -# test run -cd ~/auto-archiver - -poetry run python src/auto_archiver --config secrets/orchestration-aa-demo-main.yaml -``` +### Custom installation scripts +- [Ubuntu 24 Server Install by @djhmateer](example_scripts/ubuntu_24_server_install.md) - a WYSIWYG example script from a user who set up the Auto Archiver on a fresh Ubuntu 24 server. ## Developer Install From f0b876e67c5499168bf374d1e17b0d37af894c0e Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 13:16:36 +0100 Subject: [PATCH 090/107] removes dev specific instructions --- pyproject.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2299350..cdbb86b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,8 +4,6 @@ build-backend = "poetry.core.masonry.api" [project] name = "auto-archiver" -# to add a custom version use local versioning eg 1.1.0+dm.1 -# then poetry install version = "1.1.0" description = "Automatically archive links to videos, images, and social media content from Google Sheets (and more)." From 1b260788de5f4ba40f55764fa4d2dee04178673c Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 13:18:12 +0100 Subject: [PATCH 091/107] do not add commit comments to code --- src/auto_archiver/core/media.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/auto_archiver/core/media.py b/src/auto_archiver/core/media.py index 75fb366..2fad0ec 100644 --- a/src/auto_archiver/core/media.py +++ b/src/auto_archiver/core/media.py @@ -116,11 +116,6 @@ class Media: # self.is_video() should be used together with this method try: streams = ffmpeg.probe(self.filename, select_streams="v")["streams"] - # DM 27th May 2025 - # https://x.com/dave_mateer/status/1524341442738638848 - # shows this warning for the gif file - # Have changed to debug for now to clean up logs - # logger.warning(f"STREAMS FOR {self.filename} {streams}") logger.debug(f"STREAMS FOR {self.filename} {streams}") return any(s.get("duration_ts", 0) > 0 for s in streams) except Error: From 664ee8d037399431bfeef159d43e781ebabe47da Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 14:10:46 +0100 Subject: [PATCH 092/107] fixes bugs and limited configuration of multi-level logs --- docs/source/how_to/03_logging.md | 34 ++++++++++++++++------ src/auto_archiver/core/orchestrator.py | 40 ++++++++++++-------------- 2 files changed, 44 insertions(+), 30 deletions(-) diff --git a/docs/source/how_to/03_logging.md b/docs/source/how_to/03_logging.md index d88882d..c283b77 100644 --- a/docs/source/how_to/03_logging.md +++ b/docs/source/how_to/03_logging.md @@ -1,6 +1,6 @@ # Keeping Logs -Auto Archiver's logs can be helpful for debugging problematic archiving processes. This guide shows you how to use the logs to +Auto Archiver's logs can be helpful for debugging problematic archiving processes. This guide shows you how to use the logs configuration. ## Setting up logging @@ -8,10 +8,10 @@ Logging settings can be set on the command line or using the orchestration confi #### Enabling or Disabling Logging -Logging to the console is enabled by default. If you want to globally disable Auto Archiver's logging, then you can set `enabled: false` in your `logging` config: +Logging to the console is enabled by default. If you want to globally disable Auto Archiver's logging, then you can set `enabled: false` in your `logging` config file: ```{code} yaml - +:caption: orchestration.yaml ... logging: enabled: false @@ -24,7 +24,7 @@ This will disable all logs from Auto Archiver, but it does not disable logs for #### Logging Level -There are 7 logging levels in total, with 4 commonly used levels. They are: `DEBUG`, `INFO`, `WARNING` and `ERROR`. +There are 7 logging levels in total, with 5 of them used in this tool. They are: `DEBUG`, `INFO`, `SUCCESS`, `WARNING` and `ERROR`. Change the warning level by setting the value in your orchestration config file: @@ -44,7 +44,7 @@ For normal usage, it is recommended to use the `INFO` level, or if you prefer qu ### Logging to a file -As default, auto-archiver will log to the console. But if you wish to store your logs for future reference, or you are running the auto-archiver from within code a implementation, then you may with to enable file logging. This can be done by setting the `file:` config value in the logging settings. +As default, auto-archiver will log to the console. But if you wish to store your logs for future reference, or you are running the auto-archiver from within code a implementation, then you may wish to enable file logging. This can be done by setting the `file:` config value in the logging settings. **Rotation:** For file logging, you can choose to 'rotate' your log files (creating new log files) so they do not get too large. Change this by setting the 'rotation' option in your logging settings. For a full list of rotation options, see the [loguru docs](https://loguru.readthedocs.io/en/stable/overview.html#easier-file-logging-with-rotation-retention-compression). @@ -57,15 +57,33 @@ logging: rotation: 1 day ``` -### Full logging example +### Logging each level to a different file +If you want to log each level to a different file, you can do this by setting the `each_level_in_separate_file:` option to `true` and also setting your `file:` name, a new file will be created for each of the 5 levels used, by appending the `0_level` name to the file like so `your_file.log.1_error`. In this case the `level:` option is ignored, and all levels will be logged. -The below example logs only `WARNING` logs to the console and to the file `/my/file.log`, rotating that file once per week: ```{code} yaml :caption: orchestration.yaml logging: - level: WARNING + each_level_in_separate_file: true + file: /my/logs/file.log +``` +This will create the following files: +- `/my/logs/file.log.1_debug` +- `/my/logs/file.log.2_info` +- `/my/logs/file.log.3_success` +- `/my/logs/file.log.4_warning` +- `/my/logs/file.log.5_error` + +### Full logging example + +The below example logs only `DEBUG` logs to the console and to the file `/my/file.log`, rotating that file once per week: + +```{code} yaml +:caption: orchestration.yaml + +logging: + level: DEBUG file: /my/file.log rotation: 1 week ``` \ No newline at end of file diff --git a/src/auto_archiver/core/orchestrator.py b/src/auto_archiver/core/orchestrator.py index b45afc0..a028ac7 100644 --- a/src/auto_archiver/core/orchestrator.py +++ b/src/auto_archiver/core/orchestrator.py @@ -249,7 +249,7 @@ Here's how that would look: \n\nsteps:\n extractors:\n - [your_extractor_name_ action="store", dest="logging.level", choices=["INFO", "DEBUG", "ERROR", "WARNING"], - help="the logging level to use", + help="the logging level to use for the standard output and file logging", default="INFO", type=str.upper, ) @@ -268,7 +268,7 @@ Here's how that would look: \n\nsteps:\n extractors:\n - [your_extractor_name_ "--logging.each_level_in_separate_file", action="store", dest="logging.each_level_in_separate_file", - help="whether to write each logging level to a separate file", + help="if set, writes each logging level to a separate file (ignores --logging.level), you must also set --logging.file. Each level will have a dedicate logs file matching your .debug, .info, etc.", default=False, ) @@ -341,28 +341,24 @@ Here's how that would look: \n\nsteps:\n extractors:\n - [your_extractor_name_ # add other logging info if self.logger_id is None: # note - need direct comparison to None since need to consider falsy value 0 - self.logger_id = logger.add(sys.stderr, level=logging_config["level"]) + use_level = logging_config["level"] + self.logger_id = logger.add(sys.stderr, level=use_level) - # Default to False (above in parser code) - separate_file = logging_config["each_level_in_separate_file"] + rotation = logging_config["rotation"] + log_file = logging_config["file"] - # Default to None if not set - rotation=logging_config["rotation"] - - if separate_file: - logger.add("logs/1debug.log", level="DEBUG", rotation=rotation) - logger.add("logs/2info.log", level="INFO", rotation=rotation) - logger.add("logs/3success.log", level="SUCCESS", rotation=rotation) - logger.add("logs/4warning.log", level="WARNING", rotation=rotation) - logger.add("logs/5error.log", level="ERROR", rotation=rotation) - else: - log_file = logging_config["file"] - logger.add(log_file, rotation=rotation) - - # if log_file := logging_config["file"]: - # logger.add(log_file) if not logging_config["rotation"] else logger.add( - # log_file, rotation=logging_config["rotation"] - # ) + if logging_config.get("each_level_in_separate_file"): + assert logging_config["file"], ( + "You must set --logging.file if you want to use --logging.each_level_in_separate_file" + ) + for i, level in enumerate(["DEBUG", "INFO", "SUCCESS", "WARNING", "ERROR"], start=1): + logger.add( + f"{log_file}.{i}_{level.lower()}", + filter=lambda rec, lvl=level: rec["level"].name == lvl, + rotation=rotation, + ) + elif log_file: + logger.add(log_file, rotation=rotation, level=use_level) def install_modules(self, modules_by_type): """ From 2f1a07abbf3a5ab3cba763f8c05dc51bd8d5bd66 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 16:06:04 +0100 Subject: [PATCH 093/107] renaming and code improvements to json_e richer --- .../modules/json_enricher/__init__.py | 1 + .../modules/json_enricher/__manifest__.py | 16 ++++++++ .../json_enricher.py} | 14 +++---- .../metadata_json_enricher/__init__.py | 1 - .../metadata_json_enricher/__manifest__.py | 37 ------------------- 5 files changed, 23 insertions(+), 46 deletions(-) create mode 100644 src/auto_archiver/modules/json_enricher/__init__.py create mode 100644 src/auto_archiver/modules/json_enricher/__manifest__.py rename src/auto_archiver/modules/{metadata_json_enricher/metadata_json_enricher.py => json_enricher/json_enricher.py} (63%) delete mode 100644 src/auto_archiver/modules/metadata_json_enricher/__init__.py delete mode 100644 src/auto_archiver/modules/metadata_json_enricher/__manifest__.py diff --git a/src/auto_archiver/modules/json_enricher/__init__.py b/src/auto_archiver/modules/json_enricher/__init__.py new file mode 100644 index 0000000..5e0a04f --- /dev/null +++ b/src/auto_archiver/modules/json_enricher/__init__.py @@ -0,0 +1 @@ +from .json_enricher import JsonEnricher diff --git a/src/auto_archiver/modules/json_enricher/__manifest__.py b/src/auto_archiver/modules/json_enricher/__manifest__.py new file mode 100644 index 0000000..b80f493 --- /dev/null +++ b/src/auto_archiver/modules/json_enricher/__manifest__.py @@ -0,0 +1,16 @@ +{ + "name": "JSON Enricher", + "type": ["enricher"], + "requires_setup": True, + "dependencies": { + "python": ["loguru"], + }, + "configs": {}, + "description": """ + + Writes all archiving process metadata to a JSON file so it can be parsed by other tools. As this is an Enricher, it will not contain the final stored URLs. + + WARNING: The resulting JSON may reveal sensitive information about the computer and settings in which the archiving process was run. + + """, +} diff --git a/src/auto_archiver/modules/metadata_json_enricher/metadata_json_enricher.py b/src/auto_archiver/modules/json_enricher/json_enricher.py similarity index 63% rename from src/auto_archiver/modules/metadata_json_enricher/metadata_json_enricher.py rename to src/auto_archiver/modules/json_enricher/json_enricher.py index 312f922..b0900b6 100644 --- a/src/auto_archiver/modules/metadata_json_enricher/metadata_json_enricher.py +++ b/src/auto_archiver/modules/json_enricher/json_enricher.py @@ -5,17 +5,15 @@ import os from auto_archiver.core import Enricher from auto_archiver.core import Media, Metadata -class MetadataJsonEnricher(Enricher): - def __init__(self): - super().__init__() +class JsonEnricher(Enricher): def enrich(self, to_enrich: Metadata) -> None: url = to_enrich.get_url() - logger.debug(f"Metadata JSON Enricher for {url=}") + logger.debug(f"JSON Enricher for {url=}") - item_path = os.path.join(self.tmp_dir, f"metadata.json") + item_path = os.path.join(self.tmp_dir, "metadata.json") with open(item_path, mode="w", encoding="utf-8") as outf: - json.dump(to_enrich.to_dict(), outf, indent=4, default=str) - - to_enrich.add_media(Media(filename=item_path), id="metadata_json") \ No newline at end of file + json.dump(to_enrich.to_dict(), outf, indent=4, default=str, ensure_ascii=False) + + to_enrich.add_media(Media(filename=item_path), id="metadata_json") diff --git a/src/auto_archiver/modules/metadata_json_enricher/__init__.py b/src/auto_archiver/modules/metadata_json_enricher/__init__.py deleted file mode 100644 index 4eed90b..0000000 --- a/src/auto_archiver/modules/metadata_json_enricher/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .metadata_json_enricher import MetadataJsonEnricher \ No newline at end of file diff --git a/src/auto_archiver/modules/metadata_json_enricher/__manifest__.py b/src/auto_archiver/modules/metadata_json_enricher/__manifest__.py deleted file mode 100644 index b737b16..0000000 --- a/src/auto_archiver/modules/metadata_json_enricher/__manifest__.py +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "Metadata JSON Enricher", - "type": ["enricher"], - "requires_setup": True, - "dependencies": { - "python": ["loguru"], - }, - "configs": { - # "width": {"default": 1280, "type": "int", "help": "width of the screenshots"}, - # "height": {"default": 1024, "type": "int", "help": "height of the screenshots"}, - # "timeout": {"default": 60, "type": "int", "help": "timeout for taking the screenshot"}, - # "sleep_before_screenshot": { - # "default": 4, - # "type": "int", - # "help": "seconds to wait for the pages to load before taking screenshot", - # }, - # "http_proxy": { - # "default": "", - # "help": "http proxy to use for the webdriver, eg http://proxy-user:password@proxy-ip:port", - # }, - # "save_to_pdf": { - # "default": False, - # "type": "bool", - # "help": "save the page as pdf along with the screenshot. PDF saving options can be adjusted with the 'print_options' parameter", - # }, - # "print_options": { - # "default": {}, - # "help": "options to pass to the pdf printer, in JSON format. See https://www.selenium.dev/documentation/webdriver/interactions/print_page/ for more information", - # "type": "json_loader", - # }, - }, - "description": """ - - Writes all the metadata to a json file so can be parsed by other tools. - - """, -} From 33cca734d9ea4b9b953e0841470f9c2b65617613 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 16:06:25 +0100 Subject: [PATCH 094/107] original_url changes still constitute empty result --- src/auto_archiver/core/metadata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auto_archiver/core/metadata.py b/src/auto_archiver/core/metadata.py index bbb124d..370af78 100644 --- a/src/auto_archiver/core/metadata.py +++ b/src/auto_archiver/core/metadata.py @@ -96,7 +96,7 @@ class Metadata: def is_empty(self) -> bool: meaningfull_ids = set(self.metadata.keys()) - set( - ["_processed_at", "url", "total_bytes", "total_size", "archive_duration_seconds"] + ["_processed_at", "url", "original_url", "total_bytes", "total_size", "archive_duration_seconds"] ) return not self.is_success() and len(self.media) == 0 and len(meaningfull_ids) == 0 From 6085a66c584726769ea1d47cd2289924a7f569a9 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 16:10:24 +0100 Subject: [PATCH 095/107] revert metadata json renaming --- src/auto_archiver/core/storage.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/auto_archiver/core/storage.py b/src/auto_archiver/core/storage.py index feb3d5f..3205f5a 100644 --- a/src/auto_archiver/core/storage.py +++ b/src/auto_archiver/core/storage.py @@ -100,12 +100,7 @@ class Storage(BaseModule): # Handle filename_generator logic filename_generator = self.filename_generator - # DM 9th Jun 25 - special case for metadata.json file in metadata_json_enricher - # where we want the filename to remain metadata.json - # TODO - should this be a config option to keep the original filename? Is it useful anywhere else? - if filename.endswith('metadata'): - filename = 'metadata' - elif filename_generator == "random": + if filename_generator == "random": filename = random_str(24) elif filename_generator == "static": # load the hash_enricher module From f53b2075ba61f21d7c80deba459a8e6c05c4cc80 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 18:45:55 +0100 Subject: [PATCH 096/107] fixes gdrive error --- .../modules/gdrive_storage/gdrive_storage.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/auto_archiver/modules/gdrive_storage/gdrive_storage.py b/src/auto_archiver/modules/gdrive_storage/gdrive_storage.py index 02ec427..50ce244 100644 --- a/src/auto_archiver/modules/gdrive_storage/gdrive_storage.py +++ b/src/auto_archiver/modules/gdrive_storage/gdrive_storage.py @@ -93,13 +93,18 @@ class GDriveStorage(Storage): # upload file to gd logger.debug(f"uploading {filename=} to folder id {upload_to}") file_metadata = {"name": [filename], "parents": [upload_to]} - media = MediaFileUpload(media.filename, resumable=True) - gd_file = ( - self.service.files() - .create(supportsAllDrives=True, body=file_metadata, media_body=media, fields="id") - .execute() - ) - logger.debug(f"uploadf: uploaded file {gd_file['id']} successfully in folder={upload_to}") + try: + media = MediaFileUpload(media.filename, resumable=True) + gd_file = ( + self.service.files() + .create(supportsAllDrives=True, body=file_metadata, media_body=media, fields="id") + .execute() + ) + logger.debug(f"uploadf: uploaded file {gd_file['id']} successfully in folder={upload_to}") + except FileNotFoundError as e: + logger.error(f"gd uploadf: file not found {media.filename=} - {e}") + except Exception as e: + logger.error(f"gd uploadf: error uploading {media.filename=} to {upload_to} - {e}") # must be implemented even if unused def uploadf(self, file: IO[bytes], key: str, **kwargs: dict) -> bool: From f19fb575a75b8b43011505312ad7a0ed52be79d8 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 18:50:54 +0100 Subject: [PATCH 097/107] logging updates --- .../modules/generic_extractor/generic_extractor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/auto_archiver/modules/generic_extractor/generic_extractor.py b/src/auto_archiver/modules/generic_extractor/generic_extractor.py index 6107099..a65c5fe 100644 --- a/src/auto_archiver/modules/generic_extractor/generic_extractor.py +++ b/src/auto_archiver/modules/generic_extractor/generic_extractor.py @@ -375,7 +375,7 @@ class GenericExtractor(Extractor): if "entries" in data: entries = data.get("entries", []) if not len(entries): - logger.warning("YoutubeDLArchiver could not find any video") + logger.info("YoutubeDLArchiver could not find any video") return False else: entries = [data] @@ -409,7 +409,7 @@ class GenericExtractor(Extractor): except Exception as e: logger.error(f"Error processing entry {entry}: {e}") if not len(result.media): - logger.warning(f"No media found for entry {entry}, skipping.") + logger.info(f"No media found for entry {entry}, skipping.") return False return self.add_metadata(data, info_extractor, url, result) From 55d9ffaacd65496fb0b6acb0e85c35e4919cb7a9 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 18:51:21 +0100 Subject: [PATCH 098/107] typo --- src/auto_archiver/modules/generic_extractor/tiktok.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auto_archiver/modules/generic_extractor/tiktok.py b/src/auto_archiver/modules/generic_extractor/tiktok.py index e44714e..902eb05 100644 --- a/src/auto_archiver/modules/generic_extractor/tiktok.py +++ b/src/auto_archiver/modules/generic_extractor/tiktok.py @@ -10,7 +10,7 @@ from .dropin import GenericDropin class Tiktok(GenericDropin): """ - TikTok droping for the Generic Extractor that uses an unofficial API if/when ytdlp fails. + TikTok dropin for the Generic Extractor that uses an unofficial API if/when ytdlp fails. It's useful for capturing content that requires a login, like sensitive content. """ From 74a1561c3d3f39b55c9ba010fc3582d5c2cb2b5b Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 19:21:40 +0100 Subject: [PATCH 099/107] logging and clean up --- .../modules/gsheet_feeder_db/gsheet_feeder_db.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/auto_archiver/modules/gsheet_feeder_db/gsheet_feeder_db.py b/src/auto_archiver/modules/gsheet_feeder_db/gsheet_feeder_db.py index 04a7336..84071e7 100644 --- a/src/auto_archiver/modules/gsheet_feeder_db/gsheet_feeder_db.py +++ b/src/auto_archiver/modules/gsheet_feeder_db/gsheet_feeder_db.py @@ -10,7 +10,7 @@ The filtered rows are processed into `Metadata` objects. """ import os -from typing import Tuple, Union +from typing import Tuple, Union, Iterator from urllib.parse import quote import gspread @@ -33,10 +33,10 @@ class GsheetsFeederDB(Feeder, Database): def open_sheet(self): if self.sheet: return self.gsheets_client.open(self.sheet) - else: # self.sheet_id + else: return self.gsheets_client.open_by_key(self.sheet_id) - def __iter__(self) -> Metadata: + def __iter__(self) -> Iterator[Metadata]: sh = self.open_sheet() for ii, worksheet in enumerate(sh.worksheets()): if not self.should_process_sheet(worksheet.title): @@ -45,14 +45,14 @@ class GsheetsFeederDB(Feeder, Database): logger.info(f"Opening worksheet {ii=}: {worksheet.title=} header={self.header}") gw = GWorksheet(worksheet, header_row=self.header, columns=self.columns) if len(missing_cols := self.missing_required_columns(gw)): - logger.warning( + logger.debug( f"SKIPPED worksheet '{worksheet.title}' due to missing required column(s) for {missing_cols}" ) continue # process and yield metadata here: yield from self._process_rows(gw) - logger.success(f"Finished worksheet {worksheet.title}") + logger.info(f"Finished worksheet {worksheet.title}") def _process_rows(self, gw: GWorksheet): for row in range(1 + self.header, gw.count_rows() + 1): From ad168785e7a7ca0fdb74a367fd7b428e13b30286 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 19:22:09 +0100 Subject: [PATCH 100/107] retry for Google API 503s --- .../modules/gsheet_feeder_db/gsheet_feeder_db.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/auto_archiver/modules/gsheet_feeder_db/gsheet_feeder_db.py b/src/auto_archiver/modules/gsheet_feeder_db/gsheet_feeder_db.py index 84071e7..00b403a 100644 --- a/src/auto_archiver/modules/gsheet_feeder_db/gsheet_feeder_db.py +++ b/src/auto_archiver/modules/gsheet_feeder_db/gsheet_feeder_db.py @@ -16,6 +16,7 @@ from urllib.parse import quote import gspread from loguru import logger from slugify import slugify +from retrying import retry from auto_archiver.core import Feeder, Database, Media from auto_archiver.core import Metadata @@ -173,7 +174,16 @@ class GsheetsFeederDB(Feeder, Database): ), ) - gw.batch_set_cell(cell_updates) + @retry( + wait_incrementing_start=1000, + wait_incrementing_increment=3000, + wait_incrementing_max=20_000, + stop_max_attempt_number=5, + ) + def batch_set_cell_with_retry(gw, cell_updates: list): + gw.batch_set_cell(cell_updates) + + batch_set_cell_with_retry(gw, cell_updates) def _safe_status_update(self, item: Metadata, new_status: str) -> None: try: From 216226e7cc8b5345c312050dbea80d91b11d003d Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 19:22:20 +0100 Subject: [PATCH 101/107] browsertrix version bump --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9f50452..4555ca1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM webrecorder/browsertrix-crawler:1.6.2 AS base +FROM webrecorder/browsertrix-crawler:1.6.3 AS base ENV RUNNING_IN_DOCKER=1 \ LANG=C.UTF-8 \ From c5a2fd45f9344b7856059326eada891503c92222 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 20:04:40 +0100 Subject: [PATCH 102/107] log levels updated --- .../instagram_tbot_extractor/instagram_tbot_extractor.py | 2 +- .../opentimestamps_enricher/opentimestamps_enricher.py | 4 ++-- .../modules/telethon_extractor/telethon_extractor.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/auto_archiver/modules/instagram_tbot_extractor/instagram_tbot_extractor.py b/src/auto_archiver/modules/instagram_tbot_extractor/instagram_tbot_extractor.py index f63f2c1..b4f9378 100644 --- a/src/auto_archiver/modules/instagram_tbot_extractor/instagram_tbot_extractor.py +++ b/src/auto_archiver/modules/instagram_tbot_extractor/instagram_tbot_extractor.py @@ -58,7 +58,7 @@ class InstagramTbotExtractor(Extractor): "If you do, disable at least one of the archivers for the first-time setup of the telethon session: {e}" ) with self.client.start(): - logger.success(f"SETUP {self.name} login works.") + logger.info(f"SETUP {self.name} login works.") def cleanup(self) -> None: logger.info(f"CLEANUP {self.name}.") diff --git a/src/auto_archiver/modules/opentimestamps_enricher/opentimestamps_enricher.py b/src/auto_archiver/modules/opentimestamps_enricher/opentimestamps_enricher.py index d909d8e..c920a03 100644 --- a/src/auto_archiver/modules/opentimestamps_enricher/opentimestamps_enricher.py +++ b/src/auto_archiver/modules/opentimestamps_enricher/opentimestamps_enricher.py @@ -20,7 +20,7 @@ class OpentimestampsEnricher(Enricher): # Get the media files to timestamp media_files = [m for m in to_enrich.media if m.filename and not m.get("opentimestamps")] if not media_files: - logger.warning(f"No files found to timestamp in {url=}") + logger.debug(f"No files found to timestamp in {url=}") return timestamp_files = [] @@ -119,7 +119,7 @@ class OpentimestampsEnricher(Enricher): if timestamp_files: to_enrich.set("opentimestamped", True) to_enrich.set("opentimestamps_count", len(timestamp_files)) - logger.success(f"{len(timestamp_files)} OpenTimestamps proofs created for {url=}") + logger.info(f"{len(timestamp_files)} OpenTimestamps proofs created for {url=}") else: to_enrich.set("opentimestamped", False) logger.warning(f"No successful timestamps created for {url=}") diff --git a/src/auto_archiver/modules/telethon_extractor/telethon_extractor.py b/src/auto_archiver/modules/telethon_extractor/telethon_extractor.py index d17b25b..279dccd 100644 --- a/src/auto_archiver/modules/telethon_extractor/telethon_extractor.py +++ b/src/auto_archiver/modules/telethon_extractor/telethon_extractor.py @@ -56,7 +56,7 @@ class TelethonExtractor(Extractor): self.client = TelegramClient(self.session_file, self.api_id, self.api_hash) with self.client.start(): - logger.success(f"SETUP {self.name} login works.") + logger.info(f"SETUP {self.name} login works.") if self.join_channels and len(self.channel_invites): logger.info(f"SETUP {self.name} joining channels...") From 2aec240128ea4148428c75bd4452d7a403683041 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 20:28:20 +0100 Subject: [PATCH 103/107] thumbnail enricher always run probe by default --- .../thumbnail_enricher/thumbnail_enricher.py | 22 ++++++++++--------- tests/enrichers/test_thumbnail_enricher.py | 15 ++++++++----- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/auto_archiver/modules/thumbnail_enricher/thumbnail_enricher.py b/src/auto_archiver/modules/thumbnail_enricher/thumbnail_enricher.py index 1543cec..81b9ce3 100644 --- a/src/auto_archiver/modules/thumbnail_enricher/thumbnail_enricher.py +++ b/src/auto_archiver/modules/thumbnail_enricher/thumbnail_enricher.py @@ -35,16 +35,18 @@ class ThumbnailEnricher(Enricher): logger.debug(f"generating thumbnails for {m.filename}") duration = m.get("duration") - if duration is None: - try: - probe = ffmpeg.probe(m.filename) - duration = float( - next(stream for stream in probe["streams"] if stream["codec_type"] == "video")["duration"] - ) - to_enrich.media[m_id].set("duration", duration) - except Exception as e: - logger.error(f"error getting duration of video {m.filename}: {e}") - return + try: + probe = ffmpeg.probe(m.filename) + duration = float( + next(stream for stream in probe["streams"] if stream["codec_type"] == "video")["duration"] + ) + to_enrich.media[m_id].set("duration", duration) + except Exception as e: + logger.warning(f"failed to get duration with FFMPEG from {m.filename}: {e}") + + if not duration or type(duration) not in [float, int] or duration <= 0: + logger.warning(f"cannot generate thumbnails for {m.filename} without valid duration") + continue num_thumbs = int(min(max(1, (duration / 60) * self.thumbnails_per_minute), self.max_thumbnails)) timestamps = [duration / (num_thumbs + 1) * i for i in range(1, num_thumbs + 1)] diff --git a/tests/enrichers/test_thumbnail_enricher.py b/tests/enrichers/test_thumbnail_enricher.py index fdc28b7..41aac66 100644 --- a/tests/enrichers/test_thumbnail_enricher.py +++ b/tests/enrichers/test_thumbnail_enricher.py @@ -74,12 +74,12 @@ def test_enrich_thumbnail_limits( def test_enrich_handles_probe_failure(thumbnail_enricher, metadata_with_video, mocker): mocker.patch("ffmpeg.probe", side_effect=Exception("Probe error")) mocker.patch("os.makedirs") - mock_logger = mocker.patch("loguru.logger.error") + mock_logger = mocker.patch("loguru.logger.warning") mocker.patch.object(Media, "is_video", return_value=True) thumbnail_enricher.enrich(metadata_with_video) # Ensure error was logged - mock_logger.assert_called_with("error getting duration of video video.mp4: Probe error") + mock_logger.assert_called_with("cannot generate thumbnails for video.mp4 without valid duration") # Ensure no thumbnails were created thumbnails = metadata_with_video.media[0].get("thumbnails") assert thumbnails is None @@ -126,11 +126,14 @@ def test_enrich_handles_short_video( assert len(thumbnails) == expected_count -def test_uses_existing_duration(thumbnail_enricher, metadata_with_video, mock_ffmpeg_environment): - metadata_with_video.media[0].set("duration", 60) +def test_uses_existing_duration_on_exception(thumbnail_enricher, metadata_with_video, mock_ffmpeg_environment, mocker): + mock_logger = mocker.patch("loguru.logger.warning") + mock_probe = mocker.patch("ffmpeg.probe", side_effect=Exception("New probe error")) + metadata_with_video.media[0].set("duration", 3) thumbnail_enricher.enrich(metadata_with_video) - mock_ffmpeg_environment["mock_probe"].assert_not_called() - assert mock_ffmpeg_environment["mock_output"].run.call_count == 4 + mock_probe.assert_called_once() + mock_logger.assert_called_with("failed to get duration with FFMPEG from video.mp4: New probe error") + assert mock_ffmpeg_environment["mock_output"].run.call_count == 3 def test_enrich_metadata_structure(thumbnail_enricher, metadata_with_video, mock_ffmpeg_environment, mocker): From 23b781c86668f8f9d685cb4d64a437499ecf54ac Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 20:36:22 +0100 Subject: [PATCH 104/107] new check for edge case --- .../modules/thumbnail_enricher/thumbnail_enricher.py | 3 +++ tests/enrichers/test_thumbnail_enricher.py | 1 + 2 files changed, 4 insertions(+) diff --git a/src/auto_archiver/modules/thumbnail_enricher/thumbnail_enricher.py b/src/auto_archiver/modules/thumbnail_enricher/thumbnail_enricher.py index 81b9ce3..a8f844f 100644 --- a/src/auto_archiver/modules/thumbnail_enricher/thumbnail_enricher.py +++ b/src/auto_archiver/modules/thumbnail_enricher/thumbnail_enricher.py @@ -59,6 +59,9 @@ class ThumbnailEnricher(Enricher): ).run() try: + if not os.path.exists(output_path): + logger.info(f"thumbnail {index} for media {m.filename} was not created") + continue thumbnails_media.append( Media(filename=output_path) .set("id", f"thumbnail_{index}") diff --git a/tests/enrichers/test_thumbnail_enricher.py b/tests/enrichers/test_thumbnail_enricher.py index 41aac66..ba9e988 100644 --- a/tests/enrichers/test_thumbnail_enricher.py +++ b/tests/enrichers/test_thumbnail_enricher.py @@ -25,6 +25,7 @@ def mock_ffmpeg_environment(mocker): # Mocking all the ffmpeg calls in one place mock_ffmpeg_input = mocker.patch("ffmpeg.input") mock_makedirs = mocker.patch("os.makedirs") + mocker.patch("os.path.exists", return_value=True) (mocker.patch.object(Media, "is_video", return_value=True),) mock_probe = mocker.patch( "ffmpeg.probe", From a3ae9ebbb3da01eefab1907e0e933138d99a523f Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 20:36:33 +0100 Subject: [PATCH 105/107] log level updates --- .../modules/timestamping_enricher/timestamping_enricher.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/auto_archiver/modules/timestamping_enricher/timestamping_enricher.py b/src/auto_archiver/modules/timestamping_enricher/timestamping_enricher.py index 412afa3..1626b71 100644 --- a/src/auto_archiver/modules/timestamping_enricher/timestamping_enricher.py +++ b/src/auto_archiver/modules/timestamping_enricher/timestamping_enricher.py @@ -58,7 +58,7 @@ class TimestampingEnricher(Enricher): ] if not len(hashes): - logger.warning(f"No hashes found in {url=}") + logger.debug(f"No hashes found in {url=}") return @@ -101,7 +101,7 @@ class TimestampingEnricher(Enricher): hashes_media.set("cryptography v", version("cryptography")) to_enrich.add_media(hashes_media, id="timestamped_hashes") to_enrich.set("timestamped", True) - logger.success(f"{len(timestamp_tokens)} timestamp tokens created for {url=}") + logger.info(f"{len(timestamp_tokens)} timestamp tokens created for {url=}") else: logger.warning(f"No successful timestamps for {url=}") From 76fd329fe54b67fc796067c63784d6bc85c9427b Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 23:51:03 +0100 Subject: [PATCH 106/107] twitter tests fix --- .../twitter_api_extractor/twitter_api_extractor.py | 5 ++++- tests/extractors/test_twitter_api_extractor.py | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/auto_archiver/modules/twitter_api_extractor/twitter_api_extractor.py b/src/auto_archiver/modules/twitter_api_extractor/twitter_api_extractor.py index 1b9eb75..5a0023a 100644 --- a/src/auto_archiver/modules/twitter_api_extractor/twitter_api_extractor.py +++ b/src/auto_archiver/modules/twitter_api_extractor/twitter_api_extractor.py @@ -1,3 +1,4 @@ +from datetime import timezone import json import re import mimetypes @@ -91,7 +92,9 @@ class TwitterApiExtractor(Extractor): result = Metadata() result.set_title(tweet.data.text) - result.set_timestamp(get_datetime_from_str(tweet.data.created_at, "%Y-%m-%dT%H:%M:%S.%fZ")) + result.set_timestamp( + get_datetime_from_str(tweet.data.created_at, "%Y-%m-%dT%H:%M:%S.%fZ").replace(tzinfo=timezone.utc) + ) urls = [] if tweet.includes: diff --git a/tests/extractors/test_twitter_api_extractor.py b/tests/extractors/test_twitter_api_extractor.py index 8b8e0d9..1e07434 100644 --- a/tests/extractors/test_twitter_api_extractor.py +++ b/tests/extractors/test_twitter_api_extractor.py @@ -140,22 +140,22 @@ class TestTwitterApiExtractor(TestExtractorBase): ( "https://x.com/SozinhoRamalho/status/1876710769913450647", "ignore tweet, testing sensitivity warning nudity https://t.co/t3u0hQsSB1", - datetime.datetime(2024, 12, 31, 14, 18, 33, tzinfo=datetime.timezone.utc), + datetime.datetime(2025, 1, 7, 19, 21, 29, tzinfo=datetime.timezone.utc), ), ( "https://x.com/SozinhoRamalho/status/1876710875475681357", "ignore tweet, testing sensitivity warning violence https://t.co/syYDSkpjZD", - datetime.datetime(2024, 12, 31, 14, 18, 33, tzinfo=datetime.timezone.utc), + datetime.datetime(2025, 1, 7, 19, 21, 54, tzinfo=datetime.timezone.utc), ), ( "https://x.com/SozinhoRamalho/status/1876711053813227618", "ignore tweet, testing sensitivity warning sensitive https://t.co/XE7cRdjzYq", - datetime.datetime(2024, 12, 31, 14, 18, 33, tzinfo=datetime.timezone.utc), + datetime.datetime(2025, 1, 7, 19, 22, 37, tzinfo=datetime.timezone.utc), ), ( "https://x.com/SozinhoRamalho/status/1876711141314801937", "ignore tweet, testing sensitivity warning nudity, violence, sensitivity https://t.co/YxCFbbhYE3", - datetime.datetime(2024, 12, 31, 14, 18, 33, tzinfo=datetime.timezone.utc), + datetime.datetime(2025, 1, 7, 19, 22, 58, tzinfo=datetime.timezone.utc), ), ], ) From 918cb220be6ec9d5f200fa4acbcff296edab9056 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Tue, 17 Jun 2025 23:51:10 +0100 Subject: [PATCH 107/107] minor indentation issue --- docs/source/how_to/05_upgrading_to_1_1_0.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/how_to/05_upgrading_to_1_1_0.md b/docs/source/how_to/05_upgrading_to_1_1_0.md index 57bc253..7c0f3b2 100644 --- a/docs/source/how_to/05_upgrading_to_1_1_0.md +++ b/docs/source/how_to/05_upgrading_to_1_1_0.md @@ -47,8 +47,8 @@ One such Dropin is the VkDropin which uses this automated browser to access VKon ```{code} yaml authentication: vk.com: - username: your_username - password: your_password + username: your_username + password: your_password ``` See all available Dropins in [the source code](https://github.com/bellingcat/auto-archiver/tree/main/src/auto_archiver/modules/antibot_extractor_enricher/dropins). Usually each Dropin needs its own authentication settings, similarly to the VkDropin. \ No newline at end of file