diff --git a/poetry.lock b/poetry.lock index fb9ff97cfabe..01e0c604d837 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. [[package]] name = "annotated-types" @@ -7,7 +7,6 @@ description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -20,7 +19,6 @@ description = "High level compatibility layer for multiple asynchronous event lo optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"}, {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"}, @@ -34,7 +32,7 @@ typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\""] trio = ["trio (>=0.23)"] [[package]] @@ -44,7 +42,6 @@ description = "A small Python module for determining appropriate platform-specif optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, @@ -57,7 +54,6 @@ description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "argcomplete-3.5.0-py3-none-any.whl", hash = "sha256:d4bcf3ff544f51e16e54228a7ac7f486ed70ebf2ecfe49a63a91171c76bf029b"}, {file = "argcomplete-3.5.0.tar.gz", hash = "sha256:4349400469dccfb7950bb60334a680c58d88699bff6159df61251878dc6bf74b"}, @@ -73,7 +69,6 @@ description = "ASGI specs, helper code, and adapters" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"}, {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"}, @@ -105,7 +100,6 @@ description = "Simple decorator to set attributes of target function or class in optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "attr-0.3.1-py2-none-any.whl", hash = "sha256:0b1aaddb85bd9e9c4bd75092f4440d6616ff40b0df0437f00771871670f7c9fd"}, {file = "attr-0.3.1.tar.gz", hash = "sha256:9091548058d17f132596e61fa7518e504f76b9a4c61ca7d86e1f96dbf7d4775d"}, @@ -118,7 +112,6 @@ description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, @@ -129,7 +122,7 @@ cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] dev = ["attrs[docs,tests]", "pre-commit"] docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-no-zope = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.1.1) ; platform_python_implementation == \"CPython\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version < \"3.11\"", "pytest-xdist[psutil]"] [[package]] name = "azure-core" @@ -138,7 +131,6 @@ description = "Microsoft Azure Core Library for Python" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "azure-core-1.29.5.tar.gz", hash = "sha256:52983c89d394c6f881a121e5101c5fa67278ca3b1f339c8fb2ef39230c70e9ac"}, {file = "azure_core-1.29.5-py3-none-any.whl", hash = "sha256:0fa04b7b1f7d44a4fb8468c4093deb2ea01fdf4faddbf802ed9205615f99d68c"}, @@ -159,7 +151,6 @@ description = "Microsoft Azure Blob Storage Client Library for Python" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "azure-storage-blob-12.19.0.tar.gz", hash = "sha256:26c0a4320a34a3c2a1b74528ba6812ebcb632a04cd67b1c7377232c4b01a5897"}, {file = "azure_storage_blob-12.19.0-py3-none-any.whl", hash = "sha256:7bbc2c9c16678f7a420367fef6b172ba8730a7e66df7f4d7a55d5b3c8216615b"}, @@ -181,7 +172,6 @@ description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "black-24.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09cdeb74d494ec023ded657f7092ba518e8cf78fa8386155e4a03fdcc44679e6"}, {file = "black-24.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81c6742da39f33b08e791da38410f32e27d632260e599df7245cccee2064afeb"}, @@ -218,7 +208,7 @@ typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +d = ["aiohttp (>=3.7.4) ; sys_platform != \"win32\" or implementation_name != \"pypy\"", "aiohttp (>=3.7.4,!=3.9.0) ; sys_platform == \"win32\" and implementation_name == \"pypy\""] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] @@ -229,7 +219,6 @@ description = "An easy safelist-based HTML-sanitizing tool." optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"}, {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, @@ -241,7 +230,7 @@ webencodings = "*" [package.extras] css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"] +dev = ["Sphinx (==4.3.2)", "black (==22.3.0) ; implementation_name == \"cpython\"", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961) ; implementation_name == \"cpython\"", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"] [[package]] name = "boto" @@ -250,7 +239,6 @@ description = "Amazon Web Services Library" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "boto-2.49.0-py2.py3-none-any.whl", hash = "sha256:147758d41ae7240dc989f0039f27da8ca0d53734be0eb869ef16e3adcfa462e8"}, {file = "boto-2.49.0.tar.gz", hash = "sha256:ea0d3b40a2d852767be77ca343b58a9e3a4b00d9db440efb8da74b4e58025e5a"}, @@ -263,7 +251,6 @@ description = "The AWS SDK for Python" optional = false python-versions = ">= 3.7" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "boto3-1.28.58-py3-none-any.whl", hash = "sha256:71dcd596a82b5341c6941117b9228897bfb1e2b58f73e60e1fdda1b02a847cc8"}, {file = "boto3-1.28.58.tar.gz", hash = "sha256:2f18d2dac5d9229e8485b556eb58b7b95fca91bbf002f63bf9c39209f513f6e6"}, @@ -284,7 +271,6 @@ description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">= 3.7" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "botocore-1.31.58-py3-none-any.whl", hash = "sha256:83a3ca4d9247fdbde76c654137e6ab648bd976f652ce2354def1715c838af505"}, {file = "botocore-1.31.58.tar.gz", hash = "sha256:002f8bdca8efde50ae7267f342bc1d03a71d76024ce3949e4ffdd1151581c53e"}, @@ -305,7 +291,6 @@ description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "cachetools-5.3.2-py3-none-any.whl", hash = "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1"}, {file = "cachetools-5.3.2.tar.gz", hash = "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2"}, @@ -318,7 +303,6 @@ description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" groups = ["main", "build", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, @@ -400,7 +384,7 @@ files = [ {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] -markers = {main = "(python_version >= \"3.12\" or python_version <= \"3.11\") and platform_python_implementation != \"PyPy\"", build = "(python_version >= \"3.12\" or python_version <= \"3.11\") and (platform_machine != \"ppc64le\" and platform_machine != \"s390x\") and sys_platform == \"linux\" and platform_python_implementation != \"PyPy\"", test = "(python_version >= \"3.12\" or python_version <= \"3.11\") and platform_python_implementation != \"PyPy\""} +markers = {main = "platform_python_implementation != \"PyPy\"", build = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\" and platform_python_implementation != \"PyPy\"", test = "platform_python_implementation != \"PyPy\""} [package.dependencies] pycparser = "*" @@ -412,7 +396,6 @@ description = "Validate configuration and produce human readable error messages. optional = false python-versions = ">=3.8" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, @@ -425,7 +408,6 @@ description = "The Real First Universal Charset Detector. Open, modern and activ optional = false python-versions = ">=3.7.0" groups = ["main", "build", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, @@ -526,7 +508,6 @@ description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, @@ -542,7 +523,6 @@ description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -555,7 +535,6 @@ description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, @@ -612,7 +591,7 @@ files = [ ] [package.extras] -toml = ["tomli"] +toml = ["tomli ; python_full_version <= \"3.11.0a6\""] [[package]] name = "cryptography" @@ -650,7 +629,7 @@ files = [ {file = "cryptography-43.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2"}, {file = "cryptography-43.0.1.tar.gz", hash = "sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d"}, ] -markers = {main = "python_version >= \"3.12\" or python_version <= \"3.11\"", build = "(python_version >= \"3.12\" or python_version <= \"3.11\") and (platform_machine != \"ppc64le\" and platform_machine != \"s390x\") and sys_platform == \"linux\"", test = "python_version >= \"3.12\" or python_version <= \"3.11\""} +markers = {build = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\""} [package.dependencies] cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} @@ -672,7 +651,6 @@ description = "Datamodel Code Generator" optional = false python-versions = "<4.0,>=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "datamodel_code_generator-0.26.1-py3-none-any.whl", hash = "sha256:bbe8a6cc0b9cfdbfd294e336e02b4c50b481ffc3b3c608b5578b6d7aa02cc8ae"}, {file = "datamodel_code_generator-0.26.1.tar.gz", hash = "sha256:3b7b49c4230fa197ca28847e1e8996cd664638a7e91796c826a61c60d4ccd8a2"}, @@ -688,8 +666,8 @@ jinja2 = ">=2.10.1,<4.0" packaging = "*" pydantic = [ {version = ">=1.10.0,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.12\" and python_version < \"4.0\""}, - {version = ">=1.10.0,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, - {version = ">=1.9.0,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">=1.10.0,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.11\" and python_version < \"4.0\""}, + {version = ">=1.9.0,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version == \"3.10\""}, ] pyyaml = ">=6.0.1" toml = {version = ">=0.10.0,<1.0.0", markers = "python_version < \"3.11\""} @@ -707,7 +685,6 @@ description = "XML bomb protection for Python stdlib modules" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, @@ -720,7 +697,6 @@ description = "Distribution utilities" optional = false python-versions = "*" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, @@ -733,7 +709,6 @@ description = "Distro - an OS platform information API" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, @@ -746,7 +721,6 @@ description = "A high-level Python web framework that encourages rapid developme optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "Django-5.1.6-py3-none-any.whl", hash = "sha256:8d203400bc2952fbfb287c2bbda630297d654920c72a73cc82a9ad7926feaad5"}, {file = "Django-5.1.6.tar.gz", hash = "sha256:1e39eafdd1b185e761d9fab7a9f0b9fa00af1b37b25ad980a8aa0dac13535690"}, @@ -768,7 +742,6 @@ description = "This is a django application that tries to eliminate annoying thi optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "django-annoying-0.10.6.tar.gz", hash = "sha256:083b5e26f140f86178fcb47931f69b7ff75181ccd1e318d9c218ae9babc1805e"}, {file = "django_annoying-0.10.6-py2.py3-none-any.whl", hash = "sha256:e230f28fec0559b4fdb621ff202068a78170ada2ac1ec7a73ba822cc1f737791"}, @@ -785,7 +758,6 @@ description = "django-cors-headers is a Django application for handling the serv optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "django-cors-headers-3.6.0.tar.gz", hash = "sha256:5665fc1b1aabf1b678885cf6f8f8bd7da36ef0a978375e767d491b48d3055d8f"}, {file = "django_cors_headers-3.6.0-py3-none-any.whl", hash = "sha256:ba898dd478cd4be3a38ebc3d8729fa4d044679f8c91b2684edee41129d7e968a"}, @@ -801,7 +773,6 @@ description = "Django Content Security Policy support." optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "django_csp-3.7-py2.py3-none-any.whl", hash = "sha256:01443a07723f9a479d498bd7bb63571aaa771e690f64bde515db6cdb76e8041a"}, {file = "django_csp-3.7.tar.gz", hash = "sha256:01eda02ad3f10261c74131cdc0b5a6a62b7c7ad4fd017fbefb7a14776e0a9727"}, @@ -821,7 +792,6 @@ description = "A configurable set of panels that display various debug informati optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "django-debug-toolbar-3.2.1.tar.gz", hash = "sha256:a5ff2a54f24bf88286f9872836081078f4baa843dc3735ee88524e89f8821e33"}, {file = "django_debug_toolbar-3.2.1-py3-none-any.whl", hash = "sha256:e759e63e3fe2d3110e0e519639c166816368701eab4a47fed75d7de7018467b9"}, @@ -838,7 +808,6 @@ description = "A package that allows you to utilize 12factor inspired environmen optional = false python-versions = ">=3.5,<4" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "django-environ-0.10.0.tar.gz", hash = "sha256:b3559a91439c9d774a9e0c1ced872364772c612cdf6dc919506a2b13f7a77225"}, {file = "django_environ-0.10.0-py2.py3-none-any.whl", hash = "sha256:510f8c9c1d0a38b0815f91504270c29440a0cf44fab07f55942fa8d31bbb9be6"}, @@ -856,7 +825,6 @@ description = "Extensions for Django" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "django-extensions-3.2.3.tar.gz", hash = "sha256:44d27919d04e23b3f40231c4ab7af4e61ce832ef46d610cc650d53e68328410a"}, {file = "django_extensions-3.2.3-py3-none-any.whl", hash = "sha256:9600b7562f79a92cbf1fde6403c04fee314608fefbb595502e34383ae8203401"}, @@ -872,7 +840,6 @@ description = "Django-filter is a reusable Django application for allowing users optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "django_filter-24.3-py3-none-any.whl", hash = "sha256:c4852822928ce17fb699bcfccd644b3574f1a2d80aeb2b4ff4f16b02dd49dc64"}, {file = "django_filter-24.3.tar.gz", hash = "sha256:d8ccaf6732afd21ca0542f6733b11591030fa98669f8d15599b358e24a2cd9c3"}, @@ -888,7 +855,6 @@ description = "Detect backward incompatible migrations for your django project" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "django-migration-linter-5.1.0.tar.gz", hash = "sha256:638a6f39b0109fb95a747f10cb3ae4362b4ca46e7f45eee9546d3dd4c322b83a"}, {file = "django_migration_linter-5.1.0-py3-none-any.whl", hash = "sha256:eefdca0cd60b0bacdf61420b0779b2c680dd29d3b43e9ccb0d8d2aa89f036474"}, @@ -909,7 +875,6 @@ description = "Django model mixins and utilities" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "django-model-utils-4.1.1.tar.gz", hash = "sha256:eb5dd05ef7d7ce6bc79cae54ea7c4a221f6f81e2aad7722933aee66489e7264b"}, {file = "django_model_utils-4.1.1-py3-none-any.whl", hash = "sha256:ef7c440024e797796a3811432abdd2be8b5225ae64ef346f8bfc6de7d8e5d73c"}, @@ -925,7 +890,6 @@ description = "Modified Django FileResponse that adds Content-Range headers." optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "django-ranged-fileresponse-0.1.2.tar.gz", hash = "sha256:afafc1b0bbabfe8457e903e06139f1b18b9a1951a80a37453749b8afd5a63a73"}, ] @@ -940,7 +904,6 @@ description = "An app that provides django integration for RQ (Redis Queue)" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "django-rq-2.10.3.tar.gz", hash = "sha256:572f2e142a4e4a2f68b3601eef6ddfb041c470dfc7028c975981f7bb942e184c"}, {file = "django_rq-2.10.3-py2.py3-none-any.whl", hash = "sha256:f73da09708caf4abc4b16800acf762a00e59885eb8f7a94a83bf06ee2a40b26b"}, @@ -962,7 +925,6 @@ description = "Support for many storage backends in Django" optional = false python-versions = ">=3.5" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "django-storages-1.12.3.tar.gz", hash = "sha256:a475edb2f0f04c4f7e548919a751ecd50117270833956ed5bd585c0575d2a5e7"}, {file = "django_storages-1.12.3-py3-none-any.whl", hash = "sha256:204a99f218b747c46edbfeeb1310d357f83f90fa6a6024d8d0a3f422570cee84"}, @@ -986,7 +948,6 @@ description = "A django package that allows easy identification of visitors' bro optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "django-user_agents-0.4.0.tar.gz", hash = "sha256:cda8ae2146cee30e6867a07943f56ecc570b4391d725ab5309901a8b3e4a3514"}, {file = "django_user_agents-0.4.0-py3-none-any.whl", hash = "sha256:cd9d9f7158b23c5237b2dacb0bc4fffdf77fefe1d2633b5814d3874288ebdb5d"}, @@ -1003,7 +964,6 @@ description = "Web APIs for Django, made easy." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "djangorestframework-3.15.2-py3-none-any.whl", hash = "sha256:2b8871b062ba1aefc2de01f773875441a961fefbf79f5eed1e32b2f096944b20"}, {file = "djangorestframework-3.15.2.tar.gz", hash = "sha256:36fe88cd2d6c6bec23dca9804bab2ba5517a8bb9d8f47ebc68981b56840107ad"}, @@ -1019,7 +979,6 @@ description = "A minimal JSON Web Token authentication plugin for Django REST Fr optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "djangorestframework_simplejwt-5.4.0-py3-none-any.whl", hash = "sha256:7aec953db9ed4163430c16d086eecb0f028f814ce6bba62b06c25919261e9077"}, {file = "djangorestframework_simplejwt-5.4.0.tar.gz", hash = "sha256:cccecce1a0e1a4a240fae80da73e5fc23055bababb8b67de88fa47cd36822320"}, @@ -1046,7 +1005,6 @@ description = "DNS toolkit" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "dnspython-2.6.1-py3-none-any.whl", hash = "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50"}, {file = "dnspython-2.6.1.tar.gz", hash = "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc"}, @@ -1068,7 +1026,6 @@ description = "Pythonic argument parser, that will make you smile" optional = false python-versions = "*" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"}, ] @@ -1080,7 +1037,6 @@ description = "Docutils -- Python Documentation Utilities" optional = false python-versions = ">=3.7" groups = ["build"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, @@ -1093,7 +1049,6 @@ description = "Dynamically return subset of Django REST Framework serializer fie optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "drf_dynamic_fields-0.3.0-py2.py3-none-any.whl", hash = "sha256:5da7d856f411561cb25d6ce3a0a152c2bd441d41a81b279ca0fec214d14c6134"}, {file = "drf_dynamic_fields-0.3.0.tar.gz", hash = "sha256:245eed41664976451b51ab9b59af179692ab6d8ee260a6b85ac2d44d2b06f5b4"}, @@ -1106,7 +1061,6 @@ description = "Flexible, dynamic fields and nested resources for Django REST Fra optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "drf-flex-fields-0.9.5.tar.gz", hash = "sha256:4551a80e60fa505c947bd17cfc3a06f74d5baa3e6905b7447f18c2f8f088661d"}, ] @@ -1118,7 +1072,6 @@ description = "Generate DRF Serializers, Views, and urls for your API aplication optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "drf-generators-0.3.0.tar.gz", hash = "sha256:9824dcf147e18b1336ec41c0e905d45290b22862d62ee7f1b2c40c7c75435e77"}, ] @@ -1133,7 +1086,6 @@ description = "A robust email address syntax and deliverability validation libra optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631"}, {file = "email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7"}, @@ -1166,7 +1118,6 @@ description = "execnet: rapid multi-Python deployment" optional = false python-versions = ">=3.7" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "execnet-2.0.2-py3-none-any.whl", hash = "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41"}, {file = "execnet-2.0.2.tar.gz", hash = "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"}, @@ -1182,7 +1133,6 @@ description = "Dictionary with auto-expiring values for caching purposes" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "expiringdict-1.2.2-py3-none-any.whl", hash = "sha256:09a5d20bc361163e6432a874edd3179676e935eb81b925eccef48d409a8a45e8"}, {file = "expiringdict-1.2.2.tar.gz", hash = "sha256:300fb92a7e98f15b05cf9a856c1415b3bc4f2e132be07daa326da6414c23ee09"}, @@ -1198,7 +1148,6 @@ description = "A versatile test fixtures replacement based on thoughtbot's facto optional = false python-versions = ">=3.8" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "factory_boy-3.3.3-py2.py3-none-any.whl", hash = "sha256:1c39e3289f7e667c4285433f305f8d506efc2fe9c73aaea4151ebd5cdea394fc"}, {file = "factory_boy-3.3.3.tar.gz", hash = "sha256:866862d226128dfac7f2b4160287e899daf54f2612778327dd03d0e2cb1e3d03"}, @@ -1218,7 +1167,6 @@ description = "Faker is a Python package that generates fake data for you." optional = false python-versions = ">=3.8" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "Faker-33.1.0-py3-none-any.whl", hash = "sha256:d30c5f0e2796b8970de68978365247657486eb0311c5abe88d0b895b68dff05d"}, {file = "faker-33.1.0.tar.gz", hash = "sha256:1c925fc0e86a51fc46648b504078c88d0cd48da1da2595c4e712841cab43a1e4"}, @@ -1235,7 +1183,6 @@ description = "Python implementation of redis API, can be used for testing purpo optional = false python-versions = "<4.0,>=3.7" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "fakeredis-2.26.1-py3-none-any.whl", hash = "sha256:68a5615d7ef2529094d6958677e30a6d30d544e203a5ab852985c19d7ad57e32"}, {file = "fakeredis-2.26.1.tar.gz", hash = "sha256:69f4daafe763c8014a6dbf44a17559c46643c95447b3594b3975251a171b806d"}, @@ -1260,7 +1207,6 @@ description = "A platform independent file lock." optional = false python-versions = ">=3.8" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, @@ -1269,7 +1215,7 @@ files = [ [package.extras] docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] -typing = ["typing-extensions (>=4.8)"] +typing = ["typing-extensions (>=4.8) ; python_version < \"3.11\""] [[package]] name = "freezegun" @@ -1278,7 +1224,6 @@ description = "Let your Python tests travel through time" optional = false python-versions = ">=3.7" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "freezegun-1.5.1-py3-none-any.whl", hash = "sha256:bf111d7138a8abe55ab48a71755673dbaa4ab87f4cff5634a4442dfec34c15f1"}, {file = "freezegun-1.5.1.tar.gz", hash = "sha256:b29dedfcda6d5e8e083ce71b2b542753ad48cfec44037b3fc79702e2980a89e9"}, @@ -1294,7 +1239,6 @@ description = "GenSON is a powerful, user-friendly JSON Schema generator." optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "genson-1.3.0-py3-none-any.whl", hash = "sha256:468feccd00274cc7e4c09e84b08704270ba8d95232aa280f65b986139cec67f7"}, {file = "genson-1.3.0.tar.gz", hash = "sha256:e02db9ac2e3fd29e65b5286f7135762e2cd8a986537c075b06fc5f1517308e37"}, @@ -1307,7 +1251,6 @@ description = "Google API client core library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "google-api-core-2.14.0.tar.gz", hash = "sha256:5368a4502b793d9bbf812a5912e13e4e69f9bd87f6efb508460c43f5bbd1ce41"}, {file = "google_api_core-2.14.0-py3-none-any.whl", hash = "sha256:de2fb50ed34d47ddbb2bd2dcf680ee8fead46279f4ed6b16de362aca23a18952"}, @@ -1318,17 +1261,17 @@ google-auth = ">=2.14.1,<3.0.dev0" googleapis-common-protos = ">=1.56.2,<2.0.dev0" grpcio = [ {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, - {version = ">=1.33.2,<2.0dev", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, + {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""}, ] grpcio-status = [ {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, - {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, + {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "extra == \"grpc\""}, ] protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" requests = ">=2.18.0,<3.0.0.dev0" [package.extras] -grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.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)"] @@ -1339,7 +1282,6 @@ description = "Google Authentication Library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "google-auth-2.23.4.tar.gz", hash = "sha256:79905d6b1652187def79d491d6e23d0cbb3a21d3c7ba0dbaa9c8a01906b13ff3"}, {file = "google_auth-2.23.4-py2.py3-none-any.whl", hash = "sha256:d4bbc92fe4b8bfd2f3e8d88e5ba7085935da208ee38a134fc280e7ce682a05f2"}, @@ -1364,7 +1306,6 @@ description = "Google Cloud Appengine Logging API client library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "google-cloud-appengine-logging-1.4.3.tar.gz", hash = "sha256:fb504e6199fe8de85baa9d31cecf6776877851fe58867de603317ec7cc739987"}, {file = "google_cloud_appengine_logging-1.4.3-py2.py3-none-any.whl", hash = "sha256:8e30af51d853f219caf29e8b8b342b9ce8214b29f334dafae38d39aaaff7d372"}, @@ -1383,7 +1324,6 @@ description = "Google Cloud Audit Protos" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "google-cloud-audit-log-0.2.5.tar.gz", hash = "sha256:86e2faba3383adc8fd04a5bd7fd4f960b3e4aedaa7ed950f2f891ce16902eb6b"}, {file = "google_cloud_audit_log-0.2.5-py2.py3-none-any.whl", hash = "sha256:18b94d4579002a450b7902cd2e8b8fdcb1ea2dd4df3b41f8f82be6d9f7fcd746"}, @@ -1400,7 +1340,6 @@ description = "Google Cloud API client core library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "google-cloud-core-2.3.3.tar.gz", hash = "sha256:37b80273c8d7eee1ae816b3a20ae43585ea50506cb0e60f3cf5be5f87f1373cb"}, {file = "google_cloud_core-2.3.3-py2.py3-none-any.whl", hash = "sha256:fbd11cad3e98a7e5b0343dc07cb1039a5ffd7a5bb96e1f1e27cee4bda4a90863"}, @@ -1420,7 +1359,6 @@ description = "Stackdriver Logging API client library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "google-cloud-logging-3.10.0.tar.gz", hash = "sha256:d93d347351240ddb14cfe201987a2d32cf9d7f478b8b2fabed3015b425b3274f"}, {file = "google_cloud_logging-3.10.0-py2.py3-none-any.whl", hash = "sha256:132192beb45731130a2ffbcd4b2b5cbd87370e7dcfa7397ae4002154f542bd20"}, @@ -1446,7 +1384,6 @@ description = "Google Cloud Storage API client library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "google-cloud-storage-2.13.0.tar.gz", hash = "sha256:f62dc4c7b6cd4360d072e3deb28035fbdad491ac3d9b0b1815a12daea10f37c7"}, {file = "google_cloud_storage-2.13.0-py2.py3-none-any.whl", hash = "sha256:ab0bf2e1780a1b74cf17fccb13788070b729f50c252f0c94ada2aae0ca95437d"}, @@ -1470,7 +1407,6 @@ description = "A python wrapper of the C library 'Google CRC32C'" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "google-crc32c-1.5.0.tar.gz", hash = "sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7"}, {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:596d1f98fc70232fcb6590c439f43b350cb762fb5d61ce7b0e9db4539654cc13"}, @@ -1552,7 +1488,6 @@ description = "Utilities for Google Media Downloads and Resumable Uploads" optional = false python-versions = ">= 3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "google-resumable-media-2.6.0.tar.gz", hash = "sha256:972852f6c65f933e15a4a210c2b96930763b47197cdf4aa5f5bea435efb626e7"}, {file = "google_resumable_media-2.6.0-py2.py3-none-any.whl", hash = "sha256:fc03d344381970f79eebb632a3c18bb1828593a2dc5572b5f90115ef7d11e81b"}, @@ -1572,7 +1507,6 @@ description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "googleapis-common-protos-1.61.0.tar.gz", hash = "sha256:8a64866a97f6304a7179873a465d6eee97b7a24ec6cfd78e0f575e96b821240b"}, {file = "googleapis_common_protos-1.61.0-py2.py3-none-any.whl", hash = "sha256:22f1915393bb3245343f6efe87f6fe868532efc12aa26b391b15132e1279f1c0"}, @@ -1592,7 +1526,6 @@ description = "IAM API client library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "grpc-google-iam-v1-0.13.0.tar.gz", hash = "sha256:fad318608b9e093258fbf12529180f400d1c44453698a33509cc6ecf005b294e"}, {file = "grpc_google_iam_v1-0.13.0-py2.py3-none-any.whl", hash = "sha256:53902e2af7de8df8c1bd91373d9be55b0743ec267a7428ea638db3775becae89"}, @@ -1610,7 +1543,6 @@ description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "grpcio-1.66.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:fe96281713168a3270878255983d2cb1a97e034325c8c2c25169a69289d3ecfa"}, {file = "grpcio-1.66.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:73fc8f8b9b5c4a03e802b3cd0c18b2b06b410d3c1dcbef989fdeb943bd44aff7"}, @@ -1679,7 +1611,6 @@ description = "Status proto mapping for gRPC" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "grpcio-status-1.62.1.tar.gz", hash = "sha256:3431c8abbab0054912c41df5c72f03ddf3b7a67be8a287bb3c18a3456f96ff77"}, {file = "grpcio_status-1.62.1-py3-none-any.whl", hash = "sha256:af0c3ab85da31669f21749e8d53d669c061ebc6ce5637be49a46edcb7aa8ab17"}, @@ -1697,7 +1628,6 @@ description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, @@ -1710,7 +1640,6 @@ description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "httpcore-1.0.2-py3-none-any.whl", hash = "sha256:096cc05bca73b8e459a1fc3dcf585148f63e534eae4339559c9b8a8d6399acc7"}, {file = "httpcore-1.0.2.tar.gz", hash = "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535"}, @@ -1733,7 +1662,6 @@ description = "The next generation HTTP client." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "httpx-0.26.0-py3-none-any.whl", hash = "sha256:8915f5a3627c4d47b73e8202457cb28f1266982d1159bd5779d86a80c0eab1cd"}, {file = "httpx-0.26.0.tar.gz", hash = "sha256:451b55c30d5185ea6b23c2c793abf9bb237d2a7dfb901ced6ff69ad37ec1dfaf"}, @@ -1747,7 +1675,7 @@ idna = "*" sniffio = "*" [package.extras] -brotli = ["brotli", "brotlicffi"] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] @@ -1759,7 +1687,6 @@ description = "Automated generation of real Swagger/OpenAPI 2.0 schemas from Dja optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "humansignal-drf-yasg-1.21.10.post1.tar.gz", hash = "sha256:ed3cd9c6b305578e8f92afb05e229b1de39aa2da5b3737faf61ec066a1e7cbb4"}, {file = "humansignal_drf_yasg-1.21.10.post1-py3-none-any.whl", hash = "sha256:aa6fdd504b727bcc6ef8c05540505b8c53922156058cf64da269cd90bdeed2d8"}, @@ -1785,7 +1712,6 @@ description = "A tool for generating OIDC identities" optional = false python-versions = ">=3.8" groups = ["build"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "id-1.5.0-py3-none-any.whl", hash = "sha256:f1434e1cef91f2cbb8a4ec64663d5a23b9ed43ef44c4c957d02583d61714c658"}, {file = "id-1.5.0.tar.gz", hash = "sha256:292cb8a49eacbbdbce97244f47a97b4c62540169c976552e497fd57df0734c1d"}, @@ -1806,7 +1732,6 @@ description = "File identification library for Python" optional = false python-versions = ">=3.8" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "identify-2.5.31-py2.py3-none-any.whl", hash = "sha256:90199cb9e7bd3c5407a9b7e81b4abec4bb9d249991c79439ec8af740afc6293d"}, {file = "identify-2.5.31.tar.gz", hash = "sha256:7736b3c7a28233637e3c36550646fc6389bedd74ae84cb788200cc8e2dd60b75"}, @@ -1822,7 +1747,6 @@ description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" groups = ["main", "build", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, @@ -1835,7 +1759,6 @@ description = "Iterative JSON parser with standard Python iterator interfaces" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "ijson-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7f7a5250599c366369fbf3bc4e176f5daa28eb6bc7d6130d02462ed335361675"}, {file = "ijson-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f87a7e52f79059f9c58f6886c262061065eb6f7554a587be7ed3aa63e6b71b34"}, @@ -1940,7 +1863,7 @@ description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" groups = ["build"] -markers = "python_version <= \"3.11\" and (platform_machine != \"ppc64le\" and platform_machine != \"s390x\")" +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and python_version <= \"3.11\"" files = [ {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, @@ -1952,7 +1875,7 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +testing = ["flufl.flake8", "importlib-resources (>=1.3) ; python_version < \"3.9\"", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7) ; platform_python_implementation != \"PyPy\"", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1) ; platform_python_implementation != \"PyPy\"", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "inflect" @@ -1961,7 +1884,6 @@ description = "Correctly generate plurals, singular nouns, ordinals, indefinite optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "inflect-5.6.2-py3-none-any.whl", hash = "sha256:b45d91a4a28a4e617ff1821117439b06eaa86e2a4573154af0149e9be6687238"}, {file = "inflect-5.6.2.tar.gz", hash = "sha256:aadc7ed73928f5e014129794bbac03058cca35d0a973a5fc4eb45c7fa26005f9"}, @@ -1969,7 +1891,7 @@ files = [ [package.extras] docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"] -testing = ["pygments", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +testing = ["pygments", "pytest (>=6)", "pytest-black (>=0.3.7) ; platform_python_implementation != \"PyPy\"", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1) ; platform_python_implementation != \"PyPy\""] [[package]] name = "inflection" @@ -1978,7 +1900,6 @@ description = "A port of Ruby on Rails inflector to Python" optional = false python-versions = ">=3.5" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2"}, {file = "inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417"}, @@ -1991,7 +1912,6 @@ description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -2004,7 +1924,6 @@ description = "An ISO 8601 date/time/duration parser and formatter" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"}, {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"}, @@ -2020,7 +1939,6 @@ description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.8.0" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, @@ -2036,7 +1954,7 @@ description = "Utility functions for Python class constructs" optional = false python-versions = ">=3.8" groups = ["build"] -markers = "(python_version >= \"3.12\" or python_version <= \"3.11\") and (platform_machine != \"ppc64le\" and platform_machine != \"s390x\")" +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\"" files = [ {file = "jaraco.classes-3.3.0-py3-none-any.whl", hash = "sha256:10afa92b6743f25c0cf5f37c6bb6e18e2c5bb84a16527ccfc0040ea377e7aaeb"}, {file = "jaraco.classes-3.3.0.tar.gz", hash = "sha256:c063dd08e89217cee02c8d5e5ec560f2c8ce6cdc2fcdc2e68f7b2e5547ed3621"}, @@ -2047,7 +1965,7 @@ more-itertools = "*" [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7) ; platform_python_implementation != \"PyPy\"", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1) ; platform_python_implementation != \"PyPy\"", "pytest-ruff"] [[package]] name = "jeepney" @@ -2056,7 +1974,7 @@ description = "Low-level, pure Python DBus protocol wrapper." optional = false python-versions = ">=3.7" groups = ["build"] -markers = "(python_version >= \"3.12\" or python_version <= \"3.11\") and (platform_machine != \"ppc64le\" and platform_machine != \"s390x\") and sys_platform == \"linux\"" +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\"" files = [ {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, {file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"}, @@ -2064,7 +1982,7 @@ files = [ [package.extras] test = ["async-timeout", "pytest", "pytest-asyncio (>=0.17)", "pytest-trio", "testpath", "trio"] -trio = ["async_generator", "trio"] +trio = ["async_generator ; python_version == \"3.6\"", "trio"] [[package]] name = "jinja2" @@ -2073,7 +1991,6 @@ description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, @@ -2092,7 +2009,6 @@ description = "JSON Matching Expressions" optional = false python-versions = ">=3.7" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, @@ -2105,7 +2021,6 @@ description = "Lightweight pipelining with Python functions" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, @@ -2118,7 +2033,6 @@ description = "Creates fake JSON files from a JSON schema" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "jsf-0.11.2-py3-none-any.whl", hash = "sha256:b4472c8c2d776eb3e0bb08368caa6ae0ead7ea78b20653facc07b6d93768612c"}, {file = "jsf-0.11.2.tar.gz", hash = "sha256:07055b363281d38ce871a9256a00587d8472802c5108721a7fe5884465104b5d"}, @@ -2142,7 +2056,6 @@ description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, @@ -2165,7 +2078,6 @@ description = "The JSON Schema meta-schemas and vocabularies, exposed as a Regis optional = false python-versions = ">=3.8" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, @@ -2181,7 +2093,7 @@ description = "Store and access your passwords safely." optional = false python-versions = ">=3.8" groups = ["build"] -markers = "(python_version >= \"3.12\" or python_version <= \"3.11\") and (platform_machine != \"ppc64le\" and platform_machine != \"s390x\")" +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\"" files = [ {file = "keyring-24.2.0-py3-none-any.whl", hash = "sha256:4901caaf597bfd3bbd78c9a0c7c4c29fcd8310dab2cffefe749e916b6527acd6"}, {file = "keyring-24.2.0.tar.gz", hash = "sha256:ca0746a19ec421219f4d713f848fa297a661a8a8c1504867e55bfb5e09091509"}, @@ -2197,7 +2109,7 @@ SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} [package.extras] completion = ["shtab"] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7) ; platform_python_implementation != \"PyPy\"", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1) ; platform_python_implementation != \"PyPy\"", "pytest-ruff"] [[package]] name = "label-studio-sdk" @@ -2206,7 +2118,6 @@ description = "" optional = false python-versions = ">=3.9,<4" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "4b2f1d9b3befa4a546907321912055a43a408d17.zip", hash = "sha256:4fb8066f51597a7b0b3687527140f3bf8a7259d4e93a9c3de0920f0ef9c4e0ff"}, ] @@ -2243,7 +2154,6 @@ description = "LaunchDarkly SDK for Python" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "launchdarkly-server-sdk-8.2.1.tar.gz", hash = "sha256:94adbd52f635ad2f1a8b4a835cbbe4ce77919a6915136b303eaca3e2a54903be"}, {file = "launchdarkly_server_sdk-8.2.1-py3-none-any.whl", hash = "sha256:b7680a4d5856da133b0dad8eca820e48bb5f2fb6dc34ebbf7f1a3a681033b426"}, @@ -2268,7 +2178,6 @@ description = "Platform-independent file locking module" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"}, {file = "lockfile-0.12.2.tar.gz", hash = "sha256:6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"}, @@ -2281,7 +2190,6 @@ description = "Powerful and Pythonic XML processing library combining libxml2/li optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, @@ -2440,7 +2348,6 @@ description = "HTML cleaner from lxml project" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "lxml_html_clean-0.4.0-py3-none-any.whl", hash = "sha256:3b5aedb6c2b4b684c0fbc8d4f1b901aae0a92c1ce525de84e71cc6dd1d9d4e3d"}, {file = "lxml_html_clean-0.4.0.tar.gz", hash = "sha256:a8b517d3f46c19e9303eafb2a1b4b422fe724ad42ae53793637a8e5cc36ffbc1"}, @@ -2456,7 +2363,6 @@ description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" groups = ["main", "build"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -2482,7 +2388,6 @@ description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, @@ -2553,7 +2458,6 @@ description = "Markdown URL utilities" optional = false python-versions = ">=3.7" groups = ["main", "build"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -2566,7 +2470,6 @@ description = "Rolling backport of unittest.mock for all Pythons" optional = false python-versions = ">=3.6" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "mock-5.1.0-py3-none-any.whl", hash = "sha256:18c694e5ae8a208cdb3d2c20a993ca1a7b0efa258c247a1e565150f477f83744"}, {file = "mock-5.1.0.tar.gz", hash = "sha256:5e96aad5ccda4718e0a229ed94b2024df75cc2d55575ba5762d31f5767b8767d"}, @@ -2584,7 +2487,7 @@ description = "More routines for operating on iterables, beyond itertools" optional = false python-versions = ">=3.8" groups = ["build"] -markers = "(python_version >= \"3.12\" or python_version <= \"3.11\") and (platform_machine != \"ppc64le\" and platform_machine != \"s390x\")" +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\"" files = [ {file = "more-itertools-10.1.0.tar.gz", hash = "sha256:626c369fa0eb37bac0291bce8259b332fd59ac792fa5497b59837309cd5b114a"}, {file = "more_itertools-10.1.0-py3-none-any.whl", hash = "sha256:64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6"}, @@ -2597,7 +2500,6 @@ description = "" optional = false python-versions = ">=3.7" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "moto-4.2.7-py2.py3-none-any.whl", hash = "sha256:3e0ef388900448485cd6eff18e9f7fcaa6cf4560b6fb536ba2e2e1278a5ecc59"}, {file = "moto-4.2.7.tar.gz", hash = "sha256:1298006aaa6996b886658eb194cac0e3a5679c9fcce6cb13e741ccc5a7247abb"}, @@ -2648,7 +2550,6 @@ description = "Type system extensions for programs checked with the mypy type ch optional = false python-versions = ">=3.5" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" 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"}, @@ -2661,7 +2562,6 @@ description = "Ammonia HTML sanitizer Python binding" optional = false python-versions = "*" groups = ["build"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "nh3-0.2.14-cp37-abi3-macosx_10_7_x86_64.whl", hash = "sha256:9be2f68fb9a40d8440cbf34cbf40758aa7f6093160bfc7fb018cce8e424f0c3a"}, {file = "nh3-0.2.14-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:f99212a81c62b5f22f9e7c3e347aa00491114a5647e1f13bbebd79c3e5f08d75"}, @@ -2688,7 +2588,6 @@ description = "Natural Language Toolkit" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "nltk-3.9.1-py3-none-any.whl", hash = "sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1"}, {file = "nltk-3.9.1.tar.gz", hash = "sha256:87d127bd3de4bd89a4f81265e5fa59cb1b199b27440175370f7417d2bc7ae868"}, @@ -2715,7 +2614,6 @@ description = "Node.js virtual environment builder" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, @@ -2731,7 +2629,6 @@ description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -2778,7 +2675,6 @@ description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "openai-1.11.1-py3-none-any.whl", hash = "sha256:e0f388ce499f53f58079d0c1f571f356f2b168b84d0d24a412506b6abc714980"}, {file = "openai-1.11.1.tar.gz", hash = "sha256:f66b8fe431af43e09594147ef3cdcb79758285de72ebafd52be9700a2af41e99"}, @@ -2803,7 +2699,6 @@ description = "A set that remembers its order, and allows looking up its items b optional = false python-versions = ">=3.5" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "ordered-set-4.0.2.tar.gz", hash = "sha256:ba93b2df055bca202116ec44b9bead3df33ea63a7d5827ff8e16738b97f33a95"}, ] @@ -2815,7 +2710,6 @@ description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" groups = ["main", "build", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, @@ -2828,7 +2722,6 @@ description = "MQTT version 5.0/3.1.1 client class" optional = false python-versions = "*" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "paho-mqtt-1.6.1.tar.gz", hash = "sha256:2a8291c81623aec00372b5a85558a372c747cbca8e9934dfe218638b8eefc26f"}, ] @@ -2843,7 +2736,6 @@ description = "Powerful data structures for data analysis, time series, and stat optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, @@ -2931,7 +2823,6 @@ description = "Utility library for gitignore style pattern matching of file path optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -2944,7 +2835,6 @@ description = "Python Build Reasonableness" optional = false python-versions = ">=2.6" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pbr-6.0.0-py2.py3-none-any.whl", hash = "sha256:4a7317d5e3b17a3dccb6a8cfe67dab65b20551404c52c8ed41279fa4f0cb4cda"}, {file = "pbr-6.0.0.tar.gz", hash = "sha256:d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"}, @@ -2957,7 +2847,6 @@ description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, @@ -3046,7 +2935,7 @@ docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline fpx = ["olefile"] mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] -typing = ["typing-extensions"] +typing = ["typing-extensions ; python_version < \"3.10\""] xmp = ["defusedxml"] [[package]] @@ -3056,7 +2945,6 @@ description = "A small Python package for determining appropriate platform-speci optional = false python-versions = ">=3.7" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, @@ -3073,7 +2961,6 @@ description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, @@ -3090,7 +2977,6 @@ description = "A framework for managing and maintaining multi-language pre-commi optional = false python-versions = ">=3.8" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pre_commit-3.3.3-py2.py3-none-any.whl", hash = "sha256:10badb65d6a38caff29703362271d7dca483d01da88f9d7e05d0b97171c136cb"}, {file = "pre_commit-3.3.3.tar.gz", hash = "sha256:a2256f489cd913d575c145132ae196fe335da32d91a8294b7afe6622335dd023"}, @@ -3110,7 +2996,6 @@ description = "Beautiful, Pythonic protocol buffers." optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "proto-plus-1.23.0.tar.gz", hash = "sha256:89075171ef11988b3fa157f5dbd8b9cf09d65fffee97e29ce403cd8defba19d2"}, {file = "proto_plus-1.23.0-py3-none-any.whl", hash = "sha256:a829c79e619e1cf632de091013a4173deed13a55f326ef84f05af6f50ff4c82c"}, @@ -3129,7 +3014,6 @@ description = "" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "protobuf-4.25.0-cp310-abi3-win32.whl", hash = "sha256:5c1203ac9f50e4853b0a0bfffd32c67118ef552a33942982eeab543f5c634395"}, {file = "protobuf-4.25.0-cp310-abi3-win_amd64.whl", hash = "sha256:c40ff8f00aa737938c5378d461637d15c442a12275a81019cc2fef06d81c9419"}, @@ -3151,7 +3035,6 @@ description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "psutil-5.9.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c1ca331af862803a42677c120aff8a814a804e09832f166f226bfd22b56feee8"}, {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:68908971daf802203f3d37e78d3f8831b6d1014864d7a85937941bb35f09aefe"}, @@ -3170,7 +3053,7 @@ files = [ ] [package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] +test = ["enum34 ; python_version <= \"3.4\"", "ipaddress ; python_version < \"3.0\"", "mock ; python_version < \"3.0\"", "pywin32 ; sys_platform == \"win32\"", "wmi ; sys_platform == \"win32\""] [[package]] name = "psycopg2-binary" @@ -3179,7 +3062,6 @@ description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "psycopg2-binary-2.9.10.tar.gz", hash = "sha256:4b3df0e6990aa98acda57d983942eff13d824135fe2250e6522edaa782a06de2"}, {file = "psycopg2_binary-2.9.10-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:0ea8e3d0ae83564f2fc554955d327fa081d065c8ca5cc6d2abb643e2c9c1200f"}, @@ -3258,7 +3140,6 @@ description = "library with cross-python path, ini-parsing, io, code, log facili optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, @@ -3271,7 +3152,6 @@ description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, @@ -3284,7 +3164,6 @@ description = "A collection of ASN.1-based protocols modules" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"}, {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"}, @@ -3300,7 +3179,6 @@ description = "Beautiful, customizable boxes in your terminal using Python" optional = false python-versions = ">=3.8.0,<4.0.0" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pyboxen-1.3.0-py3-none-any.whl", hash = "sha256:ac799533bbdb0a4f4a7c3b8723607dbe3aed3d293d3863e178064027f8177c9c"}, {file = "pyboxen-1.3.0.tar.gz", hash = "sha256:f12e6c656769f9d6aa1dd5d11688a62ed12da9dcebfa22a242103c610130b948"}, @@ -3320,7 +3198,7 @@ files = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] -markers = {main = "(python_version >= \"3.12\" or python_version <= \"3.11\") and platform_python_implementation != \"PyPy\"", build = "(python_version >= \"3.12\" or python_version <= \"3.11\") and (platform_machine != \"ppc64le\" and platform_machine != \"s390x\") and sys_platform == \"linux\" and platform_python_implementation != \"PyPy\"", test = "(python_version >= \"3.12\" or python_version <= \"3.11\") and platform_python_implementation != \"PyPy\""} +markers = {main = "platform_python_implementation != \"PyPy\"", build = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\" and platform_python_implementation != \"PyPy\"", test = "platform_python_implementation != \"PyPy\""} [[package]] name = "pydantic" @@ -3329,7 +3207,6 @@ description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, @@ -3346,7 +3223,7 @@ typing-extensions = [ [package.extras] email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata"] +timezone = ["tzdata ; python_version >= \"3.9\" and sys_platform == \"win32\""] [[package]] name = "pydantic-core" @@ -3355,7 +3232,6 @@ description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, @@ -3458,14 +3334,13 @@ description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" groups = ["main", "build"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] -plugins = ["importlib-metadata"] +plugins = ["importlib-metadata ; python_version < \"3.8\""] [[package]] name = "pyjwt" @@ -3474,7 +3349,6 @@ description = "JSON Web Token implementation in Python" optional = false python-versions = ">=3.9" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, @@ -3493,7 +3367,6 @@ description = "Python lib/cli for JSON/YAML schema validation" optional = false python-versions = "*" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pykwalify-1.8.0-py2.py3-none-any.whl", hash = "sha256:731dfa87338cca9f559d1fca2bdea37299116e3139b73f78ca90a543722d6651"}, {file = "pykwalify-1.8.0.tar.gz", hash = "sha256:796b2ad3ed4cb99b88308b533fb2f559c30fa6efb4fa9fda11347f483d245884"}, @@ -3511,7 +3384,6 @@ description = "Generate and parse RFC 3339 timestamps" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pyRFC3339-1.1-py2.py3-none-any.whl", hash = "sha256:67196cb83b470709c580bb4738b83165e67c6cc60e1f2e4f286cfcb402a926f4"}, {file = "pyRFC3339-1.1.tar.gz", hash = "sha256:81b8cbe1519cdb79bed04910dd6fa4e181faf8c88dff1e1b987b5f7ab23a5b1a"}, @@ -3527,7 +3399,6 @@ description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, @@ -3552,7 +3423,6 @@ description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pytest-cov-2.12.1.tar.gz", hash = "sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7"}, {file = "pytest_cov-2.12.1-py2.py3-none-any.whl", hash = "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a"}, @@ -3573,7 +3443,6 @@ description = "A Django plugin for pytest." optional = false python-versions = ">=3.5" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pytest-django-4.1.0.tar.gz", hash = "sha256:26f02c16d36fd4c8672390deebe3413678d89f30720c16efb8b2a6bf63b9041f"}, {file = "pytest_django-4.1.0-py3-none-any.whl", hash = "sha256:10e384e6b8912ded92db64c58be8139d9ae23fb8361e5fc139d8e4f8fc601bc2"}, @@ -3593,7 +3462,6 @@ description = "py.test plugin that allows you to add environment variables." optional = false python-versions = "*" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pytest-env-0.6.2.tar.gz", hash = "sha256:7e94956aef7f2764f3c147d216ce066bf6c42948bb9e293169b1b1c880a580c2"}, ] @@ -3608,7 +3476,6 @@ description = "run tests in isolated forked subprocesses" optional = false python-versions = ">=3.7" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pytest-forked-1.6.0.tar.gz", hash = "sha256:4dafd46a9a600f65d822b8f605133ecf5b3e1941ebb3588e943b4e3eb71a5a3f"}, {file = "pytest_forked-1.6.0-py3-none-any.whl", hash = "sha256:810958f66a91afb1a1e2ae83089d8dc1cd2437ac96b12963042fbb9fb4d16af0"}, @@ -3625,7 +3492,6 @@ description = "Thin-wrapper around the mock package for easier use with py.test" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pytest-mock-1.10.3.tar.gz", hash = "sha256:330bfa1a71c9b6e84e2976f01d70d8a174f755e7f9dc5b22f4b7335992e1e98b"}, {file = "pytest_mock-1.10.3-py2.py3-none-any.whl", hash = "sha256:cea3983a1ebc88bf7c0fa1ed8c84e67b898bf71a320a49605bcb74f31e6cfd6a"}, @@ -3644,7 +3510,6 @@ description = "pytest xdist plugin for distributed testing and loop-on-failing m optional = false python-versions = ">=3.6" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pytest-xdist-2.5.0.tar.gz", hash = "sha256:4580deca3ff04ddb2ac53eba39d76cb5dd5edeac050cb6fbc768b0dd712b4edf"}, {file = "pytest_xdist-2.5.0-py3-none-any.whl", hash = "sha256:6fe5c74fec98906deb8f2d2b616b5c782022744978e7bd4695d39c8f42d0ce65"}, @@ -3667,7 +3532,6 @@ description = "Advanced Python dictionaries with dot notation access" optional = false python-versions = ">=3.7" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "python-box-6.1.0.tar.gz", hash = "sha256:6e7c243b356cb36e2c0f0e5ed7850969fede6aa812a7f501de7768996c7744d7"}, {file = "python_box-6.1.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:c14aa4e72bf30f4d573e62ff8030a86548603a100c3fb534561dbedf4a83f454"}, @@ -3694,7 +3558,7 @@ msgpack = ["msgpack"] pyyaml = ["PyYAML"] ruamel-yaml = ["ruamel.yaml (>=0.17)"] toml = ["toml"] -tomli = ["tomli", "tomli-w"] +tomli = ["tomli ; python_version < \"3.11\"", "tomli-w"] yaml = ["ruamel.yaml (>=0.17)"] [[package]] @@ -3704,7 +3568,6 @@ description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, @@ -3720,7 +3583,6 @@ description = "A python library adding a json log formatter" optional = false python-versions = ">=3.5" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "python-json-logger-2.0.4.tar.gz", hash = "sha256:764d762175f99fcc4630bd4853b09632acb60a6224acb27ce08cd70f0b1b81bd"}, {file = "python_json_logger-2.0.4-py3-none-any.whl", hash = "sha256:3b03487b14eb9e4f77e4fc2a023358b5394b82fd89cecf5586259baed57d8c6f"}, @@ -3733,7 +3595,6 @@ description = "World timezone definitions, modern and historical" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, @@ -3746,7 +3607,7 @@ description = "The uWSGI server" optional = true python-versions = "*" groups = ["main"] -markers = "(python_version >= \"3.12\" or python_version <= \"3.11\") and extra == \"uwsgi\"" +markers = "extra == \"uwsgi\"" files = [ {file = "pyuwsgi-2.0.28.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:611e6585a51b3a1f9619e1069dcdc1b8bf37ad7aa16b271fce2ca3e1440fc548"}, {file = "pyuwsgi-2.0.28.post1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5c2caedcc6fd0cd217b65ab863a51e18032b3ce81316d0a079652ed43ed8ba68"}, @@ -3812,7 +3673,7 @@ description = "A (partial) reimplementation of pywin32 using ctypes/cffi" optional = false python-versions = ">=3.6" groups = ["build"] -markers = "(python_version >= \"3.12\" or python_version <= \"3.11\") and (platform_machine != \"ppc64le\" and platform_machine != \"s390x\") and sys_platform == \"win32\"" +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"win32\"" files = [ {file = "pywin32-ctypes-0.2.2.tar.gz", hash = "sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60"}, {file = "pywin32_ctypes-0.2.2-py3-none-any.whl", hash = "sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"}, @@ -3825,7 +3686,6 @@ description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.6" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, @@ -3887,7 +3747,6 @@ description = "readme_renderer is a library for rendering readme descriptions fo optional = false python-versions = ">=3.8" groups = ["build"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "readme_renderer-42.0-py3-none-any.whl", hash = "sha256:13d039515c1f24de668e2c93f2e877b9dbe6c6c32328b90a40a49d8b2b85f36d"}, {file = "readme_renderer-42.0.tar.gz", hash = "sha256:2d55489f83be4992fe4454939d1a051c33edbab778e82761d060c9fc6b308cd1"}, @@ -3908,7 +3767,6 @@ description = "Python client for Redis database and key-value store" optional = false python-versions = ">=3.8" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "redis-5.2.1-py3-none-any.whl", hash = "sha256:ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4"}, {file = "redis-5.2.1.tar.gz", hash = "sha256:16f2e22dff21d5125e8481515e386711a34cbec50f0e44413dd7d9c060a54e0f"}, @@ -3928,7 +3786,6 @@ description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, @@ -3945,7 +3802,6 @@ description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f"}, {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6"}, @@ -4035,7 +3891,6 @@ description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" groups = ["main", "build", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, @@ -4058,7 +3913,6 @@ description = "File transport adapter for Requests" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c"}, {file = "requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658"}, @@ -4074,7 +3928,6 @@ description = "Mock out responses from the requests package" optional = false python-versions = ">=3.5" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "requests-mock-1.12.1.tar.gz", hash = "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401"}, {file = "requests_mock-1.12.1-py2.py3-none-any.whl", hash = "sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563"}, @@ -4093,7 +3946,6 @@ description = "A utility belt for advanced users of python-requests" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["build"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, @@ -4109,7 +3961,6 @@ description = "A utility library for mocking out the `requests` Python library." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "responses-0.13.0-py2.py3-none-any.whl", hash = "sha256:a4a90c8244006c01f4246aecf532fbb5429c4031df4adcc7638061f0f3ce4ceb"}, {file = "responses-0.13.0.tar.gz", hash = "sha256:27d8822d65dc8875a039301831de8ac17db2473ae2a8fabd4e6599b25ce2f353"}, @@ -4121,7 +3972,7 @@ six = "*" urllib3 = ">=1.25.10" [package.extras] -tests = ["coverage (>=3.7.1,<6.0.0)", "flake8", "mypy", "pytest (>=4.6)", "pytest (>=4.6,<5.0)", "pytest-cov", "pytest-localserver"] +tests = ["coverage (>=3.7.1,<6.0.0)", "flake8", "mypy ; python_version >= \"3.5\"", "pytest (>=4.6) ; python_version >= \"3.5\"", "pytest (>=4.6,<5.0) ; python_version < \"3.5\"", "pytest-cov", "pytest-localserver"] [[package]] name = "rfc3986" @@ -4130,7 +3981,6 @@ description = "Validating URI References per RFC 3986" optional = false python-versions = ">=3.7" groups = ["build"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd"}, {file = "rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"}, @@ -4146,7 +3996,6 @@ description = "Render rich text, tables, progress bars, syntax highlighting, mar optional = false python-versions = ">=3.7.0" groups = ["main", "build"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, @@ -4166,7 +4015,6 @@ description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2"}, {file = "rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f"}, @@ -4280,7 +4128,6 @@ description = "RQ is a simple, lightweight, library for creating background jobs optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "rq-1.16.2-py3-none-any.whl", hash = "sha256:52e619f6cb469b00e04da74305045d244b75fecb2ecaa4f26422add57d3c5f09"}, {file = "rq-1.16.2.tar.gz", hash = "sha256:5c5b9ad5fbaf792b8fada25cc7627f4d206a9a4455aced371d4f501cc3f13b34"}, @@ -4297,7 +4144,6 @@ description = "Pure-Python RSA implementation" optional = false python-versions = ">=3.6,<4" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, @@ -4313,7 +4159,6 @@ description = "Generate random strings in Python" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "rstr-3.2.2-py3-none-any.whl", hash = "sha256:f39195d38da1748331eeec52f1276e71eb6295e7949beea91a5e9af2340d7b3b"}, {file = "rstr-3.2.2.tar.gz", hash = "sha256:c4a564d4dfb4472d931d145c43d1cf1ad78c24592142e7755b8866179eeac012"}, @@ -4326,7 +4171,6 @@ description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip pres optional = false python-versions = ">=3.7" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "ruamel.yaml-0.18.5-py3-none-any.whl", hash = "sha256:a013ac02f99a69cdd6277d9664689eb1acba07069f912823177c5eced21a6ada"}, {file = "ruamel.yaml-0.18.5.tar.gz", hash = "sha256:61917e3a35a569c1133a8f772e1226961bf5a1198bea7e23f06a0841dea1ab0e"}, @@ -4346,7 +4190,7 @@ description = "C version of reader, parser and emitter for ruamel.yaml derived f optional = false python-versions = ">=3.6" groups = ["test"] -markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_python_implementation == \"CPython\" and python_version < \"3.13\"" +markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\"" files = [ {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, @@ -4407,7 +4251,6 @@ description = "Awesome Django authorization, without the database" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "rules-3.4-py2.py3-none-any.whl", hash = "sha256:e906114d9b3cce73871213c6311b94cb26a5bc2c3b00aa2f13d3633a65447817"}, {file = "rules-3.4.tar.gz", hash = "sha256:c4702c1d60ca43e97d4dfced31e98274c652dea3c461105d8df6186d663e3212"}, @@ -4420,7 +4263,6 @@ description = "An Amazon S3 Transfer Manager" optional = false python-versions = ">= 3.7" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "s3transfer-0.7.0-py3-none-any.whl", hash = "sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a"}, {file = "s3transfer-0.7.0.tar.gz", hash = "sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e"}, @@ -4439,7 +4281,7 @@ description = "Python bindings to FreeDesktop.org Secret Service API" optional = false python-versions = ">=3.6" groups = ["build"] -markers = "(python_version >= \"3.12\" or python_version <= \"3.11\") and (platform_machine != \"ppc64le\" and platform_machine != \"s390x\") and sys_platform == \"linux\"" +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and sys_platform == \"linux\"" files = [ {file = "SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"}, {file = "SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77"}, @@ -4456,7 +4298,6 @@ description = "Python helper for Semantic Versioning (http://semver.org/)" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "semver-2.13.0-py2.py3-none-any.whl", hash = "sha256:ced8b23dceb22134307c1b8abfa523da14198793d9787ac838e70e29e77458d4"}, {file = "semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f"}, @@ -4469,7 +4310,6 @@ description = "Python client for Sentry (https://sentry.io)" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "sentry_sdk-2.16.0-py2.py3-none-any.whl", hash = "sha256:49139c31ebcd398f4f6396b18910610a0c1602f6e67083240c33019d1f6aa30c"}, {file = "sentry_sdk-2.16.0.tar.gz", hash = "sha256:90f733b32e15dfc1999e6b7aca67a38688a567329de4d6e184154a73f96c6892"}, @@ -4523,20 +4363,19 @@ description = "Easily download, build, install, upgrade, and uninstall Python pa optional = false python-versions = ">=3.9" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "setuptools-75.4.0-py3-none-any.whl", hash = "sha256:b3c5d862f98500b06ffdf7cc4499b48c46c317d8d56cb30b5c8bce4d88f5c216"}, {file = "setuptools-75.4.0.tar.gz", hash = "sha256:1dc484f5cf56fd3fe7216d7b8df820802e7246cfb534a1db2aa64f14fcb9cdcb"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"] -core = ["importlib-metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.7.0) ; sys_platform != \"cygwin\""] +core = ["importlib-metadata (>=6) ; python_version < \"3.10\"", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "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)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "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)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] +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.2.0)", "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.12,<1.14)", "pytest-mypy"] [[package]] name = "six" @@ -4545,7 +4384,6 @@ description = "Python 2 and 3 compatibility utilities" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -4558,7 +4396,6 @@ description = "Utils for streaming large files (S3, HDFS, GCS, Azure Blob Storag optional = false python-versions = "<4.0,>=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "smart_open-7.1.0-py3-none-any.whl", hash = "sha256:4b8489bb6058196258bafe901730c7db0dcf4f083f316e97269c66f45502055b"}, {file = "smart_open-7.1.0.tar.gz", hash = "sha256:a4f09f84f0f6d3637c6543aca7b5487438877a21360e7368ccf1f704789752ba"}, @@ -4586,7 +4423,6 @@ description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, @@ -4599,7 +4435,6 @@ description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" optional = false python-versions = "*" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, @@ -4612,7 +4447,6 @@ description = "A non-validating SQL parser." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "sqlparse-0.5.0-py3-none-any.whl", hash = "sha256:c204494cd97479d0e39f28c93d46c0b2d5959c7b9ab904762ea6c7af211c8663"}, {file = "sqlparse-0.5.0.tar.gz", hash = "sha256:714d0a4932c059d16189f58ef5411ec2287a4360f17cdd0edd2d09d4c5087c93"}, @@ -4629,7 +4463,6 @@ description = "Manage dynamic plugins for Python applications" optional = false python-versions = ">=3.8" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "stevedore-4.1.1-py3-none-any.whl", hash = "sha256:aa6436565c069b2946fe4ebff07f5041e0c8bf18c7376dd29edf80cf7d524e4e"}, {file = "stevedore-4.1.1.tar.gz", hash = "sha256:7f8aeb6e3f90f96832c301bff21a7eb5eefbe894c88c506483d355565d88cc1a"}, @@ -4645,7 +4478,6 @@ description = "Simple testing of RESTful APIs" optional = false python-versions = ">=3.8" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "tavern-2.3.0-py3-none-any.whl", hash = "sha256:a55ec964d9063df26b9facb5eff134037e0a825e3661fb380d6887de95b993c1"}, {file = "tavern-2.3.0.tar.gz", hash = "sha256:07aead44cf39a923e6afa69b0e56ebfa31e12080043e9fdf5af0078e762fe2ee"}, @@ -4673,7 +4505,6 @@ description = "Accurately separates a URL's subdomain, domain, and public suffix optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "tldextract-5.1.3-py3-none-any.whl", hash = "sha256:78de310cc2ca018692de5ddf320f9d6bd7c5cf857d0fd4f2175f0cdf4440ea75"}, {file = "tldextract-5.1.3.tar.gz", hash = "sha256:d43c7284c23f5dc8a42fd0fee2abede2ff74cc622674e4cb07f514ab3330c338"}, @@ -4696,7 +4527,6 @@ description = "Python Library for Tom's Obvious, Minimal Language" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, @@ -4722,7 +4552,6 @@ description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "tqdm-4.66.3-py3-none-any.whl", hash = "sha256:4f41d54107ff9a223dca80b53efe4fb654c67efaba7f47bada3ee9d50e05bd53"}, {file = "tqdm-4.66.3.tar.gz", hash = "sha256:23097a41eba115ba99ecae40d06444c15d1c0c698d527a01c6c8bd1c5d0647e5"}, @@ -4744,7 +4573,6 @@ description = "Collection of utilities for publishing packages on PyPI" optional = false python-versions = ">=3.8" groups = ["build"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "twine-6.1.0-py3-none-any.whl", hash = "sha256:a47f973caf122930bf0fbbf17f80b83bc1602c9ce393c7845f289a3001dc5384"}, {file = "twine-6.1.0.tar.gz", hash = "sha256:be324f6272eff91d07ee93f251edf232fc647935dd585ac003539b42404a8dbd"}, @@ -4771,7 +4599,6 @@ description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" groups = ["main", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" 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"}, @@ -4784,7 +4611,6 @@ description = "Provider of IANA time zone data" optional = false python-versions = ">=2" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, @@ -4797,7 +4623,6 @@ description = "Python port of Browserscope's user agent parser" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "ua-parser-0.18.0.tar.gz", hash = "sha256:db51f1b59bfaa82ed9e2a1d99a54d3e4153dddf99ac1435d51828165422e624e"}, {file = "ua_parser-0.18.0-py2.py3-none-any.whl", hash = "sha256:9d94ac3a80bcb0166823956a779186c746b50ea4c9fd9bf30fdb758553c38950"}, @@ -4810,7 +4635,6 @@ description = "Ultra fast JSON encoder and decoder for Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "ujson-5.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1"}, {file = "ujson-5.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75"}, @@ -4882,7 +4706,6 @@ description = "Implementation of RFC 6570 URI Templates" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, @@ -4895,15 +4718,14 @@ description = "HTTP library with thread-safe connection pooling, file post, and optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" groups = ["main", "build", "test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "urllib3-1.26.19-py2.py3-none-any.whl", hash = "sha256:37a0344459b199fce0e80b0d3569837ec6b6937435c5244e7fd73fa6006830f3"}, {file = "urllib3-1.26.19.tar.gz", hash = "sha256:3e3d753a8618b86d7de333b4223005f68720bcd6a7d2bcb9fbd2229ec7c1e429"}, ] [package.extras] -brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +brotli = ["brotli (==1.0.9) ; os_name != \"nt\" and python_version < \"3\" and platform_python_implementation == \"CPython\"", "brotli (>=1.0.9) ; python_version >= \"3\" and platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; (os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation != \"CPython\"", "brotlipy (>=0.6.0) ; os_name == \"nt\" and python_version < \"3\""] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress ; python_version == \"2.7\"", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] @@ -4913,7 +4735,6 @@ description = "A library to identify devices (phones, tablets) and their capabil optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "user-agents-2.2.0.tar.gz", hash = "sha256:d36d25178db65308d1458c5fa4ab39c9b2619377010130329f3955e7626ead26"}, {file = "user_agents-2.2.0-py3-none-any.whl", hash = "sha256:a98c4dc72ecbc64812c4534108806fb0a0b3a11ec3fd1eafe807cee5b0a942e7"}, @@ -4929,7 +4750,7 @@ description = "uWSGI top-like interface" optional = true python-versions = "*" groups = ["main"] -markers = "(python_version >= \"3.12\" or python_version <= \"3.11\") and extra == \"uwsgi\"" +markers = "extra == \"uwsgi\"" files = [ {file = "uwsgitop-0.12.tar.gz", hash = "sha256:4f9330951f0fb9633226de36cf0c28c04dcf323efab608834aa81f638b6019b2"}, ] @@ -4941,7 +4762,6 @@ description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "virtualenv-20.26.6-py3-none-any.whl", hash = "sha256:7345cc5b25405607a624d8418154577459c3e0277f5466dd79c49d5e492995f2"}, {file = "virtualenv-20.26.6.tar.gz", hash = "sha256:280aede09a2a5c317e409a00102e7077c6432c5a38f0ef938e643805a7ad2c48"}, @@ -4954,7 +4774,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)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] +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 = "webencodings" @@ -4963,7 +4783,6 @@ description = "Character encoding aliases for legacy web content" optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, @@ -4976,7 +4795,6 @@ description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.8" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "werkzeug-3.0.6-py3-none-any.whl", hash = "sha256:1bc0c2310d2fbb07b1dd1105eba2f7af72f322e1e455f2f93c993bee8c8a5f17"}, {file = "werkzeug-3.0.6.tar.gz", hash = "sha256:a8dd59d4de28ca70471a34cba79bed5f7ef2e036a76b3ab0835474246eb41f8d"}, @@ -4995,7 +4813,6 @@ description = "A built-package format for Python" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "wheel-0.40.0-py3-none-any.whl", hash = "sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247"}, {file = "wheel-0.40.0.tar.gz", hash = "sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873"}, @@ -5011,7 +4828,6 @@ description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, @@ -5087,7 +4903,6 @@ description = "Converts XML into JSON/Python dicts/arrays and vice-versa." optional = false python-versions = "*" groups = ["main"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "xmljson-0.2.1-py2.py3-none-any.whl", hash = "sha256:8f1d7aba2c0c1bfa0203b577f21a1d95fde4485205ff638b854cb4d834e639b0"}, {file = "xmljson-0.2.1.tar.gz", hash = "sha256:b4158e66aa1e62ee39f7f80eb2fe4f767670ba3c0d5de9804420dc53427fdec8"}, @@ -5100,7 +4915,6 @@ description = "Makes working with XML feel like you are working with JSON" optional = false python-versions = ">=3.4" groups = ["test"] -markers = "python_version >= \"3.12\" or python_version <= \"3.11\"" files = [ {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, @@ -5113,7 +4927,7 @@ description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" groups = ["build"] -markers = "python_version <= \"3.11\" and (platform_machine != \"ppc64le\" and platform_machine != \"s390x\")" +markers = "platform_machine != \"ppc64le\" and platform_machine != \"s390x\" and python_version <= \"3.11\"" files = [ {file = "zipp-3.19.1-py3-none-any.whl", hash = "sha256:2828e64edb5386ea6a52e7ba7cdb17bb30a73a858f5eb6eb93d8d36f5ea26091"}, {file = "zipp-3.19.1.tar.gz", hash = "sha256:35427f6d5594f4acf82d25541438348c26736fa9b3afa2754bcd63cdb99d8e8f"}, diff --git a/web/apps/labelstudio/src/app/App.jsx b/web/apps/labelstudio/src/app/App.jsx index 7f65003089c3..f2e813e31f1d 100644 --- a/web/apps/labelstudio/src/app/App.jsx +++ b/web/apps/labelstudio/src/app/App.jsx @@ -70,11 +70,11 @@ const App = ({ content }) => { , , , + , , , , , - , , isFF(FF_PRODUCT_TOUR) && , ].filter(Boolean)} diff --git a/web/apps/labelstudio/src/app/ErrorBoundary.jsx b/web/apps/labelstudio/src/app/ErrorBoundary.jsx index 94bdad4f5fce..be249054a30c 100644 --- a/web/apps/labelstudio/src/app/ErrorBoundary.jsx +++ b/web/apps/labelstudio/src/app/ErrorBoundary.jsx @@ -1,6 +1,9 @@ import React, { Component } from "react"; import { ErrorWrapper } from "../components/Error/Error"; import { Modal } from "../components/Modal/ModalPopup"; +import { captureException } from "../config/Sentry"; +import { isFF } from "../utils/feature-flags"; +import { IMPROVE_GLOBAL_ERROR_MESSAGES } from "../providers/ApiProvider"; export const ErrorContext = React.createContext(); @@ -16,7 +19,13 @@ export default class ErrorBoundary extends Component { } componentDidCatch(error, { componentStack }) { - // You can also log the error to an error reporting service + // Capture the error in Sentry, so we can fix it directly + // Don't make the users copy and paste the stacktrace, it's not actionable + captureException(error, { + extra: { + component_stacktrace: componentStack, + }, + }); this.setState({ error, hasError: true, @@ -35,13 +44,19 @@ export default class ErrorBoundary extends Component { setTimeout(() => location.reload(), 32); }; + // We will capture the stacktrace in Sentry, so we don't need to show it in the modal + // It is not actionable to the user, let's not show it + const stacktrace = isFF(IMPROVE_GLOBAL_ERROR_MESSAGES) + ? undefined + : `${errorInfo ? `Component Stack: ${errorInfo}` : ""}\n\n${this.state.error?.stack ?? ""}`; + return ( location.reload()} style={{ width: "60vw" }} visible bare>
location.reload()} /> diff --git a/web/apps/labelstudio/src/components/Error/InlineError.jsx b/web/apps/labelstudio/src/components/Error/InlineError.jsx index 3a94a86333c9..108b2f41483b 100644 --- a/web/apps/labelstudio/src/components/Error/InlineError.jsx +++ b/web/apps/labelstudio/src/components/Error/InlineError.jsx @@ -7,7 +7,7 @@ export const InlineError = ({ children, includeValidation, className, style }) = const context = React.useContext(ApiContext); React.useEffect(() => { - context.showModal = false; + context.showGlobalError = false; }, [context]); return context.error ? ( diff --git a/web/apps/labelstudio/src/components/Form/Form.jsx b/web/apps/labelstudio/src/components/Form/Form.jsx index 6e2b74fab372..95265a1400f6 100644 --- a/web/apps/labelstudio/src/components/Form/Form.jsx +++ b/web/apps/labelstudio/src/components/Form/Form.jsx @@ -18,6 +18,7 @@ import { FormValidationContext, } from "./FormContext"; import * as Validators from "./Validation/Validators"; +import { ToastProvider, ToastViewport } from "@humansignal/ui"; const PASSWORD_PROTECTED_VALUE = "got ya, suspicious hacker!"; @@ -65,6 +66,7 @@ export default class Form extends React.Component { , , , + , , ]; @@ -86,6 +88,7 @@ export default class Form extends React.Component { )} + ); } diff --git a/web/apps/labelstudio/src/components/Modal/Modal.jsx b/web/apps/labelstudio/src/components/Modal/Modal.jsx index 2f574a9c186b..e79e67450ef0 100644 --- a/web/apps/labelstudio/src/components/Modal/Modal.jsx +++ b/web/apps/labelstudio/src/components/Modal/Modal.jsx @@ -8,6 +8,7 @@ import { cn } from "../../utils/bem"; import { Button } from "../Button/Button"; import { Space } from "../Space/Space"; import { Modal } from "./ModalPopup"; +import { ToastProvider, ToastViewport } from "@humansignal/ui"; const standaloneModal = (props) => { const modalRef = createRef(); @@ -27,7 +28,12 @@ const standaloneModal = (props) => { providers={ props.simple ? [] - : [, , ] + : [ + , + , + , + , + ] } > { }} animateAppearance={animate} /> + {!props.simple && } , rootDiv, ); diff --git a/web/apps/labelstudio/src/config/Sentry.ts b/web/apps/labelstudio/src/config/Sentry.ts index b0d5a0c2ed0b..756d00b24a0c 100644 --- a/web/apps/labelstudio/src/config/Sentry.ts +++ b/web/apps/labelstudio/src/config/Sentry.ts @@ -2,9 +2,15 @@ import * as Sentry from "@sentry/browser"; import * as ReactSentry from "@sentry/react"; import type { RouterHistory } from "@sentry/react/build/types/reactrouter"; import { Route } from "react-router-dom"; +import { isDefined } from "../utils/helpers"; + +const SENTRY_DSN = APP_SETTINGS.sentry_dsn; +const SENTRY_ENV = APP_SETTINGS.sentry_environment ?? process.env.NODE_ENV; +const SENTRY_RATE = APP_SETTINGS.sentry_rate ? Number.parseFloat(APP_SETTINGS.sentry_rate) : 0.25; +const SENTRY_ENABLED = APP_SETTINGS.debug === false && isDefined(SENTRY_DSN); export const initSentry = (history: RouterHistory) => { - if (APP_SETTINGS.debug === false && APP_SETTINGS.sentry_dsn) { + if (SENTRY_ENABLED) { setTags(); Sentry.init({ dsn: APP_SETTINGS.sentry_dsn, @@ -12,16 +18,36 @@ export const initSentry = (history: RouterHistory) => { Sentry.browserTracingIntegration(), ReactSentry.reactRouterV5BrowserTracingIntegration({ history }), ], - environment: process.env.NODE_ENV, + environment: SENTRY_ENV, // Set tracesSampleRate to 1.0 to capture 100% // of transactions for performance monitoring. // We recommend adjusting this value in production - tracesSampleRate: 0.25, + tracesSampleRate: SENTRY_RATE, release: getVersion(), }); } }; +export const captureMessage: typeof Sentry.captureMessage = (message, type) => { + if (!SENTRY_ENABLED) { + if (typeof type === "string" && type in console) { + (console as any)[type](message); + } else { + console.log(message); + } + return ""; + } + return Sentry.captureMessage(message, type); +}; + +export const captureException: typeof Sentry.captureException = (exception, captureContext) => { + if (!SENTRY_ENABLED) { + console.error(exception, captureContext); + return ""; + } + return Sentry.captureException(exception, captureContext); +}; + const setTags = () => { const tags: Record = {}; diff --git a/web/apps/labelstudio/src/providers/ApiProvider.tsx b/web/apps/labelstudio/src/providers/ApiProvider.tsx index cd1987ac12ee..155a26f83750 100644 --- a/web/apps/labelstudio/src/providers/ApiProvider.tsx +++ b/web/apps/labelstudio/src/providers/ApiProvider.tsx @@ -13,7 +13,14 @@ import { modal } from "../components/Modal/Modal"; import { API_CONFIG } from "../config/ApiConfig"; import { type ApiParams, APIProxy } from "@humansignal/core/lib/api-proxy"; import { absoluteURL, isDefined } from "../utils/helpers"; +import { FF_IMPROVE_GLOBAL_ERROR_MESSAGES, isFF } from "../utils/feature-flags"; import type { ApiResponse, WrappedResponse } from "@humansignal/core/lib/api-proxy/types"; +import { ToastType, useToast } from "@humansignal/ui"; +import { captureException } from "../config/Sentry"; + +export const IMPROVE_GLOBAL_ERROR_MESSAGES = isFF(FF_IMPROVE_GLOBAL_ERROR_MESSAGES); +// Duration for toast errors +export const API_ERROR_TOAST_DURATION = 10000; export const API = new APIProxy(API_CONFIG); @@ -27,14 +34,24 @@ export type ApiCallOptions = { errorFilter?: (response: ApiResponse) => boolean; } & ApiParams; +export type ErrorDisplayMessage = ( + errorDetails: FormattedError, + result: ApiResponse, + showGlobalError?: boolean, +) => void; + export type ApiContextType = { api: typeof API; - callApi: (method: keyof (typeof API)["methods"], options?: ApiCallOptions) => Promise>; - handleError: (response: any, showModal?: boolean) => Promise; + callApi: (method: keyof (typeof API)["methods"], options?: ApiCallOptions) => Promise | null>; + handleError: ( + response: Response | ApiResponse, + displayErrorMessage?: ErrorDisplayMessage, + showGlobalError?: boolean, + ) => Promise; resetError: () => void; - error: any; - showModal: true; - errorFormatter: (result: any) => any; + error: ApiResponse | null; + showGlobalError: boolean; + errorFormatter: (result: ApiResponse) => FormattedError; isValidMethod: (name: string) => boolean; }; @@ -65,70 +82,161 @@ export const errorFormatter = (result: ApiResponse): FormattedError => { }; }; -const handleError = async (response: Response, showModal = true) => { - let result: ApiResponse = response; +const displayErrorModal: ErrorDisplayMessage = (errorDetails) => { + const { isShutdown, title, message, stacktrace, ...formattedError } = errorDetails; + + modal({ + unique: "network-error", + allowClose: !isShutdown, + body: isShutdown ? ( + + ) : ( + + ), + simple: true, + style: { width: 680 }, + }); +}; + +const handleError = async ( + response: Response | ApiResponse, + displayErrorMessage?: ErrorDisplayMessage, + showGlobalError = true, +) => { + let result: ApiResponse = response as ApiResponse; - if (result instanceof Response) { + if (response instanceof Response) { result = await API.generateError(response); } - const { isShutdown, ...formattedError } = errorFormatter(result); - - if (showModal) { - modal({ - unique: "network-error", - allowClose: !isShutdown, - body: isShutdown ? ( - - ) : ( - - ), - simple: true, - style: { width: 680 }, - }); + const errorDetails = errorFormatter(result); + + // Allow inline error handling + if (!showGlobalError) { + return errorDetails.isShutdown; + } + + if (displayErrorMessage) { + displayErrorMessage(errorDetails, result); + } else { + displayErrorModal(errorDetails, result); } - return isShutdown; + return errorDetails.isShutdown; }; export const ApiProvider = forwardRef>(({ children }, ref) => { - const [error, setError] = useState(null); + const [error, setError] = useState(null); + const toast = useToast(); const resetError = () => setError(null); const callApi = useCallback( - async (method: keyof (typeof API)["methods"], { params = {}, errorFilter, ...rest } = {}) => { - if (apiLocked) return; + async ( + method: keyof (typeof API)["methods"], + { params = {}, errorFilter, suppressError, ...rest }: ApiCallOptions = {}, + ): Promise | null> => { + if (apiLocked) return null; setError(null); const result = await API.invoke(method, params, rest); - if (result?.status === 401) { + if ( + result && + "status" in result && + (result.status === 401 || (IMPROVE_GLOBAL_ERROR_MESSAGES && result.status === 404)) + ) { apiLocked = true; - location.href = absoluteURL("/"); - return; + + let redirectUrl = absoluteURL("/"); + + if (result.status === 404) { + // If coming from projects or a labelling page, redirect to projects + if (location.pathname.startsWith("/projects")) { + redirectUrl = absoluteURL("/projects"); + } + + // Store the error message in sessionStorage to show after redirect + sessionStorage.setItem("redirectMessage", "The page or resource you were looking for does not exist."); + } + + // Perform immediate redirect + location.href = redirectUrl; + return null; } if (result?.error) { - const shouldShowModalError = - (!isDefined(errorFilter) || errorFilter(result) === false) && !result.error?.includes("aborted"); + const status = result.$meta.status; + const requestCancelled = !status; + const requestAborted = result.error?.includes("aborted"); + const requestCompleted = !(requestCancelled || requestAborted); + const containsValidationErrors = + isDefined(result.response?.validation_errors) && Object.keys(result.response?.validation_errors).length > 0; + + let shouldShowGlobalError = (!isDefined(errorFilter) || errorFilter(result) === false) && requestCompleted; + + if (IMPROVE_GLOBAL_ERROR_MESSAGES && requestCompleted) { + // We only show toast errors for 4xx errors + // Any non-4xx errors are logged to Sentry but there is nothing the user can do about them so don't show them to the user + // 401 errors are handled above + // If we end up with an empty status string from a cancelled request, don't show the error + const is4xx = status.toString().startsWith("4"); + const stacktrace = result.response?.exc_info; + const version = result.response?.version; + + shouldShowGlobalError = shouldShowGlobalError && is4xx; + + // Log non-4xx errors that are not aborted or cancelled requests, or any errors containing an api stacktrace to Sentry + // So we know about them but don't show them to the user + if ((!is4xx || stacktrace) && result.error) { + captureException(new Error(result.error), { + extra: { + method, + params, + status, + server_stacktrace: stacktrace, + server_version: version, + }, + }); + } + } - if (shouldShowModalError && rest.suppressError !== true) { + if (shouldShowGlobalError && suppressError !== true) { setError(result); - const isShutdown = await handleError(result, contextValue.showModal); + let displayErrorToast: ErrorDisplayMessage | undefined; + + // If there are no validation errors, show a toast error + // Otherwise, show a modal error as previously handled + if (IMPROVE_GLOBAL_ERROR_MESSAGES && !containsValidationErrors) { + displayErrorToast = (errorDetails) => { + toast?.show({ + message: `${errorDetails.title}: ${errorDetails.message}`, + type: ToastType.error, + duration: API_ERROR_TOAST_DURATION, + }); + }; + } + + // Use global error handling + const isShutdown = await handleError(result, displayErrorToast, contextValue.showGlobalError); apiLocked = apiLocked || isShutdown; return null; } } - return result; + return result as WrappedResponse; }, [], ); @@ -140,18 +248,33 @@ export const ApiProvider = forwardRef>(({ handleError, resetError, error, - showModal: true, + showGlobalError: true, errorFormatter, isValidMethod(name: string) { return API.isValidMethod(name); }, }), - [error], + [error, callApi], ); + useEffect(() => { if (ref && !(ref instanceof Function)) ref.current = contextValue; }, [ref]); + // Check for redirect message in sessionStorage and display it + useEffect(() => { + const redirectMessage = sessionStorage.getItem("redirectMessage"); + if (redirectMessage) { + toast?.show({ + message: redirectMessage, + type: ToastType.error, + duration: API_ERROR_TOAST_DURATION, + }); + // Remove the message from sessionStorage to prevent showing it again + sessionStorage.removeItem("redirectMessage"); + } + }, [toast]); + return {children}; }); diff --git a/web/libs/core/src/lib/utils/feature-flags.ts b/web/libs/core/src/lib/utils/feature-flags.ts index 42f5960dd2cf..4fcb2b558724 100644 --- a/web/libs/core/src/lib/utils/feature-flags.ts +++ b/web/libs/core/src/lib/utils/feature-flags.ts @@ -37,6 +37,7 @@ export const FF_UNSAVED_CHANGES = "fflag_feat_front_leap_1198_unsaved_changes_18 */ export const FF_AUTH_TOKENS = "fflag__feature_develop__prompts__dia_1829_jwt_token_auth"; +export const FF_IMPROVE_GLOBAL_ERROR_MESSAGES = "fflag_feat_front_optic_1746_improve_global_error_messages_short"; /** * Enable new home page for LSO and LSE */ diff --git a/web/libs/ui/src/lib/toast/toast.tsx b/web/libs/ui/src/lib/toast/toast.tsx index 3633869bde81..d69b1b247680 100644 --- a/web/libs/ui/src/lib/toast/toast.tsx +++ b/web/libs/ui/src/lib/toast/toast.tsx @@ -104,7 +104,9 @@ export const ToastContext = createContext(undefine export const useToast = () => { const context = useContext(ToastContext); - if (!context) { + // Avoid throwing error in test environment + // Otherwise every test that uses useToast will throw an error and be forced to wrap the component in a ToastProvider even if it's not needed + if (!context && process.env.NODE_ENV !== "test") { throw new Error("useToast must be used within a ToastProvider"); } return context;