diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 0000000000..2705278291 --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,7 @@ +Release type: patch + +This release fixes an issue where mypy would complain when using a typed async +resolver with `strawberry.field(resolver=...)`. + +Now the code will type check correctly. We also updated our test suite to make +we catch similar issues in the future. diff --git a/TWEET.md b/TWEET.md new file mode 100644 index 0000000000..b7294159c3 --- /dev/null +++ b/TWEET.md @@ -0,0 +1,6 @@ +🆕 Release $version is out! This release fixes an issue that caused type +checking errors when using Mypy and async resolvers. + +Thanks to $contributor for the PR 👏 + +Get it here 👉 $release_url diff --git a/noxfile.py b/noxfile.py index 3a4ef5f915..4488fcc53e 100644 --- a/noxfile.py +++ b/noxfile.py @@ -15,8 +15,7 @@ "auto", "--showlocals", "-vv", - "--ignore=tests/mypy", - "--ignore=tests/pyright", + "--ignore=tests/typecheckers", "--ignore=tests/cli", "--ignore=tests/benchmarks", "--ignore=tests/experimental/pydantic", @@ -125,42 +124,24 @@ def test_pydantic(session: Session, pydantic: str) -> None: ) -@session(python=PYTHON_VERSIONS, name="Mypy tests") -def tests_mypy(session: Session) -> None: - session.run_always("poetry", "install", "--with", "integrations", external=True) - - session.run( - "pytest", - "--cov=.", - "--cov-append", - "--cov-report=xml", - "tests/mypy", - "-vv", - ) - - -@session(python=PYTHON_VERSIONS, name="Pyright tests", tags=["tests"]) -def tests_pyright(session: Session) -> None: +@session(python=PYTHON_VERSIONS, name="Type checkers tests", tags=["tests"]) +def tests_typecheckers(session: Session) -> None: session.run_always("poetry", "install", external=True) + session.install("pyright") + session.install("pydantic") + session.install("git+https://github.com/python/mypy.git#master") session.run( "pytest", "--cov=.", "--cov-append", "--cov-report=xml", - "tests/pyright", + "tests/typecheckers", "-vv", ) -@session(name="Mypy", tags=["lint"]) -def mypy(session: Session) -> None: - session.run_always("poetry", "install", "--with", "integrations", external=True) - - session.run("mypy", "--config-file", "mypy.ini") - - @session(python=PYTHON_VERSIONS, name="CLI tests", tags=["tests"]) def tests_cli(session: Session) -> None: session.run_always("poetry", "install", external=True) @@ -176,3 +157,11 @@ def tests_cli(session: Session) -> None: "tests/cli", "-vv", ) + + +@session(name="Mypy", tags=["lint"]) +def mypy(session: Session) -> None: + session.run_always("poetry", "install", "--with", "integrations", external=True) + session.install("mypy") + + session.run("mypy", "--config-file", "mypy.ini") diff --git a/poetry.lock b/poetry.lock index 33a69bb97f..17a5ce0bc5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiofiles" @@ -123,13 +123,13 @@ frozenlist = ">=1.1.0" [[package]] name = "annotated-types" -version = "0.6.0" +version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" files = [ - {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, - {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] [package.dependencies] @@ -148,13 +148,13 @@ files = [ [[package]] name = "anyio" -version = "4.3.0" +version = "4.4.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" files = [ - {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, - {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, + {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, + {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, ] [package.dependencies] @@ -199,6 +199,24 @@ typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} [package.extras] tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] +[[package]] +name = "asttokens" +version = "2.4.1" +description = "Annotate AST trees with source code positions" +optional = false +python-versions = "*" +files = [ + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, +] + +[package.dependencies] +six = ">=1.12.0" + +[package.extras] +astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] +test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] + [[package]] name = "astunparse" version = "1.6.3" @@ -318,6 +336,52 @@ files = [ [package.extras] tzdata = ["tzdata"] +[[package]] +name = "black" +version = "24.4.2" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.8" +files = [ + {file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"}, + {file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"}, + {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"}, + {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"}, + {file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"}, + {file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"}, + {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"}, + {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"}, + {file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"}, + {file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"}, + {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"}, + {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"}, + {file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"}, + {file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"}, + {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"}, + {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"}, + {file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"}, + {file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"}, + {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"}, + {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"}, + {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"}, + {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + [[package]] name = "blessed" version = "1.20.0" @@ -336,24 +400,24 @@ wcwidth = ">=0.1.4" [[package]] name = "blinker" -version = "1.7.0" +version = "1.8.2" description = "Fast, simple object-to-object and broadcast signaling" optional = false python-versions = ">=3.8" files = [ - {file = "blinker-1.7.0-py3-none-any.whl", hash = "sha256:c3f865d4d54db7abc53758a01601cf343fe55b84c1de4e3fa910e420b438d5b9"}, - {file = "blinker-1.7.0.tar.gz", hash = "sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182"}, + {file = "blinker-1.8.2-py3-none-any.whl", hash = "sha256:1779309f71bf239144b9399d06ae925637cf6634cf6bd131104184531bf67c01"}, + {file = "blinker-1.8.2.tar.gz", hash = "sha256:8f77b09d3bf7c795e969e9486f39c2c5e9c39d4ee07424be2bc594ece9642d83"}, ] [[package]] name = "botocore" -version = "1.34.88" +version = "1.34.113" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.34.88-py3-none-any.whl", hash = "sha256:e87a660599ed3e14b2a770f4efc3df2f2f6d04f3c7bfd64ddbae186667864a7b"}, - {file = "botocore-1.34.88.tar.gz", hash = "sha256:36f2e9e8dfa856e55dbbe703aea601f134db3fddc3615f1020a755b27fd26a5e"}, + {file = "botocore-1.34.113-py3-none-any.whl", hash = "sha256:8ca87776450ef41dd25c327eb6e504294230a5756940d68bcfdedc4a7cdeca97"}, + {file = "botocore-1.34.113.tar.gz", hash = "sha256:449912ba3c4ded64f21d09d428146dd9c05337b2a112e15511bf2c4888faae79"}, ] [package.dependencies] @@ -742,63 +806,63 @@ files = [ [[package]] name = "coverage" -version = "7.4.4" +version = "7.5.2" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0be5efd5127542ef31f165de269f77560d6cdef525fffa446de6f7e9186cfb2"}, - {file = "coverage-7.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ccd341521be3d1b3daeb41960ae94a5e87abe2f46f17224ba5d6f2b8398016cf"}, - {file = "coverage-7.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fa497a8ab37784fbb20ab699c246053ac294d13fc7eb40ec007a5043ec91f8"}, - {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1a93009cb80730c9bca5d6d4665494b725b6e8e157c1cb7f2db5b4b122ea562"}, - {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:690db6517f09336559dc0b5f55342df62370a48f5469fabf502db2c6d1cffcd2"}, - {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:09c3255458533cb76ef55da8cc49ffab9e33f083739c8bd4f58e79fecfe288f7"}, - {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8ce1415194b4a6bd0cdcc3a1dfbf58b63f910dcb7330fe15bdff542c56949f87"}, - {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b91cbc4b195444e7e258ba27ac33769c41b94967919f10037e6355e998af255c"}, - {file = "coverage-7.4.4-cp310-cp310-win32.whl", hash = "sha256:598825b51b81c808cb6f078dcb972f96af96b078faa47af7dfcdf282835baa8d"}, - {file = "coverage-7.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:09ef9199ed6653989ebbcaacc9b62b514bb63ea2f90256e71fea3ed74bd8ff6f"}, - {file = "coverage-7.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f9f50e7ef2a71e2fae92774c99170eb8304e3fdf9c8c3c7ae9bab3e7229c5cf"}, - {file = "coverage-7.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:623512f8ba53c422fcfb2ce68362c97945095b864cda94a92edbaf5994201083"}, - {file = "coverage-7.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0513b9508b93da4e1716744ef6ebc507aff016ba115ffe8ecff744d1322a7b63"}, - {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40209e141059b9370a2657c9b15607815359ab3ef9918f0196b6fccce8d3230f"}, - {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a2b2b78c78293782fd3767d53e6474582f62443d0504b1554370bde86cc8227"}, - {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:73bfb9c09951125d06ee473bed216e2c3742f530fc5acc1383883125de76d9cd"}, - {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f384c3cc76aeedce208643697fb3e8437604b512255de6d18dae3f27655a384"}, - {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:54eb8d1bf7cacfbf2a3186019bcf01d11c666bd495ed18717162f7eb1e9dd00b"}, - {file = "coverage-7.4.4-cp311-cp311-win32.whl", hash = "sha256:cac99918c7bba15302a2d81f0312c08054a3359eaa1929c7e4b26ebe41e9b286"}, - {file = "coverage-7.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:b14706df8b2de49869ae03a5ccbc211f4041750cd4a66f698df89d44f4bd30ec"}, - {file = "coverage-7.4.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:201bef2eea65e0e9c56343115ba3814e896afe6d36ffd37bab783261db430f76"}, - {file = "coverage-7.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41c9c5f3de16b903b610d09650e5e27adbfa7f500302718c9ffd1c12cf9d6818"}, - {file = "coverage-7.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d898fe162d26929b5960e4e138651f7427048e72c853607f2b200909794ed978"}, - {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ea79bb50e805cd6ac058dfa3b5c8f6c040cb87fe83de10845857f5535d1db70"}, - {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce4b94265ca988c3f8e479e741693d143026632672e3ff924f25fab50518dd51"}, - {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:00838a35b882694afda09f85e469c96367daa3f3f2b097d846a7216993d37f4c"}, - {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fdfafb32984684eb03c2d83e1e51f64f0906b11e64482df3c5db936ce3839d48"}, - {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:69eb372f7e2ece89f14751fbcbe470295d73ed41ecd37ca36ed2eb47512a6ab9"}, - {file = "coverage-7.4.4-cp312-cp312-win32.whl", hash = "sha256:137eb07173141545e07403cca94ab625cc1cc6bc4c1e97b6e3846270e7e1fea0"}, - {file = "coverage-7.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:d71eec7d83298f1af3326ce0ff1d0ea83c7cb98f72b577097f9083b20bdaf05e"}, - {file = "coverage-7.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ae728ff3b5401cc320d792866987e7e7e880e6ebd24433b70a33b643bb0384"}, - {file = "coverage-7.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cc4f1358cb0c78edef3ed237ef2c86056206bb8d9140e73b6b89fbcfcbdd40e1"}, - {file = "coverage-7.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8130a2aa2acb8788e0b56938786c33c7c98562697bf9f4c7d6e8e5e3a0501e4a"}, - {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf271892d13e43bc2b51e6908ec9a6a5094a4df1d8af0bfc360088ee6c684409"}, - {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4cdc86d54b5da0df6d3d3a2f0b710949286094c3a6700c21e9015932b81447e"}, - {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae71e7ddb7a413dd60052e90528f2f65270aad4b509563af6d03d53e979feafd"}, - {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:38dd60d7bf242c4ed5b38e094baf6401faa114fc09e9e6632374388a404f98e7"}, - {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa5b1c1bfc28384f1f53b69a023d789f72b2e0ab1b3787aae16992a7ca21056c"}, - {file = "coverage-7.4.4-cp38-cp38-win32.whl", hash = "sha256:dfa8fe35a0bb90382837b238fff375de15f0dcdb9ae68ff85f7a63649c98527e"}, - {file = "coverage-7.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:b2991665420a803495e0b90a79233c1433d6ed77ef282e8e152a324bbbc5e0c8"}, - {file = "coverage-7.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b799445b9f7ee8bf299cfaed6f5b226c0037b74886a4e11515e569b36fe310d"}, - {file = "coverage-7.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b4d33f418f46362995f1e9d4f3a35a1b6322cb959c31d88ae56b0298e1c22357"}, - {file = "coverage-7.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aadacf9a2f407a4688d700e4ebab33a7e2e408f2ca04dbf4aef17585389eff3e"}, - {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c95949560050d04d46b919301826525597f07b33beba6187d04fa64d47ac82e"}, - {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff7687ca3d7028d8a5f0ebae95a6e4827c5616b31a4ee1192bdfde697db110d4"}, - {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5fc1de20b2d4a061b3df27ab9b7c7111e9a710f10dc2b84d33a4ab25065994ec"}, - {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c74880fc64d4958159fbd537a091d2a585448a8f8508bf248d72112723974cbd"}, - {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:742a76a12aa45b44d236815d282b03cfb1de3b4323f3e4ec933acfae08e54ade"}, - {file = "coverage-7.4.4-cp39-cp39-win32.whl", hash = "sha256:d89d7b2974cae412400e88f35d86af72208e1ede1a541954af5d944a8ba46c57"}, - {file = "coverage-7.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:9ca28a302acb19b6af89e90f33ee3e1906961f94b54ea37de6737b7ca9d8827c"}, - {file = "coverage-7.4.4-pp38.pp39.pp310-none-any.whl", hash = "sha256:b2c5edc4ac10a7ef6605a966c58929ec6c1bd0917fb8c15cb3363f65aa40e677"}, - {file = "coverage-7.4.4.tar.gz", hash = "sha256:c901df83d097649e257e803be22592aedfd5182f07b3cc87d640bbb9afd50f49"}, + {file = "coverage-7.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:554c7327bf0fd688050348e22db7c8e163fb7219f3ecdd4732d7ed606b417263"}, + {file = "coverage-7.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d0305e02e40c7cfea5d08d6368576537a74c0eea62b77633179748d3519d6705"}, + {file = "coverage-7.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:829fb55ad437d757c70d5b1c51cfda9377f31506a0a3f3ac282bc6a387d6a5f1"}, + {file = "coverage-7.5.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:894b1acded706f1407a662d08e026bfd0ff1e59e9bd32062fea9d862564cfb65"}, + {file = "coverage-7.5.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe76d6dee5e4febefa83998b17926df3a04e5089e3d2b1688c74a9157798d7a2"}, + {file = "coverage-7.5.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c7ebf2a37e4f5fea3c1a11e1f47cea7d75d0f2d8ef69635ddbd5c927083211fc"}, + {file = "coverage-7.5.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20e611fc36e1a0fc7bbf957ef9c635c8807d71fbe5643e51b2769b3cc0fb0b51"}, + {file = "coverage-7.5.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7c5c5b7ae2763533152880d5b5b451acbc1089ade2336b710a24b2b0f5239d20"}, + {file = "coverage-7.5.2-cp310-cp310-win32.whl", hash = "sha256:1e4225990a87df898e40ca31c9e830c15c2c53b1d33df592bc8ef314d71f0281"}, + {file = "coverage-7.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:976cd92d9420e6e2aa6ce6a9d61f2b490e07cb468968adf371546b33b829284b"}, + {file = "coverage-7.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5997d418c219dcd4dcba64e50671cca849aaf0dac3d7a2eeeb7d651a5bd735b8"}, + {file = "coverage-7.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ec27e93bbf5976f0465e8936f02eb5add99bbe4e4e7b233607e4d7622912d68d"}, + {file = "coverage-7.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f11f98753800eb1ec872562a398081f6695f91cd01ce39819e36621003ec52a"}, + {file = "coverage-7.5.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e34680049eecb30b6498784c9637c1c74277dcb1db75649a152f8004fbd6646"}, + {file = "coverage-7.5.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e12536446ad4527ac8ed91d8a607813085683bcce27af69e3b31cd72b3c5960"}, + {file = "coverage-7.5.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3d3f7744b8a8079d69af69d512e5abed4fb473057625588ce126088e50d05493"}, + {file = "coverage-7.5.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:431a3917e32223fcdb90b79fe60185864a9109631ebc05f6c5aa03781a00b513"}, + {file = "coverage-7.5.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a7c6574225f34ce45466f04751d957b5c5e6b69fca9351db017c9249786172ce"}, + {file = "coverage-7.5.2-cp311-cp311-win32.whl", hash = "sha256:2b144d142ec9987276aeff1326edbc0df8ba4afbd7232f0ca10ad57a115e95b6"}, + {file = "coverage-7.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:900532713115ac58bc3491b9d2b52704a05ed408ba0918d57fd72c94bc47fba1"}, + {file = "coverage-7.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9a42970ce74c88bdf144df11c52c5cf4ad610d860de87c0883385a1c9d9fa4ab"}, + {file = "coverage-7.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26716a1118c6ce2188283b4b60a898c3be29b480acbd0a91446ced4fe4e780d8"}, + {file = "coverage-7.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60b66b0363c5a2a79fba3d1cd7430c25bbd92c923d031cae906bdcb6e054d9a2"}, + {file = "coverage-7.5.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d22eba19273b2069e4efeff88c897a26bdc64633cbe0357a198f92dca94268"}, + {file = "coverage-7.5.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3bb5b92a0ab3d22dfdbfe845e2fef92717b067bdf41a5b68c7e3e857c0cff1a4"}, + {file = "coverage-7.5.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1aef719b6559b521ae913ddeb38f5048c6d1a3d366865e8b320270b7bc4693c2"}, + {file = "coverage-7.5.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8809c0ea0e8454f756e3bd5c36d04dddf222989216788a25bfd6724bfcee342c"}, + {file = "coverage-7.5.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1acc2e2ef098a1d4bf535758085f508097316d738101a97c3f996bccba963ea5"}, + {file = "coverage-7.5.2-cp312-cp312-win32.whl", hash = "sha256:97de509043d3f0f2b2cd171bdccf408f175c7f7a99d36d566b1ae4dd84107985"}, + {file = "coverage-7.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:8941e35a0e991a7a20a1fa3e3182f82abe357211f2c335a9e6007067c3392fcf"}, + {file = "coverage-7.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5662bf0f6fb6757f5c2d6279c541a5af55a39772c2362ed0920b27e3ce0e21f7"}, + {file = "coverage-7.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d9c62cff2ffb4c2a95328488fd7aa96a7a4b34873150650fe76b19c08c9c792"}, + {file = "coverage-7.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74eeaa13e8200ad72fca9c5f37395fb310915cec6f1682b21375e84fd9770e84"}, + {file = "coverage-7.5.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f29bf497d51a5077994b265e976d78b09d9d0dff6ca5763dbb4804534a5d380"}, + {file = "coverage-7.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f96aa94739593ae0707eda9813ce363a0a0374a810ae0eced383340fc4a1f73"}, + {file = "coverage-7.5.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:51b6cee539168a912b4b3b040e4042b9e2c9a7ad9c8546c09e4eaeff3eacba6b"}, + {file = "coverage-7.5.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:59a75e6aa5c25b50b5a1499f9718f2edff54257f545718c4fb100f48d570ead4"}, + {file = "coverage-7.5.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29da75ce20cb0a26d60e22658dd3230713c6c05a3465dd8ad040ffc991aea318"}, + {file = "coverage-7.5.2-cp38-cp38-win32.whl", hash = "sha256:23f2f16958b16152b43a39a5ecf4705757ddd284b3b17a77da3a62aef9c057ef"}, + {file = "coverage-7.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:9e41c94035e5cdb362beed681b58a707e8dc29ea446ea1713d92afeded9d1ddd"}, + {file = "coverage-7.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06d96b9b19bbe7f049c2be3c4f9e06737ec6d8ef8933c7c3a4c557ef07936e46"}, + {file = "coverage-7.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:878243e1206828908a6b4a9ca7b1aa8bee9eb129bf7186fc381d2646f4524ce9"}, + {file = "coverage-7.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:482df956b055d3009d10fce81af6ffab28215d7ed6ad4a15e5c8e67cb7c5251c"}, + {file = "coverage-7.5.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a35c97af60a5492e9e89f8b7153fe24eadfd61cb3a2fb600df1a25b5dab34b7e"}, + {file = "coverage-7.5.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24bb4c7859a3f757a116521d4d3a8a82befad56ea1bdacd17d6aafd113b0071e"}, + {file = "coverage-7.5.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e1046aab24c48c694f0793f669ac49ea68acde6a0798ac5388abe0a5615b5ec8"}, + {file = "coverage-7.5.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:448ec61ea9ea7916d5579939362509145caaecf03161f6f13e366aebb692a631"}, + {file = "coverage-7.5.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4a00bd5ba8f1a4114720bef283cf31583d6cb1c510ce890a6da6c4268f0070b7"}, + {file = "coverage-7.5.2-cp39-cp39-win32.whl", hash = "sha256:9f805481d5eff2a96bac4da1570ef662bf970f9a16580dc2c169c8c3183fa02b"}, + {file = "coverage-7.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:2c79f058e7bec26b5295d53b8c39ecb623448c74ccc8378631f5cb5c16a7e02c"}, + {file = "coverage-7.5.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:40dbb8e7727560fe8ab65efcddfec1ae25f30ef02e2f2e5d78cfb52a66781ec5"}, + {file = "coverage-7.5.2.tar.gz", hash = "sha256:13017a63b0e499c59b5ba94a8542fb62864ba3016127d1e4ef30d354fc2b00e9"}, ] [package.dependencies] @@ -820,43 +884,43 @@ files = [ [[package]] name = "cryptography" -version = "42.0.5" +version = "42.0.7" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16"}, - {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da"}, - {file = "cryptography-42.0.5-cp37-abi3-win32.whl", hash = "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74"}, - {file = "cryptography-42.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940"}, - {file = "cryptography-42.0.5-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30"}, - {file = "cryptography-42.0.5-cp39-abi3-win32.whl", hash = "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413"}, - {file = "cryptography-42.0.5-cp39-abi3-win_amd64.whl", hash = "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd"}, - {file = "cryptography-42.0.5.tar.gz", hash = "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1"}, + {file = "cryptography-42.0.7-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a987f840718078212fdf4504d0fd4c6effe34a7e4740378e59d47696e8dfb477"}, + {file = "cryptography-42.0.7-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bd13b5e9b543532453de08bcdc3cc7cebec6f9883e886fd20a92f26940fd3e7a"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a79165431551042cc9d1d90e6145d5d0d3ab0f2d66326c201d9b0e7f5bf43604"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a47787a5e3649008a1102d3df55424e86606c9bae6fb77ac59afe06d234605f8"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:02c0eee2d7133bdbbc5e24441258d5d2244beb31da5ed19fbb80315f4bbbff55"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5e44507bf8d14b36b8389b226665d597bc0f18ea035d75b4e53c7b1ea84583cc"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7f8b25fa616d8b846aef64b15c606bb0828dbc35faf90566eb139aa9cff67af2"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:93a3209f6bb2b33e725ed08ee0991b92976dfdcf4e8b38646540674fc7508e13"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e6b8f1881dac458c34778d0a424ae5769de30544fc678eac51c1c8bb2183e9da"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3de9a45d3b2b7d8088c3fbf1ed4395dfeff79d07842217b38df14ef09ce1d8d7"}, + {file = "cryptography-42.0.7-cp37-abi3-win32.whl", hash = "sha256:789caea816c6704f63f6241a519bfa347f72fbd67ba28d04636b7c6b7da94b0b"}, + {file = "cryptography-42.0.7-cp37-abi3-win_amd64.whl", hash = "sha256:8cb8ce7c3347fcf9446f201dc30e2d5a3c898d009126010cbd1f443f28b52678"}, + {file = "cryptography-42.0.7-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:a3a5ac8b56fe37f3125e5b72b61dcde43283e5370827f5233893d461b7360cd4"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:779245e13b9a6638df14641d029add5dc17edbef6ec915688f3acb9e720a5858"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d563795db98b4cd57742a78a288cdbdc9daedac29f2239793071fe114f13785"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:31adb7d06fe4383226c3e963471f6837742889b3c4caa55aac20ad951bc8ffda"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:efd0bf5205240182e0f13bcaea41be4fdf5c22c5129fc7ced4a0282ac86998c9"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a9bc127cdc4ecf87a5ea22a2556cab6c7eda2923f84e4f3cc588e8470ce4e42e"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:3577d029bc3f4827dd5bf8bf7710cac13527b470bbf1820a3f394adb38ed7d5f"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2e47577f9b18723fa294b0ea9a17d5e53a227867a0a4904a1a076d1646d45ca1"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1a58839984d9cb34c855197043eaae2c187d930ca6d644612843b4fe8513c886"}, + {file = "cryptography-42.0.7-cp39-abi3-win32.whl", hash = "sha256:e6b79d0adb01aae87e8a44c2b64bc3f3fe59515280e00fb6d57a7267a2583cda"}, + {file = "cryptography-42.0.7-cp39-abi3-win_amd64.whl", hash = "sha256:16268d46086bb8ad5bf0a2b5544d8a9ed87a0e33f5e77dd3c3301e63d941a83b"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2954fccea107026512b15afb4aa664a5640cd0af630e2ee3962f2602693f0c82"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:362e7197754c231797ec45ee081f3088a27a47c6c01eff2ac83f60f85a50fe60"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4f698edacf9c9e0371112792558d2f705b5645076cc0aaae02f816a0171770fd"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5482e789294854c28237bba77c4c83be698be740e31a3ae5e879ee5444166582"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e9b2a6309f14c0497f348d08a065d52f3020656f675819fc405fb63bbcd26562"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d8e3098721b84392ee45af2dd554c947c32cc52f862b6a3ae982dbb90f577f14"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c65f96dad14f8528a447414125e1fc8feb2ad5a272b8f68477abbcc1ea7d94b9"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36017400817987670037fbb0324d71489b6ead6231c9604f8fc1f7d008087c68"}, + {file = "cryptography-42.0.7.tar.gz", hash = "sha256:ecbfbc00bf55888edda9868a4cf927205de8499e7fabe6c050322298382953f2"}, ] [package.dependencies] @@ -910,71 +974,71 @@ serialization = ["protobuf (>=3.0.0)"] [[package]] name = "ddtrace" -version = "2.8.1" +version = "2.8.5" description = "Datadog APM client library" optional = false python-versions = ">=3.7" files = [ - {file = "ddtrace-2.8.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:2015e09b51add38f7abb2a69df42b170d4cb9b68d0088cf0845a827c8a115e16"}, - {file = "ddtrace-2.8.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:f3fc85e829cae4193ad29fe9d96e29c287afa59733d0d0ccca3131aeb4545b7c"}, - {file = "ddtrace-2.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b33c845ace4b861b58d97424b9ca393287b2dd5b56e1bc89440d96a5d4b2cddf"}, - {file = "ddtrace-2.8.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a2f73a780b1bdd00c501accb488f4abae349d103652e45b6be1952b64cf32ea"}, - {file = "ddtrace-2.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4c0fa5844071954a278f47d68ce1640a834ecbb9f015a2a25cd211b83795310"}, - {file = "ddtrace-2.8.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3c20d4a2ce34937f61edc59c60d8493896834b8d420711390985ebc89d27979e"}, - {file = "ddtrace-2.8.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6b94493a17c0c9fa29765f5bfe9a928ff986f72459f14fa0ed5ba0309d38c779"}, - {file = "ddtrace-2.8.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ac9af2dfb4c0ea7aeae01e8de8dbf12507e05e70b298d81668db8bb071b81608"}, - {file = "ddtrace-2.8.1-cp310-cp310-win32.whl", hash = "sha256:e04c5aa62c790ddda3e8c3ea9ddc70f08ec766e7c733df986cffaba4267b6371"}, - {file = "ddtrace-2.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:2e679be0bf89c9660c8da787e2d94e1d3de0bebcbaaa608b03071e0fb154690f"}, - {file = "ddtrace-2.8.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:8bbcc07734c44c2f03d1c19149b3ed06b7f9805e236be19b05f73153aecb4139"}, - {file = "ddtrace-2.8.1-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:a5018322a2d91e1cf78161308e1f9cb675a9a804b109395c6777962fa5b2e5ad"}, - {file = "ddtrace-2.8.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1293724f634f1b1f0f8f5b7eb4b92744d2b4765ade712514fc7b9bb9b74bff86"}, - {file = "ddtrace-2.8.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c8722cbfe47e1c0917dc71b7297d3e96279c2f935fc26b07ecd33d9cedf45eb2"}, - {file = "ddtrace-2.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d430a9ba718c7758e0cc633bfbc1a0ac9eefc45edec68cdbc8a5cc6d56a64590"}, - {file = "ddtrace-2.8.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fc9abf38fa0b4660e8c820aca5dc523dca270959593c699ea67f20377a205f5b"}, - {file = "ddtrace-2.8.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:29636b1c27fc4d8cba38e7f38f712d2c253781081bd9e1d13de083aff0e252f3"}, - {file = "ddtrace-2.8.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b0417680edeb7746e4bbc28a85f513ed72422d678384a09a36640cc21bdeb9a0"}, - {file = "ddtrace-2.8.1-cp311-cp311-win32.whl", hash = "sha256:870b546c97e998f3288a27c96d5771506c5c907a545ba2e643cbbfa1db86091d"}, - {file = "ddtrace-2.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:74fe39a29e1c94b38ce084a094f6c98ef4ba3a26997917ea72d716abda89a320"}, - {file = "ddtrace-2.8.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d229eab0b557ea57d41ad5c405cf142648de09db5546683f7365ed972cdd2d04"}, - {file = "ddtrace-2.8.1-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:cebcf6152c10fb51b9fb605988a343677753b86cba052001d98f388600243af7"}, - {file = "ddtrace-2.8.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:948824a4c885aef3f9f56f264268b06daf3d39f47536c916783e3e395963957e"}, - {file = "ddtrace-2.8.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1e1df23a95dcee076078beffb6d70246e0e8a6774b42714140d3000fb697848"}, - {file = "ddtrace-2.8.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6f79e9917628c7100044696f9c164e9c6dc65e88cd12fbf7cfcb5680d414990"}, - {file = "ddtrace-2.8.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:72788a728f1e23d51288d3b0577df7f42f7b9dfe4bc76bf22748f11bcbb9f2b6"}, - {file = "ddtrace-2.8.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:aa36a9f118c2f1dea6037d834356528c766d5544875a8652326cf1a9e32259ed"}, - {file = "ddtrace-2.8.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:deb95a21a6a9d092dac7f786a2c901f087324ddb0189f1164671b44658806700"}, - {file = "ddtrace-2.8.1-cp312-cp312-win32.whl", hash = "sha256:5d08101f1d428911fcb1cb4ce5f0d64a447d99b012c7150ad96ddd054f2d905d"}, - {file = "ddtrace-2.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:6322ae0f779b0344eeec4eb99e1b9a45eab18de698da8bc0e62e9c2e87ba7fd8"}, - {file = "ddtrace-2.8.1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:23f74eab87e723a67ed66ed28f7933cebb3bce793c45e74ecc264245fa857b30"}, - {file = "ddtrace-2.8.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45397079f880c52cec63654ff92bfc4d1aaf7f424dc94a0f5c849d615fbb2c1f"}, - {file = "ddtrace-2.8.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b40bce0ade9979fe2a13b51a3b02b3b810a7811d74e6eacdb502a564cfec74e"}, - {file = "ddtrace-2.8.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0154bca9ddf3ff0b1f11c1c91c58464a1a38b637acf3af20f43bd90375cf0043"}, - {file = "ddtrace-2.8.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cde4ead895a440972fe732a6b205baf4f73fc5c19d8436a1a314db838adedec8"}, - {file = "ddtrace-2.8.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:48fd9b31b35c156c0b7f2b1cdce1c615fc6f4f0a86c2abb007e1946bb2a12db6"}, - {file = "ddtrace-2.8.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3bdb481645733de36a01be55ad8c35fcb44221b27a6ac81ed4971139227c9ad0"}, - {file = "ddtrace-2.8.1-cp37-cp37m-win32.whl", hash = "sha256:bd4dd22613c7f3a0b2be0387b416a9b93711476b40435adfabbc67c97dbb6158"}, - {file = "ddtrace-2.8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:e6f4ff33b14e47b314279f095ba6c2480aa18bfd0807ba06b0eca2b54180fa37"}, - {file = "ddtrace-2.8.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:bc132a0c39e6bb01fe6d0615899a34c77bbd16f16f8a9abbf0e4242500ae6060"}, - {file = "ddtrace-2.8.1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:ef4794218fbafe6021c2205da08fb68e824d66c5cd039f3b86629dd336b52b0d"}, - {file = "ddtrace-2.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a41d760748befa92097fd2f860c0be3d20e798f9a3e291d2e7555d458dafb3b"}, - {file = "ddtrace-2.8.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33fc28c6aeaeadeaf30c848489240d7a5fdd2db89f0002a516b278f7386a7c0f"}, - {file = "ddtrace-2.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b3521254558ce97b98b9a68f1732ee2e24adb7a774501c1198a9c1ebd6eff4a"}, - {file = "ddtrace-2.8.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ee834a7191170be583e1e82982a48f0a2dd63db3177d892d2e3b84de6075de5e"}, - {file = "ddtrace-2.8.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f2c22c676d3cb08d349cf53f5de5505c7e8b9a6252339955bdd20856e5815959"}, - {file = "ddtrace-2.8.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37e22a322bd8e41ddddcb9960edca7ee1fdf4e90c3ec1dcd00417f815ffde7e1"}, - {file = "ddtrace-2.8.1-cp38-cp38-win32.whl", hash = "sha256:cccfb5f0e7cbda7feb9e906008b180615ee5b8aeea49fcdb98d9b683df003c90"}, - {file = "ddtrace-2.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:4b14b26879a7c12fbaf1dc0a5c57041d4f4d0edfeaa0a7b5fedddacee73f8381"}, - {file = "ddtrace-2.8.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:b8fa361034c08c9672597e67e8b84cee88a6af465627cd5850ca10633349bd46"}, - {file = "ddtrace-2.8.1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:b08c741abdab2a7e5750161c3a9d4406768266edf3235473516958b74a4c2847"}, - {file = "ddtrace-2.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d55938800ebba78a8677bfec30d16e12040f3bbb08c54f9c9def42c0d92ed7c0"}, - {file = "ddtrace-2.8.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:225b3dea540da485a3180a0c6e1b443cc1d4281e18f59de5c352fb50a8c696e9"}, - {file = "ddtrace-2.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f955025c44635f0fcf5879c880d86b9a3f9afbd872cb856bd7d949cafc20da44"}, - {file = "ddtrace-2.8.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ff37066807f6acfe5b894be1db950a7b6d7dab76a60fa6571884e40e198afee"}, - {file = "ddtrace-2.8.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:639cb1408add9b9465a8fd9a2340e73e756390649f76bcef209e47bebac6a7a7"}, - {file = "ddtrace-2.8.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d784f76d0863525fa3ad8a6f4d1c41eff969853e74180268ec553dcd5b2e4cd"}, - {file = "ddtrace-2.8.1-cp39-cp39-win32.whl", hash = "sha256:c94548d55f73fe689528ddd8f23597a27a8c19b526627758e59ce363def17614"}, - {file = "ddtrace-2.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:356b363fe2b33d740b404a0f7bb593fb6da7c685211b10f5832fca7c68e63419"}, - {file = "ddtrace-2.8.1.tar.gz", hash = "sha256:6e136fd16872e43e964a8a52b3f9d1ab6f4ef9a6b066f20f64fe3316b04cc438"}, + {file = "ddtrace-2.8.5-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9df3b59794352d3af6df52278e724999dc3b70e7cf59142e3c6170dd43715a6c"}, + {file = "ddtrace-2.8.5-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7dca42e52f74416b1085664dc3412be01cc27e50218cb8e7f9c46473fdecdb2d"}, + {file = "ddtrace-2.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b5c067e1a907202f25e6376d9e676644edcf16cae7beb9ac1087a067833393"}, + {file = "ddtrace-2.8.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c58d3e106af514486f65f09fee75a42a3fd83d5be9538befd5d5ceda6995da3b"}, + {file = "ddtrace-2.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1247855a6465c2fc167977d6bd8497c8b28e177530a12faad16fd4f3c31a4dac"}, + {file = "ddtrace-2.8.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e03aefcca84e57babf9e74f5ed859b249826eb3213edd5d6e4003c702dbbcd68"}, + {file = "ddtrace-2.8.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a6f2cf37088a5e528d1f78d571cec30f9b1cc03cf1097bf609f7f7c13a3aada8"}, + {file = "ddtrace-2.8.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0ecc3d65adeac43e2ec3f9e4e9ce2a166230a7c7f6e5913d9b80753983a414f1"}, + {file = "ddtrace-2.8.5-cp310-cp310-win32.whl", hash = "sha256:7be8dfa8104bc95a06b484bf8d04374e6f081c2158b6718fa0a955813fd530ec"}, + {file = "ddtrace-2.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:adcb83109ac918e233c3c3d825a3bbc82c8fd1e45d632466bd15a21122ed2b81"}, + {file = "ddtrace-2.8.5-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:da94a1752032ab805bccb4878fdda671719f13c541cfca004aedd9b99c92ccfd"}, + {file = "ddtrace-2.8.5-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:f15d799e3e7c3055cdb8e4b4bdf5f9c137893e0e04ff6b430d0f663bb48dd176"}, + {file = "ddtrace-2.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:376ac38cd9de471842a5b395005deed1d7ca7448b7dd66402bf108598c996e0d"}, + {file = "ddtrace-2.8.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:77be9629d7123636a7559bf49bc3a9255febcea22685214c441ace28d3bf1e6b"}, + {file = "ddtrace-2.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b92b8e0dab9444a79c7afa4253e88e1948ac51267deb354251fb2ee64c0659f1"}, + {file = "ddtrace-2.8.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:33c5a3e7c3fe82be8316b7264bca45627cc105c9b8f72eef6b6cf9dea6102ca1"}, + {file = "ddtrace-2.8.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:521c0d6c972d51a887415cccf6c8ad49761fc7ce7af4f70794648429c9aa6ea8"}, + {file = "ddtrace-2.8.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7360f43edec29f5ded3b9f3eb3b549997fb84484b9f3f33bb97a37dfd13266a0"}, + {file = "ddtrace-2.8.5-cp311-cp311-win32.whl", hash = "sha256:b40194643b21159910bd52f041597aee8d594d5450feb16ffb1ac0bd51016eb7"}, + {file = "ddtrace-2.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c45f818c08eab1c6898ea8263422cf19e2425bf725e1843c094c5628baac589"}, + {file = "ddtrace-2.8.5-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:0cb3bc95ca4dae45531ad59d859712ccd52a465f19b0e03d3703e1c9fcec8614"}, + {file = "ddtrace-2.8.5-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:51ef36d884cb508166c3699ec8fd01ac32749bea2e826953e697658697e351f4"}, + {file = "ddtrace-2.8.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3af5070b6eda559555c68a92bdef2d8495208fff0a123601655ebc6a0ec6d02"}, + {file = "ddtrace-2.8.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7eb223d7c000daa69d7d82e36af254f8e49e154b4713d842b60b2d4cbc250c"}, + {file = "ddtrace-2.8.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c16a77926332615c018c44591c93215b08aaddfd724bd84bfbee4efa8bfcf877"}, + {file = "ddtrace-2.8.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bf61abef38d26e4e892fdf63493541290630038d78f8294dde81596ed7208858"}, + {file = "ddtrace-2.8.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:5ddebfcef09e84b9c6efa58036576347243946473a6db4f143f4b60d9f5e6b34"}, + {file = "ddtrace-2.8.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:901d47e455cb197ee12604a10b5d10ee74e0b56a5e0a50092e19a654976923dc"}, + {file = "ddtrace-2.8.5-cp312-cp312-win32.whl", hash = "sha256:9ec3c24d1a7ea7e1ac5c8251d074b7c053e60f3060f335fb88e612fe35dbbe54"}, + {file = "ddtrace-2.8.5-cp312-cp312-win_amd64.whl", hash = "sha256:9430e3197f4e56cce4a2b0829faddf4c4efde6588fea66fb4aa3adc4946cae0c"}, + {file = "ddtrace-2.8.5-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:3a1d029713e6fa6887c4fb3e51e1a75c39855270edafce2dbb8678d168d3272a"}, + {file = "ddtrace-2.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edc2c7cc433659069e56bf064560a348aad485b53799a5870b7e0d488a83cc1d"}, + {file = "ddtrace-2.8.5-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f06b1377d45f4664148fddec54180cd888f5abdb41fc31942641cd7797f17848"}, + {file = "ddtrace-2.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b6ceae3201c77b08801f55a751cf0f1b85d250cfac6dfd4a9f0663c131a916d"}, + {file = "ddtrace-2.8.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a6f67d1c9dec80469921424272a83b5cad57e4b26ae750fec4b763f1bf6c4ece"}, + {file = "ddtrace-2.8.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2c08eb99996e79708948d7eb547c02888daa64a7f2e220ba8ff6144e63996a8c"}, + {file = "ddtrace-2.8.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dac2370ea09f61530f01df454394f8c291a77a08d7c73180b1b5743746e6a390"}, + {file = "ddtrace-2.8.5-cp37-cp37m-win32.whl", hash = "sha256:9b5cfb81984c74a60cdb3c167203a4bbeaa319b5242e17b5ca0adbee4df54a7f"}, + {file = "ddtrace-2.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:0674abd6118382f82c7139bab7de106644b260f09ec43f56952ae36b9840f191"}, + {file = "ddtrace-2.8.5-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1312acce7049d72a7e63110525b30c1bca192cf8dbffbca5fc626e6268a850ec"}, + {file = "ddtrace-2.8.5-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:1bcedeca9c60e6eb9dfb3654bdce383161322b1261ab6d1cf067f43451cf81c5"}, + {file = "ddtrace-2.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8630a7cc4d037f0ff214f9b65093b0482f3e0efd28043690ac003cbfd9ac56d"}, + {file = "ddtrace-2.8.5-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88dd0f886fd02c215f6017460a088695b55d945c61171c2e7897728572ca2616"}, + {file = "ddtrace-2.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2379716ec9ddc0c8f38c48a0b19e2116c167eb0de34436a48d348351dde60dbe"}, + {file = "ddtrace-2.8.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8152cb0a87ed63177c0ee2a51a5d43dfe7663e398c86d7c46129a02c21456c9c"}, + {file = "ddtrace-2.8.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:982adfd87ed1d45e8f98b6ac37be0e4a6d09f8fa550d6f3c0ee2bd8d270cf55f"}, + {file = "ddtrace-2.8.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9e430bcc2c806d6dd249ec5281c38c2507d58ca903d56df1cac171fac4bd082a"}, + {file = "ddtrace-2.8.5-cp38-cp38-win32.whl", hash = "sha256:7f77edf558f3548c55cacca1402ee85a371f2522423f54e1e92a880933fbaaf6"}, + {file = "ddtrace-2.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:f992a657bc0b12dee142c43256733500dcb5d1d5667e8282667875edce10e055"}, + {file = "ddtrace-2.8.5-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:6429395c9f380ff668d8ec4914a3eea095bfa8cc243b07939fbf5d3a3c68e919"}, + {file = "ddtrace-2.8.5-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:f46a66d324a0b42e6fd1ba7a9c703ff7fc4e9e00e08f3c283d2e54e24a8e63c2"}, + {file = "ddtrace-2.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0cd1b698a258afad559344dbe703ed35032558298d024d9fa4c83466dd21892"}, + {file = "ddtrace-2.8.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5893d1b9b5ae0cca73977ad5056abaf7afb9bcd4e8c92d6abbe6208925a29027"}, + {file = "ddtrace-2.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a780f6277c414bc8f004937c0d293b682036905de31aa2edbdf89eaecf1a1d4"}, + {file = "ddtrace-2.8.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3e8b797f34a7475f57f251d6f6c53b5c72d6964351e1c1b147efc55844153697"}, + {file = "ddtrace-2.8.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:afd4a0c0c377d4ee99cff78e4d73727850b49434bd2042743468a3244757939c"}, + {file = "ddtrace-2.8.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1731aa5685161118696a439891bedb31a9c6bfa3233acca076dbed3f3caf239e"}, + {file = "ddtrace-2.8.5-cp39-cp39-win32.whl", hash = "sha256:d2987a57da49557a084d8c5512f3632058d7eeee8e32e49fc5e12c821963cf88"}, + {file = "ddtrace-2.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:0c7f9506fc33448a91d706ee838b712ac76a00dc2213c96ddc62e25ce1a3708e"}, + {file = "ddtrace-2.8.5.tar.gz", hash = "sha256:11e055acbc9de6d0d2fa26d9ca97a0256ede9ff36199419bce23837764c84559"}, ] [package.dependencies] @@ -999,17 +1063,6 @@ xmltodict = ">=0.12" openai = ["tiktoken"] opentracing = ["opentracing (>=2.0.0)"] -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -optional = false -python-versions = ">=3.5" -files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] - [[package]] name = "deprecated" version = "1.2.14" @@ -1040,13 +1093,13 @@ files = [ [[package]] name = "django" -version = "4.2.11" +version = "4.2.13" description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." optional = false python-versions = ">=3.8" files = [ - {file = "Django-4.2.11-py3-none-any.whl", hash = "sha256:ddc24a0a8280a0430baa37aff11f28574720af05888c62b7cfe71d219f4599d3"}, - {file = "Django-4.2.11.tar.gz", hash = "sha256:6e6ff3db2d8dd0c986b4eec8554c8e4f919b5c1ff62a5b4390c17aff2ed6e5c4"}, + {file = "Django-4.2.13-py3-none-any.whl", hash = "sha256:a17fcba2aad3fc7d46fdb23215095dbbd64e6174bf4589171e732b18b07e426a"}, + {file = "Django-4.2.13.tar.gz", hash = "sha256:837e3cf1f6c31347a1396a3f6b65688f2b4bb4a11c580dcb628b5afe527b68a5"}, ] [package.dependencies] @@ -1223,20 +1276,33 @@ files = [ [package.extras] testing = ["hatch", "pre-commit", "pytest", "tox"] +[[package]] +name = "executing" +version = "2.0.1" +description = "Get the currently executing AST node of a frame, and other information" +optional = false +python-versions = ">=3.5" +files = [ + {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, + {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, +] + +[package.extras] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] + [[package]] name = "faker" -version = "24.11.0" +version = "25.2.0" description = "Faker is a Python package that generates fake data for you." optional = false python-versions = ">=3.8" files = [ - {file = "Faker-24.11.0-py3-none-any.whl", hash = "sha256:adb98e771073a06bdc5d2d6710d8af07ac5da64c8dc2ae3b17bb32319e66fd82"}, - {file = "Faker-24.11.0.tar.gz", hash = "sha256:34b947581c2bced340c39b35f89dbfac4f356932cfff8fe893bde854903f0e6e"}, + {file = "Faker-25.2.0-py3-none-any.whl", hash = "sha256:cfe97c4857c4c36ee32ea4aaabef884895992e209bae4cbd26807cf3e05c6918"}, + {file = "Faker-25.2.0.tar.gz", hash = "sha256:45b84f47ff1ef86e3d1a8d11583ca871ecf6730fad0660edadc02576583a2423"}, ] [package.dependencies] python-dateutil = ">=2.4" -typing-extensions = {version = ">=3.10.0.1", markers = "python_version <= \"3.8\""} [[package]] name = "fast-query-parsers" @@ -1265,22 +1331,47 @@ files = [ [[package]] name = "fastapi" -version = "0.110.2" +version = "0.111.0" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" files = [ - {file = "fastapi-0.110.2-py3-none-any.whl", hash = "sha256:239403f2c0a3dda07a9420f95157a7f014ddb2b770acdbc984f9bdf3ead7afdb"}, - {file = "fastapi-0.110.2.tar.gz", hash = "sha256:b53d673652da3b65e8cd787ad214ec0fe303cad00d2b529b86ce7db13f17518d"}, + {file = "fastapi-0.111.0-py3-none-any.whl", hash = "sha256:97ecbf994be0bcbdadedf88c3150252bed7b2087075ac99735403b1b76cc8fc0"}, + {file = "fastapi-0.111.0.tar.gz", hash = "sha256:b9db9dd147c91cb8b769f7183535773d8741dd46f9dc6676cd82eab510228cd7"}, ] [package.dependencies] +email_validator = ">=2.0.0" +fastapi-cli = ">=0.0.2" +httpx = ">=0.23.0" +jinja2 = ">=2.11.2" +orjson = ">=3.2.1" pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +python-multipart = ">=0.0.7" starlette = ">=0.37.2,<0.38.0" typing-extensions = ">=4.8.0" +ujson = ">=4.0.1,<4.0.2 || >4.0.2,<4.1.0 || >4.1.0,<4.2.0 || >4.2.0,<4.3.0 || >4.3.0,<5.0.0 || >5.0.0,<5.1.0 || >5.1.0" +uvicorn = {version = ">=0.12.0", extras = ["standard"]} [package.extras] -all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +all = ["email_validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "fastapi-cli" +version = "0.0.4" +description = "Run and manage FastAPI apps from the command line with FastAPI CLI. 🚀" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi_cli-0.0.4-py3-none-any.whl", hash = "sha256:a2552f3a7ae64058cdbb530be6fa6dbfc975dc165e4fa66d224c3d396e25e809"}, + {file = "fastapi_cli-0.0.4.tar.gz", hash = "sha256:e2e9ffaffc1f7767f488d6da34b6f5a377751c996f397902eb6abb99a67bde32"}, +] + +[package.dependencies] +typer = ">=0.12.3" + +[package.extras] +standard = ["fastapi", "uvicorn[standard] (>=0.15.0)"] [[package]] name = "fastjsonschema" @@ -1298,13 +1389,13 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.13.4" +version = "3.14.0" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.13.4-py3-none-any.whl", hash = "sha256:404e5e9253aa60ad457cae1be07c0f0ca90a63931200a47d9b6a6af84fd7b45f"}, - {file = "filelock-3.13.4.tar.gz", hash = "sha256:d13f466618bfde72bd2c18255e269f72542c6e70e7bac83a0232d6b1cc5c8cf4"}, + {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, + {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, ] [package.extras] @@ -1337,13 +1428,13 @@ dotenv = ["python-dotenv"] [[package]] name = "freezegun" -version = "1.4.0" +version = "1.5.1" description = "Let your Python tests travel through time" optional = false python-versions = ">=3.7" files = [ - {file = "freezegun-1.4.0-py3-none-any.whl", hash = "sha256:55e0fc3c84ebf0a96a5aa23ff8b53d70246479e9a68863f1fcac5a3e52f19dd6"}, - {file = "freezegun-1.4.0.tar.gz", hash = "sha256:10939b0ba0ff5adaecf3b06a5c2f73071d9678e507c5eaedb23c761d56ac774b"}, + {file = "freezegun-1.5.1-py3-none-any.whl", hash = "sha256:bf111d7138a8abe55ab48a71755673dbaa4ab87f4cff5634a4442dfec34c15f1"}, + {file = "freezegun-1.5.1.tar.gz", hash = "sha256:b29dedfcda6d5e8e083ce71b2b542753ad48cfec44037b3fc79702e2980a89e9"}, ] [package.dependencies] @@ -1600,27 +1691,29 @@ socks = ["socksio (==1.*)"] [[package]] name = "hypercorn" -version = "0.16.0" +version = "0.17.2" description = "A ASGI Server based on Hyper libraries and inspired by Gunicorn" optional = false python-versions = ">=3.8" files = [ - {file = "hypercorn-0.16.0-py3-none-any.whl", hash = "sha256:929e45c4acde3fbf7c58edf55336d30a009d2b4cb1f1eb96e6a515d61b663f58"}, - {file = "hypercorn-0.16.0.tar.gz", hash = "sha256:3b17d1dcf4992c1f262d9f9dd799c374125d0b9a8e40e1e2d11e2938b0adfe03"}, + {file = "hypercorn-0.17.2-py3-none-any.whl", hash = "sha256:eaa97b13c1fd8857cf31af34640704382ce3ed53cff6b3192869ea5f8244c6b1"}, + {file = "hypercorn-0.17.2.tar.gz", hash = "sha256:3827860f7e0cf0320a1288f0762c10483617de19dae08cfc3fbeb2b3323a6ffb"}, ] [package.dependencies] +exceptiongroup = {version = ">=1.1.0", markers = "python_version < \"3.11\""} h11 = "*" h2 = ">=3.1.0" priority = "*" taskgroup = {version = "*", markers = "python_version < \"3.11\""} tomli = {version = "*", markers = "python_version < \"3.11\""} +typing_extensions = {version = "*", markers = "python_version < \"3.11\""} wsproto = ">=0.14.0" [package.extras] docs = ["pydata_sphinx_theme", "sphinxcontrib_mermaid"] h3 = ["aioquic (>=0.9.0,<1.0)"] -trio = ["exceptiongroup (>=1.1.0)", "trio (>=0.22.0)"] +trio = ["trio (>=0.22.0)"] uvloop = ["uvloop"] [[package]] @@ -1722,6 +1815,26 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +[[package]] +name = "inline-snapshot" +version = "0.10.1" +description = "golden master/snapshot/approval testing library which puts the values right into your source code" +optional = false +python-versions = ">=3.8" +files = [ + {file = "inline_snapshot-0.10.1-py3-none-any.whl", hash = "sha256:061e11be3fe9e99296ac3caf7c6d458509b02474d5bfa40b67c762062aeb3fbe"}, + {file = "inline_snapshot-0.10.1.tar.gz", hash = "sha256:f69ba81d150d057913540bc1ec7f7b1910c6f1df1c0d547751e411be62b2d198"}, +] + +[package.dependencies] +asttokens = ">=2.0.5" +black = ">=23.3.0" +click = ">=8.1.4" +executing = ">=2.0.0" +rich = ">=13.7.1" +toml = ">=0.10.2" +types-toml = ">=0.10.8.7" + [[package]] name = "inquirer" version = "2.10.1" @@ -1795,13 +1908,13 @@ trio = ["async_generator", "trio"] [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] @@ -1909,13 +2022,13 @@ dev = ["Sphinx (>=5.1.1)", "black (==23.9.1)", "build (>=0.10.0)", "coverage (>= [[package]] name = "litestar" -version = "2.8.2" +version = "2.8.3" description = "Litestar - A production-ready, highly performant, extensible ASGI API Framework" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "litestar-2.8.2-py3-none-any.whl", hash = "sha256:c891baf8a17d66cfed5c40bef7b5bf4c02c2831babf5fca0af404f441610557a"}, - {file = "litestar-2.8.2.tar.gz", hash = "sha256:18353cb7246ba2e7f8d4aac4fe2d8772b503c931cf5ee16efc759cbbc3a2344b"}, + {file = "litestar-2.8.3-py3-none-any.whl", hash = "sha256:bef5e8592b1afba24306f9a5834d84cef89826b12f58a97d3099cf49e2f3767d"}, + {file = "litestar-2.8.3.tar.gz", hash = "sha256:3764eef3885b331bfb15c478a2b9e2bc1980741ff58bd5512d599436f669549c"}, ] [package.dependencies] @@ -1939,7 +2052,7 @@ attrs = ["attrs"] brotli = ["brotli"] cli = ["jsbeautifier", "uvicorn[standard]", "uvloop (>=0.18.0)"] cryptography = ["cryptography"] -full = ["litestar[annotated-types,attrs,brotli,cli,cryptography,jinja,jwt,mako,minijinja,opentelemetry,piccolo,picologging,prometheus,pydantic,redis,sqlalchemy,standard,structlog]"] +full = ["advanced-alchemy (>=0.2.2,<0.9.0)", "annotated-types", "attrs", "brotli", "cryptography", "email-validator", "fast-query-parsers (>=1.0.2)", "jinja2", "jinja2 (>=3.1.2)", "jsbeautifier", "mako (>=1.2.4)", "minijinja (>=1.0.0)", "opentelemetry-instrumentation-asgi", "piccolo", "picologging", "prometheus-client", "pydantic", "pydantic-extra-types", "python-jose", "redis[hiredis] (>=4.4.4)", "structlog", "uvicorn[standard]", "uvloop (>=0.18.0)"] jinja = ["jinja2 (>=3.1.2)"] jwt = ["cryptography", "python-jose"] mako = ["mako (>=1.2.4)"] @@ -1956,13 +2069,13 @@ structlog = ["structlog"] [[package]] name = "mako" -version = "1.3.3" +version = "1.3.5" description = "A super-fast templating language that borrows the best ideas from the existing templating languages." optional = false python-versions = ">=3.8" files = [ - {file = "Mako-1.3.3-py3-none-any.whl", hash = "sha256:5324b88089a8978bf76d1629774fcc2f1c07b82acdf00f4c5dd8ceadfffc4b40"}, - {file = "Mako-1.3.3.tar.gz", hash = "sha256:e16c01d9ab9c11f7290eef1cfefc093fb5a45ee4a3da09e2fec2e4d1bae54e73"}, + {file = "Mako-1.3.5-py3-none-any.whl", hash = "sha256:260f1dbc3a519453a9c856dedfe4beb4e50bd5a26d96386cb6c80856556bb91a"}, + {file = "Mako-1.3.5.tar.gz", hash = "sha256:48dbc20568c1d276a2698b36d968fa76161bf127194907ea6fc594fa81f943bc"}, ] [package.dependencies] @@ -2304,53 +2417,6 @@ files = [ {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] -[[package]] -name = "mypy" -version = "1.9.0" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"}, - {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"}, - {file = "mypy-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150"}, - {file = "mypy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374"}, - {file = "mypy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03"}, - {file = "mypy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3"}, - {file = "mypy-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc"}, - {file = "mypy-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129"}, - {file = "mypy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612"}, - {file = "mypy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3"}, - {file = "mypy-1.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd"}, - {file = "mypy-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6"}, - {file = "mypy-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185"}, - {file = "mypy-1.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913"}, - {file = "mypy-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6"}, - {file = "mypy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b"}, - {file = "mypy-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2"}, - {file = "mypy-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e"}, - {file = "mypy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04"}, - {file = "mypy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89"}, - {file = "mypy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02"}, - {file = "mypy-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4"}, - {file = "mypy-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d"}, - {file = "mypy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf"}, - {file = "mypy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9"}, - {file = "mypy-1.9.0-py3-none-any.whl", hash = "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e"}, - {file = "mypy-1.9.0.tar.gz", hash = "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974"}, -] - -[package.dependencies] -mypy-extensions = ">=1.0.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.1.0" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -install-types = ["pip"] -mypyc = ["setuptools (>=50)"] -reports = ["lxml"] - [[package]] name = "mypy-extensions" version = "1.0.0" @@ -2440,6 +2506,61 @@ files = [ {file = "opentelemetry_semantic_conventions-0.45b0.tar.gz", hash = "sha256:7c84215a44ac846bc4b8e32d5e78935c5c43482e491812a0bb8aaf87e4d92118"}, ] +[[package]] +name = "orjson" +version = "3.10.3" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +optional = false +python-versions = ">=3.8" +files = [ + {file = "orjson-3.10.3-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9fb6c3f9f5490a3eb4ddd46fc1b6eadb0d6fc16fb3f07320149c3286a1409dd8"}, + {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:252124b198662eee80428f1af8c63f7ff077c88723fe206a25df8dc57a57b1fa"}, + {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9f3e87733823089a338ef9bbf363ef4de45e5c599a9bf50a7a9b82e86d0228da"}, + {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8334c0d87103bb9fbbe59b78129f1f40d1d1e8355bbed2ca71853af15fa4ed3"}, + {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1952c03439e4dce23482ac846e7961f9d4ec62086eb98ae76d97bd41d72644d7"}, + {file = "orjson-3.10.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c0403ed9c706dcd2809f1600ed18f4aae50be263bd7112e54b50e2c2bc3ebd6d"}, + {file = "orjson-3.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:382e52aa4270a037d41f325e7d1dfa395b7de0c367800b6f337d8157367bf3a7"}, + {file = "orjson-3.10.3-cp310-none-win32.whl", hash = "sha256:be2aab54313752c04f2cbaab4515291ef5af8c2256ce22abc007f89f42f49109"}, + {file = "orjson-3.10.3-cp310-none-win_amd64.whl", hash = "sha256:416b195f78ae461601893f482287cee1e3059ec49b4f99479aedf22a20b1098b"}, + {file = "orjson-3.10.3-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:73100d9abbbe730331f2242c1fc0bcb46a3ea3b4ae3348847e5a141265479700"}, + {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:544a12eee96e3ab828dbfcb4d5a0023aa971b27143a1d35dc214c176fdfb29b3"}, + {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520de5e2ef0b4ae546bea25129d6c7c74edb43fc6cf5213f511a927f2b28148b"}, + {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccaa0a401fc02e8828a5bedfd80f8cd389d24f65e5ca3954d72c6582495b4bcf"}, + {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7bc9e8bc11bac40f905640acd41cbeaa87209e7e1f57ade386da658092dc16"}, + {file = "orjson-3.10.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3582b34b70543a1ed6944aca75e219e1192661a63da4d039d088a09c67543b08"}, + {file = "orjson-3.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c23dfa91481de880890d17aa7b91d586a4746a4c2aa9a145bebdbaf233768d5"}, + {file = "orjson-3.10.3-cp311-none-win32.whl", hash = "sha256:1770e2a0eae728b050705206d84eda8b074b65ee835e7f85c919f5705b006c9b"}, + {file = "orjson-3.10.3-cp311-none-win_amd64.whl", hash = "sha256:93433b3c1f852660eb5abdc1f4dd0ced2be031ba30900433223b28ee0140cde5"}, + {file = "orjson-3.10.3-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a39aa73e53bec8d410875683bfa3a8edf61e5a1c7bb4014f65f81d36467ea098"}, + {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0943a96b3fa09bee1afdfccc2cb236c9c64715afa375b2af296c73d91c23eab2"}, + {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e852baafceff8da3c9defae29414cc8513a1586ad93e45f27b89a639c68e8176"}, + {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18566beb5acd76f3769c1d1a7ec06cdb81edc4d55d2765fb677e3eaa10fa99e0"}, + {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bd2218d5a3aa43060efe649ec564ebedec8ce6ae0a43654b81376216d5ebd42"}, + {file = "orjson-3.10.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cf20465e74c6e17a104ecf01bf8cd3b7b252565b4ccee4548f18b012ff2f8069"}, + {file = "orjson-3.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba7f67aa7f983c4345eeda16054a4677289011a478ca947cd69c0a86ea45e534"}, + {file = "orjson-3.10.3-cp312-none-win32.whl", hash = "sha256:17e0713fc159abc261eea0f4feda611d32eabc35708b74bef6ad44f6c78d5ea0"}, + {file = "orjson-3.10.3-cp312-none-win_amd64.whl", hash = "sha256:4c895383b1ec42b017dd2c75ae8a5b862fc489006afde06f14afbdd0309b2af0"}, + {file = "orjson-3.10.3-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:be2719e5041e9fb76c8c2c06b9600fe8e8584e6980061ff88dcbc2691a16d20d"}, + {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0175a5798bdc878956099f5c54b9837cb62cfbf5d0b86ba6d77e43861bcec2"}, + {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:978be58a68ade24f1af7758626806e13cff7748a677faf95fbb298359aa1e20d"}, + {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16bda83b5c61586f6f788333d3cf3ed19015e3b9019188c56983b5a299210eb5"}, + {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ad1f26bea425041e0a1adad34630c4825a9e3adec49079b1fb6ac8d36f8b754"}, + {file = "orjson-3.10.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9e253498bee561fe85d6325ba55ff2ff08fb5e7184cd6a4d7754133bd19c9195"}, + {file = "orjson-3.10.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0a62f9968bab8a676a164263e485f30a0b748255ee2f4ae49a0224be95f4532b"}, + {file = "orjson-3.10.3-cp38-none-win32.whl", hash = "sha256:8d0b84403d287d4bfa9bf7d1dc298d5c1c5d9f444f3737929a66f2fe4fb8f134"}, + {file = "orjson-3.10.3-cp38-none-win_amd64.whl", hash = "sha256:8bc7a4df90da5d535e18157220d7915780d07198b54f4de0110eca6b6c11e290"}, + {file = "orjson-3.10.3-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9059d15c30e675a58fdcd6f95465c1522b8426e092de9fff20edebfdc15e1cb0"}, + {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d40c7f7938c9c2b934b297412c067936d0b54e4b8ab916fd1a9eb8f54c02294"}, + {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d4a654ec1de8fdaae1d80d55cee65893cb06494e124681ab335218be6a0691e7"}, + {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:831c6ef73f9aa53c5f40ae8f949ff7681b38eaddb6904aab89dca4d85099cb78"}, + {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99b880d7e34542db89f48d14ddecbd26f06838b12427d5a25d71baceb5ba119d"}, + {file = "orjson-3.10.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2e5e176c994ce4bd434d7aafb9ecc893c15f347d3d2bbd8e7ce0b63071c52e25"}, + {file = "orjson-3.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b69a58a37dab856491bf2d3bbf259775fdce262b727f96aafbda359cb1d114d8"}, + {file = "orjson-3.10.3-cp39-none-win32.whl", hash = "sha256:b8d4d1a6868cde356f1402c8faeb50d62cee765a1f7ffcfd6de732ab0581e063"}, + {file = "orjson-3.10.3-cp39-none-win_amd64.whl", hash = "sha256:5102f50c5fc46d94f2033fe00d392588564378260d64377aec702f21a7a22912"}, + {file = "orjson-3.10.3.tar.gz", hash = "sha256:2b166507acae7ba2f7c315dcf185a9111ad5e992ac81f2d507aac39193c2c818"}, +] + [[package]] name = "packaging" version = "24.0" @@ -2451,6 +2572,17 @@ files = [ {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + [[package]] name = "pexpect" version = "4.9.0" @@ -2492,28 +2624,29 @@ testing = ["pytest", "pytest-cov", "wheel"] [[package]] name = "platformdirs" -version = "4.2.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, - {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, ] [package.extras] docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] [[package]] name = "pluggy" -version = "1.4.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, - {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -2522,13 +2655,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "poetry" -version = "1.8.2" +version = "1.8.3" description = "Python dependency management and packaging made easy." optional = false -python-versions = ">=3.8,<4.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "poetry-1.8.2-py3-none-any.whl", hash = "sha256:b42b400d9a803af6e788a30a6f3e9998020b77860e28df20647eb10b6f414910"}, - {file = "poetry-1.8.2.tar.gz", hash = "sha256:49cceb3838104647c3e1021f3a4f13c6053704cc18d33f849a90fe687a29cb73"}, + {file = "poetry-1.8.3-py3-none-any.whl", hash = "sha256:88191c69b08d06f9db671b793d68f40048e8904c0718404b63dcc2b5aec62d13"}, + {file = "poetry-1.8.3.tar.gz", hash = "sha256:67f4eb68288eab41e841cc71a00d26cf6bdda9533022d0189a145a34d0a35f48"}, ] [package.dependencies] @@ -2543,7 +2676,7 @@ installer = ">=0.7.0,<0.8.0" keyring = ">=24.0.0,<25.0.0" packaging = ">=23.1" pexpect = ">=4.7.0,<5.0.0" -pkginfo = ">=1.9.4,<2.0.0" +pkginfo = ">=1.10,<2.0" platformdirs = ">=3.0.0,<5" poetry-core = "1.9.0" poetry-plugin-export = ">=1.6.0,<2.0.0" @@ -2570,28 +2703,28 @@ files = [ [[package]] name = "poetry-plugin-export" -version = "1.7.1" +version = "1.8.0" description = "Poetry plugin to export the dependencies to various formats" optional = false -python-versions = ">=3.8,<4.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "poetry_plugin_export-1.7.1-py3-none-any.whl", hash = "sha256:b2258e53ae0d369a73806f957ed0e726eb95c571a0ce8b1f273da686528cc1da"}, - {file = "poetry_plugin_export-1.7.1.tar.gz", hash = "sha256:cf62cfb6218a904290ba6db3bc1a24aa076d10f81c48c6e48b2ded430131e22e"}, + {file = "poetry_plugin_export-1.8.0-py3-none-any.whl", hash = "sha256:adbe232cfa0cc04991ea3680c865cf748bff27593b9abcb1f35fb50ed7ba2c22"}, + {file = "poetry_plugin_export-1.8.0.tar.gz", hash = "sha256:1fa6168a85d59395d835ca564bc19862a7c76061e60c3e7dfaec70d50937fc61"}, ] [package.dependencies] -poetry = ">=1.8.0,<2.0.0" -poetry-core = ">=1.7.0,<2.0.0" +poetry = ">=1.8.0,<3.0.0" +poetry-core = ">=1.7.0,<3.0.0" [[package]] name = "polyfactory" -version = "2.15.0" +version = "2.16.0" description = "Mock data generation factories" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "polyfactory-2.15.0-py3-none-any.whl", hash = "sha256:ff5b6a8742cbd6fbde9f81310b9732d5421fbec31916d6ede5a977753110fbe9"}, - {file = "polyfactory-2.15.0.tar.gz", hash = "sha256:a3ff5263756ad74acf4001f04c1b6aab7d1197cbaa070352df79573a8dcd85ec"}, + {file = "polyfactory-2.16.0-py3-none-any.whl", hash = "sha256:168d8e50b77e91e35e691e8b3eedac43d7e423a6857fa26d473def96d53f0ecf"}, + {file = "polyfactory-2.16.0.tar.gz", hash = "sha256:03d8c706b70c4782ac8e637d0f6ab52760a7d11b712da5936a95a8f7022b2688"}, ] [package.dependencies] @@ -2620,22 +2753,22 @@ files = [ [[package]] name = "protobuf" -version = "5.26.1" +version = "5.27.0" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "protobuf-5.26.1-cp310-abi3-win32.whl", hash = "sha256:3c388ea6ddfe735f8cf69e3f7dc7611e73107b60bdfcf5d0f024c3ccd3794e23"}, - {file = "protobuf-5.26.1-cp310-abi3-win_amd64.whl", hash = "sha256:e6039957449cb918f331d32ffafa8eb9255769c96aa0560d9a5bf0b4e00a2a33"}, - {file = "protobuf-5.26.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:38aa5f535721d5bb99861166c445c4105c4e285c765fbb2ac10f116e32dcd46d"}, - {file = "protobuf-5.26.1-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:fbfe61e7ee8c1860855696e3ac6cfd1b01af5498facc6834fcc345c9684fb2ca"}, - {file = "protobuf-5.26.1-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:f7417703f841167e5a27d48be13389d52ad705ec09eade63dfc3180a959215d7"}, - {file = "protobuf-5.26.1-cp38-cp38-win32.whl", hash = "sha256:d693d2504ca96750d92d9de8a103102dd648fda04540495535f0fec7577ed8fc"}, - {file = "protobuf-5.26.1-cp38-cp38-win_amd64.whl", hash = "sha256:9b557c317ebe6836835ec4ef74ec3e994ad0894ea424314ad3552bc6e8835b4e"}, - {file = "protobuf-5.26.1-cp39-cp39-win32.whl", hash = "sha256:b9ba3ca83c2e31219ffbeb9d76b63aad35a3eb1544170c55336993d7a18ae72c"}, - {file = "protobuf-5.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ee014c2c87582e101d6b54260af03b6596728505c79f17c8586e7523aaa8f8c"}, - {file = "protobuf-5.26.1-py3-none-any.whl", hash = "sha256:da612f2720c0183417194eeaa2523215c4fcc1a1949772dc65f05047e08d5932"}, - {file = "protobuf-5.26.1.tar.gz", hash = "sha256:8ca2a1d97c290ec7b16e4e5dff2e5ae150cc1582f55b5ab300d45cb0dfa90e51"}, + {file = "protobuf-5.27.0-cp310-abi3-win32.whl", hash = "sha256:2f83bf341d925650d550b8932b71763321d782529ac0eaf278f5242f513cc04e"}, + {file = "protobuf-5.27.0-cp310-abi3-win_amd64.whl", hash = "sha256:b276e3f477ea1eebff3c2e1515136cfcff5ac14519c45f9b4aa2f6a87ea627c4"}, + {file = "protobuf-5.27.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:744489f77c29174328d32f8921566fb0f7080a2f064c5137b9d6f4b790f9e0c1"}, + {file = "protobuf-5.27.0-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:f51f33d305e18646f03acfdb343aac15b8115235af98bc9f844bf9446573827b"}, + {file = "protobuf-5.27.0-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:56937f97ae0dcf4e220ff2abb1456c51a334144c9960b23597f044ce99c29c89"}, + {file = "protobuf-5.27.0-cp38-cp38-win32.whl", hash = "sha256:a17f4d664ea868102feaa30a674542255f9f4bf835d943d588440d1f49a3ed15"}, + {file = "protobuf-5.27.0-cp38-cp38-win_amd64.whl", hash = "sha256:aabbbcf794fbb4c692ff14ce06780a66d04758435717107c387f12fb477bf0d8"}, + {file = "protobuf-5.27.0-cp39-cp39-win32.whl", hash = "sha256:587be23f1212da7a14a6c65fd61995f8ef35779d4aea9e36aad81f5f3b80aec5"}, + {file = "protobuf-5.27.0-cp39-cp39-win_amd64.whl", hash = "sha256:7cb65fc8fba680b27cf7a07678084c6e68ee13cab7cace734954c25a43da6d0f"}, + {file = "protobuf-5.27.0-py3-none-any.whl", hash = "sha256:673ad60f1536b394b4fa0bcd3146a4130fcad85bfe3b60eaa86d6a0ace0fa374"}, + {file = "protobuf-5.27.0.tar.gz", hash = "sha256:07f2b9a15255e3cf3f137d884af7972407b556a7a220912b252f26dc3121e6bf"}, ] [[package]] @@ -2715,18 +2848,18 @@ files = [ [[package]] name = "pydantic" -version = "2.7.0" +version = "2.7.1" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.7.0-py3-none-any.whl", hash = "sha256:9dee74a271705f14f9a1567671d144a851c675b072736f0a7b2608fd9e495352"}, - {file = "pydantic-2.7.0.tar.gz", hash = "sha256:b5ecdd42262ca2462e2624793551e80911a1e989f462910bb81aef974b4bb383"}, + {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"}, + {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.18.1" +pydantic-core = "2.18.2" typing-extensions = ">=4.6.1" [package.extras] @@ -2734,90 +2867,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.18.1" +version = "2.18.2" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ee9cf33e7fe14243f5ca6977658eb7d1042caaa66847daacbd2117adb258b226"}, - {file = "pydantic_core-2.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6b7bbb97d82659ac8b37450c60ff2e9f97e4eb0f8a8a3645a5568b9334b08b50"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df4249b579e75094f7e9bb4bd28231acf55e308bf686b952f43100a5a0be394c"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d0491006a6ad20507aec2be72e7831a42efc93193d2402018007ff827dc62926"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ae80f72bb7a3e397ab37b53a2b49c62cc5496412e71bc4f1277620a7ce3f52b"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58aca931bef83217fca7a390e0486ae327c4af9c3e941adb75f8772f8eeb03a1"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1be91ad664fc9245404a789d60cba1e91c26b1454ba136d2a1bf0c2ac0c0505a"}, - {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:667880321e916a8920ef49f5d50e7983792cf59f3b6079f3c9dac2b88a311d17"}, - {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f7054fdc556f5421f01e39cbb767d5ec5c1139ea98c3e5b350e02e62201740c7"}, - {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:030e4f9516f9947f38179249778709a460a3adb516bf39b5eb9066fcfe43d0e6"}, - {file = "pydantic_core-2.18.1-cp310-none-win32.whl", hash = "sha256:2e91711e36e229978d92642bfc3546333a9127ecebb3f2761372e096395fc649"}, - {file = "pydantic_core-2.18.1-cp310-none-win_amd64.whl", hash = "sha256:9a29726f91c6cb390b3c2338f0df5cd3e216ad7a938762d11c994bb37552edb0"}, - {file = "pydantic_core-2.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9ece8a49696669d483d206b4474c367852c44815fca23ac4e48b72b339807f80"}, - {file = "pydantic_core-2.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a5d83efc109ceddb99abd2c1316298ced2adb4570410defe766851a804fcd5b"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7973c381283783cd1043a8c8f61ea5ce7a3a58b0369f0ee0ee975eaf2f2a1b"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54c7375c62190a7845091f521add19b0f026bcf6ae674bdb89f296972272e86d"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd63cec4e26e790b70544ae5cc48d11b515b09e05fdd5eff12e3195f54b8a586"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:561cf62c8a3498406495cfc49eee086ed2bb186d08bcc65812b75fda42c38294"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68717c38a68e37af87c4da20e08f3e27d7e4212e99e96c3d875fbf3f4812abfc"}, - {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d5728e93d28a3c63ee513d9ffbac9c5989de8c76e049dbcb5bfe4b923a9739d"}, - {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f0f17814c505f07806e22b28856c59ac80cee7dd0fbb152aed273e116378f519"}, - {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d816f44a51ba5175394bc6c7879ca0bd2be560b2c9e9f3411ef3a4cbe644c2e9"}, - {file = "pydantic_core-2.18.1-cp311-none-win32.whl", hash = "sha256:09f03dfc0ef8c22622eaa8608caa4a1e189cfb83ce847045eca34f690895eccb"}, - {file = "pydantic_core-2.18.1-cp311-none-win_amd64.whl", hash = "sha256:27f1009dc292f3b7ca77feb3571c537276b9aad5dd4efb471ac88a8bd09024e9"}, - {file = "pydantic_core-2.18.1-cp311-none-win_arm64.whl", hash = "sha256:48dd883db92e92519201f2b01cafa881e5f7125666141a49ffba8b9facc072b0"}, - {file = "pydantic_core-2.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b6b0e4912030c6f28bcb72b9ebe4989d6dc2eebcd2a9cdc35fefc38052dd4fe8"}, - {file = "pydantic_core-2.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3202a429fe825b699c57892d4371c74cc3456d8d71b7f35d6028c96dfecad31"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3982b0a32d0a88b3907e4b0dc36809fda477f0757c59a505d4e9b455f384b8b"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25595ac311f20e5324d1941909b0d12933f1fd2171075fcff763e90f43e92a0d"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14fe73881cf8e4cbdaded8ca0aa671635b597e42447fec7060d0868b52d074e6"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca976884ce34070799e4dfc6fbd68cb1d181db1eefe4a3a94798ddfb34b8867f"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684d840d2c9ec5de9cb397fcb3f36d5ebb6fa0d94734f9886032dd796c1ead06"}, - {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:54764c083bbe0264f0f746cefcded6cb08fbbaaf1ad1d78fb8a4c30cff999a90"}, - {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:201713f2f462e5c015b343e86e68bd8a530a4f76609b33d8f0ec65d2b921712a"}, - {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fd1a9edb9dd9d79fbeac1ea1f9a8dd527a6113b18d2e9bcc0d541d308dae639b"}, - {file = "pydantic_core-2.18.1-cp312-none-win32.whl", hash = "sha256:d5e6b7155b8197b329dc787356cfd2684c9d6a6b1a197f6bbf45f5555a98d411"}, - {file = "pydantic_core-2.18.1-cp312-none-win_amd64.whl", hash = "sha256:9376d83d686ec62e8b19c0ac3bf8d28d8a5981d0df290196fb6ef24d8a26f0d6"}, - {file = "pydantic_core-2.18.1-cp312-none-win_arm64.whl", hash = "sha256:c562b49c96906b4029b5685075fe1ebd3b5cc2601dfa0b9e16c2c09d6cbce048"}, - {file = "pydantic_core-2.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3e352f0191d99fe617371096845070dee295444979efb8f27ad941227de6ad09"}, - {file = "pydantic_core-2.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0295d52b012cbe0d3059b1dba99159c3be55e632aae1999ab74ae2bd86a33d7"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56823a92075780582d1ffd4489a2e61d56fd3ebb4b40b713d63f96dd92d28144"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd3f79e17b56741b5177bcc36307750d50ea0698df6aa82f69c7db32d968c1c2"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38a5024de321d672a132b1834a66eeb7931959c59964b777e8f32dbe9523f6b1"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ce426ee691319d4767748c8e0895cfc56593d725594e415f274059bcf3cb76"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2adaeea59849ec0939af5c5d476935f2bab4b7f0335b0110f0f069a41024278e"}, - {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b6431559676a1079eac0f52d6d0721fb8e3c5ba43c37bc537c8c83724031feb"}, - {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:85233abb44bc18d16e72dc05bf13848a36f363f83757541f1a97db2f8d58cfd9"}, - {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:641a018af4fe48be57a2b3d7a1f0f5dbca07c1d00951d3d7463f0ac9dac66622"}, - {file = "pydantic_core-2.18.1-cp38-none-win32.whl", hash = "sha256:63d7523cd95d2fde0d28dc42968ac731b5bb1e516cc56b93a50ab293f4daeaad"}, - {file = "pydantic_core-2.18.1-cp38-none-win_amd64.whl", hash = "sha256:907a4d7720abfcb1c81619863efd47c8a85d26a257a2dbebdb87c3b847df0278"}, - {file = "pydantic_core-2.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:aad17e462f42ddbef5984d70c40bfc4146c322a2da79715932cd8976317054de"}, - {file = "pydantic_core-2.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:94b9769ba435b598b547c762184bcfc4783d0d4c7771b04a3b45775c3589ca44"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80e0e57cc704a52fb1b48f16d5b2c8818da087dbee6f98d9bf19546930dc64b5"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76b86e24039c35280ceee6dce7e62945eb93a5175d43689ba98360ab31eebc4a"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a05db5013ec0ca4a32cc6433f53faa2a014ec364031408540ba858c2172bb0"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:250ae39445cb5475e483a36b1061af1bc233de3e9ad0f4f76a71b66231b07f88"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a32204489259786a923e02990249c65b0f17235073149d0033efcebe80095570"}, - {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6395a4435fa26519fd96fdccb77e9d00ddae9dd6c742309bd0b5610609ad7fb2"}, - {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2533ad2883f001efa72f3d0e733fb846710c3af6dcdd544fe5bf14fa5fe2d7db"}, - {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b560b72ed4816aee52783c66854d96157fd8175631f01ef58e894cc57c84f0f6"}, - {file = "pydantic_core-2.18.1-cp39-none-win32.whl", hash = "sha256:582cf2cead97c9e382a7f4d3b744cf0ef1a6e815e44d3aa81af3ad98762f5a9b"}, - {file = "pydantic_core-2.18.1-cp39-none-win_amd64.whl", hash = "sha256:ca71d501629d1fa50ea7fa3b08ba884fe10cefc559f5c6c8dfe9036c16e8ae89"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e178e5b66a06ec5bf51668ec0d4ac8cfb2bdcb553b2c207d58148340efd00143"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:72722ce529a76a4637a60be18bd789d8fb871e84472490ed7ddff62d5fed620d"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fe0c1ce5b129455e43f941f7a46f61f3d3861e571f2905d55cdbb8b5c6f5e2c"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4284c621f06a72ce2cb55f74ea3150113d926a6eb78ab38340c08f770eb9b4d"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a0c3e718f4e064efde68092d9d974e39572c14e56726ecfaeebbe6544521f47"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2027493cc44c23b598cfaf200936110433d9caa84e2c6cf487a83999638a96ac"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:76909849d1a6bffa5a07742294f3fa1d357dc917cb1fe7b470afbc3a7579d539"}, - {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ee7ccc7fb7e921d767f853b47814c3048c7de536663e82fbc37f5eb0d532224b"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ee2794111c188548a4547eccc73a6a8527fe2af6cf25e1a4ebda2fd01cdd2e60"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a139fe9f298dc097349fb4f28c8b81cc7a202dbfba66af0e14be5cfca4ef7ce5"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d074b07a10c391fc5bbdcb37b2f16f20fcd9e51e10d01652ab298c0d07908ee2"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c69567ddbac186e8c0aadc1f324a60a564cfe25e43ef2ce81bcc4b8c3abffbae"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:baf1c7b78cddb5af00971ad5294a4583188bda1495b13760d9f03c9483bb6203"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2684a94fdfd1b146ff10689c6e4e815f6a01141781c493b97342cdc5b06f4d5d"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:73c1bc8a86a5c9e8721a088df234265317692d0b5cd9e86e975ce3bc3db62a59"}, - {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e60defc3c15defb70bb38dd605ff7e0fae5f6c9c7cbfe0ad7868582cb7e844a6"}, - {file = "pydantic_core-2.18.1.tar.gz", hash = "sha256:de9d3e8717560eb05e28739d1b35e4eac2e458553a52a301e51352a7ffc86a35"}, + {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"}, + {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"}, + {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"}, + {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"}, + {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"}, + {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"}, + {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"}, + {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"}, + {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"}, + {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"}, + {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"}, + {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"}, + {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"}, + {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"}, + {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"}, + {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"}, + {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"}, + {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"}, + {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"}, + {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"}, + {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"}, + {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"}, + {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"}, + {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"}, + {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"}, + {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"}, + {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"}, + {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"}, + {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"}, + {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"}, + {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"}, + {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"}, + {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"}, ] [package.dependencies] @@ -2856,17 +2989,16 @@ pydantic = ">=1.10.0" [[package]] name = "pygments" -version = "2.17.2" +version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, ] [package.extras] -plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] [[package]] @@ -2965,18 +3097,15 @@ test = ["pretend", "pytest (>=3.0.1)", "pytest-rerunfailures"] [[package]] name = "pyproject-hooks" -version = "1.0.0" +version = "1.1.0" description = "Wrappers to call pyproject.toml-based build backend hooks." optional = false python-versions = ">=3.7" files = [ - {file = "pyproject_hooks-1.0.0-py3-none-any.whl", hash = "sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8"}, - {file = "pyproject_hooks-1.0.0.tar.gz", hash = "sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5"}, + {file = "pyproject_hooks-1.1.0-py3-none-any.whl", hash = "sha256:7ceeefe9aec63a1064c18d939bdc3adf2d8aa1988a510afec15151578b232aa2"}, + {file = "pyproject_hooks-1.1.0.tar.gz", hash = "sha256:4b37730834edbd6bd37f26ece6b44802fb1c1ee2ece0e54ddff8bfc06db86965"}, ] -[package.dependencies] -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} - [[package]] name = "pytest" version = "7.4.4" @@ -3020,13 +3149,13 @@ testing = ["coverage (==6.2)", "mypy (==0.931)"] [[package]] name = "pytest-asyncio" -version = "0.23.6" +version = "0.23.7" description = "Pytest support for asyncio" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-asyncio-0.23.6.tar.gz", hash = "sha256:ffe523a89c1c222598c76856e76852b787504ddb72dd5d9b6617ffa8aa2cde5f"}, - {file = "pytest_asyncio-0.23.6-py3-none-any.whl", hash = "sha256:68516fdd1018ac57b846c9846b954f0393b26f094764a28c955eabb0536a4e8a"}, + {file = "pytest_asyncio-0.23.7-py3-none-any.whl", hash = "sha256:009b48127fbe44518a547bddd25611551b0e43ccdbf1e67d12479f569832c20b"}, + {file = "pytest_asyncio-0.23.7.tar.gz", hash = "sha256:5f5c72948f4c49e7db4f29f2521d4031f1c27f86e57b046126654083d4770268"}, ] [package.dependencies] @@ -3125,27 +3254,6 @@ pytest = ">=6.2.5" [package.extras] dev = ["pre-commit", "pytest-asyncio", "tox"] -[[package]] -name = "pytest-mypy-plugins" -version = "3.0.0" -description = "pytest plugin for writing tests for mypy plugins" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest-mypy-plugins-3.0.0.tar.gz", hash = "sha256:05a728c7cbc4f33610f97fe9266b2c3eb209e41c28935011b4fc9531662625f6"}, - {file = "pytest_mypy_plugins-3.0.0-py3-none-any.whl", hash = "sha256:a1e3f51b68898bc25713cc53718a28d9dc0cfd51d28a537ef18c7df3b123ed84"}, -] - -[package.dependencies] -decorator = "*" -Jinja2 = "*" -mypy = ">=1.3" -packaging = "*" -pytest = ">=7.0.0" -pyyaml = "*" -regex = "*" -tomlkit = ">=0.11" - [[package]] name = "pytest-snapshot" version = "0.9.0" @@ -3162,13 +3270,13 @@ pytest = ">=3.0.0" [[package]] name = "pytest-xdist" -version = "3.6.0" +version = "3.6.1" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false python-versions = ">=3.8" files = [ - {file = "pytest_xdist-3.6.0-py3-none-any.whl", hash = "sha256:958e08f38472e1b3a83450d8d3e682e90fdbffee39a97dd0f27185a3bd9074d1"}, - {file = "pytest_xdist-3.6.0.tar.gz", hash = "sha256:2bf346fb1f1481c8d255750f80bc1dfb9fb18b9ad5286ead0b741b6fd56d15b7"}, + {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, + {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, ] [package.dependencies] @@ -3195,6 +3303,20 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "python-dotenv" +version = "1.0.1" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + [[package]] name = "python-editor" version = "1.0.4" @@ -3257,7 +3379,6 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -3294,13 +3415,13 @@ files = [ [[package]] name = "quart" -version = "0.19.5" +version = "0.19.6" description = "A Python ASGI web microframework with the same API as Flask" optional = false python-versions = ">=3.8" files = [ - {file = "quart-0.19.5-py3-none-any.whl", hash = "sha256:581d959bda40d3c45500c50007a6451a157fd381c70d3556811bdd334adb9657"}, - {file = "quart-0.19.5.tar.gz", hash = "sha256:fbe3cff25cd18b5c0e8d82bbeeaa43d78f35e5221ca5c50bb0b7c20255c87ab8"}, + {file = "quart-0.19.6-py3-none-any.whl", hash = "sha256:f9092310f4eb120903da692a5e4354f05d48c28ca7ec3054d3d94dd862412c58"}, + {file = "quart-0.19.6.tar.gz", hash = "sha256:89ddda6da24300a5ea4f21e4582d5e89bc8ea678e724e0b747767143401e4558"}, ] [package.dependencies] @@ -3322,101 +3443,104 @@ dotenv = ["python-dotenv"] [[package]] name = "rapidfuzz" -version = "3.8.1" +version = "3.9.1" description = "rapid fuzzy string matching" optional = false python-versions = ">=3.8" files = [ - {file = "rapidfuzz-3.8.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1b176f01490b48337183da5b4223005bc0c2354a4faee5118917d2fba0bedc1c"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0798e32304b8009d215026bf7e1c448f1831da0a03987b7de30059a41bee92f3"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ad4dbd06c1f579eb043b2dcfc635bc6c9fb858240a70f0abd3bed84d8ac79994"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6ec696a268e8d730b42711537e500f7397afc06125c0e8fa9c8211386d315a5"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a8a007fdc5cf646e48e361a39eabe725b93af7673c5ab90294e551cae72ff58"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68b185a0397aebe78bcc5d0e1efd96509d4e2f3c4a05996e5c843732f547e9ef"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:267ff42370e031195e3020fff075420c136b69dc918ecb5542ec75c1e36af81f"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:987cd277d27d14301019fdf61c17524f6127f5d364be5482228726049d8e0d10"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bc5a1ec3bd05b55d3070d557c0cdd4412272d51b4966c79aa3e9da207bd33d65"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa223c73c59cc45c12eaa9c439318084003beced0447ff92b578a890288e19eb"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d4276c7ee061db0bac54846933b40339f60085523675f917f37de24a4b3ce0ee"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2ba0e43e9a94d256a704a674c7010e6f8ef9225edf7287cf3e7f66c9894b06cd"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c22b32a57ab47afb207e8fe4bd7bb58c90f9291a63723cafd4e704742166e368"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-win32.whl", hash = "sha256:50db3867864422bf6a6435ea65b9ac9de71ef52ed1e05d62f498cd430189eece"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:bca5acf77508d1822023a85118c2dd8d3c16abdd56d2762359a46deb14daa5e0"}, - {file = "rapidfuzz-3.8.1-cp310-cp310-win_arm64.whl", hash = "sha256:c763d99cf087e7b2c5be0cf34ae9a0e1b031f5057d2341a0a0ed782458645b7e"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:30c282612b7ebf2d7646ebebfd98dd308c582246a94d576734e4b0162f57baf4"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c6a43446f0cd8ff347b1fbb918dc0d657bebf484ddfa960ee069e422a477428"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4969fe0eb179aedacee53ca8f8f1be3c655964a6d62db30f247fee444b9c52b4"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:799f5f221d639d1c2ed8a2348d1edf5e22aa489b58b2cc99f5bf0c1917e2d0f2"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e62bde7d5df3312acc528786ee801c472cae5078b1f1e42761c853ba7fe1072a"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ea3d2e41d8fac71cb63ee72f75bee0ed1e9c50709d4c58587f15437761c1858"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f34a541895627c2bc9ef7757f16f02428a08d960d33208adfb96b33338d0945"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0643a25937fafe8d117f2907606e9940cd1cc905c66f16ece9ab93128299994"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:63044a7b6791a2e945dce9d812a6886e93159deb0464984eb403617ded257f08"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bbc15985c5658691f637a6b97651771147744edfad2a4be56b8a06755e3932fa"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:48b6e5a337a814aec7c6dda5d6460f947c9330860615301f35b519e16dde3c77"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:8c40da44ca20235cda05751d6e828b6b348e7a7c5de2922fa0f9c63f564fd675"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c21d5c7cfa6078c79897e5e482a7e84ff927143d2f3fb020dd6edd27f5469574"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-win32.whl", hash = "sha256:209bb712c448cdec4def6260b9f059bd4681ec61a01568f5e70e37bfe9efe830"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:6f7641992de44ec2ca54102422be44a8e3fb75b9690ccd74fff72b9ac7fc00ee"}, - {file = "rapidfuzz-3.8.1-cp311-cp311-win_arm64.whl", hash = "sha256:c458085e067c766112f089f78ce39eab2b69ba027d7bbb11d067a0b085774367"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1905d9319a97bed29f21584ca641190dbc9218a556202b77876f1e37618d2e03"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f176867f438ff2a43e6a837930153ca78fddb3ca94e378603a1e7b860d7869bf"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:25498650e30122f4a5ad6b27c7614b4af8628c1d32b19d406410d33f77a86c80"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16153a97efacadbd693ccc612a3285df2f072fd07c121f30c2c135a709537075"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c0264d03dcee1bb975975b77c2fe041820fb4d4a25a99e3cb74ddd083d671ca"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17d79398849c1244f646425cf31d856eab9ebd67b7d6571273e53df724ca817e"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e08b01dc9369941a24d7e512b0d81bf514e7d6add1b93d8aeec3c8fa08a824e"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97c13f156f14f10667e1cfc4257069b775440ce005e896c09ce3aff21c9ae665"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8b76abfec195bf1ee6f9ec56c33ba5e9615ff2d0a9530a54001ed87e5a6ced3b"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:b0ba20be465566264fa5580d874ccf5eabba6975dba45857e2c76e2df3359c6d"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:4d5cd86aca3f12e73bfc70015db7e8fc44122da03aa3761138b95112e83f66e4"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:9a16ef3702cecf16056c5fd66398b7ea8622ff4e3afeb00a8db3e74427e850af"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:392582aa784737d95255ca122ebe7dca3c774da900d100c07b53d32cd221a60e"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-win32.whl", hash = "sha256:ceb10039e7346927cec47eaa490b34abb602b537e738ee9914bb41b8de029fbc"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:cc4af7090a626c902c48db9b5d786c1faa0d8e141571e8a63a5350419ea575bd"}, - {file = "rapidfuzz-3.8.1-cp312-cp312-win_arm64.whl", hash = "sha256:3aff3b829b0b04bdf78bd780ec9faf5f26eac3591df98c35a0ae216c925ae436"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78a0d2a11bb3936463609777c6d6d4984a27ebb2360b58339c699899d85db036"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f8af980695b866255447703bf634551e67e1a4e1c2d2d26501858d9233d886d7"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d1a15fef1938b43468002f2d81012dbc9e7b50eb8533af202b0559c2dc7865d9"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4dbb1ebc9a811f38da33f32ed2bb5f58b149289b89eb11e384519e9ba7ca881"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:41219536634bd6f85419f38450ef080cfb519638125d805cf8626443e677dc61"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e3f882110f2f4894942e314451773c47e8b1b4920b5ea2b6dd2e2d4079dd3135"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c754ce1fab41b731259f100d5d46529a38aa2c9b683c92aeb7e96ef5b2898cd8"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:718ea99f84b16c4bdbf6a93e53552cdccefa18e12ff9a02c5041e621460e2e61"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9441aca94b21f7349cdb231cd0ce9ca251b2355836e8a02bf6ccbea5b442d7a9"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:90167a48de3ed7f062058826608a80242b8561d0fb0cce2c610d741624811a61"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:8e02425bfc7ebed617323a674974b70eaecd8f07b64a7d16e0bf3e766b93e3c9"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:d48657a404fab82b2754faa813a10c5ad6aa594cb1829dca168a49438b61b4ec"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f8b62fdccc429e6643cefffd5df9c7bca65588d06e8925b78014ad9ad983bf5"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-win32.whl", hash = "sha256:63db612bb6da1bb9f6aa7412739f0e714b1910ec07bc675943044fe683ef192c"}, - {file = "rapidfuzz-3.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:bb571dbd4cc93342be0ba632f0b8d7de4cbd9d959d76371d33716d2216090d41"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b27cea618601ca5032ea98ee116ca6e0fe67be7b286bcb0b9f956d64db697472"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d5592b08e3cadc9e06ef3af6a9d66b6ef1bf871ed5acd7f9b1e162d78806a65"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:58999b21d01dd353f49511a61937eac20c7a5b22eab87612063947081855d85f"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2ee3909f611cc5860cc8d9f92d039fd84241ce7360b49ea88e657181d2b45f6"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00b5ee47b387fa3805f4038362a085ec58149135dc5bc640ca315a9893a16f9e"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4c647795c5b901091a68e210c76b769af70a33a8624ac496ac3e34d33366c0d"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:77ea62879932b32aba77ab23a9296390a67d024bf2f048dee99143be80a4ce26"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fee62ae76e3b8b9fff8aa2ca4061575ee358927ffbdb2919a8c84a98da59f78"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:231dc1cb63b1c8dd78c0597aa3ad3749a86a2b7e76af295dd81609522699a558"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:827ddf2d5d157ac3d1001b52e84c9e20366237a742946599ffc435af7fdd26d0"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c04ef83c9ca3162d200df36e933b3ea0327a2626cee2e01bbe55acbc004ce261"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:747265f39978bbaad356f5c6b6c808f0e8f5e8994875af0119b82b4700c55387"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:14791324f0c753f5a0918df1249b91515f5ddc16281fbaa5ec48bff8fa659229"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-win32.whl", hash = "sha256:b7b9cbc60e3eb08da6d18636c62c6eb6206cd9d0c7ad73996f7a1df3fc415b27"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:2084193fd8fd346db496a2220363437eb9370a06d1d5a7a9dba00a64390c6a28"}, - {file = "rapidfuzz-3.8.1-cp39-cp39-win_arm64.whl", hash = "sha256:c9597a05d08e8103ad59ebdf29e3fbffb0d0dbf3b641f102cfbeadc3a77bde51"}, - {file = "rapidfuzz-3.8.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5f4174079dfe8ed1f13ece9bde7660f19f98ab17e0c0d002d90cc845c3a7e238"}, - {file = "rapidfuzz-3.8.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07d7d4a3c49a15146d65f06e44d7545628ca0437c929684e32ef122852f44d95"}, - {file = "rapidfuzz-3.8.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ef119fc127c982053fb9ec638dcc3277f83b034b5972eb05941984b9ec4a290"}, - {file = "rapidfuzz-3.8.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e57f9c2367706a320b78e91f8bf9a3b03bf9069464eb7b54455fa340d03e4c"}, - {file = "rapidfuzz-3.8.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6d4f1956fe1fc618e34ac79a6ed84fff5a6f23e41a8a476dd3e8570f0b12f02b"}, - {file = "rapidfuzz-3.8.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:313bdcd16e9cd5e5568b4a31d18a631f0b04cc10a3fd916e4ef75b713e6f177e"}, - {file = "rapidfuzz-3.8.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a02def2eb526cc934d2125533cf2f15aa71c72ed4397afca38427ab047901e88"}, - {file = "rapidfuzz-3.8.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9d5d924970b07128c61c08eebee718686f4bd9838ef712a50468169520c953f"}, - {file = "rapidfuzz-3.8.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1edafc0a2737df277d3ddf401f3a73f76e246b7502762c94a3916453ae67e9b1"}, - {file = "rapidfuzz-3.8.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:81fd28389bedab28251f0535b3c034b0e63a618efc3ff1d338c81a3da723adb3"}, - {file = "rapidfuzz-3.8.1.tar.gz", hash = "sha256:a357aae6791118011ad3ab4f2a4aa7bd7a487e5f9981b390e9f3c2c5137ecadf"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5f897a9bff517d5c6af6a90131796b4298b547b9a9a4df3cf285006be33aae5b"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83c570ce23b447625929c0e7c4f2eab6d90f5a576db2b26a5aa0594a53d560ea"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4c6b6455ee8404a663e15477a8bfe98b1afb329ff224bcf6d15f623a3761b95"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa44aef769e5834fef4fde091fd646cc1c52a2813b3aa241ae54b3028960abaa"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25ea055ae40fb60f503f02b44b3ac35a39a9108be33f89e05b81bc4e3c849ec8"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb592bad9d58b47c6681f0c180767d2c98775a35f7267131d33723139c3d6c2e"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb023adfefa62410fff877f7cc70cd4758cbfbad963e87d146cf71b022dce197"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c883d2d2e31c759af1f3fdeb67ec151cf94e307f745b3d02ab3a2ef6595485f2"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8e11405d81e8baea4999a5757a982009566cff8f6a121d5ccf042aab81ae0230"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:02ed579f35ddd3552c7f74bc0c10800b432d9b09a4cebb19fd7a10b3b4759cc0"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:9f8615a2a67a1f80b3aa7a3d7fbe6a2ed062a54c98988e3f9b664b49a3bc115e"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:64058f4a3698c6c8464df47a3b7da303db2477b2447142da3e67fc091f4c366a"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-win32.whl", hash = "sha256:2ef42c43c94139c890aeec40bc442c4bf8d48e15b456a88ce0f4cc5cfcad1896"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:c99d001c45c31c2cd2f7361bc2036d3062b21db5f43beea8bc5109d43fe9f283"}, + {file = "rapidfuzz-3.9.1-cp310-cp310-win_arm64.whl", hash = "sha256:da3f495cf4f7a443b34a6d3c6805265595fcd13641b3253a8e2034289d828dd9"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8869dcf072227a40a6f9e87b3fc4eb020055a08ad12b63d751c354e3a973ccb"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9f66f9d5f14141b4b017e76118ec4bda29266f6b281989026e3a9ba1a2aaf032"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07decc6b058f935d2219423a50aac426027928cc734809f793bc250de4a3756e"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c125095d1828fa10ac79077594dd2d8829167d9e184e20baa97620fc52ebdcc9"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76a55bcc3abc9f8e38a1218cb5a09719126cfc4cba23ebd8caa27dfdc69cedd8"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:50c2f7ad132dfeb6247c90b41431662af939a820f761cf930708d55912377ed8"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177bddf50577db59bcb00b6f7a5c2b70f2ec5a2aba40c8add7a6f7fd8609224e"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dec2792f864be731c8339cad99001caa6540aa909e6fd8bc688bb0419c501f44"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c6437cba4b9460d5ee0bafd796e13ef9307091b81685bbe745b0f1619fb887ca"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:874317057a58a9c6ddf59fe1491e478217daa9fdb043a00358a15de4f62f9a2d"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5d8eb7fe39e81dc1530a3ec81a35e69770839c76607c461eb9d0902427fab3e1"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:08f85d6674d804a493c3e9ec10a807f9bd8f482781487eda064913b537f99d7f"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-win32.whl", hash = "sha256:eadf8c4b24b63aef8810ed585c24ac1fc022ee771211772a6e9f78c63aa949ff"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:0e931539edeb9158ef83537cd571051f8a9608737642c20b088a37bd5d76c5c9"}, + {file = "rapidfuzz-3.9.1-cp311-cp311-win_arm64.whl", hash = "sha256:bcc0ffcaeb1e499e708f32ec30177ed690b3f25455c91ad8c2240986c69f9ebe"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8781e45c56f7f3a64940f4d594a4ffd69360147925a706569b2b0c57347b2225"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0edc950c6a04c19db10670cd04e33403b3eb0f175deb620f9668595d378b1005"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ceb0d7bdec910d93793d32633ba0cb644356cf6778f9d91b727da0075beaec1"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a231e8f3bae82f10e7188965b37c91d8bfb80136595c860c8a08eb0dd07764d"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bfa8c0a8ce09b4bcd36322f8f375750dca160fbdbeb2e763a695cef3ae9133e"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e872627d5359c840f3e431b0beb263518048917c3e076f624870552d84e7dc6"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f006c3af82c478df09a790fb4846b5acd00a187d75715674d71f5dc0ac982ce"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:32718fa69306df969bf4fca1719f8900b83df315a2a8153942d5b8906f4fd1d6"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a89b219c1a7933a0673b2dbb1ffe701057d82e5cb843552be4f55b61b557031e"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b26cc9459e096959fab3a4a8a17b96a6c7c961f9db5c37c1c3c7a06789316cf7"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2f9044a4470343087cde10beaa36266519d5da110a9a4597b43e6aa35fa928d3"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a3a48fc6dc274b803a366a4baec99e212792ae1b1e73d42235b2042cd3ade7c1"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-win32.whl", hash = "sha256:b71e7f99ed048a338e4a1ac34f56b3b3933a3ba2dfbb04450c786a8ddd97f4db"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:e58489934d0147f1edda693cb983bea40f2b45ae6756fd47c1005b538f817a2f"}, + {file = "rapidfuzz-3.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:829fbad93266fffa0f9d722a94cbb1b95b53e3c04be4e872193496a0cfbd66f0"}, + {file = "rapidfuzz-3.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bca2b93c75f87cd85832cdd5bb06b4b5642e2a05c8e3550841ddf5d564ce4abb"}, + {file = "rapidfuzz-3.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d3397630f22e6c60dda8be3e9dbcf6a341695d487df8a6c92f4a2f7ebcdaecf7"}, + {file = "rapidfuzz-3.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df7bba8d4a8fb8e7559a9e83dfc5385dc6fe89efd73e32d253667242faf1883c"}, + {file = "rapidfuzz-3.9.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e70605350cb6ec5091e06de62d3dcb058f694b059b4e1a9d85bfbf892f70030"}, + {file = "rapidfuzz-3.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:678fcaa5117ddb6263160a7c5f33cc9ea3df335465f5d53715707fad103e1d09"}, + {file = "rapidfuzz-3.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08dcd347d408912b6da778a73a0d7a2adad7fe238a44263e5e3789f2a8d84669"}, + {file = "rapidfuzz-3.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7149afaf0294882b6b15bb6fa9fc38ff1d761e50117460ee3561181c1c4e2230"}, + {file = "rapidfuzz-3.9.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0c568b89a5016e76f0b3f85e9379036da99c5e7ec26b33935453d353a1938b74"}, + {file = "rapidfuzz-3.9.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:a079164675d24eb715230bf9dd252683ae3c9c0c0a236f0b8098630268b899e9"}, + {file = "rapidfuzz-3.9.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f6f4e8235d0acf1972f5eb4091c4a0473e5670a754f166c0c718ce21e945f879"}, + {file = "rapidfuzz-3.9.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:ea62c82eb2c65bd49651e95f4f46874483ae4da1c3b57997e58f1b4fb2de6c05"}, + {file = "rapidfuzz-3.9.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3ab6ad7e70469aed24e24378b19a9e47fc757c847399b22c612a0fccacc795cb"}, + {file = "rapidfuzz-3.9.1-cp38-cp38-win32.whl", hash = "sha256:bf5184b17e26a82b00c7ee05d9ec5d826113df55830bbc447bf6d6e7469c70fb"}, + {file = "rapidfuzz-3.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:493354f50b9855271ac846b213e394e08446e70cef5cc033e5302a2220f3ae7b"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c8b0e6640421e55d69e186ce7fb9e6c723cfd3b6f91beaeb28705c2a46c8a194"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bc68fb8f2a8b5b3a4526b7a65e7d5c7f821882f56d9dcbcce4c6859a9e5bdcd7"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77767b119ac05662d216a8cc4092ac28dbc015d9caabebdbefe371b0dd82a38e"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dbcc4add07bd60ea73b94392fed28f83dba0fe796097da47627fd539bd6daca"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c0899de4fc1a7a36f14be556a0dacf40ea5c0fe22c6b45b2ea2674e1ac47e269"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9f075366cee63a6b06bd7f9285eb9f1785382a6493afcb7054202e20508bf94"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:349e9c15092d20a1f6ff1795e068f39a9ee5e84c54b3addbc66d0ac469c4ef43"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a645f362dafc103dbe7f43a2ad34f76284773cd7d1b00514d1c591848a1c817f"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:03a0a4bc8d4bd3e6f882b4c2ac183825a9b6dabe7e5a97bb6a1075e4635c944d"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:fbce66cb2e331b0888c79b594eab76e2c609c2637050085daadff5325d471dc2"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:e5d7b3154f6df9e05c2016de5e95f8cba4fe636a4e5520ebcd89bc6c54b8e4ed"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:aaba665f92c011c6f284e933ab02b5dc129a6d3f48fce913ec4a214bd530135e"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-win32.whl", hash = "sha256:61b343c581f4926260248069d8fdbbbf293c19c12ef440ad5ced15bcff277a84"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:ce3335324198e1388a1c4e50d40f45107367010afe9fa09fd46278160f0ab591"}, + {file = "rapidfuzz-3.9.1-cp39-cp39-win_arm64.whl", hash = "sha256:998977df2ae01ff8b7bc3b29a860b4a863005e0533e323df3fd555a31ef33f0e"}, + {file = "rapidfuzz-3.9.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dc4b5de5d6f9347d836d849b56bca630169353cbe5c10fa7fe93bb1677b49770"}, + {file = "rapidfuzz-3.9.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9f74d93148081049ccc86f276d54cd7c8c0692250245660b4fcd904ed1db1e01"}, + {file = "rapidfuzz-3.9.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f9dfdcd75e16e5874efee233b28aec1322623b0f1f20641452d06ea2d8ba5ef"}, + {file = "rapidfuzz-3.9.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97ab8f153984a5d827ebb5a5b80ee59563efcf2fa3e569dcd46ea7e7c9845e93"}, + {file = "rapidfuzz-3.9.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8a6d5a8edc452920efdf1b499a2a47bb8a28440f7ab3fe28bb7d6636ccf71c3"}, + {file = "rapidfuzz-3.9.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:06879b598e798a4d33a283c2b4fa0d555d7706b6531e3321b161d62e986f7f57"}, + {file = "rapidfuzz-3.9.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0f906ab6220778404498e0ce255c4cc89f98ea5e656e54cc59c5813c877eb86b"}, + {file = "rapidfuzz-3.9.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:d3da444890c9559fd15717d97f8373b1cd14007f68c9b037aa93ef7ca969b559"}, + {file = "rapidfuzz-3.9.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc4503841cd3cbe22b5ac44f15bc834ec97d811a3c3943f73f5643266c8674e1"}, + {file = "rapidfuzz-3.9.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5713c56b30ed75ada3a8f008cf8e8e6323386ce48fac2bf2d07285fe6c91f5a4"}, + {file = "rapidfuzz-3.9.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb3f1af099cd1d98001691fbdadd422f088f21eadcacf5698b393b7569e24dc4"}, + {file = "rapidfuzz-3.9.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:53477e1e6d85d603c9a319cfd00ab9f0a57b6d68bcdb268d6b15a79e64d693d0"}, + {file = "rapidfuzz-3.9.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a47550eabf235e5d50e7d448c18f77f6e8082aa3571e9df511c8388525ea9372"}, + {file = "rapidfuzz-3.9.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c6b11a38b61cc2462a113b123f5e932cda0e525f816d6fe4b68516f97d7f9d49"}, + {file = "rapidfuzz-3.9.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:414644a2fc8a3e5fafda95b430214ed892faa4d0a07401d33892bc9ca5c84974"}, + {file = "rapidfuzz-3.9.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1539e7439b68013c5d2ab7ed9d3d221480a15595207764145ae177077d28016d"}, + {file = "rapidfuzz-3.9.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e18f0e9351f7e5d5387774ff4d5cabd824341e16b866eb1c8d3f557111b447ef"}, + {file = "rapidfuzz-3.9.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d2ff268a8bf57a76512804d5ca2097afaf98e64e8947d514cde7e2e8446aa5f7"}, + {file = "rapidfuzz-3.9.1.tar.gz", hash = "sha256:a42eb645241f39a59c45a7fc15e3faf61886bff3a4a22263fd0f7cfb90e91b7f"}, ] [package.extras] @@ -3424,129 +3548,24 @@ full = ["numpy"] [[package]] name = "readchar" -version = "4.0.6" +version = "4.1.0" description = "Library to easily read single chars and key strokes" optional = false python-versions = ">=3.8" files = [ - {file = "readchar-4.0.6-py3-none-any.whl", hash = "sha256:b4b31dd35de4897be738f27e8f9f62426b5fedb54b648364987e30ae534b71bc"}, - {file = "readchar-4.0.6.tar.gz", hash = "sha256:e0dae942d3a746f8d5423f83dbad67efe704004baafe31b626477929faaee472"}, -] - -[package.dependencies] -setuptools = ">=41.0" - -[[package]] -name = "regex" -version = "2024.4.16" -description = "Alternative regular expression module, to replace re." -optional = false -python-versions = ">=3.7" -files = [ - {file = "regex-2024.4.16-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb83cc090eac63c006871fd24db5e30a1f282faa46328572661c0a24a2323a08"}, - {file = "regex-2024.4.16-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c91e1763696c0eb66340c4df98623c2d4e77d0746b8f8f2bee2c6883fd1fe18"}, - {file = "regex-2024.4.16-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:10188fe732dec829c7acca7422cdd1bf57d853c7199d5a9e96bb4d40db239c73"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:956b58d692f235cfbf5b4f3abd6d99bf102f161ccfe20d2fd0904f51c72c4c66"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a70b51f55fd954d1f194271695821dd62054d949efd6368d8be64edd37f55c86"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c02fcd2bf45162280613d2e4a1ca3ac558ff921ae4e308ecb307650d3a6ee51"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4ed75ea6892a56896d78f11006161eea52c45a14994794bcfa1654430984b22"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd727ad276bb91928879f3aa6396c9a1d34e5e180dce40578421a691eeb77f47"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7cbc5d9e8a1781e7be17da67b92580d6ce4dcef5819c1b1b89f49d9678cc278c"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:78fddb22b9ef810b63ef341c9fcf6455232d97cfe03938cbc29e2672c436670e"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:445ca8d3c5a01309633a0c9db57150312a181146315693273e35d936472df912"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:95399831a206211d6bc40224af1c635cb8790ddd5c7493e0bd03b85711076a53"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:7731728b6568fc286d86745f27f07266de49603a6fdc4d19c87e8c247be452af"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4facc913e10bdba42ec0aee76d029aedda628161a7ce4116b16680a0413f658a"}, - {file = "regex-2024.4.16-cp310-cp310-win32.whl", hash = "sha256:911742856ce98d879acbea33fcc03c1d8dc1106234c5e7d068932c945db209c0"}, - {file = "regex-2024.4.16-cp310-cp310-win_amd64.whl", hash = "sha256:e0a2df336d1135a0b3a67f3bbf78a75f69562c1199ed9935372b82215cddd6e2"}, - {file = "regex-2024.4.16-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1210365faba7c2150451eb78ec5687871c796b0f1fa701bfd2a4a25420482d26"}, - {file = "regex-2024.4.16-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9ab40412f8cd6f615bfedea40c8bf0407d41bf83b96f6fc9ff34976d6b7037fd"}, - {file = "regex-2024.4.16-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fd80d1280d473500d8086d104962a82d77bfbf2b118053824b7be28cd5a79ea5"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bb966fdd9217e53abf824f437a5a2d643a38d4fd5fd0ca711b9da683d452969"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:20b7a68444f536365af42a75ccecb7ab41a896a04acf58432db9e206f4e525d6"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b74586dd0b039c62416034f811d7ee62810174bb70dffcca6439f5236249eb09"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c8290b44d8b0af4e77048646c10c6e3aa583c1ca67f3b5ffb6e06cf0c6f0f89"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2d80a6749724b37853ece57988b39c4e79d2b5fe2869a86e8aeae3bbeef9eb0"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3a1018e97aeb24e4f939afcd88211ace472ba566efc5bdf53fd8fd7f41fa7170"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8d015604ee6204e76569d2f44e5a210728fa917115bef0d102f4107e622b08d5"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:3d5ac5234fb5053850d79dd8eb1015cb0d7d9ed951fa37aa9e6249a19aa4f336"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:0a38d151e2cdd66d16dab550c22f9521ba79761423b87c01dae0a6e9add79c0d"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:159dc4e59a159cb8e4e8f8961eb1fa5d58f93cb1acd1701d8aff38d45e1a84a6"}, - {file = "regex-2024.4.16-cp311-cp311-win32.whl", hash = "sha256:ba2336d6548dee3117520545cfe44dc28a250aa091f8281d28804aa8d707d93d"}, - {file = "regex-2024.4.16-cp311-cp311-win_amd64.whl", hash = "sha256:8f83b6fd3dc3ba94d2b22717f9c8b8512354fd95221ac661784df2769ea9bba9"}, - {file = "regex-2024.4.16-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:80b696e8972b81edf0af2a259e1b2a4a661f818fae22e5fa4fa1a995fb4a40fd"}, - {file = "regex-2024.4.16-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d61ae114d2a2311f61d90c2ef1358518e8f05eafda76eaf9c772a077e0b465ec"}, - {file = "regex-2024.4.16-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ba6745440b9a27336443b0c285d705ce73adb9ec90e2f2004c64d95ab5a7598"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295004b2dd37b0835ea5c14a33e00e8cfa3c4add4d587b77287825f3418d310"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4aba818dcc7263852aabb172ec27b71d2abca02a593b95fa79351b2774eb1d2b"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0800631e565c47520aaa04ae38b96abc5196fe8b4aa9bd864445bd2b5848a7a"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08dea89f859c3df48a440dbdcd7b7155bc675f2fa2ec8c521d02dc69e877db70"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eeaa0b5328b785abc344acc6241cffde50dc394a0644a968add75fcefe15b9d4"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4e819a806420bc010489f4e741b3036071aba209f2e0989d4750b08b12a9343f"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:c2d0e7cbb6341e830adcbfa2479fdeebbfbb328f11edd6b5675674e7a1e37730"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:91797b98f5e34b6a49f54be33f72e2fb658018ae532be2f79f7c63b4ae225145"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:d2da13568eff02b30fd54fccd1e042a70fe920d816616fda4bf54ec705668d81"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:370c68dc5570b394cbaadff50e64d705f64debed30573e5c313c360689b6aadc"}, - {file = "regex-2024.4.16-cp312-cp312-win32.whl", hash = "sha256:904c883cf10a975b02ab3478bce652f0f5346a2c28d0a8521d97bb23c323cc8b"}, - {file = "regex-2024.4.16-cp312-cp312-win_amd64.whl", hash = "sha256:785c071c982dce54d44ea0b79cd6dfafddeccdd98cfa5f7b86ef69b381b457d9"}, - {file = "regex-2024.4.16-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2f142b45c6fed48166faeb4303b4b58c9fcd827da63f4cf0a123c3480ae11fb"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e87ab229332ceb127a165612d839ab87795972102cb9830e5f12b8c9a5c1b508"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81500ed5af2090b4a9157a59dbc89873a25c33db1bb9a8cf123837dcc9765047"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b340cccad138ecb363324aa26893963dcabb02bb25e440ebdf42e30963f1a4e0"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c72608e70f053643437bd2be0608f7f1c46d4022e4104d76826f0839199347a"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a01fe2305e6232ef3e8f40bfc0f0f3a04def9aab514910fa4203bafbc0bb4682"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:03576e3a423d19dda13e55598f0fd507b5d660d42c51b02df4e0d97824fdcae3"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:549c3584993772e25f02d0656ac48abdda73169fe347263948cf2b1cead622f3"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:34422d5a69a60b7e9a07a690094e824b66f5ddc662a5fc600d65b7c174a05f04"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:5f580c651a72b75c39e311343fe6875d6f58cf51c471a97f15a938d9fe4e0d37"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3399dd8a7495bbb2bacd59b84840eef9057826c664472e86c91d675d007137f5"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8d1f86f3f4e2388aa3310b50694ac44daefbd1681def26b4519bd050a398dc5a"}, - {file = "regex-2024.4.16-cp37-cp37m-win32.whl", hash = "sha256:dd5acc0a7d38fdc7a3a6fd3ad14c880819008ecb3379626e56b163165162cc46"}, - {file = "regex-2024.4.16-cp37-cp37m-win_amd64.whl", hash = "sha256:ba8122e3bb94ecda29a8de4cf889f600171424ea586847aa92c334772d200331"}, - {file = "regex-2024.4.16-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:743deffdf3b3481da32e8a96887e2aa945ec6685af1cfe2bcc292638c9ba2f48"}, - {file = "regex-2024.4.16-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7571f19f4a3fd00af9341c7801d1ad1967fc9c3f5e62402683047e7166b9f2b4"}, - {file = "regex-2024.4.16-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:df79012ebf6f4efb8d307b1328226aef24ca446b3ff8d0e30202d7ebcb977a8c"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e757d475953269fbf4b441207bb7dbdd1c43180711b6208e129b637792ac0b93"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4313ab9bf6a81206c8ac28fdfcddc0435299dc88cad12cc6305fd0e78b81f9e4"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d83c2bc678453646f1a18f8db1e927a2d3f4935031b9ad8a76e56760461105dd"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9df1bfef97db938469ef0a7354b2d591a2d438bc497b2c489471bec0e6baf7c4"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62120ed0de69b3649cc68e2965376048793f466c5a6c4370fb27c16c1beac22d"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c2ef6f7990b6e8758fe48ad08f7e2f66c8f11dc66e24093304b87cae9037bb4a"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8fc6976a3395fe4d1fbeb984adaa8ec652a1e12f36b56ec8c236e5117b585427"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:03e68f44340528111067cecf12721c3df4811c67268b897fbe695c95f860ac42"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ec7e0043b91115f427998febaa2beb82c82df708168b35ece3accb610b91fac1"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c21fc21a4c7480479d12fd8e679b699f744f76bb05f53a1d14182b31f55aac76"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:12f6a3f2f58bb7344751919a1876ee1b976fe08b9ffccb4bbea66f26af6017b9"}, - {file = "regex-2024.4.16-cp38-cp38-win32.whl", hash = "sha256:479595a4fbe9ed8f8f72c59717e8cf222da2e4c07b6ae5b65411e6302af9708e"}, - {file = "regex-2024.4.16-cp38-cp38-win_amd64.whl", hash = "sha256:0534b034fba6101611968fae8e856c1698da97ce2efb5c2b895fc8b9e23a5834"}, - {file = "regex-2024.4.16-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a7ccdd1c4a3472a7533b0a7aa9ee34c9a2bef859ba86deec07aff2ad7e0c3b94"}, - {file = "regex-2024.4.16-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f2f017c5be19984fbbf55f8af6caba25e62c71293213f044da3ada7091a4455"}, - {file = "regex-2024.4.16-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:803b8905b52de78b173d3c1e83df0efb929621e7b7c5766c0843704d5332682f"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:684008ec44ad275832a5a152f6e764bbe1914bea10968017b6feaecdad5736e0"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65436dce9fdc0aeeb0a0effe0839cb3d6a05f45aa45a4d9f9c60989beca78b9c"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea355eb43b11764cf799dda62c658c4d2fdb16af41f59bb1ccfec517b60bcb07"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98c1165f3809ce7774f05cb74e5408cd3aa93ee8573ae959a97a53db3ca3180d"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cccc79a9be9b64c881f18305a7c715ba199e471a3973faeb7ba84172abb3f317"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00169caa125f35d1bca6045d65a662af0202704489fada95346cfa092ec23f39"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6cc38067209354e16c5609b66285af17a2863a47585bcf75285cab33d4c3b8df"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:23cff1b267038501b179ccbbd74a821ac4a7192a1852d1d558e562b507d46013"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:b9d320b3bf82a39f248769fc7f188e00f93526cc0fe739cfa197868633d44701"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:89ec7f2c08937421bbbb8b48c54096fa4f88347946d4747021ad85f1b3021b3c"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4918fd5f8b43aa7ec031e0fef1ee02deb80b6afd49c85f0790be1dc4ce34cb50"}, - {file = "regex-2024.4.16-cp39-cp39-win32.whl", hash = "sha256:684e52023aec43bdf0250e843e1fdd6febbe831bd9d52da72333fa201aaa2335"}, - {file = "regex-2024.4.16-cp39-cp39-win_amd64.whl", hash = "sha256:e697e1c0238133589e00c244a8b676bc2cfc3ab4961318d902040d099fec7483"}, - {file = "regex-2024.4.16.tar.gz", hash = "sha256:fa454d26f2e87ad661c4f0c5a5fe4cf6aab1e307d1b94f16ffdfcb089ba685c0"}, + {file = "readchar-4.1.0-py3-none-any.whl", hash = "sha256:d163680656b34f263fb5074023db44b999c68ff31ab394445ebfd1a2a41fe9a2"}, + {file = "readchar-4.1.0.tar.gz", hash = "sha256:6f44d1b5f0fd93bd93236eac7da39609f15df647ab9cea39f5bc7478b3344b99"}, ] [[package]] name = "requests" -version = "2.31.0" +version = "2.32.2" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.32.2-py3-none-any.whl", hash = "sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c"}, + {file = "requests-2.32.2.tar.gz", hash = "sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289"}, ] [package.dependencies] @@ -3594,22 +3613,23 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rich-click" -version = "1.7.4" +version = "1.8.2" description = "Format click help output nicely with rich" optional = false python-versions = ">=3.7" files = [ - {file = "rich-click-1.7.4.tar.gz", hash = "sha256:7ce5de8e4dc0333aec946113529b3eeb349f2e5d2fafee96b9edf8ee36a01395"}, - {file = "rich_click-1.7.4-py3-none-any.whl", hash = "sha256:e363655475c60fec5a3e16a1eb618118ed79e666c365a36006b107c17c93ac4e"}, + {file = "rich_click-1.8.2-py3-none-any.whl", hash = "sha256:b57856f304e4fe0394b82d7ce0784450758f8c8b4e201ccc4320501cc201806b"}, + {file = "rich_click-1.8.2.tar.gz", hash = "sha256:8e29bdede858b59aa2859a1ab1c4ccbd39ed7ed5870262dae756fba6b5dc72e8"}, ] [package.dependencies] click = ">=7" -rich = ">=10.7.0" +rich = ">=10.7" typing-extensions = "*" [package.extras] -dev = ["flake8", "flake8-docstrings", "mypy", "packaging", "pre-commit", "pytest", "pytest-cov", "types-setuptools"] +dev = ["mypy", "packaging", "pre-commit", "pytest", "pytest-cov", "rich-codex", "ruff", "types-setuptools"] +docs = ["markdown-include", "mkdocs", "mkdocs-glightbox", "mkdocs-material-extensions", "mkdocs-material[imaging] (>=9.5.18,<9.6.0)", "mkdocs-rss-plugin", "mkdocstrings[python]", "rich-codex"] [[package]] name = "sanic" @@ -3758,19 +3778,18 @@ tests = ["coverage[toml] (>=5.0.2)", "pytest"] [[package]] name = "setuptools" -version = "69.5.1" +version = "70.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, - {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, + {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"}, + {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["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"] +testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "shellingham" @@ -3891,6 +3910,17 @@ files = [ [package.dependencies] exceptiongroup = "*" +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + [[package]] name = "tomli" version = "2.0.1" @@ -3904,13 +3934,13 @@ files = [ [[package]] name = "tomlkit" -version = "0.12.4" +version = "0.12.5" description = "Style preserving TOML library" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"}, - {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"}, + {file = "tomlkit-0.12.5-py3-none-any.whl", hash = "sha256:af914f5a9c59ed9d0762c7b64d3b5d5df007448eb9cd2edc8a46b1eafead172f"}, + {file = "tomlkit-0.12.5.tar.gz", hash = "sha256:eef34fba39834d4d6b73c9ba7f3e4d1c417a4e56f89a7e96e090dd0d24b8fb3c"}, ] [[package]] @@ -3929,13 +3959,13 @@ html5tagger = ">=1.2.1" [[package]] name = "trove-classifiers" -version = "2024.4.10" +version = "2024.5.22" description = "Canonical source for classifiers on PyPI (pypi.org)." optional = false python-versions = "*" files = [ - {file = "trove-classifiers-2024.4.10.tar.gz", hash = "sha256:49f40bb6a746b72a1cba4f8d55ee8252169cda0f70802e3fd24f04b7fb25a492"}, - {file = "trove_classifiers-2024.4.10-py3-none-any.whl", hash = "sha256:678bd6fcc5218d72e3304e27a608acc9b91e17bd00c3f3d8c968497c843ad98b"}, + {file = "trove_classifiers-2024.5.22-py3-none-any.whl", hash = "sha256:c43ade18704823e4afa3d9db7083294bc4708a5e02afbcefacd0e9d03a7a24ef"}, + {file = "trove_classifiers-2024.5.22.tar.gz", hash = "sha256:8a6242bbb5c9ae88d34cf665e816b287d2212973c8777dfaef5ec18d72ac1d03"}, ] [[package]] @@ -4128,24 +4158,24 @@ files = [ [[package]] name = "types-ujson" -version = "5.9.0.0" +version = "5.10.0.20240515" description = "Typing stubs for ujson" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "types-ujson-5.9.0.0.tar.gz", hash = "sha256:7e7042454dc7cd7f31b09c420d7caf36b93d30bdf4b8db93791bd0561713d017"}, - {file = "types_ujson-5.9.0.0-py3-none-any.whl", hash = "sha256:f274fa604ed6317effcd1c424ef4cf292c3b0689cb118fb3180689d40ed1f4ed"}, + {file = "types-ujson-5.10.0.20240515.tar.gz", hash = "sha256:ceae7127f0dafe4af5dd0ecf98ee13e9d75951ef963b5c5a9b7ea92e0d71f0d7"}, + {file = "types_ujson-5.10.0.20240515-py3-none-any.whl", hash = "sha256:02bafc36b3a93d2511757a64ff88bd505e0a57fba08183a9150fbcfcb2015310"}, ] [[package]] name = "typing-extensions" -version = "4.11.0" +version = "4.12.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, - {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, + {file = "typing_extensions-4.12.0-py3-none-any.whl", hash = "sha256:b349c66bea9016ac22978d800cfff206d5f9816951f12a7d0ec5578b0a819594"}, + {file = "typing_extensions-4.12.0.tar.gz", hash = "sha256:8cbcdc8606ebcb0d95453ad7dc5065e6237b6aa230a31e81d0f440c30fed5fd8"}, ] [[package]] @@ -4176,76 +4206,89 @@ files = [ [[package]] name = "ujson" -version = "5.9.0" +version = "5.10.0" description = "Ultra fast JSON encoder and decoder for Python" optional = false python-versions = ">=3.8" files = [ - {file = "ujson-5.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ab71bf27b002eaf7d047c54a68e60230fbd5cd9da60de7ca0aa87d0bccead8fa"}, - {file = "ujson-5.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a365eac66f5aa7a7fdf57e5066ada6226700884fc7dce2ba5483538bc16c8c5"}, - {file = "ujson-5.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e015122b337858dba5a3dc3533af2a8fc0410ee9e2374092f6a5b88b182e9fcc"}, - {file = "ujson-5.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:779a2a88c53039bebfbccca934430dabb5c62cc179e09a9c27a322023f363e0d"}, - {file = "ujson-5.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10ca3c41e80509fd9805f7c149068fa8dbee18872bbdc03d7cca928926a358d5"}, - {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a566e465cb2fcfdf040c2447b7dd9718799d0d90134b37a20dff1e27c0e9096"}, - {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f833c529e922577226a05bc25b6a8b3eb6c4fb155b72dd88d33de99d53113124"}, - {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b68a0caab33f359b4cbbc10065c88e3758c9f73a11a65a91f024b2e7a1257106"}, - {file = "ujson-5.9.0-cp310-cp310-win32.whl", hash = "sha256:7cc7e605d2aa6ae6b7321c3ae250d2e050f06082e71ab1a4200b4ae64d25863c"}, - {file = "ujson-5.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:a6d3f10eb8ccba4316a6b5465b705ed70a06011c6f82418b59278fbc919bef6f"}, - {file = "ujson-5.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b23bbb46334ce51ddb5dded60c662fbf7bb74a37b8f87221c5b0fec1ec6454b"}, - {file = "ujson-5.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6974b3a7c17bbf829e6c3bfdc5823c67922e44ff169851a755eab79a3dd31ec0"}, - {file = "ujson-5.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5964ea916edfe24af1f4cc68488448fbb1ec27a3ddcddc2b236da575c12c8ae"}, - {file = "ujson-5.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ba7cac47dd65ff88571eceeff48bf30ed5eb9c67b34b88cb22869b7aa19600d"}, - {file = "ujson-5.9.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bbd91a151a8f3358c29355a491e915eb203f607267a25e6ab10531b3b157c5e"}, - {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:829a69d451a49c0de14a9fecb2a2d544a9b2c884c2b542adb243b683a6f15908"}, - {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a807ae73c46ad5db161a7e883eec0fbe1bebc6a54890152ccc63072c4884823b"}, - {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8fc2aa18b13d97b3c8ccecdf1a3c405f411a6e96adeee94233058c44ff92617d"}, - {file = "ujson-5.9.0-cp311-cp311-win32.whl", hash = "sha256:70e06849dfeb2548be48fdd3ceb53300640bc8100c379d6e19d78045e9c26120"}, - {file = "ujson-5.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:7309d063cd392811acc49b5016728a5e1b46ab9907d321ebbe1c2156bc3c0b99"}, - {file = "ujson-5.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:20509a8c9f775b3a511e308bbe0b72897ba6b800767a7c90c5cca59d20d7c42c"}, - {file = "ujson-5.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b28407cfe315bd1b34f1ebe65d3bd735d6b36d409b334100be8cdffae2177b2f"}, - {file = "ujson-5.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d302bd17989b6bd90d49bade66943c78f9e3670407dbc53ebcf61271cadc399"}, - {file = "ujson-5.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f21315f51e0db8ee245e33a649dd2d9dce0594522de6f278d62f15f998e050e"}, - {file = "ujson-5.9.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5635b78b636a54a86fdbf6f027e461aa6c6b948363bdf8d4fbb56a42b7388320"}, - {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82b5a56609f1235d72835ee109163c7041b30920d70fe7dac9176c64df87c164"}, - {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:5ca35f484622fd208f55041b042d9d94f3b2c9c5add4e9af5ee9946d2d30db01"}, - {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:829b824953ebad76d46e4ae709e940bb229e8999e40881338b3cc94c771b876c"}, - {file = "ujson-5.9.0-cp312-cp312-win32.whl", hash = "sha256:25fa46e4ff0a2deecbcf7100af3a5d70090b461906f2299506485ff31d9ec437"}, - {file = "ujson-5.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:60718f1720a61560618eff3b56fd517d107518d3c0160ca7a5a66ac949c6cf1c"}, - {file = "ujson-5.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d581db9db9e41d8ea0b2705c90518ba623cbdc74f8d644d7eb0d107be0d85d9c"}, - {file = "ujson-5.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ff741a5b4be2d08fceaab681c9d4bc89abf3c9db600ab435e20b9b6d4dfef12e"}, - {file = "ujson-5.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdcb02cabcb1e44381221840a7af04433c1dc3297af76fde924a50c3054c708c"}, - {file = "ujson-5.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e208d3bf02c6963e6ef7324dadf1d73239fb7008491fdf523208f60be6437402"}, - {file = "ujson-5.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4b3917296630a075e04d3d07601ce2a176479c23af838b6cf90a2d6b39b0d95"}, - {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0c4d6adb2c7bb9eb7c71ad6f6f612e13b264942e841f8cc3314a21a289a76c4e"}, - {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0b159efece9ab5c01f70b9d10bbb77241ce111a45bc8d21a44c219a2aec8ddfd"}, - {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0cb4a7814940ddd6619bdce6be637a4b37a8c4760de9373bac54bb7b229698b"}, - {file = "ujson-5.9.0-cp38-cp38-win32.whl", hash = "sha256:dc80f0f5abf33bd7099f7ac94ab1206730a3c0a2d17549911ed2cb6b7aa36d2d"}, - {file = "ujson-5.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:506a45e5fcbb2d46f1a51fead991c39529fc3737c0f5d47c9b4a1d762578fc30"}, - {file = "ujson-5.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0fd2eba664a22447102062814bd13e63c6130540222c0aa620701dd01f4be81"}, - {file = "ujson-5.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bdf7fc21a03bafe4ba208dafa84ae38e04e5d36c0e1c746726edf5392e9f9f36"}, - {file = "ujson-5.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2f909bc08ce01f122fd9c24bc6f9876aa087188dfaf3c4116fe6e4daf7e194f"}, - {file = "ujson-5.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd4ea86c2afd41429751d22a3ccd03311c067bd6aeee2d054f83f97e41e11d8f"}, - {file = "ujson-5.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:63fb2e6599d96fdffdb553af0ed3f76b85fda63281063f1cb5b1141a6fcd0617"}, - {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:32bba5870c8fa2a97f4a68f6401038d3f1922e66c34280d710af00b14a3ca562"}, - {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:37ef92e42535a81bf72179d0e252c9af42a4ed966dc6be6967ebfb929a87bc60"}, - {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f69f16b8f1c69da00e38dc5f2d08a86b0e781d0ad3e4cc6a13ea033a439c4844"}, - {file = "ujson-5.9.0-cp39-cp39-win32.whl", hash = "sha256:3382a3ce0ccc0558b1c1668950008cece9bf463ebb17463ebf6a8bfc060dae34"}, - {file = "ujson-5.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:6adef377ed583477cf005b58c3025051b5faa6b8cc25876e594afbb772578f21"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ffdfebd819f492e48e4f31c97cb593b9c1a8251933d8f8972e81697f00326ff1"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4eec2ddc046360d087cf35659c7ba0cbd101f32035e19047013162274e71fcf"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbb90aa5c23cb3d4b803c12aa220d26778c31b6e4b7a13a1f49971f6c7d088e"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0823cb70866f0d6a4ad48d998dd338dce7314598721bc1b7986d054d782dfd"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4e35d7885ed612feb6b3dd1b7de28e89baaba4011ecdf995e88be9ac614765e9"}, - {file = "ujson-5.9.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b048aa93eace8571eedbd67b3766623e7f0acbf08ee291bef7d8106210432427"}, - {file = "ujson-5.9.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:323279e68c195110ef85cbe5edce885219e3d4a48705448720ad925d88c9f851"}, - {file = "ujson-5.9.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ac92d86ff34296f881e12aa955f7014d276895e0e4e868ba7fddebbde38e378"}, - {file = "ujson-5.9.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6eecbd09b316cea1fd929b1e25f70382917542ab11b692cb46ec9b0a26c7427f"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:473fb8dff1d58f49912323d7cb0859df5585cfc932e4b9c053bf8cf7f2d7c5c4"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f91719c6abafe429c1a144cfe27883eace9fb1c09a9c5ef1bcb3ae80a3076a4e"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b1c0991c4fe256f5fdb19758f7eac7f47caac29a6c57d0de16a19048eb86bad"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a8ea0f55a1396708e564595aaa6696c0d8af532340f477162ff6927ecc46e21"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:07e0cfdde5fd91f54cd2d7ffb3482c8ff1bf558abf32a8b953a5d169575ae1cd"}, - {file = "ujson-5.9.0.tar.gz", hash = "sha256:89cc92e73d5501b8a7f48575eeb14ad27156ad092c2e9fc7e3cf949f07e75532"}, + {file = "ujson-5.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2601aa9ecdbee1118a1c2065323bda35e2c5a2cf0797ef4522d485f9d3ef65bd"}, + {file = "ujson-5.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:348898dd702fc1c4f1051bc3aacbf894caa0927fe2c53e68679c073375f732cf"}, + {file = "ujson-5.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22cffecf73391e8abd65ef5f4e4dd523162a3399d5e84faa6aebbf9583df86d6"}, + {file = "ujson-5.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26b0e2d2366543c1bb4fbd457446f00b0187a2bddf93148ac2da07a53fe51569"}, + {file = "ujson-5.10.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:caf270c6dba1be7a41125cd1e4fc7ba384bf564650beef0df2dd21a00b7f5770"}, + {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a245d59f2ffe750446292b0094244df163c3dc96b3ce152a2c837a44e7cda9d1"}, + {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:94a87f6e151c5f483d7d54ceef83b45d3a9cca7a9cb453dbdbb3f5a6f64033f5"}, + {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:29b443c4c0a113bcbb792c88bea67b675c7ca3ca80c3474784e08bba01c18d51"}, + {file = "ujson-5.10.0-cp310-cp310-win32.whl", hash = "sha256:c18610b9ccd2874950faf474692deee4223a994251bc0a083c114671b64e6518"}, + {file = "ujson-5.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:924f7318c31874d6bb44d9ee1900167ca32aa9b69389b98ecbde34c1698a250f"}, + {file = "ujson-5.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a5b366812c90e69d0f379a53648be10a5db38f9d4ad212b60af00bd4048d0f00"}, + {file = "ujson-5.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:502bf475781e8167f0f9d0e41cd32879d120a524b22358e7f205294224c71126"}, + {file = "ujson-5.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b91b5d0d9d283e085e821651184a647699430705b15bf274c7896f23fe9c9d8"}, + {file = "ujson-5.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:129e39af3a6d85b9c26d5577169c21d53821d8cf68e079060602e861c6e5da1b"}, + {file = "ujson-5.10.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f77b74475c462cb8b88680471193064d3e715c7c6074b1c8c412cb526466efe9"}, + {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7ec0ca8c415e81aa4123501fee7f761abf4b7f386aad348501a26940beb1860f"}, + {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab13a2a9e0b2865a6c6db9271f4b46af1c7476bfd51af1f64585e919b7c07fd4"}, + {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:57aaf98b92d72fc70886b5a0e1a1ca52c2320377360341715dd3933a18e827b1"}, + {file = "ujson-5.10.0-cp311-cp311-win32.whl", hash = "sha256:2987713a490ceb27edff77fb184ed09acdc565db700ee852823c3dc3cffe455f"}, + {file = "ujson-5.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:f00ea7e00447918ee0eff2422c4add4c5752b1b60e88fcb3c067d4a21049a720"}, + {file = "ujson-5.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:98ba15d8cbc481ce55695beee9f063189dce91a4b08bc1d03e7f0152cd4bbdd5"}, + {file = "ujson-5.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a9d2edbf1556e4f56e50fab7d8ff993dbad7f54bac68eacdd27a8f55f433578e"}, + {file = "ujson-5.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6627029ae4f52d0e1a2451768c2c37c0c814ffc04f796eb36244cf16b8e57043"}, + {file = "ujson-5.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8ccb77b3e40b151e20519c6ae6d89bfe3f4c14e8e210d910287f778368bb3d1"}, + {file = "ujson-5.10.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3caf9cd64abfeb11a3b661329085c5e167abbe15256b3b68cb5d914ba7396f3"}, + {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6e32abdce572e3a8c3d02c886c704a38a1b015a1fb858004e03d20ca7cecbb21"}, + {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a65b6af4d903103ee7b6f4f5b85f1bfd0c90ba4eeac6421aae436c9988aa64a2"}, + {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:604a046d966457b6cdcacc5aa2ec5314f0e8c42bae52842c1e6fa02ea4bda42e"}, + {file = "ujson-5.10.0-cp312-cp312-win32.whl", hash = "sha256:6dea1c8b4fc921bf78a8ff00bbd2bfe166345f5536c510671bccececb187c80e"}, + {file = "ujson-5.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:38665e7d8290188b1e0d57d584eb8110951a9591363316dd41cf8686ab1d0abc"}, + {file = "ujson-5.10.0-cp313-cp313-macosx_10_9_x86_64.whl", hash = "sha256:618efd84dc1acbd6bff8eaa736bb6c074bfa8b8a98f55b61c38d4ca2c1f7f287"}, + {file = "ujson-5.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38d5d36b4aedfe81dfe251f76c0467399d575d1395a1755de391e58985ab1c2e"}, + {file = "ujson-5.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67079b1f9fb29ed9a2914acf4ef6c02844b3153913eb735d4bf287ee1db6e557"}, + {file = "ujson-5.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7d0e0ceeb8fe2468c70ec0c37b439dd554e2aa539a8a56365fd761edb418988"}, + {file = "ujson-5.10.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59e02cd37bc7c44d587a0ba45347cc815fb7a5fe48de16bf05caa5f7d0d2e816"}, + {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2a890b706b64e0065f02577bf6d8ca3b66c11a5e81fb75d757233a38c07a1f20"}, + {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:621e34b4632c740ecb491efc7f1fcb4f74b48ddb55e65221995e74e2d00bbff0"}, + {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9500e61fce0cfc86168b248104e954fead61f9be213087153d272e817ec7b4f"}, + {file = "ujson-5.10.0-cp313-cp313-win32.whl", hash = "sha256:4c4fc16f11ac1612f05b6f5781b384716719547e142cfd67b65d035bd85af165"}, + {file = "ujson-5.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:4573fd1695932d4f619928fd09d5d03d917274381649ade4328091ceca175539"}, + {file = "ujson-5.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a984a3131da7f07563057db1c3020b1350a3e27a8ec46ccbfbf21e5928a43050"}, + {file = "ujson-5.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73814cd1b9db6fc3270e9d8fe3b19f9f89e78ee9d71e8bd6c9a626aeaeaf16bd"}, + {file = "ujson-5.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61e1591ed9376e5eddda202ec229eddc56c612b61ac6ad07f96b91460bb6c2fb"}, + {file = "ujson-5.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2c75269f8205b2690db4572a4a36fe47cd1338e4368bc73a7a0e48789e2e35a"}, + {file = "ujson-5.10.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7223f41e5bf1f919cd8d073e35b229295aa8e0f7b5de07ed1c8fddac63a6bc5d"}, + {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d4dc2fd6b3067c0782e7002ac3b38cf48608ee6366ff176bbd02cf969c9c20fe"}, + {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:232cc85f8ee3c454c115455195a205074a56ff42608fd6b942aa4c378ac14dd7"}, + {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:cc6139531f13148055d691e442e4bc6601f6dba1e6d521b1585d4788ab0bfad4"}, + {file = "ujson-5.10.0-cp38-cp38-win32.whl", hash = "sha256:e7ce306a42b6b93ca47ac4a3b96683ca554f6d35dd8adc5acfcd55096c8dfcb8"}, + {file = "ujson-5.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:e82d4bb2138ab05e18f089a83b6564fee28048771eb63cdecf4b9b549de8a2cc"}, + {file = "ujson-5.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dfef2814c6b3291c3c5f10065f745a1307d86019dbd7ea50e83504950136ed5b"}, + {file = "ujson-5.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4734ee0745d5928d0ba3a213647f1c4a74a2a28edc6d27b2d6d5bd9fa4319e27"}, + {file = "ujson-5.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47ebb01bd865fdea43da56254a3930a413f0c5590372a1241514abae8aa7c76"}, + {file = "ujson-5.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dee5e97c2496874acbf1d3e37b521dd1f307349ed955e62d1d2f05382bc36dd5"}, + {file = "ujson-5.10.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7490655a2272a2d0b072ef16b0b58ee462f4973a8f6bbe64917ce5e0a256f9c0"}, + {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba17799fcddaddf5c1f75a4ba3fd6441f6a4f1e9173f8a786b42450851bd74f1"}, + {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2aff2985cef314f21d0fecc56027505804bc78802c0121343874741650a4d3d1"}, + {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ad88ac75c432674d05b61184178635d44901eb749786c8eb08c102330e6e8996"}, + {file = "ujson-5.10.0-cp39-cp39-win32.whl", hash = "sha256:2544912a71da4ff8c4f7ab5606f947d7299971bdd25a45e008e467ca638d13c9"}, + {file = "ujson-5.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:3ff201d62b1b177a46f113bb43ad300b424b7847f9c5d38b1b4ad8f75d4a282a"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5b6fee72fa77dc172a28f21693f64d93166534c263adb3f96c413ccc85ef6e64"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:61d0af13a9af01d9f26d2331ce49bb5ac1fb9c814964018ac8df605b5422dcb3"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecb24f0bdd899d368b715c9e6664166cf694d1e57be73f17759573a6986dd95a"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbd8fd427f57a03cff3ad6574b5e299131585d9727c8c366da4624a9069ed746"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beeaf1c48e32f07d8820c705ff8e645f8afa690cca1544adba4ebfa067efdc88"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:baed37ea46d756aca2955e99525cc02d9181de67f25515c468856c38d52b5f3b"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7663960f08cd5a2bb152f5ee3992e1af7690a64c0e26d31ba7b3ff5b2ee66337"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:d8640fb4072d36b08e95a3a380ba65779d356b2fee8696afeb7794cf0902d0a1"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78778a3aa7aafb11e7ddca4e29f46bc5139131037ad628cc10936764282d6753"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0111b27f2d5c820e7f2dbad7d48e3338c824e7ac4d2a12da3dc6061cc39c8e6"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:c66962ca7565605b355a9ed478292da628b8f18c0f2793021ca4425abf8b01e5"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ba43cc34cce49cf2d4bc76401a754a81202d8aa926d0e2b79f0ee258cb15d3a4"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ac56eb983edce27e7f51d05bc8dd820586c6e6be1c5216a6809b0c668bb312b8"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44bd4b23a0e723bf8b10628288c2c7c335161d6840013d4d5de20e48551773b"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c10f4654e5326ec14a46bcdeb2b685d4ada6911050aa8baaf3501e57024b804"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0de4971a89a762398006e844ae394bd46991f7c385d7a6a3b93ba229e6dac17e"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e1402f0564a97d2a52310ae10a64d25bcef94f8dd643fcf5d310219d915484f7"}, + {file = "ujson-5.10.0.tar.gz", hash = "sha256:b3cd8f3c5d8c7738257f1018880444f7b7d9b66232c64649f562d7ba86ad4bc1"}, ] [[package]] @@ -4277,8 +4320,15 @@ files = [ [package.dependencies] click = ">=7.0" +colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} h11 = ">=0.8" +httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} +python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} +uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""} +watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} [package.extras] standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] @@ -4329,13 +4379,13 @@ test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)" [[package]] name = "virtualenv" -version = "20.25.3" +version = "20.26.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.25.3-py3-none-any.whl", hash = "sha256:8aac4332f2ea6ef519c648d0bc48a5b1d324994753519919bddbb1aff25a104e"}, - {file = "virtualenv-20.25.3.tar.gz", hash = "sha256:7bb554bbdfeaacc3349fa614ea5bff6ac300fc7c335e9facf3a3bcfc703f45be"}, + {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, + {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, ] [package.dependencies] @@ -4347,6 +4397,93 @@ platformdirs = ">=3.9.1,<5" docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] +[[package]] +name = "watchfiles" +version = "0.22.0" +description = "Simple, modern and high performance file watching and code reload in python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "watchfiles-0.22.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:da1e0a8caebf17976e2ffd00fa15f258e14749db5e014660f53114b676e68538"}, + {file = "watchfiles-0.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:61af9efa0733dc4ca462347becb82e8ef4945aba5135b1638bfc20fad64d4f0e"}, + {file = "watchfiles-0.22.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d9188979a58a096b6f8090e816ccc3f255f137a009dd4bbec628e27696d67c1"}, + {file = "watchfiles-0.22.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2bdadf6b90c099ca079d468f976fd50062905d61fae183f769637cb0f68ba59a"}, + {file = "watchfiles-0.22.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:067dea90c43bf837d41e72e546196e674f68c23702d3ef80e4e816937b0a3ffd"}, + {file = "watchfiles-0.22.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbf8a20266136507abf88b0df2328e6a9a7c7309e8daff124dda3803306a9fdb"}, + {file = "watchfiles-0.22.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1235c11510ea557fe21be5d0e354bae2c655a8ee6519c94617fe63e05bca4171"}, + {file = "watchfiles-0.22.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2444dc7cb9d8cc5ab88ebe792a8d75709d96eeef47f4c8fccb6df7c7bc5be71"}, + {file = "watchfiles-0.22.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c5af2347d17ab0bd59366db8752d9e037982e259cacb2ba06f2c41c08af02c39"}, + {file = "watchfiles-0.22.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9624a68b96c878c10437199d9a8b7d7e542feddda8d5ecff58fdc8e67b460848"}, + {file = "watchfiles-0.22.0-cp310-none-win32.whl", hash = "sha256:4b9f2a128a32a2c273d63eb1fdbf49ad64852fc38d15b34eaa3f7ca2f0d2b797"}, + {file = "watchfiles-0.22.0-cp310-none-win_amd64.whl", hash = "sha256:2627a91e8110b8de2406d8b2474427c86f5a62bf7d9ab3654f541f319ef22bcb"}, + {file = "watchfiles-0.22.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8c39987a1397a877217be1ac0fb1d8b9f662c6077b90ff3de2c05f235e6a8f96"}, + {file = "watchfiles-0.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a927b3034d0672f62fb2ef7ea3c9fc76d063c4b15ea852d1db2dc75fe2c09696"}, + {file = "watchfiles-0.22.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052d668a167e9fc345c24203b104c313c86654dd6c0feb4b8a6dfc2462239249"}, + {file = "watchfiles-0.22.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e45fb0d70dda1623a7045bd00c9e036e6f1f6a85e4ef2c8ae602b1dfadf7550"}, + {file = "watchfiles-0.22.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c49b76a78c156979759d759339fb62eb0549515acfe4fd18bb151cc07366629c"}, + {file = "watchfiles-0.22.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4a65474fd2b4c63e2c18ac67a0c6c66b82f4e73e2e4d940f837ed3d2fd9d4da"}, + {file = "watchfiles-0.22.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cc0cba54f47c660d9fa3218158b8963c517ed23bd9f45fe463f08262a4adae1"}, + {file = "watchfiles-0.22.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94ebe84a035993bb7668f58a0ebf998174fb723a39e4ef9fce95baabb42b787f"}, + {file = "watchfiles-0.22.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e0f0a874231e2839abbf473256efffe577d6ee2e3bfa5b540479e892e47c172d"}, + {file = "watchfiles-0.22.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:213792c2cd3150b903e6e7884d40660e0bcec4465e00563a5fc03f30ea9c166c"}, + {file = "watchfiles-0.22.0-cp311-none-win32.whl", hash = "sha256:b44b70850f0073b5fcc0b31ede8b4e736860d70e2dbf55701e05d3227a154a67"}, + {file = "watchfiles-0.22.0-cp311-none-win_amd64.whl", hash = "sha256:00f39592cdd124b4ec5ed0b1edfae091567c72c7da1487ae645426d1b0ffcad1"}, + {file = "watchfiles-0.22.0-cp311-none-win_arm64.whl", hash = "sha256:3218a6f908f6a276941422b035b511b6d0d8328edd89a53ae8c65be139073f84"}, + {file = "watchfiles-0.22.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:c7b978c384e29d6c7372209cbf421d82286a807bbcdeb315427687f8371c340a"}, + {file = "watchfiles-0.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd4c06100bce70a20c4b81e599e5886cf504c9532951df65ad1133e508bf20be"}, + {file = "watchfiles-0.22.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:425440e55cd735386ec7925f64d5dde392e69979d4c8459f6bb4e920210407f2"}, + {file = "watchfiles-0.22.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:68fe0c4d22332d7ce53ad094622b27e67440dacefbaedd29e0794d26e247280c"}, + {file = "watchfiles-0.22.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8a31bfd98f846c3c284ba694c6365620b637debdd36e46e1859c897123aa232"}, + {file = "watchfiles-0.22.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc2e8fe41f3cac0660197d95216c42910c2b7e9c70d48e6d84e22f577d106fc1"}, + {file = "watchfiles-0.22.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b7cc10261c2786c41d9207193a85c1db1b725cf87936df40972aab466179b6"}, + {file = "watchfiles-0.22.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28585744c931576e535860eaf3f2c0ec7deb68e3b9c5a85ca566d69d36d8dd27"}, + {file = "watchfiles-0.22.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:00095dd368f73f8f1c3a7982a9801190cc88a2f3582dd395b289294f8975172b"}, + {file = "watchfiles-0.22.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:52fc9b0dbf54d43301a19b236b4a4614e610605f95e8c3f0f65c3a456ffd7d35"}, + {file = "watchfiles-0.22.0-cp312-none-win32.whl", hash = "sha256:581f0a051ba7bafd03e17127735d92f4d286af941dacf94bcf823b101366249e"}, + {file = "watchfiles-0.22.0-cp312-none-win_amd64.whl", hash = "sha256:aec83c3ba24c723eac14225194b862af176d52292d271c98820199110e31141e"}, + {file = "watchfiles-0.22.0-cp312-none-win_arm64.whl", hash = "sha256:c668228833c5619f6618699a2c12be057711b0ea6396aeaece4ded94184304ea"}, + {file = "watchfiles-0.22.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d47e9ef1a94cc7a536039e46738e17cce058ac1593b2eccdede8bf72e45f372a"}, + {file = "watchfiles-0.22.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28f393c1194b6eaadcdd8f941307fc9bbd7eb567995232c830f6aef38e8a6e88"}, + {file = "watchfiles-0.22.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd64f3a4db121bc161644c9e10a9acdb836853155a108c2446db2f5ae1778c3d"}, + {file = "watchfiles-0.22.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2abeb79209630da981f8ebca30a2c84b4c3516a214451bfc5f106723c5f45843"}, + {file = "watchfiles-0.22.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4cc382083afba7918e32d5ef12321421ef43d685b9a67cc452a6e6e18920890e"}, + {file = "watchfiles-0.22.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d048ad5d25b363ba1d19f92dcf29023988524bee6f9d952130b316c5802069cb"}, + {file = "watchfiles-0.22.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:103622865599f8082f03af4214eaff90e2426edff5e8522c8f9e93dc17caee13"}, + {file = "watchfiles-0.22.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3e1f3cf81f1f823e7874ae563457828e940d75573c8fbf0ee66818c8b6a9099"}, + {file = "watchfiles-0.22.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8597b6f9dc410bdafc8bb362dac1cbc9b4684a8310e16b1ff5eee8725d13dcd6"}, + {file = "watchfiles-0.22.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0b04a2cbc30e110303baa6d3ddce8ca3664bc3403be0f0ad513d1843a41c97d1"}, + {file = "watchfiles-0.22.0-cp38-none-win32.whl", hash = "sha256:b610fb5e27825b570554d01cec427b6620ce9bd21ff8ab775fc3a32f28bba63e"}, + {file = "watchfiles-0.22.0-cp38-none-win_amd64.whl", hash = "sha256:fe82d13461418ca5e5a808a9e40f79c1879351fcaeddbede094028e74d836e86"}, + {file = "watchfiles-0.22.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3973145235a38f73c61474d56ad6199124e7488822f3a4fc97c72009751ae3b0"}, + {file = "watchfiles-0.22.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:280a4afbc607cdfc9571b9904b03a478fc9f08bbeec382d648181c695648202f"}, + {file = "watchfiles-0.22.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a0d883351a34c01bd53cfa75cd0292e3f7e268bacf2f9e33af4ecede7e21d1d"}, + {file = "watchfiles-0.22.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9165bcab15f2b6d90eedc5c20a7f8a03156b3773e5fb06a790b54ccecdb73385"}, + {file = "watchfiles-0.22.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc1b9b56f051209be458b87edb6856a449ad3f803315d87b2da4c93b43a6fe72"}, + {file = "watchfiles-0.22.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dc1fc25a1dedf2dd952909c8e5cb210791e5f2d9bc5e0e8ebc28dd42fed7562"}, + {file = "watchfiles-0.22.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dc92d2d2706d2b862ce0568b24987eba51e17e14b79a1abcd2edc39e48e743c8"}, + {file = "watchfiles-0.22.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97b94e14b88409c58cdf4a8eaf0e67dfd3ece7e9ce7140ea6ff48b0407a593ec"}, + {file = "watchfiles-0.22.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:96eec15e5ea7c0b6eb5bfffe990fc7c6bd833acf7e26704eb18387fb2f5fd087"}, + {file = "watchfiles-0.22.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:28324d6b28bcb8d7c1041648d7b63be07a16db5510bea923fc80b91a2a6cbed6"}, + {file = "watchfiles-0.22.0-cp39-none-win32.whl", hash = "sha256:8c3e3675e6e39dc59b8fe5c914a19d30029e36e9f99468dddffd432d8a7b1c93"}, + {file = "watchfiles-0.22.0-cp39-none-win_amd64.whl", hash = "sha256:25c817ff2a86bc3de3ed2df1703e3d24ce03479b27bb4527c57e722f8554d971"}, + {file = "watchfiles-0.22.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b810a2c7878cbdecca12feae2c2ae8af59bea016a78bc353c184fa1e09f76b68"}, + {file = "watchfiles-0.22.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f7e1f9c5d1160d03b93fc4b68a0aeb82fe25563e12fbcdc8507f8434ab6f823c"}, + {file = "watchfiles-0.22.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:030bc4e68d14bcad2294ff68c1ed87215fbd9a10d9dea74e7cfe8a17869785ab"}, + {file = "watchfiles-0.22.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace7d060432acde5532e26863e897ee684780337afb775107c0a90ae8dbccfd2"}, + {file = "watchfiles-0.22.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5834e1f8b71476a26df97d121c0c0ed3549d869124ed2433e02491553cb468c2"}, + {file = "watchfiles-0.22.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:0bc3b2f93a140df6806c8467c7f51ed5e55a931b031b5c2d7ff6132292e803d6"}, + {file = "watchfiles-0.22.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fdebb655bb1ba0122402352b0a4254812717a017d2dc49372a1d47e24073795"}, + {file = "watchfiles-0.22.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c8e0aa0e8cc2a43561e0184c0513e291ca891db13a269d8d47cb9841ced7c71"}, + {file = "watchfiles-0.22.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2f350cbaa4bb812314af5dab0eb8d538481e2e2279472890864547f3fe2281ed"}, + {file = "watchfiles-0.22.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7a74436c415843af2a769b36bf043b6ccbc0f8d784814ba3d42fc961cdb0a9dc"}, + {file = "watchfiles-0.22.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00ad0bcd399503a84cc688590cdffbe7a991691314dde5b57b3ed50a41319a31"}, + {file = "watchfiles-0.22.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72a44e9481afc7a5ee3291b09c419abab93b7e9c306c9ef9108cb76728ca58d2"}, + {file = "watchfiles-0.22.0.tar.gz", hash = "sha256:988e981aaab4f3955209e7e28c7794acdb690be1efa7f16f8ea5aba7ffdadacb"}, +] + +[package.dependencies] +anyio = ">=3.0.0" + [[package]] name = "wcwidth" version = "0.2.13" @@ -4441,13 +4578,13 @@ files = [ [[package]] name = "werkzeug" -version = "3.0.2" +version = "3.0.3" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.8" files = [ - {file = "werkzeug-3.0.2-py3-none-any.whl", hash = "sha256:3aac3f5da756f93030740bc235d3e09449efcf65f2f55e3602e1d851b8f48795"}, - {file = "werkzeug-3.0.2.tar.gz", hash = "sha256:e39b645a6ac92822588e7b39a692e7828724ceae0b0d702ef96701f90e70128d"}, + {file = "werkzeug-3.0.3-py3-none-any.whl", hash = "sha256:fc9645dc43e03e4d630d23143a04a7f947a9a3b5727cd535fdfe155a17cc48c8"}, + {file = "werkzeug-3.0.3.tar.gz", hash = "sha256:097e5bfda9f0aba8da6b8545146def481d06aa7d3266e7448e2cccf67dd8bd18"}, ] [package.dependencies] @@ -4752,62 +4889,62 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.18.1" +version = "3.19.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, - {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, + {file = "zipp-3.19.0-py3-none-any.whl", hash = "sha256:96dc6ad62f1441bcaccef23b274ec471518daf4fbbc580341204936a5a3dddec"}, + {file = "zipp-3.19.0.tar.gz", hash = "sha256:952df858fb3164426c976d9338d3961e8e8b3758e2e059e0f754b8c4262625ee"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [[package]] name = "zope-interface" -version = "6.3" +version = "6.4.post2" description = "Interfaces for Python" optional = false python-versions = ">=3.7" files = [ - {file = "zope.interface-6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f32010ffb87759c6a3ad1c65ed4d2e38e51f6b430a1ca11cee901ec2b42e021"}, - {file = "zope.interface-6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e78a183a3c2f555c2ad6aaa1ab572d1c435ba42f1dc3a7e8c82982306a19b785"}, - {file = "zope.interface-6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa0491a9f154cf8519a02026dc85a416192f4cb1efbbf32db4a173ba28b289a"}, - {file = "zope.interface-6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e32f02b3f26204d9c02c3539c802afc3eefb19d601a0987836ed126efb1f21"}, - {file = "zope.interface-6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c40df4aea777be321b7e68facb901bc67317e94b65d9ab20fb96e0eb3c0b60a1"}, - {file = "zope.interface-6.3-cp310-cp310-win_amd64.whl", hash = "sha256:46034be614d1f75f06e7dcfefba21d609b16b38c21fc912b01a99cb29e58febb"}, - {file = "zope.interface-6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:600101f43a7582d5b9504a7c629a1185a849ce65e60fca0f6968dfc4b76b6d39"}, - {file = "zope.interface-6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4d6b229f5e1a6375f206455cc0a63a8e502ed190fe7eb15e94a312dc69d40299"}, - {file = "zope.interface-6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10cde8dc6b2fd6a1d0b5ca4be820063e46ddba417ab82bcf55afe2227337b130"}, - {file = "zope.interface-6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40aa8c8e964d47d713b226c5baf5f13cdf3a3169c7a2653163b17ff2e2334d10"}, - {file = "zope.interface-6.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d165d7774d558ea971cb867739fb334faf68fc4756a784e689e11efa3becd59e"}, - {file = "zope.interface-6.3-cp311-cp311-win_amd64.whl", hash = "sha256:69dedb790530c7ca5345899a1b4cb837cc53ba669051ea51e8c18f82f9389061"}, - {file = "zope.interface-6.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8d407e0fd8015f6d5dfad481309638e1968d70e6644e0753f229154667dd6cd5"}, - {file = "zope.interface-6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:72d5efecad16c619a97744a4f0b67ce1bcc88115aa82fcf1dc5be9bb403bcc0b"}, - {file = "zope.interface-6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:567d54c06306f9c5b6826190628d66753b9f2b0422f4c02d7c6d2b97ebf0a24e"}, - {file = "zope.interface-6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:483e118b1e075f1819b3c6ace082b9d7d3a6a5eb14b2b375f1b80a0868117920"}, - {file = "zope.interface-6.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb78c12c1ad3a20c0d981a043d133299117b6854f2e14893b156979ed4e1d2c"}, - {file = "zope.interface-6.3-cp312-cp312-win_amd64.whl", hash = "sha256:ad4524289d8dbd6fb5aa17aedb18f5643e7d48358f42c007a5ee51a2afc2a7c5"}, - {file = "zope.interface-6.3-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:a56fe1261230093bfeedc1c1a6cd6f3ec568f9b07f031c9a09f46b201f793a85"}, - {file = "zope.interface-6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:014bb94fe6bf1786da1aa044eadf65bc6437bcb81c451592987e5be91e70a91e"}, - {file = "zope.interface-6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22e8a218e8e2d87d4d9342aa973b7915297a08efbebea5b25900c73e78ed468e"}, - {file = "zope.interface-6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f95bebd0afe86b2adc074df29edb6848fc4d474ff24075e2c263d698774e108d"}, - {file = "zope.interface-6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:d0e7321557c702bd92dac3c66a2f22b963155fdb4600133b6b29597f62b71b12"}, - {file = "zope.interface-6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:187f7900b63845dcdef1be320a523dbbdba94d89cae570edc2781eb55f8c2f86"}, - {file = "zope.interface-6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a058e6cf8d68a5a19cb5449f42a404f0d6c2778b897e6ce8fadda9cea308b1b0"}, - {file = "zope.interface-6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8fa0fb05083a1a4216b4b881fdefa71c5d9a106e9b094cd4399af6b52873e91"}, - {file = "zope.interface-6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:26c9a37fb395a703e39b11b00b9e921c48f82b6e32cc5851ad5d0618cd8876b5"}, - {file = "zope.interface-6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b0c4c90e5eefca2c3e045d9f9ed9f1e2cdbe70eb906bff6b247e17119ad89a1"}, - {file = "zope.interface-6.3-cp38-cp38-win_amd64.whl", hash = "sha256:5683aa8f2639016fd2b421df44301f10820e28a9b96382a6e438e5c6427253af"}, - {file = "zope.interface-6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c3cfb272bcb83650e6695d49ae0d14dd06dc694789a3d929f23758557a23d92"}, - {file = "zope.interface-6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:01a0b3dd012f584afcf03ed814bce0fc40ed10e47396578621509ac031be98bf"}, - {file = "zope.interface-6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4137025731e824eee8d263b20682b28a0bdc0508de9c11d6c6be54163e5b7c83"}, - {file = "zope.interface-6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c8731596198198746f7ce2a4487a0edcbc9ea5e5918f0ab23c4859bce56055c"}, - {file = "zope.interface-6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf34840e102d1d0b2d39b1465918d90b312b1119552cebb61a242c42079817b9"}, - {file = "zope.interface-6.3-cp39-cp39-win_amd64.whl", hash = "sha256:a1adc14a2a9d5e95f76df625a9b39f4709267a483962a572e3f3001ef90ea6e6"}, - {file = "zope.interface-6.3.tar.gz", hash = "sha256:f83d6b4b22262d9a826c3bd4b2fbfafe1d0000f085ef8e44cd1328eea274ae6a"}, + {file = "zope.interface-6.4.post2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2eccd5bef45883802848f821d940367c1d0ad588de71e5cabe3813175444202c"}, + {file = "zope.interface-6.4.post2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:762e616199f6319bb98e7f4f27d254c84c5fb1c25c908c2a9d0f92b92fb27530"}, + {file = "zope.interface-6.4.post2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ef8356f16b1a83609f7a992a6e33d792bb5eff2370712c9eaae0d02e1924341"}, + {file = "zope.interface-6.4.post2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e4fa5d34d7973e6b0efa46fe4405090f3b406f64b6290facbb19dcbf642ad6b"}, + {file = "zope.interface-6.4.post2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d22fce0b0f5715cdac082e35a9e735a1752dc8585f005d045abb1a7c20e197f9"}, + {file = "zope.interface-6.4.post2-cp310-cp310-win_amd64.whl", hash = "sha256:97e615eab34bd8477c3f34197a17ce08c648d38467489359cb9eb7394f1083f7"}, + {file = "zope.interface-6.4.post2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:599f3b07bde2627e163ce484d5497a54a0a8437779362395c6b25e68c6590ede"}, + {file = "zope.interface-6.4.post2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:136cacdde1a2c5e5bc3d0b2a1beed733f97e2dad8c2ad3c2e17116f6590a3827"}, + {file = "zope.interface-6.4.post2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47937cf2e7ed4e0e37f7851c76edeb8543ec9b0eae149b36ecd26176ff1ca874"}, + {file = "zope.interface-6.4.post2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f0a6be264afb094975b5ef55c911379d6989caa87c4e558814ec4f5125cfa2e"}, + {file = "zope.interface-6.4.post2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47654177e675bafdf4e4738ce58cdc5c6d6ee2157ac0a78a3fa460942b9d64a8"}, + {file = "zope.interface-6.4.post2-cp311-cp311-win_amd64.whl", hash = "sha256:e2fb8e8158306567a3a9a41670c1ff99d0567d7fc96fa93b7abf8b519a46b250"}, + {file = "zope.interface-6.4.post2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b912750b13d76af8aac45ddf4679535def304b2a48a07989ec736508d0bbfbde"}, + {file = "zope.interface-6.4.post2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4ac46298e0143d91e4644a27a769d1388d5d89e82ee0cf37bf2b0b001b9712a4"}, + {file = "zope.interface-6.4.post2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86a94af4a88110ed4bb8961f5ac72edf782958e665d5bfceaab6bf388420a78b"}, + {file = "zope.interface-6.4.post2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:73f9752cf3596771c7726f7eea5b9e634ad47c6d863043589a1c3bb31325c7eb"}, + {file = "zope.interface-6.4.post2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00b5c3e9744dcdc9e84c24ed6646d5cf0cf66551347b310b3ffd70f056535854"}, + {file = "zope.interface-6.4.post2-cp312-cp312-win_amd64.whl", hash = "sha256:551db2fe892fcbefb38f6f81ffa62de11090c8119fd4e66a60f3adff70751ec7"}, + {file = "zope.interface-6.4.post2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96ac6b3169940a8cd57b4f2b8edcad8f5213b60efcd197d59fbe52f0accd66e"}, + {file = "zope.interface-6.4.post2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cebff2fe5dc82cb22122e4e1225e00a4a506b1a16fafa911142ee124febf2c9e"}, + {file = "zope.interface-6.4.post2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33ee982237cffaf946db365c3a6ebaa37855d8e3ca5800f6f48890209c1cfefc"}, + {file = "zope.interface-6.4.post2-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:fbf649bc77510ef2521cf797700b96167bb77838c40780da7ea3edd8b78044d1"}, + {file = "zope.interface-6.4.post2-cp37-cp37m-win_amd64.whl", hash = "sha256:4c0b208a5d6c81434bdfa0f06d9b667e5de15af84d8cae5723c3a33ba6611b82"}, + {file = "zope.interface-6.4.post2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d3fe667935e9562407c2511570dca14604a654988a13d8725667e95161d92e9b"}, + {file = "zope.interface-6.4.post2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a96e6d4074db29b152222c34d7eec2e2db2f92638d2b2b2c704f9e8db3ae0edc"}, + {file = "zope.interface-6.4.post2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:866a0f583be79f0def667a5d2c60b7b4cc68f0c0a470f227e1122691b443c934"}, + {file = "zope.interface-6.4.post2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fe919027f29b12f7a2562ba0daf3e045cb388f844e022552a5674fcdf5d21f1"}, + {file = "zope.interface-6.4.post2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e0343a6e06d94f6b6ac52fbc75269b41dd3c57066541a6c76517f69fe67cb43"}, + {file = "zope.interface-6.4.post2-cp38-cp38-win_amd64.whl", hash = "sha256:dabb70a6e3d9c22df50e08dc55b14ca2a99da95a2d941954255ac76fd6982bc5"}, + {file = "zope.interface-6.4.post2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:706efc19f9679a1b425d6fa2b4bc770d976d0984335eaea0869bd32f627591d2"}, + {file = "zope.interface-6.4.post2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3d136e5b8821073e1a09dde3eb076ea9988e7010c54ffe4d39701adf0c303438"}, + {file = "zope.interface-6.4.post2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1730c93a38b5a18d24549bc81613223962a19d457cfda9bdc66e542f475a36f4"}, + {file = "zope.interface-6.4.post2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc2676312cc3468a25aac001ec727168994ea3b69b48914944a44c6a0b251e79"}, + {file = "zope.interface-6.4.post2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a62fd6cd518693568e23e02f41816adedfca637f26716837681c90b36af3671"}, + {file = "zope.interface-6.4.post2-cp39-cp39-win_amd64.whl", hash = "sha256:d3f7e001328bd6466b3414215f66dde3c7c13d8025a9c160a75d7b2687090d15"}, + {file = "zope.interface-6.4.post2.tar.gz", hash = "sha256:1c207e6f6dfd5749a26f5a5fd966602d6b824ec00d2df84a7e9a924e8933654e"}, ] [package.dependencies] @@ -4840,4 +4977,4 @@ starlite = ["starlite"] [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "3adcc49a22af2f096570400d4a9e8687423f8fad1014a234e8e5668f6059ac31" +content-hash = "a2474ada3f0efde97f74d21d05fc1b062de033f9fbf8ba6ba194015813c2f27a" diff --git a/pyproject.toml b/pyproject.toml index c1e917b251..3a94faf889 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -98,12 +98,11 @@ types-toml = "^0.10.8" types-typed-ast = "^1.5.8" types-ujson = "^5.6.0" types-protobuf = "^4.23.0.1" -mypy = "1.9.0" -pytest-mypy-plugins = "3.0.0" poetry-plugin-export = "^1.6.0" # another bug in poetry urllib3 = "<2" graphlib_backport = {version = "*", python = "<3.9", optional = false} +inline-snapshot = "^0.10.1" [tool.poetry.group.integrations] optional = true @@ -149,7 +148,7 @@ pyinstrument = ["pyinstrument"] strawberry = "strawberry.cli:run" [tool.pytest.ini_options] -addopts = "--emoji --mypy-ini-file=mypy.ini" +addopts = "--emoji" DJANGO_SETTINGS_MODULE = "tests.django.django_settings" testpaths = ["tests/"] markers = [ diff --git a/strawberry/extensions/base_extension.py b/strawberry/extensions/base_extension.py index 51da9f1a89..60ff64dfcd 100644 --- a/strawberry/extensions/base_extension.py +++ b/strawberry/extensions/base_extension.py @@ -24,27 +24,27 @@ class SchemaExtension: def __init__(self, *, execution_context: ExecutionContext) -> None: self.execution_context = execution_context - def on_operation( + def on_operation( # type: ignore self, - ) -> AsyncIteratorOrIterator[None]: # pragma: no cover # pyright: ignore + ) -> AsyncIteratorOrIterator[None]: # pragma: no cover """Called before and after a GraphQL operation (query / mutation) starts""" yield None - def on_validate( + def on_validate( # type: ignore self, - ) -> AsyncIteratorOrIterator[None]: # pragma: no cover # pyright: ignore + ) -> AsyncIteratorOrIterator[None]: # pragma: no cover """Called before and after the validation step""" yield None - def on_parse( + def on_parse( # type: ignore self, - ) -> AsyncIteratorOrIterator[None]: # pragma: no cover # pyright: ignore + ) -> AsyncIteratorOrIterator[None]: # pragma: no cover """Called before and after the parsing step""" yield None - def on_execute( + def on_execute( # type: ignore self, - ) -> AsyncIteratorOrIterator[None]: # pragma: no cover # pyright: ignore + ) -> AsyncIteratorOrIterator[None]: # pragma: no cover """Called before and after the execution step""" yield None diff --git a/strawberry/field.py b/strawberry/field.py index 0a11512b54..7af8b8c586 100644 --- a/strawberry/field.py +++ b/strawberry/field.py @@ -46,15 +46,20 @@ T = TypeVar("T") -_RESOLVER_TYPE = Union[ +_RESOLVER_TYPE_SYNC = Union[ StrawberryResolver[T], Callable[..., T], - Callable[..., Coroutine[Any, Any, T]], - Callable[..., Awaitable[T]], "staticmethod[Any, T]", "classmethod[Any, Any, T]", ] +_RESOLVER_TYPE_ASYNC = Union[ + Callable[..., Coroutine[Any, Any, T]], + Callable[..., Awaitable[T]], +] + +_RESOLVER_TYPE = Union[_RESOLVER_TYPE_SYNC[T], _RESOLVER_TYPE_ASYNC[T]] + UNRESOLVED = object() @@ -416,10 +421,33 @@ def is_async(self) -> bool: return self._has_async_base_resolver +# NOTE: we are separating the sync and async resolvers because using both +# in the same function will cause mypy to raise an error. Not sure if it is a bug + + +@overload +def field( + *, + resolver: _RESOLVER_TYPE_ASYNC[T], + name: Optional[str] = None, + is_subscription: bool = False, + description: Optional[str] = None, + init: Literal[False] = False, + permission_classes: Optional[List[Type[BasePermission]]] = None, + deprecation_reason: Optional[str] = None, + default: Any = dataclasses.MISSING, + default_factory: Union[Callable[..., object], object] = dataclasses.MISSING, + metadata: Optional[Mapping[Any, Any]] = None, + directives: Optional[Sequence[object]] = (), + extensions: Optional[List[FieldExtension]] = None, + graphql_type: Optional[Any] = None, +) -> T: ... + + @overload def field( *, - resolver: _RESOLVER_TYPE[T], + resolver: _RESOLVER_TYPE_SYNC[T], name: Optional[str] = None, is_subscription: bool = False, description: Optional[str] = None, @@ -455,7 +483,25 @@ def field( @overload def field( - resolver: _RESOLVER_TYPE[T], + resolver: _RESOLVER_TYPE_ASYNC[T], + *, + name: Optional[str] = None, + is_subscription: bool = False, + description: Optional[str] = None, + permission_classes: Optional[List[Type[BasePermission]]] = None, + deprecation_reason: Optional[str] = None, + default: Any = dataclasses.MISSING, + default_factory: Union[Callable[..., object], object] = dataclasses.MISSING, + metadata: Optional[Mapping[Any, Any]] = None, + directives: Optional[Sequence[object]] = (), + extensions: Optional[List[FieldExtension]] = None, + graphql_type: Optional[Any] = None, +) -> StrawberryField: ... + + +@overload +def field( + resolver: _RESOLVER_TYPE_SYNC[T], *, name: Optional[str] = None, is_subscription: bool = False, diff --git a/tests/mypy/enums.py b/tests/mypy/enums.py deleted file mode 100644 index 5a3f2c8a32..0000000000 --- a/tests/mypy/enums.py +++ /dev/null @@ -1,7 +0,0 @@ -from enum import Enum - - -class IceCreamFlavour(Enum): - VANILLA = "vanilla" - STRAWBERRY = "strawberry" - CHOCOLATE = "chocolate" diff --git a/tests/mypy/federation/test_decorators.yml b/tests/mypy/federation/test_decorators.yml deleted file mode 100644 index ec4218b893..0000000000 --- a/tests/mypy/federation/test_decorators.yml +++ /dev/null @@ -1,38 +0,0 @@ -- case: test_type - main: | - import strawberry - - @strawberry.federation.type - class User: - name: str - - User(name="Patrick") - User(n="Patrick") - out: | - main:8: error: Unexpected keyword argument "n" for "User" [call-arg] - -- case: test_input - main: | - import strawberry - - @strawberry.federation.input - class EditUserInput: - name: str - - EditUserInput(name="Patrick") - EditUserInput(n="Patrick") - out: | - main:8: error: Unexpected keyword argument "n" for "EditUserInput" [call-arg] - -- case: test_interface - main: | - import strawberry - - @strawberry.federation.interface - class NameInterface: - name: str - - NameInterface(name="Patrick") - NameInterface(n="Patrick") - out: | - main:8: error: Unexpected keyword argument "n" for "NameInterface" [call-arg] diff --git a/tests/mypy/federation/test_fields.yml b/tests/mypy/federation/test_fields.yml deleted file mode 100644 index 03c5ca87ed..0000000000 --- a/tests/mypy/federation/test_fields.yml +++ /dev/null @@ -1,114 +0,0 @@ -- case: test_field - main: | - import strawberry - - @strawberry.federation.type - class User: - name: str = strawberry.federation.field(description="Example") - - User(name="Patrick") - User(n="Patrick") - out: | - main:8: error: Unexpected keyword argument "n" for "User" [call-arg] - -- case: test_all_field_usage - main: | - import strawberry - - def some_resolver() -> str: - return "" - - def some_resolver_2(root: "Example") -> str: - return "" - - @strawberry.type - class Example: - a: str - b: str = strawberry.federation.field(name="b") - c: str = strawberry.federation.field(name="c", resolver=some_resolver) - d: str = strawberry.federation.field(resolver=some_resolver_2) - - @strawberry.federation.field(description="ABC") - def e(self, info: strawberry.Info) -> str: - return "" - - @strawberry.federation.field(name="f") - def f_resolver(self, info) -> str: - return "" - - reveal_type(Example.a) - reveal_type(Example.b) - reveal_type(Example.c) - reveal_type(Example.d) - reveal_type(Example.e) - reveal_type(Example.f_resolver) - out: | - main:24: note: Revealed type is "builtins.str" - main:25: note: Revealed type is "builtins.str" - main:26: note: Revealed type is "builtins.str" - main:27: note: Revealed type is "builtins.str" - main:28: note: Revealed type is "Any" - main:29: note: Revealed type is "Any" - -- case: test_private_field - main: | - import strawberry - - @strawberry.type - class User: - age: strawberry.Private[int] - - @strawberry.field - def age_in_months(self) -> int: - return self.age * 12 - - @strawberry.field - def wrong_type(self) -> int: - reveal_type(self.age) - return self.age.trim() - out: | - main:13: note: Revealed type is "builtins.int" - main:14: error: "int" has no attribute "trim" [attr-defined] - -- case: test_field_with_default_before_non_default - main: | - import strawberry - - @strawberry.type - class Example: - a: str = "ABC" - b: str - - out: | - -- case: test_using_strawberry_field_does_not_break - main: | - import strawberry - - @strawberry.type - class Example: - a: str = strawberry.federation.field(description="Example") - b: str - - reveal_type(Example.a) - out: | - main:8: note: Revealed type is "builtins.str" - -- case: test_does_not_put_fields_with_resolver_in_init - main: | - import strawberry - - def resolver() -> str: - return "hi" - - @strawberry.type - class Example: - a: str = strawberry.federation.field(description="Example") - b: str = strawberry.federation.field(resolver=resolver) - c: str - - i = Example(a="a", c="c") - - reveal_type(i.a) - out: | - main:14: note: Revealed type is "builtins.str" diff --git a/tests/mypy/test_create_type.yml b/tests/mypy/test_create_type.yml deleted file mode 100644 index 38be8a7bc3..0000000000 --- a/tests/mypy/test_create_type.yml +++ /dev/null @@ -1,32 +0,0 @@ -- case: test_create_type - main: | - import strawberry - from strawberry.tools import create_type - - @strawberry.field - def name() -> str: - return "foo" - - MyType = create_type("MyType", [name]) - - reveal_type(MyType) - out: | - main:10: note: Revealed type is "Any" - -- case: test_can_extend - main: | - import strawberry - from strawberry.tools import create_type - - @strawberry.field - def name() -> str: - return "foo" - - MyType = create_type("MyType", [name]) - - class Query(MyType): - ... - - reveal_type(Query) - out: | - main:13: note: Revealed type is "def (*_args: Any, **_kwds: Any) -> main.Query" diff --git a/tests/mypy/test_dataloaders.yml b/tests/mypy/test_dataloaders.yml deleted file mode 100644 index aa70ab5ffb..0000000000 --- a/tests/mypy/test_dataloaders.yml +++ /dev/null @@ -1,81 +0,0 @@ -- case: test_dataloader_no_types - main: | - from strawberry.dataloader import DataLoader - - def load(keys): - return keys - - loader = DataLoader(load) - - reveal_type(loader) - - async def run() -> None: - user = await loader.load(1) - - reveal_type(user) - out: | - main:8: note: Revealed type is "strawberry.dataloader.DataLoader[Any, Any]" - main:13: note: Revealed type is "Any" - -- case: test_dataloader - main: | - from typing import List - - from strawberry.dataloader import DataLoader - - async def load(keys: List[int]) -> List[str]: - return [str(k) for k in keys] - - loader = DataLoader(load) - - reveal_type(loader) - - async def run() -> None: - user = await loader.load(1) - - reveal_type(user) - out: | - main:10: note: Revealed type is "strawberry.dataloader.DataLoader[builtins.int, builtins.str]" - main:15: note: Revealed type is "builtins.str" - -- case: test_dataloader_exception - main: | - from typing import List, Union - - from strawberry.dataloader import DataLoader - - async def load(keys: List[int]) -> List[Union[str, ValueError, TypeError]]: - return [ValueError("x") for k in keys] - - loader = DataLoader(load) - - reveal_type(loader) - - async def run() -> None: - user = await loader.load(1) - - reveal_type(user) - out: | - main:10: note: Revealed type is "strawberry.dataloader.DataLoader[builtins.int, builtins.str]" - main:15: note: Revealed type is "builtins.str" - -- case: test_dataloader_optional - main: | - from typing import List, Optional - - from strawberry.dataloader import DataLoader - - async def load(keys: List[int]) -> List[Optional[str]]: - return [None for k in keys] - - loader = DataLoader(load) - - reveal_type(loader) - - async def run() -> None: - user = await loader.load(1) - - reveal_type(user) - out: | - main:10: note: Revealed type is "strawberry.dataloader.DataLoader[builtins.int, Union[builtins.str, None]]" - main:15: note: Revealed type is "Union[builtins.str, None]" diff --git a/tests/mypy/test_decorators.yml b/tests/mypy/test_decorators.yml deleted file mode 100644 index 37fccc8bbb..0000000000 --- a/tests/mypy/test_decorators.yml +++ /dev/null @@ -1,38 +0,0 @@ -- case: test_type - main: | - import strawberry - - @strawberry.type - class User: - name: str - - User(name="Patrick") - User(n="Patrick") - out: | - main:8: error: Unexpected keyword argument "n" for "User" [call-arg] - -- case: test_input - main: | - import strawberry - - @strawberry.input - class EditUserInput: - name: str - - EditUserInput(name="Patrick") - EditUserInput(n="Patrick") - out: | - main:8: error: Unexpected keyword argument "n" for "EditUserInput" [call-arg] - -- case: test_interface - main: | - import strawberry - - @strawberry.interface - class NameInterface: - name: str - - NameInterface(name="Patrick") - NameInterface(n="Patrick") - out: | - main:8: error: Unexpected keyword argument "n" for "NameInterface" [call-arg] diff --git a/tests/mypy/test_directives.yml b/tests/mypy/test_directives.yml deleted file mode 100644 index 26a0421168..0000000000 --- a/tests/mypy/test_directives.yml +++ /dev/null @@ -1,20 +0,0 @@ -- case: test_directive_decorator - main: | - import strawberry - from strawberry.directive import DirectiveLocation - - @strawberry.directive( - locations=[DirectiveLocation.FRAGMENT_DEFINITION], - description="description.", - ) - def make_int(value: str) -> int: - """description.""" - try: - return int(value) - except ValueError: - return 0 - - reveal_type(make_int) - - out: | - main:15: note: Revealed type is "strawberry.directive.StrawberryDirective[builtins.int]" diff --git a/tests/mypy/test_enum.yml b/tests/mypy/test_enum.yml deleted file mode 100644 index 46f585ce4c..0000000000 --- a/tests/mypy/test_enum.yml +++ /dev/null @@ -1,157 +0,0 @@ -- case: test_enum - main: | - from enum import Enum - - import strawberry - - class IceCreamFlavour(Enum): - VANILLA = "vanilla" - STRAWBERRY = "strawberry" - CHOCOLATE = "chocolate" - - Flavour = strawberry.enum(IceCreamFlavour) - - a: Flavour - reveal_type(Flavour) - reveal_type(a) - out: | - main:13: note: Revealed type is "def (value: builtins.object) -> main.IceCreamFlavour" - main:14: note: Revealed type is "main.IceCreamFlavour" - -- case: test_enum_from_var - main: | - from typing import Type - from enum import Enum - - import strawberry - - def get_enum() -> Type[Enum]: - class I(Enum): - VANILLA = "vanilla" - STRAWBERRY = "strawberry" - CHOCOLATE = "chocolate" - - return I - - IceCreamFlavour = get_enum() - - Flavour = strawberry.enum(IceCreamFlavour) - - a: Flavour - reveal_type(Flavour) - reveal_type(a) - out: | - main:19: note: Revealed type is "Any" - main:20: note: Revealed type is "Any" - -- case: test_enum_from_cast - main: | - from enum import Enum - from typing import Type, cast - - import strawberry - - class IceCreamFlavour(Enum): - VANILLA = "vanilla" - STRAWBERRY = "strawberry" - CHOCOLATE = "chocolate" - - Flavour = strawberry.enum(cast(Type[Enum], IceCreamFlavour)) - - a: Flavour - reveal_type(Flavour) - reveal_type(a) - out: | - main:14: note: Revealed type is "typing._SpecialForm" - main:15: note: Revealed type is "Type[enum.Enum]" - -- case: test_enum_with_decorator - main: | - from enum import Enum - - import strawberry - - @strawberry.enum - class IceCreamFlavour(Enum): - VANILLA = "vanilla" - STRAWBERRY = "strawberry" - CHOCOLATE = "chocolate" - - a: IceCreamFlavour - reveal_type(IceCreamFlavour) - reveal_type(a) - reveal_type(IceCreamFlavour.VANILLA) - out: | - main:12: note: Revealed type is "def (value: builtins.object) -> main.IceCreamFlavour" - main:13: note: Revealed type is "main.IceCreamFlavour" - main:14: note: Revealed type is "Literal[main.IceCreamFlavour.VANILLA]?" -- case: test_enum_with_decorator_and_name - main: | - from enum import Enum - - import strawberry - - @strawberry.enum(name="IceCreamFlavour") - class Flavour(Enum): - VANILLA = "vanilla" - STRAWBERRY = "strawberry" - CHOCOLATE = "chocolate" - - a: Flavour - reveal_type(Flavour) - reveal_type(a) - reveal_type(Flavour.VANILLA) - out: | - main:12: note: Revealed type is "def (value: builtins.object) -> main.Flavour" - main:13: note: Revealed type is "main.Flavour" - main:14: note: Revealed type is "Literal[main.Flavour.VANILLA]?" -- case: test_enum_with_manual_decorator - main: | - from enum import Enum - - import strawberry - - class IceCreamFlavour(Enum): - VANILLA = "vanilla" - STRAWBERRY = "strawberry" - CHOCOLATE = "chocolate" - - reveal_type(strawberry.enum(IceCreamFlavour)) - reveal_type(strawberry.enum(IceCreamFlavour).VANILLA) - out: | - main:10: note: Revealed type is "def (value: builtins.object) -> main.IceCreamFlavour" - main:11: note: Revealed type is "Literal[main.IceCreamFlavour.VANILLA]?" -- case: test_enum_with_manual_decorator_and_name - main: | - from enum import Enum - - import strawberry - - class Flavour(Enum): - VANILLA = "vanilla" - STRAWBERRY = "strawberry" - CHOCOLATE = "chocolate" - - reveal_type(strawberry.enum(name="IceCreamFlavour")(Flavour)) - reveal_type(strawberry.enum(name="IceCreamFlavour")(Flavour).VANILLA) - out: | - main:10: note: Revealed type is "def (value: builtins.object) -> main.Flavour" - main:11: note: Revealed type is "Literal[main.Flavour.VANILLA]?" -- case: test_enum_with_deprecation_reason - main: | - from enum import Enum - - import strawberry - - class Flavour(Enum): - VANILLA = strawberry.enum_value("vanilla") - STRAWBERRY = strawberry.enum_value( - "strawberry", deprecation_reason="We ran out" - ) - CHOCOLATE = "chocolate" - - reveal_type(strawberry.enum(name="IceCreamFlavour")(Flavour)) - reveal_type(strawberry.enum(name="IceCreamFlavour")(Flavour).STRAWBERRY) - out: | - main:12: note: Revealed type is "def (value: builtins.object) -> main.Flavour" - main:13: note: Revealed type is "Literal[main.Flavour.STRAWBERRY]?" diff --git a/tests/mypy/test_fields.yml b/tests/mypy/test_fields.yml deleted file mode 100644 index ead70b0bf7..0000000000 --- a/tests/mypy/test_fields.yml +++ /dev/null @@ -1,158 +0,0 @@ -- case: test_field - main: | - import strawberry - - @strawberry.type - class User: - name: str = strawberry.field(description="Example") - - User(name="Patrick") - User(n="Patrick") - out: | - main:8: error: Unexpected keyword argument "n" for "User" [call-arg] - -- case: test_all_field_usage - main: | - import strawberry - - def some_resolver() -> str: - return "" - - @strawberry.type - class Example: - a: str - b: str = strawberry.field(name="b") - c: str = strawberry.field(name="c", resolver=some_resolver) - d: str = strawberry.field(resolver=some_resolver) - - @strawberry.field(description="ABC") - def e(self, info: strawberry.Info) -> str: - return "" - - @strawberry.field(name="f") - def f_resolver(self, info) -> str: - return "" - - reveal_type(Example.a) - reveal_type(Example.b) - reveal_type(Example.c) - reveal_type(Example.d) - reveal_type(Example.e) - reveal_type(Example.f_resolver) - out: | - main:21: note: Revealed type is "builtins.str" - main:22: note: Revealed type is "builtins.str" - main:23: note: Revealed type is "builtins.str" - main:24: note: Revealed type is "builtins.str" - main:25: note: Revealed type is "Any" - main:26: note: Revealed type is "Any" - -- case: test_private_field - main: | - import strawberry - - @strawberry.type - class User: - age: strawberry.Private[int] - - @strawberry.field - def age_in_months(self) -> int: - return self.age * 12 - - @strawberry.field - def wrong_type(self) -> int: - reveal_type(self.age) - return self.age.trim() - out: | - main:13: note: Revealed type is "builtins.int" - main:14: error: "int" has no attribute "trim" [attr-defined] - -- case: test_field_with_default_before_non_default - main: | - import strawberry - - @strawberry.type - class Example: - a: str = "ABC" - b: str - - out: | - -- case: test_using_strawberry_field_does_not_break - main: | - import strawberry - - @strawberry.type - class Example: - a: str = strawberry.field(description="Example") - b: str - - reveal_type(Example.a) - out: | - main:8: note: Revealed type is "builtins.str" - -- case: test_does_not_put_fields_with_resolver_in_init - main: | - import strawberry - - def resolver() -> str: - return "hi" - - @strawberry.type - class Example: - a: str = strawberry.field(description="Example") - b: str = strawberry.field(resolver=resolver) - c: str - - i = Example(a="a", c="c") - - reveal_type(i.a) - out: | - main:14: note: Revealed type is "builtins.str" - -- case: test_does_not_put_fields_with_async_resolver_in_init - main: | - import strawberry - - async def resolver() -> str: - return "hi" - - @strawberry.type - class Example: - a: str = strawberry.field(description="Example") - b: str = strawberry.field(resolver=resolver) - c: str - - i = Example(a="a", c="c") - - reveal_type(i.a) - out: | - main:14: note: Revealed type is "builtins.str" - -- case: test_mismatched_annotations_sync_resolver - main: | - import strawberry - - def some_resolver() -> int: - return 0 - - @strawberry.type - class User: - name: str = strawberry.field(resolver=some_resolver) - - out: | - main:8: error: Incompatible types in assignment (expression has type "int", variable has type "str") [assignment] - -- case: test_mismatched_annotations_async_resolver - main: | - import strawberry - - async def some_resolver() -> int: - return 0 - - @strawberry.type - class User: - name: str = strawberry.field(resolver=some_resolver) - - out: | - main:8: error: Incompatible types in assignment (expression has type "int", variable has type "str") [assignment] diff --git a/tests/mypy/test_info.yml b/tests/mypy/test_info.yml deleted file mode 100644 index bed8a7d806..0000000000 --- a/tests/mypy/test_info.yml +++ /dev/null @@ -1,35 +0,0 @@ -- case: test_info_with_params - main: | - import strawberry - - info: strawberry.Info[None, None] - - reveal_type(info.context) - reveal_type(info.root_value) - out: | - main:5: note: Revealed type is "None" - main:6: note: Revealed type is "None" - -- case: test_info_with_one_param - main: | - import strawberry - - info: strawberry.Info[None] - - reveal_type(info.context) - reveal_type(info.root_value) - out: | - main:5: note: Revealed type is "None" - main:6: note: Revealed type is "Any" - -- case: test_info_without_params - main: | - import strawberry - - info: strawberry.Info - - reveal_type(info.context) - reveal_type(info.root_value) - out: | - main:5: note: Revealed type is "Any" - main:6: note: Revealed type is "Any" diff --git a/tests/mypy/test_merge_types.yml b/tests/mypy/test_merge_types.yml deleted file mode 100644 index 406385cf99..0000000000 --- a/tests/mypy/test_merge_types.yml +++ /dev/null @@ -1,18 +0,0 @@ -- case: test_merge_types - main: | - import strawberry - from strawberry.tools import merge_types - - @strawberry.type - class QueryA: - field1: str - - @strawberry.type - class QueryB: - field2: int - - Query = merge_types("AwesomeQuery", (QueryA, QueryB)) - - reveal_type(Query) - out: | - main:14: note: Revealed type is "builtins.type" diff --git a/tests/mypy/test_mutation.yml b/tests/mypy/test_mutation.yml deleted file mode 100644 index 5e5bc4a618..0000000000 --- a/tests/mypy/test_mutation.yml +++ /dev/null @@ -1,31 +0,0 @@ -- case: test_mutation_decorator - main: | - import strawberry - - @strawberry.type - class Mutation: - @strawberry.mutation - def set_name(self, name: str) -> None: - self.name = name - - Mutation() - Mutation(n="Patrick") - out: | - main:10: error: Unexpected keyword argument "n" for "Mutation" [call-arg] - - -- case: test_mutation_field - main: | - import strawberry - - def set_name(self, name: str) -> None: - self.name = name - - @strawberry.type - class Mutation: - set_name: None = strawberry.mutation(resolver=set_name) - - Mutation() - Mutation(n="Patrick") - out: | - main:11: error: Unexpected keyword argument "n" for "Mutation" [call-arg] diff --git a/tests/mypy/test_plugin.py b/tests/mypy/test_plugin.py deleted file mode 100644 index ee4850b398..0000000000 --- a/tests/mypy/test_plugin.py +++ /dev/null @@ -1,42 +0,0 @@ -from decimal import Decimal -from typing import Generator - -import pytest - -from strawberry.ext.mypy_plugin import FALLBACK_VERSION, MypyVersion, plugin - -pytestmark = pytest.mark.usefixtures("maintain_version") - - -@pytest.fixture -def maintain_version() -> Generator[None, None, None]: - """Clean-up side-effected version after tests""" - - yield - - del MypyVersion.VERSION - - -@pytest.mark.parametrize( - ("version", "expected"), - [ - ("0.93", Decimal("0.93")), - ("0.800", Decimal("0.800")), - ("0.920", Decimal("0.920")), - ("0.980+dev.d89b28d973c3036ef154c9551b961d9119761380", Decimal("0.980")), - ("1.0.0", Decimal("1.0")), - ("1.0.1", Decimal("1.0")), - ("1.1.1", Decimal("1.1")), - ("99.999", Decimal("99.999")), - ], -) -def test_plugin(version, expected): - plugin(version) - assert expected == MypyVersion.VERSION - - -def test_plugin_negative(): - invalid_version = "001.290" - with pytest.warns(UserWarning, match=f"Mypy version {invalid_version} could not"): - plugin(invalid_version) - assert MypyVersion.VERSION == FALLBACK_VERSION diff --git a/tests/mypy/test_pydantic.decorators.yml b/tests/mypy/test_pydantic.decorators.yml deleted file mode 100644 index b527ce64af..0000000000 --- a/tests/mypy/test_pydantic.decorators.yml +++ /dev/null @@ -1,301 +0,0 @@ - -- case: test_converted_pydantic_init_any_kwargs - main: | - from pydantic import BaseModel - import strawberry - - class UserPydantic(BaseModel): - age: int - - @strawberry.experimental.pydantic.type(UserPydantic) - class UserStrawberry: - age: strawberry.auto - - reveal_type(UserStrawberry) - reveal_type(UserStrawberry(age=123)) - out: | - main:11: note: Revealed type is "def (**kwargs: Any) -> main.UserStrawberry" - main:12: note: Revealed type is "main.UserStrawberry" - -- case: test_converted_to_pydantic - main: | - from pydantic import BaseModel - import strawberry - - class UserPydantic(BaseModel): - age: int - - @strawberry.experimental.pydantic.type(UserPydantic) - class UserStrawberry: - age: strawberry.auto - - reveal_type(UserStrawberry(age=123).to_pydantic()) - out: | - main:11: note: Revealed type is "main.UserPydantic" - -- case: test_converted_from_pydantic - main: | - from pydantic import BaseModel - import strawberry - - class UserPydantic(BaseModel): - age: int - - @strawberry.experimental.pydantic.type(UserPydantic) - class UserStrawberry: - age: strawberry.auto - - reveal_type(UserStrawberry.from_pydantic(UserPydantic(age=123))) - out: | - main:11: note: Revealed type is "main.UserStrawberry" - -- case: test_converted_to_pydantic_input - main: | - from pydantic import BaseModel - import strawberry - - class UserPydantic(BaseModel): - age: int - - @strawberry.experimental.pydantic.input(UserPydantic) - class UserStrawberry: - age: strawberry.auto - - reveal_type(UserStrawberry(age=123).to_pydantic()) - out: | - main:11: note: Revealed type is "main.UserPydantic" - -- case: test_converted_from_pydantic_input - main: | - from pydantic import BaseModel - import strawberry - - class UserPydantic(BaseModel): - age: int - - @strawberry.experimental.pydantic.input(UserPydantic) - class UserStrawberry: - age: strawberry.auto - - reveal_type(UserStrawberry.from_pydantic(UserPydantic(age=123))) - out: | - main:11: note: Revealed type is "main.UserStrawberry" -- case: test_converted_from_pydantic_with_extra - main: | - from pydantic import BaseModel - import strawberry - - class UserPydantic(BaseModel): - age: int - - @strawberry.experimental.pydantic.input(UserPydantic) - class UserStrawberry: - age: strawberry.auto - extra_field: int - - UserStrawberry.from_pydantic(UserPydantic(age=123), extra={'extra_field': 2}) - out: | -- case: test_converted_to_pydantic_interface - main: | - from pydantic import BaseModel - import strawberry - - class UserPydantic(BaseModel): - age: int - - @strawberry.experimental.pydantic.interface(UserPydantic) - class UserStrawberry: - age: strawberry.auto - - reveal_type(UserStrawberry(age=123).to_pydantic()) - out: | - main:11: note: Revealed type is "main.UserPydantic" - -- case: test_converted_from_pydantic_interface - main: | - from pydantic import BaseModel - import strawberry - - class UserPydantic(BaseModel): - age: int - - @strawberry.experimental.pydantic.interface(UserPydantic) - class UserStrawberry: - age: strawberry.auto - - reveal_type(UserStrawberry.from_pydantic(UserPydantic(age=123))) - out: | - main:11: note: Revealed type is "main.UserStrawberry" - -- case: test_converted_from_pydantic_raise_error_wrong_instance - main: | - from pydantic import BaseModel - import strawberry - - class UserPydantic(BaseModel): - age: int - - @strawberry.experimental.pydantic.type(UserPydantic) - class UserStrawberry: - age: strawberry.auto - - class AnotherModel(BaseModel): - age: int - - UserStrawberry.from_pydantic(AnotherModel(age=123)) - out: | - main:14: error: Argument 1 to "from_pydantic" of "UserStrawberry" has incompatible type "AnotherModel"; expected "UserPydantic" [arg-type] - -- case: test_converted_from_pydantic_chained - main: | - from pydantic import BaseModel - import strawberry - - class UserPydantic(BaseModel): - age: int - - @strawberry.experimental.pydantic.type(UserPydantic) - class UserStrawberry: - age: strawberry.auto - - reveal_type(UserStrawberry.from_pydantic(UserPydantic(age=123)).to_pydantic()) - out: | - main:11: note: Revealed type is "main.UserPydantic" - -- case: test_to_pydantic_kwargs - main: | - from pydantic import BaseModel - import strawberry - - - class MyModel(BaseModel): - email: str - password: str - - - @strawberry.experimental.pydantic.input(model=MyModel) - class MyModelStrawberry: - email: strawberry.auto - - - MyModelStrawberry(email="").to_pydantic() - out: | - main:15: error: Missing named argument "password" for "to_pydantic" of "MyModelStrawberry" [call-arg] -- case: test_to_pydantic_kwargs_with_defaults - main: | - from pydantic import BaseModel - import strawberry - - - class MyModel(BaseModel): - email: str - password: str = "hunter2" - - - @strawberry.experimental.pydantic.input(model=MyModel) - class MyModelStrawberry: - email: strawberry.auto - - - MyModelStrawberry(email="").to_pydantic() - out: | -- case: test_to_pydantic_kwargs_with_default_none - main: | - from pydantic import BaseModel - from typing import Optional - import strawberry - - - class MyModel(BaseModel): - email: str - password: Optional[str] = None - - - @strawberry.experimental.pydantic.input(model=MyModel) - class MyModelStrawberry: - email: strawberry.auto - - - MyModelStrawberry(email="").to_pydantic() - out: | -- case: test_to_pydantic_kwargs_with_all_fields - main: | - from pydantic import BaseModel - from typing import Optional - import strawberry - - - class MyModel(BaseModel): - email: str - password: Optional[str] - - - @strawberry.experimental.pydantic.input(model=MyModel, all_fields=True) - class MyModelStrawberry: - ... - - - MyModelStrawberry(email="").to_pydantic() - out: | -- case: test_to_pydantic_kwargs_with_all_fields_adding_field - main: | - from pydantic import BaseModel - from typing import Optional - import strawberry - - - class MyModel(BaseModel): - email: str - password: Optional[str] - - @property - def age(self) -> int: - return 42 - - - @strawberry.experimental.pydantic.input(model=MyModel, all_fields=True) - class MyModelStrawberry: - age: int # read from the property - - - MyModelStrawberry(email="").to_pydantic() - out: | -- case: test_to_pydantic_kwargs_private_field - main: | - from pydantic import BaseModel - from typing import Optional - import strawberry - - - class MyModel(BaseModel): - email: str - _age: int # for pydantic, underscore means private field - - - @strawberry.experimental.pydantic.input(model=MyModel) - class MyModelStrawberry: - email: strawberry.auto - - - MyModelStrawberry(email="").to_pydantic() - out: | -- case: test_to_pydantic_custom - main: | - from pydantic import BaseModel - import strawberry - - class MyModel(BaseModel): - email: str - - @strawberry.experimental.pydantic.input(model=MyModel) - class MyModelStrawberry: - email: strawberry.auto - - def to_pydantic(self, another_param: str): - # custom to_pydantic overwrites default params - ... - - MyModelStrawberry(email="").to_pydantic() - - out: | - main:15: error: Missing positional argument "another_param" in call to "to_pydantic" of "MyModelStrawberry" [call-arg] diff --git a/tests/mypy/test_pydantic.yml b/tests/mypy/test_pydantic.yml deleted file mode 100644 index 622ac47e67..0000000000 --- a/tests/mypy/test_pydantic.yml +++ /dev/null @@ -1,15 +0,0 @@ -- case: test_type - main: | - import strawberry - import pydantic - - class UserModel(pydantic.BaseModel): - name: str - - @strawberry.experimental.pydantic.type(model=UserModel, fields=["name"]) - class User: - pass - - User(n="Patrick") - User(name="Patrick") - out: | diff --git a/tests/mypy/test_scalar.yml b/tests/mypy/test_scalar.yml deleted file mode 100644 index 440ef3a336..0000000000 --- a/tests/mypy/test_scalar.yml +++ /dev/null @@ -1,93 +0,0 @@ -- case: test_scalar_decorator - main: | - import strawberry - - @strawberry.scalar() - class X: - pass - - @strawberry.scalar - class Y: - pass - - @strawberry.scalar(name="Zed") - class Z: - pass - - @strawberry.type - class Me: - z: Z - - reveal_type(X) - reveal_type(Y) - reveal_type(Z) - reveal_type(X()) - reveal_type(Y()) - reveal_type(Z()) - reveal_type(Me(z=Z()).z) - out: | - main:19: note: Revealed type is "def () -> main.X" - main:20: note: Revealed type is "def () -> main.Y" - main:21: note: Revealed type is "def () -> main.Z" - main:22: note: Revealed type is "main.X" - main:23: note: Revealed type is "main.Y" - main:24: note: Revealed type is "main.Z" - main:25: note: Revealed type is "main.Z" - -- case: test_scalar_as_function - main: | - import strawberry - - X = strawberry.scalar(int) - Y = strawberry.scalar(str, name="Y") - - @strawberry.type - class Me: - x: X - - reveal_type(X()) - reveal_type(Y()) - reveal_type(Me(x=X("1")).x) - out: | - main:10: note: Revealed type is "builtins.int" - main:11: note: Revealed type is "builtins.str" - main:12: note: Revealed type is "builtins.int" - -- case: test_scalar_as_function_new_type - main: | - from typing import NewType - import strawberry - - Z = strawberry.scalar(NewType("X", int)) - - @strawberry.type - class Me: - x: Z - - reveal_type(Z()) - reveal_type(Me(x=Z("1")).x) - out: | - main:10: note: Revealed type is "Any" - main:11: note: Revealed type is "Any" - -- case: test_we_can_pass_scalar_overrides_to_schema - main: | - import strawberry - from datetime import datetime, timezone - - EpochDateTime = strawberry.scalar( - datetime, - ) - - @strawberry.type - class Query: - a: datetime - - schema = strawberry.Schema(query=Query, scalar_overrides={ - datetime: EpochDateTime, - }) - - reveal_type(EpochDateTime) - - out: | - main:16: note: Revealed type is "def (year: typing.SupportsIndex, month: typing.SupportsIndex, day: typing.SupportsIndex, hour: typing.SupportsIndex =, minute: typing.SupportsIndex =, second: typing.SupportsIndex =, microsecond: typing.SupportsIndex =, tzinfo: Union[datetime.tzinfo, None] =, *, fold: builtins.int =) -> datetime.datetime" diff --git a/tests/mypy/test_schema.yml b/tests/mypy/test_schema.yml deleted file mode 100644 index eeeddaf8b2..0000000000 --- a/tests/mypy/test_schema.yml +++ /dev/null @@ -1,14 +0,0 @@ -- case: test_passing_extensions - main: | - import strawberry - from strawberry.extensions import ParserCache - - @strawberry.type - class Query: - b: str - - schema = strawberry.Schema(Query, extensions=[ParserCache()]) - - reveal_type(schema) - out: | - main:10: note: Revealed type is "strawberry.schema.schema.Schema" diff --git a/tests/mypy/test_union.yml b/tests/mypy/test_union.yml deleted file mode 100644 index 9168292282..0000000000 --- a/tests/mypy/test_union.yml +++ /dev/null @@ -1,83 +0,0 @@ -- case: test_union - main: | - from typing_extensions import Annotated - from typing import Union - - import strawberry - - @strawberry.type - class User: - name: str - - @strawberry.type - class Error: - message: str - - Response = Annotated[Union[User, Error], strawberry.union(name="Response")] - - a: Response - reveal_type(Response) - reveal_type(a) - - a = User(name="abc") - reveal_type(a) - out: | - main:17: note: Revealed type is "typing._SpecialForm" - main:18: note: Revealed type is "Union[main.User, main.Error]" - main:21: note: Revealed type is "main.User" - -- case: test_union_generics - main: | - from typing import Generic, TypeVar - from typing_extensions import Annotated - from typing import Union - - import strawberry - - T = TypeVar("T") - - @strawberry.type - class Error: - message: str - - @strawberry.type - class Edge(Generic[T]): - node: T - - Result = Annotated[Union[Error, Edge[str]], strawberry.union("Result")] - - reveal_type(Result) - - a: Result - reveal_type(a) - out: | - main:19: note: Revealed type is "typing._SpecialForm" - main:22: note: Revealed type is "Union[main.Error, main.Edge[builtins.str]]" - -- case: test_union_kwargs - main: | - from typing_extensions import Annotated - from typing import Union - - import strawberry - - @strawberry.type - class User: - name: str - - @strawberry.type - class Error: - message: str - - Response = Annotated[Union[User, Error], strawberry.union("Response")] - - a: Response - reveal_type(Response) - reveal_type(a) - - a = User(name="abc") - reveal_type(a) - out: | - main:17: note: Revealed type is "typing._SpecialForm" - main:18: note: Revealed type is "Union[main.User, main.Error]" - main:21: note: Revealed type is "main.User" diff --git a/tests/mypy/test_unset.yml b/tests/mypy/test_unset.yml deleted file mode 100644 index b1ae0f28f3..0000000000 --- a/tests/mypy/test_unset.yml +++ /dev/null @@ -1,13 +0,0 @@ -- case: test_unset - main: | - import strawberry - from typing import Optional - from strawberry import UNSET - - @strawberry.type - class User: - name: Optional[str] = UNSET - - reveal_type(User().name) - out: | - main:9: note: Revealed type is "Union[builtins.str, None]" diff --git a/tests/pyright/test_auto.py b/tests/pyright/test_auto.py deleted file mode 100644 index 4ad54fa015..0000000000 --- a/tests/pyright/test_auto.py +++ /dev/null @@ -1,47 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - - -CODE = """ -import strawberry - - -@strawberry.type -class SomeType: - foobar: strawberry.auto - - -obj1 = SomeType(foobar=1) -obj2 = SomeType(foobar="some text") -obj3 = SomeType(foobar={"some key": "some value"}) - -reveal_type(obj1.foobar) -reveal_type(obj2.foobar) -reveal_type(obj3.foobar) -""" - - -def test_pyright(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="information", - message='Type of "obj1.foobar" is "Any"', - line=14, - column=13, - ), - Result( - type="information", - message='Type of "obj2.foobar" is "Any"', - line=15, - column=13, - ), - Result( - type="information", - message='Type of "obj3.foobar" is "Any"', - line=16, - column=13, - ), - ] diff --git a/tests/pyright/test_directives.py b/tests/pyright/test_directives.py deleted file mode 100644 index 28a76db9b0..0000000000 --- a/tests/pyright/test_directives.py +++ /dev/null @@ -1,34 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - - -CODE = """ -import strawberry -from strawberry.directive import DirectiveLocation - -@strawberry.directive( - locations=[DirectiveLocation.FRAGMENT_DEFINITION], - description="description.", -) -def make_int(value: str) -> int: - '''description.''' - try: - return int(value) - except ValueError: - return 0 - -reveal_type(make_int) -""" - - -def test_pyright(): - results = run_pyright(CODE) - assert results == [ - Result( - type="information", - message='Type of "make_int" is "StrawberryDirective[int]"', - line=16, - column=13, - ), - ] diff --git a/tests/pyright/test_enum.py b/tests/pyright/test_enum.py deleted file mode 100644 index 49a69c3d45..0000000000 --- a/tests/pyright/test_enum.py +++ /dev/null @@ -1,196 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - - -CODE_WITH_DECORATOR = """ -from enum import Enum - -import strawberry - -@strawberry.enum -class IceCreamFlavour(Enum): - VANILLA = "vanilla" - STRAWBERRY = "strawberry" - CHOCOLATE = "chocolate" - -reveal_type(IceCreamFlavour) -reveal_type(IceCreamFlavour.VANILLA) -""" - - -def test_enum_with_decorator(): - results = run_pyright(CODE_WITH_DECORATOR) - - assert results == [ - Result( - type="information", - message='Type of "IceCreamFlavour" is "type[IceCreamFlavour]"', - line=12, - column=13, - ), - Result( - type="information", - message=( - 'Type of "IceCreamFlavour.VANILLA" is ' - '"Literal[IceCreamFlavour.VANILLA]"' - ), - line=13, - column=13, - ), - ] - - -CODE_WITH_DECORATOR_AND_NAME = """ -from enum import Enum - -import strawberry - -@strawberry.enum(name="IceCreamFlavour") -class Flavour(Enum): - VANILLA = "vanilla" - STRAWBERRY = "strawberry" - CHOCOLATE = "chocolate" - -reveal_type(Flavour) -reveal_type(Flavour.VANILLA) -""" - - -def test_enum_with_decorator_and_name(): - results = run_pyright(CODE_WITH_DECORATOR_AND_NAME) - - assert results == [ - Result( - type="information", - message='Type of "Flavour" is "type[Flavour]"', - line=12, - column=13, - ), - Result( - type="information", - message='Type of "Flavour.VANILLA" is "Literal[Flavour.VANILLA]"', - line=13, - column=13, - ), - ] - - -CODE_WITH_MANUAL_DECORATOR = """ -from enum import Enum - -import strawberry - -class IceCreamFlavour(Enum): - VANILLA = "vanilla" - STRAWBERRY = "strawberry" - CHOCOLATE = "chocolate" - -reveal_type(strawberry.enum(IceCreamFlavour)) -reveal_type(strawberry.enum(IceCreamFlavour).VANILLA) -""" - - -def test_enum_with_manual_decorator(): - results = run_pyright(CODE_WITH_MANUAL_DECORATOR) - - assert results == [ - Result( - type="information", - message=( - 'Type of "strawberry.enum(IceCreamFlavour)" ' - 'is "type[IceCreamFlavour]"' - ), - line=11, - column=13, - ), - Result( - type="information", - message=( - 'Type of "strawberry.enum(IceCreamFlavour).VANILLA" ' - 'is "Literal[IceCreamFlavour.VANILLA]"' - ), - line=12, - column=13, - ), - ] - - -CODE_WITH_MANUAL_DECORATOR_AND_NAME = """ -from enum import Enum - -import strawberry - -class Flavour(Enum): - VANILLA = "vanilla" - STRAWBERRY = "strawberry" - CHOCOLATE = "chocolate" - -reveal_type(strawberry.enum(name="IceCreamFlavour")(Flavour)) -reveal_type(strawberry.enum(name="IceCreamFlavour")(Flavour).VANILLA) -""" - - -def test_enum_with_manual_decorator_and_name(): - results = run_pyright(CODE_WITH_MANUAL_DECORATOR_AND_NAME) - - assert results == [ - Result( - type="information", - message=( - 'Type of "strawberry.enum(name="IceCreamFlavour")(Flavour)" ' - 'is "type[Flavour]"' - ), - line=11, - column=13, - ), - Result( - type="information", - message=( - 'Type of "strawberry.enum(name="IceCreamFlavour")(Flavour).VANILLA" ' - 'is "Literal[Flavour.VANILLA]"' - ), - line=12, - column=13, - ), - ] - - -CODE_WITH_DEPRECATION_REASON = """ -from enum import Enum - -import strawberry - -@strawberry.enum -class IceCreamFlavour(Enum): - VANILLA = "vanilla" - STRAWBERRY = strawberry.enum_value( - "strawberry", deprecation_reason="We ran out" - ) - CHOCOLATE = "chocolate" - -reveal_type(IceCreamFlavour) -reveal_type(IceCreamFlavour.STRAWBERRY) -""" - - -def test_enum_deprecated(): - results = run_pyright(CODE_WITH_DEPRECATION_REASON) - - assert results == [ - Result( - type="information", - message='Type of "IceCreamFlavour" is "type[IceCreamFlavour]"', - line=14, - column=13, - ), - Result( - type="information", - message=( - 'Type of "IceCreamFlavour.STRAWBERRY" is ' - '"Literal[IceCreamFlavour.STRAWBERRY]"' - ), - line=15, - column=13, - ), - ] diff --git a/tests/pyright/test_federation.py b/tests/pyright/test_federation.py deleted file mode 100644 index 83040ecfce..0000000000 --- a/tests/pyright/test_federation.py +++ /dev/null @@ -1,147 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - - -CODE = """ -import strawberry - -def get_user_age() -> int: - return 0 - - -@strawberry.federation.type -class User: - name: str - age: int = strawberry.field(resolver=get_user_age) - something_else: int = strawberry.federation.field(resolver=get_user_age) - - -User(name="Patrick") -User(n="Patrick") - -reveal_type(User) -reveal_type(User.__init__) -""" - - -def test_federation_type(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="error", - message='Argument missing for parameter "name"', - line=16, - column=1, - ), - Result(type="error", message='No parameter named "n"', line=16, column=6), - Result( - type="information", - message='Type of "User" is "type[User]"', - line=18, - column=13, - ), - Result( - type="information", - message='Type of "User.__init__" is "(self: User, *, name: str) -> None"', - line=19, - column=13, - ), - ] - - -CODE_INTERFACE = """ -import strawberry - - -@strawberry.federation.interface -class User: - name: str - age: int - - -User(name="Patrick", age=1) -User(n="Patrick", age=1) - -reveal_type(User) -reveal_type(User.__init__) -""" - - -def test_federation_interface(): - results = run_pyright(CODE_INTERFACE) - - assert results == [ - Result( - type="error", - message='Argument missing for parameter "name"', - line=12, - column=1, - ), - Result( - type="error", - message='No parameter named "n"', - line=12, - column=6, - ), - Result( - type="information", - message='Type of "User" is "type[User]"', - line=14, - column=13, - ), - Result( - type="information", - message='Type of "User.__init__" is "(self: User, *, name: str, age: int) -> None"', - line=15, - column=13, - ), - ] - - -CODE_INPUT = """ -import strawberry - -@strawberry.federation.input -class User: - name: str - - -User(name="Patrick") -User(n="Patrick") - -reveal_type(User) -reveal_type(User.__init__) -""" - - -def test_federation_input(): - results = run_pyright(CODE_INPUT) - - assert results == [ - Result( - type="error", - message='Argument missing for parameter "name"', - line=10, - column=1, - ), - Result( - type="error", - message='No parameter named "n"', - line=10, - column=6, - ), - Result( - type="information", - message='Type of "User" is "type[User]"', - line=12, - column=13, - ), - Result( - type="information", - message='Type of "User.__init__" is "(self: User, *, name: str) -> None"', - line=13, - column=13, - ), - ] diff --git a/tests/pyright/test_federation_fields.py b/tests/pyright/test_federation_fields.py deleted file mode 100644 index 6981fdc849..0000000000 --- a/tests/pyright/test_federation_fields.py +++ /dev/null @@ -1,99 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - -CODE = """ -import strawberry - -def some_resolver(root: "User") -> str: - return "An address" - -def some_resolver_2() -> str: - return "Another address" - -@strawberry.federation.type -class User: - age: int = strawberry.federation.field(description="Age") - name: str - address: str = strawberry.federation.field(resolver=some_resolver) - another_address: str = strawberry.federation.field(resolver=some_resolver_2) - -@strawberry.federation.input -class UserInput: - age: int = strawberry.federation.field(description="Age") - name: str - - -User(name="Patrick", age=1) -User(n="Patrick", age=1) - -UserInput(name="Patrick", age=1) -UserInput(n="Patrick", age=1) - -reveal_type(User) -reveal_type(User.__init__) - -reveal_type(UserInput) -reveal_type(UserInput.__init__) -""" - - -def test_pyright(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="error", - message='Argument missing for parameter "name"', - line=24, - column=1, - ), - Result( - type="error", - message='No parameter named "n"', - line=24, - column=6, - ), - Result( - type="error", - message='Argument missing for parameter "name"', - line=27, - column=1, - ), - Result( - type="error", - message='No parameter named "n"', - line=27, - column=11, - ), - Result( - type="information", - message='Type of "User" is "type[User]"', - line=29, - column=13, - ), - Result( - type="information", - message=( - 'Type of "User.__init__" is "(self: User, *, age: int, name: str) ' - '-> None"' - ), - line=30, - column=13, - ), - Result( - type="information", - message='Type of "UserInput" is "type[UserInput]"', - line=32, - column=13, - ), - Result( - type="information", - message=( - 'Type of "UserInput.__init__" is "(self: UserInput, *, age: int, ' - 'name: str) -> None"' - ), - line=33, - column=13, - ), - ] diff --git a/tests/pyright/test_federation_params.py b/tests/pyright/test_federation_params.py deleted file mode 100644 index 69ae95d839..0000000000 --- a/tests/pyright/test_federation_params.py +++ /dev/null @@ -1,36 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - - -CODE = """ -import strawberry - - -@strawberry.federation.type(name="User") -class UserModel: - name: str - - -UserModel(name="Patrick") -UserModel(n="Patrick") -""" - - -def test_pyright(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="error", - message='Argument missing for parameter "name"', - line=11, - column=1, - ), - Result( - type="error", - message='No parameter named "n"', - line=11, - column=11, - ), - ] diff --git a/tests/pyright/test_fields.py b/tests/pyright/test_fields.py deleted file mode 100644 index 445a048a47..0000000000 --- a/tests/pyright/test_fields.py +++ /dev/null @@ -1,51 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - - -CODE = """ -import strawberry - - -@strawberry.type -class User: - name: str - - -User(name="Patrick") -User(n="Patrick") - -reveal_type(User) -reveal_type(User.__init__) -""" - - -def test_pyright(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="error", - message='Argument missing for parameter "name"', - line=11, - column=1, - ), - Result( - type="error", - message='No parameter named "n"', - line=11, - column=6, - ), - Result( - type="information", - message='Type of "User" is "type[User]"', - line=13, - column=13, - ), - Result( - type="information", - message='Type of "User.__init__" is "(self: User, *, name: str) -> None"', - line=14, - column=13, - ), - ] diff --git a/tests/pyright/test_fields_input.py b/tests/pyright/test_fields_input.py deleted file mode 100644 index 360ad6389b..0000000000 --- a/tests/pyright/test_fields_input.py +++ /dev/null @@ -1,50 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - -CODE = """ -import strawberry - - -@strawberry.input -class User: - name: str - - -User(name="Patrick") -User(n="Patrick") - -reveal_type(User) -reveal_type(User.__init__) -""" - - -def test_pyright(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="error", - message='Argument missing for parameter "name"', - line=11, - column=1, - ), - Result( - type="error", - message='No parameter named "n"', - line=11, - column=6, - ), - Result( - type="information", - message='Type of "User" is "type[User]"', - line=13, - column=13, - ), - Result( - type="information", - message='Type of "User.__init__" is "(self: User, *, name: str) -> None"', - line=14, - column=13, - ), - ] diff --git a/tests/pyright/test_fields_keyword.py b/tests/pyright/test_fields_keyword.py deleted file mode 100644 index b7e52f62d2..0000000000 --- a/tests/pyright/test_fields_keyword.py +++ /dev/null @@ -1,37 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - - -CODE = """ -import strawberry - - -@strawberry.type -class User: - name: str - - -User("Patrick") - -reveal_type(User.__init__) -""" - - -def test_pyright(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="error", - message="Expected 0 positional arguments", - line=10, - column=6, - ), - Result( - type="information", - message='Type of "User.__init__" is "(self: User, *, name: str) -> None"', - line=12, - column=13, - ), - ] diff --git a/tests/pyright/test_fields_resolver.py b/tests/pyright/test_fields_resolver.py deleted file mode 100644 index 0888b7cc2a..0000000000 --- a/tests/pyright/test_fields_resolver.py +++ /dev/null @@ -1,54 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - -CODE = """ -import strawberry - -def get_user_age() -> int: - return 0 - - -@strawberry.type -class User: - name: str - age: int = strawberry.field(resolver=get_user_age) - - -User(name="Patrick") -User(n="Patrick") - -reveal_type(User) -reveal_type(User.__init__) -""" - - -def test_pyright(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="error", - message='Argument missing for parameter "name"', - line=15, - column=1, - ), - Result( - type="error", - message='No parameter named "n"', - line=15, - column=6, - ), - Result( - type="information", - message='Type of "User" is "type[User]"', - line=17, - column=13, - ), - Result( - type="information", - message='Type of "User.__init__" is "(self: User, *, name: str) -> None"', - line=18, - column=13, - ), - ] diff --git a/tests/pyright/test_fields_resolver_async.py b/tests/pyright/test_fields_resolver_async.py deleted file mode 100644 index bb1bc7e96f..0000000000 --- a/tests/pyright/test_fields_resolver_async.py +++ /dev/null @@ -1,65 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - -CODE = """ -import strawberry - -async def get_user_age() -> int: - return 0 - - -@strawberry.type -class User: - name: str - age: int = strawberry.field(resolver=get_user_age) - something: str = strawberry.field(resolver=get_user_age) - - -User(name="Patrick") -User(n="Patrick") - -reveal_type(User) -reveal_type(User.__init__) -""" - - -def test_pyright(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="error", - message=( - 'Expression of type "StrawberryField" is incompatible with ' - 'declared type "str"\n' - '\xa0\xa0"StrawberryField" is incompatible with "str"' - ), - line=12, - column=22, - ), - Result( - type="error", - message='Argument missing for parameter "name"', - line=16, - column=1, - ), - Result( - type="error", - message='No parameter named "n"', - line=16, - column=6, - ), - Result( - type="information", - message='Type of "User" is "type[User]"', - line=18, - column=13, - ), - Result( - type="information", - message='Type of "User.__init__" is "(self: User, *, name: str) -> None"', - line=19, - column=13, - ), - ] diff --git a/tests/pyright/test_info.py b/tests/pyright/test_info.py deleted file mode 100644 index 21144f7dac..0000000000 --- a/tests/pyright/test_info.py +++ /dev/null @@ -1,84 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - - -def test_with_params(): - CODE = """ -import strawberry - -def example(info: strawberry.Info[None, None]) -> None: - reveal_type(info.context) - reveal_type(info.root_value) -""" - - results = run_pyright(CODE) - - assert results == [ - Result( - type="information", - message='Type of "info.context" is "None"', - line=5, - column=17, - ), - Result( - type="information", - message='Type of "info.root_value" is "None"', - line=6, - column=17, - ), - ] - - -def test_with_one_param(): - CODE = """ -import strawberry - -def example(info: strawberry.Info[None]) -> None: - reveal_type(info.context) - reveal_type(info.root_value) -""" - - results = run_pyright(CODE) - - assert results == [ - Result( - type="information", - message='Type of "info.context" is "None"', - line=5, - column=17, - ), - Result( - type="information", - message='Type of "info.root_value" is "Any"', - line=6, - column=17, - ), - ] - - -def test_without_params(): - CODE = """ -import strawberry - -def example(info: strawberry.Info) -> None: - reveal_type(info.context) - reveal_type(info.root_value) -""" - - results = run_pyright(CODE) - - assert results == [ - Result( - type="information", - message='Type of "info.context" is "Any"', - line=5, - column=17, - ), - Result( - type="information", - message='Type of "info.root_value" is "Any"', - line=6, - column=17, - ), - ] diff --git a/tests/pyright/test_interface.py b/tests/pyright/test_interface.py deleted file mode 100644 index 85981546c0..0000000000 --- a/tests/pyright/test_interface.py +++ /dev/null @@ -1,52 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - -CODE = """ -import strawberry - - -@strawberry.interface -class Node: - id: strawberry.ID - -reveal_type(Node) -""" - - -def test_pyright(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="information", - message='Type of "Node" is "type[Node]"', - line=9, - column=13, - ), - ] - - -CODE_2 = """ -import strawberry - - -@strawberry.interface(name="nodeinterface") -class Node: - id: strawberry.ID - -reveal_type(Node) -""" - - -def test_pyright_calling(): - results = run_pyright(CODE_2) - - assert results == [ - Result( - type="information", - message='Type of "Node" is "type[Node]"', - line=9, - column=13, - ), - ] diff --git a/tests/pyright/test_params.py b/tests/pyright/test_params.py deleted file mode 100644 index ec7e4aa495..0000000000 --- a/tests/pyright/test_params.py +++ /dev/null @@ -1,56 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - - -CODE = """ -import strawberry - - -@strawberry.type(name="User") -class UserModel: - name: str - - -@strawberry.input(name="User") -class UserInput: - name: str - - -UserModel(name="Patrick") -UserModel(n="Patrick") - -UserInput(name="Patrick") -UserInput(n="Patrick") -""" - - -def test_pyright(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="error", - message='Argument missing for parameter "name"', - line=16, - column=1, - ), - Result( - type="error", - message='No parameter named "n"', - line=16, - column=11, - ), - Result( - type="error", - message='Argument missing for parameter "name"', - line=19, - column=1, - ), - Result( - type="error", - message='No parameter named "n"', - line=19, - column=11, - ), - ] diff --git a/tests/pyright/test_private.py b/tests/pyright/test_private.py deleted file mode 100644 index ae228aadce..0000000000 --- a/tests/pyright/test_private.py +++ /dev/null @@ -1,52 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - - -CODE = """ -import strawberry - - -@strawberry.type -class User: - name: str - age: strawberry.Private[int] - - -patrick = User(name="Patrick", age=1) -User(n="Patrick") - -reveal_type(patrick.name) -reveal_type(patrick.age) -""" - - -def test_pyright(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="error", - message='Arguments missing for parameters "name", "age"', - line=12, - column=1, - ), - Result( - type="error", - message='No parameter named "n"', - line=12, - column=6, - ), - Result( - type="information", - message='Type of "patrick.name" is "str"', - line=14, - column=13, - ), - Result( - type="information", - message='Type of "patrick.age" is "int"', - line=15, - column=13, - ), - ] diff --git a/tests/pyright/test_relay.py b/tests/pyright/test_relay.py deleted file mode 100644 index a05cd2badb..0000000000 --- a/tests/pyright/test_relay.py +++ /dev/null @@ -1,243 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - - -CODE = """ -from typing import ( - Any, - AsyncIterator, - AsyncGenerator, - AsyncIterable, - Generator, - Iterable, - Iterator, - List, - Optional, - Union, -) - -import strawberry -from strawberry import relay -from typing_extensions import Self - - -@strawberry.type -class Fruit(relay.Node): - id: relay.NodeID[int] - name: str - color: str - - -@strawberry.type -class FruitCustomPaginationConnection(relay.Connection[Fruit]): - @strawberry.field - def something(self) -> str: - return "foobar" - - @classmethod - def resolve_connection( - cls, - nodes: Union[ - Iterator[Fruit], - AsyncIterator[Fruit], - Iterable[Fruit], - AsyncIterable[Fruit], - ], - *, - info: Optional[strawberry.Info] = None, - before: Optional[str] = None, - after: Optional[str] = None, - first: Optional[int] = None, - last: Optional[int] = None, - **kwargs: Any, - ) -> Self: - ... - - -class FruitAlike: - ... - - -def fruits_resolver() -> List[Fruit]: - ... - - -@strawberry.type -class Query: - node: relay.Node - nodes: List[relay.Node] - node_optional: Optional[relay.Node] - nodes_optional: List[Optional[relay.Node]] - fruits: relay.Connection[Fruit] = strawberry.relay.connection( - resolver=fruits_resolver, - ) - fruits_conn: relay.Connection[Fruit] = relay.connection( - resolver=fruits_resolver, - ) - fruits_custom_pagination: FruitCustomPaginationConnection - - @relay.connection(relay.Connection[Fruit]) - def fruits_custom_resolver( - self, - info: strawberry.Info, - name_endswith: Optional[str] = None, - ) -> List[Fruit]: - ... - - @relay.connection(relay.Connection[Fruit]) - def fruits_custom_resolver_iterator( - self, - info: strawberry.Info, - name_endswith: Optional[str] = None, - ) -> Iterator[Fruit]: - ... - - @relay.connection(relay.Connection[Fruit]) - def fruits_custom_resolver_iterable( - self, - info: strawberry.Info, - name_endswith: Optional[str] = None, - ) -> Iterable[Fruit]: - ... - - @relay.connection(relay.Connection[Fruit]) - def fruits_custom_resolver_generator( - self, - info: strawberry.Info, - name_endswith: Optional[str] = None, - ) -> Generator[Fruit, None, None]: - ... - - @relay.connection(relay.Connection[Fruit]) - async def fruits_custom_resolver_async_iterator( - self, - info: strawberry.Info, - name_endswith: Optional[str] = None, - ) -> AsyncIterator[Fruit]: - ... - - @relay.connection(relay.Connection[Fruit]) - async def fruits_custom_resolver_async_iterable( - self, - info: strawberry.Info, - name_endswith: Optional[str] = None, - ) -> AsyncIterable[Fruit]: - ... - - @relay.connection(relay.Connection[Fruit]) - async def fruits_custom_resolver_async_generator( - self, - info: strawberry.Info, - name_endswith: Optional[str] = None, - ) -> AsyncGenerator[Fruit, None]: - ... - -reveal_type(Query.node) -reveal_type(Query.nodes) -reveal_type(Query.node_optional) -reveal_type(Query.nodes_optional) -reveal_type(Query.fruits) -reveal_type(Query.fruits_conn) -reveal_type(Query.fruits_custom_pagination) -reveal_type(Query.fruits_custom_resolver) -reveal_type(Query.fruits_custom_resolver_iterator) -reveal_type(Query.fruits_custom_resolver_iterable) -reveal_type(Query.fruits_custom_resolver_generator) -reveal_type(Query.fruits_custom_resolver_async_iterator) -reveal_type(Query.fruits_custom_resolver_async_iterable) -reveal_type(Query.fruits_custom_resolver_async_generator) -""" - - -def test_pyright(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="information", - message='Type of "Query.node" is "Node"', - line=131, - column=13, - ), - Result( - type="information", - message='Type of "Query.nodes" is "List[Node]"', - line=132, - column=13, - ), - Result( - type="information", - message='Type of "Query.node_optional" is "Node | None"', - line=133, - column=13, - ), - Result( - type="information", - message='Type of "Query.nodes_optional" is "List[Node | None]"', - line=134, - column=13, - ), - Result( - type="information", - message='Type of "Query.fruits" is "Connection[Fruit]"', - line=135, - column=13, - ), - Result( - type="information", - message='Type of "Query.fruits_conn" is "Connection[Fruit]"', - line=136, - column=13, - ), - Result( - type="information", - message='Type of "Query.fruits_custom_pagination" is ' - '"FruitCustomPaginationConnection"', - line=137, - column=13, - ), - Result( - type="information", - message='Type of "Query.fruits_custom_resolver" is "Any"', - line=138, - column=13, - ), - Result( - type="information", - message='Type of "Query.fruits_custom_resolver_iterator" is "Any"', - line=139, - column=13, - ), - Result( - type="information", - message='Type of "Query.fruits_custom_resolver_iterable" is "Any"', - line=140, - column=13, - ), - Result( - type="information", - message='Type of "Query.fruits_custom_resolver_generator" is "Any"', - line=141, - column=13, - ), - Result( - type="information", - message='Type of "Query.fruits_custom_resolver_async_iterator" is ' '"Any"', - line=142, - column=13, - ), - Result( - type="information", - message='Type of "Query.fruits_custom_resolver_async_iterable" is ' '"Any"', - line=143, - column=13, - ), - Result( - type="information", - message='Type of "Query.fruits_custom_resolver_async_generator" is ' - '"Any"', - line=144, - column=13, - ), - ] diff --git a/tests/pyright/test_scalars.py b/tests/pyright/test_scalars.py deleted file mode 100644 index 5a86027ac6..0000000000 --- a/tests/pyright/test_scalars.py +++ /dev/null @@ -1,106 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - - -CODE = """ -import strawberry -from strawberry.scalars import ID, JSON, Base16, Base32, Base64 - - -@strawberry.type -class SomeType: - id: ID - json: JSON - base16: Base16 - base32: Base32 - base64: Base64 - - -obj = SomeType( - id=ID("123"), - json=JSON({"foo": "bar"}), - base16=Base16(b""), - base32=Base32(b""), - base64=Base64(b""), -) - -reveal_type(obj.id) -reveal_type(obj.json) -reveal_type(obj.base16) -reveal_type(obj.base16) -reveal_type(obj.base64) -""" - - -def test_pyright(): - results = run_pyright(CODE) - - # NOTE: This is also guaranteeing that those scalars could be used to annotate - # the attributes. Pyright 1.1.224+ doesn't allow non-types to be used there - assert results == [ - Result( - type="information", - message='Type of "obj.id" is "ID"', - line=23, - column=13, - ), - Result( - type="information", - message='Type of "obj.json" is "JSON"', - line=24, - column=13, - ), - Result( - type="information", - message='Type of "obj.base16" is "Base16"', - line=25, - column=13, - ), - Result( - type="information", - message='Type of "obj.base16" is "Base16"', - line=26, - column=13, - ), - Result( - type="information", - message='Type of "obj.base64" is "Base64"', - line=27, - column=13, - ), - ] - - -CODE_SCHEMA_OVERRIDES = """ -import strawberry -from datetime import datetime, timezone - -EpochDateTime = strawberry.scalar( - datetime, -) - -@strawberry.type -class Query: - a: datetime - -schema = strawberry.Schema(query=Query, scalar_overrides={ - datetime: EpochDateTime, -}) - -reveal_type(EpochDateTime) -""" - - -def test_schema_overrides(): - # TODO: change strict to true when we improve type hints for scalar - results = run_pyright(CODE_SCHEMA_OVERRIDES, strict=False) - - assert results == [ - Result( - type="information", - message='Type of "EpochDateTime" is "type[datetime]"', - line=16, - column=13, - ), - ] diff --git a/tests/pyright/test_type.py b/tests/pyright/test_type.py deleted file mode 100644 index 7e8d4e4b9f..0000000000 --- a/tests/pyright/test_type.py +++ /dev/null @@ -1,84 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - - -CODE = """ -import strawberry -from strawberry.type import StrawberryOptional, StrawberryList - - -@strawberry.type -class Fruit: - name: str - - -reveal_type(StrawberryOptional(Fruit)) -reveal_type(StrawberryList(Fruit)) -reveal_type(StrawberryOptional(StrawberryList(Fruit))) -reveal_type(StrawberryList(StrawberryOptional(Fruit))) - -reveal_type(StrawberryOptional(str)) -reveal_type(StrawberryList(str)) -reveal_type(StrawberryOptional(StrawberryList(str))) -reveal_type(StrawberryList(StrawberryOptional(str))) -""" - - -def test_pyright(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="information", - message='Type of "StrawberryOptional(Fruit)" is "StrawberryOptional"', - line=11, - column=13, - ), - Result( - type="information", - message='Type of "StrawberryList(Fruit)" is "StrawberryList"', - line=12, - column=13, - ), - Result( - type="information", - message='Type of "StrawberryOptional(StrawberryList(Fruit))" is ' - '"StrawberryOptional"', - line=13, - column=13, - ), - Result( - type="information", - message='Type of "StrawberryList(StrawberryOptional(Fruit))" is ' - '"StrawberryList"', - line=14, - column=13, - ), - Result( - type="information", - message='Type of "StrawberryOptional(str)" is "StrawberryOptional"', - line=16, - column=13, - ), - Result( - type="information", - message='Type of "StrawberryList(str)" is "StrawberryList"', - line=17, - column=13, - ), - Result( - type="information", - message='Type of "StrawberryOptional(StrawberryList(str))" is ' - '"StrawberryOptional"', - line=18, - column=13, - ), - Result( - type="information", - message='Type of "StrawberryList(StrawberryOptional(str))" is ' - '"StrawberryList"', - line=19, - column=13, - ), - ] diff --git a/tests/pyright/test_union.py b/tests/pyright/test_union.py deleted file mode 100644 index e208c5c5ad..0000000000 --- a/tests/pyright/test_union.py +++ /dev/null @@ -1,43 +0,0 @@ -from .utils import Result, requires_pyright, run_pyright, skip_on_windows - -pytestmark = [skip_on_windows, requires_pyright] - - -CODE = """ -import strawberry -from typing_extensions import TypeAlias, Annotated -from typing import Union - -@strawberry.type -class User: - name: str - - -@strawberry.type -class Error: - message: str - -UserOrError: TypeAlias = Annotated[ - Union[User, Error], strawberry.union("UserOrError") -] - -reveal_type(UserOrError) - -x: UserOrError = User(name="Patrick") - -reveal_type(x) -""" - - -def test_pyright(): - results = run_pyright(CODE) - - assert results == [ - Result( - type="information", - message='Type of "UserOrError" is "type[User] | type[Error]"', - line=19, - column=13, - ), - Result(type="information", message='Type of "x" is "User"', line=23, column=13), - ], f"Actual results:\n{results}" diff --git a/tests/pyright/__init__.py b/tests/typecheckers/__init__.py similarity index 100% rename from tests/pyright/__init__.py rename to tests/typecheckers/__init__.py diff --git a/tests/typecheckers/test_auto.py b/tests/typecheckers/test_auto.py new file mode 100644 index 0000000000..f42a5c207a --- /dev/null +++ b/tests/typecheckers/test_auto.py @@ -0,0 +1,60 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + + +CODE = """ +import strawberry + + +@strawberry.type +class SomeType: + foobar: strawberry.auto + + +obj1 = SomeType(foobar=1) +obj2 = SomeType(foobar="some text") +obj3 = SomeType(foobar={"some key": "some value"}) + +reveal_type(obj1.foobar) +reveal_type(obj2.foobar) +reveal_type(obj3.foobar) +""" + + +def test_auto(): + result = typecheck(CODE) + + assert result.pyright == snapshot( + [ + Result( + type="information", + message='Type of "obj1.foobar" is "Any"', + line=14, + column=13, + ), + Result( + type="information", + message='Type of "obj2.foobar" is "Any"', + line=15, + column=13, + ), + Result( + type="information", + message='Type of "obj3.foobar" is "Any"', + line=16, + column=13, + ), + ] + ) + + assert result.mypy == snapshot( + [ + Result(type="note", message='Revealed type is "Any"', line=14, column=13), + Result(type="note", message='Revealed type is "Any"', line=15, column=13), + Result(type="note", message='Revealed type is "Any"', line=16, column=13), + ] + ) diff --git a/tests/typecheckers/test_directives.py b/tests/typecheckers/test_directives.py new file mode 100644 index 0000000000..d7c47169f0 --- /dev/null +++ b/tests/typecheckers/test_directives.py @@ -0,0 +1,50 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + + +CODE = """ +import strawberry +from strawberry.directive import DirectiveLocation + +@strawberry.directive( + locations=[DirectiveLocation.FRAGMENT_DEFINITION], + description="description.", +) +def make_int(value: str) -> int: + '''description.''' + try: + return int(value) + except ValueError: + return 0 + +reveal_type(make_int) +""" + + +def test(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "make_int" is "StrawberryDirective[int]"', + line=16, + column=13, + ) + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="note", + message='Revealed type is "strawberry.directive.StrawberryDirective[builtins.int]"', + line=16, + column=13, + ) + ] + ) diff --git a/tests/typecheckers/test_enum.py b/tests/typecheckers/test_enum.py new file mode 100644 index 0000000000..0f77cf3f14 --- /dev/null +++ b/tests/typecheckers/test_enum.py @@ -0,0 +1,270 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + +CODE_WITH_DECORATOR = """ +from enum import Enum + +import strawberry + +@strawberry.enum +class IceCreamFlavour(Enum): + VANILLA = "vanilla" + STRAWBERRY = "strawberry" + CHOCOLATE = "chocolate" + +reveal_type(IceCreamFlavour) +reveal_type(IceCreamFlavour.VANILLA) +""" + + +def test_enum_with_decorator(): + results = typecheck(CODE_WITH_DECORATOR) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "IceCreamFlavour" is "type[IceCreamFlavour]"', + line=12, + column=13, + ), + Result( + type="information", + message='Type of "IceCreamFlavour.VANILLA" is "Literal[IceCreamFlavour.VANILLA]"', + line=13, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="note", + message='Revealed type is "def (value: builtins.object) -> mypy_test.IceCreamFlavour"', + line=12, + column=13, + ), + Result( + type="note", + message='Revealed type is "Literal[mypy_test.IceCreamFlavour.VANILLA]?"', + line=13, + column=13, + ), + ] + ) + + +CODE_WITH_DECORATOR_AND_NAME = """ +from enum import Enum + +import strawberry + +@strawberry.enum(name="IceCreamFlavour") +class Flavour(Enum): + VANILLA = "vanilla" + STRAWBERRY = "strawberry" + CHOCOLATE = "chocolate" + +reveal_type(Flavour) +reveal_type(Flavour.VANILLA) +""" + + +def test_enum_with_decorator_and_name(): + results = typecheck(CODE_WITH_DECORATOR_AND_NAME) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "Flavour" is "type[Flavour]"', + line=12, + column=13, + ), + Result( + type="information", + message='Type of "Flavour.VANILLA" is "Literal[Flavour.VANILLA]"', + line=13, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="note", + message='Revealed type is "def (value: builtins.object) -> mypy_test.Flavour"', + line=12, + column=13, + ), + Result( + type="note", + message='Revealed type is "Literal[mypy_test.Flavour.VANILLA]?"', + line=13, + column=13, + ), + ] + ) + + +CODE_WITH_MANUAL_DECORATOR = """ +from enum import Enum + +import strawberry + +class IceCreamFlavour(Enum): + VANILLA = "vanilla" + STRAWBERRY = "strawberry" + CHOCOLATE = "chocolate" + +reveal_type(strawberry.enum(IceCreamFlavour)) +reveal_type(strawberry.enum(IceCreamFlavour).VANILLA) +""" + + +def test_enum_with_manual_decorator(): + results = typecheck(CODE_WITH_MANUAL_DECORATOR) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "strawberry.enum(IceCreamFlavour)" is "type[IceCreamFlavour]"', + line=11, + column=13, + ), + Result( + type="information", + message='Type of "strawberry.enum(IceCreamFlavour).VANILLA" is "Literal[IceCreamFlavour.VANILLA]"', + line=12, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="note", + message='Revealed type is "def (value: builtins.object) -> mypy_test.IceCreamFlavour"', + line=11, + column=13, + ), + Result( + type="note", + message='Revealed type is "Literal[mypy_test.IceCreamFlavour.VANILLA]?"', + line=12, + column=13, + ), + ] + ) + + +CODE_WITH_MANUAL_DECORATOR_AND_NAME = """ +from enum import Enum + +import strawberry + +class Flavour(Enum): + VANILLA = "vanilla" + STRAWBERRY = "strawberry" + CHOCOLATE = "chocolate" + +reveal_type(strawberry.enum(name="IceCreamFlavour")(Flavour)) +reveal_type(strawberry.enum(name="IceCreamFlavour")(Flavour).VANILLA) +""" + + +def test_enum_with_manual_decorator_and_name(): + results = typecheck(CODE_WITH_MANUAL_DECORATOR_AND_NAME) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "strawberry.enum(name="IceCreamFlavour")(Flavour)" is "type[Flavour]"', + line=11, + column=13, + ), + Result( + type="information", + message='Type of "strawberry.enum(name="IceCreamFlavour")(Flavour).VANILLA" is "Literal[Flavour.VANILLA]"', + line=12, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="note", + message='Revealed type is "def (value: builtins.object) -> mypy_test.Flavour"', + line=11, + column=13, + ), + Result( + type="note", + message='Revealed type is "Literal[mypy_test.Flavour.VANILLA]?"', + line=12, + column=13, + ), + ] + ) + + +CODE_WITH_DEPRECATION_REASON = """ +from enum import Enum + +import strawberry + +@strawberry.enum +class IceCreamFlavour(Enum): + VANILLA = "vanilla" + STRAWBERRY = strawberry.enum_value( + "strawberry", deprecation_reason="We ran out" + ) + CHOCOLATE = "chocolate" + +reveal_type(IceCreamFlavour) +reveal_type(IceCreamFlavour.STRAWBERRY) +""" + + +def test_enum_deprecated(): + results = typecheck(CODE_WITH_DEPRECATION_REASON) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "IceCreamFlavour" is "type[IceCreamFlavour]"', + line=14, + column=13, + ), + Result( + type="information", + message='Type of "IceCreamFlavour.STRAWBERRY" is "Literal[IceCreamFlavour.STRAWBERRY]"', + line=15, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="note", + message='Revealed type is "def (value: builtins.object) -> mypy_test.IceCreamFlavour"', + line=14, + column=13, + ), + Result( + type="note", + message='Revealed type is "Literal[mypy_test.IceCreamFlavour.STRAWBERRY]?"', + line=15, + column=13, + ), + ] + ) diff --git a/tests/typecheckers/test_federation.py b/tests/typecheckers/test_federation.py new file mode 100644 index 0000000000..bd63a9cd8a --- /dev/null +++ b/tests/typecheckers/test_federation.py @@ -0,0 +1,212 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + + +CODE = """ +import strawberry + +def get_user_age() -> int: + return 0 + + +@strawberry.federation.type +class User: + name: str + age: int = strawberry.field(resolver=get_user_age) + something_else: int = strawberry.federation.field(resolver=get_user_age) + + +User(name="Patrick") +User(n="Patrick") + +reveal_type(User) +reveal_type(User.__init__) +""" + + +def test_federation_type(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="error", + message='Argument missing for parameter "name"', + line=16, + column=1, + ), + Result(type="error", message='No parameter named "n"', line=16, column=6), + Result( + type="information", + message='Type of "User" is "type[User]"', + line=18, + column=13, + ), + Result( + type="information", + message='Type of "User.__init__" is "(self: User, *, name: str) -> None"', + line=19, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="error", + message='Unexpected keyword argument "n" for "User"', + line=16, + column=1, + ), + Result( + type="note", + message='Revealed type is "def (*, name: builtins.str) -> mypy_test.User"', + line=18, + column=13, + ), + Result( + type="note", + message='Revealed type is "def (self: mypy_test.User, *, name: builtins.str)"', + line=19, + column=13, + ), + ] + ) + + +CODE_INTERFACE = """ +import strawberry + + +@strawberry.federation.interface +class User: + name: str + age: int + + +User(name="Patrick", age=1) +User(n="Patrick", age=1) + +reveal_type(User) +reveal_type(User.__init__) +""" + + +def test_federation_interface(): + results = typecheck(CODE_INTERFACE) + + assert results.pyright == snapshot( + [ + Result( + type="error", + message='Argument missing for parameter "name"', + line=12, + column=1, + ), + Result(type="error", message='No parameter named "n"', line=12, column=6), + Result( + type="information", + message='Type of "User" is "type[User]"', + line=14, + column=13, + ), + Result( + type="information", + message='Type of "User.__init__" is "(self: User, *, name: str, age: int) -> None"', + line=15, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="error", + message='Unexpected keyword argument "n" for "User"', + line=12, + column=1, + ), + Result( + type="note", + message='Revealed type is "def (*, name: builtins.str, age: builtins.int) -> mypy_test.User"', + line=14, + column=13, + ), + Result( + type="note", + message='Revealed type is "def (self: mypy_test.User, *, name: builtins.str, age: builtins.int)"', + line=15, + column=13, + ), + ] + ) + + +CODE_INPUT = """ +import strawberry + +@strawberry.federation.input +class User: + name: str + + +User(name="Patrick") +User(n="Patrick") + +reveal_type(User) +reveal_type(User.__init__) +""" + + +def test_federation_input(): + results = typecheck(CODE_INPUT) + + assert results.pyright == snapshot( + [ + Result( + type="error", + message='Argument missing for parameter "name"', + line=10, + column=1, + ), + Result(type="error", message='No parameter named "n"', line=10, column=6), + Result( + type="information", + message='Type of "User" is "type[User]"', + line=12, + column=13, + ), + Result( + type="information", + message='Type of "User.__init__" is "(self: User, *, name: str) -> None"', + line=13, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="error", + message='Unexpected keyword argument "n" for "User"', + line=10, + column=1, + ), + Result( + type="note", + message='Revealed type is "def (*, name: builtins.str) -> mypy_test.User"', + line=12, + column=13, + ), + Result( + type="note", + message='Revealed type is "def (self: mypy_test.User, *, name: builtins.str)"', + line=13, + column=13, + ), + ] + ) diff --git a/tests/typecheckers/test_federation_fields.py b/tests/typecheckers/test_federation_fields.py new file mode 100644 index 0000000000..faa74e98fe --- /dev/null +++ b/tests/typecheckers/test_federation_fields.py @@ -0,0 +1,128 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + +CODE = """ +import strawberry + +def some_resolver(root: "User") -> str: + return "An address" + +def some_resolver_2() -> str: + return "Another address" + +@strawberry.federation.type +class User: + age: int = strawberry.federation.field(description="Age") + name: str + address: str = strawberry.federation.field(resolver=some_resolver) + another_address: str = strawberry.federation.field(resolver=some_resolver_2) + +@strawberry.federation.input +class UserInput: + age: int = strawberry.federation.field(description="Age") + name: str + + +User(name="Patrick", age=1) +User(n="Patrick", age=1) + +UserInput(name="Patrick", age=1) +UserInput(n="Patrick", age=1) + +reveal_type(User) +reveal_type(User.__init__) + +reveal_type(UserInput) +reveal_type(UserInput.__init__) +""" + + +def test(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="error", + message='Argument missing for parameter "name"', + line=24, + column=1, + ), + Result(type="error", message='No parameter named "n"', line=24, column=6), + Result( + type="error", + message='Argument missing for parameter "name"', + line=27, + column=1, + ), + Result(type="error", message='No parameter named "n"', line=27, column=11), + Result( + type="information", + message='Type of "User" is "type[User]"', + line=29, + column=13, + ), + Result( + type="information", + message='Type of "User.__init__" is "(self: User, *, age: int, name: str) -> None"', + line=30, + column=13, + ), + Result( + type="information", + message='Type of "UserInput" is "type[UserInput]"', + line=32, + column=13, + ), + Result( + type="information", + message='Type of "UserInput.__init__" is "(self: UserInput, *, age: int, name: str) -> None"', + line=33, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="error", + message='Unexpected keyword argument "n" for "User"', + line=24, + column=1, + ), + Result( + type="error", + message='Unexpected keyword argument "n" for "UserInput"', + line=27, + column=1, + ), + Result( + type="note", + message='Revealed type is "def (*, age: builtins.int, name: builtins.str) -> mypy_test.User"', + line=29, + column=13, + ), + Result( + type="note", + message='Revealed type is "def (self: mypy_test.User, *, age: builtins.int, name: builtins.str)"', + line=30, + column=13, + ), + Result( + type="note", + message='Revealed type is "def (*, age: builtins.int, name: builtins.str) -> mypy_test.UserInput"', + line=32, + column=13, + ), + Result( + type="note", + message='Revealed type is "def (self: mypy_test.UserInput, *, age: builtins.int, name: builtins.str)"', + line=33, + column=13, + ), + ] + ) diff --git a/tests/typecheckers/test_federation_params.py b/tests/typecheckers/test_federation_params.py new file mode 100644 index 0000000000..98eb6619d8 --- /dev/null +++ b/tests/typecheckers/test_federation_params.py @@ -0,0 +1,46 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + + +CODE = """ +import strawberry + + +@strawberry.federation.type(name="User") +class UserModel: + name: str + + +UserModel(name="Patrick") +UserModel(n="Patrick") +""" + + +def test(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="error", + message='Argument missing for parameter "name"', + line=11, + column=1, + ), + Result(type="error", message='No parameter named "n"', line=11, column=11), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="error", + message='Unexpected keyword argument "n" for "UserModel"', + line=11, + column=1, + ) + ] + ) diff --git a/tests/typecheckers/test_fields.py b/tests/typecheckers/test_fields.py new file mode 100644 index 0000000000..25e3c9d977 --- /dev/null +++ b/tests/typecheckers/test_fields.py @@ -0,0 +1,73 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + + +CODE = """ +import strawberry + + +@strawberry.type +class User: + name: str + + +User(name="Patrick") +User(n="Patrick") + +reveal_type(User) +reveal_type(User.__init__) +""" + + +def test(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="error", + message='Argument missing for parameter "name"', + line=11, + column=1, + ), + Result(type="error", message='No parameter named "n"', line=11, column=6), + Result( + type="information", + message='Type of "User" is "type[User]"', + line=13, + column=13, + ), + Result( + type="information", + message='Type of "User.__init__" is "(self: User, *, name: str) -> None"', + line=14, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="error", + message='Unexpected keyword argument "n" for "User"', + line=11, + column=1, + ), + Result( + type="note", + message='Revealed type is "def (*, name: builtins.str) -> mypy_test.User"', + line=13, + column=13, + ), + Result( + type="note", + message='Revealed type is "def (self: mypy_test.User, *, name: builtins.str)"', + line=14, + column=13, + ), + ] + ) diff --git a/tests/typecheckers/test_fields_input.py b/tests/typecheckers/test_fields_input.py new file mode 100644 index 0000000000..3858adbc3a --- /dev/null +++ b/tests/typecheckers/test_fields_input.py @@ -0,0 +1,73 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + + +CODE = """ +import strawberry + + +@strawberry.input +class User: + name: str + + +User(name="Patrick") +User(n="Patrick") + +reveal_type(User) +reveal_type(User.__init__) +""" + + +def test(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="error", + message='Argument missing for parameter "name"', + line=11, + column=1, + ), + Result(type="error", message='No parameter named "n"', line=11, column=6), + Result( + type="information", + message='Type of "User" is "type[User]"', + line=13, + column=13, + ), + Result( + type="information", + message='Type of "User.__init__" is "(self: User, *, name: str) -> None"', + line=14, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="error", + message='Unexpected keyword argument "n" for "User"', + line=11, + column=1, + ), + Result( + type="note", + message='Revealed type is "def (*, name: builtins.str) -> mypy_test.User"', + line=13, + column=13, + ), + Result( + type="note", + message='Revealed type is "def (self: mypy_test.User, *, name: builtins.str)"', + line=14, + column=13, + ), + ] + ) diff --git a/tests/typecheckers/test_fields_keyword.py b/tests/typecheckers/test_fields_keyword.py new file mode 100644 index 0000000000..2631daefd0 --- /dev/null +++ b/tests/typecheckers/test_fields_keyword.py @@ -0,0 +1,58 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + + +CODE = """ +import strawberry + + +@strawberry.type +class User: + name: str + + +User("Patrick") + +reveal_type(User.__init__) +""" + + +def test(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="error", + message="Expected 0 positional arguments", + line=10, + column=6, + ), + Result( + type="information", + message='Type of "User.__init__" is "(self: User, *, name: str) -> None"', + line=12, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="error", + message='Too many positional arguments for "User"', + line=10, + column=1, + ), + Result( + type="note", + message='Revealed type is "def (self: mypy_test.User, *, name: builtins.str)"', + line=12, + column=13, + ), + ] + ) diff --git a/tests/typecheckers/test_fields_resolver.py b/tests/typecheckers/test_fields_resolver.py new file mode 100644 index 0000000000..849e39a9e9 --- /dev/null +++ b/tests/typecheckers/test_fields_resolver.py @@ -0,0 +1,77 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + + +CODE = """ +import strawberry + +def get_user_age() -> int: + return 0 + + +@strawberry.type +class User: + name: str + age: int = strawberry.field(resolver=get_user_age) + + +User(name="Patrick") +User(n="Patrick") + +reveal_type(User) +reveal_type(User.__init__) +""" + + +def test(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="error", + message='Argument missing for parameter "name"', + line=15, + column=1, + ), + Result(type="error", message='No parameter named "n"', line=15, column=6), + Result( + type="information", + message='Type of "User" is "type[User]"', + line=17, + column=13, + ), + Result( + type="information", + message='Type of "User.__init__" is "(self: User, *, name: str) -> None"', + line=18, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="error", + message='Unexpected keyword argument "n" for "User"', + line=15, + column=1, + ), + Result( + type="note", + message='Revealed type is "def (*, name: builtins.str) -> mypy_test.User"', + line=17, + column=13, + ), + Result( + type="note", + message='Revealed type is "def (self: mypy_test.User, *, name: builtins.str)"', + line=18, + column=13, + ), + ] + ) diff --git a/tests/typecheckers/test_fields_resolver_async.py b/tests/typecheckers/test_fields_resolver_async.py new file mode 100644 index 0000000000..172e703033 --- /dev/null +++ b/tests/typecheckers/test_fields_resolver_async.py @@ -0,0 +1,92 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + +CODE = """ +import strawberry + +async def get_user_age() -> int: + return 0 + + +@strawberry.type +class User: + name: str + age: int = strawberry.field(resolver=get_user_age) + something: str = strawberry.field(resolver=get_user_age) + + +User(name="Patrick") +User(n="Patrick") + +reveal_type(User) +reveal_type(User.__init__) +""" + + +def test(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="error", + message="""\ +Expression of type "StrawberryField" is incompatible with declared type "str" +\xa0\xa0"StrawberryField" is incompatible with "str"\ +""", + line=12, + column=22, + ), + Result( + type="error", + message='Argument missing for parameter "name"', + line=16, + column=1, + ), + Result(type="error", message='No parameter named "n"', line=16, column=6), + Result( + type="information", + message='Type of "User" is "type[User]"', + line=18, + column=13, + ), + Result( + type="information", + message='Type of "User.__init__" is "(self: User, *, name: str) -> None"', + line=19, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="error", + message='Incompatible types in assignment (expression has type "int", variable has type "str")', + line=12, + column=22, + ), + Result( + type="error", + message='Unexpected keyword argument "n" for "User"', + line=16, + column=1, + ), + Result( + type="note", + message='Revealed type is "def (*, name: builtins.str) -> mypy_test.User"', + line=18, + column=13, + ), + Result( + type="note", + message='Revealed type is "def (self: mypy_test.User, *, name: builtins.str)"', + line=19, + column=13, + ), + ] + ) diff --git a/tests/typecheckers/test_info.py b/tests/typecheckers/test_info.py new file mode 100644 index 0000000000..61e604aa83 --- /dev/null +++ b/tests/typecheckers/test_info.py @@ -0,0 +1,111 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + + +def test_with_params(): + CODE = """ +import strawberry + +def example(info: strawberry.Info[None, None]) -> None: + reveal_type(info.context) + reveal_type(info.root_value) +""" + + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "info.context" is "None"', + line=5, + column=17, + ), + Result( + type="information", + message='Type of "info.root_value" is "None"', + line=6, + column=17, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result(type="note", message='Revealed type is "None"', line=5, column=17), + Result(type="note", message='Revealed type is "None"', line=6, column=17), + ] + ) + + +def test_with_one_param(): + CODE = """ +import strawberry + +def example(info: strawberry.Info[None]) -> None: + reveal_type(info.context) + reveal_type(info.root_value) +""" + + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "info.context" is "None"', + line=5, + column=17, + ), + Result( + type="information", + message='Type of "info.root_value" is "Any"', + line=6, + column=17, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result(type="note", message='Revealed type is "None"', line=5, column=17), + Result(type="note", message='Revealed type is "Any"', line=6, column=17), + ] + ) + + +def test_without_params(): + CODE = """ +import strawberry + +def example(info: strawberry.Info) -> None: + reveal_type(info.context) + reveal_type(info.root_value) +""" + + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "info.context" is "Any"', + line=5, + column=17, + ), + Result( + type="information", + message='Type of "info.root_value" is "Any"', + line=6, + column=17, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result(type="note", message='Revealed type is "Any"', line=5, column=17), + Result(type="note", message='Revealed type is "Any"', line=6, column=17), + ] + ) diff --git a/tests/typecheckers/test_interface.py b/tests/typecheckers/test_interface.py new file mode 100644 index 0000000000..684a786af1 --- /dev/null +++ b/tests/typecheckers/test_interface.py @@ -0,0 +1,80 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + + +CODE = """ +import strawberry + + +@strawberry.interface +class Node: + id: strawberry.ID + +reveal_type(Node) +""" + + +def test(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "Node" is "type[Node]"', + line=9, + column=13, + ) + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="note", + message='Revealed type is "def (*, id: strawberry.scalars.ID) -> mypy_test.Node"', + line=9, + column=13, + ) + ] + ) + + +CODE_2 = """ +import strawberry + + +@strawberry.interface(name="nodeinterface") +class Node: + id: strawberry.ID + +reveal_type(Node) +""" + + +def test_calling(): + results = typecheck(CODE_2) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "Node" is "type[Node]"', + line=9, + column=13, + ) + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="note", + message='Revealed type is "def (*, id: strawberry.scalars.ID) -> mypy_test.Node"', + line=9, + column=13, + ) + ] + ) diff --git a/tests/typecheckers/test_params.py b/tests/typecheckers/test_params.py new file mode 100644 index 0000000000..4c7e2905e2 --- /dev/null +++ b/tests/typecheckers/test_params.py @@ -0,0 +1,66 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + +CODE = """ +import strawberry + + +@strawberry.type(name="User") +class UserModel: + name: str + + +@strawberry.input(name="User") +class UserInput: + name: str + + +UserModel(name="Patrick") +UserModel(n="Patrick") + +UserInput(name="Patrick") +UserInput(n="Patrick") +""" + + +def test(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="error", + message='Argument missing for parameter "name"', + line=16, + column=1, + ), + Result(type="error", message='No parameter named "n"', line=16, column=11), + Result( + type="error", + message='Argument missing for parameter "name"', + line=19, + column=1, + ), + Result(type="error", message='No parameter named "n"', line=19, column=11), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="error", + message='Unexpected keyword argument "n" for "UserModel"', + line=16, + column=1, + ), + Result( + type="error", + message='Unexpected keyword argument "n" for "UserInput"', + line=19, + column=1, + ), + ] + ) diff --git a/tests/typecheckers/test_private.py b/tests/typecheckers/test_private.py new file mode 100644 index 0000000000..05579651d7 --- /dev/null +++ b/tests/typecheckers/test_private.py @@ -0,0 +1,74 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + + +CODE = """ +import strawberry + + +@strawberry.type +class User: + name: str + age: strawberry.Private[int] + + +patrick = User(name="Patrick", age=1) +User(n="Patrick") + +reveal_type(patrick.name) +reveal_type(patrick.age) +""" + + +def test(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="error", + message='Arguments missing for parameters "name", "age"', + line=12, + column=1, + ), + Result(type="error", message='No parameter named "n"', line=12, column=6), + Result( + type="information", + message='Type of "patrick.name" is "str"', + line=14, + column=13, + ), + Result( + type="information", + message='Type of "patrick.age" is "int"', + line=15, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="error", + message='Unexpected keyword argument "n" for "User"', + line=12, + column=1, + ), + Result( + type="note", + message='Revealed type is "builtins.str"', + line=14, + column=13, + ), + Result( + type="note", + message='Revealed type is "builtins.int"', + line=15, + column=13, + ), + ] + ) diff --git a/tests/typecheckers/test_relay.py b/tests/typecheckers/test_relay.py new file mode 100644 index 0000000000..90545def93 --- /dev/null +++ b/tests/typecheckers/test_relay.py @@ -0,0 +1,358 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + + +CODE = """ +from typing import ( + Any, + AsyncIterator, + AsyncGenerator, + AsyncIterable, + Generator, + Iterable, + Iterator, + List, + Optional, + Union, +) + +import strawberry +from strawberry import relay +from typing_extensions import Self + + +@strawberry.type +class Fruit(relay.Node): + id: relay.NodeID[int] + name: str + color: str + + +@strawberry.type +class FruitCustomPaginationConnection(relay.Connection[Fruit]): + @strawberry.field + def something(self) -> str: + return "foobar" + + @classmethod + def resolve_connection( + cls, + nodes: Union[ + Iterator[Fruit], + AsyncIterator[Fruit], + Iterable[Fruit], + AsyncIterable[Fruit], + ], + *, + info: Optional[strawberry.Info] = None, + before: Optional[str] = None, + after: Optional[str] = None, + first: Optional[int] = None, + last: Optional[int] = None, + **kwargs: Any, + ) -> Self: + ... + + +class FruitAlike: + ... + + +def fruits_resolver() -> List[Fruit]: + ... + + +@strawberry.type +class Query: + node: relay.Node + nodes: List[relay.Node] + node_optional: Optional[relay.Node] + nodes_optional: List[Optional[relay.Node]] + fruits: relay.Connection[Fruit] = strawberry.relay.connection( + resolver=fruits_resolver, + ) + fruits_conn: relay.Connection[Fruit] = relay.connection( + resolver=fruits_resolver, + ) + fruits_custom_pagination: FruitCustomPaginationConnection + + @relay.connection(relay.Connection[Fruit]) + def fruits_custom_resolver( + self, + info: strawberry.Info, + name_endswith: Optional[str] = None, + ) -> List[Fruit]: + ... + + @relay.connection(relay.Connection[Fruit]) + def fruits_custom_resolver_iterator( + self, + info: strawberry.Info, + name_endswith: Optional[str] = None, + ) -> Iterator[Fruit]: + ... + + @relay.connection(relay.Connection[Fruit]) + def fruits_custom_resolver_iterable( + self, + info: strawberry.Info, + name_endswith: Optional[str] = None, + ) -> Iterable[Fruit]: + ... + + @relay.connection(relay.Connection[Fruit]) + def fruits_custom_resolver_generator( + self, + info: strawberry.Info, + name_endswith: Optional[str] = None, + ) -> Generator[Fruit, None, None]: + ... + + @relay.connection(relay.Connection[Fruit]) + async def fruits_custom_resolver_async_iterator( + self, + info: strawberry.Info, + name_endswith: Optional[str] = None, + ) -> AsyncIterator[Fruit]: + ... + + @relay.connection(relay.Connection[Fruit]) + async def fruits_custom_resolver_async_iterable( + self, + info: strawberry.Info, + name_endswith: Optional[str] = None, + ) -> AsyncIterable[Fruit]: + ... + + @relay.connection(relay.Connection[Fruit]) + async def fruits_custom_resolver_async_generator( + self, + info: strawberry.Info, + name_endswith: Optional[str] = None, + ) -> AsyncGenerator[Fruit, None]: + ... + +reveal_type(Query.node) +reveal_type(Query.nodes) +reveal_type(Query.node_optional) +reveal_type(Query.nodes_optional) +reveal_type(Query.fruits) +reveal_type(Query.fruits_conn) +reveal_type(Query.fruits_custom_pagination) +reveal_type(Query.fruits_custom_resolver) +reveal_type(Query.fruits_custom_resolver_iterator) +reveal_type(Query.fruits_custom_resolver_iterable) +reveal_type(Query.fruits_custom_resolver_generator) +reveal_type(Query.fruits_custom_resolver_async_iterator) +reveal_type(Query.fruits_custom_resolver_async_iterable) +reveal_type(Query.fruits_custom_resolver_async_generator) +""" + + +def test(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "Query.node" is "Node"', + line=131, + column=13, + ), + Result( + type="information", + message='Type of "Query.nodes" is "List[Node]"', + line=132, + column=13, + ), + Result( + type="information", + message='Type of "Query.node_optional" is "Node | None"', + line=133, + column=13, + ), + Result( + type="information", + message='Type of "Query.nodes_optional" is "List[Node | None]"', + line=134, + column=13, + ), + Result( + type="information", + message='Type of "Query.fruits" is "Connection[Fruit]"', + line=135, + column=13, + ), + Result( + type="information", + message='Type of "Query.fruits_conn" is "Connection[Fruit]"', + line=136, + column=13, + ), + Result( + type="information", + message='Type of "Query.fruits_custom_pagination" is "FruitCustomPaginationConnection"', + line=137, + column=13, + ), + Result( + type="information", + message='Type of "Query.fruits_custom_resolver" is "Any"', + line=138, + column=13, + ), + Result( + type="information", + message='Type of "Query.fruits_custom_resolver_iterator" is "Any"', + line=139, + column=13, + ), + Result( + type="information", + message='Type of "Query.fruits_custom_resolver_iterable" is "Any"', + line=140, + column=13, + ), + Result( + type="information", + message='Type of "Query.fruits_custom_resolver_generator" is "Any"', + line=141, + column=13, + ), + Result( + type="information", + message='Type of "Query.fruits_custom_resolver_async_iterator" is "Any"', + line=142, + column=13, + ), + Result( + type="information", + message='Type of "Query.fruits_custom_resolver_async_iterable" is "Any"', + line=143, + column=13, + ), + Result( + type="information", + message='Type of "Query.fruits_custom_resolver_async_generator" is "Any"', + line=144, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result(type="error", message="Missing return statement", line=34, column=5), + Result(type="error", message="Missing return statement", line=57, column=1), + Result( + type="error", + message='Untyped decorator makes function "fruits_custom_resolver" untyped', + line=75, + column=6, + ), + Result(type="error", message="Missing return statement", line=76, column=5), + Result( + type="error", + message='Untyped decorator makes function "fruits_custom_resolver_iterator" untyped', + line=83, + column=6, + ), + Result(type="error", message="Missing return statement", line=84, column=5), + Result( + type="error", + message='Untyped decorator makes function "fruits_custom_resolver_iterable" untyped', + line=91, + column=6, + ), + Result(type="error", message="Missing return statement", line=92, column=5), + Result( + type="error", + message='Untyped decorator makes function "fruits_custom_resolver_generator" untyped', + line=99, + column=6, + ), + Result( + type="error", message="Missing return statement", line=100, column=5 + ), + Result( + type="error", + message='Untyped decorator makes function "fruits_custom_resolver_async_iterator" untyped', + line=107, + column=6, + ), + Result( + type="error", message="Missing return statement", line=108, column=5 + ), + Result( + type="error", + message='Untyped decorator makes function "fruits_custom_resolver_async_iterable" untyped', + line=115, + column=6, + ), + Result( + type="error", message="Missing return statement", line=116, column=5 + ), + Result( + type="error", + message='Untyped decorator makes function "fruits_custom_resolver_async_generator" untyped', + line=123, + column=6, + ), + Result( + type="error", message="Missing return statement", line=124, column=5 + ), + Result( + type="note", + message='Revealed type is "strawberry.relay.types.Node"', + line=131, + column=13, + ), + Result( + type="note", + message='Revealed type is "builtins.list[strawberry.relay.types.Node]"', + line=132, + column=13, + ), + Result( + type="note", + message='Revealed type is "Union[strawberry.relay.types.Node, None]"', + line=133, + column=13, + ), + Result( + type="note", + message='Revealed type is "builtins.list[Union[strawberry.relay.types.Node, None]]"', + line=134, + column=13, + ), + Result( + type="note", + message='Revealed type is "strawberry.relay.types.Connection[mypy_test.Fruit]"', + line=135, + column=13, + ), + Result( + type="note", + message='Revealed type is "strawberry.relay.types.Connection[mypy_test.Fruit]"', + line=136, + column=13, + ), + Result( + type="note", + message='Revealed type is "mypy_test.FruitCustomPaginationConnection"', + line=137, + column=13, + ), + Result(type="note", message='Revealed type is "Any"', line=138, column=13), + Result(type="note", message='Revealed type is "Any"', line=139, column=13), + Result(type="note", message='Revealed type is "Any"', line=140, column=13), + Result(type="note", message='Revealed type is "Any"', line=141, column=13), + Result(type="note", message='Revealed type is "Any"', line=142, column=13), + Result(type="note", message='Revealed type is "Any"', line=143, column=13), + Result(type="note", message='Revealed type is "Any"', line=144, column=13), + ] + ) diff --git a/tests/typecheckers/test_scalars.py b/tests/typecheckers/test_scalars.py new file mode 100644 index 0000000000..e985720629 --- /dev/null +++ b/tests/typecheckers/test_scalars.py @@ -0,0 +1,137 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + + +CODE = """ +import strawberry +from strawberry.scalars import ID, JSON, Base16, Base32, Base64 + + +@strawberry.type +class SomeType: + id: ID + json: JSON + base16: Base16 + base32: Base32 + base64: Base64 + + +obj = SomeType( + id=ID("123"), + json=JSON({"foo": "bar"}), + base16=Base16(b""), + base32=Base32(b""), + base64=Base64(b""), +) + +reveal_type(obj.id) +reveal_type(obj.json) +reveal_type(obj.base16) +reveal_type(obj.base16) +reveal_type(obj.base64) +""" + + +def test(): + results = typecheck(CODE) + + # NOTE: This is also guaranteeing that those scalars could be used to annotate + # the attributes. Pyright 1.1.224+ doesn't allow non-types to be used there + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "obj.id" is "ID"', + line=23, + column=13, + ), + Result( + type="information", + message='Type of "obj.json" is "JSON"', + line=24, + column=13, + ), + Result( + type="information", + message='Type of "obj.base16" is "Base16"', + line=25, + column=13, + ), + Result( + type="information", + message='Type of "obj.base16" is "Base16"', + line=26, + column=13, + ), + Result( + type="information", + message='Type of "obj.base64" is "Base64"', + line=27, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="note", + message='Revealed type is "strawberry.scalars.ID"', + line=23, + column=13, + ), + Result(type="note", message='Revealed type is "Any"', line=24, column=13), + Result(type="note", message='Revealed type is "Any"', line=25, column=13), + Result(type="note", message='Revealed type is "Any"', line=26, column=13), + Result(type="note", message='Revealed type is "Any"', line=27, column=13), + ] + ) + + +CODE_SCHEMA_OVERRIDES = """ +import strawberry +from datetime import datetime, timezone + +EpochDateTime = strawberry.scalar( + datetime, +) + +@strawberry.type +class Query: + a: datetime + +schema = strawberry.Schema(query=Query, scalar_overrides={ + datetime: EpochDateTime, +}) + +reveal_type(EpochDateTime) +""" + + +def test_schema_overrides(): + # TODO: change strict to true when we improve type hints for scalar + results = typecheck(CODE_SCHEMA_OVERRIDES, strict=False) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "EpochDateTime" is "type[datetime]"', + line=16, + column=13, + ) + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="note", + message='Revealed type is "def (year: typing.SupportsIndex, month: typing.SupportsIndex, day: typing.SupportsIndex, hour: typing.SupportsIndex =, minute: typing.SupportsIndex =, second: typing.SupportsIndex =, microsecond: typing.SupportsIndex =, tzinfo: Union[datetime.tzinfo, None] =, *, fold: builtins.int =) -> datetime.datetime"', + line=17, + column=13, + ) + ] + ) diff --git a/tests/typecheckers/test_type.py b/tests/typecheckers/test_type.py new file mode 100644 index 0000000000..b673d00da2 --- /dev/null +++ b/tests/typecheckers/test_type.py @@ -0,0 +1,136 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + +CODE = """ +import strawberry +from strawberry.type import StrawberryOptional, StrawberryList + + +@strawberry.type +class Fruit: + name: str + + +reveal_type(StrawberryOptional(Fruit)) +reveal_type(StrawberryList(Fruit)) +reveal_type(StrawberryOptional(StrawberryList(Fruit))) +reveal_type(StrawberryList(StrawberryOptional(Fruit))) + +reveal_type(StrawberryOptional(str)) +reveal_type(StrawberryList(str)) +reveal_type(StrawberryOptional(StrawberryList(str))) +reveal_type(StrawberryList(StrawberryOptional(str))) +""" + + +def test(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "StrawberryOptional(Fruit)" is "StrawberryOptional"', + line=11, + column=13, + ), + Result( + type="information", + message='Type of "StrawberryList(Fruit)" is "StrawberryList"', + line=12, + column=13, + ), + Result( + type="information", + message='Type of "StrawberryOptional(StrawberryList(Fruit))" is "StrawberryOptional"', + line=13, + column=13, + ), + Result( + type="information", + message='Type of "StrawberryList(StrawberryOptional(Fruit))" is "StrawberryList"', + line=14, + column=13, + ), + Result( + type="information", + message='Type of "StrawberryOptional(str)" is "StrawberryOptional"', + line=16, + column=13, + ), + Result( + type="information", + message='Type of "StrawberryList(str)" is "StrawberryList"', + line=17, + column=13, + ), + Result( + type="information", + message='Type of "StrawberryOptional(StrawberryList(str))" is "StrawberryOptional"', + line=18, + column=13, + ), + Result( + type="information", + message='Type of "StrawberryList(StrawberryOptional(str))" is "StrawberryList"', + line=19, + column=13, + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="note", + message='Revealed type is "strawberry.type.StrawberryOptional"', + line=11, + column=13, + ), + Result( + type="note", + message='Revealed type is "strawberry.type.StrawberryList"', + line=12, + column=13, + ), + Result( + type="note", + message='Revealed type is "strawberry.type.StrawberryOptional"', + line=13, + column=13, + ), + Result( + type="note", + message='Revealed type is "strawberry.type.StrawberryList"', + line=14, + column=13, + ), + Result( + type="note", + message='Revealed type is "strawberry.type.StrawberryOptional"', + line=16, + column=13, + ), + Result( + type="note", + message='Revealed type is "strawberry.type.StrawberryList"', + line=17, + column=13, + ), + Result( + type="note", + message='Revealed type is "strawberry.type.StrawberryOptional"', + line=18, + column=13, + ), + Result( + type="note", + message='Revealed type is "strawberry.type.StrawberryList"', + line=19, + column=13, + ), + ] + ) diff --git a/tests/typecheckers/test_union.py b/tests/typecheckers/test_union.py new file mode 100644 index 0000000000..f48969469c --- /dev/null +++ b/tests/typecheckers/test_union.py @@ -0,0 +1,66 @@ +from inline_snapshot import snapshot + +from .utils.marks import requires_mypy, requires_pyright, skip_on_windows +from .utils.typecheck import Result, typecheck + +pytestmark = [skip_on_windows, requires_pyright, requires_mypy] + + +CODE = """ +import strawberry +from typing_extensions import TypeAlias, Annotated +from typing import Union + +@strawberry.type +class User: + name: str + + +@strawberry.type +class Error: + message: str + +UserOrError: TypeAlias = Annotated[ + Union[User, Error], strawberry.union("UserOrError") +] + +reveal_type(UserOrError) + +x: UserOrError = User(name="Patrick") + +reveal_type(x) +""" + + +def test(): + results = typecheck(CODE) + + assert results.pyright == snapshot( + [ + Result( + type="information", + message='Type of "UserOrError" is "type[User] | type[Error]"', + line=19, + column=13, + ), + Result( + type="information", message='Type of "x" is "User"', line=23, column=13 + ), + ] + ) + assert results.mypy == snapshot( + [ + Result( + type="note", + message='Revealed type is "typing._SpecialForm"', + line=19, + column=13, + ), + Result( + type="note", + message='Revealed type is "Union[mypy_test.User, mypy_test.Error]"', + line=23, + column=13, + ), + ] + ) diff --git a/tests/typecheckers/utils/__init__.py b/tests/typecheckers/utils/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/typecheckers/utils/marks.py b/tests/typecheckers/utils/marks.py new file mode 100644 index 0000000000..76648f7df7 --- /dev/null +++ b/tests/typecheckers/utils/marks.py @@ -0,0 +1,28 @@ +import shutil +import sys + +import pytest + + +def pyright_exist() -> bool: + return shutil.which("pyright") is not None + + +def mypy_exists() -> bool: + return shutil.which("mypy") is not None + + +skip_on_windows = pytest.mark.skipif( + sys.platform == "win32", + reason="Do not run pyright on windows due to path issues", +) + +requires_pyright = pytest.mark.skipif( + not pyright_exist(), + reason="These tests require pyright", +) + +requires_mypy = pytest.mark.skipif( + not mypy_exists(), + reason="These tests require mypy", +) diff --git a/tests/typecheckers/utils/mypy.py b/tests/typecheckers/utils/mypy.py new file mode 100644 index 0000000000..6fa0cef2d7 --- /dev/null +++ b/tests/typecheckers/utils/mypy.py @@ -0,0 +1,80 @@ +from __future__ import annotations + +import json +import pathlib +import subprocess +import tempfile +from typing import List, TypedDict + +from .result import Result + + +class PyrightCLIResult(TypedDict): + version: str + time: str + generalDiagnostics: List[GeneralDiagnostic] + summary: Summary + + +class GeneralDiagnostic(TypedDict): + file: str + severity: str + message: str + range: Range + + +class Range(TypedDict): + start: EndOrStart + end: EndOrStart + + +class EndOrStart(TypedDict): + line: int + character: int + + +class Summary(TypedDict): + filesAnalyzed: int + errorCount: int + warningCount: int + informationCount: int + timeInSec: float + + +def run_mypy(code: str, strict: bool = True) -> List[Result]: + args = ["mypy", "--output=json"] + + if strict: + args.append("--strict") + + with tempfile.TemporaryDirectory() as directory: + module_path = pathlib.Path(directory) / "mypy_test.py" + module_path.write_text(code) + + process_result = subprocess.run( + [*args, str(module_path)], check=False, capture_output=True + ) + + full_output = ( + process_result.stdout.decode("utf-8") + + "\n" + + process_result.stderr.decode("utf-8") + ) + full_output = full_output.strip() + + results: List[Result] = [] + + for line in full_output.split("\n"): + mypy_result = json.loads(line) + results.append( + Result( + type=mypy_result["severity"].strip(), + message=mypy_result["message"].strip(), + line=mypy_result["line"], + column=mypy_result["column"] + 1, + ) + ) + + results.sort(key=lambda x: (x.line, x.column, x.message)) + + return results diff --git a/tests/pyright/utils.py b/tests/typecheckers/utils/pyright.py similarity index 74% rename from tests/pyright/utils.py rename to tests/typecheckers/utils/pyright.py index 29ce41ba4e..6d03397fce 100644 --- a/tests/pyright/utils.py +++ b/tests/typecheckers/utils/pyright.py @@ -2,17 +2,11 @@ import json import os -import shutil import subprocess -import sys import tempfile -from dataclasses import dataclass from typing import List, TypedDict, cast -from typing_extensions import Literal -import pytest - -ResultType = Literal["error", "information"] +from .result import Result, ResultType class PyrightCLIResult(TypedDict): @@ -47,14 +41,6 @@ class Summary(TypedDict): timeInSec: float -@dataclass -class Result: - type: ResultType - message: str - line: int - column: int - - def run_pyright(code: str, strict: bool = True) -> List[Result]: if strict: code = "# pyright: strict\n" + code @@ -84,18 +70,3 @@ def run_pyright(code: str, strict: bool = True) -> List[Result]: result.sort(key=lambda x: (x.line, x.column, x.message)) return result - - -def pyright_exist() -> bool: - return shutil.which("pyright") is not None - - -skip_on_windows = pytest.mark.skipif( - sys.platform == "win32", - reason="Do not run pyright on windows due to path issues", -) - -requires_pyright = pytest.mark.skipif( - not pyright_exist(), - reason="These tests require pyright", -) diff --git a/tests/typecheckers/utils/result.py b/tests/typecheckers/utils/result.py new file mode 100644 index 0000000000..d79ba89388 --- /dev/null +++ b/tests/typecheckers/utils/result.py @@ -0,0 +1,16 @@ +from dataclasses import dataclass +from typing import Literal + +ResultType = Literal[ + "error", + "information", + "note", +] + + +@dataclass +class Result: + type: ResultType + message: str + line: int + column: int diff --git a/tests/typecheckers/utils/typecheck.py b/tests/typecheckers/utils/typecheck.py new file mode 100644 index 0000000000..8d34c6d301 --- /dev/null +++ b/tests/typecheckers/utils/typecheck.py @@ -0,0 +1,25 @@ +from __future__ import annotations + +import concurrent.futures +from dataclasses import dataclass + +from .mypy import run_mypy +from .pyright import run_pyright +from .result import Result + + +@dataclass +class TypecheckResult: + pyright: list[Result] + mypy: list[Result] + + +def typecheck(code: str, strict: bool = True) -> TypecheckResult: + with concurrent.futures.ThreadPoolExecutor() as executor: + pyright_future = executor.submit(run_pyright, code, strict=strict) + mypy_future = executor.submit(run_mypy, code, strict=strict) + + pyright_results = pyright_future.result() + mypy_results = mypy_future.result() + + return TypecheckResult(pyright=pyright_results, mypy=mypy_results)