diff --git a/poetry.lock b/poetry.lock index ac1739b..ffb3697 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,15 +1,15 @@ -# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.4.2 and should not be changed by hand. [[package]] name = "alembic" -version = "1.18.5" +version = "1.19.1" description = "A database migration tool for SQLAlchemy." optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "alembic-1.18.5-py3-none-any.whl", hash = "sha256:06d8ba9d04558022f5395e9317de03d270f3dced49cee01f89fe7a13c26f14bc"}, - {file = "alembic-1.18.5.tar.gz", hash = "sha256:1554982221dd17e9a749b53902407578eb305e453f71999e8c7f0a48389fff8e"}, + {file = "alembic-1.19.1-py3-none-any.whl", hash = "sha256:b39018cb3d9413a19cbd54cf3c02ad33998641f0538eb77413a488a21c3e14be"}, + {file = "alembic-1.19.1.tar.gz", hash = "sha256:e0fca0518118c78acc493e31bcb5402f190057aaf6df8b5b95ce94c4789cf648"}, ] [package.dependencies] @@ -21,39 +21,71 @@ typing-extensions = ">=4.12" tz = ["tzdata"] [[package]] -name = "annotated-doc" -version = "0.0.4" -description = "Document parameters, class attributes, return types, and variables inline, with Annotated." +name = "allure-pytest" +version = "2.16.0" +description = "Allure pytest integration" optional = false -python-versions = ">=3.8" +python-versions = "*" groups = ["main"] files = [ - {file = "annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320"}, - {file = "annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4"}, + {file = "allure_pytest-2.16.0-py3-none-any.whl", hash = "sha256:e5035a3b1f541b0c2ee566822df6fec20e0628b8536780e5bdfe39060ac0c71b"}, + {file = "allure_pytest-2.16.0.tar.gz", hash = "sha256:3cc883595b1ce4280b0b9a5fdaa0ce3bb5cdbaa1b43c7269d8b82e825e6e107c"}, +] + +[package.dependencies] +allure-python-commons = "2.16.0" +pytest = ">=4.5.0" + +[[package]] +name = "allure-python-commons" +version = "2.16.0" +description = "Contains the API for end users as well as helper functions and classes to build Allure adapters for Python test frameworks" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "allure_python_commons-2.16.0-py3-none-any.whl", hash = "sha256:6d42a500078aca8a2e68823075c1ffc2396987bb268d62b19af82390b205ce88"}, + {file = "allure_python_commons-2.16.0.tar.gz", hash = "sha256:ecdc92bafea074bab96b5f2c4eb3100825340188f5aece608ae80eced709b36f"}, +] + +[package.dependencies] +attrs = ">=16.0.0" +pluggy = ">=0.4.0" + +[[package]] +name = "annotated-doc" +version = "0.0.5" +description = "Document parameters, class attributes, return types, and variables inline, with Annotated." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "annotated_doc-0.0.5-py3-none-any.whl", hash = "sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101"}, + {file = "annotated_doc-0.0.5.tar.gz", hash = "sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb"}, ] [[package]] name = "annotated-types" -version = "0.7.0" +version = "0.8.0" description = "Reusable constraint types to use with typing.Annotated" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main"] files = [ - {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, - {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, + {file = "annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0"}, + {file = "annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7"}, ] [[package]] name = "anyio" -version = "4.14.1" +version = "4.14.2" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "anyio-4.14.1-py3-none-any.whl", hash = "sha256:4e5533c5b8ff0a24f5d7a176cbe6877129cd183893f66b537f8f227d10527d72"}, - {file = "anyio-4.14.1.tar.gz", hash = "sha256:8d648a3544c1a700e3ff78615cd679e4c5c3f149904287e73687b2596963629e"}, + {file = "anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494"}, + {file = "anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f"}, ] [package.dependencies] @@ -62,6 +94,18 @@ idna = ">=2.8" [package.extras] trio = ["trio (>=0.32.0)"] +[[package]] +name = "attrs" +version = "26.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309"}, + {file = "attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32"}, +] + [[package]] name = "bcrypt" version = "5.0.0" @@ -141,19 +185,16 @@ typecheck = ["mypy"] [[package]] name = "click" -version = "8.4.2" +version = "8.5.0" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76"}, - {file = "click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6"}, + {file = "click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360"}, + {file = "click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34"}, ] -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - [[package]] name = "colorama" version = "0.4.6" @@ -161,7 +202,7 @@ description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["main"] -markers = "platform_system == \"Windows\"" +markers = "sys_platform == \"win32\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -225,14 +266,14 @@ idna = ">=2.0.0" [[package]] name = "fastapi" -version = "0.139.0" +version = "0.139.2" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "fastapi-0.139.0-py3-none-any.whl", hash = "sha256:cf15e1e9e667ddb0ad63811e60bd11390d1aac838ca4a7a23f421807b2308189"}, - {file = "fastapi-0.139.0.tar.gz", hash = "sha256:99ab7b2d92223c76d6cf10757ab3f89d45b38267fc20b2a136cf02f6beac3145"}, + {file = "fastapi-0.139.2-py3-none-any.whl", hash = "sha256:b9ad015a835173d59865e2f5d8296fbc2b317bf56a2ba1a5bfbdd03de2fd4b1c"}, + {file = "fastapi-0.139.2.tar.gz", hash = "sha256:333145a6891e9b5b3cfceb69baf817e8240cde4d4588ae5a10bf56ffacb6255e"}, ] [package.dependencies] @@ -249,92 +290,92 @@ standard-no-fastapi-cloud-cli = ["email-validator (>=2.0.0)", "fastapi-cli[stand [[package]] name = "greenlet" -version = "3.5.3" +version = "3.5.5" description = "Lightweight in-process concurrent programming" optional = false python-versions = ">=3.10" groups = ["main"] markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\"" files = [ - {file = "greenlet-3.5.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:c180d22d325fb613956b443c3c6f4406eb70e6defc70d3974da2a7b59e06f48c"}, - {file = "greenlet-3.5.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:483d08c11181c83a6ce1a7a61df0f624a208ec40817a3bb2302714592eee4f04"}, - {file = "greenlet-3.5.3-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1dae6e0091eae084317e411f047f0b7cb241c6db570f7c45fd6b900a274914ce"}, - {file = "greenlet-3.5.3-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0f6ff50ff8dbd51fae9b37f4101648b04ea0df19b3f50ab2beb5061e7716a5c8"}, - {file = "greenlet-3.5.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9bcd2d72ccd70a1ec68ba6ef93e7fbb4420ef9997dabc7010d893bd4015e0bec"}, - {file = "greenlet-3.5.3-cp310-cp310-manylinux_2_39_riscv64.whl", hash = "sha256:37bf9c538f5ae6e63d643f88dec37c0c83bdf0e2ebc62961dedcf458822f7b71"}, - {file = "greenlet-3.5.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:73f152c895e09907e0dbe24f6c2db37beb085cd63db91c3825a0fcd0064124a8"}, - {file = "greenlet-3.5.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8bdb43e1a1d1873721acab2be99c5befd4d2044ddfd52e4d610801019880a702"}, - {file = "greenlet-3.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:0909f9355a9f24845d3299f3112e266a06afb68302041989fd26bd68894933db"}, - {file = "greenlet-3.5.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:aca9b4ce85b152b5524ef7d88170efdff80dc0032aa8b75f9aaf7f3479ea95b4"}, - {file = "greenlet-3.5.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f71be4920368fe1fabeeaa53d1e3548337e2b223d9565f8ad5e392a75ba23fc"}, - {file = "greenlet-3.5.3-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d77e67f65f98449e3fb83f795b5d0a8437aead2f874ca89c96576caf4be3af6"}, - {file = "greenlet-3.5.3-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e18619ba655ac05d78d80fc83cac4ba892bd6927b99e3b8237aee861aaacc8bb"}, - {file = "greenlet-3.5.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8540f1e6205bd13ca0ce685581037219ca54a1b41a0a15d228c6c9b8ad5903d7"}, - {file = "greenlet-3.5.3-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:d27c0c653a60d9535f690226474a5cc1036a8b0d7b57504d1c4f89c44a07a80c"}, - {file = "greenlet-3.5.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7ef56fe650f50575bf843acde967b9c567687f3c22340941a899b7bc56e956a8"}, - {file = "greenlet-3.5.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5121af01cf911e70056c00d4b46d5e9b5d1415550038573d744138bacb59e6b8"}, - {file = "greenlet-3.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:0f41e4a05a3c0cb31b17023eff28dd111e1d16bf7d7d00406cd7df23f31398a7"}, - {file = "greenlet-3.5.3-cp311-cp311-win_arm64.whl", hash = "sha256:ec6f1af59f6b5f3fc9678e2ea062d8377d22ac644f7844cb7a292910cf12ff44"}, - {file = "greenlet-3.5.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:719757059f5a53fd0dde23f78cffeafcdd97b21c850ddb7ca684a3c1a1f122e2"}, - {file = "greenlet-3.5.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:efa9f765dd09f9d0cdac651ffdf631ee59ec5dc6ee7a73e0c012ba9c52fbdf5b"}, - {file = "greenlet-3.5.3-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7faba15ac005376e02a0384504e0243be3370ce010296a44a820feb342b505ab"}, - {file = "greenlet-3.5.3-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5795cd1101371140551c645f2d408b8d3c01a5a29cf8a9bce6e759c983682d23"}, - {file = "greenlet-3.5.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:87142215824be6ac05e2e8e2786eec307ccbc27c36723c3881959df654af6861"}, - {file = "greenlet-3.5.3-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:af4923b3096e26a36d7e9cf24ab88083a20f97d191e3b97f253731ce9b41b28c"}, - {file = "greenlet-3.5.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:215275b1b49320987352e6c1b054acca0064f965a2c66992bed9a6f7d913f149"}, - {file = "greenlet-3.5.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6b1b0eed82364b0e32c4ea0f221452d33e6bb17ae094d9f72aed9851812747ea"}, - {file = "greenlet-3.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:cde8adafa2365676f74a979744629589999093bc86e2484214f58e61df08902c"}, - {file = "greenlet-3.5.3-cp312-cp312-win_arm64.whl", hash = "sha256:c4e7b79d83805475f0102008843f6eb45fd3bb0b2e88c774adab5fbaab27117d"}, - {file = "greenlet-3.5.3-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:c8d87c2134d871df96ecdea9cec7cbaab286dadab0f56476e57aaf9e8ac11550"}, - {file = "greenlet-3.5.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2d185dd1621757e70c3861cceffd5317ab4e7ed7eb09c82994828468527ade5"}, - {file = "greenlet-3.5.3-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1c514a468149bf8fbbab874188a3535cd8a48a3e353eb53a3d424296f8dbacd3"}, - {file = "greenlet-3.5.3-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9ad04dd75458c6300b047c61b8639092433d205a25a14e310d6582a480efcca1"}, - {file = "greenlet-3.5.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:915f887cf2682b66419b879423a2e072634aa7b7dce6f3ada4957cfced3f1e9a"}, - {file = "greenlet-3.5.3-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:afaabdd554cd7ae9bbb3ca070b0d7fdfd207dbf1d16865f7233837709d354bda"}, - {file = "greenlet-3.5.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:766cfd421c13e450feb340cd472a3ed9957d438727b7b4593ad7c76c5d2b0deb"}, - {file = "greenlet-3.5.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2ecda9ec22edf38fa389369eaed8c3d37c05f3c54e69f69438dbb2cc1de1458b"}, - {file = "greenlet-3.5.3-cp313-cp313-win_amd64.whl", hash = "sha256:c82304750f057167ff60d188df1d0cc1764ce9567eadf03e6a7443bcedd0b30b"}, - {file = "greenlet-3.5.3-cp313-cp313-win_arm64.whl", hash = "sha256:dc133a1569ee667b2a6ef56ce551084aeefd87a5acbc4736d336d1e2edc6cfc4"}, - {file = "greenlet-3.5.3-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:fd2e02fa07485778536a036222d616ab957b1d533f36b3ed98ce725d9c9d3117"}, - {file = "greenlet-3.5.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df0a0628d1597eb0897b62f55d1343f772405fd25f3b2a796c76874b0c2e22e8"}, - {file = "greenlet-3.5.3-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ebd933a6adabc298bab47731a130fe6bfb888bd934eee37810f151159544540d"}, - {file = "greenlet-3.5.3-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8d19fe6c39ebff9259f07bcc685d3290f8fa4ea2278e51dd0008e4d6b0f2d814"}, - {file = "greenlet-3.5.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4b9d501b40e80b70e32323c799dd9b420a5577a9601469d362ae1ffb690f3a7c"}, - {file = "greenlet-3.5.3-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:962c5df2db8cb446da51edf1ca5296c389d93b99c9d8aa2ee4c7d0d8f1218260"}, - {file = "greenlet-3.5.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a1fad1d11e7d6aab184107baa8e4ece11ccba3ec9599cd7efa5ff4d70d43256a"}, - {file = "greenlet-3.5.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:fad5aec764399f1b5cc347ad250a59660f20c8f8888ea6bae1f93b769cce1154"}, - {file = "greenlet-3.5.3-cp314-cp314-win_amd64.whl", hash = "sha256:7669aa24cf2a1041d6f7899575b494a3ab4cf68bfcc8609b1dc0be7272db835e"}, - {file = "greenlet-3.5.3-cp314-cp314-win_arm64.whl", hash = "sha256:5b4807c4082c9d1b6d9eed56fcd041863e37f2228106eef24c30ca096e238605"}, - {file = "greenlet-3.5.3-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:271a8ea7c1024e8a0d7dd2be66dd66dda8a07193f41a17b9e924f7600f5b62be"}, - {file = "greenlet-3.5.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:19131729ae0ddc3c2e1ef85e650169b5e37ee32e400f215f78b94d7b0d567310"}, - {file = "greenlet-3.5.3-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1540dd8e5fc2a5aec40fbb98ef8e149fa47c89a4b4a1cf2575a14d3d1869d7a8"}, - {file = "greenlet-3.5.3-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b897d97759425953f69a9c0fac67f8fe333ec0ce7377ef186fb2b0c3ad5e354d"}, - {file = "greenlet-3.5.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e81fa194a1d20967877bdf9c7794db2bc99063e5be36aee710c08f04c5bb087f"}, - {file = "greenlet-3.5.3-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:3236754d423955ea08e9bb5f6c04a7895f9e22c290b66aa7653fcb922d839eb0"}, - {file = "greenlet-3.5.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:55cf4d777485d43110e47133cbba6d74a8885a87ec1227ef0267f9ee80c5aa21"}, - {file = "greenlet-3.5.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:12a248ba75f6a9a236375f52296c498c89ff1d8badf32deb9eca7abd5853f7da"}, - {file = "greenlet-3.5.3-cp314-cp314t-win_amd64.whl", hash = "sha256:efc6bd60ea02e085862c74a3ef64b147ffc6f1a5ea7d9f26e7a939943f68c1e3"}, - {file = "greenlet-3.5.3-cp315-cp315-macosx_11_0_universal2.whl", hash = "sha256:ea03f2f04367845d6b58eeed276e1e56e51f0b97d8ad5a88a7d20a91dc9056cc"}, - {file = "greenlet-3.5.3-cp315-cp315-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78dbef602fda6d97d957eb7937f70c9ce9e9527330347f8f6b6f9e554a9e7a47"}, - {file = "greenlet-3.5.3-cp315-cp315-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6f73857adb8fee13fa56c172bd11262f888c0c648f9fea113e777bb2c7904a81"}, - {file = "greenlet-3.5.3-cp315-cp315-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cefa9cef4b371f9844c6053db71f1138bc6807bab1578b0dae5149c1f1141357"}, - {file = "greenlet-3.5.3-cp315-cp315-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:232fec92e823addaf02d9472cf7381e24a1d046a6ced1103c5caa4c21b9dfc1d"}, - {file = "greenlet-3.5.3-cp315-cp315-manylinux_2_39_riscv64.whl", hash = "sha256:6219b6d04dbf6ba6084d77dc609e8473060dc55f759cbf626d512122781fa128"}, - {file = "greenlet-3.5.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:2421c3564da9429d5586d46ca31ebb26516b5498a802cf65c041a8e8a8980d34"}, - {file = "greenlet-3.5.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:e0f0d160f0b2e558e6c75f7930967183255dc9735e5f5b8cae58ee09c9576d8b"}, - {file = "greenlet-3.5.3-cp315-cp315-win_amd64.whl", hash = "sha256:dd99329bbc15ca78dcc583dba05d0b1b0bae01ab6c2174989f5aaee3e41ac930"}, - {file = "greenlet-3.5.3-cp315-cp315-win_arm64.whl", hash = "sha256:499fef2acede88c1864a57bb586b4bf533c81e1b82df7ab93451cdb47dfec227"}, - {file = "greenlet-3.5.3-cp315-cp315t-macosx_11_0_universal2.whl", hash = "sha256:176bc16a721fa5fc294d70b87b4dfa5fbdd251b3da5d5372735ecef9bd7d6d0c"}, - {file = "greenlet-3.5.3-cp315-cp315t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:629b614d2b786e89c50440e246f33eea78f58a962d0bdbbcc809e6d13605903f"}, - {file = "greenlet-3.5.3-cp315-cp315t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2b2e857ae16f5f72142edf75f9f176fe7526ba19a2841df1420516f83831c9f2"}, - {file = "greenlet-3.5.3-cp315-cp315t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:16d192579ed281051396dddd7f7754dac6259e6b1fb26378c87b66622f8e3f91"}, - {file = "greenlet-3.5.3-cp315-cp315t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e515757e2e36bcbf1fad09a46e1557e8b1ae1797d4b44d09da7deed88ad28608"}, - {file = "greenlet-3.5.3-cp315-cp315t-manylinux_2_39_riscv64.whl", hash = "sha256:4399eb8d041f20b68d943918bc55502a93d6fdc0a37c14da7881c04139acee9d"}, - {file = "greenlet-3.5.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:b363d46ed1ea431825fdb01471bb024fc08399bad1572a616e853c7684415adb"}, - {file = "greenlet-3.5.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:e44da2f5bbdaabaf7d80b73dbb430c7035771e9f244e3c8b769715c9d8fa0a16"}, - {file = "greenlet-3.5.3-cp315-cp315t-win_amd64.whl", hash = "sha256:8ff8bed3e3baa20a3ea261ce00526f1898ad4801d4886fd2220580ee0ad8fadf"}, - {file = "greenlet-3.5.3-cp315-cp315t-win_arm64.whl", hash = "sha256:b7068bd09f761f3f5b4d214c2bed063186b2a86148c740b3873e3f56d79bac31"}, - {file = "greenlet-3.5.3.tar.gz", hash = "sha256:a61efc018fd3eb317eeca31aba90ee9e7f26f22884a79b6c6ec715bf71bb62f1"}, + {file = "greenlet-3.5.5-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:816230f469381ad0a43abc9fa8dda5a699e32fb78958dde32ded93213b70a667"}, + {file = "greenlet-3.5.5-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5433cf291e0ef9114bd14d0d824db6e5e4a43033234bca48181a9597acca07b"}, + {file = "greenlet-3.5.5-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:19d59f068887d8c5907fc177f27683413ace3011b6ed646c0b309266e74a6502"}, + {file = "greenlet-3.5.5-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:86c5113d698cb8d927b2750bb1f1d59eefe3a37e0e0217491aee29a7f84ef52c"}, + {file = "greenlet-3.5.5-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ff00e12102358292087274dfb1669132387ff6e7920ebf9d85f4826ce0d3a56"}, + {file = "greenlet-3.5.5-cp310-cp310-manylinux_2_39_riscv64.whl", hash = "sha256:c69bed34470abfcd456984fdadaa18e62169af4480335c45f3c32d1d9c12e638"}, + {file = "greenlet-3.5.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:523bb8e27614d77101ea7a8cf59f8d91219b72d5c29f6a038c92b50828bfa8d0"}, + {file = "greenlet-3.5.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f1e2db190db51c17433eee424803818cf0670bf049d9cfe0dd07be111d1aa7c4"}, + {file = "greenlet-3.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:740e544169527b82695ce76af2f7ad6f030904658f2f3921a1d245771fb88cfc"}, + {file = "greenlet-3.5.5-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:be63afcbbccfad3dd95a1ba12ada84dab2ef32031973d80b5b92df67fa763a61"}, + {file = "greenlet-3.5.5-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a268024ce2d7d2b04694bf1594058981a9fa663d1df4b762dee499211ed7c1c"}, + {file = "greenlet-3.5.5-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:35cbb8bf55ace57fbccb4fb8622c4521713acd8691e77f4696d416ea7ca527da"}, + {file = "greenlet-3.5.5-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:abc8bc8d9f935cd685457545b6a53863a877fdc12c2c0f5ee9beee18d9db139c"}, + {file = "greenlet-3.5.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cc6df89ec5302337adc9cf096221cbed2510fd444b0e0f1586cf0470740864"}, + {file = "greenlet-3.5.5-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:3134291427bb0f3526e9d90311988caf336eb43730e95244997a4fb15f45144f"}, + {file = "greenlet-3.5.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d9b454c5fc48aeaa7c4337813dbf513a6870468e426438a04d922c6d0fe63db"}, + {file = "greenlet-3.5.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03551ed792cb1b4fc0277a0c60dfd8c343894a0ba06fe60dcd22f568b433da39"}, + {file = "greenlet-3.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:ab3df3dffb58bf70564e93a5cec7941e4d9faa5a36cc4234a10d3131afe04f53"}, + {file = "greenlet-3.5.5-cp311-cp311-win_arm64.whl", hash = "sha256:2b70a766135540c472ac1393d57c2e1b4a2eb85bf526a1e41e6d096173a8cee5"}, + {file = "greenlet-3.5.5-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:49520f0c95a48b42cf55414b8e8479beb274ea70431afc33e3f79903c71f4380"}, + {file = "greenlet-3.5.5-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55272212cbc5f43d1d723725ab931f1939969b7e9523882ca58b55061769d053"}, + {file = "greenlet-3.5.5-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655bca754a2ef4efcb0eb48a94d3f4593536d0f3d48f8ed44343c01d16a92f95"}, + {file = "greenlet-3.5.5-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6ca5d6ae0739e5764f2cfcfaa562ac5a990cbdaedca93251c5e3cf07c362371f"}, + {file = "greenlet-3.5.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:147b25a42e5ca5be3d42356e8f608b37af715a1c196e9bf9d1627f3341adfe1d"}, + {file = "greenlet-3.5.5-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:1b5ed9162c0c098e0bbc2cf88a94f433c1b8926f831745252e099e5d83e17759"}, + {file = "greenlet-3.5.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:27493374cff1d1b7919dc8126547f2aea582737e3046147b434b1e12de56389b"}, + {file = "greenlet-3.5.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:12e2ee66c2aba86133f10fd99d6a8856c6d351ffb7be0e4d52ef2cc5fbb705b2"}, + {file = "greenlet-3.5.5-cp312-cp312-win_amd64.whl", hash = "sha256:49ddacd36af37735fab103846f4ee4d18a492dde72730d1699c0c8ebe30d9f18"}, + {file = "greenlet-3.5.5-cp312-cp312-win_arm64.whl", hash = "sha256:5f1b1ff4828cdc1aba4266aff814085d04a1d07959287219af021b838b265d52"}, + {file = "greenlet-3.5.5-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:b79fd2a5bc099b5e744f34c4c9a58954a5f4cb7529fb4b6e8446057d61b6edaa"}, + {file = "greenlet-3.5.5-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:634cf15a233a949136879dd388e25d3296e16f3f1e217d2456797b8579ebc6ed"}, + {file = "greenlet-3.5.5-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:499adea519f748407fc6806d20eedabac2884fd73b9f38d81236e190ba20dfef"}, + {file = "greenlet-3.5.5-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7278591501941bb2456af102bb9cd59aab48c6cfd6e2dd68fa1290bb0c49a42"}, + {file = "greenlet-3.5.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2eabb980975cba5b93a95f6f69287d05fc05ac955bfd6a320a7c083eeb52c0b0"}, + {file = "greenlet-3.5.5-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:4dfc7c4470354e7b09184d1a3a985761053a2fd694ddb5b5c80242afc2c8c90b"}, + {file = "greenlet-3.5.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:03115c2e0a371999bf8ae616aa8d653f96641d4705c457aebaa187276e9f7537"}, + {file = "greenlet-3.5.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4441153ffba21b90d3ca89fe3d31f5c093ae6c0bf0cfdfc98f54cde22f95b62e"}, + {file = "greenlet-3.5.5-cp313-cp313-win_amd64.whl", hash = "sha256:95c5b1f4b3a193f8a0c2de4bfdcb48d119f7f1063941f1de1f2168051b3e52dd"}, + {file = "greenlet-3.5.5-cp313-cp313-win_arm64.whl", hash = "sha256:1af90aa4bc129883b340cdd6957a3bc74f60528a4993bbd1f53aaebe1d9981cc"}, + {file = "greenlet-3.5.5-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:d4a389a852e392a6366058651a20fa5ba40d979865aa81bea2ccbdc44805070d"}, + {file = "greenlet-3.5.5-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70b157cd319873e8b544ddc2de158f55bbd0a9b0218c8ce9332039801518e328"}, + {file = "greenlet-3.5.5-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8bdfd1424abcf26832961e766570cae79efdb9599d709088c9cb6ef82b194926"}, + {file = "greenlet-3.5.5-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d98ef6f92e67c6dbf299dbfd8facc1b0d2d9cedf91e325e73b3d0373fe4309d8"}, + {file = "greenlet-3.5.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:182de51c6b572a705f2fafaab2e783bcf7d2760940229dfe73086cbae037af3e"}, + {file = "greenlet-3.5.5-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:159df1942d88e8f784cbb38d6f18bdb365cd11319cfbb3e89623de2b97892d53"}, + {file = "greenlet-3.5.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8fec3f165dfe332e490c3247c0f6c23b0bfc45f06496ad7f00ddb00e3d35e4dc"}, + {file = "greenlet-3.5.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c6ce25fee6cabc8bf22cb8b52e642cbb821be5b9aec8094d07ff03378141b8e9"}, + {file = "greenlet-3.5.5-cp314-cp314-win_amd64.whl", hash = "sha256:7dffc5c859fe6059974df1e37d7923d654a83e2ae18fdd616994270e001115e1"}, + {file = "greenlet-3.5.5-cp314-cp314-win_arm64.whl", hash = "sha256:5e2afcfc4d4305dd715809b03da5cbe437c8984f61d8917751eb5fe4aefa3e07"}, + {file = "greenlet-3.5.5-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:0e5a7de979d764aea1f5b6e95cf92b5b37741b9823702041f34b126e7f690277"}, + {file = "greenlet-3.5.5-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fef01bd457f11fc158b130ca0027a3c365693280e8e231b65bdaf57999f39f5b"}, + {file = "greenlet-3.5.5-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5173a72310725a74afc82c164f0e52cb8ad0de62f2bb623f24f6c0cc07d80272"}, + {file = "greenlet-3.5.5-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5e9ec2e7c98e895fcea0c5cc57b2606cf86ece6d0a56578f3eb225e2af4f0387"}, + {file = "greenlet-3.5.5-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44f08341873200ba8a60a8bc14ace3d91f1754f7fa7bc66157714a8cd420a476"}, + {file = "greenlet-3.5.5-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:102817506f6090b5176c746a82603341a549b40e5c3d5b72a4c672228a918c41"}, + {file = "greenlet-3.5.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d246c0db9a2513cd45f019ba178ea4d4d4705bd210ee465e2c15d76a1ab13874"}, + {file = "greenlet-3.5.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:72507285b5caa1d17904a3f7c322ca780823a54170a0e04ec3f37bcc60d4db71"}, + {file = "greenlet-3.5.5-cp314-cp314t-win_amd64.whl", hash = "sha256:7805655781fb8f28a55d05fe57ed61f5f10f1892fb587673e3bb5264f28041f0"}, + {file = "greenlet-3.5.5-cp315-cp315-macosx_11_0_universal2.whl", hash = "sha256:c0db80fcd5b8aece93f66c64f78a786bbb6b96c5fe63ef5a5a4581ecf8bab206"}, + {file = "greenlet-3.5.5-cp315-cp315-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b241c32f912ada659808d68e308c568baf577eebf757d15471472de0c18cfad"}, + {file = "greenlet-3.5.5-cp315-cp315-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ef6a08349401d8eaf3cb12688ac8557de95788556b8631ef17555a4a173022c0"}, + {file = "greenlet-3.5.5-cp315-cp315-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:37faa97daccb6d9f4c2141ce3118d023c3c5506864a7d8bdf726f665018c1f76"}, + {file = "greenlet-3.5.5-cp315-cp315-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f2e3d061b8e13aec2f0441689b3c71b244a20e5d274a52cb0f7e31bd1d139552"}, + {file = "greenlet-3.5.5-cp315-cp315-manylinux_2_39_riscv64.whl", hash = "sha256:b18007dc2473a7942fd157366b55f01da6fed7ce85318591005b419e0a439474"}, + {file = "greenlet-3.5.5-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:9ab5f5b93655e77fe0d6c2dfd22b5eac751bb1f876d8ec21761b7c1fb9266007"}, + {file = "greenlet-3.5.5-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:f0e5a21bd4452a88cf032fc43c4a5b307ab1380eacb63b5988f9c0317885e773"}, + {file = "greenlet-3.5.5-cp315-cp315-win_amd64.whl", hash = "sha256:469dbb0a78625642f4a626cfd0c6e8bccc0385b5e49189b6308bbe849ec88a8e"}, + {file = "greenlet-3.5.5-cp315-cp315-win_arm64.whl", hash = "sha256:2d57406c3efd32d7a81e17a674314e8bd00792cdab49ea3228a49aa1bfb2e769"}, + {file = "greenlet-3.5.5-cp315-cp315t-macosx_11_0_universal2.whl", hash = "sha256:68184dfcf50ccaa8e864770fe0633a7e27250ea9329f8192ef47ee9ecfd78e1c"}, + {file = "greenlet-3.5.5-cp315-cp315t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ec0dc0e59dc9c61af5c47348365ccbbd7addfafe0a93b00336ff3da2907bdc6"}, + {file = "greenlet-3.5.5-cp315-cp315t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e604f58e35833fc46ef20302bcb314dddbfd3fcf33a4f936216d51dd678d63ae"}, + {file = "greenlet-3.5.5-cp315-cp315t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2888a3a38bc5ee5bb6c438372197152e815837e4fab7ed7a1f86ef18ffd58ad1"}, + {file = "greenlet-3.5.5-cp315-cp315t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:40239b5384f96da3963585cc6d7eaa9b56f8ae67e8d92cc82dd9e202fc847de3"}, + {file = "greenlet-3.5.5-cp315-cp315t-manylinux_2_39_riscv64.whl", hash = "sha256:1e8d9391fe77f15649589a907cef972dbbd6352ef7ff7dc0492f658c0c26495f"}, + {file = "greenlet-3.5.5-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:a1eaccf5c3a1d3e46dead602c72e6836731e8e245c9de6a27764567b6b62d4c0"}, + {file = "greenlet-3.5.5-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:19e4e026fe20691f333b8eb1a3bc9625eceba8c3f9d62ec5a6f8581afbc6b5a5"}, + {file = "greenlet-3.5.5-cp315-cp315t-win_amd64.whl", hash = "sha256:712aee154f648bde84634654bb38bb78c69ac640c37a45c9effed800735049d8"}, + {file = "greenlet-3.5.5-cp315-cp315t-win_arm64.whl", hash = "sha256:7f049911ee81a16a03c33d5450d8d5867d27f596ca5fb201b86f4524e874468b"}, + {file = "greenlet-3.5.5.tar.gz", hash = "sha256:adb4bae02e91a8e863e48b177e4014bdcac8a6b5e047ea1df687a61534b85e6c"}, ] [package.extras] @@ -355,37 +396,49 @@ files = [ [[package]] name = "idna" -version = "3.18" +version = "3.19" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2"}, - {file = "idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848"}, + {file = "idna-3.19-py3-none-any.whl", hash = "sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4"}, + {file = "idna-3.19.tar.gz", hash = "sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15"}, ] [package.extras] -all = ["mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] +all = ["coverage (>=7.10.0)", "hypothesis (>=6.141.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.16.0)", "ty (>=0.0.37)"] + +[[package]] +name = "iniconfig" +version = "2.3.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, + {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, +] [[package]] name = "mako" -version = "1.3.12" +version = "1.4.1" description = "A super-fast templating language that borrows the best ideas from the existing templating languages." optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main"] files = [ - {file = "mako-1.3.12-py3-none-any.whl", hash = "sha256:8f61569480282dbf557145ce441e4ba888be453c30989f879f0d652e39f53ea9"}, - {file = "mako-1.3.12.tar.gz", hash = "sha256:9f778e93289bd410bb35daadeb4fc66d95a746f0b75777b942088b7fd7af550a"}, + {file = "mako-1.4.1-py3-none-any.whl", hash = "sha256:a359d9a94a541213958742b2698d0a7757bb83551767bc468a74b9905aba9617"}, + {file = "mako-1.4.1.tar.gz", hash = "sha256:d7904710b662996425a21627710c4777c45053146942cf8a7aebf757c92b8c27"}, ] [package.dependencies] -MarkupSafe = ">=0.9.2" +MarkupSafe = ">=2.0" [package.extras] babel = ["Babel"] -lingua = ["lingua"] +lingua = ["lingua (>=4.16)"] testing = ["pytest"] [[package]] @@ -487,6 +540,34 @@ files = [ {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"}, ] +[[package]] +name = "packaging" +version = "26.3" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c"}, + {file = "packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79"}, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["coverage", "pytest", "pytest-benchmark"] + [[package]] name = "pyasn1" version = "0.6.4" @@ -501,20 +582,20 @@ files = [ [[package]] name = "pydantic" -version = "2.13.4" +version = "2.13.5" description = "Data validation using Python type hints" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba"}, - {file = "pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6"}, + {file = "pydantic-2.13.5-py3-none-any.whl", hash = "sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73"}, + {file = "pydantic-2.13.5.tar.gz", hash = "sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08"}, ] [package.dependencies] annotated-types = ">=0.6.0" email-validator = {version = ">=2.0.0", optional = true, markers = "extra == \"email\""} -pydantic-core = "2.46.4" +pydantic-core = "2.46.5" typing-extensions = ">=4.14.1" typing-inspection = ">=0.4.2" @@ -524,132 +605,132 @@ timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows [[package]] name = "pydantic-core" -version = "2.46.4" +version = "2.46.5" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4"}, - {file = "pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01"}, - {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d"}, - {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4"}, - {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f"}, - {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39"}, - {file = "pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d"}, - {file = "pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf"}, - {file = "pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594"}, - {file = "pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398"}, - {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3"}, - {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848"}, - {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3"}, - {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109"}, - {file = "pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda"}, - {file = "pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33"}, - {file = "pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d"}, - {file = "pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2"}, - {file = "pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987"}, - {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b"}, - {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458"}, - {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b"}, - {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c"}, - {file = "pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894"}, - {file = "pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89"}, - {file = "pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a"}, - {file = "pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008"}, - {file = "pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262"}, - {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e"}, - {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd"}, - {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be"}, - {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d"}, - {file = "pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb"}, - {file = "pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292"}, - {file = "pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d"}, - {file = "pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb"}, - {file = "pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c"}, - {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb"}, - {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898"}, - {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e"}, - {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519"}, - {file = "pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4"}, - {file = "pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac"}, - {file = "pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5"}, - {file = "pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596"}, - {file = "pydantic_core-2.46.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:fd8b3d9fd264be37976686c7f65cd52a83f5e84f4bfd2adf9c1d469676bbb6ae"}, - {file = "pydantic_core-2.46.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9f444c499b3eefd3a92e348059471ea0c3a6e303d9c1cec09fa748fd9f895201"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3447661d99f75a3683a4cf5c87da72f2161964611864dbbeac7fbb118bb4bfc0"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b9bab013d1c7a79d3501ff86d0bc9c31bf587db4551677b96bec07df78c6b15"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d995260fdf4e1db774581b4900e0f832abe3c7c84996726bbc161b19c8f29e76"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f13a646d65d09fbf1bc6b3a9635d30095c8e7e5cc419ff35ecc563c5fd04cd49"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432c179df7874eeb73307aad2df0755e1ae0efa61ff0ea89b93e194411ae3928"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:e68b7a074f65a2fd746c52a7ce6142ab7006074ac269ace0c25cd8ba171f8066"}, - {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4a05d69cba51d852c5c3e92758653245a50c0b646ced0cf05bd793ed592839d6"}, - {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:228ee9bae8bef5b1e97ec58302f80357c37199e0d0a99174e138d28e6957b9d9"}, - {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:10e17cbb10a330363733efc4d7c4d0dd827ac0909b8f6a6542298fed1ea62f29"}, - {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:91a06d2e259ecfbd8c901d70c3c507900458498142b3026a296b7de4d1322cc9"}, - {file = "pydantic_core-2.46.4-cp39-cp39-win32.whl", hash = "sha256:d80ee3d731373b24cebbc10d689ca4ee1875caf0d5703a245db18efd4dd37fc1"}, - {file = "pydantic_core-2.46.4-cp39-cp39-win_amd64.whl", hash = "sha256:3be77f45df024d789a672ae34f8b06fb346c4f9f46ea714956660ea4862e89ac"}, - {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c"}, - {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b"}, - {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b"}, - {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea"}, - {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7"}, - {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df"}, - {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526"}, - {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc"}, - {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983"}, - {file = "pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1"}, + {file = "pydantic_core-2.46.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:657b40d6240c0a7b6a64b30f22d1e3aa631c7e846c621b0c0f6d1d75e2e15ea6"}, + {file = "pydantic_core-2.46.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ecb42011e12ee19cafbc312887cbf3546959fe02fbad44f272d4be5baa997615"}, + {file = "pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dedce55295becb61921e386b99d4f2706045306e7fa52249a33004c837379fb"}, + {file = "pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9f47b8a949e60f027f0aa0a6f6c7b7e9c55cbf4380d10b344e282fa4e7ab1e1b"}, + {file = "pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:200aa3dc9f8d54f0754f43247c0bad0999fdcfbfd2488384dd44f37279271fe6"}, + {file = "pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d30e1a4f138b8951063e9a394752a9179b51da288ffa507b1e659222f4c1793"}, + {file = "pydantic_core-2.46.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:850a08d167dde16db8702c274f320c7be9d7da6f6dff2b58b18f9e815bd94f5b"}, + {file = "pydantic_core-2.46.5-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:c3471e5c4a949c26ec00a77f01df59096aa9495877de76fd60a980f8ee6be461"}, + {file = "pydantic_core-2.46.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a3e26b6a8274211bddee2d0e4d0d42778f17a34510f49d2ec44b58abfc41736"}, + {file = "pydantic_core-2.46.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fc5d783bd4a2387e97b8a2d5ec781cfb92b3d893bf82370548e99db5915935d3"}, + {file = "pydantic_core-2.46.5-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:356c8368cbc321050b169595683a2e1d63413b1e0e2868b330af9fc14c616d3f"}, + {file = "pydantic_core-2.46.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eb7d8d0e5886a89a55d2eef490e272fa965a9d57c6b29a5b5088a7997ec2cad1"}, + {file = "pydantic_core-2.46.5-cp310-cp310-win32.whl", hash = "sha256:4d44cf99ddebf875f9b68cc267aa684c99b7b44fe63ee1cac4ec163807290069"}, + {file = "pydantic_core-2.46.5-cp310-cp310-win_amd64.whl", hash = "sha256:1e5aad1220a1192c42341c8fd4a8686657e73ab2a920c970bdc4de334fe3193d"}, + {file = "pydantic_core-2.46.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a1dee1b804ff4d11c663636cf15d2ea47e9f79cd56c033fb1cbf08924842a48f"}, + {file = "pydantic_core-2.46.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d625a186a65201c23a9e3b8ed9c47e90a026e03256608cc91851c6709096844f"}, + {file = "pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8507560a9284e1370bb048ed4282012fbef4e8d109875b95e884d228552061"}, + {file = "pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f93c5fe914d75fbec9a49209b00da5f08e9e467d69da2b1510c81940cfd10be"}, + {file = "pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c767f552b21b10f774aeac128e828eafb796adfa1b666a18bf6321453c3a"}, + {file = "pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:701b2e04b560eeb4bddf7a25ab8ca476176e34fdbd9a0e18196f0d12d4685f0b"}, + {file = "pydantic_core-2.46.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49776eab08766a08dfff7012f8b422dcd7e25e43b316eedf0477c24fcfa84b7c"}, + {file = "pydantic_core-2.46.5-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:a2468d93d181667a7abd66e1b64bb9f76f361b0fef8faddf687456453576f5ee"}, + {file = "pydantic_core-2.46.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:53feb344243bb9510a9dec7bf3cf1b64d88a98af5dc7872a5160465f8b198c8e"}, + {file = "pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cd5214352ae68f3b5e9af7768bdc5253695ee069675db3480518420b3be881f2"}, + {file = "pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:9432f3598db432cb51c5b37fdbf29a60fcccc79e30d37a05022776a6bc4ab689"}, + {file = "pydantic_core-2.46.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8feeac04b5794e513e710af2f9c87d49f31a6dc47967bb264a1fed61a8989bec"}, + {file = "pydantic_core-2.46.5-cp311-cp311-win32.whl", hash = "sha256:892a881d5f68c2b9ea304b7a6c2c60d9343df578a311b0f86b94bc8f1ffe8129"}, + {file = "pydantic_core-2.46.5-cp311-cp311-win_amd64.whl", hash = "sha256:40375c2d05acec10323e45dfe2077ac44bc74659008614af5069034e2cfc781c"}, + {file = "pydantic_core-2.46.5-cp311-cp311-win_arm64.whl", hash = "sha256:28a6a556cd3b6066bea827857f9d9cce027c96f776e512f544a581f9e42161f8"}, + {file = "pydantic_core-2.46.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d"}, + {file = "pydantic_core-2.46.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869"}, + {file = "pydantic_core-2.46.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5"}, + {file = "pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3"}, + {file = "pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b"}, + {file = "pydantic_core-2.46.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0"}, + {file = "pydantic_core-2.46.5-cp312-cp312-win32.whl", hash = "sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b"}, + {file = "pydantic_core-2.46.5-cp312-cp312-win_amd64.whl", hash = "sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8"}, + {file = "pydantic_core-2.46.5-cp312-cp312-win_arm64.whl", hash = "sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084"}, + {file = "pydantic_core-2.46.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0"}, + {file = "pydantic_core-2.46.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff"}, + {file = "pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931"}, + {file = "pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f"}, + {file = "pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038"}, + {file = "pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f"}, + {file = "pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1"}, + {file = "pydantic_core-2.46.5-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761"}, + {file = "pydantic_core-2.46.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5"}, + {file = "pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e"}, + {file = "pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed"}, + {file = "pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519"}, + {file = "pydantic_core-2.46.5-cp313-cp313-win32.whl", hash = "sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea"}, + {file = "pydantic_core-2.46.5-cp313-cp313-win_amd64.whl", hash = "sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5"}, + {file = "pydantic_core-2.46.5-cp313-cp313-win_arm64.whl", hash = "sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575"}, + {file = "pydantic_core-2.46.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355"}, + {file = "pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e"}, + {file = "pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5086029a57366b8cf81b130a43908738095c270c21a8d7f0e8bdfdb89718e2f3"}, + {file = "pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46c25dda9d092a06c08db76ffe0a197107904d0dfac653f7d5306bbcd6d6119c"}, + {file = "pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:37ea7b83c935e5b0d68c9449b82651accf78a10828b2c02b2f2d9e9496446c21"}, + {file = "pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e64e88d5585bea9ce95861079de72006c7fa6d3df4e3a3b65ba31eb979c15c9f"}, + {file = "pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f"}, + {file = "pydantic_core-2.46.5-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:a2a5e1d0ff29adddc9f6d6821a66302e4493f8ca898b715b6b1182c2c201ea0a"}, + {file = "pydantic_core-2.46.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03b9666e41e35d8909852ba191a0607520f81b74eaf12ccf8737005dbb313821"}, + {file = "pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:a91c17edf6eea2402cb5457b4c89e99bc5ed1004aa34c4adf1d4258c1a5c22c2"}, + {file = "pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b49924c73a235e969511bf2aabdff3beebf9820931f646c80274d5d780010c47"}, + {file = "pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:2cbd9a5eff05e51c447c34dfa4632145b26b09120cf04bd0c871e44c1a5e1c9a"}, + {file = "pydantic_core-2.46.5-cp314-cp314-win32.whl", hash = "sha256:2d5d76654becf5efd62c9e51c3756c67b49498b0c9a40884934c40807adbd074"}, + {file = "pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", hash = "sha256:fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0"}, + {file = "pydantic_core-2.46.5-cp314-cp314-win_arm64.whl", hash = "sha256:045ab3b6d308439e32b81cc173bba5b9018bc6ed896afd0c65b3b009b1699af5"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8816f3d218beb4b787de5c9759c259b8fa61f9dec42dc7811f320a33771778b7"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:bce57638e08ac148e5778cce7feb968307a727d66f8e2274a543d0cf0c9ad6a3"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976e1128455aa595ea04c79ccfedff1aaeab96ee013fcc916bed120c4f0ad94f"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b891faeedeafba41b2983e5001a81b6a915b69544c7e7570d1989ce1c36ac7"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f194189415698233dd1114a093a9b56e61e2c57e11b469be3b0506f46f0771c"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82a36973cf8a2ef5406f4fe2edbf8ed0c99629535d959e0b100c76a32535a111"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdbb78909f52b981d3b2d56b97328d71eb0b974c36bd77c920123a7ebb192829"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:52e24eacdb536cade636aa90fb851835222becff8484b7001fdc78cb0290f2aa"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:37ae34309d7bd8c0d61ab839668058f2a7962ea1fc51d105d2db228fe0618034"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:0cdbada856a1c69a7624a64d3d9aefe79300bd6ef827b43a4f265010b9b55184"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:545f26c504b27c3758439a5e6d9349931f0a04f855668d5fe323c89e82300a38"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:ff218293c9c806138dca139765e3b067621be52bcd93cdc14c7711be7ddc90a9"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-win32.whl", hash = "sha256:97cf3eb53a8cccacf9d46686a0926186c9bfb5574f2ed66d3639d5fe117cd3a9"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-win_amd64.whl", hash = "sha256:d2f9fc07a8042a8f95925b35c4f04f469707c981fc33245b6ca187cf5d2dd290"}, + {file = "pydantic_core-2.46.5-cp314-cp314t-win_arm64.whl", hash = "sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f"}, + {file = "pydantic_core-2.46.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c583b927a8838dab890706a6fa7573fbb8b70e24000ef9f7238e2d6f6435a5ed"}, + {file = "pydantic_core-2.46.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdc8b74ecc48c0cb1e9607a05ec4e9e88db60a19ffcc9a1d5f9088ede40c8dc0"}, + {file = "pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b10e3e8fd7ddc2bd915848a2768e44c15b22936f1cc54c462ad1164deb02655"}, + {file = "pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f077d0b97ab11fa7dcc633fca53515f290bca8a8a633e966d5b6d1879d9ed01a"}, + {file = "pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b0fc826b16c55e561e5d2a0c5c77b051ba1d92808118c4e4b5390f5e0cf191d"}, + {file = "pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef3fbbf161dc9351a2fe0422e51b129f9e97e42385bd0320b309c15f7d287dd8"}, + {file = "pydantic_core-2.46.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:978e7b97d4824b5be09c69fb70507cbde3b0323fc147332ca40a94d9a6a0ebbf"}, + {file = "pydantic_core-2.46.5-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:9b68938dd5b0c783d88ff8e2dcc69451b5eb936fe212d516b21b9d5567f6d464"}, + {file = "pydantic_core-2.46.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:771cf63ae0b1b50dd22e5f3e3549fab5f3f4ff1635d352a9e1a97fe01c7b2e64"}, + {file = "pydantic_core-2.46.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7c6be839a5a8312626b32029a415644a0846b420bc8b52b95b28cd92da162168"}, + {file = "pydantic_core-2.46.5-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:895395f8918627b04efb1ad2a4cf605387143300ba03304cd1dfa6d03f5e095e"}, + {file = "pydantic_core-2.46.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fc8515076c11f3cfdf4fb142dcca0fe384b1230a3b5415458ac84f3e0903ec13"}, + {file = "pydantic_core-2.46.5-cp39-cp39-win32.whl", hash = "sha256:3d2652072b2d774947ba5cf78a9e59644ac62ee572daf6dd2e1dfe905e15b2b7"}, + {file = "pydantic_core-2.46.5-cp39-cp39-win_amd64.whl", hash = "sha256:3aa166e99c4f2985407fb8714aebede877ecb5455cf321b606adca926d30d5a0"}, + {file = "pydantic_core-2.46.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:c14ad3bdc85ee7f318742c457ca3968a92126d144b15721c759033bfb06296c2"}, + {file = "pydantic_core-2.46.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0bddb4020d8f04175865ccd17eff3040874fc11fb593f424edb452653b4b947c"}, + {file = "pydantic_core-2.46.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2471fd51c61c610e1dcf7de44d7299283661654d11264ab4802b303368d69c47"}, + {file = "pydantic_core-2.46.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10ec717381bdbfafef34607824db4c91de69ff085e4fca3b2af91b4fa17e68a"}, + {file = "pydantic_core-2.46.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942"}, + {file = "pydantic_core-2.46.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:e9c134bb666dd54b778b9fc0d2b50cbb7f979b9e3716f26a88c9ab3b6fc1dd0f"}, + {file = "pydantic_core-2.46.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:347ec774390c87326a2e4929d58d3f7e8763a104d5d35f4cd595a4c952366433"}, + {file = "pydantic_core-2.46.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e24d8f05fa2d28513d94e877e9c75ad66175376209b3977f916e240e623193c"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ab4b66edffb32d9e951efb3814bd104b8367a7501b81b955cacb5726d897389f"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:337639ba62a11acde6ef3aeb08c8ea755f8ef1fe5e513356c0f36a2b0d7568b0"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:413a717a410d0c817ef5b786a059415550b3794e1d0c2abffd9efb93a3d9f7b4"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1e449def1945a462c464331254e5a44fca7c3b4f9aedf59ec2f50f8066dd8e25"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:a445486499897b88a7d6c310c88ed64dd37b1b59bfd7ae9107490bbb362f47d6"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:2d330aaba8621b1edcec8ae2c4050f63b84ccf6d98723a8f212e9684713abf0e"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b6acfb46a814762367fb7ba0828b0a17d441b92ce249a0e007474c9072662dda"}, + {file = "pydantic_core-2.46.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d0a24b40877af2de4950252be9d21eaf7fb07660f3c2cae1f56c6b599ada5266"}, + {file = "pydantic_core-2.46.5.tar.gz", hash = "sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc"}, ] [package.dependencies] @@ -657,14 +738,14 @@ typing-extensions = ">=4.14.1" [[package]] name = "pydantic-settings" -version = "2.14.2" +version = "2.15.0" description = "Settings management using Pydantic" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "pydantic_settings-2.14.2-py3-none-any.whl", hash = "sha256:a20c97b37910b6550d5ea50fbcc2d4187defe58cd57070b73863d069419c9440"}, - {file = "pydantic_settings-2.14.2.tar.gz", hash = "sha256:c19dd64b19097f1de80184f0cc7b0272a13ae6e170cbf240a3e27e381ed14a5f"}, + {file = "pydantic_settings-2.15.0-py3-none-any.whl", hash = "sha256:0ba092c291c94baceb5eff768aa0d56400a457585bc0175925a5a5510303da42"}, + {file = "pydantic_settings-2.15.0.tar.gz", hash = "sha256:694b793e84f766ba76a90ebdefc01d0a9a045dab0382bee70393da93712ad117"}, ] [package.dependencies] @@ -673,22 +754,59 @@ python-dotenv = ">=0.21.0" typing-inspection = ">=0.4.0" [package.extras] -aws-secrets-manager = ["boto3 (>=1.35.0)", "types-boto3[secretsmanager]"] +aws-secrets-manager = ["boto3 (>=1.35.0)"] azure-key-vault = ["azure-identity (>=1.16.0)", "azure-keyvault-secrets (>=4.8.0)"] gcp-secret-manager = ["google-cloud-secret-manager (>=2.23.1)"] toml = ["tomli (>=2.0.1)"] yaml = ["pyyaml (>=6.0.1)"] +[[package]] +name = "pygments" +version = "2.21.0" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9"}, + {file = "pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pytest" +version = "9.1.1" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c"}, + {file = "pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313"}, +] + +[package.dependencies] +colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} +iniconfig = ">=1.0.1" +packaging = ">=22" +pluggy = ">=1.5,<2" +pygments = ">=2.7.2" + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] + [[package]] name = "python-dotenv" -version = "1.2.2" +version = "1.2.3" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a"}, - {file = "python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3"}, + {file = "python_dotenv-1.2.3-py3-none-any.whl", hash = "sha256:904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9"}, + {file = "python_dotenv-1.2.3.tar.gz", hash = "sha256:a20a594dabeaa385725aa239d5244871c143ecb356add8a20fcf23773a6c3a35"}, ] [package.extras] @@ -757,70 +875,64 @@ files = [ [[package]] name = "sqlalchemy" -version = "2.0.51" +version = "2.0.52" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" groups = ["main"] files = [ - {file = "sqlalchemy-2.0.51-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e8203d2fbd5c6254692ef0a72c740d75b2f3c7ca345404f4c1a4604813c77c0"}, - {file = "sqlalchemy-2.0.51-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1af05726b3d0cdba1c55284bf408fd3b792e690fe2399bfb8304565551cda652"}, - {file = "sqlalchemy-2.0.51-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e54ff2dd657f2e3e0fbf2b097db1182f7bfea263eca4353f00065bae2a67c3d"}, - {file = "sqlalchemy-2.0.51-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1e47b1199c2e832e325eacabc8d32d2487f58c9358f97e9a00f5eb93c5680d84"}, - {file = "sqlalchemy-2.0.51-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c68568f3facf8f66fa76c60e0ced69b67666ffa9941d1d0a3756fda196049080"}, - {file = "sqlalchemy-2.0.51-cp310-cp310-win32.whl", hash = "sha256:0592bdadf86ddcabfd72d9ab66ea8a5d8d2cc6be1cc51fa7e66c03868ac5eac1"}, - {file = "sqlalchemy-2.0.51-cp310-cp310-win_amd64.whl", hash = "sha256:740cf6f35351b1ac3d82369152acf1d51d37e3dcf85d4dc0a22ca01410eabe2a"}, - {file = "sqlalchemy-2.0.51-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1aa10c0daee6705294d181daadaa793221e1a59ed55000a3fab1d42b088ce4ba"}, - {file = "sqlalchemy-2.0.51-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5b2ed6d828f1f09bd812861f4f59ca3bc3803f9df871f4555187f0faf018604"}, - {file = "sqlalchemy-2.0.51-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:436728ce18a80f6951a1e11cc6112c2ede9faf20766f1a26195a7c441ca12dbd"}, - {file = "sqlalchemy-2.0.51-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dc261707bf5739aea8a541593f3cc1d463c2701fb05fbcbba0ce031b69a21260"}, - {file = "sqlalchemy-2.0.51-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a6d26094615306d116dd5e4a51b0304c99dd2356fc569eed6922a80a6bd3b265"}, - {file = "sqlalchemy-2.0.51-cp311-cp311-win32.whl", hash = "sha256:ca8435d13829b92f4a97362d91975154a4015db3a2634154e1754e9a915e6b86"}, - {file = "sqlalchemy-2.0.51-cp311-cp311-win_amd64.whl", hash = "sha256:4a011ea4510683319ce4ed274b56ee05194b39b6da9d09ca7a39388f0fa84dcc"}, - {file = "sqlalchemy-2.0.51-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d78702b26ba1c18b2d0fb2ea940ba7f17a9581b42e8361ff93920ebbee1235a"}, - {file = "sqlalchemy-2.0.51-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581921d849d6e6f994d560389192955e80e2950e18fcdfe2ccea863e01158e6e"}, - {file = "sqlalchemy-2.0.51-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1d21ce524ab86c23046e992a5b81cb54c21079c6df6e78b8fc77d77cac70a6b9"}, - {file = "sqlalchemy-2.0.51-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c5d98a2709840027f5a347c3af0a7c3d5f6c1ff93af2ca1c54494e23cba8f389"}, - {file = "sqlalchemy-2.0.51-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1181256e0f16479691b5616d36375dc2620ad8332b25978763c3d206ad3f3f1d"}, - {file = "sqlalchemy-2.0.51-cp312-cp312-win32.whl", hash = "sha256:9f380393be5abeb6815f68fd39271b95127173511b6706b0a630a9995d53f8f5"}, - {file = "sqlalchemy-2.0.51-cp312-cp312-win_amd64.whl", hash = "sha256:2cf39aabdf48e87c1c2c2ed6d20d33ffa0733b3071ce9c5f66357947dd009080"}, - {file = "sqlalchemy-2.0.51-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7c2056838b6685b72fdb36c99996cf862753461a62f2e84f4196371d3b2d6a07"}, - {file = "sqlalchemy-2.0.51-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:483b11bd46bf35fc14c52faf338b04300c9e6ce554bce9b11be85bfec3bc3195"}, - {file = "sqlalchemy-2.0.51-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1bed1ee8b01da6088210aa9412023326fb98a599ba502e6118308601dcbef77f"}, - {file = "sqlalchemy-2.0.51-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:72ca54c952107ba5cd58854b67a5a6268631289d21651a1235396f3b98b47400"}, - {file = "sqlalchemy-2.0.51-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b3e693d15533a45cd5906f0589f9c35090bef6ef45bf1e8195c424aa0ae06a8d"}, - {file = "sqlalchemy-2.0.51-cp313-cp313-win32.whl", hash = "sha256:b93ab07b5292dbe7e6b8da89475275e7042744283921344b56105f3eeb0f828b"}, - {file = "sqlalchemy-2.0.51-cp313-cp313-win_amd64.whl", hash = "sha256:0f053118c30e53161857a953e4de667d90e274980dccbe5dd3829bbbeece72a5"}, - {file = "sqlalchemy-2.0.51-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6ea306caaae6bd5afd0a46050003c88f6bf33227377a49298c498c3cb88ff491"}, - {file = "sqlalchemy-2.0.51-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c45a496d6bc05dec41dcd4c3a2b183723f47473255c159cd80b503c8f246424d"}, - {file = "sqlalchemy-2.0.51-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4004ada0aafe8ae1991b2cd1d99c6d9146126e123bd6f883c260d974aa012e54"}, - {file = "sqlalchemy-2.0.51-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0f6bcad487aee1c638d707235682fc96f741de00663619881ab235400d03289e"}, - {file = "sqlalchemy-2.0.51-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:39a76529db6305693d8d4affa58ad5b5e2e18edd62daea628b29b97930b3513d"}, - {file = "sqlalchemy-2.0.51-cp314-cp314-win32.whl", hash = "sha256:08a204d8b5638717c26a24df18fcf40af45a6b22e35b70b1d62f0113c2e278e8"}, - {file = "sqlalchemy-2.0.51-cp314-cp314-win_amd64.whl", hash = "sha256:96747bfbadb055466e5b46d572618170046b45ce5a4879167f50d70a5319a499"}, - {file = "sqlalchemy-2.0.51-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e5ea1a213be1fcd5e49d9904c3b9939211ded90bc2a64e93f4c01963474285de"}, - {file = "sqlalchemy-2.0.51-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7c6b36ed71f41942bdcd2ad2522be46bfce09d5705be5640ecf19bbc7660e4b7"}, - {file = "sqlalchemy-2.0.51-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0c2c62877097e1a0db401fba5cb4debee33265e5b2a55c4ccb489c02c53b4f72"}, - {file = "sqlalchemy-2.0.51-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0378d055e9e8cd6ce4d8dff683bdd3d7d413533c4ee51d67a2b1e0f9eacc0f23"}, - {file = "sqlalchemy-2.0.51-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6e46fc36029eff666391e0531e5387b62ce6c4f1d8e50b3fb3099eaca1b42522"}, - {file = "sqlalchemy-2.0.51-cp314-cp314t-win32.whl", hash = "sha256:9161cfc9efce70d1715f47d6ff40f79c6778c00d53be4fbc09d70301e4b83ba7"}, - {file = "sqlalchemy-2.0.51-cp314-cp314t-win_amd64.whl", hash = "sha256:159bb6ba32059f57ad7375a8f50d844dd2f19d14954ecf820cd33e20debd46b2"}, - {file = "sqlalchemy-2.0.51-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bb1f5062f98b0b3290e72b707747fdd7e0f22d6956b236ba7ca7f5c9971d2da2"}, - {file = "sqlalchemy-2.0.51-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:247acaa29ccef6250dfd6a3eedf8f94ddf23564180a39fe362e32ae9dbdbde46"}, - {file = "sqlalchemy-2.0.51-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c95ef01f53233a305a874a44a63fbfb1d81cd79b49de0f8529b3548cde437e37"}, - {file = "sqlalchemy-2.0.51-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fa268106c8987639a17a18514cfe0cd9bf17420ab887e1e1bf486da8836135b1"}, - {file = "sqlalchemy-2.0.51-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b7f08588854bbb724041d9ae9d980d40040c922382e1d9a2ecb390edc4fd5032"}, - {file = "sqlalchemy-2.0.51-cp38-cp38-win32.whl", hash = "sha256:6b588fd681ddf0c196b8df1ea49a8913514894b2b8f945a9511b4b48871f99c8"}, - {file = "sqlalchemy-2.0.51-cp38-cp38-win_amd64.whl", hash = "sha256:ca216e8af5c05e326efc7e28716ac2381a7cf9791749f5ee1849dccdc99c9b00"}, - {file = "sqlalchemy-2.0.51-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:aa18ae738b5170e253ad0bb6c4b0f07585081e8a6e50893e4d911d47b39a0904"}, - {file = "sqlalchemy-2.0.51-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:59cab3686b1bc039dd9cded2f8d0c08a246e84e76bd4ab5b4f18c7cdae293825"}, - {file = "sqlalchemy-2.0.51-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:111604e637da87031255ddc26c7d7bc22bc6af6f5d459ccff3af1b4660233a85"}, - {file = "sqlalchemy-2.0.51-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ad30ae663711786303fbcd46a47516302d201ee49a877cb3fac61f672895110a"}, - {file = "sqlalchemy-2.0.51-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b21f0e7efc7a5c509e953784e9d1575ebb8b4318960e7e7d7a93bb803626cf64"}, - {file = "sqlalchemy-2.0.51-cp39-cp39-win32.whl", hash = "sha256:a42ad6afcbaaa777241e347aa2e29155993045a0d6b7db74da61053ffe875fe0"}, - {file = "sqlalchemy-2.0.51-cp39-cp39-win_amd64.whl", hash = "sha256:2a97eaad21c84b4ef8010b11eeba9fe6153eb0b3df3ff8b6abc309df1b978ef7"}, - {file = "sqlalchemy-2.0.51-py3-none-any.whl", hash = "sha256:bb024d8b621d0be75f4f44ecc7c950450026e76d66dc8f791bb5331d7fed59d5"}, - {file = "sqlalchemy-2.0.51.tar.gz", hash = "sha256:804dccd8a4a6242c4e30ad961e540e18a588f6527202f2d6791b01845d59fdc9"}, + {file = "sqlalchemy-2.0.52-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a7438774e1091192fc50a2bd8ceff5c596912d00ecd46587e88effdea7826101"}, + {file = "sqlalchemy-2.0.52-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c1b7ed45bf87b214e0a9def9c2313949067efe6269db5ef18d542ee13250af7"}, + {file = "sqlalchemy-2.0.52-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:309cc8ba50fc5d2174189dfcd49cdf7aa711f8346afcff19f2642ae4fc449c14"}, + {file = "sqlalchemy-2.0.52-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2f9eccf8793c8c3f8dd2dfd11b9e400cb27d1d19370ef732b66017e212107822"}, + {file = "sqlalchemy-2.0.52-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9255ceb65a80c1b001129060b63ee776a2e9c288be3b662be36dfbb888fffdcd"}, + {file = "sqlalchemy-2.0.52-cp310-cp310-win32.whl", hash = "sha256:2e15b1d1116a64fc399b8c2694a83f3e792fdc58df28514a81e1dc4f8cf22729"}, + {file = "sqlalchemy-2.0.52-cp310-cp310-win_amd64.whl", hash = "sha256:11560064cc4696e772298b6221ede59e646386d9f2a85d549365473b972f7850"}, + {file = "sqlalchemy-2.0.52-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0c3ce43907374889f3352bdcc6195c970148a2cb71574cd0237a5071a37fb6c"}, + {file = "sqlalchemy-2.0.52-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a0d48c4b80717c61385b4e966e087c839a66cfd7b780641dcb428f4dba65608"}, + {file = "sqlalchemy-2.0.52-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:938325a5373267afc53bfbe72983b20fbd64ca47842aac62433c3da1137ecff1"}, + {file = "sqlalchemy-2.0.52-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5f8438a98d49424acf69d0d53c0a522951dfe49a6f2d86417fbb37ad3066ab43"}, + {file = "sqlalchemy-2.0.52-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4699dbb8d396d199e7e78fd4d525e3ad3d6008a9c8c0160b87e74c606c2c3736"}, + {file = "sqlalchemy-2.0.52-cp311-cp311-win32.whl", hash = "sha256:cef328349452ae152637df4d11ce5a0919ecdf0a363e16c830c3518ee33bde72"}, + {file = "sqlalchemy-2.0.52-cp311-cp311-win_amd64.whl", hash = "sha256:f1c850792a3b25a3ad74dade3f05e4f402cdebfea27438bcadafaa1617f77bcc"}, + {file = "sqlalchemy-2.0.52-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be8c49131665dfe2cc74c498aa1240ffb548d0fd901325dd11c2c7a18956f727"}, + {file = "sqlalchemy-2.0.52-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b2d9e507a458832adcfbd8af6e2036ddf069b7710b799448542ebccae2dceee"}, + {file = "sqlalchemy-2.0.52-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8738008376d22f30f411ea3efecf39b51110b6996d80bb73786f30bcfdd5fd3b"}, + {file = "sqlalchemy-2.0.52-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37a4d548327b6cab9c7d8cdb4e0e82feabee0110c4d150059068e2d1cfbd99ee"}, + {file = "sqlalchemy-2.0.52-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e49f51a5d59857a7a0dcaf9469febf7197d9394bd88f00d69c2c4e848112cdbf"}, + {file = "sqlalchemy-2.0.52-cp312-cp312-win32.whl", hash = "sha256:afda3ec521d0517d0de783fc70030775841900896d832de5bbd066549290470e"}, + {file = "sqlalchemy-2.0.52-cp312-cp312-win_amd64.whl", hash = "sha256:2d5e53e36e37129fe0be8b9d08b6e4052c10a963ee6cda56c8c10dcc194b99ca"}, + {file = "sqlalchemy-2.0.52-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2eb3c6a64b1bfe6704777cfd504e7b8ad093a5f3e03ce67663a5e6742f294e43"}, + {file = "sqlalchemy-2.0.52-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:923bb183c1dc64fdf7b717965e3d59938ec4f8b8710b419a21ce403e5da9a9e1"}, + {file = "sqlalchemy-2.0.52-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:651d6d8782e80679e6151707c7b490834d46ada526328895abf567f25e63d29c"}, + {file = "sqlalchemy-2.0.52-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b08cddb8989775e3c88799d86704bdfc3ee6e9846118201aa5997f16f27e3a15"}, + {file = "sqlalchemy-2.0.52-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ab66fa9618269390d4dfa222f2f2f88f7bc4bf5da13905131b818217db7e8057"}, + {file = "sqlalchemy-2.0.52-cp313-cp313-win32.whl", hash = "sha256:c63bda077685c85ca513286547a531ba57e7a68cf0a7ed3bafcc2bbd18896f4d"}, + {file = "sqlalchemy-2.0.52-cp313-cp313-win_amd64.whl", hash = "sha256:9876b09b9f1ce7398b0ffece585c0a911244c53191187341f6bcae640e133751"}, + {file = "sqlalchemy-2.0.52-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:410d52be41d17f1a236d19520fbe776257dc16516ed06bd16d433311842aefd9"}, + {file = "sqlalchemy-2.0.52-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfe9ce533dbe4d0a2ae1486546619bd30b76bcd670539a44d910361376175f5e"}, + {file = "sqlalchemy-2.0.52-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:812bae5138bfc0aa46fb0686da0fc7f581f68e2bbb05bc24c3713bebaedd1437"}, + {file = "sqlalchemy-2.0.52-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:50bff43b632a56fbf5ed9afdd76307e1512b62051bcd5afb341ae67205bbb6c8"}, + {file = "sqlalchemy-2.0.52-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:49565daf5af554f538e23aef1fc81a95a4e49658f152285e45c02f5fc44f04cd"}, + {file = "sqlalchemy-2.0.52-cp314-cp314-win32.whl", hash = "sha256:ab9da41e61b9979b910499d633b241df20c51ee5037e5405b11c2faac3cbe1a2"}, + {file = "sqlalchemy-2.0.52-cp314-cp314-win_amd64.whl", hash = "sha256:a593db51b3bae75db17a5738ad5f992244b3a03863f83c28117ee482c6a3f76d"}, + {file = "sqlalchemy-2.0.52-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1e61d08bdf4ee2f41024569e3400de7d6734ba498144766b11260936ccfa582"}, + {file = "sqlalchemy-2.0.52-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1b92a1e23ed40022081217b40d2d1feba4f77064e69ef4f39f68bcbbd148452a"}, + {file = "sqlalchemy-2.0.52-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77a247d3fd179f6583171e7e0e98f40dc6642ed4f655557515a5a7e25923e9a4"}, + {file = "sqlalchemy-2.0.52-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd9206024b8602e7518bbaf44016c29e0045722f09328d8e654941023920d0b3"}, + {file = "sqlalchemy-2.0.52-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:46f0c46f0d360d727b84660b26c62b295d82306ec2c82b701e97747d2c6dcbe1"}, + {file = "sqlalchemy-2.0.52-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:df8f213ceb485d8227b74935eb87ba0d80169a8401eba7835da6e30d6727dac4"}, + {file = "sqlalchemy-2.0.52-cp38-cp38-win32.whl", hash = "sha256:f2b09029ef6f260409eefa5dc2b8276f6c3d7b892bfb50d50e8f852257d4a6b4"}, + {file = "sqlalchemy-2.0.52-cp38-cp38-win_amd64.whl", hash = "sha256:765f439da5bc8696973bc0c8a31fae0912ac3ff1cb9d66246a6b2728ee4fbbc8"}, + {file = "sqlalchemy-2.0.52-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4b89e93bb89eabdbea9d5d3fa2d6cc6544e733c33064339f91e5292480cf130e"}, + {file = "sqlalchemy-2.0.52-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cf993f065bc04caa5000b339e8d9d6f3d9d00251511f850147c516c9e07115f"}, + {file = "sqlalchemy-2.0.52-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cce4922535db73f9dbb91e3db2b3e851ac629467fd1ebd8e354a60e369521c63"}, + {file = "sqlalchemy-2.0.52-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2f5fa2b2aca75d2c7f36db3a8dd04717b6fbfd1a964fb32bdeae16698e475ab3"}, + {file = "sqlalchemy-2.0.52-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f4d4f7afc682961dc567db70e00a7b5bd81ccd3743c46199b0257f0744902dde"}, + {file = "sqlalchemy-2.0.52-cp39-cp39-win32.whl", hash = "sha256:de89de5b5798cafdd7ef7b7b804acec246d6152922128fd9d156cd1701271aff"}, + {file = "sqlalchemy-2.0.52-cp39-cp39-win_amd64.whl", hash = "sha256:3c95c3044edddb65e4a2f7194ec52ca5a9736f72d33ca3a6fa4196aedcc689fd"}, + {file = "sqlalchemy-2.0.52-py3-none-any.whl", hash = "sha256:3b81b8363a919ce53453591cdb93702e6bd54ade6c4fa2f468fc053baee5ed89"}, + {file = "sqlalchemy-2.0.52.tar.gz", hash = "sha256:5e2d46356ac2ccb7d268ab6c2319ac6a2b42f1b8d5fd8bd3d46855cd82abee97"}, ] [package.dependencies] @@ -832,7 +944,7 @@ aiomysql = ["aiomysql (>=0.2.0)", "greenlet (>=1)"] aioodbc = ["aioodbc", "greenlet (>=1)"] aiosqlite = ["aiosqlite", "greenlet (>=1)", "typing_extensions (!=3.10.0.1)"] asyncio = ["greenlet (>=1)"] -asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (>=1)"] +asyncmy = ["asyncmy (>=0.2.12)", "greenlet (>=1)"] mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10)"] mssql = ["pyodbc"] mssql-pymssql = ["pymssql"] @@ -854,14 +966,14 @@ sqlcipher = ["sqlcipher3_binary"] [[package]] name = "starlette" -version = "1.3.1" +version = "1.6.0" description = "The little ASGI library that shines." optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6"}, - {file = "starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0"}, + {file = "starlette-1.6.0-py3-none-any.whl", hash = "sha256:a86dd39d14bb45f85a3d18525215a9ef0cfd1f192ac793220e72598c90335f0c"}, + {file = "starlette-1.6.0.tar.gz", hash = "sha256:d4e3ac5e546444960c710297a3c9fc3f7ebae1b7e963f3d36173b49da535be9b"}, ] [package.dependencies] @@ -884,18 +996,18 @@ files = [ [[package]] name = "typing-inspection" -version = "0.4.2" +version = "0.4.4" description = "Runtime typing introspection tools" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] files = [ - {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, - {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, + {file = "typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147"}, + {file = "typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47"}, ] [package.dependencies] -typing-extensions = ">=4.12.0" +typing-extensions = ">=4.15.0" [[package]] name = "uvicorn" @@ -919,4 +1031,4 @@ standard = ["httptools (>=0.8.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", " [metadata] lock-version = "2.1" python-versions = ">=3.14" -content-hash = "12237e282922c5df93f21b4ec91ac2dfb66ff8d8f8effc674e941df4bc176e32" +content-hash = "025b39dfd1b92613ea1308968ad638dcee4d00682fdbc491757093d4df0ced0a" diff --git a/pyproject.toml b/pyproject.toml index 5c22b54..17dbaa7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,11 +1,11 @@ [project] -name = "test" +name = "auth-project" version = "0.1.0" -description = "test task for the company" +description = "" authors = [ {name = "MH.Dmitrii",email = "MH.Dmitrii@homyk.space"} ] -license = "example project" +readme = "README.md" requires-python = ">=3.14" dependencies = [ "uvicorn (>=0.51.0,<0.52.0)", @@ -16,10 +16,16 @@ dependencies = [ "bcrypt (>=5.0.0,<6.0.0)", "python-jose (>=3.5.0,<4.0.0)", "alembic (>=1.18.5,<2.0.0)", - "python-multipart (>=0.0.32,<0.0.33)" + "python-multipart (>=0.0.32,<0.0.33)", + "pytest (>=9.1.1,<10.0.0)", + "allure-pytest (>=2.16.0,<3.0.0)" ] [build-system] requires = ["poetry-core>=2.0.0,<3.0.0"] build-backend = "poetry.core.masonry.api" + +[tool.poetry] +package-mode = false + diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..92031d2 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,14 @@ +[pytest] +addopts = + -l + -v + -s + --alluredir=./src/tests/allure-results/reports/ +testpaths = + ./src/tests +pythonpath = . +markers= + unit: unit tests + integra: integrations test + e2e: e2e tests + smoke: smoke tests \ No newline at end of file diff --git a/readme.md b/readme.md index 7033a50..e82ef63 100644 --- a/readme.md +++ b/readme.md @@ -142,13 +142,16 @@ src/ errors/ # centralized HTTP errors (401/403/404) web/ # FastAPI routers (endpoints) migrations/ # DB migrations - tests/ # tests (empty, not yet created) + tests/ # tests (unit, integration) ``` ## Running ```bash -poetry +python3 -m venv .venv +source .venv/bin/activate +pip install poetry +poetry install make run ``` -Rename env +Rename env and fill with correct data diff --git a/src/service/crud_actions/crud.py b/src/service/crud_actions/crud.py index 67f0eda..20ef546 100644 --- a/src/service/crud_actions/crud.py +++ b/src/service/crud_actions/crud.py @@ -1,8 +1,10 @@ from src.db.database import ActionsDB -from src.service.JWT.jwt import Hash from src.errors.errors import errors from src.model.database_model.model import User -from src.model.user.user_model import UserOut, UserCreate, UserUpdate +from src.model.user.user_model import UserCreate, UserOut, UserUpdate +from src.service.JWT.jwt import Hash + + class CrudActions: def __init__(self) -> None: diff --git a/src/tests/allure-results/reports/0a41b58f-49ba-4236-b469-66cfa32e377c-result.json b/src/tests/allure-results/reports/0a41b58f-49ba-4236-b469-66cfa32e377c-result.json new file mode 100644 index 0000000..9f4c113 --- /dev/null +++ b/src/tests/allure-results/reports/0a41b58f-49ba-4236-b469-66cfa32e377c-result.json @@ -0,0 +1 @@ +{"name": "test_hash_check_correct_password", "status": "passed", "start": 1788097233929, "stop": 1788097234393, "uuid": "44e3961e-73dd-40ef-ae9a-9daae573768b", "historyId": "8234cd4dcec9159bea6a535bf4b5d2d7", "testCaseId": "8234cd4dcec9159bea6a535bf4b5d2d7", "fullName": "src.tests.test_unit.TestHash#test_hash_check_correct_password", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestHash"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12798-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestHash"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/0ea8a2e9-8045-42f6-b397-0ed9e31ac5bb-container.json b/src/tests/allure-results/reports/0ea8a2e9-8045-42f6-b397-0ed9e31ac5bb-container.json new file mode 100644 index 0000000..a058852 --- /dev/null +++ b/src/tests/allure-results/reports/0ea8a2e9-8045-42f6-b397-0ed9e31ac5bb-container.json @@ -0,0 +1 @@ +{"uuid": "f220f952-f4d3-434d-93ea-886bf4fd2e35", "children": ["083be05a-17cc-4d3d-8a7b-54bd6077528f"], "befores": [{"name": "auth_service", "status": "passed", "start": 1788097548392, "stop": 1788097548393}], "afters": [{"name": "auth_service::", "start": 1788097548393}], "start": 1788097548392, "stop": 1788097548393} \ No newline at end of file diff --git a/src/tests/allure-results/reports/0f031685-3a29-4c26-8847-efb00bfcd985-container.json b/src/tests/allure-results/reports/0f031685-3a29-4c26-8847-efb00bfcd985-container.json new file mode 100644 index 0000000..f24b816 --- /dev/null +++ b/src/tests/allure-results/reports/0f031685-3a29-4c26-8847-efb00bfcd985-container.json @@ -0,0 +1 @@ +{"uuid": "7c78896f-a4e9-4b6c-a4d4-c1c665820474", "children": ["cf7c1ee6-0e3e-49b9-a838-6ec48d04da76"], "befores": [{"name": "hash_service", "status": "passed", "start": 1788097549579, "stop": 1788097549579}], "afters": [{"name": "hash_service::", "start": 1788097550042}], "start": 1788097549579, "stop": 1788097550042} \ No newline at end of file diff --git a/src/tests/allure-results/reports/0fb5772c-a493-457e-9900-97837544fe23-result.json b/src/tests/allure-results/reports/0fb5772c-a493-457e-9900-97837544fe23-result.json new file mode 100644 index 0000000..b9aa91c --- /dev/null +++ b/src/tests/allure-results/reports/0fb5772c-a493-457e-9900-97837544fe23-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_invalid_token_raises", "status": "passed", "start": 1788097328623, "stop": 1788097328623, "uuid": "b9926dd9-7c45-4546-86c7-179c054d5797", "historyId": "7705ae2486355c9da637701bab1426a4", "testCaseId": "7705ae2486355c9da637701bab1426a4", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_invalid_token_raises", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12923-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/1acfd781-6b24-431c-ab5f-2c4dc4fc64f4-container.json b/src/tests/allure-results/reports/1acfd781-6b24-431c-ab5f-2c4dc4fc64f4-container.json new file mode 100644 index 0000000..d744c0f --- /dev/null +++ b/src/tests/allure-results/reports/1acfd781-6b24-431c-ab5f-2c4dc4fc64f4-container.json @@ -0,0 +1 @@ +{"uuid": "731694e5-c0ca-4c09-a3e5-5612b4c41b31", "children": ["e3224398-4a6f-4ce8-83e3-9398df50bec4"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097328625, "stop": 1788097328625}], "afters": [{"name": "jwt_service::", "start": 1788097328625}], "start": 1788097328625, "stop": 1788097328625} \ No newline at end of file diff --git a/src/tests/allure-results/reports/1edc0bc1-c3a1-4e6b-a349-bc6eb9cfd5c8-result.json b/src/tests/allure-results/reports/1edc0bc1-c3a1-4e6b-a349-bc6eb9cfd5c8-result.json new file mode 100644 index 0000000..9c1a815 --- /dev/null +++ b/src/tests/allure-results/reports/1edc0bc1-c3a1-4e6b-a349-bc6eb9cfd5c8-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_create_sets_expiration", "status": "passed", "start": 1788097233088, "stop": 1788097233088, "uuid": "566a3425-3b64-4f84-b622-41c50527f8e2", "historyId": "5c07e76c30d18889e8a32342379fbcf8", "testCaseId": "5c07e76c30d18889e8a32342379fbcf8", "fullName": "src.tests.test_unit.TestJWT#test_jwt_create_sets_expiration", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12798-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/226f3315-23a1-4caf-8f11-26e693ec0969-result.json b/src/tests/allure-results/reports/226f3315-23a1-4caf-8f11-26e693ec0969-result.json new file mode 100644 index 0000000..4985cc7 --- /dev/null +++ b/src/tests/allure-results/reports/226f3315-23a1-4caf-8f11-26e693ec0969-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_valid_token", "status": "passed", "start": 1788097233089, "stop": 1788097233089, "uuid": "3eb86acc-7e39-4e27-9811-6fa31c74322e", "historyId": "db318b748342fd7cf63b1dc90fda2a1e", "testCaseId": "db318b748342fd7cf63b1dc90fda2a1e", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_valid_token", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12798-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/238f3419-5ce0-4cfa-9f8b-89510846808f-container.json b/src/tests/allure-results/reports/238f3419-5ce0-4cfa-9f8b-89510846808f-container.json new file mode 100644 index 0000000..9cb11c5 --- /dev/null +++ b/src/tests/allure-results/reports/238f3419-5ce0-4cfa-9f8b-89510846808f-container.json @@ -0,0 +1 @@ +{"uuid": "9a290e3e-1593-4833-81ca-2ef1dc01c1d9", "children": ["a43f4047-dc4f-42b8-bd6d-bab0166942b9"], "befores": [{"name": "auth_service", "status": "passed", "start": 1788097548381, "stop": 1788097548382}], "afters": [{"name": "auth_service::", "start": 1788097548382}], "start": 1788097548381, "stop": 1788097548382} \ No newline at end of file diff --git a/src/tests/allure-results/reports/2476645f-7740-47f7-9fc5-21ef9b758ee2-result.json b/src/tests/allure-results/reports/2476645f-7740-47f7-9fc5-21ef9b758ee2-result.json new file mode 100644 index 0000000..800f52c --- /dev/null +++ b/src/tests/allure-results/reports/2476645f-7740-47f7-9fc5-21ef9b758ee2-result.json @@ -0,0 +1 @@ +{"name": "test_plain_to_hash_different_salts", "status": "passed", "start": 1788097548641, "stop": 1788097549106, "uuid": "91675774-5ad3-4c58-8669-a1e2b31bb427", "historyId": "3666f517875b1b739cc354dc067f581d", "testCaseId": "3666f517875b1b739cc354dc067f581d", "fullName": "src.tests.test_unit.TestHash#test_plain_to_hash_different_salts", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestHash"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestHash"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/24d144e6-0768-4825-8e25-8baf46f29968-result.json b/src/tests/allure-results/reports/24d144e6-0768-4825-8e25-8baf46f29968-result.json new file mode 100644 index 0000000..ff50294 --- /dev/null +++ b/src/tests/allure-results/reports/24d144e6-0768-4825-8e25-8baf46f29968-result.json @@ -0,0 +1 @@ +{"name": "test_hash_check_correct_password", "status": "passed", "start": 1788097329358, "stop": 1788097329821, "uuid": "2f5a7658-1c16-4f0f-9821-05d62dff2f7a", "historyId": "8234cd4dcec9159bea6a535bf4b5d2d7", "testCaseId": "8234cd4dcec9159bea6a535bf4b5d2d7", "fullName": "src.tests.test_unit.TestHash#test_hash_check_correct_password", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestHash"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12923-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestHash"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/25ba8bf4-0d04-45c8-bb15-8eb79643c8e7-container.json b/src/tests/allure-results/reports/25ba8bf4-0d04-45c8-bb15-8eb79643c8e7-container.json new file mode 100644 index 0000000..b238978 --- /dev/null +++ b/src/tests/allure-results/reports/25ba8bf4-0d04-45c8-bb15-8eb79643c8e7-container.json @@ -0,0 +1 @@ +{"uuid": "3907b047-6f1d-4dd7-a204-b6ffcdacc3ef", "children": ["ac9a5e7f-ff40-443c-b73b-d63e8d5d3c7c"], "befores": [{"name": "hash_service", "status": "passed", "start": 1788097329822, "stop": 1788097329822}], "afters": [{"name": "hash_service::", "start": 1788097330284}], "start": 1788097329822, "stop": 1788097330284} \ No newline at end of file diff --git a/src/tests/allure-results/reports/26219ae6-eb8d-4fcd-a353-7c9f730b5e5e-container.json b/src/tests/allure-results/reports/26219ae6-eb8d-4fcd-a353-7c9f730b5e5e-container.json new file mode 100644 index 0000000..b47bbf9 --- /dev/null +++ b/src/tests/allure-results/reports/26219ae6-eb8d-4fcd-a353-7c9f730b5e5e-container.json @@ -0,0 +1 @@ +{"uuid": "d98bc8ff-4883-4180-a8e9-76dee298ee90", "children": ["566a3425-3b64-4f84-b622-41c50527f8e2"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097233088, "stop": 1788097233088}], "afters": [{"name": "jwt_service::", "start": 1788097233088}], "start": 1788097233088, "stop": 1788097233088} \ No newline at end of file diff --git a/src/tests/allure-results/reports/2626d31f-e961-4c1f-91e1-6946ebacfa7e-container.json b/src/tests/allure-results/reports/2626d31f-e961-4c1f-91e1-6946ebacfa7e-container.json new file mode 100644 index 0000000..ec23571 --- /dev/null +++ b/src/tests/allure-results/reports/2626d31f-e961-4c1f-91e1-6946ebacfa7e-container.json @@ -0,0 +1 @@ +{"uuid": "d8dc87ba-0218-401d-851a-ba8083383d9a", "children": ["db30220f-bf0f-4d5e-9e08-9ba19d8cc177"], "befores": [{"name": "hash_service", "status": "passed", "start": 1788097234394, "stop": 1788097234394}], "afters": [{"name": "hash_service::", "start": 1788097234857}], "start": 1788097234394, "stop": 1788097234857} \ No newline at end of file diff --git a/src/tests/allure-results/reports/2a4decf7-ee95-46ff-95d9-436186f96592-result.json b/src/tests/allure-results/reports/2a4decf7-ee95-46ff-95d9-436186f96592-result.json new file mode 100644 index 0000000..dde3a21 --- /dev/null +++ b/src/tests/allure-results/reports/2a4decf7-ee95-46ff-95d9-436186f96592-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_valid_token", "status": "passed", "start": 1788097328621, "stop": 1788097328621, "uuid": "39a876da-f76f-45d5-a37f-bc9094f51452", "historyId": "db318b748342fd7cf63b1dc90fda2a1e", "testCaseId": "db318b748342fd7cf63b1dc90fda2a1e", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_valid_token", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12923-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/2d0e593d-acb0-4581-9b9d-1f7b7dc9dd74-result.json b/src/tests/allure-results/reports/2d0e593d-acb0-4581-9b9d-1f7b7dc9dd74-result.json new file mode 100644 index 0000000..c6dc4ff --- /dev/null +++ b/src/tests/allure-results/reports/2d0e593d-acb0-4581-9b9d-1f7b7dc9dd74-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_wrong_secret_raises", "status": "passed", "start": 1788097328625, "stop": 1788097328625, "uuid": "e3224398-4a6f-4ce8-83e3-9398df50bec4", "historyId": "c6730563216ecc5eafa3eea7b0a0e330", "testCaseId": "c6730563216ecc5eafa3eea7b0a0e330", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_wrong_secret_raises", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12923-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/2ddf9871-2593-4326-af2d-e3508c708c4d-result.json b/src/tests/allure-results/reports/2ddf9871-2593-4326-af2d-e3508c708c4d-result.json new file mode 100644 index 0000000..b503a16 --- /dev/null +++ b/src/tests/allure-results/reports/2ddf9871-2593-4326-af2d-e3508c708c4d-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_invalid_token_raises", "status": "passed", "start": 1788097548400, "stop": 1788097548400, "uuid": "03693257-baa0-45e7-b133-1a8d9e5102c3", "historyId": "7705ae2486355c9da637701bab1426a4", "testCaseId": "7705ae2486355c9da637701bab1426a4", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_invalid_token_raises", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/33678c58-8456-4336-86bb-3df5ef60f6c1-container.json b/src/tests/allure-results/reports/33678c58-8456-4336-86bb-3df5ef60f6c1-container.json new file mode 100644 index 0000000..50970a9 --- /dev/null +++ b/src/tests/allure-results/reports/33678c58-8456-4336-86bb-3df5ef60f6c1-container.json @@ -0,0 +1 @@ +{"uuid": "d63e5c84-f0e8-48d3-8075-2791535e0edb", "children": ["28b97d35-2950-4ad6-a165-9fa8b8463ca5"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097328620, "stop": 1788097328620}], "afters": [{"name": "jwt_service::", "start": 1788097328620}], "start": 1788097328620, "stop": 1788097328620} \ No newline at end of file diff --git a/src/tests/allure-results/reports/34bf58b7-6cc7-4828-925d-9c5cfcef18bb-result.json b/src/tests/allure-results/reports/34bf58b7-6cc7-4828-925d-9c5cfcef18bb-result.json new file mode 100644 index 0000000..7e56015 --- /dev/null +++ b/src/tests/allure-results/reports/34bf58b7-6cc7-4828-925d-9c5cfcef18bb-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_create_sets_expiration", "status": "passed", "start": 1788097328620, "stop": 1788097328620, "uuid": "28b97d35-2950-4ad6-a165-9fa8b8463ca5", "historyId": "5c07e76c30d18889e8a32342379fbcf8", "testCaseId": "5c07e76c30d18889e8a32342379fbcf8", "fullName": "src.tests.test_unit.TestJWT#test_jwt_create_sets_expiration", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12923-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/377c0559-72bb-4643-8c8b-587706af5ba1-result.json b/src/tests/allure-results/reports/377c0559-72bb-4643-8c8b-587706af5ba1-result.json new file mode 100644 index 0000000..2d7f028 --- /dev/null +++ b/src/tests/allure-results/reports/377c0559-72bb-4643-8c8b-587706af5ba1-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_valid_token", "status": "passed", "start": 1788097548398, "stop": 1788097548398, "uuid": "7972ebcb-c2a0-4a8d-b643-7c63683869b3", "historyId": "db318b748342fd7cf63b1dc90fda2a1e", "testCaseId": "db318b748342fd7cf63b1dc90fda2a1e", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_valid_token", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/38fa7539-879e-46b4-bc89-aa329380e408-container.json b/src/tests/allure-results/reports/38fa7539-879e-46b4-bc89-aa329380e408-container.json new file mode 100644 index 0000000..730fd0c --- /dev/null +++ b/src/tests/allure-results/reports/38fa7539-879e-46b4-bc89-aa329380e408-container.json @@ -0,0 +1 @@ +{"uuid": "1dab7693-21af-4eee-a036-08170e5fa17c", "children": ["44e3961e-73dd-40ef-ae9a-9daae573768b"], "befores": [{"name": "hash_service", "status": "passed", "start": 1788097233929, "stop": 1788097233929}], "afters": [{"name": "hash_service::", "start": 1788097234393}], "start": 1788097233929, "stop": 1788097234393} \ No newline at end of file diff --git a/src/tests/allure-results/reports/3a816c56-5f32-46b7-84fb-b975779f88bb-result.json b/src/tests/allure-results/reports/3a816c56-5f32-46b7-84fb-b975779f88bb-result.json new file mode 100644 index 0000000..1fbb7ea --- /dev/null +++ b/src/tests/allure-results/reports/3a816c56-5f32-46b7-84fb-b975779f88bb-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_expired_token_raises", "status": "passed", "start": 1788097328624, "stop": 1788097328624, "uuid": "bcbfdcd1-47c0-4e88-870b-029d7bdfdb9b", "historyId": "fc79edd65e47b667cd9d304f63d6887b", "testCaseId": "fc79edd65e47b667cd9d304f63d6887b", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_expired_token_raises", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12923-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/3b0668ff-b68b-4047-aef6-e2bc27bc0732-container.json b/src/tests/allure-results/reports/3b0668ff-b68b-4047-aef6-e2bc27bc0732-container.json new file mode 100644 index 0000000..a7c0adb --- /dev/null +++ b/src/tests/allure-results/reports/3b0668ff-b68b-4047-aef6-e2bc27bc0732-container.json @@ -0,0 +1 @@ +{"uuid": "e0f092cb-78b2-4141-82f8-60d9f356fcdc", "children": ["03b594df-ac42-4f8d-909d-cea9c3248cbe"], "befores": [{"name": "hash_service", "status": "passed", "start": 1788097548402, "stop": 1788097548402}], "afters": [{"name": "hash_service::", "start": 1788097548640}], "start": 1788097548402, "stop": 1788097548640} \ No newline at end of file diff --git a/src/tests/allure-results/reports/4172b5db-b5b6-4513-9eb8-514c1708cb28-container.json b/src/tests/allure-results/reports/4172b5db-b5b6-4513-9eb8-514c1708cb28-container.json new file mode 100644 index 0000000..3ed4c7e --- /dev/null +++ b/src/tests/allure-results/reports/4172b5db-b5b6-4513-9eb8-514c1708cb28-container.json @@ -0,0 +1 @@ +{"uuid": "46a2ecb5-4be1-43a0-89f1-74d874e3012c", "children": ["51dd8a2c-88ac-47a1-bd79-e12d967c3f03"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097328618, "stop": 1788097328618}], "afters": [{"name": "jwt_service::", "start": 1788097328619}], "start": 1788097328618, "stop": 1788097328619} \ No newline at end of file diff --git a/src/tests/allure-results/reports/419f005a-c91f-4b80-8451-090d74c1272f-result.json b/src/tests/allure-results/reports/419f005a-c91f-4b80-8451-090d74c1272f-result.json new file mode 100644 index 0000000..126dbae --- /dev/null +++ b/src/tests/allure-results/reports/419f005a-c91f-4b80-8451-090d74c1272f-result.json @@ -0,0 +1 @@ +{"name": "test_create_token_success", "status": "passed", "start": 1788097548382, "stop": 1788097548382, "uuid": "a43f4047-dc4f-42b8-bd6d-bab0166942b9", "historyId": "a11f0186cb09a3c34bed4155bfc55594", "testCaseId": "a11f0186cb09a3c34bed4155bfc55594", "fullName": "src.tests.test_integra.TestCreateToken#test_create_token_success", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_integra"}, {"name": "subSuite", "value": "TestCreateToken"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_integra"}], "titlePath": ["src", "tests", "test_integra.py", "TestCreateToken"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/433883b9-93a3-4556-9dec-f91b7d8e33ac-container.json b/src/tests/allure-results/reports/433883b9-93a3-4556-9dec-f91b7d8e33ac-container.json new file mode 100644 index 0000000..2786711 --- /dev/null +++ b/src/tests/allure-results/reports/433883b9-93a3-4556-9dec-f91b7d8e33ac-container.json @@ -0,0 +1 @@ +{"uuid": "a2df6459-0134-4d6a-b400-6439f142c5e7", "children": ["6f92e0ba-2336-416a-b973-976c454a15e8"], "befores": [{"name": "hash_service", "status": "passed", "start": 1788097233226, "stop": 1788097233226}], "afters": [{"name": "hash_service::", "start": 1788097233459}], "start": 1788097233226, "stop": 1788097233459} \ No newline at end of file diff --git a/src/tests/allure-results/reports/4a699f2c-f037-4a02-9452-596c7206ba82-container.json b/src/tests/allure-results/reports/4a699f2c-f037-4a02-9452-596c7206ba82-container.json new file mode 100644 index 0000000..9d4daa7 --- /dev/null +++ b/src/tests/allure-results/reports/4a699f2c-f037-4a02-9452-596c7206ba82-container.json @@ -0,0 +1 @@ +{"uuid": "349a7660-64d0-46a9-bc23-d72948568562", "children": ["5a0110d7-04ef-4003-9b16-021bc4a657d8"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097233090, "stop": 1788097233090}], "afters": [{"name": "jwt_service::", "start": 1788097233129}], "start": 1788097233090, "stop": 1788097233129} \ No newline at end of file diff --git a/src/tests/allure-results/reports/4cb37c68-df87-4b5d-bbe5-34b0ca9c0de8-result.json b/src/tests/allure-results/reports/4cb37c68-df87-4b5d-bbe5-34b0ca9c0de8-result.json new file mode 100644 index 0000000..7c0dab1 --- /dev/null +++ b/src/tests/allure-results/reports/4cb37c68-df87-4b5d-bbe5-34b0ca9c0de8-result.json @@ -0,0 +1 @@ +{"name": "test_create_token_deactivated_user", "status": "passed", "start": 1788097548389, "stop": 1788097548389, "uuid": "d65da4be-6fb4-4cfe-b6dd-d40a7a5128b6", "historyId": "4faa45dba2fd165591afacd0e34835f0", "testCaseId": "4faa45dba2fd165591afacd0e34835f0", "fullName": "src.tests.test_integra.TestCreateToken#test_create_token_deactivated_user", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_integra"}, {"name": "subSuite", "value": "TestCreateToken"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_integra"}], "titlePath": ["src", "tests", "test_integra.py", "TestCreateToken"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/5249065c-77e8-46f7-ac0b-ce1de6a0421e-result.json b/src/tests/allure-results/reports/5249065c-77e8-46f7-ac0b-ce1de6a0421e-result.json new file mode 100644 index 0000000..881df1c --- /dev/null +++ b/src/tests/allure-results/reports/5249065c-77e8-46f7-ac0b-ce1de6a0421e-result.json @@ -0,0 +1 @@ +{"name": "test_hash_check_wrong_password", "status": "passed", "start": 1788097329822, "stop": 1788097330284, "uuid": "ac9a5e7f-ff40-443c-b73b-d63e8d5d3c7c", "historyId": "ecd8b6476e1ad7c1e4167c4a2ef1dde7", "testCaseId": "ecd8b6476e1ad7c1e4167c4a2ef1dde7", "fullName": "src.tests.test_unit.TestHash#test_hash_check_wrong_password", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestHash"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12923-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestHash"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/52e29e61-6102-4314-9bc6-104b3d523fa5-result.json b/src/tests/allure-results/reports/52e29e61-6102-4314-9bc6-104b3d523fa5-result.json new file mode 100644 index 0000000..0d18316 --- /dev/null +++ b/src/tests/allure-results/reports/52e29e61-6102-4314-9bc6-104b3d523fa5-result.json @@ -0,0 +1 @@ +{"name": "test_get_current_user_success", "status": "passed", "start": 1788097548390, "stop": 1788097548390, "uuid": "0665c27e-aa31-4d58-a849-838949063005", "historyId": "7baf12efacddb4ab78cf149ea4688db9", "testCaseId": "7baf12efacddb4ab78cf149ea4688db9", "fullName": "src.tests.test_integra.TestGetCurrentUser#test_get_current_user_success", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_integra"}, {"name": "subSuite", "value": "TestGetCurrentUser"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_integra"}], "titlePath": ["src", "tests", "test_integra.py", "TestGetCurrentUser"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/53b71076-bf07-4650-84dd-110d65b74bf1-container.json b/src/tests/allure-results/reports/53b71076-bf07-4650-84dd-110d65b74bf1-container.json new file mode 100644 index 0000000..ead7177 --- /dev/null +++ b/src/tests/allure-results/reports/53b71076-bf07-4650-84dd-110d65b74bf1-container.json @@ -0,0 +1 @@ +{"uuid": "72274f17-c896-4b0a-a4c0-c9dc9a90485a", "children": ["d65da4be-6fb4-4cfe-b6dd-d40a7a5128b6"], "befores": [{"name": "auth_service", "status": "passed", "start": 1788097548388, "stop": 1788097548388}], "afters": [{"name": "auth_service::", "start": 1788097548389}], "start": 1788097548388, "stop": 1788097548389} \ No newline at end of file diff --git a/src/tests/allure-results/reports/55e488d9-fc03-4670-be7d-e450e2b1fb8d-result.json b/src/tests/allure-results/reports/55e488d9-fc03-4670-be7d-e450e2b1fb8d-result.json new file mode 100644 index 0000000..a874758 --- /dev/null +++ b/src/tests/allure-results/reports/55e488d9-fc03-4670-be7d-e450e2b1fb8d-result.json @@ -0,0 +1 @@ +{"name": "test_plain_to_hash_returns_string", "status": "passed", "start": 1788097548402, "stop": 1788097548640, "uuid": "03b594df-ac42-4f8d-909d-cea9c3248cbe", "historyId": "878db88fbd2cfb1f0f53c9b1e01dc022", "testCaseId": "878db88fbd2cfb1f0f53c9b1e01dc022", "fullName": "src.tests.test_unit.TestHash#test_plain_to_hash_returns_string", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestHash"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestHash"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/60502c84-a775-4ec1-a768-331e4f25467a-result.json b/src/tests/allure-results/reports/60502c84-a775-4ec1-a768-331e4f25467a-result.json new file mode 100644 index 0000000..ec6e51a --- /dev/null +++ b/src/tests/allure-results/reports/60502c84-a775-4ec1-a768-331e4f25467a-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_wrong_secret_raises", "status": "passed", "start": 1788097548401, "stop": 1788097548401, "uuid": "f7387b9e-9d9f-418c-a3a9-271dd8b3aae9", "historyId": "c6730563216ecc5eafa3eea7b0a0e330", "testCaseId": "c6730563216ecc5eafa3eea7b0a0e330", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_wrong_secret_raises", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/6a804dfa-100d-4a83-a961-10c8e40b7d0b-result.json b/src/tests/allure-results/reports/6a804dfa-100d-4a83-a961-10c8e40b7d0b-result.json new file mode 100644 index 0000000..f2f7411 --- /dev/null +++ b/src/tests/allure-results/reports/6a804dfa-100d-4a83-a961-10c8e40b7d0b-result.json @@ -0,0 +1 @@ +{"name": "test_plain_to_hash_different_salts", "status": "passed", "start": 1788097328861, "stop": 1788097329356, "uuid": "ef120c06-6d4a-48a5-ab95-e5a86f4503c3", "historyId": "3666f517875b1b739cc354dc067f581d", "testCaseId": "3666f517875b1b739cc354dc067f581d", "fullName": "src.tests.test_unit.TestHash#test_plain_to_hash_different_salts", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestHash"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12923-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestHash"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/6d0c5a7f-31c0-4ad0-b7d0-b506c3438e40-container.json b/src/tests/allure-results/reports/6d0c5a7f-31c0-4ad0-b7d0-b506c3438e40-container.json new file mode 100644 index 0000000..5e59454 --- /dev/null +++ b/src/tests/allure-results/reports/6d0c5a7f-31c0-4ad0-b7d0-b506c3438e40-container.json @@ -0,0 +1 @@ +{"uuid": "fc83f990-39ce-462f-b7ba-cf00460f3378", "children": ["0665c27e-aa31-4d58-a849-838949063005"], "befores": [{"name": "auth_service", "status": "passed", "start": 1788097548389, "stop": 1788097548390}], "afters": [{"name": "auth_service::", "start": 1788097548390}], "start": 1788097548389, "stop": 1788097548390} \ No newline at end of file diff --git a/src/tests/allure-results/reports/7d2e87b2-2557-49fd-bafa-cfe45c68d0c6-container.json b/src/tests/allure-results/reports/7d2e87b2-2557-49fd-bafa-cfe45c68d0c6-container.json new file mode 100644 index 0000000..704194c --- /dev/null +++ b/src/tests/allure-results/reports/7d2e87b2-2557-49fd-bafa-cfe45c68d0c6-container.json @@ -0,0 +1 @@ +{"uuid": "592fd4a1-c6f6-4ff6-8ffb-6988df151cb2", "children": ["b9926dd9-7c45-4546-86c7-179c054d5797"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097328623, "stop": 1788097328623}], "afters": [{"name": "jwt_service::", "start": 1788097328623}], "start": 1788097328623, "stop": 1788097328623} \ No newline at end of file diff --git a/src/tests/allure-results/reports/7d3ac4e9-f33f-4405-951c-43d22b820ffd-container.json b/src/tests/allure-results/reports/7d3ac4e9-f33f-4405-951c-43d22b820ffd-container.json new file mode 100644 index 0000000..12ada1a --- /dev/null +++ b/src/tests/allure-results/reports/7d3ac4e9-f33f-4405-951c-43d22b820ffd-container.json @@ -0,0 +1 @@ +{"uuid": "18585161-8c77-4534-9af4-03e3a7739972", "children": ["2c493ddd-51a2-429b-beab-5d4a13a0e7e9"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097233130, "stop": 1788097233130}], "afters": [{"name": "jwt_service::", "start": 1788097233152}], "start": 1788097233130, "stop": 1788097233152} \ No newline at end of file diff --git a/src/tests/allure-results/reports/7fc41ec0-bc39-4056-b982-d7b79bcc6a8c-result.json b/src/tests/allure-results/reports/7fc41ec0-bc39-4056-b982-d7b79bcc6a8c-result.json new file mode 100644 index 0000000..57c7bb1 --- /dev/null +++ b/src/tests/allure-results/reports/7fc41ec0-bc39-4056-b982-d7b79bcc6a8c-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_expired_token_raises", "status": "passed", "start": 1788097548400, "stop": 1788097548400, "uuid": "f2867972-1318-4350-a1e1-fe45aa096aec", "historyId": "fc79edd65e47b667cd9d304f63d6887b", "testCaseId": "fc79edd65e47b667cd9d304f63d6887b", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_expired_token_raises", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/82b8cf2a-ab75-47cc-9465-26192ae905ae-result.json b/src/tests/allure-results/reports/82b8cf2a-ab75-47cc-9465-26192ae905ae-result.json new file mode 100644 index 0000000..b15e631 --- /dev/null +++ b/src/tests/allure-results/reports/82b8cf2a-ab75-47cc-9465-26192ae905ae-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_invalid_token_raises", "status": "broken", "statusDetails": {"message": "TypeError: Expected a BaseException type, but got 'Errors'", "trace": "self = , jwt_service = \n\n def test_jwt_decode_invalid_token_raises(self, jwt_service):\n> with pytest.raises(errors, match=\"JWTError\"):\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\njwt_service = \nself = \n\nsrc/tests/test_unit.py:48: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.venv/lib/python3.14/site-packages/_pytest/raises.py:624: in __init__\n self.expected_exceptions = tuple(\n ^^^^^\n __class__ = \n check = None\n expected_exception = \n expected_exceptions = (,)\n match = 'JWTError'\n self = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10b65f610>\n.venv/lib/python3.14/site-packages/_pytest/raises.py:625: in \n self._parse_exc(e, expected=\"a BaseException type\")\n .0 = \n e = \n self = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10b65f610>\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10b65f610>\nexc = , expected = 'a BaseException type'\n\n def _parse_exc(\n self, exc: type[BaseExcT_1] | types.GenericAlias, expected: str\n ) -> type[BaseExcT_1]:\n if isinstance(exc, type) and issubclass(exc, BaseException):\n if not issubclass(exc, Exception):\n self.is_baseexception = True\n return exc\n # because RaisesGroup does not support variable number of exceptions there's\n # still a use for RaisesExc(ExceptionGroup[Exception]).\n origin_exc: type[BaseException] | None = get_origin(exc)\n if origin_exc and issubclass(origin_exc, BaseExceptionGroup):\n exc_type = get_args(exc)[0]\n if (\n issubclass(origin_exc, ExceptionGroup) and exc_type in (Exception, Any)\n ) or (\n issubclass(origin_exc, BaseExceptionGroup)\n and exc_type in (BaseException, Any)\n ):\n if not issubclass(origin_exc, ExceptionGroup):\n self.is_baseexception = True\n return cast(type[BaseExcT_1], origin_exc)\n else:\n raise ValueError(\n f\"Only `ExceptionGroup[Exception]` or `BaseExceptionGroup[BaseException]` \"\n f\"are accepted as generic types but got `{exc}`. \"\n f\"As `raises` will catch all instances of the specified group regardless of the \"\n f\"generic argument specific nested exceptions has to be checked \"\n f\"with `RaisesGroup`.\"\n )\n # unclear if the Type/ValueError distinction is even helpful here\n msg = f\"Expected {expected}, but got \"\n if isinstance(exc, type): # type: ignore[unreachable]\n raise ValueError(msg + f\"{exc.__name__!r}\")\n if isinstance(exc, BaseException): # type: ignore[unreachable]\n raise TypeError(msg + f\"an exception instance: {type(exc).__name__}\")\n> raise TypeError(msg + repr(type(exc).__name__))\nE TypeError: Expected a BaseException type, but got 'Errors'\n\nexc = \nexpected = 'a BaseException type'\nmsg = 'Expected a BaseException type, but got '\norigin_exc = None\nself = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10b65f610>\n\n.venv/lib/python3.14/site-packages/_pytest/raises.py:454: TypeError"}, "start": 1788097233130, "stop": 1788097233130, "uuid": "2c493ddd-51a2-429b-beab-5d4a13a0e7e9", "historyId": "7705ae2486355c9da637701bab1426a4", "testCaseId": "7705ae2486355c9da637701bab1426a4", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_invalid_token_raises", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12798-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/82baa265-2b34-47f1-bb7a-23a9969ebaa7-result.json b/src/tests/allure-results/reports/82baa265-2b34-47f1-bb7a-23a9969ebaa7-result.json new file mode 100644 index 0000000..b3eb6f0 --- /dev/null +++ b/src/tests/allure-results/reports/82baa265-2b34-47f1-bb7a-23a9969ebaa7-result.json @@ -0,0 +1 @@ +{"name": "test_plain_to_hash_returns_string", "status": "passed", "start": 1788097233226, "stop": 1788097233459, "uuid": "6f92e0ba-2336-416a-b973-976c454a15e8", "historyId": "878db88fbd2cfb1f0f53c9b1e01dc022", "testCaseId": "878db88fbd2cfb1f0f53c9b1e01dc022", "fullName": "src.tests.test_unit.TestHash#test_plain_to_hash_returns_string", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestHash"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12798-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestHash"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/836abe87-06f1-43bc-a424-d62469804539-container.json b/src/tests/allure-results/reports/836abe87-06f1-43bc-a424-d62469804539-container.json new file mode 100644 index 0000000..a0be13c --- /dev/null +++ b/src/tests/allure-results/reports/836abe87-06f1-43bc-a424-d62469804539-container.json @@ -0,0 +1 @@ +{"uuid": "a62bd2fc-dde7-494c-b2e0-46e6c365020a", "children": ["b5293907-b6e1-43d4-9e88-c17225081cf5"], "befores": [{"name": "auth_service", "status": "passed", "start": 1788097548384, "stop": 1788097548387}], "afters": [{"name": "auth_service::", "start": 1788097548387}], "start": 1788097548384, "stop": 1788097548387} \ No newline at end of file diff --git a/src/tests/allure-results/reports/891e9225-e25e-4e53-883e-4dd14f19b88c-container.json b/src/tests/allure-results/reports/891e9225-e25e-4e53-883e-4dd14f19b88c-container.json new file mode 100644 index 0000000..4d2e705 --- /dev/null +++ b/src/tests/allure-results/reports/891e9225-e25e-4e53-883e-4dd14f19b88c-container.json @@ -0,0 +1 @@ +{"uuid": "2f8dde76-7be1-4868-9ee3-6d9ad23f11c8", "children": ["3eb86acc-7e39-4e27-9811-6fa31c74322e"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097233089, "stop": 1788097233089}], "afters": [{"name": "jwt_service::", "start": 1788097233089}], "start": 1788097233089, "stop": 1788097233089} \ No newline at end of file diff --git a/src/tests/allure-results/reports/93b9f8e5-c617-474f-a01f-69053c877bba-result.json b/src/tests/allure-results/reports/93b9f8e5-c617-474f-a01f-69053c877bba-result.json new file mode 100644 index 0000000..3308951 --- /dev/null +++ b/src/tests/allure-results/reports/93b9f8e5-c617-474f-a01f-69053c877bba-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_missing_sub_raises", "status": "broken", "statusDetails": {"message": "TypeError: Expected a BaseException type, but got 'Errors'", "trace": "self = , jwt_service = \n\n def test_jwt_decode_missing_sub_raises(self, jwt_service):\n token = jwt.encode(\n {\"exp\": datetime.now(timezone.utc) + timedelta(minutes=5)},\n ENV.SECRET_STRING,\n ENV.ALGORITHM,\n )\n> with pytest.raises(errors, match=\"JWT payload is None\"):\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\njwt_service = \nself = \ntoken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3ODgwOTc1MzN9.SKtl0MVS-YleojtT7kGcZA_CkpRVLb4Wk8d8J6yA8fo'\n\nsrc/tests/test_unit.py:44: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.venv/lib/python3.14/site-packages/_pytest/raises.py:624: in __init__\n self.expected_exceptions = tuple(\n ^^^^^\n __class__ = \n check = None\n expected_exception = \n expected_exceptions = (,)\n match = 'JWT payload is None'\n self = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10b6e5be0>\n.venv/lib/python3.14/site-packages/_pytest/raises.py:625: in \n self._parse_exc(e, expected=\"a BaseException type\")\n .0 = \n e = \n self = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10b6e5be0>\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10b6e5be0>\nexc = , expected = 'a BaseException type'\n\n def _parse_exc(\n self, exc: type[BaseExcT_1] | types.GenericAlias, expected: str\n ) -> type[BaseExcT_1]:\n if isinstance(exc, type) and issubclass(exc, BaseException):\n if not issubclass(exc, Exception):\n self.is_baseexception = True\n return exc\n # because RaisesGroup does not support variable number of exceptions there's\n # still a use for RaisesExc(ExceptionGroup[Exception]).\n origin_exc: type[BaseException] | None = get_origin(exc)\n if origin_exc and issubclass(origin_exc, BaseExceptionGroup):\n exc_type = get_args(exc)[0]\n if (\n issubclass(origin_exc, ExceptionGroup) and exc_type in (Exception, Any)\n ) or (\n issubclass(origin_exc, BaseExceptionGroup)\n and exc_type in (BaseException, Any)\n ):\n if not issubclass(origin_exc, ExceptionGroup):\n self.is_baseexception = True\n return cast(type[BaseExcT_1], origin_exc)\n else:\n raise ValueError(\n f\"Only `ExceptionGroup[Exception]` or `BaseExceptionGroup[BaseException]` \"\n f\"are accepted as generic types but got `{exc}`. \"\n f\"As `raises` will catch all instances of the specified group regardless of the \"\n f\"generic argument specific nested exceptions has to be checked \"\n f\"with `RaisesGroup`.\"\n )\n # unclear if the Type/ValueError distinction is even helpful here\n msg = f\"Expected {expected}, but got \"\n if isinstance(exc, type): # type: ignore[unreachable]\n raise ValueError(msg + f\"{exc.__name__!r}\")\n if isinstance(exc, BaseException): # type: ignore[unreachable]\n raise TypeError(msg + f\"an exception instance: {type(exc).__name__}\")\n> raise TypeError(msg + repr(type(exc).__name__))\nE TypeError: Expected a BaseException type, but got 'Errors'\n\nexc = \nexpected = 'a BaseException type'\nmsg = 'Expected a BaseException type, but got '\norigin_exc = None\nself = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10b6e5be0>\n\n.venv/lib/python3.14/site-packages/_pytest/raises.py:454: TypeError"}, "start": 1788097233090, "stop": 1788097233090, "uuid": "5a0110d7-04ef-4003-9b16-021bc4a657d8", "historyId": "91a345521e32c7d203bed30df1095e22", "testCaseId": "91a345521e32c7d203bed30df1095e22", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_missing_sub_raises", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12798-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/958eeafd-464e-4019-accf-0973c19c381e-result.json b/src/tests/allure-results/reports/958eeafd-464e-4019-accf-0973c19c381e-result.json new file mode 100644 index 0000000..c66c510 --- /dev/null +++ b/src/tests/allure-results/reports/958eeafd-464e-4019-accf-0973c19c381e-result.json @@ -0,0 +1 @@ +{"name": "test_get_current_user_missing_sub", "status": "passed", "start": 1788097548391, "stop": 1788097548391, "uuid": "02fe8fa3-9994-4a6e-8a40-39f49dcc5bf1", "historyId": "654a1e04069d442b1e78ae289d853750", "testCaseId": "654a1e04069d442b1e78ae289d853750", "fullName": "src.tests.test_integra.TestGetCurrentUser#test_get_current_user_missing_sub", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_integra"}, {"name": "subSuite", "value": "TestGetCurrentUser"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_integra"}], "titlePath": ["src", "tests", "test_integra.py", "TestGetCurrentUser"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/958fbbde-2e84-4939-a86f-3472c114f36d-container.json b/src/tests/allure-results/reports/958fbbde-2e84-4939-a86f-3472c114f36d-container.json new file mode 100644 index 0000000..f285476 --- /dev/null +++ b/src/tests/allure-results/reports/958fbbde-2e84-4939-a86f-3472c114f36d-container.json @@ -0,0 +1 @@ +{"uuid": "023f96b4-bc1d-4991-9135-db1511998c2f", "children": ["39a876da-f76f-45d5-a37f-bc9094f51452"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097328621, "stop": 1788097328621}], "afters": [{"name": "jwt_service::", "start": 1788097328621}], "start": 1788097328621, "stop": 1788097328621} \ No newline at end of file diff --git a/src/tests/allure-results/reports/97181756-7ee8-4cec-b39b-06502b0a0c9c-result.json b/src/tests/allure-results/reports/97181756-7ee8-4cec-b39b-06502b0a0c9c-result.json new file mode 100644 index 0000000..dd13c62 --- /dev/null +++ b/src/tests/allure-results/reports/97181756-7ee8-4cec-b39b-06502b0a0c9c-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_create_sets_expiration", "status": "passed", "start": 1788097548397, "stop": 1788097548397, "uuid": "f2999f8f-91cf-4c4e-8df6-0b45ed6969fa", "historyId": "5c07e76c30d18889e8a32342379fbcf8", "testCaseId": "5c07e76c30d18889e8a32342379fbcf8", "fullName": "src.tests.test_unit.TestJWT#test_jwt_create_sets_expiration", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/9869b985-ad3c-4ecc-aac3-abd4561562a6-container.json b/src/tests/allure-results/reports/9869b985-ad3c-4ecc-aac3-abd4561562a6-container.json new file mode 100644 index 0000000..c2f0611 --- /dev/null +++ b/src/tests/allure-results/reports/9869b985-ad3c-4ecc-aac3-abd4561562a6-container.json @@ -0,0 +1 @@ +{"uuid": "3e659211-7f35-41dc-9d21-49667ad624ef", "children": ["fed8c3c6-5941-4da4-90f9-fefd7c622945"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097233153, "stop": 1788097233153}], "afters": [{"name": "jwt_service::", "start": 1788097233198}], "start": 1788097233153, "stop": 1788097233198} \ No newline at end of file diff --git a/src/tests/allure-results/reports/9b5ee87b-0f71-4c12-bda7-83e6e82d4350-result.json b/src/tests/allure-results/reports/9b5ee87b-0f71-4c12-bda7-83e6e82d4350-result.json new file mode 100644 index 0000000..0555b39 --- /dev/null +++ b/src/tests/allure-results/reports/9b5ee87b-0f71-4c12-bda7-83e6e82d4350-result.json @@ -0,0 +1 @@ +{"name": "test_hash_check_wrong_password", "status": "passed", "start": 1788097549579, "stop": 1788097550042, "uuid": "cf7c1ee6-0e3e-49b9-a838-6ec48d04da76", "historyId": "ecd8b6476e1ad7c1e4167c4a2ef1dde7", "testCaseId": "ecd8b6476e1ad7c1e4167c4a2ef1dde7", "fullName": "src.tests.test_unit.TestHash#test_hash_check_wrong_password", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestHash"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestHash"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/9dade92b-682f-4969-8330-abb743246e51-container.json b/src/tests/allure-results/reports/9dade92b-682f-4969-8330-abb743246e51-container.json new file mode 100644 index 0000000..1cca08b --- /dev/null +++ b/src/tests/allure-results/reports/9dade92b-682f-4969-8330-abb743246e51-container.json @@ -0,0 +1 @@ +{"uuid": "0db2b44f-4fa5-4849-8f84-0e75687e8f0f", "children": ["ef120c06-6d4a-48a5-ab95-e5a86f4503c3"], "befores": [{"name": "hash_service", "status": "passed", "start": 1788097328861, "stop": 1788097328861}], "afters": [{"name": "hash_service::", "start": 1788097329357}], "start": 1788097328861, "stop": 1788097329357} \ No newline at end of file diff --git a/src/tests/allure-results/reports/9f947414-afab-4d64-a1cd-bd97d42c0d7d-container.json b/src/tests/allure-results/reports/9f947414-afab-4d64-a1cd-bd97d42c0d7d-container.json new file mode 100644 index 0000000..c8f623d --- /dev/null +++ b/src/tests/allure-results/reports/9f947414-afab-4d64-a1cd-bd97d42c0d7d-container.json @@ -0,0 +1 @@ +{"uuid": "1ec29be0-9414-43a0-b353-4ef30f678ade", "children": ["d65534c7-c788-4e96-b461-03c922e72be9"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097328622, "stop": 1788097328622}], "afters": [{"name": "jwt_service::", "start": 1788097328622}], "start": 1788097328622, "stop": 1788097328622} \ No newline at end of file diff --git a/src/tests/allure-results/reports/a0906d1f-036b-4372-8502-b47e308ab463-result.json b/src/tests/allure-results/reports/a0906d1f-036b-4372-8502-b47e308ab463-result.json new file mode 100644 index 0000000..766379b --- /dev/null +++ b/src/tests/allure-results/reports/a0906d1f-036b-4372-8502-b47e308ab463-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_expired_token_raises", "status": "broken", "statusDetails": {"message": "TypeError: Expected a BaseException type, but got 'Errors'", "trace": "self = , jwt_service = \n\n def test_jwt_decode_expired_token_raises(self, jwt_service):\n token = jwt.encode(\n {\"sub\": \"user1\", \"exp\": datetime.now(timezone.utc) - timedelta(minutes=5)},\n ENV.SECRET_STRING,\n ENV.ALGORITHM,\n )\n> with pytest.raises(errors, match=\"JWTError\"):\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\njwt_service = \nself = \ntoken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMSIsImV4cCI6MTc4ODA5NjkzM30.vWgIRJ3xBQ6xtBAz4vgUyZqUgRbb_ZWm5Y_6du2XxR8'\n\nsrc/tests/test_unit.py:57: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.venv/lib/python3.14/site-packages/_pytest/raises.py:624: in __init__\n self.expected_exceptions = tuple(\n ^^^^^\n __class__ = \n check = None\n expected_exception = \n expected_exceptions = (,)\n match = 'JWTError'\n self = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10c6b9e50>\n.venv/lib/python3.14/site-packages/_pytest/raises.py:625: in \n self._parse_exc(e, expected=\"a BaseException type\")\n .0 = \n e = \n self = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10c6b9e50>\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10c6b9e50>\nexc = , expected = 'a BaseException type'\n\n def _parse_exc(\n self, exc: type[BaseExcT_1] | types.GenericAlias, expected: str\n ) -> type[BaseExcT_1]:\n if isinstance(exc, type) and issubclass(exc, BaseException):\n if not issubclass(exc, Exception):\n self.is_baseexception = True\n return exc\n # because RaisesGroup does not support variable number of exceptions there's\n # still a use for RaisesExc(ExceptionGroup[Exception]).\n origin_exc: type[BaseException] | None = get_origin(exc)\n if origin_exc and issubclass(origin_exc, BaseExceptionGroup):\n exc_type = get_args(exc)[0]\n if (\n issubclass(origin_exc, ExceptionGroup) and exc_type in (Exception, Any)\n ) or (\n issubclass(origin_exc, BaseExceptionGroup)\n and exc_type in (BaseException, Any)\n ):\n if not issubclass(origin_exc, ExceptionGroup):\n self.is_baseexception = True\n return cast(type[BaseExcT_1], origin_exc)\n else:\n raise ValueError(\n f\"Only `ExceptionGroup[Exception]` or `BaseExceptionGroup[BaseException]` \"\n f\"are accepted as generic types but got `{exc}`. \"\n f\"As `raises` will catch all instances of the specified group regardless of the \"\n f\"generic argument specific nested exceptions has to be checked \"\n f\"with `RaisesGroup`.\"\n )\n # unclear if the Type/ValueError distinction is even helpful here\n msg = f\"Expected {expected}, but got \"\n if isinstance(exc, type): # type: ignore[unreachable]\n raise ValueError(msg + f\"{exc.__name__!r}\")\n if isinstance(exc, BaseException): # type: ignore[unreachable]\n raise TypeError(msg + f\"an exception instance: {type(exc).__name__}\")\n> raise TypeError(msg + repr(type(exc).__name__))\nE TypeError: Expected a BaseException type, but got 'Errors'\n\nexc = \nexpected = 'a BaseException type'\nmsg = 'Expected a BaseException type, but got '\norigin_exc = None\nself = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10c6b9e50>\n\n.venv/lib/python3.14/site-packages/_pytest/raises.py:454: TypeError"}, "start": 1788097233153, "stop": 1788097233153, "uuid": "fed8c3c6-5941-4da4-90f9-fefd7c622945", "historyId": "fc79edd65e47b667cd9d304f63d6887b", "testCaseId": "fc79edd65e47b667cd9d304f63d6887b", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_expired_token_raises", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12798-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/a17cc0f6-f4d7-4b97-b0a8-a9f399e4da68-result.json b/src/tests/allure-results/reports/a17cc0f6-f4d7-4b97-b0a8-a9f399e4da68-result.json new file mode 100644 index 0000000..cfd907c --- /dev/null +++ b/src/tests/allure-results/reports/a17cc0f6-f4d7-4b97-b0a8-a9f399e4da68-result.json @@ -0,0 +1 @@ +{"name": "test_create_token_user_not_found", "status": "passed", "start": 1788097548384, "stop": 1788097548384, "uuid": "27fdde22-8d37-462b-8dac-659f8c64dbf8", "historyId": "3ccf9dee14240830bd3766f6cdb73868", "testCaseId": "3ccf9dee14240830bd3766f6cdb73868", "fullName": "src.tests.test_integra.TestCreateToken#test_create_token_user_not_found", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_integra"}, {"name": "subSuite", "value": "TestCreateToken"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_integra"}], "titlePath": ["src", "tests", "test_integra.py", "TestCreateToken"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/a318958b-823d-4317-9716-ccb7435afeda-result.json b/src/tests/allure-results/reports/a318958b-823d-4317-9716-ccb7435afeda-result.json new file mode 100644 index 0000000..724a5a6 --- /dev/null +++ b/src/tests/allure-results/reports/a318958b-823d-4317-9716-ccb7435afeda-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_wrong_secret_raises", "status": "broken", "statusDetails": {"message": "TypeError: Expected a BaseException type, but got 'Errors'", "trace": "self = , jwt_service = \n\n def test_jwt_decode_wrong_secret_raises(self, jwt_service):\n token = jwt.encode(\n {\"sub\": \"user1\", \"exp\": datetime.now(timezone.utc) + timedelta(minutes=5)},\n \"wrong_secret\",\n ENV.ALGORITHM,\n )\n> with pytest.raises(errors, match=\"JWTError\"):\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\njwt_service = \nself = \ntoken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMSIsImV4cCI6MTc4ODA5NzUzM30.TyTi-gd2BqK83-wa3bzYtF1ryiXGeWU0CGP4jVizu2s'\n\nsrc/tests/test_unit.py:66: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.venv/lib/python3.14/site-packages/_pytest/raises.py:624: in __init__\n self.expected_exceptions = tuple(\n ^^^^^\n __class__ = \n check = None\n expected_exception = \n expected_exceptions = (,)\n match = 'JWTError'\n self = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10c652650>\n.venv/lib/python3.14/site-packages/_pytest/raises.py:625: in \n self._parse_exc(e, expected=\"a BaseException type\")\n .0 = \n e = \n self = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10c652650>\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10c652650>\nexc = , expected = 'a BaseException type'\n\n def _parse_exc(\n self, exc: type[BaseExcT_1] | types.GenericAlias, expected: str\n ) -> type[BaseExcT_1]:\n if isinstance(exc, type) and issubclass(exc, BaseException):\n if not issubclass(exc, Exception):\n self.is_baseexception = True\n return exc\n # because RaisesGroup does not support variable number of exceptions there's\n # still a use for RaisesExc(ExceptionGroup[Exception]).\n origin_exc: type[BaseException] | None = get_origin(exc)\n if origin_exc and issubclass(origin_exc, BaseExceptionGroup):\n exc_type = get_args(exc)[0]\n if (\n issubclass(origin_exc, ExceptionGroup) and exc_type in (Exception, Any)\n ) or (\n issubclass(origin_exc, BaseExceptionGroup)\n and exc_type in (BaseException, Any)\n ):\n if not issubclass(origin_exc, ExceptionGroup):\n self.is_baseexception = True\n return cast(type[BaseExcT_1], origin_exc)\n else:\n raise ValueError(\n f\"Only `ExceptionGroup[Exception]` or `BaseExceptionGroup[BaseException]` \"\n f\"are accepted as generic types but got `{exc}`. \"\n f\"As `raises` will catch all instances of the specified group regardless of the \"\n f\"generic argument specific nested exceptions has to be checked \"\n f\"with `RaisesGroup`.\"\n )\n # unclear if the Type/ValueError distinction is even helpful here\n msg = f\"Expected {expected}, but got \"\n if isinstance(exc, type): # type: ignore[unreachable]\n raise ValueError(msg + f\"{exc.__name__!r}\")\n if isinstance(exc, BaseException): # type: ignore[unreachable]\n raise TypeError(msg + f\"an exception instance: {type(exc).__name__}\")\n> raise TypeError(msg + repr(type(exc).__name__))\nE TypeError: Expected a BaseException type, but got 'Errors'\n\nexc = \nexpected = 'a BaseException type'\nmsg = 'Expected a BaseException type, but got '\norigin_exc = None\nself = <[AttributeError(\"'RaisesExc' object has no attribute 'expected_exceptions'\") raised in repr()] RaisesExc object at 0x10c652650>\n\n.venv/lib/python3.14/site-packages/_pytest/raises.py:454: TypeError"}, "start": 1788097233200, "stop": 1788097233200, "uuid": "b60ad5ca-1c2a-4ca3-8cd7-e107726388b7", "historyId": "c6730563216ecc5eafa3eea7b0a0e330", "testCaseId": "c6730563216ecc5eafa3eea7b0a0e330", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_wrong_secret_raises", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12798-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/a400b5b6-a026-4140-b9f0-1d4c1b474f31-result.json b/src/tests/allure-results/reports/a400b5b6-a026-4140-b9f0-1d4c1b474f31-result.json new file mode 100644 index 0000000..2036f32 --- /dev/null +++ b/src/tests/allure-results/reports/a400b5b6-a026-4140-b9f0-1d4c1b474f31-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_create_returns_valid_token", "status": "passed", "start": 1788097328618, "stop": 1788097328619, "uuid": "51dd8a2c-88ac-47a1-bd79-e12d967c3f03", "historyId": "3f67b8e97d4fe49aca56055e437aa62a", "testCaseId": "3f67b8e97d4fe49aca56055e437aa62a", "fullName": "src.tests.test_unit.TestJWT#test_jwt_create_returns_valid_token", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12923-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/a41499e5-7172-4a81-839f-ade6bd817b9b-container.json b/src/tests/allure-results/reports/a41499e5-7172-4a81-839f-ade6bd817b9b-container.json new file mode 100644 index 0000000..9f78d5c --- /dev/null +++ b/src/tests/allure-results/reports/a41499e5-7172-4a81-839f-ade6bd817b9b-container.json @@ -0,0 +1 @@ +{"uuid": "9e166d78-4522-441a-a429-193c6330a6d7", "children": ["f7387b9e-9d9f-418c-a3a9-271dd8b3aae9"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097548401, "stop": 1788097548401}], "afters": [{"name": "jwt_service::", "start": 1788097548401}], "start": 1788097548401, "stop": 1788097548401} \ No newline at end of file diff --git a/src/tests/allure-results/reports/ad58abad-fd51-4be6-9485-6a7a35310285-container.json b/src/tests/allure-results/reports/ad58abad-fd51-4be6-9485-6a7a35310285-container.json new file mode 100644 index 0000000..7fe389c --- /dev/null +++ b/src/tests/allure-results/reports/ad58abad-fd51-4be6-9485-6a7a35310285-container.json @@ -0,0 +1 @@ +{"uuid": "6ca6cfdd-0f3d-42ae-9780-49ff3b78e338", "children": ["2f5a7658-1c16-4f0f-9821-05d62dff2f7a"], "befores": [{"name": "hash_service", "status": "passed", "start": 1788097329358, "stop": 1788097329358}], "afters": [{"name": "hash_service::", "start": 1788097329821}], "start": 1788097329358, "stop": 1788097329821} \ No newline at end of file diff --git a/src/tests/allure-results/reports/adb9df4f-cde2-44e6-b51a-0554e44b2881-container.json b/src/tests/allure-results/reports/adb9df4f-cde2-44e6-b51a-0554e44b2881-container.json new file mode 100644 index 0000000..01d196d --- /dev/null +++ b/src/tests/allure-results/reports/adb9df4f-cde2-44e6-b51a-0554e44b2881-container.json @@ -0,0 +1 @@ +{"uuid": "c033623f-d445-4919-871e-2f56bee0c724", "children": ["3da99823-70b5-4d82-b71d-0e9b247c6769"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097548399, "stop": 1788097548399}], "afters": [{"name": "jwt_service::", "start": 1788097548399}], "start": 1788097548399, "stop": 1788097548399} \ No newline at end of file diff --git a/src/tests/allure-results/reports/af746e0d-10f7-450e-9089-f251f00c15a9-container.json b/src/tests/allure-results/reports/af746e0d-10f7-450e-9089-f251f00c15a9-container.json new file mode 100644 index 0000000..a89e299 --- /dev/null +++ b/src/tests/allure-results/reports/af746e0d-10f7-450e-9089-f251f00c15a9-container.json @@ -0,0 +1 @@ +{"uuid": "37b57e23-bbc6-4a19-8d0a-3aa580d768a6", "children": ["a89ea0c0-da43-456e-9a0a-763282d92ddd"], "befores": [{"name": "hash_service", "status": "passed", "start": 1788097233460, "stop": 1788097233460}], "afters": [{"name": "hash_service::", "start": 1788097233928}], "start": 1788097233460, "stop": 1788097233928} \ No newline at end of file diff --git a/src/tests/allure-results/reports/b347db9a-db5d-4a69-b7ed-ef424bc06688-container.json b/src/tests/allure-results/reports/b347db9a-db5d-4a69-b7ed-ef424bc06688-container.json new file mode 100644 index 0000000..0a27cbd --- /dev/null +++ b/src/tests/allure-results/reports/b347db9a-db5d-4a69-b7ed-ef424bc06688-container.json @@ -0,0 +1 @@ +{"uuid": "6c44abd0-d6d7-4941-962e-c1a7ac0f5b19", "children": ["7972ebcb-c2a0-4a8d-b643-7c63683869b3"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097548398, "stop": 1788097548398}], "afters": [{"name": "jwt_service::", "start": 1788097548398}], "start": 1788097548398, "stop": 1788097548398} \ No newline at end of file diff --git a/src/tests/allure-results/reports/b479f4df-199d-4341-a717-6b434f6e5c97-result.json b/src/tests/allure-results/reports/b479f4df-199d-4341-a717-6b434f6e5c97-result.json new file mode 100644 index 0000000..83640d8 --- /dev/null +++ b/src/tests/allure-results/reports/b479f4df-199d-4341-a717-6b434f6e5c97-result.json @@ -0,0 +1 @@ +{"name": "test_hash_check_wrong_password", "status": "passed", "start": 1788097234394, "stop": 1788097234857, "uuid": "db30220f-bf0f-4d5e-9e08-9ba19d8cc177", "historyId": "ecd8b6476e1ad7c1e4167c4a2ef1dde7", "testCaseId": "ecd8b6476e1ad7c1e4167c4a2ef1dde7", "fullName": "src.tests.test_unit.TestHash#test_hash_check_wrong_password", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestHash"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12798-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestHash"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/b4d51886-38fe-4566-96b5-0fe1a723d062-container.json b/src/tests/allure-results/reports/b4d51886-38fe-4566-96b5-0fe1a723d062-container.json new file mode 100644 index 0000000..b60cb14 --- /dev/null +++ b/src/tests/allure-results/reports/b4d51886-38fe-4566-96b5-0fe1a723d062-container.json @@ -0,0 +1 @@ +{"uuid": "dcce40b6-47b6-487d-a4f0-de3c5f5e7242", "children": ["f2999f8f-91cf-4c4e-8df6-0b45ed6969fa"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097548397, "stop": 1788097548397}], "afters": [{"name": "jwt_service::", "start": 1788097548397}], "start": 1788097548397, "stop": 1788097548397} \ No newline at end of file diff --git a/src/tests/allure-results/reports/b8d3b0e2-85d2-4479-8814-f795cc33cbfc-container.json b/src/tests/allure-results/reports/b8d3b0e2-85d2-4479-8814-f795cc33cbfc-container.json new file mode 100644 index 0000000..9855e1f --- /dev/null +++ b/src/tests/allure-results/reports/b8d3b0e2-85d2-4479-8814-f795cc33cbfc-container.json @@ -0,0 +1 @@ +{"uuid": "1bc5a62e-56ba-43b2-af36-85a6d3b6a57e", "children": ["27fdde22-8d37-462b-8dac-659f8c64dbf8"], "befores": [{"name": "auth_service", "status": "passed", "start": 1788097548383, "stop": 1788097548384}], "afters": [{"name": "auth_service::", "start": 1788097548384}], "start": 1788097548383, "stop": 1788097548384} \ No newline at end of file diff --git a/src/tests/allure-results/reports/c0999ddb-82d5-4a40-8ec7-d072f0f4cbf4-result.json b/src/tests/allure-results/reports/c0999ddb-82d5-4a40-8ec7-d072f0f4cbf4-result.json new file mode 100644 index 0000000..bfd7b9d --- /dev/null +++ b/src/tests/allure-results/reports/c0999ddb-82d5-4a40-8ec7-d072f0f4cbf4-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_create_returns_valid_token", "status": "passed", "start": 1788097548396, "stop": 1788097548396, "uuid": "dcd60a22-e053-4b4e-afc6-a6e7d9edadd1", "historyId": "3f67b8e97d4fe49aca56055e437aa62a", "testCaseId": "3f67b8e97d4fe49aca56055e437aa62a", "fullName": "src.tests.test_unit.TestJWT#test_jwt_create_returns_valid_token", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/c4e02353-76b6-4211-b75b-43bb23c44b80-result.json b/src/tests/allure-results/reports/c4e02353-76b6-4211-b75b-43bb23c44b80-result.json new file mode 100644 index 0000000..4f566a5 --- /dev/null +++ b/src/tests/allure-results/reports/c4e02353-76b6-4211-b75b-43bb23c44b80-result.json @@ -0,0 +1 @@ +{"name": "test_plain_to_hash_returns_string", "status": "passed", "start": 1788097328626, "stop": 1788097328860, "uuid": "10a8a440-f5ed-4769-85c9-dc503326554d", "historyId": "878db88fbd2cfb1f0f53c9b1e01dc022", "testCaseId": "878db88fbd2cfb1f0f53c9b1e01dc022", "fullName": "src.tests.test_unit.TestHash#test_plain_to_hash_returns_string", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestHash"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12923-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestHash"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/c5741c77-0744-472e-82ba-f7c55bbd7059-container.json b/src/tests/allure-results/reports/c5741c77-0744-472e-82ba-f7c55bbd7059-container.json new file mode 100644 index 0000000..14c7a82 --- /dev/null +++ b/src/tests/allure-results/reports/c5741c77-0744-472e-82ba-f7c55bbd7059-container.json @@ -0,0 +1 @@ +{"uuid": "87e3b2d5-0535-481c-bcd7-680c92a7389d", "children": ["28fd8a04-9f03-4d24-bd1b-8397a5c79ba5"], "befores": [{"name": "hash_service", "status": "passed", "start": 1788097549108, "stop": 1788097549108}], "afters": [{"name": "hash_service::", "start": 1788097549578}], "start": 1788097549107, "stop": 1788097549578} \ No newline at end of file diff --git a/src/tests/allure-results/reports/cb70e349-873a-4566-8b0d-8c9f9c270824-container.json b/src/tests/allure-results/reports/cb70e349-873a-4566-8b0d-8c9f9c270824-container.json new file mode 100644 index 0000000..79b331c --- /dev/null +++ b/src/tests/allure-results/reports/cb70e349-873a-4566-8b0d-8c9f9c270824-container.json @@ -0,0 +1 @@ +{"uuid": "d7bb1f12-acba-408d-b6b3-c26f4ea4afb2", "children": ["dcd60a22-e053-4b4e-afc6-a6e7d9edadd1"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097548396, "stop": 1788097548396}], "afters": [{"name": "jwt_service::", "start": 1788097548396}], "start": 1788097548396, "stop": 1788097548396} \ No newline at end of file diff --git a/src/tests/allure-results/reports/cde2da25-da6b-4ad8-867a-e22cd60c7fb0-result.json b/src/tests/allure-results/reports/cde2da25-da6b-4ad8-867a-e22cd60c7fb0-result.json new file mode 100644 index 0000000..6d8f0d2 --- /dev/null +++ b/src/tests/allure-results/reports/cde2da25-da6b-4ad8-867a-e22cd60c7fb0-result.json @@ -0,0 +1 @@ +{"name": "test_get_current_user_not_found_in_db", "status": "passed", "start": 1788097548395, "stop": 1788097548395, "uuid": "0df7f7a0-5757-4795-8eef-15321bd9ceea", "historyId": "f646d0f6165519f8fcf4044c688b7218", "testCaseId": "f646d0f6165519f8fcf4044c688b7218", "fullName": "src.tests.test_integra.TestGetCurrentUser#test_get_current_user_not_found_in_db", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_integra"}, {"name": "subSuite", "value": "TestGetCurrentUser"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_integra"}], "titlePath": ["src", "tests", "test_integra.py", "TestGetCurrentUser"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/ce821594-c81c-4494-94e0-c1c16d0ac43c-container.json b/src/tests/allure-results/reports/ce821594-c81c-4494-94e0-c1c16d0ac43c-container.json new file mode 100644 index 0000000..170da2e --- /dev/null +++ b/src/tests/allure-results/reports/ce821594-c81c-4494-94e0-c1c16d0ac43c-container.json @@ -0,0 +1 @@ +{"uuid": "e68fa45d-a768-4f08-9a6a-ee08ae779eba", "children": ["10a8a440-f5ed-4769-85c9-dc503326554d"], "befores": [{"name": "hash_service", "status": "passed", "start": 1788097328626, "stop": 1788097328626}], "afters": [{"name": "hash_service::", "start": 1788097328860}], "start": 1788097328626, "stop": 1788097328860} \ No newline at end of file diff --git a/src/tests/allure-results/reports/d80ea9f8-3911-4879-9e6f-a3e027063170-container.json b/src/tests/allure-results/reports/d80ea9f8-3911-4879-9e6f-a3e027063170-container.json new file mode 100644 index 0000000..7289c41 --- /dev/null +++ b/src/tests/allure-results/reports/d80ea9f8-3911-4879-9e6f-a3e027063170-container.json @@ -0,0 +1 @@ +{"uuid": "1bb492b8-41e9-43cc-b5b4-0c2b6e3c579e", "children": ["0df7f7a0-5757-4795-8eef-15321bd9ceea"], "befores": [{"name": "auth_service", "status": "passed", "start": 1788097548395, "stop": 1788097548395}], "afters": [{"name": "auth_service::", "start": 1788097548395}], "start": 1788097548395, "stop": 1788097548395} \ No newline at end of file diff --git a/src/tests/allure-results/reports/d8b8c82f-d8bb-4062-a857-0e19079d8067-container.json b/src/tests/allure-results/reports/d8b8c82f-d8bb-4062-a857-0e19079d8067-container.json new file mode 100644 index 0000000..589961b --- /dev/null +++ b/src/tests/allure-results/reports/d8b8c82f-d8bb-4062-a857-0e19079d8067-container.json @@ -0,0 +1 @@ +{"uuid": "f37213b9-2517-4a26-ba6f-75c2f1189a3c", "children": ["91675774-5ad3-4c58-8669-a1e2b31bb427"], "befores": [{"name": "hash_service", "status": "passed", "start": 1788097548641, "stop": 1788097548641}], "afters": [{"name": "hash_service::", "start": 1788097549107}], "start": 1788097548641, "stop": 1788097549107} \ No newline at end of file diff --git a/src/tests/allure-results/reports/d972f788-5b6c-4ad7-a280-6cdd60e990e4-container.json b/src/tests/allure-results/reports/d972f788-5b6c-4ad7-a280-6cdd60e990e4-container.json new file mode 100644 index 0000000..b760ec5 --- /dev/null +++ b/src/tests/allure-results/reports/d972f788-5b6c-4ad7-a280-6cdd60e990e4-container.json @@ -0,0 +1 @@ +{"uuid": "307fb006-0e8c-488f-96fe-3f556159dffc", "children": ["f2867972-1318-4350-a1e1-fe45aa096aec"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097548400, "stop": 1788097548400}], "afters": [{"name": "jwt_service::", "start": 1788097548401}], "start": 1788097548400, "stop": 1788097548401} \ No newline at end of file diff --git a/src/tests/allure-results/reports/e6561412-bbd4-4282-99c3-c636744fb8af-container.json b/src/tests/allure-results/reports/e6561412-bbd4-4282-99c3-c636744fb8af-container.json new file mode 100644 index 0000000..d0df265 --- /dev/null +++ b/src/tests/allure-results/reports/e6561412-bbd4-4282-99c3-c636744fb8af-container.json @@ -0,0 +1 @@ +{"uuid": "c01f2a77-3fd2-4582-9146-1b720c9d8af4", "children": ["bcbfdcd1-47c0-4e88-870b-029d7bdfdb9b"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097328624, "stop": 1788097328624}], "afters": [{"name": "jwt_service::", "start": 1788097328624}], "start": 1788097328624, "stop": 1788097328624} \ No newline at end of file diff --git a/src/tests/allure-results/reports/e67ef0e6-668e-455b-948e-b8da0e4a3fa8-result.json b/src/tests/allure-results/reports/e67ef0e6-668e-455b-948e-b8da0e4a3fa8-result.json new file mode 100644 index 0000000..75ca3b6 --- /dev/null +++ b/src/tests/allure-results/reports/e67ef0e6-668e-455b-948e-b8da0e4a3fa8-result.json @@ -0,0 +1 @@ +{"name": "test_plain_to_hash_different_salts", "status": "passed", "start": 1788097233460, "stop": 1788097233928, "uuid": "a89ea0c0-da43-456e-9a0a-763282d92ddd", "historyId": "3666f517875b1b739cc354dc067f581d", "testCaseId": "3666f517875b1b739cc354dc067f581d", "fullName": "src.tests.test_unit.TestHash#test_plain_to_hash_different_salts", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestHash"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12798-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestHash"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/e7d7144a-a480-4714-bbcf-6e3c1ce0fe81-container.json b/src/tests/allure-results/reports/e7d7144a-a480-4714-bbcf-6e3c1ce0fe81-container.json new file mode 100644 index 0000000..ae4811e --- /dev/null +++ b/src/tests/allure-results/reports/e7d7144a-a480-4714-bbcf-6e3c1ce0fe81-container.json @@ -0,0 +1 @@ +{"uuid": "81ecfd92-828e-47ed-8471-7a785507ccab", "children": ["03693257-baa0-45e7-b133-1a8d9e5102c3"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097548400, "stop": 1788097548400}], "afters": [{"name": "jwt_service::", "start": 1788097548400}], "start": 1788097548400, "stop": 1788097548400} \ No newline at end of file diff --git a/src/tests/allure-results/reports/e93a80b3-6ddd-452b-a5b8-67da9597a829-container.json b/src/tests/allure-results/reports/e93a80b3-6ddd-452b-a5b8-67da9597a829-container.json new file mode 100644 index 0000000..1e54538 --- /dev/null +++ b/src/tests/allure-results/reports/e93a80b3-6ddd-452b-a5b8-67da9597a829-container.json @@ -0,0 +1 @@ +{"uuid": "298e4927-3d8c-4f5a-98d5-79b1eccbc122", "children": ["02fe8fa3-9994-4a6e-8a40-39f49dcc5bf1"], "befores": [{"name": "auth_service", "status": "passed", "start": 1788097548391, "stop": 1788097548391}], "afters": [{"name": "auth_service::", "start": 1788097548391}], "start": 1788097548391, "stop": 1788097548391} \ No newline at end of file diff --git a/src/tests/allure-results/reports/e9a23663-2a09-4d31-99c5-597816ee70af-result.json b/src/tests/allure-results/reports/e9a23663-2a09-4d31-99c5-597816ee70af-result.json new file mode 100644 index 0000000..a356072 --- /dev/null +++ b/src/tests/allure-results/reports/e9a23663-2a09-4d31-99c5-597816ee70af-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_missing_sub_raises", "status": "passed", "start": 1788097548399, "stop": 1788097548399, "uuid": "3da99823-70b5-4d82-b71d-0e9b247c6769", "historyId": "91a345521e32c7d203bed30df1095e22", "testCaseId": "91a345521e32c7d203bed30df1095e22", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_missing_sub_raises", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/ea9fca1e-3cc3-487d-8e8e-03014b2a7bf9-result.json b/src/tests/allure-results/reports/ea9fca1e-3cc3-487d-8e8e-03014b2a7bf9-result.json new file mode 100644 index 0000000..5dd3b92 --- /dev/null +++ b/src/tests/allure-results/reports/ea9fca1e-3cc3-487d-8e8e-03014b2a7bf9-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_create_returns_valid_token", "status": "passed", "start": 1788097233087, "stop": 1788097233087, "uuid": "befaa749-a585-4b79-b5d9-2a0eb7885138", "historyId": "3f67b8e97d4fe49aca56055e437aa62a", "testCaseId": "3f67b8e97d4fe49aca56055e437aa62a", "fullName": "src.tests.test_unit.TestJWT#test_jwt_create_returns_valid_token", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12798-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/eacb18d1-2f0e-48c5-ba3f-3c1546254e4d-result.json b/src/tests/allure-results/reports/eacb18d1-2f0e-48c5-ba3f-3c1546254e4d-result.json new file mode 100644 index 0000000..5992b15 --- /dev/null +++ b/src/tests/allure-results/reports/eacb18d1-2f0e-48c5-ba3f-3c1546254e4d-result.json @@ -0,0 +1 @@ +{"name": "test_get_current_user_non_integer_sub", "status": "passed", "start": 1788097548393, "stop": 1788097548393, "uuid": "083be05a-17cc-4d3d-8a7b-54bd6077528f", "historyId": "2e312ee73e1645b78adfbb44a6c82d09", "testCaseId": "2e312ee73e1645b78adfbb44a6c82d09", "fullName": "src.tests.test_integra.TestGetCurrentUser#test_get_current_user_non_integer_sub", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_integra"}, {"name": "subSuite", "value": "TestGetCurrentUser"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_integra"}], "titlePath": ["src", "tests", "test_integra.py", "TestGetCurrentUser"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/efc3bc64-26f7-4d9e-8483-89f53d05fafd-container.json b/src/tests/allure-results/reports/efc3bc64-26f7-4d9e-8483-89f53d05fafd-container.json new file mode 100644 index 0000000..3f73968 --- /dev/null +++ b/src/tests/allure-results/reports/efc3bc64-26f7-4d9e-8483-89f53d05fafd-container.json @@ -0,0 +1 @@ +{"uuid": "bd4ddff6-1707-4246-8cc6-bca9c3b5307f", "children": ["befaa749-a585-4b79-b5d9-2a0eb7885138"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097233086, "stop": 1788097233086}], "afters": [{"name": "jwt_service::", "start": 1788097233087}], "start": 1788097233086, "stop": 1788097233087} \ No newline at end of file diff --git a/src/tests/allure-results/reports/f80ed526-6c45-45ce-a480-d926958601f8-result.json b/src/tests/allure-results/reports/f80ed526-6c45-45ce-a480-d926958601f8-result.json new file mode 100644 index 0000000..41cfda1 --- /dev/null +++ b/src/tests/allure-results/reports/f80ed526-6c45-45ce-a480-d926958601f8-result.json @@ -0,0 +1 @@ +{"name": "test_create_token_wrong_password", "status": "passed", "start": 1788097548387, "stop": 1788097548387, "uuid": "b5293907-b6e1-43d4-9e88-c17225081cf5", "historyId": "e8a0a4d1d5ea0fe43568b8a2317adf35", "testCaseId": "e8a0a4d1d5ea0fe43568b8a2317adf35", "fullName": "src.tests.test_integra.TestCreateToken#test_create_token_wrong_password", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_integra"}, {"name": "subSuite", "value": "TestCreateToken"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_integra"}], "titlePath": ["src", "tests", "test_integra.py", "TestCreateToken"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/f95379b4-a5db-4507-83e8-81a748ac9279-result.json b/src/tests/allure-results/reports/f95379b4-a5db-4507-83e8-81a748ac9279-result.json new file mode 100644 index 0000000..dac0f5c --- /dev/null +++ b/src/tests/allure-results/reports/f95379b4-a5db-4507-83e8-81a748ac9279-result.json @@ -0,0 +1 @@ +{"name": "test_hash_check_correct_password", "status": "passed", "start": 1788097549108, "stop": 1788097549578, "uuid": "28fd8a04-9f03-4d24-bd1b-8397a5c79ba5", "historyId": "8234cd4dcec9159bea6a535bf4b5d2d7", "testCaseId": "8234cd4dcec9159bea6a535bf4b5d2d7", "fullName": "src.tests.test_unit.TestHash#test_hash_check_correct_password", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestHash"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "13149-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestHash"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/fea33b5c-d652-457f-9fc1-13730db1eeae-result.json b/src/tests/allure-results/reports/fea33b5c-d652-457f-9fc1-13730db1eeae-result.json new file mode 100644 index 0000000..63c46b3 --- /dev/null +++ b/src/tests/allure-results/reports/fea33b5c-d652-457f-9fc1-13730db1eeae-result.json @@ -0,0 +1 @@ +{"name": "test_jwt_decode_missing_sub_raises", "status": "passed", "start": 1788097328622, "stop": 1788097328622, "uuid": "d65534c7-c788-4e96-b461-03c922e72be9", "historyId": "91a345521e32c7d203bed30df1095e22", "testCaseId": "91a345521e32c7d203bed30df1095e22", "fullName": "src.tests.test_unit.TestJWT#test_jwt_decode_missing_sub_raises", "labels": [{"name": "parentSuite", "value": "src.tests"}, {"name": "suite", "value": "test_unit"}, {"name": "subSuite", "value": "TestJWT"}, {"name": "host", "value": "MacBook-Pro-mario.local"}, {"name": "thread", "value": "12923-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "src.tests.test_unit"}], "titlePath": ["src", "tests", "test_unit.py", "TestJWT"]} \ No newline at end of file diff --git a/src/tests/allure-results/reports/ff1060e6-cf65-44ea-b393-e913e9db7e12-container.json b/src/tests/allure-results/reports/ff1060e6-cf65-44ea-b393-e913e9db7e12-container.json new file mode 100644 index 0000000..acdd718 --- /dev/null +++ b/src/tests/allure-results/reports/ff1060e6-cf65-44ea-b393-e913e9db7e12-container.json @@ -0,0 +1 @@ +{"uuid": "b881055a-8155-49cc-b6c6-c23c8c377779", "children": ["b60ad5ca-1c2a-4ca3-8cd7-e107726388b7"], "befores": [{"name": "jwt_service", "status": "passed", "start": 1788097233200, "stop": 1788097233200}], "afters": [{"name": "jwt_service::", "start": 1788097233225}], "start": 1788097233200, "stop": 1788097233225} \ No newline at end of file diff --git a/src/tests/e2e_tests.py b/src/tests/e2e_tests.py deleted file mode 100644 index a1cbccd..0000000 --- a/src/tests/e2e_tests.py +++ /dev/null @@ -1 +0,0 @@ -#Сюда e2e тесты \ No newline at end of file diff --git a/src/tests/integr_tests.py b/src/tests/integr_tests.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/tests/test_integra.py b/src/tests/test_integra.py new file mode 100644 index 0000000..bbd3dc2 --- /dev/null +++ b/src/tests/test_integra.py @@ -0,0 +1,103 @@ +from types import SimpleNamespace +from unittest.mock import MagicMock, patch + +import pytest +from fastapi import HTTPException + +from src.service.auth.auth import Auth + + +@pytest.fixture +def auth_service(): + with patch("src.service.auth.auth.ActionsDB"), \ + patch("src.service.auth.auth.JWT"), \ + patch("src.service.auth.auth.Hash"): + service = Auth() + service.DB = MagicMock() + service.jwt_service = MagicMock() + service.hashes = MagicMock() + return service + + +def make_user(id=1, hashed_password="hashed", status=True): + return SimpleNamespace(id=id, hashed_password=hashed_password, status=status) + + +class TestCreateToken: + + def test_create_token_success(self, auth_service): + user = make_user(id=42) + auth_service.DB.get_user_by_email.return_value = user + auth_service.hashes.hash_check.return_value = True + auth_service.jwt_service.jwt_create.return_value = "fake_token" + + result = auth_service.create_token("test@mail.com", "password") + + assert result == {"access_token": "fake_token", "token_type": "bearer"} + auth_service.jwt_service.jwt_create.assert_called_once_with({"sub": "42"}) + + def test_create_token_user_not_found(self, auth_service): + auth_service.DB.get_user_by_email.return_value = None + + with pytest.raises(HTTPException) as exc_info: + auth_service.create_token("test@mail.com", "password") + assert exc_info.value.status_code == 401 + assert exc_info.value.detail == "Wrong credentials in create_token" + + def test_create_token_wrong_password(self, auth_service): + user = make_user() + auth_service.DB.get_user_by_email.return_value = user + auth_service.hashes.hash_check.return_value = False + + with pytest.raises(HTTPException) as exc_info: + auth_service.create_token("test@mail.com", "wrongpassword") + assert exc_info.value.status_code == 401 + assert exc_info.value.detail == "Wrong credentials in create_token" + + def test_create_token_deactivated_user(self, auth_service): + user = make_user(status=False) + auth_service.DB.get_user_by_email.return_value = user + auth_service.hashes.hash_check.return_value = True + + with pytest.raises(HTTPException) as exc_info: + auth_service.create_token("test@mail.com", "password") + assert exc_info.value.status_code == 401 + assert exc_info.value.detail == "This User is deactivated" + + +class TestGetCurrentUser: + + def test_get_current_user_success(self, auth_service): + user = make_user(id=42) + auth_service.jwt_service.jwt_decode.return_value = {"sub": "42"} + auth_service.DB.get_user_by_id.return_value = user + + result = auth_service.get_current_user("some_token") + + assert result == user + auth_service.DB.get_user_by_id.assert_called_once_with(id=42) + + def test_get_current_user_missing_sub(self, auth_service): + auth_service.jwt_service.jwt_decode.return_value = {} + + with pytest.raises(HTTPException) as exc_info: + auth_service.get_current_user("some_token") + assert exc_info.value.status_code == 401 + assert exc_info.value.detail == "JWT token is incorrect" + + def test_get_current_user_non_integer_sub(self, auth_service): + auth_service.jwt_service.jwt_decode.return_value = {"sub": "not_a_number"} + + with pytest.raises(HTTPException) as exc_info: + auth_service.get_current_user("some_token") + assert exc_info.value.status_code == 401 + assert exc_info.value.detail == "JWT payload is incorrect" + + def test_get_current_user_not_found_in_db(self, auth_service): + auth_service.jwt_service.jwt_decode.return_value = {"sub": "42"} + auth_service.DB.get_user_by_id.return_value = None + + with pytest.raises(HTTPException) as exc_info: + auth_service.get_current_user("some_token") + assert exc_info.value.status_code == 401 + assert exc_info.value.detail == "JWT tries to allocate a non-existing user" \ No newline at end of file diff --git a/src/tests/test_unit.py b/src/tests/test_unit.py new file mode 100644 index 0000000..5e5f6e1 --- /dev/null +++ b/src/tests/test_unit.py @@ -0,0 +1,96 @@ +from datetime import datetime, timedelta, timezone + +import pytest +from fastapi import HTTPException +from jose import jwt + +from src.model.env_read.env import ENV +from src.service.JWT.jwt import JWT, Hash + + +@pytest.fixture +def jwt_service(): + return JWT() + + +@pytest.fixture +def hash_service(): + return Hash() + + +class TestJWT: + + def test_jwt_create_returns_valid_token(self, jwt_service): + token = jwt_service.jwt_create({"sub": "user1"}) + payload = jwt.decode(token, ENV.SECRET_STRING, algorithms=[ENV.ALGORITHM]) + assert payload["sub"] == "user1" + + def test_jwt_create_sets_expiration(self, jwt_service): + token = jwt_service.jwt_create({"sub": "user1"}) + payload = jwt.decode(token, ENV.SECRET_STRING, algorithms=[ENV.ALGORITHM]) + assert "exp" in payload + + def test_jwt_decode_valid_token(self, jwt_service): + token = jwt_service.jwt_create({"sub": "user1"}) + payload = jwt_service.jwt_decode(token) + assert payload["sub"] == "user1" + + def test_jwt_decode_missing_sub_raises(self, jwt_service): + token = jwt.encode( + {"exp": datetime.now(timezone.utc) + timedelta(minutes=5)}, + ENV.SECRET_STRING, + ENV.ALGORITHM, + ) + with pytest.raises(HTTPException) as exc_info: + jwt_service.jwt_decode(token) + assert exc_info.value.status_code == 401 + assert exc_info.value.detail == "JWT payload is None" + + def test_jwt_decode_invalid_token_raises(self, jwt_service): + with pytest.raises(HTTPException) as exc_info: + jwt_service.jwt_decode("not.a.valid.token") + assert exc_info.value.status_code == 401 + assert exc_info.value.detail == "JWTError" + + def test_jwt_decode_expired_token_raises(self, jwt_service): + token = jwt.encode( + {"sub": "user1", "exp": datetime.now(timezone.utc) - timedelta(minutes=5)}, + ENV.SECRET_STRING, + ENV.ALGORITHM, + ) + with pytest.raises(HTTPException) as exc_info: + jwt_service.jwt_decode(token) + assert exc_info.value.status_code == 401 + assert exc_info.value.detail == "JWTError" + + def test_jwt_decode_wrong_secret_raises(self, jwt_service): + token = jwt.encode( + {"sub": "user1", "exp": datetime.now(timezone.utc) + timedelta(minutes=5)}, + "wrong_secret", + ENV.ALGORITHM, + ) + with pytest.raises(HTTPException) as exc_info: + jwt_service.jwt_decode(token) + assert exc_info.value.status_code == 401 + assert exc_info.value.detail == "JWTError" + + +class TestHash: + + def test_plain_to_hash_returns_string(self, hash_service): + hashed = hash_service.plain_to_hash("mypassword") + assert isinstance(hashed, str) + assert hashed != "mypassword" + + def test_plain_to_hash_different_salts(self, hash_service): + h1 = hash_service.plain_to_hash("mypassword") + h2 = hash_service.plain_to_hash("mypassword") + assert h1 != h2 + + def test_hash_check_correct_password(self, hash_service): + hashed = hash_service.plain_to_hash("mypassword") + assert hash_service.hash_check("mypassword", hashed) is True + + def test_hash_check_wrong_password(self, hash_service): + hashed = hash_service.plain_to_hash("mypassword") + assert hash_service.hash_check("wrongpassword", hashed) is False \ No newline at end of file diff --git a/src/tests/unit_tests.py b/src/tests/unit_tests.py deleted file mode 100644 index fcaaa5f..0000000 --- a/src/tests/unit_tests.py +++ /dev/null @@ -1 +0,0 @@ -#Сюда unit \ No newline at end of file