From 821db9fae77e5a581ef7c69d7a109815e6b43e28 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Wed, 5 Apr 2023 15:54:15 -0400 Subject: [PATCH 01/61] DELETE/REBASE this out before PR - smushing dev envs --- poetry.lock | 1059 +++++++++++++++++++++++++++++++++++++----------- pyproject.toml | 25 +- src/vtp/cli | 1 + src/vtp/core | 1 + src/vtp/ops | 1 + 5 files changed, 850 insertions(+), 237 deletions(-) create mode 120000 src/vtp/cli create mode 120000 src/vtp/core create mode 120000 src/vtp/ops diff --git a/poetry.lock b/poetry.lock index b5689d6..641c77c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,16 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. + +[[package]] +name = "alabaster" +version = "0.7.13" +description = "A configurable sidebar-enabled Sphinx theme" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, +] [[package]] name = "anyio" @@ -23,14 +35,14 @@ trio = ["trio (>=0.16,<0.22)"] [[package]] name = "astroid" -version = "2.14.2" +version = "2.15.2" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false python-versions = ">=3.7.2" files = [ - {file = "astroid-2.14.2-py3-none-any.whl", hash = "sha256:0e0e3709d64fbffd3037e4ff403580550f14471fd3eaae9fa11cc9a5c7901153"}, - {file = "astroid-2.14.2.tar.gz", hash = "sha256:a3cf9f02c53dd259144a7e8f3ccd75d67c9a8c716ef183e0c1f291bc5d7bb3cf"}, + {file = "astroid-2.15.2-py3-none-any.whl", hash = "sha256:dea89d9f99f491c66ac9c04ebddf91e4acf8bd711722175fe6245c0725cc19bb"}, + {file = "astroid-2.15.2.tar.gz", hash = "sha256:6e61b85c891ec53b07471aec5878f4ac6446a41e590ede0f2ce095f39f7d49dd"}, ] [package.dependencies] @@ -60,39 +72,51 @@ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib- tests = ["attrs[tests-no-zope]", "zope.interface"] tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] +[[package]] +name = "babel" +version = "2.12.1" +description = "Internationalization utilities" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] + [[package]] name = "black" -version = "23.1.0" +version = "23.3.0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "black-23.1.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:b6a92a41ee34b883b359998f0c8e6eb8e99803aa8bf3123bf2b2e6fec505a221"}, - {file = "black-23.1.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:57c18c5165c1dbe291d5306e53fb3988122890e57bd9b3dcb75f967f13411a26"}, - {file = "black-23.1.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:9880d7d419bb7e709b37e28deb5e68a49227713b623c72b2b931028ea65f619b"}, - {file = "black-23.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6663f91b6feca5d06f2ccd49a10f254f9298cc1f7f49c46e498a0771b507104"}, - {file = "black-23.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9afd3f493666a0cd8f8df9a0200c6359ac53940cbde049dcb1a7eb6ee2dd7074"}, - {file = "black-23.1.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:bfffba28dc52a58f04492181392ee380e95262af14ee01d4bc7bb1b1c6ca8d27"}, - {file = "black-23.1.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c1c476bc7b7d021321e7d93dc2cbd78ce103b84d5a4cf97ed535fbc0d6660648"}, - {file = "black-23.1.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:382998821f58e5c8238d3166c492139573325287820963d2f7de4d518bd76958"}, - {file = "black-23.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bf649fda611c8550ca9d7592b69f0637218c2369b7744694c5e4902873b2f3a"}, - {file = "black-23.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:121ca7f10b4a01fd99951234abdbd97728e1240be89fde18480ffac16503d481"}, - {file = "black-23.1.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:a8471939da5e824b891b25751955be52ee7f8a30a916d570a5ba8e0f2eb2ecad"}, - {file = "black-23.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8178318cb74f98bc571eef19068f6ab5613b3e59d4f47771582f04e175570ed8"}, - {file = "black-23.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a436e7881d33acaf2536c46a454bb964a50eff59b21b51c6ccf5a40601fbef24"}, - {file = "black-23.1.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:a59db0a2094d2259c554676403fa2fac3473ccf1354c1c63eccf7ae65aac8ab6"}, - {file = "black-23.1.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:0052dba51dec07ed029ed61b18183942043e00008ec65d5028814afaab9a22fd"}, - {file = "black-23.1.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:49f7b39e30f326a34b5c9a4213213a6b221d7ae9d58ec70df1c4a307cf2a1580"}, - {file = "black-23.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:162e37d49e93bd6eb6f1afc3e17a3d23a823042530c37c3c42eeeaf026f38468"}, - {file = "black-23.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b70eb40a78dfac24842458476135f9b99ab952dd3f2dab738c1881a9b38b753"}, - {file = "black-23.1.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:a29650759a6a0944e7cca036674655c2f0f63806ddecc45ed40b7b8aa314b651"}, - {file = "black-23.1.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:bb460c8561c8c1bec7824ecbc3ce085eb50005883a6203dcfb0122e95797ee06"}, - {file = "black-23.1.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c91dfc2c2a4e50df0026f88d2215e166616e0c80e86004d0003ece0488db2739"}, - {file = "black-23.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a951cc83ab535d248c89f300eccbd625e80ab880fbcfb5ac8afb5f01a258ac9"}, - {file = "black-23.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0680d4380db3719ebcfb2613f34e86c8e6d15ffeabcf8ec59355c5e7b85bb555"}, - {file = "black-23.1.0-py3-none-any.whl", hash = "sha256:7a0f701d314cfa0896b9001df70a530eb2472babb76086344e688829efd97d32"}, - {file = "black-23.1.0.tar.gz", hash = "sha256:b0bd97bea8903f5a2ba7219257a44e3f1f9d00073d6cc1add68f0beec69692ac"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, + {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, + {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, + {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, + {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, + {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, + {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, + {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, + {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, + {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, + {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, + {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, + {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, + {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, ] [package.dependencies] @@ -122,6 +146,91 @@ files = [ {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, ] +[[package]] +name = "charset-normalizer" +version = "3.1.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "dev" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, + {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, +] + [[package]] name = "click" version = "8.1.3" @@ -151,63 +260,63 @@ files = [ [[package]] name = "coverage" -version = "7.1.0" +version = "7.2.2" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "coverage-7.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b946bbcd5a8231383450b195cfb58cb01cbe7f8949f5758566b881df4b33baf"}, - {file = "coverage-7.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec8e767f13be637d056f7e07e61d089e555f719b387a7070154ad80a0ff31801"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a5a5879a939cb84959d86869132b00176197ca561c664fc21478c1eee60d75"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b643cb30821e7570c0aaf54feaf0bfb630b79059f85741843e9dc23f33aaca2c"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32df215215f3af2c1617a55dbdfb403b772d463d54d219985ac7cd3bf124cada"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:33d1ae9d4079e05ac4cc1ef9e20c648f5afabf1a92adfaf2ccf509c50b85717f"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:29571503c37f2ef2138a306d23e7270687c0efb9cab4bd8038d609b5c2393a3a"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:63ffd21aa133ff48c4dff7adcc46b7ec8b565491bfc371212122dd999812ea1c"}, - {file = "coverage-7.1.0-cp310-cp310-win32.whl", hash = "sha256:4b14d5e09c656de5038a3f9bfe5228f53439282abcab87317c9f7f1acb280352"}, - {file = "coverage-7.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:8361be1c2c073919500b6601220a6f2f98ea0b6d2fec5014c1d9cfa23dd07038"}, - {file = "coverage-7.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:da9b41d4539eefd408c46725fb76ecba3a50a3367cafb7dea5f250d0653c1040"}, - {file = "coverage-7.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5b15ed7644ae4bee0ecf74fee95808dcc34ba6ace87e8dfbf5cb0dc20eab45a"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d12d076582507ea460ea2a89a8c85cb558f83406c8a41dd641d7be9a32e1274f"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2617759031dae1bf183c16cef8fcfb3de7617f394c813fa5e8e46e9b82d4222"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4e4881fa9e9667afcc742f0c244d9364d197490fbc91d12ac3b5de0bf2df146"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9d58885215094ab4a86a6aef044e42994a2bd76a446dc59b352622655ba6621b"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ffeeb38ee4a80a30a6877c5c4c359e5498eec095878f1581453202bfacc8fbc2"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3baf5f126f30781b5e93dbefcc8271cb2491647f8283f20ac54d12161dff080e"}, - {file = "coverage-7.1.0-cp311-cp311-win32.whl", hash = "sha256:ded59300d6330be27bc6cf0b74b89ada58069ced87c48eaf9344e5e84b0072f7"}, - {file = "coverage-7.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:6a43c7823cd7427b4ed763aa7fb63901ca8288591323b58c9cd6ec31ad910f3c"}, - {file = "coverage-7.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7a726d742816cb3a8973c8c9a97539c734b3a309345236cd533c4883dda05b8d"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc7c85a150501286f8b56bd8ed3aa4093f4b88fb68c0843d21ff9656f0009d6a"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5b4198d85a3755d27e64c52f8c95d6333119e49fd001ae5798dac872c95e0f8"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb726cb861c3117a553f940372a495fe1078249ff5f8a5478c0576c7be12050"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:51b236e764840a6df0661b67e50697aaa0e7d4124ca95e5058fa3d7cbc240b7c"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7ee5c9bb51695f80878faaa5598040dd6c9e172ddcf490382e8aedb8ec3fec8d"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c31b75ae466c053a98bf26843563b3b3517b8f37da4d47b1c582fdc703112bc3"}, - {file = "coverage-7.1.0-cp37-cp37m-win32.whl", hash = "sha256:3b155caf3760408d1cb903b21e6a97ad4e2bdad43cbc265e3ce0afb8e0057e73"}, - {file = "coverage-7.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2a60d6513781e87047c3e630b33b4d1e89f39836dac6e069ffee28c4786715f5"}, - {file = "coverage-7.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2cba5c6db29ce991029b5e4ac51eb36774458f0a3b8d3137241b32d1bb91f06"}, - {file = "coverage-7.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:beeb129cacea34490ffd4d6153af70509aa3cda20fdda2ea1a2be870dfec8d52"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c45948f613d5d18c9ec5eaa203ce06a653334cf1bd47c783a12d0dd4fd9c851"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef382417db92ba23dfb5864a3fc9be27ea4894e86620d342a116b243ade5d35d"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c7c0d0827e853315c9bbd43c1162c006dd808dbbe297db7ae66cd17b07830f0"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e5cdbb5cafcedea04924568d990e20ce7f1945a1dd54b560f879ee2d57226912"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9817733f0d3ea91bea80de0f79ef971ae94f81ca52f9b66500c6a2fea8e4b4f8"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:218fe982371ac7387304153ecd51205f14e9d731b34fb0568181abaf7b443ba0"}, - {file = "coverage-7.1.0-cp38-cp38-win32.whl", hash = "sha256:04481245ef966fbd24ae9b9e537ce899ae584d521dfbe78f89cad003c38ca2ab"}, - {file = "coverage-7.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8ae125d1134bf236acba8b83e74c603d1b30e207266121e76484562bc816344c"}, - {file = "coverage-7.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2bf1d5f2084c3932b56b962a683074a3692bce7cabd3aa023c987a2a8e7612f6"}, - {file = "coverage-7.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:98b85dd86514d889a2e3dd22ab3c18c9d0019e696478391d86708b805f4ea0fa"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38da2db80cc505a611938d8624801158e409928b136c8916cd2e203970dde4dc"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3164d31078fa9efe406e198aecd2a02d32a62fecbdef74f76dad6a46c7e48311"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db61a79c07331e88b9a9974815c075fbd812bc9dbc4dc44b366b5368a2936063"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ccb092c9ede70b2517a57382a601619d20981f56f440eae7e4d7eaafd1d1d09"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:33ff26d0f6cc3ca8de13d14fde1ff8efe1456b53e3f0273e63cc8b3c84a063d8"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d47dd659a4ee952e90dc56c97d78132573dc5c7b09d61b416a9deef4ebe01a0c"}, - {file = "coverage-7.1.0-cp39-cp39-win32.whl", hash = "sha256:d248cd4a92065a4d4543b8331660121b31c4148dd00a691bfb7a5cdc7483cfa4"}, - {file = "coverage-7.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7ed681b0f8e8bcbbffa58ba26fcf5dbc8f79e7997595bf071ed5430d8c08d6f3"}, - {file = "coverage-7.1.0-pp37.pp38.pp39-none-any.whl", hash = "sha256:755e89e32376c850f826c425ece2c35a4fc266c081490eb0a841e7c1cb0d3bda"}, - {file = "coverage-7.1.0.tar.gz", hash = "sha256:10188fe543560ec4874f974b5305cd1a8bdcfa885ee00ea3a03733464c4ca265"}, + {file = "coverage-7.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c90e73bdecb7b0d1cea65a08cb41e9d672ac6d7995603d6465ed4914b98b9ad7"}, + {file = "coverage-7.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e2926b8abedf750c2ecf5035c07515770944acf02e1c46ab08f6348d24c5f94d"}, + {file = "coverage-7.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57b77b9099f172804e695a40ebaa374f79e4fb8b92f3e167f66facbf92e8e7f5"}, + {file = "coverage-7.2.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:efe1c0adad110bf0ad7fb59f833880e489a61e39d699d37249bdf42f80590169"}, + {file = "coverage-7.2.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2199988e0bc8325d941b209f4fd1c6fa007024b1442c5576f1a32ca2e48941e6"}, + {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:81f63e0fb74effd5be736cfe07d710307cc0a3ccb8f4741f7f053c057615a137"}, + {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:186e0fc9cf497365036d51d4d2ab76113fb74f729bd25da0975daab2e107fd90"}, + {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:420f94a35e3e00a2b43ad5740f935358e24478354ce41c99407cddd283be00d2"}, + {file = "coverage-7.2.2-cp310-cp310-win32.whl", hash = "sha256:38004671848b5745bb05d4d621526fca30cee164db42a1f185615f39dc997292"}, + {file = "coverage-7.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:0ce383d5f56d0729d2dd40e53fe3afeb8f2237244b0975e1427bfb2cf0d32bab"}, + {file = "coverage-7.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3eb55b7b26389dd4f8ae911ba9bc8c027411163839dea4c8b8be54c4ee9ae10b"}, + {file = "coverage-7.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2b96123a453a2d7f3995ddb9f28d01fd112319a7a4d5ca99796a7ff43f02af5"}, + {file = "coverage-7.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:299bc75cb2a41e6741b5e470b8c9fb78d931edbd0cd009c58e5c84de57c06731"}, + {file = "coverage-7.2.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e1df45c23d4230e3d56d04414f9057eba501f78db60d4eeecfcb940501b08fd"}, + {file = "coverage-7.2.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:006ed5582e9cbc8115d2e22d6d2144a0725db542f654d9d4fda86793832f873d"}, + {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d683d230b5774816e7d784d7ed8444f2a40e7a450e5720d58af593cb0b94a212"}, + {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8efb48fa743d1c1a65ee8787b5b552681610f06c40a40b7ef94a5b517d885c54"}, + {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c752d5264053a7cf2fe81c9e14f8a4fb261370a7bb344c2a011836a96fb3f57"}, + {file = "coverage-7.2.2-cp311-cp311-win32.whl", hash = "sha256:55272f33da9a5d7cccd3774aeca7a01e500a614eaea2a77091e9be000ecd401d"}, + {file = "coverage-7.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:92ebc1619650409da324d001b3a36f14f63644c7f0a588e331f3b0f67491f512"}, + {file = "coverage-7.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5afdad4cc4cc199fdf3e18088812edcf8f4c5a3c8e6cb69127513ad4cb7471a9"}, + {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0484d9dd1e6f481b24070c87561c8d7151bdd8b044c93ac99faafd01f695c78e"}, + {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d530191aa9c66ab4f190be8ac8cc7cfd8f4f3217da379606f3dd4e3d83feba69"}, + {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ac0f522c3b6109c4b764ffec71bf04ebc0523e926ca7cbe6c5ac88f84faced0"}, + {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ba279aae162b20444881fc3ed4e4f934c1cf8620f3dab3b531480cf602c76b7f"}, + {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:53d0fd4c17175aded9c633e319360d41a1f3c6e352ba94edcb0fa5167e2bad67"}, + {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c99cb7c26a3039a8a4ee3ca1efdde471e61b4837108847fb7d5be7789ed8fd9"}, + {file = "coverage-7.2.2-cp37-cp37m-win32.whl", hash = "sha256:5cc0783844c84af2522e3a99b9b761a979a3ef10fb87fc4048d1ee174e18a7d8"}, + {file = "coverage-7.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:817295f06eacdc8623dc4df7d8b49cea65925030d4e1e2a7c7218380c0072c25"}, + {file = "coverage-7.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6146910231ece63facfc5984234ad1b06a36cecc9fd0c028e59ac7c9b18c38c6"}, + {file = "coverage-7.2.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:387fb46cb8e53ba7304d80aadca5dca84a2fbf6fe3faf6951d8cf2d46485d1e5"}, + {file = "coverage-7.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:046936ab032a2810dcaafd39cc4ef6dd295df1a7cbead08fe996d4765fca9fe4"}, + {file = "coverage-7.2.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e627dee428a176ffb13697a2c4318d3f60b2ccdde3acdc9b3f304206ec130ccd"}, + {file = "coverage-7.2.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fa54fb483decc45f94011898727802309a109d89446a3c76387d016057d2c84"}, + {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3668291b50b69a0c1ef9f462c7df2c235da3c4073f49543b01e7eb1dee7dd540"}, + {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7c20b731211261dc9739bbe080c579a1835b0c2d9b274e5fcd903c3a7821cf88"}, + {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5764e1f7471cb8f64b8cda0554f3d4c4085ae4b417bfeab236799863703e5de2"}, + {file = "coverage-7.2.2-cp38-cp38-win32.whl", hash = "sha256:4f01911c010122f49a3e9bdc730eccc66f9b72bd410a3a9d3cb8448bb50d65d3"}, + {file = "coverage-7.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:c448b5c9e3df5448a362208b8d4b9ed85305528313fca1b479f14f9fe0d873b8"}, + {file = "coverage-7.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfe7085783cda55e53510482fa7b5efc761fad1abe4d653b32710eb548ebdd2d"}, + {file = "coverage-7.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9d22e94e6dc86de981b1b684b342bec5e331401599ce652900ec59db52940005"}, + {file = "coverage-7.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:507e4720791977934bba016101579b8c500fb21c5fa3cd4cf256477331ddd988"}, + {file = "coverage-7.2.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc4803779f0e4b06a2361f666e76f5c2e3715e8e379889d02251ec911befd149"}, + {file = "coverage-7.2.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db8c2c5ace167fd25ab5dd732714c51d4633f58bac21fb0ff63b0349f62755a8"}, + {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4f68ee32d7c4164f1e2c8797535a6d0a3733355f5861e0f667e37df2d4b07140"}, + {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d52f0a114b6a58305b11a5cdecd42b2e7f1ec77eb20e2b33969d702feafdd016"}, + {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:797aad79e7b6182cb49c08cc5d2f7aa7b2128133b0926060d0a8889ac43843be"}, + {file = "coverage-7.2.2-cp39-cp39-win32.whl", hash = "sha256:db45eec1dfccdadb179b0f9ca616872c6f700d23945ecc8f21bb105d74b1c5fc"}, + {file = "coverage-7.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:8dbe2647bf58d2c5a6c5bcc685f23b5f371909a5624e9f5cd51436d6a9f6c6ef"}, + {file = "coverage-7.2.2-pp37.pp38.pp39-none-any.whl", hash = "sha256:872d6ce1f5be73f05bea4df498c140b9e7ee5418bfa2cc8204e7f9b817caa968"}, + {file = "coverage-7.2.2.tar.gz", hash = "sha256:36dd42da34fe94ed98c39887b86db9d06777b1c8f860520e21126a75507024f2"}, ] [package.dependencies] @@ -216,6 +325,25 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] +[[package]] +name = "deepdiff" +version = "6.3.0" +description = "Deep Difference and Search of any Python object/data. Recreate objects by adding adding deltas to each other." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "deepdiff-6.3.0-py3-none-any.whl", hash = "sha256:15838bd1cbd046ce15ed0c41e837cd04aff6b3e169c5e06fca69d7aa11615ceb"}, + {file = "deepdiff-6.3.0.tar.gz", hash = "sha256:6a3bf1e7228ac5c71ca2ec43505ca0a743ff54ec77aa08d7db22de6bc7b2b644"}, +] + +[package.dependencies] +ordered-set = ">=4.0.2,<4.2.0" + +[package.extras] +cli = ["click (==8.1.3)", "pyyaml (==6.0)"] +optimize = ["orjson"] + [[package]] name = "dill" version = "0.3.6" @@ -231,16 +359,28 @@ files = [ [package.extras] graph = ["objgraph (>=1.7.2)"] +[[package]] +name = "docutils" +version = "0.19" +description = "Docutils -- Python Documentation Utilities" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "docutils-0.19-py3-none-any.whl", hash = "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc"}, + {file = "docutils-0.19.tar.gz", hash = "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6"}, +] + [[package]] name = "exceptiongroup" -version = "1.1.0" +version = "1.1.1" description = "Backport of PEP 654 (exception groups)" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, - {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, + {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, + {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, ] [package.extras] @@ -355,6 +495,38 @@ files = [ {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] + +[[package]] +name = "importlib-metadata" +version = "6.1.0" +description = "Read metadata from Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-6.1.0-py3-none-any.whl", hash = "sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09"}, + {file = "importlib_metadata-6.1.0.tar.gz", hash = "sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] + [[package]] name = "importlib-resources" version = "5.12.0" @@ -404,6 +576,24 @@ pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib" plugins = ["setuptools"] requirements-deprecated-finder = ["pip-api", "pipreqs"] +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + [[package]] name = "lazy-object-proxy" version = "1.9.0" @@ -450,6 +640,66 @@ files = [ {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, ] +[[package]] +name = "markupsafe" +version = "2.1.2" +description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, + {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, +] + [[package]] name = "mccabe" version = "0.7.0" @@ -464,42 +714,42 @@ files = [ [[package]] name = "mypy" -version = "1.0.1" +version = "1.1.1" description = "Optional static typing for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "mypy-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a"}, - {file = "mypy-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf"}, - {file = "mypy-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0"}, - {file = "mypy-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b"}, - {file = "mypy-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4"}, - {file = "mypy-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262"}, - {file = "mypy-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8"}, - {file = "mypy-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8"}, - {file = "mypy-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65"}, - {file = "mypy-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994"}, - {file = "mypy-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64f48c6176e243ad015e995de05af7f22bbe370dbb5b32bd6988438ec873919"}, - {file = "mypy-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fdd63e4f50e3538617887e9aee91855368d9fc1dea30da743837b0df7373bc4"}, - {file = "mypy-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbeb24514c4acbc78d205f85dd0e800f34062efcc1f4a4857c57e4b4b8712bff"}, - {file = "mypy-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a2948c40a7dd46c1c33765718936669dc1f628f134013b02ff5ac6c7ef6942bf"}, - {file = "mypy-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bc8d6bd3b274dd3846597855d96d38d947aedba18776aa998a8d46fabdaed76"}, - {file = "mypy-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:17455cda53eeee0a4adb6371a21dd3dbf465897de82843751cf822605d152c8c"}, - {file = "mypy-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e831662208055b006eef68392a768ff83596035ffd6d846786578ba1714ba8f6"}, - {file = "mypy-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e60d0b09f62ae97a94605c3f73fd952395286cf3e3b9e7b97f60b01ddfbbda88"}, - {file = "mypy-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:0af4f0e20706aadf4e6f8f8dc5ab739089146b83fd53cb4a7e0e850ef3de0bb6"}, - {file = "mypy-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24189f23dc66f83b839bd1cce2dfc356020dfc9a8bae03978477b15be61b062e"}, - {file = "mypy-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93a85495fb13dc484251b4c1fd7a5ac370cd0d812bbfc3b39c1bafefe95275d5"}, - {file = "mypy-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f546ac34093c6ce33f6278f7c88f0f147a4849386d3bf3ae193702f4fe31407"}, - {file = "mypy-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6c2ccb7af7154673c591189c3687b013122c5a891bb5651eca3db8e6c6c55bd"}, - {file = "mypy-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:15b5a824b58c7c822c51bc66308e759243c32631896743f030daf449fe3677f3"}, - {file = "mypy-1.0.1-py3-none-any.whl", hash = "sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4"}, - {file = "mypy-1.0.1.tar.gz", hash = "sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d"}, + {file = "mypy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39c7119335be05630611ee798cc982623b9e8f0cff04a0b48dfc26100e0b97af"}, + {file = "mypy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:61bf08362e93b6b12fad3eab68c4ea903a077b87c90ac06c11e3d7a09b56b9c1"}, + {file = "mypy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbb19c9f662e41e474e0cff502b7064a7edc6764f5262b6cd91d698163196799"}, + {file = "mypy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:315ac73cc1cce4771c27d426b7ea558fb4e2836f89cb0296cbe056894e3a1f78"}, + {file = "mypy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5cb14ff9919b7df3538590fc4d4c49a0f84392237cbf5f7a816b4161c061829e"}, + {file = "mypy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:26cdd6a22b9b40b2fd71881a8a4f34b4d7914c679f154f43385ca878a8297389"}, + {file = "mypy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b5f81b40d94c785f288948c16e1f2da37203c6006546c5d947aab6f90aefef2"}, + {file = "mypy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21b437be1c02712a605591e1ed1d858aba681757a1e55fe678a15c2244cd68a5"}, + {file = "mypy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d809f88734f44a0d44959d795b1e6f64b2bbe0ea4d9cc4776aa588bb4229fc1c"}, + {file = "mypy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:a380c041db500e1410bb5b16b3c1c35e61e773a5c3517926b81dfdab7582be54"}, + {file = "mypy-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b7c7b708fe9a871a96626d61912e3f4ddd365bf7f39128362bc50cbd74a634d5"}, + {file = "mypy-1.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1c10fa12df1232c936830839e2e935d090fc9ee315744ac33b8a32216b93707"}, + {file = "mypy-1.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0a28a76785bf57655a8ea5eb0540a15b0e781c807b5aa798bd463779988fa1d5"}, + {file = "mypy-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ef6a01e563ec6a4940784c574d33f6ac1943864634517984471642908b30b6f7"}, + {file = "mypy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d64c28e03ce40d5303450f547e07418c64c241669ab20610f273c9e6290b4b0b"}, + {file = "mypy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64cc3afb3e9e71a79d06e3ed24bb508a6d66f782aff7e56f628bf35ba2e0ba51"}, + {file = "mypy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce61663faf7a8e5ec6f456857bfbcec2901fbdb3ad958b778403f63b9e606a1b"}, + {file = "mypy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2b0c373d071593deefbcdd87ec8db91ea13bd8f1328d44947e88beae21e8d5e9"}, + {file = "mypy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:2888ce4fe5aae5a673386fa232473014056967f3904f5abfcf6367b5af1f612a"}, + {file = "mypy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:19ba15f9627a5723e522d007fe708007bae52b93faab00f95d72f03e1afa9598"}, + {file = "mypy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:59bbd71e5c58eed2e992ce6523180e03c221dcd92b52f0e792f291d67b15a71c"}, + {file = "mypy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9401e33814cec6aec8c03a9548e9385e0e228fc1b8b0a37b9ea21038e64cdd8a"}, + {file = "mypy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4b398d8b1f4fba0e3c6463e02f8ad3346f71956b92287af22c9b12c3ec965a9f"}, + {file = "mypy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:69b35d1dcb5707382810765ed34da9db47e7f95b3528334a3c999b0c90fe523f"}, + {file = "mypy-1.1.1-py3-none-any.whl", hash = "sha256:4e4e8b362cdf99ba00c2b218036002bdcdf1e0de085cdb296a49df03fb31dfc4"}, + {file = "mypy-1.1.1.tar.gz", hash = "sha256:ae9ceae0f5b9059f33dbc62dea087e942c0ccab4b7a003719cb70f9b8abfa32f"}, ] [package.dependencies] -mypy-extensions = ">=0.4.3" +mypy-extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = ">=3.10" @@ -521,6 +771,40 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +[[package]] +name = "networkx" +version = "2.8.8" +description = "Python package for creating and manipulating graphs and networks" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "networkx-2.8.8-py3-none-any.whl", hash = "sha256:e435dfa75b1d7195c7b8378c3859f0445cd88c6b0375c181ed66823a9ceb7524"}, + {file = "networkx-2.8.8.tar.gz", hash = "sha256:230d388117af870fce5647a3c52401fcf753e94720e6ea6b4197a5355648885e"}, +] + +[package.extras] +default = ["matplotlib (>=3.4)", "numpy (>=1.19)", "pandas (>=1.3)", "scipy (>=1.8)"] +developer = ["mypy (>=0.982)", "pre-commit (>=2.20)"] +doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.2)", "pydata-sphinx-theme (>=0.11)", "sphinx (>=5.2)", "sphinx-gallery (>=0.11)", "texext (>=0.6.6)"] +extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.9)", "sympy (>=1.10)"] +test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] + +[[package]] +name = "ordered-set" +version = "4.1.0" +description = "An OrderedSet is a custom MutableSet that remembers its order, so that every" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ordered-set-4.1.0.tar.gz", hash = "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8"}, + {file = "ordered_set-4.1.0-py3-none-any.whl", hash = "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562"}, +] + +[package.extras] +dev = ["black", "mypy", "pytest"] + [[package]] name = "packaging" version = "23.0" @@ -535,31 +819,31 @@ files = [ [[package]] name = "pathspec" -version = "0.11.0" +version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, - {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, ] [[package]] name = "platformdirs" -version = "3.0.0" +version = "3.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.0.0-py3-none-any.whl", hash = "sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"}, - {file = "platformdirs-3.0.0.tar.gz", hash = "sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9"}, + {file = "platformdirs-3.2.0-py3-none-any.whl", hash = "sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e"}, + {file = "platformdirs-3.2.0.tar.gz", hash = "sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08"}, ] [package.extras] docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" @@ -591,48 +875,48 @@ files = [ [[package]] name = "pydantic" -version = "1.10.5" +version = "1.10.7" description = "Data validation and settings management using python type hints" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5920824fe1e21cbb3e38cf0f3dd24857c8959801d1031ce1fac1d50857a03bfb"}, - {file = "pydantic-1.10.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3bb99cf9655b377db1a9e47fa4479e3330ea96f4123c6c8200e482704bf1eda2"}, - {file = "pydantic-1.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2185a3b3d98ab4506a3f6707569802d2d92c3a7ba3a9a35683a7709ea6c2aaa2"}, - {file = "pydantic-1.10.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f582cac9d11c227c652d3ce8ee223d94eb06f4228b52a8adaafa9fa62e73d5c9"}, - {file = "pydantic-1.10.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c9e5b778b6842f135902e2d82624008c6a79710207e28e86966cd136c621bfee"}, - {file = "pydantic-1.10.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72ef3783be8cbdef6bca034606a5de3862be6b72415dc5cb1fb8ddbac110049a"}, - {file = "pydantic-1.10.5-cp310-cp310-win_amd64.whl", hash = "sha256:45edea10b75d3da43cfda12f3792833a3fa70b6eee4db1ed6aed528cef17c74e"}, - {file = "pydantic-1.10.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:63200cd8af1af2c07964546b7bc8f217e8bda9d0a2ef0ee0c797b36353914984"}, - {file = "pydantic-1.10.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:305d0376c516b0dfa1dbefeae8c21042b57b496892d721905a6ec6b79494a66d"}, - {file = "pydantic-1.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd326aff5d6c36f05735c7c9b3d5b0e933b4ca52ad0b6e4b38038d82703d35b"}, - {file = "pydantic-1.10.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bb0452d7b8516178c969d305d9630a3c9b8cf16fcf4713261c9ebd465af0d73"}, - {file = "pydantic-1.10.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9a9d9155e2a9f38b2eb9374c88f02fd4d6851ae17b65ee786a87d032f87008f8"}, - {file = "pydantic-1.10.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f836444b4c5ece128b23ec36a446c9ab7f9b0f7981d0d27e13a7c366ee163f8a"}, - {file = "pydantic-1.10.5-cp311-cp311-win_amd64.whl", hash = "sha256:8481dca324e1c7b715ce091a698b181054d22072e848b6fc7895cd86f79b4449"}, - {file = "pydantic-1.10.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:87f831e81ea0589cd18257f84386bf30154c5f4bed373b7b75e5cb0b5d53ea87"}, - {file = "pydantic-1.10.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ce1612e98c6326f10888df951a26ec1a577d8df49ddcaea87773bfbe23ba5cc"}, - {file = "pydantic-1.10.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58e41dd1e977531ac6073b11baac8c013f3cd8706a01d3dc74e86955be8b2c0c"}, - {file = "pydantic-1.10.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6a4b0aab29061262065bbdede617ef99cc5914d1bf0ddc8bcd8e3d7928d85bd6"}, - {file = "pydantic-1.10.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:36e44a4de37b8aecffa81c081dbfe42c4d2bf9f6dff34d03dce157ec65eb0f15"}, - {file = "pydantic-1.10.5-cp37-cp37m-win_amd64.whl", hash = "sha256:261f357f0aecda005934e413dfd7aa4077004a174dafe414a8325e6098a8e419"}, - {file = "pydantic-1.10.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b429f7c457aebb7fbe7cd69c418d1cd7c6fdc4d3c8697f45af78b8d5a7955760"}, - {file = "pydantic-1.10.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:663d2dd78596c5fa3eb996bc3f34b8c2a592648ad10008f98d1348be7ae212fb"}, - {file = "pydantic-1.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51782fd81f09edcf265823c3bf43ff36d00db246eca39ee765ef58dc8421a642"}, - {file = "pydantic-1.10.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c428c0f64a86661fb4873495c4fac430ec7a7cef2b8c1c28f3d1a7277f9ea5ab"}, - {file = "pydantic-1.10.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:76c930ad0746c70f0368c4596020b736ab65b473c1f9b3872310a835d852eb19"}, - {file = "pydantic-1.10.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3257bd714de9db2102b742570a56bf7978e90441193acac109b1f500290f5718"}, - {file = "pydantic-1.10.5-cp38-cp38-win_amd64.whl", hash = "sha256:f5bee6c523d13944a1fdc6f0525bc86dbbd94372f17b83fa6331aabacc8fd08e"}, - {file = "pydantic-1.10.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:532e97c35719f137ee5405bd3eeddc5c06eb91a032bc755a44e34a712420daf3"}, - {file = "pydantic-1.10.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ca9075ab3de9e48b75fa8ccb897c34ccc1519177ad8841d99f7fd74cf43be5bf"}, - {file = "pydantic-1.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd46a0e6296346c477e59a954da57beaf9c538da37b9df482e50f836e4a7d4bb"}, - {file = "pydantic-1.10.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3353072625ea2a9a6c81ad01b91e5c07fa70deb06368c71307529abf70d23325"}, - {file = "pydantic-1.10.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3f9d9b2be177c3cb6027cd67fbf323586417868c06c3c85d0d101703136e6b31"}, - {file = "pydantic-1.10.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b473d00ccd5c2061fd896ac127b7755baad233f8d996ea288af14ae09f8e0d1e"}, - {file = "pydantic-1.10.5-cp39-cp39-win_amd64.whl", hash = "sha256:5f3bc8f103b56a8c88021d481410874b1f13edf6e838da607dcb57ecff9b4594"}, - {file = "pydantic-1.10.5-py3-none-any.whl", hash = "sha256:7c5b94d598c90f2f46b3a983ffb46ab806a67099d118ae0da7ef21a2a4033b28"}, - {file = "pydantic-1.10.5.tar.gz", hash = "sha256:9e337ac83686645a46db0e825acceea8e02fca4062483f40e9ae178e8bd1103a"}, + {file = "pydantic-1.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e79e999e539872e903767c417c897e729e015872040e56b96e67968c3b918b2d"}, + {file = "pydantic-1.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:01aea3a42c13f2602b7ecbbea484a98169fb568ebd9e247593ea05f01b884b2e"}, + {file = "pydantic-1.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:516f1ed9bc2406a0467dd777afc636c7091d71f214d5e413d64fef45174cfc7a"}, + {file = "pydantic-1.10.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae150a63564929c675d7f2303008d88426a0add46efd76c3fc797cd71cb1b46f"}, + {file = "pydantic-1.10.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ecbbc51391248116c0a055899e6c3e7ffbb11fb5e2a4cd6f2d0b93272118a209"}, + {file = "pydantic-1.10.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f4a2b50e2b03d5776e7f21af73e2070e1b5c0d0df255a827e7c632962f8315af"}, + {file = "pydantic-1.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:a7cd2251439988b413cb0a985c4ed82b6c6aac382dbaff53ae03c4b23a70e80a"}, + {file = "pydantic-1.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:68792151e174a4aa9e9fc1b4e653e65a354a2fa0fed169f7b3d09902ad2cb6f1"}, + {file = "pydantic-1.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe2507b8ef209da71b6fb5f4e597b50c5a34b78d7e857c4f8f3115effaef5fe"}, + {file = "pydantic-1.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10a86d8c8db68086f1e30a530f7d5f83eb0685e632e411dbbcf2d5c0150e8dcd"}, + {file = "pydantic-1.10.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75ae19d2a3dbb146b6f324031c24f8a3f52ff5d6a9f22f0683694b3afcb16fb"}, + {file = "pydantic-1.10.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:464855a7ff7f2cc2cf537ecc421291b9132aa9c79aef44e917ad711b4a93163b"}, + {file = "pydantic-1.10.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:193924c563fae6ddcb71d3f06fa153866423ac1b793a47936656e806b64e24ca"}, + {file = "pydantic-1.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:b4a849d10f211389502059c33332e91327bc154acc1845f375a99eca3afa802d"}, + {file = "pydantic-1.10.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cc1dde4e50a5fc1336ee0581c1612215bc64ed6d28d2c7c6f25d2fe3e7c3e918"}, + {file = "pydantic-1.10.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0cfe895a504c060e5d36b287ee696e2fdad02d89e0d895f83037245218a87fe"}, + {file = "pydantic-1.10.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:670bb4683ad1e48b0ecb06f0cfe2178dcf74ff27921cdf1606e527d2617a81ee"}, + {file = "pydantic-1.10.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:950ce33857841f9a337ce07ddf46bc84e1c4946d2a3bba18f8280297157a3fd1"}, + {file = "pydantic-1.10.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c15582f9055fbc1bfe50266a19771bbbef33dd28c45e78afbe1996fd70966c2a"}, + {file = "pydantic-1.10.7-cp37-cp37m-win_amd64.whl", hash = "sha256:82dffb306dd20bd5268fd6379bc4bfe75242a9c2b79fec58e1041fbbdb1f7914"}, + {file = "pydantic-1.10.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c7f51861d73e8b9ddcb9916ae7ac39fb52761d9ea0df41128e81e2ba42886cd"}, + {file = "pydantic-1.10.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6434b49c0b03a51021ade5c4daa7d70c98f7a79e95b551201fff682fc1661245"}, + {file = "pydantic-1.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64d34ab766fa056df49013bb6e79921a0265204c071984e75a09cbceacbbdd5d"}, + {file = "pydantic-1.10.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:701daea9ffe9d26f97b52f1d157e0d4121644f0fcf80b443248434958fd03dc3"}, + {file = "pydantic-1.10.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf135c46099ff3f919d2150a948ce94b9ce545598ef2c6c7bf55dca98a304b52"}, + {file = "pydantic-1.10.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0f85904f73161817b80781cc150f8b906d521fa11e3cdabae19a581c3606209"}, + {file = "pydantic-1.10.7-cp38-cp38-win_amd64.whl", hash = "sha256:9f6f0fd68d73257ad6685419478c5aece46432f4bdd8d32c7345f1986496171e"}, + {file = "pydantic-1.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c230c0d8a322276d6e7b88c3f7ce885f9ed16e0910354510e0bae84d54991143"}, + {file = "pydantic-1.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:976cae77ba6a49d80f461fd8bba183ff7ba79f44aa5cfa82f1346b5626542f8e"}, + {file = "pydantic-1.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d45fc99d64af9aaf7e308054a0067fdcd87ffe974f2442312372dfa66e1001d"}, + {file = "pydantic-1.10.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d2a5ebb48958754d386195fe9e9c5106f11275867051bf017a8059410e9abf1f"}, + {file = "pydantic-1.10.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:abfb7d4a7cd5cc4e1d1887c43503a7c5dd608eadf8bc615413fc498d3e4645cd"}, + {file = "pydantic-1.10.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:80b1fab4deb08a8292d15e43a6edccdffa5377a36a4597bb545b93e79c5ff0a5"}, + {file = "pydantic-1.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:d71e69699498b020ea198468e2480a2f1e7433e32a3a99760058c6520e2bea7e"}, + {file = "pydantic-1.10.7-py3-none-any.whl", hash = "sha256:0cd181f1d0b1d00e2b705f1bf1ac7799a2d938cce3376b8007df62b29be3c2c6"}, + {file = "pydantic-1.10.7.tar.gz", hash = "sha256:cfc83c0678b6ba51b0532bea66860617c4cd4251ecf76e9846fa5a9f3454e97e"}, ] [package.dependencies] @@ -654,20 +938,50 @@ files = [ {file = "pyflakes-3.0.1.tar.gz", hash = "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"}, ] +[[package]] +name = "pygments" +version = "2.14.0" +description = "Pygments is a syntax highlighting package written in Python." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, + {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pyinputplus" +version = "0.2.12" +description = "Provides more featureful versions of input() and raw_input()." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "PyInputPlus-0.2.12.tar.gz", hash = "sha256:3a86b03dc6d003fec7dc627ad175cacaaf6e14a6a3b13b34c8fe6f5d01506231"}, +] + +[package.dependencies] +pysimplevalidate = ">=0.2.7" +stdiomask = ">=0.0.3" + [[package]] name = "pylint" -version = "2.16.2" +version = "2.17.2" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" files = [ - {file = "pylint-2.16.2-py3-none-any.whl", hash = "sha256:ff22dde9c2128cd257c145cfd51adeff0be7df4d80d669055f24a962b351bbe4"}, - {file = "pylint-2.16.2.tar.gz", hash = "sha256:13b2c805a404a9bf57d002cd5f054ca4d40b0b87542bdaba5e05321ae8262c84"}, + {file = "pylint-2.17.2-py3-none-any.whl", hash = "sha256:001cc91366a7df2970941d7e6bbefcbf98694e00102c1f121c531a814ddc2ea8"}, + {file = "pylint-2.17.2.tar.gz", hash = "sha256:1b647da5249e7c279118f657ca28b6aaebb299f86bf92affc632acf199f7adbb"}, ] [package.dependencies] -astroid = ">=2.14.2,<=2.16.0-dev0" +astroid = ">=2.15.2,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, @@ -684,16 +998,27 @@ typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\"" spelling = ["pyenchant (>=3.2,<4.0)"] testutils = ["gitpython (>3)"] +[[package]] +name = "pysimplevalidate" +version = "0.2.12" +description = "A collection of string-based validation functions, suitable for use in other Python 2 and 3 applications." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "PySimpleValidate-0.2.12.tar.gz", hash = "sha256:645d24bdca17ad4c40658f3aa0bd5c1aa1688ba0c02ba75c5ed2cb3b8abaaa19"}, +] + [[package]] name = "pytest" -version = "7.2.1" +version = "7.2.2" description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.2.1-py3-none-any.whl", hash = "sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5"}, - {file = "pytest-7.2.1.tar.gz", hash = "sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42"}, + {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, + {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, ] [package.dependencies] @@ -727,6 +1052,78 @@ pytest = ">=4.6" [package.extras] testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] + +[[package]] +name = "requests" +version = "2.28.2" +description = "Python HTTP for Humans." +category = "dev" +optional = false +python-versions = ">=3.7, <4" +files = [ + {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, + {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + [[package]] name = "rfc3986" version = "1.5.0" @@ -757,6 +1154,149 @@ files = [ {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, ] +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] + +[[package]] +name = "sphinx" +version = "5.3.0" +description = "Python documentation generator" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, + {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, +] + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=2.9" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.14,<0.20" +imagesize = ">=1.3" +importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} +Jinja2 = ">=3.0" +packaging = ">=21.0" +Pygments = ">=2.12" +requests = ">=2.5.0" +snowballstemmer = ">=2.0" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] +test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.4" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, + {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.1" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, + {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["html5lib", "pytest"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] + +[package.extras] +test = ["flake8", "mypy", "pytest"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + [[package]] name = "starlette" version = "0.25.0" @@ -776,6 +1316,17 @@ typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\"" [package.extras] full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] +[[package]] +name = "stdiomask" +version = "0.0.6" +description = "A cross-platform Python module for entering passwords to a stdio terminal and displaying a **** mask, which getpass cannot do." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "stdiomask-0.0.6.tar.gz", hash = "sha256:c1e47069ead9e10bda150a26f7922ca01d2adc503042a9d7acf64877a2b9a3a6"}, +] + [[package]] name = "tomli" version = "2.0.1" @@ -790,14 +1341,26 @@ files = [ [[package]] name = "tomlkit" -version = "0.11.6" +version = "0.11.7" description = "Style preserving TOML library" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, - {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, + {file = "tomlkit-0.11.7-py3-none-any.whl", hash = "sha256:5325463a7da2ef0c6bbfefb62a3dc883aebe679984709aee32a317907d0a8d3c"}, + {file = "tomlkit-0.11.7.tar.gz", hash = "sha256:f392ef70ad87a672f02519f99967d28a4d3047133e2d1df936511465fbb3791d"}, +] + +[[package]] +name = "types-pyyaml" +version = "6.0.12.9" +description = "Typing stubs for PyYAML" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "types-PyYAML-6.0.12.9.tar.gz", hash = "sha256:c51b1bd6d99ddf0aa2884a7a328810ebf70a4262c292195d3f4f9a0005f9eeb6"}, + {file = "types_PyYAML-6.0.12.9-py3-none-any.whl", hash = "sha256:5aed5aa66bd2d2e158f75dda22b059570ede988559f030cf294871d3b647e3e8"}, ] [[package]] @@ -812,6 +1375,23 @@ files = [ {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, ] +[[package]] +name = "urllib3" +version = "1.26.15" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, + {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + [[package]] name = "uvicorn" version = "0.20.0" @@ -833,76 +1413,87 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", [[package]] name = "wrapt" -version = "1.14.1" +version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ - {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, - {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, - {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, - {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, - {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, - {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, - {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, - {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, - {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, - {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, - {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, - {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, - {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, - {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, - {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, - {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, ] [[package]] @@ -924,4 +1515,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "58e47a5865d0a1931444e4e5d91cc38a15cc97449a4508c7bd6682e3ff14dd71" +content-hash = "63ffe508692a4fb296e0420c8570b5b3701d1712c2d8803f98b1286be0c6657f" diff --git a/pyproject.toml b/pyproject.toml index e0eb503..6df9980 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,21 +8,40 @@ readme = "README.md" packages = [{include = "vtp", from = "src"}] [tool.poetry.dependencies] -python = "^3.9" +deepdiff = "^6.3.0" fastapi = "^0.92.0" httpx = "^0.23.3" -uvicorn = "^0.20.0" importlib-resources = "^5.12.0" +networkx = "^2.8.6" +pyinputplus = "^0.2.12" +pyyaml = "^6.0" +python = "^3.9" +uvicorn = "^0.20.0" [tool.poetry.group.dev.dependencies] black = "^23.1.0" flake8 = "^6.0.0" isort = "^5.12.0" -mypy = "^1.0.0" +mypy = "^1.1.0" pylint = "^2.16.2" pytest = "^7.2.1" pytest-cov = "^4.0.0" +sphinx = "^5.3.0" +types-pyyaml = "^6.0.12.8" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" + +[tool.poetry.scripts] +accept-ballot = "vtp.cli.accept_ballot:main" +cast-ballot = "vtp.cli.cast_ballot:main" +create-blank-ballot = "vtp.cli.create_blank_ballot:main" +generate-all-blank-ballots = "vtp.cli.generate_all_blank_ballots:main" +merge-contests = "vtp.cli.merge_contests:main" +run-mock-election = "vtp.cli.run_mock_election:main" +setup-vtp-demo = "vtp.cli.setup_vtp_demo:main" +show-contest = "vtp.cli.show_contest:main" +tally-contests = "vtp.cli.tally_contests:main" +verify-ballot-receipt = "vtp.cli.verify_ballot_receipt:main" +vote = "vtp.cli.vote:main" diff --git a/src/vtp/cli b/src/vtp/cli new file mode 120000 index 0000000..97f2bd7 --- /dev/null +++ b/src/vtp/cli @@ -0,0 +1 @@ +../../../VoteTrackerPlus/src/vtp/cli \ No newline at end of file diff --git a/src/vtp/core b/src/vtp/core new file mode 120000 index 0000000..d251840 --- /dev/null +++ b/src/vtp/core @@ -0,0 +1 @@ +../../../VoteTrackerPlus/src/vtp/core \ No newline at end of file diff --git a/src/vtp/ops b/src/vtp/ops new file mode 120000 index 0000000..b2f2aa8 --- /dev/null +++ b/src/vtp/ops @@ -0,0 +1 @@ +../../../VoteTrackerPlus/src/vtp/ops \ No newline at end of file From 05204ac4afbc8d2e6e0a3ecb83735e1a258a9059 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Wed, 5 Apr 2023 17:13:12 -0400 Subject: [PATCH 02/61] initial thoughts/debugging on integrating with backend --- Makefile | 57 +++++++++++++++++++++++ src/vtp/web/api/data/favicon.ico | Bin 0 -> 15406 bytes src/vtp/web/api/main.py | 75 ++++++++++++++++++++++++++----- tests/test_main.py | 6 ++- 4 files changed, 126 insertions(+), 12 deletions(-) create mode 100644 Makefile create mode 100644 src/vtp/web/api/data/favicon.ico diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1cc313b --- /dev/null +++ b/Makefile @@ -0,0 +1,57 @@ +# Ancient Makefile implicit rule disabler +(%): % +%:: %,v +%:: RCS/%,v +%:: s.% +%:: SCCS/s.% +%.out: % +%.c: %.w %.ch +%.tex: %.w %.ch +%.mk: + +# Variables +DOC_DIR := docs +SRC_DIR := src/vtp/web/api +TEST_DIR := tests + +INTERACTIVE := $(shell test -t 0 && echo 1) +ifdef INTERACTIVE + RED := \033[0;31m + END := \033[0m +else + RED := + END := +endif + +# Let there be no default target +.PHONY: default +default: + @echo "${RED}There is no default make target.${END} Specify one of:" + @echo "pylint - runs pylint" + @echo "pytest - runs pytest" + @echo "etags - constructs an emacs tags table" + @echo "" + @echo "See ${BUILD_DIR}/README.md for more details and info" + +# Run pylint +.PHONY: pylint +pylint: requirements.txt + @echo "${RED}NOTE - isort and black disagree on 3 files${END} - let black win" + isort ${SRC_DIR} ${TEST_DIR} + black ${SRC_DIR} ${TEST_DIR} + pylint --recursive y ${SRC_DIR} ${TEST_DIR} + +# Run tests +.PHONY: pytest +pytest: + pytest ${TEST_DIR} + +# emacs tags +ETAG_SRCS := $(shell find * -type f -name '*.py' -o -name '*.md' | grep -v defunct) +.PHONY: etags +etags: ${ETAG_SRCS} + etags ${ETAG_SRCS} + +# Generate a requirements.txt for dependabot (ignoring the symlinks) +requirements.txt: pyproject.toml poetry.lock + poetry export --with dev -f requirements.txt --output requirements.txt diff --git a/src/vtp/web/api/data/favicon.ico b/src/vtp/web/api/data/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..71235a893f5f0763dc11f676370f22d7031b7493 GIT binary patch literal 15406 zcmeI3dypJe6^DBvL;`|Ag$fE7B|HTTtfDcn+cT4FSVBT}x_fsMf<#Lr6eyxqJQRxs zc~mJ?U_zBjY4C+&fq)gDupkg1Ae9FQgp>jjASCighy+-6rn~q0o!ir!o|&GR?w!f< z4_npgp6+|k`JLxI_YuQrGj=y7PBgerHqIVr7$+KrF?n+E`^fzaV;S$JPAz>u+%O*7 z-!P7(4PEFFyyuqaZ{`AZSjKj*GHv&e5K>#n#yaqpn>r}o8aga$OPtI^Jjd#~StLom#6 z)Un7{tZHX_Z)F^BHt!#(`i6X37W9#^{h!Bte=%njjuZMbEp-^*cf_<&=yZVo>!aV$ z{o`3jeY*P$wJ+ZZ8P$0dyi-wC4HmAzfPa4_A&E=2hnCV*D$hu(=^pM zo~z`b?guh*79D0-dmC1A&un& z18TR7Rs3$nw|~(7mlf~gd}r8nyhYV=_}7?L@r(4YZRb!ombZ0=Gk6H?&lP^iJCt#T zjxY?>#_wMzz#zC@p`Yf3O@1c!mA~n8-`t1y4<)35-MxFn=Y!tCznX^a{RSGfWx-Fg zj(`0$XVZje-<{7Q3;IB(8O!~*$Oyeb?DQrTh7E(G%*k>wF|{e)cjzyn#!yGi09JxDoy3SO4 z!|T3Q@{6H0EOAop52_8hFG*`}eDghcr1ec#d@`zo4r}Nz?DJ*}-lz@BpKbqX({WFt z&ze;Ibo>w(k=V>S?)52XNL=05)jxQ!$e=OU-n%LKiyXs}AEbY`qxNS!-;}Vwi~%>D zwBUbKcfp^GpIOVlQfMZm5$MtOpOidFpLt2_j;#ySQ$LBzt<*{%!+z=PAbFBpO+JsS zlgexjzPB@ZZ?TN?q1@R%b*Sm6DdF#uFT9gR2RcVf4O=It5*M2@z22#!=Mi4{;#VZM zg6n=6m*l;+gOkn<^#2|7U#`vH-5@#&`3?*W>_(r{>GPWO;n`=b`M%UD(#D*(eIjF_ z)OTh2tM!{&;34cb81sD?yR3}X^-^zkI{rEEF4Hj>wq<&XUkEYgZ1-g52Jv-m1upde zM5z|3!0SGDs-q@_G=q77f3^0(3K}In+~3vp+TKBX$z{w_62yb%Z+n|#EU4eS8#OW?gQk$f?BkHPIxGo2U4L*2Y2HFMtWF!SmlV(9f4 zTIuBnBfj!_&QV8~*}?M4VkY3l804sr3RY~qtX2F=bncl({U{i8Ub5Y5d0#d@p!*+( z7$ts_#%vOt=zwv`KUe!euR9ALe>U0=c{fXq8S}k#31zm}W zPoA_(Ft8pFu6@MujlL5-Fuwj1*_-wUZExFKk;@N#F3O|Pb63wh2hev(GjW0MZDowP zG>G#?9IL-eTu5w!V_7LjHPlB*Uh$!&vNluc=ha-2ykY%-JPFN(_{NRI>KbC}znYh< zmstKL*7#QO?grlFyL!|CNvM9@1L1LopDt+5d>{35_cV`^`@=n|9K3V2kkvYUJf^8_J+Gh5vPr?6e z^!h0H-T=3(xiySm+LYyfEemV0+&4q(@5r+t*Rvyb4WW5?RGX|%pzmJt?}PY4+}xlH zUnSlIzjtIE@77Gen+xlo=5ZT_QI~?`dW^=5p z$55}Ig3eciU$49GO8h0-!^k1)7I(~W3db6e`E43|w9ip{5nB$v@*K2M`**W)c3R{C z_M}W(nQ3EN>)k3a|Il;!n)AD6F(&BmVt4k^l$q2HB5Tg}PJ{LfrF=JPe@=ie32j;D zeZ0de9^Wt?@U>iCeTn#4N1rkGnOgD^4?eoQvr$aTI6^yWvIP4975Tgt?^eB+n3lX$ ztLBtE$r|vt;J39!JYD$7{Fyml`Pene-{d87E8|0T9#U-`vJV~jO%k81+Xh|9-0+qT z*7u0NwXKRH=z227RgTl>enKYC+Em=Ways3~eunI)-hiE_NG>p)LLc=;(skszdMVj$ zhtwL;oGSA-a^*9lwCe~@^!ysN=Y_$ZP*7LubvEW(t&AzDmn2rjk3p26~^O z8dEAC*q+UMJz3lPGjtNi71+1p2baqJS`?e;-<+o=qTh?4w?+Jfw)e`}ny77NFHrko z?_bd-h0dzw(mup`BX?QnZ-`&o({7WQ_rE7+eWI8|4)V^VtmR&bY|-;HF5}7-l{rby zu|RKa627#l6_@N8``44N$$Jg)OPsF7XZmEUi((i5$;<_h=(HTW=8Fwp%J!-`QlEtV z)VQ&?2l7;X15QDyhy`x_pkFVTC8=1$)>B_@Lm(xz~ z3y1y1*D`jIb;O$e;%G(R$zI%@^q2e{eP8y>Uf#O69Mj&e_P{r$gImra)%9ic{7xr( zGL`u#)5rdRoU^IJzs|Q1|0}eq3aAB|MA!5^6m`bJ%@QQadS3(UaHqG1_$~YUST>zBYWH8 zOA_1o@DgN5yFLIt&V6wPun`WC0s1Rt54Y2HFX378cO9F>`y+JTmE0?1L>LEhFP#-! z1(w8fZQYi&O38VN`ss0>eGbcG{VzRs`bbl9Cvvx6h= zN0$rI$}>pr`=P|rP6-TyGZ9Ci)8HIyeH@Z|R?51!)Nssu@6bM8zfW3>_1oLt^Rl)V z%}071#~;X5jmEVi{(B2_HCV3 zVSc!#mF;Km!S--Eq_MgX>bD!dN?wrEK_&)I=|U|FlMH9H9);sgKF0!94bZl|l4QUN59RYp%~M zB16dzAB69S?KiTA_4UenHPmyXyVybdQV$&%nY)Z} z!8q+Lm3j%AyvLPz&V>Cc?IAuXHPCwE?5bR!I$UyiGZ-89Rc%r)>6(waHK@IrKQIR> zgg_7+bm)Vh=rkU=F0`ag6`q`y2Q+ qpwDoQEb9~eKQMnC-#AC(UdlZ$dnU3Elr*QOL-t|o4>gcX1OEr!Ty;nQ literal 0 HcmV?d00001 diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 613c2fe..10319c2 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -1,19 +1,30 @@ """API endpoints for the VoteTrackerPlus backend""" -import json -import random from fastapi import FastAPI -from importlib_resources import files -import vtp.web.api.data +from vtp.ops.accept_ballot_operation import AcceptBallotOperation +from vtp.ops.cast_ballot_operation import CastBallotOperation +from vtp.ops.setup_vtp_demo_operation import SetupVtpDemoOperation app = FastAPI() -# create a list to store VoteStoreIDs +######## +# backend demo constants +######## +# where the ElectionData repo is +DEFAULT_ELECTION_DATA_DIR = ( + "/opt/VoteTrackerPlus/demo.01/mock-clients/scanner.00/VTP-mock-election.US.13" +) +# pylint: disable=line-too-long +DEFAULT_BLANK_BALLOT = "GGOs/states/Massachusetts/GGOs/towns/Concord/blank-ballots/json/000,001,002,003,ballot.json" +# two more +VERBOSITY = 3 + +######## +# local variables +######## +# A dict to store VoteStoreIDs vote_store_ids = [] -# read empty ballot from JSON file -ballot_data = files(vtp.web.api.data).joinpath("alameda_ca.json").read_text() -empty_ballot = json.loads(ballot_data) @app.get("/") @@ -22,19 +33,61 @@ async def root() -> dict: return {"version": "0.1.0"} +# Endpoint #1 @app.get("/vote/") async def get_vote_store_id() -> dict: """Create and store a unique Vote Store ID for each client""" - vote_store_id = str(random.randrange(100000, 999999)) + + svdo = SetupVtpDemoOperation( + DEFAULT_ELECTION_DATA_DIR, + VERBOSITY, + ) + guid = svdo.run( + guid_client_store=True, + ) + + vote_store_id = guid # add VoteStoreID to list vote_store_ids.append(vote_store_id) return {"VoteStoreID": vote_store_id} +# Endpoint #2 @app.get("/vote/{vote_store_id}") async def get_empty_ballot(vote_store_id: str) -> dict: """Return an empty ballot for a given Vote Store ID""" + if vote_store_id in vote_store_ids: + # Cet a (the) blank ballot from the backend + cbo = CastBallotOperation( + guid=vote_store_id, + verbosity=VERBOSITY, + ) + empty_ballot = cbo.run( + blank_ballot=DEFAULT_BLANK_BALLOT, + return_bb=True, + ) return {"ballot": f"{empty_ballot}"} - else: - return {"error": "VoteStoreID not found"} + return {"error": "VoteStoreID not found"} + + +# Endpoint #3 +@app.get("/vote/cast-ballot/{vote_store_id}") +async def cast_ballot(vote_store_id: str) -> dict: + """ + Uploads the ballot; the backend accepts it, merges it, and returns + the ballot check and voter index + """ + + if vote_store_id in vote_store_ids: + # Accept the incoming cast ballot json and return a ballot check and voter index + abo = AcceptBallotOperation( + guid=vote_store_id, + verbosity=VERBOSITY, + ) + ballot_check, voter_index = abo.run( + cast_ballot_json="SOMETHING", + merge_contests=True, + ) + return {"ballot_check": ballot_check, "voter_index": voter_index} + return {"error": "VoteStoreID not found"} diff --git a/tests/test_main.py b/tests/test_main.py index 118dfec..0dd0b82 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,3 +1,5 @@ +"""Tests for API endpoints for the VoteTrackerPlus backend""" + import pytest from fastapi.testclient import TestClient @@ -7,6 +9,7 @@ def test_get_root(): + """test the root test node""" response = client.get("/") assert response.status_code == 200 assert "version" in response.json() @@ -14,6 +17,7 @@ def test_get_root(): @pytest.fixture def test_get_vote_store_id(): + """Test retreiving and printing a voter store id guid""" response = client.get("/vote/") assert response.status_code == 200 assert "VoteStoreID" in response.json() @@ -22,7 +26,7 @@ def test_get_vote_store_id(): def test_get_empty_ballot(test_get_vote_store_id): - # test with invalid VoteStoreID + """test with invalid VoteStoreID""" response = client.get("/vote/00000X") assert response.status_code == 200 assert "error" in response.json() From dcd3bf2db60d1aeb8586499a53e731e8320f4fbd Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Wed, 5 Apr 2023 17:16:03 -0400 Subject: [PATCH 03/61] the requirements.txt file - ??? --- requirements.txt | 600 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 600 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..efc2c45 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,600 @@ +alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ + --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 +anyio==3.6.2 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421 \ + --hash=sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3 +astroid==2.15.2 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:6e61b85c891ec53b07471aec5878f4ac6446a41e590ede0f2ce095f39f7d49dd \ + --hash=sha256:dea89d9f99f491c66ac9c04ebddf91e4acf8bd711722175fe6245c0725cc19bb +attrs==22.2.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ + --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 +babel==2.12.1 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610 \ + --hash=sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455 +black==23.3.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5 \ + --hash=sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915 \ + --hash=sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326 \ + --hash=sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940 \ + --hash=sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b \ + --hash=sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30 \ + --hash=sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c \ + --hash=sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c \ + --hash=sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab \ + --hash=sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27 \ + --hash=sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2 \ + --hash=sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961 \ + --hash=sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9 \ + --hash=sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb \ + --hash=sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70 \ + --hash=sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331 \ + --hash=sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2 \ + --hash=sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266 \ + --hash=sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d \ + --hash=sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6 \ + --hash=sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b \ + --hash=sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925 \ + --hash=sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8 \ + --hash=sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4 \ + --hash=sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3 +certifi==2022.12.7 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ + --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +charset-normalizer==3.1.0 ; python_version >= "3.9" and python_version < "4" \ + --hash=sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6 \ + --hash=sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1 \ + --hash=sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e \ + --hash=sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373 \ + --hash=sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62 \ + --hash=sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230 \ + --hash=sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be \ + --hash=sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c \ + --hash=sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0 \ + --hash=sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448 \ + --hash=sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f \ + --hash=sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649 \ + --hash=sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d \ + --hash=sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0 \ + --hash=sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706 \ + --hash=sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a \ + --hash=sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59 \ + --hash=sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23 \ + --hash=sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5 \ + --hash=sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb \ + --hash=sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e \ + --hash=sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e \ + --hash=sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c \ + --hash=sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28 \ + --hash=sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d \ + --hash=sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41 \ + --hash=sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974 \ + --hash=sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce \ + --hash=sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f \ + --hash=sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1 \ + --hash=sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d \ + --hash=sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8 \ + --hash=sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017 \ + --hash=sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31 \ + --hash=sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7 \ + --hash=sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8 \ + --hash=sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e \ + --hash=sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14 \ + --hash=sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd \ + --hash=sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d \ + --hash=sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795 \ + --hash=sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b \ + --hash=sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b \ + --hash=sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b \ + --hash=sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203 \ + --hash=sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f \ + --hash=sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19 \ + --hash=sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1 \ + --hash=sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a \ + --hash=sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac \ + --hash=sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9 \ + --hash=sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0 \ + --hash=sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137 \ + --hash=sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f \ + --hash=sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6 \ + --hash=sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5 \ + --hash=sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909 \ + --hash=sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f \ + --hash=sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0 \ + --hash=sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324 \ + --hash=sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755 \ + --hash=sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb \ + --hash=sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854 \ + --hash=sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c \ + --hash=sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60 \ + --hash=sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84 \ + --hash=sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0 \ + --hash=sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b \ + --hash=sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1 \ + --hash=sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531 \ + --hash=sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1 \ + --hash=sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11 \ + --hash=sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326 \ + --hash=sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df \ + --hash=sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab +click==8.1.3 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ + --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 +colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows" \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +coverage[toml]==7.2.2 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:006ed5582e9cbc8115d2e22d6d2144a0725db542f654d9d4fda86793832f873d \ + --hash=sha256:046936ab032a2810dcaafd39cc4ef6dd295df1a7cbead08fe996d4765fca9fe4 \ + --hash=sha256:0484d9dd1e6f481b24070c87561c8d7151bdd8b044c93ac99faafd01f695c78e \ + --hash=sha256:0ce383d5f56d0729d2dd40e53fe3afeb8f2237244b0975e1427bfb2cf0d32bab \ + --hash=sha256:186e0fc9cf497365036d51d4d2ab76113fb74f729bd25da0975daab2e107fd90 \ + --hash=sha256:2199988e0bc8325d941b209f4fd1c6fa007024b1442c5576f1a32ca2e48941e6 \ + --hash=sha256:299bc75cb2a41e6741b5e470b8c9fb78d931edbd0cd009c58e5c84de57c06731 \ + --hash=sha256:3668291b50b69a0c1ef9f462c7df2c235da3c4073f49543b01e7eb1dee7dd540 \ + --hash=sha256:36dd42da34fe94ed98c39887b86db9d06777b1c8f860520e21126a75507024f2 \ + --hash=sha256:38004671848b5745bb05d4d621526fca30cee164db42a1f185615f39dc997292 \ + --hash=sha256:387fb46cb8e53ba7304d80aadca5dca84a2fbf6fe3faf6951d8cf2d46485d1e5 \ + --hash=sha256:3eb55b7b26389dd4f8ae911ba9bc8c027411163839dea4c8b8be54c4ee9ae10b \ + --hash=sha256:420f94a35e3e00a2b43ad5740f935358e24478354ce41c99407cddd283be00d2 \ + --hash=sha256:4ac0f522c3b6109c4b764ffec71bf04ebc0523e926ca7cbe6c5ac88f84faced0 \ + --hash=sha256:4c752d5264053a7cf2fe81c9e14f8a4fb261370a7bb344c2a011836a96fb3f57 \ + --hash=sha256:4f01911c010122f49a3e9bdc730eccc66f9b72bd410a3a9d3cb8448bb50d65d3 \ + --hash=sha256:4f68ee32d7c4164f1e2c8797535a6d0a3733355f5861e0f667e37df2d4b07140 \ + --hash=sha256:4fa54fb483decc45f94011898727802309a109d89446a3c76387d016057d2c84 \ + --hash=sha256:507e4720791977934bba016101579b8c500fb21c5fa3cd4cf256477331ddd988 \ + --hash=sha256:53d0fd4c17175aded9c633e319360d41a1f3c6e352ba94edcb0fa5167e2bad67 \ + --hash=sha256:55272f33da9a5d7cccd3774aeca7a01e500a614eaea2a77091e9be000ecd401d \ + --hash=sha256:5764e1f7471cb8f64b8cda0554f3d4c4085ae4b417bfeab236799863703e5de2 \ + --hash=sha256:57b77b9099f172804e695a40ebaa374f79e4fb8b92f3e167f66facbf92e8e7f5 \ + --hash=sha256:5afdad4cc4cc199fdf3e18088812edcf8f4c5a3c8e6cb69127513ad4cb7471a9 \ + --hash=sha256:5cc0783844c84af2522e3a99b9b761a979a3ef10fb87fc4048d1ee174e18a7d8 \ + --hash=sha256:5e1df45c23d4230e3d56d04414f9057eba501f78db60d4eeecfcb940501b08fd \ + --hash=sha256:6146910231ece63facfc5984234ad1b06a36cecc9fd0c028e59ac7c9b18c38c6 \ + --hash=sha256:797aad79e7b6182cb49c08cc5d2f7aa7b2128133b0926060d0a8889ac43843be \ + --hash=sha256:7c20b731211261dc9739bbe080c579a1835b0c2d9b274e5fcd903c3a7821cf88 \ + --hash=sha256:817295f06eacdc8623dc4df7d8b49cea65925030d4e1e2a7c7218380c0072c25 \ + --hash=sha256:81f63e0fb74effd5be736cfe07d710307cc0a3ccb8f4741f7f053c057615a137 \ + --hash=sha256:872d6ce1f5be73f05bea4df498c140b9e7ee5418bfa2cc8204e7f9b817caa968 \ + --hash=sha256:8c99cb7c26a3039a8a4ee3ca1efdde471e61b4837108847fb7d5be7789ed8fd9 \ + --hash=sha256:8dbe2647bf58d2c5a6c5bcc685f23b5f371909a5624e9f5cd51436d6a9f6c6ef \ + --hash=sha256:8efb48fa743d1c1a65ee8787b5b552681610f06c40a40b7ef94a5b517d885c54 \ + --hash=sha256:92ebc1619650409da324d001b3a36f14f63644c7f0a588e331f3b0f67491f512 \ + --hash=sha256:9d22e94e6dc86de981b1b684b342bec5e331401599ce652900ec59db52940005 \ + --hash=sha256:ba279aae162b20444881fc3ed4e4f934c1cf8620f3dab3b531480cf602c76b7f \ + --hash=sha256:bc4803779f0e4b06a2361f666e76f5c2e3715e8e379889d02251ec911befd149 \ + --hash=sha256:bfe7085783cda55e53510482fa7b5efc761fad1abe4d653b32710eb548ebdd2d \ + --hash=sha256:c448b5c9e3df5448a362208b8d4b9ed85305528313fca1b479f14f9fe0d873b8 \ + --hash=sha256:c90e73bdecb7b0d1cea65a08cb41e9d672ac6d7995603d6465ed4914b98b9ad7 \ + --hash=sha256:d2b96123a453a2d7f3995ddb9f28d01fd112319a7a4d5ca99796a7ff43f02af5 \ + --hash=sha256:d52f0a114b6a58305b11a5cdecd42b2e7f1ec77eb20e2b33969d702feafdd016 \ + --hash=sha256:d530191aa9c66ab4f190be8ac8cc7cfd8f4f3217da379606f3dd4e3d83feba69 \ + --hash=sha256:d683d230b5774816e7d784d7ed8444f2a40e7a450e5720d58af593cb0b94a212 \ + --hash=sha256:db45eec1dfccdadb179b0f9ca616872c6f700d23945ecc8f21bb105d74b1c5fc \ + --hash=sha256:db8c2c5ace167fd25ab5dd732714c51d4633f58bac21fb0ff63b0349f62755a8 \ + --hash=sha256:e2926b8abedf750c2ecf5035c07515770944acf02e1c46ab08f6348d24c5f94d \ + --hash=sha256:e627dee428a176ffb13697a2c4318d3f60b2ccdde3acdc9b3f304206ec130ccd \ + --hash=sha256:efe1c0adad110bf0ad7fb59f833880e489a61e39d699d37249bdf42f80590169 +deepdiff==6.3.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:15838bd1cbd046ce15ed0c41e837cd04aff6b3e169c5e06fca69d7aa11615ceb \ + --hash=sha256:6a3bf1e7228ac5c71ca2ec43505ca0a743ff54ec77aa08d7db22de6bc7b2b644 +dill==0.3.6 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0 \ + --hash=sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373 +docutils==0.19 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6 \ + --hash=sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc +exceptiongroup==1.1.1 ; python_version >= "3.9" and python_version < "3.11" \ + --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ + --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 +fastapi==0.92.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:023a0f5bd2c8b2609014d3bba1e14a1d7df96c6abea0a73070621c9862b9a4de \ + --hash=sha256:ae7b97c778e2f2ec3fb3cb4fb14162129411d99907fb71920f6d69a524340ebf +flake8==6.0.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \ + --hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181 +h11==0.14.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ + --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 +httpcore==0.16.3 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:c5d6f04e2fc530f39e0c077e6a30caa53f1451096120f1f38b954afd0b17c0cb \ + --hash=sha256:da1fb708784a938aa084bde4feb8317056c55037247c787bd7e19eb2c2949dc0 +httpx==0.23.3 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:9818458eb565bb54898ccb9b8b251a28785dd4a55afbc23d0eb410754fe7d0f9 \ + --hash=sha256:a211fcce9b1254ea24f0cd6af9869b3d29aba40154e947d2a07bb499b3e310d6 +idna==3.4 ; python_version >= "3.9" and python_version < "4" \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +imagesize==1.4.1 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ + --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a +importlib-metadata==6.1.0 ; python_version >= "3.9" and python_version < "3.10" \ + --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ + --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 +importlib-resources==5.12.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6 \ + --hash=sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a +iniconfig==2.0.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ + --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 +isort==5.12.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \ + --hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6 +jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 +lazy-object-proxy==1.9.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382 \ + --hash=sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82 \ + --hash=sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9 \ + --hash=sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494 \ + --hash=sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46 \ + --hash=sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30 \ + --hash=sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63 \ + --hash=sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4 \ + --hash=sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae \ + --hash=sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be \ + --hash=sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701 \ + --hash=sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd \ + --hash=sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006 \ + --hash=sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a \ + --hash=sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586 \ + --hash=sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8 \ + --hash=sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821 \ + --hash=sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07 \ + --hash=sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b \ + --hash=sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171 \ + --hash=sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b \ + --hash=sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2 \ + --hash=sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7 \ + --hash=sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4 \ + --hash=sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8 \ + --hash=sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e \ + --hash=sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f \ + --hash=sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda \ + --hash=sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4 \ + --hash=sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e \ + --hash=sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671 \ + --hash=sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11 \ + --hash=sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455 \ + --hash=sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734 \ + --hash=sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb \ + --hash=sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59 +markupsafe==2.1.2 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed \ + --hash=sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc \ + --hash=sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2 \ + --hash=sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460 \ + --hash=sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7 \ + --hash=sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0 \ + --hash=sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1 \ + --hash=sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa \ + --hash=sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03 \ + --hash=sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323 \ + --hash=sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65 \ + --hash=sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013 \ + --hash=sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036 \ + --hash=sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f \ + --hash=sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4 \ + --hash=sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419 \ + --hash=sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2 \ + --hash=sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619 \ + --hash=sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a \ + --hash=sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a \ + --hash=sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd \ + --hash=sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7 \ + --hash=sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666 \ + --hash=sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65 \ + --hash=sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859 \ + --hash=sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625 \ + --hash=sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff \ + --hash=sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156 \ + --hash=sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd \ + --hash=sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba \ + --hash=sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f \ + --hash=sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1 \ + --hash=sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094 \ + --hash=sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a \ + --hash=sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513 \ + --hash=sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed \ + --hash=sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d \ + --hash=sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3 \ + --hash=sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147 \ + --hash=sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c \ + --hash=sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603 \ + --hash=sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601 \ + --hash=sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a \ + --hash=sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1 \ + --hash=sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d \ + --hash=sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3 \ + --hash=sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54 \ + --hash=sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2 \ + --hash=sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6 \ + --hash=sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58 +mccabe==0.7.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ + --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e +mypy-extensions==1.0.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ + --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 +mypy==1.1.1 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:0a28a76785bf57655a8ea5eb0540a15b0e781c807b5aa798bd463779988fa1d5 \ + --hash=sha256:19ba15f9627a5723e522d007fe708007bae52b93faab00f95d72f03e1afa9598 \ + --hash=sha256:21b437be1c02712a605591e1ed1d858aba681757a1e55fe678a15c2244cd68a5 \ + --hash=sha256:26cdd6a22b9b40b2fd71881a8a4f34b4d7914c679f154f43385ca878a8297389 \ + --hash=sha256:2888ce4fe5aae5a673386fa232473014056967f3904f5abfcf6367b5af1f612a \ + --hash=sha256:2b0c373d071593deefbcdd87ec8db91ea13bd8f1328d44947e88beae21e8d5e9 \ + --hash=sha256:315ac73cc1cce4771c27d426b7ea558fb4e2836f89cb0296cbe056894e3a1f78 \ + --hash=sha256:39c7119335be05630611ee798cc982623b9e8f0cff04a0b48dfc26100e0b97af \ + --hash=sha256:4b398d8b1f4fba0e3c6463e02f8ad3346f71956b92287af22c9b12c3ec965a9f \ + --hash=sha256:4e4e8b362cdf99ba00c2b218036002bdcdf1e0de085cdb296a49df03fb31dfc4 \ + --hash=sha256:59bbd71e5c58eed2e992ce6523180e03c221dcd92b52f0e792f291d67b15a71c \ + --hash=sha256:5b5f81b40d94c785f288948c16e1f2da37203c6006546c5d947aab6f90aefef2 \ + --hash=sha256:5cb14ff9919b7df3538590fc4d4c49a0f84392237cbf5f7a816b4161c061829e \ + --hash=sha256:61bf08362e93b6b12fad3eab68c4ea903a077b87c90ac06c11e3d7a09b56b9c1 \ + --hash=sha256:64cc3afb3e9e71a79d06e3ed24bb508a6d66f782aff7e56f628bf35ba2e0ba51 \ + --hash=sha256:69b35d1dcb5707382810765ed34da9db47e7f95b3528334a3c999b0c90fe523f \ + --hash=sha256:9401e33814cec6aec8c03a9548e9385e0e228fc1b8b0a37b9ea21038e64cdd8a \ + --hash=sha256:a380c041db500e1410bb5b16b3c1c35e61e773a5c3517926b81dfdab7582be54 \ + --hash=sha256:ae9ceae0f5b9059f33dbc62dea087e942c0ccab4b7a003719cb70f9b8abfa32f \ + --hash=sha256:b7c7b708fe9a871a96626d61912e3f4ddd365bf7f39128362bc50cbd74a634d5 \ + --hash=sha256:c1c10fa12df1232c936830839e2e935d090fc9ee315744ac33b8a32216b93707 \ + --hash=sha256:ce61663faf7a8e5ec6f456857bfbcec2901fbdb3ad958b778403f63b9e606a1b \ + --hash=sha256:d64c28e03ce40d5303450f547e07418c64c241669ab20610f273c9e6290b4b0b \ + --hash=sha256:d809f88734f44a0d44959d795b1e6f64b2bbe0ea4d9cc4776aa588bb4229fc1c \ + --hash=sha256:dbb19c9f662e41e474e0cff502b7064a7edc6764f5262b6cd91d698163196799 \ + --hash=sha256:ef6a01e563ec6a4940784c574d33f6ac1943864634517984471642908b30b6f7 +networkx==2.8.8 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:230d388117af870fce5647a3c52401fcf753e94720e6ea6b4197a5355648885e \ + --hash=sha256:e435dfa75b1d7195c7b8378c3859f0445cd88c6b0375c181ed66823a9ceb7524 +ordered-set==4.1.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562 \ + --hash=sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8 +packaging==23.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ + --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 +pathspec==0.11.1 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687 \ + --hash=sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293 +platformdirs==3.2.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08 \ + --hash=sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e +pluggy==1.0.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ + --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 +pycodestyle==2.10.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053 \ + --hash=sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610 +pydantic==1.10.7 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:01aea3a42c13f2602b7ecbbea484a98169fb568ebd9e247593ea05f01b884b2e \ + --hash=sha256:0cd181f1d0b1d00e2b705f1bf1ac7799a2d938cce3376b8007df62b29be3c2c6 \ + --hash=sha256:10a86d8c8db68086f1e30a530f7d5f83eb0685e632e411dbbcf2d5c0150e8dcd \ + --hash=sha256:193924c563fae6ddcb71d3f06fa153866423ac1b793a47936656e806b64e24ca \ + --hash=sha256:464855a7ff7f2cc2cf537ecc421291b9132aa9c79aef44e917ad711b4a93163b \ + --hash=sha256:516f1ed9bc2406a0467dd777afc636c7091d71f214d5e413d64fef45174cfc7a \ + --hash=sha256:6434b49c0b03a51021ade5c4daa7d70c98f7a79e95b551201fff682fc1661245 \ + --hash=sha256:64d34ab766fa056df49013bb6e79921a0265204c071984e75a09cbceacbbdd5d \ + --hash=sha256:670bb4683ad1e48b0ecb06f0cfe2178dcf74ff27921cdf1606e527d2617a81ee \ + --hash=sha256:68792151e174a4aa9e9fc1b4e653e65a354a2fa0fed169f7b3d09902ad2cb6f1 \ + --hash=sha256:701daea9ffe9d26f97b52f1d157e0d4121644f0fcf80b443248434958fd03dc3 \ + --hash=sha256:7d45fc99d64af9aaf7e308054a0067fdcd87ffe974f2442312372dfa66e1001d \ + --hash=sha256:80b1fab4deb08a8292d15e43a6edccdffa5377a36a4597bb545b93e79c5ff0a5 \ + --hash=sha256:82dffb306dd20bd5268fd6379bc4bfe75242a9c2b79fec58e1041fbbdb1f7914 \ + --hash=sha256:8c7f51861d73e8b9ddcb9916ae7ac39fb52761d9ea0df41128e81e2ba42886cd \ + --hash=sha256:950ce33857841f9a337ce07ddf46bc84e1c4946d2a3bba18f8280297157a3fd1 \ + --hash=sha256:976cae77ba6a49d80f461fd8bba183ff7ba79f44aa5cfa82f1346b5626542f8e \ + --hash=sha256:9f6f0fd68d73257ad6685419478c5aece46432f4bdd8d32c7345f1986496171e \ + --hash=sha256:a7cd2251439988b413cb0a985c4ed82b6c6aac382dbaff53ae03c4b23a70e80a \ + --hash=sha256:abfb7d4a7cd5cc4e1d1887c43503a7c5dd608eadf8bc615413fc498d3e4645cd \ + --hash=sha256:ae150a63564929c675d7f2303008d88426a0add46efd76c3fc797cd71cb1b46f \ + --hash=sha256:b0f85904f73161817b80781cc150f8b906d521fa11e3cdabae19a581c3606209 \ + --hash=sha256:b4a849d10f211389502059c33332e91327bc154acc1845f375a99eca3afa802d \ + --hash=sha256:c15582f9055fbc1bfe50266a19771bbbef33dd28c45e78afbe1996fd70966c2a \ + --hash=sha256:c230c0d8a322276d6e7b88c3f7ce885f9ed16e0910354510e0bae84d54991143 \ + --hash=sha256:cc1dde4e50a5fc1336ee0581c1612215bc64ed6d28d2c7c6f25d2fe3e7c3e918 \ + --hash=sha256:cf135c46099ff3f919d2150a948ce94b9ce545598ef2c6c7bf55dca98a304b52 \ + --hash=sha256:cfc83c0678b6ba51b0532bea66860617c4cd4251ecf76e9846fa5a9f3454e97e \ + --hash=sha256:d2a5ebb48958754d386195fe9e9c5106f11275867051bf017a8059410e9abf1f \ + --hash=sha256:d71e69699498b020ea198468e2480a2f1e7433e32a3a99760058c6520e2bea7e \ + --hash=sha256:d75ae19d2a3dbb146b6f324031c24f8a3f52ff5d6a9f22f0683694b3afcb16fb \ + --hash=sha256:dfe2507b8ef209da71b6fb5f4e597b50c5a34b78d7e857c4f8f3115effaef5fe \ + --hash=sha256:e0cfe895a504c060e5d36b287ee696e2fdad02d89e0d895f83037245218a87fe \ + --hash=sha256:e79e999e539872e903767c417c897e729e015872040e56b96e67968c3b918b2d \ + --hash=sha256:ecbbc51391248116c0a055899e6c3e7ffbb11fb5e2a4cd6f2d0b93272118a209 \ + --hash=sha256:f4a2b50e2b03d5776e7f21af73e2070e1b5c0d0df255a827e7c632962f8315af +pyflakes==3.0.1 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ + --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd +pygments==2.14.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297 \ + --hash=sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717 +pyinputplus==0.2.12 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:3a86b03dc6d003fec7dc627ad175cacaaf6e14a6a3b13b34c8fe6f5d01506231 +pylint==2.17.2 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:001cc91366a7df2970941d7e6bbefcbf98694e00102c1f121c531a814ddc2ea8 \ + --hash=sha256:1b647da5249e7c279118f657ca28b6aaebb299f86bf92affc632acf199f7adbb +pysimplevalidate==0.2.12 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:645d24bdca17ad4c40658f3aa0bd5c1aa1688ba0c02ba75c5ed2cb3b8abaaa19 +pytest-cov==4.0.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b \ + --hash=sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470 +pytest==7.2.2 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e \ + --hash=sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4 +pyyaml==6.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf \ + --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ + --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ + --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ + --hash=sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b \ + --hash=sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4 \ + --hash=sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07 \ + --hash=sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba \ + --hash=sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9 \ + --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ + --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ + --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ + --hash=sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782 \ + --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ + --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ + --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ + --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 \ + --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ + --hash=sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1 \ + --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ + --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ + --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ + --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ + --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ + --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ + --hash=sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d \ + --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ + --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ + --hash=sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7 \ + --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ + --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ + --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ + --hash=sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358 \ + --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ + --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ + --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ + --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ + --hash=sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f \ + --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ + --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 +requests==2.28.2 ; python_version >= "3.9" and python_version < "4" \ + --hash=sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa \ + --hash=sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf +rfc3986[idna2008]==1.5.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835 \ + --hash=sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97 +sniffio==1.3.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \ + --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384 +snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ + --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a +sphinx==5.3.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d \ + --hash=sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5 +sphinxcontrib-applehelp==1.0.4 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228 \ + --hash=sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e +sphinxcontrib-devhelp==1.0.2 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e \ + --hash=sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4 +sphinxcontrib-htmlhelp==2.0.1 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff \ + --hash=sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903 +sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ + --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 +sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72 \ + --hash=sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6 +sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd \ + --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 +starlette==0.25.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:774f1df1983fd594b9b6fb3ded39c2aa1979d10ac45caac0f4255cbe2acb8628 \ + --hash=sha256:854c71e73736c429c2bdb07801f2c76c9cba497e7c3cf4988fde5e95fe4cdb3c +stdiomask==0.0.6 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:c1e47069ead9e10bda150a26f7922ca01d2adc503042a9d7acf64877a2b9a3a6 +tomli==2.0.1 ; python_version >= "3.9" and python_full_version <= "3.11.0a6" \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +tomlkit==0.11.7 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:5325463a7da2ef0c6bbfefb62a3dc883aebe679984709aee32a317907d0a8d3c \ + --hash=sha256:f392ef70ad87a672f02519f99967d28a4d3047133e2d1df936511465fbb3791d +types-pyyaml==6.0.12.9 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:5aed5aa66bd2d2e158f75dda22b059570ede988559f030cf294871d3b647e3e8 \ + --hash=sha256:c51b1bd6d99ddf0aa2884a7a328810ebf70a4262c292195d3f4f9a0005f9eeb6 +typing-extensions==4.5.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ + --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 +urllib3==1.26.15 ; python_version >= "3.9" and python_version < "4" \ + --hash=sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305 \ + --hash=sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42 +uvicorn==0.20.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:a4e12017b940247f836bc90b72e725d7dfd0c8ed1c51eb365f5ba30d9f5127d8 \ + --hash=sha256:c3ed1598a5668208723f2bb49336f4509424ad198d6ab2615b7783db58d919fd +wrapt==1.15.0 ; python_version >= "3.9" and python_version < "4.0" \ + --hash=sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0 \ + --hash=sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420 \ + --hash=sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a \ + --hash=sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c \ + --hash=sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079 \ + --hash=sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923 \ + --hash=sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f \ + --hash=sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1 \ + --hash=sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8 \ + --hash=sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86 \ + --hash=sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0 \ + --hash=sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364 \ + --hash=sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e \ + --hash=sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c \ + --hash=sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e \ + --hash=sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c \ + --hash=sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727 \ + --hash=sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff \ + --hash=sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e \ + --hash=sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29 \ + --hash=sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7 \ + --hash=sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72 \ + --hash=sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475 \ + --hash=sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a \ + --hash=sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317 \ + --hash=sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2 \ + --hash=sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd \ + --hash=sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640 \ + --hash=sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98 \ + --hash=sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248 \ + --hash=sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e \ + --hash=sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d \ + --hash=sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec \ + --hash=sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1 \ + --hash=sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e \ + --hash=sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9 \ + --hash=sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92 \ + --hash=sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb \ + --hash=sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094 \ + --hash=sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46 \ + --hash=sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29 \ + --hash=sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd \ + --hash=sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705 \ + --hash=sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8 \ + --hash=sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975 \ + --hash=sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb \ + --hash=sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e \ + --hash=sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b \ + --hash=sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418 \ + --hash=sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019 \ + --hash=sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1 \ + --hash=sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba \ + --hash=sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6 \ + --hash=sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2 \ + --hash=sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3 \ + --hash=sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7 \ + --hash=sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752 \ + --hash=sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416 \ + --hash=sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f \ + --hash=sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1 \ + --hash=sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc \ + --hash=sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145 \ + --hash=sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee \ + --hash=sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a \ + --hash=sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7 \ + --hash=sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b \ + --hash=sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653 \ + --hash=sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0 \ + --hash=sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90 \ + --hash=sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29 \ + --hash=sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6 \ + --hash=sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034 \ + --hash=sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09 \ + --hash=sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559 \ + --hash=sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639 +zipp==3.15.0 ; python_version >= "3.9" and python_version < "3.10" \ + --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ + --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 From 94f8c481a8400de2deae6892f7eaefa545ca4ed1 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Thu, 6 Apr 2023 09:01:27 -0400 Subject: [PATCH 04/61] Revert "DELETE/REBASE this out before PR - smushing dev envs" This reverts commit 821db9fae77e5a581ef7c69d7a109815e6b43e28. --- poetry.lock | 1059 +++++++++++------------------------------------- pyproject.toml | 25 +- src/vtp/cli | 1 - src/vtp/core | 1 - src/vtp/ops | 1 - 5 files changed, 237 insertions(+), 850 deletions(-) delete mode 120000 src/vtp/cli delete mode 120000 src/vtp/core delete mode 120000 src/vtp/ops diff --git a/poetry.lock b/poetry.lock index 641c77c..b5689d6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,16 +1,4 @@ -# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. - -[[package]] -name = "alabaster" -version = "0.7.13" -description = "A configurable sidebar-enabled Sphinx theme" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, - {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, -] +# This file is automatically @generated by Poetry and should not be changed by hand. [[package]] name = "anyio" @@ -35,14 +23,14 @@ trio = ["trio (>=0.16,<0.22)"] [[package]] name = "astroid" -version = "2.15.2" +version = "2.14.2" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false python-versions = ">=3.7.2" files = [ - {file = "astroid-2.15.2-py3-none-any.whl", hash = "sha256:dea89d9f99f491c66ac9c04ebddf91e4acf8bd711722175fe6245c0725cc19bb"}, - {file = "astroid-2.15.2.tar.gz", hash = "sha256:6e61b85c891ec53b07471aec5878f4ac6446a41e590ede0f2ce095f39f7d49dd"}, + {file = "astroid-2.14.2-py3-none-any.whl", hash = "sha256:0e0e3709d64fbffd3037e4ff403580550f14471fd3eaae9fa11cc9a5c7901153"}, + {file = "astroid-2.14.2.tar.gz", hash = "sha256:a3cf9f02c53dd259144a7e8f3ccd75d67c9a8c716ef183e0c1f291bc5d7bb3cf"}, ] [package.dependencies] @@ -72,51 +60,39 @@ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib- tests = ["attrs[tests-no-zope]", "zope.interface"] tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] -[[package]] -name = "babel" -version = "2.12.1" -description = "Internationalization utilities" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, -] - [[package]] name = "black" -version = "23.3.0" +version = "23.1.0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, + {file = "black-23.1.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:b6a92a41ee34b883b359998f0c8e6eb8e99803aa8bf3123bf2b2e6fec505a221"}, + {file = "black-23.1.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:57c18c5165c1dbe291d5306e53fb3988122890e57bd9b3dcb75f967f13411a26"}, + {file = "black-23.1.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:9880d7d419bb7e709b37e28deb5e68a49227713b623c72b2b931028ea65f619b"}, + {file = "black-23.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6663f91b6feca5d06f2ccd49a10f254f9298cc1f7f49c46e498a0771b507104"}, + {file = "black-23.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9afd3f493666a0cd8f8df9a0200c6359ac53940cbde049dcb1a7eb6ee2dd7074"}, + {file = "black-23.1.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:bfffba28dc52a58f04492181392ee380e95262af14ee01d4bc7bb1b1c6ca8d27"}, + {file = "black-23.1.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c1c476bc7b7d021321e7d93dc2cbd78ce103b84d5a4cf97ed535fbc0d6660648"}, + {file = "black-23.1.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:382998821f58e5c8238d3166c492139573325287820963d2f7de4d518bd76958"}, + {file = "black-23.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bf649fda611c8550ca9d7592b69f0637218c2369b7744694c5e4902873b2f3a"}, + {file = "black-23.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:121ca7f10b4a01fd99951234abdbd97728e1240be89fde18480ffac16503d481"}, + {file = "black-23.1.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:a8471939da5e824b891b25751955be52ee7f8a30a916d570a5ba8e0f2eb2ecad"}, + {file = "black-23.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8178318cb74f98bc571eef19068f6ab5613b3e59d4f47771582f04e175570ed8"}, + {file = "black-23.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a436e7881d33acaf2536c46a454bb964a50eff59b21b51c6ccf5a40601fbef24"}, + {file = "black-23.1.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:a59db0a2094d2259c554676403fa2fac3473ccf1354c1c63eccf7ae65aac8ab6"}, + {file = "black-23.1.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:0052dba51dec07ed029ed61b18183942043e00008ec65d5028814afaab9a22fd"}, + {file = "black-23.1.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:49f7b39e30f326a34b5c9a4213213a6b221d7ae9d58ec70df1c4a307cf2a1580"}, + {file = "black-23.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:162e37d49e93bd6eb6f1afc3e17a3d23a823042530c37c3c42eeeaf026f38468"}, + {file = "black-23.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b70eb40a78dfac24842458476135f9b99ab952dd3f2dab738c1881a9b38b753"}, + {file = "black-23.1.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:a29650759a6a0944e7cca036674655c2f0f63806ddecc45ed40b7b8aa314b651"}, + {file = "black-23.1.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:bb460c8561c8c1bec7824ecbc3ce085eb50005883a6203dcfb0122e95797ee06"}, + {file = "black-23.1.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c91dfc2c2a4e50df0026f88d2215e166616e0c80e86004d0003ece0488db2739"}, + {file = "black-23.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a951cc83ab535d248c89f300eccbd625e80ab880fbcfb5ac8afb5f01a258ac9"}, + {file = "black-23.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0680d4380db3719ebcfb2613f34e86c8e6d15ffeabcf8ec59355c5e7b85bb555"}, + {file = "black-23.1.0-py3-none-any.whl", hash = "sha256:7a0f701d314cfa0896b9001df70a530eb2472babb76086344e688829efd97d32"}, + {file = "black-23.1.0.tar.gz", hash = "sha256:b0bd97bea8903f5a2ba7219257a44e3f1f9d00073d6cc1add68f0beec69692ac"}, ] [package.dependencies] @@ -146,91 +122,6 @@ files = [ {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, ] -[[package]] -name = "charset-normalizer" -version = "3.1.0" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "dev" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, -] - [[package]] name = "click" version = "8.1.3" @@ -260,63 +151,63 @@ files = [ [[package]] name = "coverage" -version = "7.2.2" +version = "7.1.0" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "coverage-7.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c90e73bdecb7b0d1cea65a08cb41e9d672ac6d7995603d6465ed4914b98b9ad7"}, - {file = "coverage-7.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e2926b8abedf750c2ecf5035c07515770944acf02e1c46ab08f6348d24c5f94d"}, - {file = "coverage-7.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57b77b9099f172804e695a40ebaa374f79e4fb8b92f3e167f66facbf92e8e7f5"}, - {file = "coverage-7.2.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:efe1c0adad110bf0ad7fb59f833880e489a61e39d699d37249bdf42f80590169"}, - {file = "coverage-7.2.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2199988e0bc8325d941b209f4fd1c6fa007024b1442c5576f1a32ca2e48941e6"}, - {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:81f63e0fb74effd5be736cfe07d710307cc0a3ccb8f4741f7f053c057615a137"}, - {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:186e0fc9cf497365036d51d4d2ab76113fb74f729bd25da0975daab2e107fd90"}, - {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:420f94a35e3e00a2b43ad5740f935358e24478354ce41c99407cddd283be00d2"}, - {file = "coverage-7.2.2-cp310-cp310-win32.whl", hash = "sha256:38004671848b5745bb05d4d621526fca30cee164db42a1f185615f39dc997292"}, - {file = "coverage-7.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:0ce383d5f56d0729d2dd40e53fe3afeb8f2237244b0975e1427bfb2cf0d32bab"}, - {file = "coverage-7.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3eb55b7b26389dd4f8ae911ba9bc8c027411163839dea4c8b8be54c4ee9ae10b"}, - {file = "coverage-7.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2b96123a453a2d7f3995ddb9f28d01fd112319a7a4d5ca99796a7ff43f02af5"}, - {file = "coverage-7.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:299bc75cb2a41e6741b5e470b8c9fb78d931edbd0cd009c58e5c84de57c06731"}, - {file = "coverage-7.2.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e1df45c23d4230e3d56d04414f9057eba501f78db60d4eeecfcb940501b08fd"}, - {file = "coverage-7.2.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:006ed5582e9cbc8115d2e22d6d2144a0725db542f654d9d4fda86793832f873d"}, - {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d683d230b5774816e7d784d7ed8444f2a40e7a450e5720d58af593cb0b94a212"}, - {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8efb48fa743d1c1a65ee8787b5b552681610f06c40a40b7ef94a5b517d885c54"}, - {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c752d5264053a7cf2fe81c9e14f8a4fb261370a7bb344c2a011836a96fb3f57"}, - {file = "coverage-7.2.2-cp311-cp311-win32.whl", hash = "sha256:55272f33da9a5d7cccd3774aeca7a01e500a614eaea2a77091e9be000ecd401d"}, - {file = "coverage-7.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:92ebc1619650409da324d001b3a36f14f63644c7f0a588e331f3b0f67491f512"}, - {file = "coverage-7.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5afdad4cc4cc199fdf3e18088812edcf8f4c5a3c8e6cb69127513ad4cb7471a9"}, - {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0484d9dd1e6f481b24070c87561c8d7151bdd8b044c93ac99faafd01f695c78e"}, - {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d530191aa9c66ab4f190be8ac8cc7cfd8f4f3217da379606f3dd4e3d83feba69"}, - {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ac0f522c3b6109c4b764ffec71bf04ebc0523e926ca7cbe6c5ac88f84faced0"}, - {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ba279aae162b20444881fc3ed4e4f934c1cf8620f3dab3b531480cf602c76b7f"}, - {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:53d0fd4c17175aded9c633e319360d41a1f3c6e352ba94edcb0fa5167e2bad67"}, - {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c99cb7c26a3039a8a4ee3ca1efdde471e61b4837108847fb7d5be7789ed8fd9"}, - {file = "coverage-7.2.2-cp37-cp37m-win32.whl", hash = "sha256:5cc0783844c84af2522e3a99b9b761a979a3ef10fb87fc4048d1ee174e18a7d8"}, - {file = "coverage-7.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:817295f06eacdc8623dc4df7d8b49cea65925030d4e1e2a7c7218380c0072c25"}, - {file = "coverage-7.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6146910231ece63facfc5984234ad1b06a36cecc9fd0c028e59ac7c9b18c38c6"}, - {file = "coverage-7.2.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:387fb46cb8e53ba7304d80aadca5dca84a2fbf6fe3faf6951d8cf2d46485d1e5"}, - {file = "coverage-7.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:046936ab032a2810dcaafd39cc4ef6dd295df1a7cbead08fe996d4765fca9fe4"}, - {file = "coverage-7.2.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e627dee428a176ffb13697a2c4318d3f60b2ccdde3acdc9b3f304206ec130ccd"}, - {file = "coverage-7.2.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fa54fb483decc45f94011898727802309a109d89446a3c76387d016057d2c84"}, - {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3668291b50b69a0c1ef9f462c7df2c235da3c4073f49543b01e7eb1dee7dd540"}, - {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7c20b731211261dc9739bbe080c579a1835b0c2d9b274e5fcd903c3a7821cf88"}, - {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5764e1f7471cb8f64b8cda0554f3d4c4085ae4b417bfeab236799863703e5de2"}, - {file = "coverage-7.2.2-cp38-cp38-win32.whl", hash = "sha256:4f01911c010122f49a3e9bdc730eccc66f9b72bd410a3a9d3cb8448bb50d65d3"}, - {file = "coverage-7.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:c448b5c9e3df5448a362208b8d4b9ed85305528313fca1b479f14f9fe0d873b8"}, - {file = "coverage-7.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfe7085783cda55e53510482fa7b5efc761fad1abe4d653b32710eb548ebdd2d"}, - {file = "coverage-7.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9d22e94e6dc86de981b1b684b342bec5e331401599ce652900ec59db52940005"}, - {file = "coverage-7.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:507e4720791977934bba016101579b8c500fb21c5fa3cd4cf256477331ddd988"}, - {file = "coverage-7.2.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc4803779f0e4b06a2361f666e76f5c2e3715e8e379889d02251ec911befd149"}, - {file = "coverage-7.2.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db8c2c5ace167fd25ab5dd732714c51d4633f58bac21fb0ff63b0349f62755a8"}, - {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4f68ee32d7c4164f1e2c8797535a6d0a3733355f5861e0f667e37df2d4b07140"}, - {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d52f0a114b6a58305b11a5cdecd42b2e7f1ec77eb20e2b33969d702feafdd016"}, - {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:797aad79e7b6182cb49c08cc5d2f7aa7b2128133b0926060d0a8889ac43843be"}, - {file = "coverage-7.2.2-cp39-cp39-win32.whl", hash = "sha256:db45eec1dfccdadb179b0f9ca616872c6f700d23945ecc8f21bb105d74b1c5fc"}, - {file = "coverage-7.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:8dbe2647bf58d2c5a6c5bcc685f23b5f371909a5624e9f5cd51436d6a9f6c6ef"}, - {file = "coverage-7.2.2-pp37.pp38.pp39-none-any.whl", hash = "sha256:872d6ce1f5be73f05bea4df498c140b9e7ee5418bfa2cc8204e7f9b817caa968"}, - {file = "coverage-7.2.2.tar.gz", hash = "sha256:36dd42da34fe94ed98c39887b86db9d06777b1c8f860520e21126a75507024f2"}, + {file = "coverage-7.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b946bbcd5a8231383450b195cfb58cb01cbe7f8949f5758566b881df4b33baf"}, + {file = "coverage-7.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec8e767f13be637d056f7e07e61d089e555f719b387a7070154ad80a0ff31801"}, + {file = "coverage-7.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a5a5879a939cb84959d86869132b00176197ca561c664fc21478c1eee60d75"}, + {file = "coverage-7.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b643cb30821e7570c0aaf54feaf0bfb630b79059f85741843e9dc23f33aaca2c"}, + {file = "coverage-7.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32df215215f3af2c1617a55dbdfb403b772d463d54d219985ac7cd3bf124cada"}, + {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:33d1ae9d4079e05ac4cc1ef9e20c648f5afabf1a92adfaf2ccf509c50b85717f"}, + {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:29571503c37f2ef2138a306d23e7270687c0efb9cab4bd8038d609b5c2393a3a"}, + {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:63ffd21aa133ff48c4dff7adcc46b7ec8b565491bfc371212122dd999812ea1c"}, + {file = "coverage-7.1.0-cp310-cp310-win32.whl", hash = "sha256:4b14d5e09c656de5038a3f9bfe5228f53439282abcab87317c9f7f1acb280352"}, + {file = "coverage-7.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:8361be1c2c073919500b6601220a6f2f98ea0b6d2fec5014c1d9cfa23dd07038"}, + {file = "coverage-7.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:da9b41d4539eefd408c46725fb76ecba3a50a3367cafb7dea5f250d0653c1040"}, + {file = "coverage-7.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5b15ed7644ae4bee0ecf74fee95808dcc34ba6ace87e8dfbf5cb0dc20eab45a"}, + {file = "coverage-7.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d12d076582507ea460ea2a89a8c85cb558f83406c8a41dd641d7be9a32e1274f"}, + {file = "coverage-7.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2617759031dae1bf183c16cef8fcfb3de7617f394c813fa5e8e46e9b82d4222"}, + {file = "coverage-7.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4e4881fa9e9667afcc742f0c244d9364d197490fbc91d12ac3b5de0bf2df146"}, + {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9d58885215094ab4a86a6aef044e42994a2bd76a446dc59b352622655ba6621b"}, + {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ffeeb38ee4a80a30a6877c5c4c359e5498eec095878f1581453202bfacc8fbc2"}, + {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3baf5f126f30781b5e93dbefcc8271cb2491647f8283f20ac54d12161dff080e"}, + {file = "coverage-7.1.0-cp311-cp311-win32.whl", hash = "sha256:ded59300d6330be27bc6cf0b74b89ada58069ced87c48eaf9344e5e84b0072f7"}, + {file = "coverage-7.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:6a43c7823cd7427b4ed763aa7fb63901ca8288591323b58c9cd6ec31ad910f3c"}, + {file = "coverage-7.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7a726d742816cb3a8973c8c9a97539c734b3a309345236cd533c4883dda05b8d"}, + {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc7c85a150501286f8b56bd8ed3aa4093f4b88fb68c0843d21ff9656f0009d6a"}, + {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5b4198d85a3755d27e64c52f8c95d6333119e49fd001ae5798dac872c95e0f8"}, + {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb726cb861c3117a553f940372a495fe1078249ff5f8a5478c0576c7be12050"}, + {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:51b236e764840a6df0661b67e50697aaa0e7d4124ca95e5058fa3d7cbc240b7c"}, + {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7ee5c9bb51695f80878faaa5598040dd6c9e172ddcf490382e8aedb8ec3fec8d"}, + {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c31b75ae466c053a98bf26843563b3b3517b8f37da4d47b1c582fdc703112bc3"}, + {file = "coverage-7.1.0-cp37-cp37m-win32.whl", hash = "sha256:3b155caf3760408d1cb903b21e6a97ad4e2bdad43cbc265e3ce0afb8e0057e73"}, + {file = "coverage-7.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2a60d6513781e87047c3e630b33b4d1e89f39836dac6e069ffee28c4786715f5"}, + {file = "coverage-7.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2cba5c6db29ce991029b5e4ac51eb36774458f0a3b8d3137241b32d1bb91f06"}, + {file = "coverage-7.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:beeb129cacea34490ffd4d6153af70509aa3cda20fdda2ea1a2be870dfec8d52"}, + {file = "coverage-7.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c45948f613d5d18c9ec5eaa203ce06a653334cf1bd47c783a12d0dd4fd9c851"}, + {file = "coverage-7.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef382417db92ba23dfb5864a3fc9be27ea4894e86620d342a116b243ade5d35d"}, + {file = "coverage-7.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c7c0d0827e853315c9bbd43c1162c006dd808dbbe297db7ae66cd17b07830f0"}, + {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e5cdbb5cafcedea04924568d990e20ce7f1945a1dd54b560f879ee2d57226912"}, + {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9817733f0d3ea91bea80de0f79ef971ae94f81ca52f9b66500c6a2fea8e4b4f8"}, + {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:218fe982371ac7387304153ecd51205f14e9d731b34fb0568181abaf7b443ba0"}, + {file = "coverage-7.1.0-cp38-cp38-win32.whl", hash = "sha256:04481245ef966fbd24ae9b9e537ce899ae584d521dfbe78f89cad003c38ca2ab"}, + {file = "coverage-7.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8ae125d1134bf236acba8b83e74c603d1b30e207266121e76484562bc816344c"}, + {file = "coverage-7.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2bf1d5f2084c3932b56b962a683074a3692bce7cabd3aa023c987a2a8e7612f6"}, + {file = "coverage-7.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:98b85dd86514d889a2e3dd22ab3c18c9d0019e696478391d86708b805f4ea0fa"}, + {file = "coverage-7.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38da2db80cc505a611938d8624801158e409928b136c8916cd2e203970dde4dc"}, + {file = "coverage-7.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3164d31078fa9efe406e198aecd2a02d32a62fecbdef74f76dad6a46c7e48311"}, + {file = "coverage-7.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db61a79c07331e88b9a9974815c075fbd812bc9dbc4dc44b366b5368a2936063"}, + {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ccb092c9ede70b2517a57382a601619d20981f56f440eae7e4d7eaafd1d1d09"}, + {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:33ff26d0f6cc3ca8de13d14fde1ff8efe1456b53e3f0273e63cc8b3c84a063d8"}, + {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d47dd659a4ee952e90dc56c97d78132573dc5c7b09d61b416a9deef4ebe01a0c"}, + {file = "coverage-7.1.0-cp39-cp39-win32.whl", hash = "sha256:d248cd4a92065a4d4543b8331660121b31c4148dd00a691bfb7a5cdc7483cfa4"}, + {file = "coverage-7.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7ed681b0f8e8bcbbffa58ba26fcf5dbc8f79e7997595bf071ed5430d8c08d6f3"}, + {file = "coverage-7.1.0-pp37.pp38.pp39-none-any.whl", hash = "sha256:755e89e32376c850f826c425ece2c35a4fc266c081490eb0a841e7c1cb0d3bda"}, + {file = "coverage-7.1.0.tar.gz", hash = "sha256:10188fe543560ec4874f974b5305cd1a8bdcfa885ee00ea3a03733464c4ca265"}, ] [package.dependencies] @@ -325,25 +216,6 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] -[[package]] -name = "deepdiff" -version = "6.3.0" -description = "Deep Difference and Search of any Python object/data. Recreate objects by adding adding deltas to each other." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "deepdiff-6.3.0-py3-none-any.whl", hash = "sha256:15838bd1cbd046ce15ed0c41e837cd04aff6b3e169c5e06fca69d7aa11615ceb"}, - {file = "deepdiff-6.3.0.tar.gz", hash = "sha256:6a3bf1e7228ac5c71ca2ec43505ca0a743ff54ec77aa08d7db22de6bc7b2b644"}, -] - -[package.dependencies] -ordered-set = ">=4.0.2,<4.2.0" - -[package.extras] -cli = ["click (==8.1.3)", "pyyaml (==6.0)"] -optimize = ["orjson"] - [[package]] name = "dill" version = "0.3.6" @@ -359,28 +231,16 @@ files = [ [package.extras] graph = ["objgraph (>=1.7.2)"] -[[package]] -name = "docutils" -version = "0.19" -description = "Docutils -- Python Documentation Utilities" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "docutils-0.19-py3-none-any.whl", hash = "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc"}, - {file = "docutils-0.19.tar.gz", hash = "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6"}, -] - [[package]] name = "exceptiongroup" -version = "1.1.1" +version = "1.1.0" description = "Backport of PEP 654 (exception groups)" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, - {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, + {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, + {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, ] [package.extras] @@ -495,38 +355,6 @@ files = [ {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] -[[package]] -name = "imagesize" -version = "1.4.1" -description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, - {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, -] - -[[package]] -name = "importlib-metadata" -version = "6.1.0" -description = "Read metadata from Python packages" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "importlib_metadata-6.1.0-py3-none-any.whl", hash = "sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09"}, - {file = "importlib_metadata-6.1.0.tar.gz", hash = "sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20"}, -] - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] - [[package]] name = "importlib-resources" version = "5.12.0" @@ -576,24 +404,6 @@ pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib" plugins = ["setuptools"] requirements-deprecated-finder = ["pip-api", "pipreqs"] -[[package]] -name = "jinja2" -version = "3.1.2" -description = "A very fast and expressive template engine." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - [[package]] name = "lazy-object-proxy" version = "1.9.0" @@ -640,66 +450,6 @@ files = [ {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, ] -[[package]] -name = "markupsafe" -version = "2.1.2" -description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, -] - [[package]] name = "mccabe" version = "0.7.0" @@ -714,42 +464,42 @@ files = [ [[package]] name = "mypy" -version = "1.1.1" +version = "1.0.1" description = "Optional static typing for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "mypy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39c7119335be05630611ee798cc982623b9e8f0cff04a0b48dfc26100e0b97af"}, - {file = "mypy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:61bf08362e93b6b12fad3eab68c4ea903a077b87c90ac06c11e3d7a09b56b9c1"}, - {file = "mypy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbb19c9f662e41e474e0cff502b7064a7edc6764f5262b6cd91d698163196799"}, - {file = "mypy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:315ac73cc1cce4771c27d426b7ea558fb4e2836f89cb0296cbe056894e3a1f78"}, - {file = "mypy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5cb14ff9919b7df3538590fc4d4c49a0f84392237cbf5f7a816b4161c061829e"}, - {file = "mypy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:26cdd6a22b9b40b2fd71881a8a4f34b4d7914c679f154f43385ca878a8297389"}, - {file = "mypy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b5f81b40d94c785f288948c16e1f2da37203c6006546c5d947aab6f90aefef2"}, - {file = "mypy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21b437be1c02712a605591e1ed1d858aba681757a1e55fe678a15c2244cd68a5"}, - {file = "mypy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d809f88734f44a0d44959d795b1e6f64b2bbe0ea4d9cc4776aa588bb4229fc1c"}, - {file = "mypy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:a380c041db500e1410bb5b16b3c1c35e61e773a5c3517926b81dfdab7582be54"}, - {file = "mypy-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b7c7b708fe9a871a96626d61912e3f4ddd365bf7f39128362bc50cbd74a634d5"}, - {file = "mypy-1.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1c10fa12df1232c936830839e2e935d090fc9ee315744ac33b8a32216b93707"}, - {file = "mypy-1.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0a28a76785bf57655a8ea5eb0540a15b0e781c807b5aa798bd463779988fa1d5"}, - {file = "mypy-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ef6a01e563ec6a4940784c574d33f6ac1943864634517984471642908b30b6f7"}, - {file = "mypy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d64c28e03ce40d5303450f547e07418c64c241669ab20610f273c9e6290b4b0b"}, - {file = "mypy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64cc3afb3e9e71a79d06e3ed24bb508a6d66f782aff7e56f628bf35ba2e0ba51"}, - {file = "mypy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce61663faf7a8e5ec6f456857bfbcec2901fbdb3ad958b778403f63b9e606a1b"}, - {file = "mypy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2b0c373d071593deefbcdd87ec8db91ea13bd8f1328d44947e88beae21e8d5e9"}, - {file = "mypy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:2888ce4fe5aae5a673386fa232473014056967f3904f5abfcf6367b5af1f612a"}, - {file = "mypy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:19ba15f9627a5723e522d007fe708007bae52b93faab00f95d72f03e1afa9598"}, - {file = "mypy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:59bbd71e5c58eed2e992ce6523180e03c221dcd92b52f0e792f291d67b15a71c"}, - {file = "mypy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9401e33814cec6aec8c03a9548e9385e0e228fc1b8b0a37b9ea21038e64cdd8a"}, - {file = "mypy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4b398d8b1f4fba0e3c6463e02f8ad3346f71956b92287af22c9b12c3ec965a9f"}, - {file = "mypy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:69b35d1dcb5707382810765ed34da9db47e7f95b3528334a3c999b0c90fe523f"}, - {file = "mypy-1.1.1-py3-none-any.whl", hash = "sha256:4e4e8b362cdf99ba00c2b218036002bdcdf1e0de085cdb296a49df03fb31dfc4"}, - {file = "mypy-1.1.1.tar.gz", hash = "sha256:ae9ceae0f5b9059f33dbc62dea087e942c0ccab4b7a003719cb70f9b8abfa32f"}, + {file = "mypy-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a"}, + {file = "mypy-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf"}, + {file = "mypy-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0"}, + {file = "mypy-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b"}, + {file = "mypy-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4"}, + {file = "mypy-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262"}, + {file = "mypy-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8"}, + {file = "mypy-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8"}, + {file = "mypy-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65"}, + {file = "mypy-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994"}, + {file = "mypy-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64f48c6176e243ad015e995de05af7f22bbe370dbb5b32bd6988438ec873919"}, + {file = "mypy-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fdd63e4f50e3538617887e9aee91855368d9fc1dea30da743837b0df7373bc4"}, + {file = "mypy-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbeb24514c4acbc78d205f85dd0e800f34062efcc1f4a4857c57e4b4b8712bff"}, + {file = "mypy-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a2948c40a7dd46c1c33765718936669dc1f628f134013b02ff5ac6c7ef6942bf"}, + {file = "mypy-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bc8d6bd3b274dd3846597855d96d38d947aedba18776aa998a8d46fabdaed76"}, + {file = "mypy-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:17455cda53eeee0a4adb6371a21dd3dbf465897de82843751cf822605d152c8c"}, + {file = "mypy-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e831662208055b006eef68392a768ff83596035ffd6d846786578ba1714ba8f6"}, + {file = "mypy-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e60d0b09f62ae97a94605c3f73fd952395286cf3e3b9e7b97f60b01ddfbbda88"}, + {file = "mypy-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:0af4f0e20706aadf4e6f8f8dc5ab739089146b83fd53cb4a7e0e850ef3de0bb6"}, + {file = "mypy-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24189f23dc66f83b839bd1cce2dfc356020dfc9a8bae03978477b15be61b062e"}, + {file = "mypy-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93a85495fb13dc484251b4c1fd7a5ac370cd0d812bbfc3b39c1bafefe95275d5"}, + {file = "mypy-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f546ac34093c6ce33f6278f7c88f0f147a4849386d3bf3ae193702f4fe31407"}, + {file = "mypy-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6c2ccb7af7154673c591189c3687b013122c5a891bb5651eca3db8e6c6c55bd"}, + {file = "mypy-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:15b5a824b58c7c822c51bc66308e759243c32631896743f030daf449fe3677f3"}, + {file = "mypy-1.0.1-py3-none-any.whl", hash = "sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4"}, + {file = "mypy-1.0.1.tar.gz", hash = "sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d"}, ] [package.dependencies] -mypy-extensions = ">=1.0.0" +mypy-extensions = ">=0.4.3" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = ">=3.10" @@ -771,40 +521,6 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] -[[package]] -name = "networkx" -version = "2.8.8" -description = "Python package for creating and manipulating graphs and networks" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "networkx-2.8.8-py3-none-any.whl", hash = "sha256:e435dfa75b1d7195c7b8378c3859f0445cd88c6b0375c181ed66823a9ceb7524"}, - {file = "networkx-2.8.8.tar.gz", hash = "sha256:230d388117af870fce5647a3c52401fcf753e94720e6ea6b4197a5355648885e"}, -] - -[package.extras] -default = ["matplotlib (>=3.4)", "numpy (>=1.19)", "pandas (>=1.3)", "scipy (>=1.8)"] -developer = ["mypy (>=0.982)", "pre-commit (>=2.20)"] -doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.2)", "pydata-sphinx-theme (>=0.11)", "sphinx (>=5.2)", "sphinx-gallery (>=0.11)", "texext (>=0.6.6)"] -extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.9)", "sympy (>=1.10)"] -test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] - -[[package]] -name = "ordered-set" -version = "4.1.0" -description = "An OrderedSet is a custom MutableSet that remembers its order, so that every" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ordered-set-4.1.0.tar.gz", hash = "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8"}, - {file = "ordered_set-4.1.0-py3-none-any.whl", hash = "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562"}, -] - -[package.extras] -dev = ["black", "mypy", "pytest"] - [[package]] name = "packaging" version = "23.0" @@ -819,31 +535,31 @@ files = [ [[package]] name = "pathspec" -version = "0.11.1" +version = "0.11.0" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, + {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, + {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, ] [[package]] name = "platformdirs" -version = "3.2.0" +version = "3.0.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.2.0-py3-none-any.whl", hash = "sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e"}, - {file = "platformdirs-3.2.0.tar.gz", hash = "sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08"}, + {file = "platformdirs-3.0.0-py3-none-any.whl", hash = "sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"}, + {file = "platformdirs-3.0.0.tar.gz", hash = "sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9"}, ] [package.extras] docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" @@ -875,48 +591,48 @@ files = [ [[package]] name = "pydantic" -version = "1.10.7" +version = "1.10.5" description = "Data validation and settings management using python type hints" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e79e999e539872e903767c417c897e729e015872040e56b96e67968c3b918b2d"}, - {file = "pydantic-1.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:01aea3a42c13f2602b7ecbbea484a98169fb568ebd9e247593ea05f01b884b2e"}, - {file = "pydantic-1.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:516f1ed9bc2406a0467dd777afc636c7091d71f214d5e413d64fef45174cfc7a"}, - {file = "pydantic-1.10.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae150a63564929c675d7f2303008d88426a0add46efd76c3fc797cd71cb1b46f"}, - {file = "pydantic-1.10.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ecbbc51391248116c0a055899e6c3e7ffbb11fb5e2a4cd6f2d0b93272118a209"}, - {file = "pydantic-1.10.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f4a2b50e2b03d5776e7f21af73e2070e1b5c0d0df255a827e7c632962f8315af"}, - {file = "pydantic-1.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:a7cd2251439988b413cb0a985c4ed82b6c6aac382dbaff53ae03c4b23a70e80a"}, - {file = "pydantic-1.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:68792151e174a4aa9e9fc1b4e653e65a354a2fa0fed169f7b3d09902ad2cb6f1"}, - {file = "pydantic-1.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe2507b8ef209da71b6fb5f4e597b50c5a34b78d7e857c4f8f3115effaef5fe"}, - {file = "pydantic-1.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10a86d8c8db68086f1e30a530f7d5f83eb0685e632e411dbbcf2d5c0150e8dcd"}, - {file = "pydantic-1.10.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75ae19d2a3dbb146b6f324031c24f8a3f52ff5d6a9f22f0683694b3afcb16fb"}, - {file = "pydantic-1.10.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:464855a7ff7f2cc2cf537ecc421291b9132aa9c79aef44e917ad711b4a93163b"}, - {file = "pydantic-1.10.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:193924c563fae6ddcb71d3f06fa153866423ac1b793a47936656e806b64e24ca"}, - {file = "pydantic-1.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:b4a849d10f211389502059c33332e91327bc154acc1845f375a99eca3afa802d"}, - {file = "pydantic-1.10.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cc1dde4e50a5fc1336ee0581c1612215bc64ed6d28d2c7c6f25d2fe3e7c3e918"}, - {file = "pydantic-1.10.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0cfe895a504c060e5d36b287ee696e2fdad02d89e0d895f83037245218a87fe"}, - {file = "pydantic-1.10.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:670bb4683ad1e48b0ecb06f0cfe2178dcf74ff27921cdf1606e527d2617a81ee"}, - {file = "pydantic-1.10.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:950ce33857841f9a337ce07ddf46bc84e1c4946d2a3bba18f8280297157a3fd1"}, - {file = "pydantic-1.10.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c15582f9055fbc1bfe50266a19771bbbef33dd28c45e78afbe1996fd70966c2a"}, - {file = "pydantic-1.10.7-cp37-cp37m-win_amd64.whl", hash = "sha256:82dffb306dd20bd5268fd6379bc4bfe75242a9c2b79fec58e1041fbbdb1f7914"}, - {file = "pydantic-1.10.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c7f51861d73e8b9ddcb9916ae7ac39fb52761d9ea0df41128e81e2ba42886cd"}, - {file = "pydantic-1.10.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6434b49c0b03a51021ade5c4daa7d70c98f7a79e95b551201fff682fc1661245"}, - {file = "pydantic-1.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64d34ab766fa056df49013bb6e79921a0265204c071984e75a09cbceacbbdd5d"}, - {file = "pydantic-1.10.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:701daea9ffe9d26f97b52f1d157e0d4121644f0fcf80b443248434958fd03dc3"}, - {file = "pydantic-1.10.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf135c46099ff3f919d2150a948ce94b9ce545598ef2c6c7bf55dca98a304b52"}, - {file = "pydantic-1.10.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0f85904f73161817b80781cc150f8b906d521fa11e3cdabae19a581c3606209"}, - {file = "pydantic-1.10.7-cp38-cp38-win_amd64.whl", hash = "sha256:9f6f0fd68d73257ad6685419478c5aece46432f4bdd8d32c7345f1986496171e"}, - {file = "pydantic-1.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c230c0d8a322276d6e7b88c3f7ce885f9ed16e0910354510e0bae84d54991143"}, - {file = "pydantic-1.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:976cae77ba6a49d80f461fd8bba183ff7ba79f44aa5cfa82f1346b5626542f8e"}, - {file = "pydantic-1.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d45fc99d64af9aaf7e308054a0067fdcd87ffe974f2442312372dfa66e1001d"}, - {file = "pydantic-1.10.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d2a5ebb48958754d386195fe9e9c5106f11275867051bf017a8059410e9abf1f"}, - {file = "pydantic-1.10.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:abfb7d4a7cd5cc4e1d1887c43503a7c5dd608eadf8bc615413fc498d3e4645cd"}, - {file = "pydantic-1.10.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:80b1fab4deb08a8292d15e43a6edccdffa5377a36a4597bb545b93e79c5ff0a5"}, - {file = "pydantic-1.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:d71e69699498b020ea198468e2480a2f1e7433e32a3a99760058c6520e2bea7e"}, - {file = "pydantic-1.10.7-py3-none-any.whl", hash = "sha256:0cd181f1d0b1d00e2b705f1bf1ac7799a2d938cce3376b8007df62b29be3c2c6"}, - {file = "pydantic-1.10.7.tar.gz", hash = "sha256:cfc83c0678b6ba51b0532bea66860617c4cd4251ecf76e9846fa5a9f3454e97e"}, + {file = "pydantic-1.10.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5920824fe1e21cbb3e38cf0f3dd24857c8959801d1031ce1fac1d50857a03bfb"}, + {file = "pydantic-1.10.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3bb99cf9655b377db1a9e47fa4479e3330ea96f4123c6c8200e482704bf1eda2"}, + {file = "pydantic-1.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2185a3b3d98ab4506a3f6707569802d2d92c3a7ba3a9a35683a7709ea6c2aaa2"}, + {file = "pydantic-1.10.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f582cac9d11c227c652d3ce8ee223d94eb06f4228b52a8adaafa9fa62e73d5c9"}, + {file = "pydantic-1.10.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c9e5b778b6842f135902e2d82624008c6a79710207e28e86966cd136c621bfee"}, + {file = "pydantic-1.10.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72ef3783be8cbdef6bca034606a5de3862be6b72415dc5cb1fb8ddbac110049a"}, + {file = "pydantic-1.10.5-cp310-cp310-win_amd64.whl", hash = "sha256:45edea10b75d3da43cfda12f3792833a3fa70b6eee4db1ed6aed528cef17c74e"}, + {file = "pydantic-1.10.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:63200cd8af1af2c07964546b7bc8f217e8bda9d0a2ef0ee0c797b36353914984"}, + {file = "pydantic-1.10.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:305d0376c516b0dfa1dbefeae8c21042b57b496892d721905a6ec6b79494a66d"}, + {file = "pydantic-1.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd326aff5d6c36f05735c7c9b3d5b0e933b4ca52ad0b6e4b38038d82703d35b"}, + {file = "pydantic-1.10.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bb0452d7b8516178c969d305d9630a3c9b8cf16fcf4713261c9ebd465af0d73"}, + {file = "pydantic-1.10.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9a9d9155e2a9f38b2eb9374c88f02fd4d6851ae17b65ee786a87d032f87008f8"}, + {file = "pydantic-1.10.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f836444b4c5ece128b23ec36a446c9ab7f9b0f7981d0d27e13a7c366ee163f8a"}, + {file = "pydantic-1.10.5-cp311-cp311-win_amd64.whl", hash = "sha256:8481dca324e1c7b715ce091a698b181054d22072e848b6fc7895cd86f79b4449"}, + {file = "pydantic-1.10.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:87f831e81ea0589cd18257f84386bf30154c5f4bed373b7b75e5cb0b5d53ea87"}, + {file = "pydantic-1.10.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ce1612e98c6326f10888df951a26ec1a577d8df49ddcaea87773bfbe23ba5cc"}, + {file = "pydantic-1.10.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58e41dd1e977531ac6073b11baac8c013f3cd8706a01d3dc74e86955be8b2c0c"}, + {file = "pydantic-1.10.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6a4b0aab29061262065bbdede617ef99cc5914d1bf0ddc8bcd8e3d7928d85bd6"}, + {file = "pydantic-1.10.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:36e44a4de37b8aecffa81c081dbfe42c4d2bf9f6dff34d03dce157ec65eb0f15"}, + {file = "pydantic-1.10.5-cp37-cp37m-win_amd64.whl", hash = "sha256:261f357f0aecda005934e413dfd7aa4077004a174dafe414a8325e6098a8e419"}, + {file = "pydantic-1.10.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b429f7c457aebb7fbe7cd69c418d1cd7c6fdc4d3c8697f45af78b8d5a7955760"}, + {file = "pydantic-1.10.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:663d2dd78596c5fa3eb996bc3f34b8c2a592648ad10008f98d1348be7ae212fb"}, + {file = "pydantic-1.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51782fd81f09edcf265823c3bf43ff36d00db246eca39ee765ef58dc8421a642"}, + {file = "pydantic-1.10.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c428c0f64a86661fb4873495c4fac430ec7a7cef2b8c1c28f3d1a7277f9ea5ab"}, + {file = "pydantic-1.10.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:76c930ad0746c70f0368c4596020b736ab65b473c1f9b3872310a835d852eb19"}, + {file = "pydantic-1.10.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3257bd714de9db2102b742570a56bf7978e90441193acac109b1f500290f5718"}, + {file = "pydantic-1.10.5-cp38-cp38-win_amd64.whl", hash = "sha256:f5bee6c523d13944a1fdc6f0525bc86dbbd94372f17b83fa6331aabacc8fd08e"}, + {file = "pydantic-1.10.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:532e97c35719f137ee5405bd3eeddc5c06eb91a032bc755a44e34a712420daf3"}, + {file = "pydantic-1.10.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ca9075ab3de9e48b75fa8ccb897c34ccc1519177ad8841d99f7fd74cf43be5bf"}, + {file = "pydantic-1.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd46a0e6296346c477e59a954da57beaf9c538da37b9df482e50f836e4a7d4bb"}, + {file = "pydantic-1.10.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3353072625ea2a9a6c81ad01b91e5c07fa70deb06368c71307529abf70d23325"}, + {file = "pydantic-1.10.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3f9d9b2be177c3cb6027cd67fbf323586417868c06c3c85d0d101703136e6b31"}, + {file = "pydantic-1.10.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b473d00ccd5c2061fd896ac127b7755baad233f8d996ea288af14ae09f8e0d1e"}, + {file = "pydantic-1.10.5-cp39-cp39-win_amd64.whl", hash = "sha256:5f3bc8f103b56a8c88021d481410874b1f13edf6e838da607dcb57ecff9b4594"}, + {file = "pydantic-1.10.5-py3-none-any.whl", hash = "sha256:7c5b94d598c90f2f46b3a983ffb46ab806a67099d118ae0da7ef21a2a4033b28"}, + {file = "pydantic-1.10.5.tar.gz", hash = "sha256:9e337ac83686645a46db0e825acceea8e02fca4062483f40e9ae178e8bd1103a"}, ] [package.dependencies] @@ -938,50 +654,20 @@ files = [ {file = "pyflakes-3.0.1.tar.gz", hash = "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"}, ] -[[package]] -name = "pygments" -version = "2.14.0" -description = "Pygments is a syntax highlighting package written in Python." -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, - {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, -] - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "pyinputplus" -version = "0.2.12" -description = "Provides more featureful versions of input() and raw_input()." -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "PyInputPlus-0.2.12.tar.gz", hash = "sha256:3a86b03dc6d003fec7dc627ad175cacaaf6e14a6a3b13b34c8fe6f5d01506231"}, -] - -[package.dependencies] -pysimplevalidate = ">=0.2.7" -stdiomask = ">=0.0.3" - [[package]] name = "pylint" -version = "2.17.2" +version = "2.16.2" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" files = [ - {file = "pylint-2.17.2-py3-none-any.whl", hash = "sha256:001cc91366a7df2970941d7e6bbefcbf98694e00102c1f121c531a814ddc2ea8"}, - {file = "pylint-2.17.2.tar.gz", hash = "sha256:1b647da5249e7c279118f657ca28b6aaebb299f86bf92affc632acf199f7adbb"}, + {file = "pylint-2.16.2-py3-none-any.whl", hash = "sha256:ff22dde9c2128cd257c145cfd51adeff0be7df4d80d669055f24a962b351bbe4"}, + {file = "pylint-2.16.2.tar.gz", hash = "sha256:13b2c805a404a9bf57d002cd5f054ca4d40b0b87542bdaba5e05321ae8262c84"}, ] [package.dependencies] -astroid = ">=2.15.2,<=2.17.0-dev0" +astroid = ">=2.14.2,<=2.16.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, @@ -998,27 +684,16 @@ typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\"" spelling = ["pyenchant (>=3.2,<4.0)"] testutils = ["gitpython (>3)"] -[[package]] -name = "pysimplevalidate" -version = "0.2.12" -description = "A collection of string-based validation functions, suitable for use in other Python 2 and 3 applications." -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "PySimpleValidate-0.2.12.tar.gz", hash = "sha256:645d24bdca17ad4c40658f3aa0bd5c1aa1688ba0c02ba75c5ed2cb3b8abaaa19"}, -] - [[package]] name = "pytest" -version = "7.2.2" +version = "7.2.1" description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, - {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, + {file = "pytest-7.2.1-py3-none-any.whl", hash = "sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5"}, + {file = "pytest-7.2.1.tar.gz", hash = "sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42"}, ] [package.dependencies] @@ -1052,78 +727,6 @@ pytest = ">=4.6" [package.extras] testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] -[[package]] -name = "pyyaml" -version = "6.0" -description = "YAML parser and emitter for Python" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] - -[[package]] -name = "requests" -version = "2.28.2" -description = "Python HTTP for Humans." -category = "dev" -optional = false -python-versions = ">=3.7, <4" -files = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - [[package]] name = "rfc3986" version = "1.5.0" @@ -1154,149 +757,6 @@ files = [ {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, ] -[[package]] -name = "snowballstemmer" -version = "2.2.0" -description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] - -[[package]] -name = "sphinx" -version = "5.3.0" -description = "Python documentation generator" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, - {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, -] - -[package.dependencies] -alabaster = ">=0.7,<0.8" -babel = ">=2.9" -colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.20" -imagesize = ">=1.3" -importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} -Jinja2 = ">=3.0" -packaging = ">=21.0" -Pygments = ">=2.12" -requests = ">=2.5.0" -snowballstemmer = ">=2.0" -sphinxcontrib-applehelp = "*" -sphinxcontrib-devhelp = "*" -sphinxcontrib-htmlhelp = ">=2.0.0" -sphinxcontrib-jsmath = "*" -sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = ">=1.1.5" - -[package.extras] -docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] -test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] - -[[package]] -name = "sphinxcontrib-applehelp" -version = "1.0.4" -description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, - {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, -] - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "dev" -optional = false -python-versions = ">=3.5" -files = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, -] - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-htmlhelp" -version = "2.0.1" -description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, - {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, -] - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["html5lib", "pytest"] - -[[package]] -name = "sphinxcontrib-jsmath" -version = "1.0.1" -description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "dev" -optional = false -python-versions = ">=3.5" -files = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] - -[package.extras] -test = ["flake8", "mypy", "pytest"] - -[[package]] -name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "dev" -optional = false -python-versions = ">=3.5" -files = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, -] - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "dev" -optional = false -python-versions = ">=3.5" -files = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, -] - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - [[package]] name = "starlette" version = "0.25.0" @@ -1316,17 +776,6 @@ typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\"" [package.extras] full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] -[[package]] -name = "stdiomask" -version = "0.0.6" -description = "A cross-platform Python module for entering passwords to a stdio terminal and displaying a **** mask, which getpass cannot do." -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "stdiomask-0.0.6.tar.gz", hash = "sha256:c1e47069ead9e10bda150a26f7922ca01d2adc503042a9d7acf64877a2b9a3a6"}, -] - [[package]] name = "tomli" version = "2.0.1" @@ -1341,26 +790,14 @@ files = [ [[package]] name = "tomlkit" -version = "0.11.7" +version = "0.11.6" description = "Style preserving TOML library" category = "dev" optional = false -python-versions = ">=3.7" -files = [ - {file = "tomlkit-0.11.7-py3-none-any.whl", hash = "sha256:5325463a7da2ef0c6bbfefb62a3dc883aebe679984709aee32a317907d0a8d3c"}, - {file = "tomlkit-0.11.7.tar.gz", hash = "sha256:f392ef70ad87a672f02519f99967d28a4d3047133e2d1df936511465fbb3791d"}, -] - -[[package]] -name = "types-pyyaml" -version = "6.0.12.9" -description = "Typing stubs for PyYAML" -category = "dev" -optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "types-PyYAML-6.0.12.9.tar.gz", hash = "sha256:c51b1bd6d99ddf0aa2884a7a328810ebf70a4262c292195d3f4f9a0005f9eeb6"}, - {file = "types_PyYAML-6.0.12.9-py3-none-any.whl", hash = "sha256:5aed5aa66bd2d2e158f75dda22b059570ede988559f030cf294871d3b647e3e8"}, + {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, + {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, ] [[package]] @@ -1375,23 +812,6 @@ files = [ {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, ] -[[package]] -name = "urllib3" -version = "1.26.15" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -files = [ - {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, - {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - [[package]] name = "uvicorn" version = "0.20.0" @@ -1413,87 +833,76 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", [[package]] name = "wrapt" -version = "1.15.0" +version = "1.14.1" description = "Module for decorators, wrappers and monkey patching." category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ - {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, - {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, - {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, - {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, - {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, - {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, - {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, - {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, - {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, - {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, - {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, - {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, - {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, - {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, - {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, - {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, - {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, - {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, - {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, + {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, + {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, + {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, + {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, + {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, + {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, + {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, + {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, + {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, + {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, + {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, + {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, + {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, + {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, + {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, + {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, ] [[package]] @@ -1515,4 +924,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "63ffe508692a4fb296e0420c8570b5b3701d1712c2d8803f98b1286be0c6657f" +content-hash = "58e47a5865d0a1931444e4e5d91cc38a15cc97449a4508c7bd6682e3ff14dd71" diff --git a/pyproject.toml b/pyproject.toml index 6df9980..e0eb503 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,40 +8,21 @@ readme = "README.md" packages = [{include = "vtp", from = "src"}] [tool.poetry.dependencies] -deepdiff = "^6.3.0" +python = "^3.9" fastapi = "^0.92.0" httpx = "^0.23.3" -importlib-resources = "^5.12.0" -networkx = "^2.8.6" -pyinputplus = "^0.2.12" -pyyaml = "^6.0" -python = "^3.9" uvicorn = "^0.20.0" +importlib-resources = "^5.12.0" [tool.poetry.group.dev.dependencies] black = "^23.1.0" flake8 = "^6.0.0" isort = "^5.12.0" -mypy = "^1.1.0" +mypy = "^1.0.0" pylint = "^2.16.2" pytest = "^7.2.1" pytest-cov = "^4.0.0" -sphinx = "^5.3.0" -types-pyyaml = "^6.0.12.8" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" - -[tool.poetry.scripts] -accept-ballot = "vtp.cli.accept_ballot:main" -cast-ballot = "vtp.cli.cast_ballot:main" -create-blank-ballot = "vtp.cli.create_blank_ballot:main" -generate-all-blank-ballots = "vtp.cli.generate_all_blank_ballots:main" -merge-contests = "vtp.cli.merge_contests:main" -run-mock-election = "vtp.cli.run_mock_election:main" -setup-vtp-demo = "vtp.cli.setup_vtp_demo:main" -show-contest = "vtp.cli.show_contest:main" -tally-contests = "vtp.cli.tally_contests:main" -verify-ballot-receipt = "vtp.cli.verify_ballot_receipt:main" -vote = "vtp.cli.vote:main" diff --git a/src/vtp/cli b/src/vtp/cli deleted file mode 120000 index 97f2bd7..0000000 --- a/src/vtp/cli +++ /dev/null @@ -1 +0,0 @@ -../../../VoteTrackerPlus/src/vtp/cli \ No newline at end of file diff --git a/src/vtp/core b/src/vtp/core deleted file mode 120000 index d251840..0000000 --- a/src/vtp/core +++ /dev/null @@ -1 +0,0 @@ -../../../VoteTrackerPlus/src/vtp/core \ No newline at end of file diff --git a/src/vtp/ops b/src/vtp/ops deleted file mode 120000 index b2f2aa8..0000000 --- a/src/vtp/ops +++ /dev/null @@ -1 +0,0 @@ -../../../VoteTrackerPlus/src/vtp/ops \ No newline at end of file From dac39ee4633299e7f9a87dcc71f4ce1889c3982b Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Thu, 6 Apr 2023 09:05:26 -0400 Subject: [PATCH 05/61] after backing out env hack, redoing poetry install --- poetry.lock | 477 ++++++++++++++++++++++++----------------------- requirements.txt | 239 +----------------------- 2 files changed, 245 insertions(+), 471 deletions(-) diff --git a/poetry.lock b/poetry.lock index b5689d6..1098667 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. [[package]] name = "anyio" @@ -23,14 +23,14 @@ trio = ["trio (>=0.16,<0.22)"] [[package]] name = "astroid" -version = "2.14.2" +version = "2.15.2" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false python-versions = ">=3.7.2" files = [ - {file = "astroid-2.14.2-py3-none-any.whl", hash = "sha256:0e0e3709d64fbffd3037e4ff403580550f14471fd3eaae9fa11cc9a5c7901153"}, - {file = "astroid-2.14.2.tar.gz", hash = "sha256:a3cf9f02c53dd259144a7e8f3ccd75d67c9a8c716ef183e0c1f291bc5d7bb3cf"}, + {file = "astroid-2.15.2-py3-none-any.whl", hash = "sha256:dea89d9f99f491c66ac9c04ebddf91e4acf8bd711722175fe6245c0725cc19bb"}, + {file = "astroid-2.15.2.tar.gz", hash = "sha256:6e61b85c891ec53b07471aec5878f4ac6446a41e590ede0f2ce095f39f7d49dd"}, ] [package.dependencies] @@ -62,37 +62,37 @@ tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy [[package]] name = "black" -version = "23.1.0" +version = "23.3.0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "black-23.1.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:b6a92a41ee34b883b359998f0c8e6eb8e99803aa8bf3123bf2b2e6fec505a221"}, - {file = "black-23.1.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:57c18c5165c1dbe291d5306e53fb3988122890e57bd9b3dcb75f967f13411a26"}, - {file = "black-23.1.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:9880d7d419bb7e709b37e28deb5e68a49227713b623c72b2b931028ea65f619b"}, - {file = "black-23.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6663f91b6feca5d06f2ccd49a10f254f9298cc1f7f49c46e498a0771b507104"}, - {file = "black-23.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9afd3f493666a0cd8f8df9a0200c6359ac53940cbde049dcb1a7eb6ee2dd7074"}, - {file = "black-23.1.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:bfffba28dc52a58f04492181392ee380e95262af14ee01d4bc7bb1b1c6ca8d27"}, - {file = "black-23.1.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c1c476bc7b7d021321e7d93dc2cbd78ce103b84d5a4cf97ed535fbc0d6660648"}, - {file = "black-23.1.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:382998821f58e5c8238d3166c492139573325287820963d2f7de4d518bd76958"}, - {file = "black-23.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bf649fda611c8550ca9d7592b69f0637218c2369b7744694c5e4902873b2f3a"}, - {file = "black-23.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:121ca7f10b4a01fd99951234abdbd97728e1240be89fde18480ffac16503d481"}, - {file = "black-23.1.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:a8471939da5e824b891b25751955be52ee7f8a30a916d570a5ba8e0f2eb2ecad"}, - {file = "black-23.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8178318cb74f98bc571eef19068f6ab5613b3e59d4f47771582f04e175570ed8"}, - {file = "black-23.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a436e7881d33acaf2536c46a454bb964a50eff59b21b51c6ccf5a40601fbef24"}, - {file = "black-23.1.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:a59db0a2094d2259c554676403fa2fac3473ccf1354c1c63eccf7ae65aac8ab6"}, - {file = "black-23.1.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:0052dba51dec07ed029ed61b18183942043e00008ec65d5028814afaab9a22fd"}, - {file = "black-23.1.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:49f7b39e30f326a34b5c9a4213213a6b221d7ae9d58ec70df1c4a307cf2a1580"}, - {file = "black-23.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:162e37d49e93bd6eb6f1afc3e17a3d23a823042530c37c3c42eeeaf026f38468"}, - {file = "black-23.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b70eb40a78dfac24842458476135f9b99ab952dd3f2dab738c1881a9b38b753"}, - {file = "black-23.1.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:a29650759a6a0944e7cca036674655c2f0f63806ddecc45ed40b7b8aa314b651"}, - {file = "black-23.1.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:bb460c8561c8c1bec7824ecbc3ce085eb50005883a6203dcfb0122e95797ee06"}, - {file = "black-23.1.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c91dfc2c2a4e50df0026f88d2215e166616e0c80e86004d0003ece0488db2739"}, - {file = "black-23.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a951cc83ab535d248c89f300eccbd625e80ab880fbcfb5ac8afb5f01a258ac9"}, - {file = "black-23.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0680d4380db3719ebcfb2613f34e86c8e6d15ffeabcf8ec59355c5e7b85bb555"}, - {file = "black-23.1.0-py3-none-any.whl", hash = "sha256:7a0f701d314cfa0896b9001df70a530eb2472babb76086344e688829efd97d32"}, - {file = "black-23.1.0.tar.gz", hash = "sha256:b0bd97bea8903f5a2ba7219257a44e3f1f9d00073d6cc1add68f0beec69692ac"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, + {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, + {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, + {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, + {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, + {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, + {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, + {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, + {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, + {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, + {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, + {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, + {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, + {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, ] [package.dependencies] @@ -151,63 +151,63 @@ files = [ [[package]] name = "coverage" -version = "7.1.0" +version = "7.2.2" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "coverage-7.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3b946bbcd5a8231383450b195cfb58cb01cbe7f8949f5758566b881df4b33baf"}, - {file = "coverage-7.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec8e767f13be637d056f7e07e61d089e555f719b387a7070154ad80a0ff31801"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a5a5879a939cb84959d86869132b00176197ca561c664fc21478c1eee60d75"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b643cb30821e7570c0aaf54feaf0bfb630b79059f85741843e9dc23f33aaca2c"}, - {file = "coverage-7.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32df215215f3af2c1617a55dbdfb403b772d463d54d219985ac7cd3bf124cada"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:33d1ae9d4079e05ac4cc1ef9e20c648f5afabf1a92adfaf2ccf509c50b85717f"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:29571503c37f2ef2138a306d23e7270687c0efb9cab4bd8038d609b5c2393a3a"}, - {file = "coverage-7.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:63ffd21aa133ff48c4dff7adcc46b7ec8b565491bfc371212122dd999812ea1c"}, - {file = "coverage-7.1.0-cp310-cp310-win32.whl", hash = "sha256:4b14d5e09c656de5038a3f9bfe5228f53439282abcab87317c9f7f1acb280352"}, - {file = "coverage-7.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:8361be1c2c073919500b6601220a6f2f98ea0b6d2fec5014c1d9cfa23dd07038"}, - {file = "coverage-7.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:da9b41d4539eefd408c46725fb76ecba3a50a3367cafb7dea5f250d0653c1040"}, - {file = "coverage-7.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5b15ed7644ae4bee0ecf74fee95808dcc34ba6ace87e8dfbf5cb0dc20eab45a"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d12d076582507ea460ea2a89a8c85cb558f83406c8a41dd641d7be9a32e1274f"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2617759031dae1bf183c16cef8fcfb3de7617f394c813fa5e8e46e9b82d4222"}, - {file = "coverage-7.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4e4881fa9e9667afcc742f0c244d9364d197490fbc91d12ac3b5de0bf2df146"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9d58885215094ab4a86a6aef044e42994a2bd76a446dc59b352622655ba6621b"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ffeeb38ee4a80a30a6877c5c4c359e5498eec095878f1581453202bfacc8fbc2"}, - {file = "coverage-7.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3baf5f126f30781b5e93dbefcc8271cb2491647f8283f20ac54d12161dff080e"}, - {file = "coverage-7.1.0-cp311-cp311-win32.whl", hash = "sha256:ded59300d6330be27bc6cf0b74b89ada58069ced87c48eaf9344e5e84b0072f7"}, - {file = "coverage-7.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:6a43c7823cd7427b4ed763aa7fb63901ca8288591323b58c9cd6ec31ad910f3c"}, - {file = "coverage-7.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7a726d742816cb3a8973c8c9a97539c734b3a309345236cd533c4883dda05b8d"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc7c85a150501286f8b56bd8ed3aa4093f4b88fb68c0843d21ff9656f0009d6a"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5b4198d85a3755d27e64c52f8c95d6333119e49fd001ae5798dac872c95e0f8"}, - {file = "coverage-7.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb726cb861c3117a553f940372a495fe1078249ff5f8a5478c0576c7be12050"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:51b236e764840a6df0661b67e50697aaa0e7d4124ca95e5058fa3d7cbc240b7c"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7ee5c9bb51695f80878faaa5598040dd6c9e172ddcf490382e8aedb8ec3fec8d"}, - {file = "coverage-7.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c31b75ae466c053a98bf26843563b3b3517b8f37da4d47b1c582fdc703112bc3"}, - {file = "coverage-7.1.0-cp37-cp37m-win32.whl", hash = "sha256:3b155caf3760408d1cb903b21e6a97ad4e2bdad43cbc265e3ce0afb8e0057e73"}, - {file = "coverage-7.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2a60d6513781e87047c3e630b33b4d1e89f39836dac6e069ffee28c4786715f5"}, - {file = "coverage-7.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2cba5c6db29ce991029b5e4ac51eb36774458f0a3b8d3137241b32d1bb91f06"}, - {file = "coverage-7.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:beeb129cacea34490ffd4d6153af70509aa3cda20fdda2ea1a2be870dfec8d52"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c45948f613d5d18c9ec5eaa203ce06a653334cf1bd47c783a12d0dd4fd9c851"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef382417db92ba23dfb5864a3fc9be27ea4894e86620d342a116b243ade5d35d"}, - {file = "coverage-7.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c7c0d0827e853315c9bbd43c1162c006dd808dbbe297db7ae66cd17b07830f0"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e5cdbb5cafcedea04924568d990e20ce7f1945a1dd54b560f879ee2d57226912"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9817733f0d3ea91bea80de0f79ef971ae94f81ca52f9b66500c6a2fea8e4b4f8"}, - {file = "coverage-7.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:218fe982371ac7387304153ecd51205f14e9d731b34fb0568181abaf7b443ba0"}, - {file = "coverage-7.1.0-cp38-cp38-win32.whl", hash = "sha256:04481245ef966fbd24ae9b9e537ce899ae584d521dfbe78f89cad003c38ca2ab"}, - {file = "coverage-7.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8ae125d1134bf236acba8b83e74c603d1b30e207266121e76484562bc816344c"}, - {file = "coverage-7.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2bf1d5f2084c3932b56b962a683074a3692bce7cabd3aa023c987a2a8e7612f6"}, - {file = "coverage-7.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:98b85dd86514d889a2e3dd22ab3c18c9d0019e696478391d86708b805f4ea0fa"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38da2db80cc505a611938d8624801158e409928b136c8916cd2e203970dde4dc"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3164d31078fa9efe406e198aecd2a02d32a62fecbdef74f76dad6a46c7e48311"}, - {file = "coverage-7.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db61a79c07331e88b9a9974815c075fbd812bc9dbc4dc44b366b5368a2936063"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ccb092c9ede70b2517a57382a601619d20981f56f440eae7e4d7eaafd1d1d09"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:33ff26d0f6cc3ca8de13d14fde1ff8efe1456b53e3f0273e63cc8b3c84a063d8"}, - {file = "coverage-7.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d47dd659a4ee952e90dc56c97d78132573dc5c7b09d61b416a9deef4ebe01a0c"}, - {file = "coverage-7.1.0-cp39-cp39-win32.whl", hash = "sha256:d248cd4a92065a4d4543b8331660121b31c4148dd00a691bfb7a5cdc7483cfa4"}, - {file = "coverage-7.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7ed681b0f8e8bcbbffa58ba26fcf5dbc8f79e7997595bf071ed5430d8c08d6f3"}, - {file = "coverage-7.1.0-pp37.pp38.pp39-none-any.whl", hash = "sha256:755e89e32376c850f826c425ece2c35a4fc266c081490eb0a841e7c1cb0d3bda"}, - {file = "coverage-7.1.0.tar.gz", hash = "sha256:10188fe543560ec4874f974b5305cd1a8bdcfa885ee00ea3a03733464c4ca265"}, + {file = "coverage-7.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c90e73bdecb7b0d1cea65a08cb41e9d672ac6d7995603d6465ed4914b98b9ad7"}, + {file = "coverage-7.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e2926b8abedf750c2ecf5035c07515770944acf02e1c46ab08f6348d24c5f94d"}, + {file = "coverage-7.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57b77b9099f172804e695a40ebaa374f79e4fb8b92f3e167f66facbf92e8e7f5"}, + {file = "coverage-7.2.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:efe1c0adad110bf0ad7fb59f833880e489a61e39d699d37249bdf42f80590169"}, + {file = "coverage-7.2.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2199988e0bc8325d941b209f4fd1c6fa007024b1442c5576f1a32ca2e48941e6"}, + {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:81f63e0fb74effd5be736cfe07d710307cc0a3ccb8f4741f7f053c057615a137"}, + {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:186e0fc9cf497365036d51d4d2ab76113fb74f729bd25da0975daab2e107fd90"}, + {file = "coverage-7.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:420f94a35e3e00a2b43ad5740f935358e24478354ce41c99407cddd283be00d2"}, + {file = "coverage-7.2.2-cp310-cp310-win32.whl", hash = "sha256:38004671848b5745bb05d4d621526fca30cee164db42a1f185615f39dc997292"}, + {file = "coverage-7.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:0ce383d5f56d0729d2dd40e53fe3afeb8f2237244b0975e1427bfb2cf0d32bab"}, + {file = "coverage-7.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3eb55b7b26389dd4f8ae911ba9bc8c027411163839dea4c8b8be54c4ee9ae10b"}, + {file = "coverage-7.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2b96123a453a2d7f3995ddb9f28d01fd112319a7a4d5ca99796a7ff43f02af5"}, + {file = "coverage-7.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:299bc75cb2a41e6741b5e470b8c9fb78d931edbd0cd009c58e5c84de57c06731"}, + {file = "coverage-7.2.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e1df45c23d4230e3d56d04414f9057eba501f78db60d4eeecfcb940501b08fd"}, + {file = "coverage-7.2.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:006ed5582e9cbc8115d2e22d6d2144a0725db542f654d9d4fda86793832f873d"}, + {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d683d230b5774816e7d784d7ed8444f2a40e7a450e5720d58af593cb0b94a212"}, + {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8efb48fa743d1c1a65ee8787b5b552681610f06c40a40b7ef94a5b517d885c54"}, + {file = "coverage-7.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c752d5264053a7cf2fe81c9e14f8a4fb261370a7bb344c2a011836a96fb3f57"}, + {file = "coverage-7.2.2-cp311-cp311-win32.whl", hash = "sha256:55272f33da9a5d7cccd3774aeca7a01e500a614eaea2a77091e9be000ecd401d"}, + {file = "coverage-7.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:92ebc1619650409da324d001b3a36f14f63644c7f0a588e331f3b0f67491f512"}, + {file = "coverage-7.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5afdad4cc4cc199fdf3e18088812edcf8f4c5a3c8e6cb69127513ad4cb7471a9"}, + {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0484d9dd1e6f481b24070c87561c8d7151bdd8b044c93ac99faafd01f695c78e"}, + {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d530191aa9c66ab4f190be8ac8cc7cfd8f4f3217da379606f3dd4e3d83feba69"}, + {file = "coverage-7.2.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ac0f522c3b6109c4b764ffec71bf04ebc0523e926ca7cbe6c5ac88f84faced0"}, + {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ba279aae162b20444881fc3ed4e4f934c1cf8620f3dab3b531480cf602c76b7f"}, + {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:53d0fd4c17175aded9c633e319360d41a1f3c6e352ba94edcb0fa5167e2bad67"}, + {file = "coverage-7.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c99cb7c26a3039a8a4ee3ca1efdde471e61b4837108847fb7d5be7789ed8fd9"}, + {file = "coverage-7.2.2-cp37-cp37m-win32.whl", hash = "sha256:5cc0783844c84af2522e3a99b9b761a979a3ef10fb87fc4048d1ee174e18a7d8"}, + {file = "coverage-7.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:817295f06eacdc8623dc4df7d8b49cea65925030d4e1e2a7c7218380c0072c25"}, + {file = "coverage-7.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6146910231ece63facfc5984234ad1b06a36cecc9fd0c028e59ac7c9b18c38c6"}, + {file = "coverage-7.2.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:387fb46cb8e53ba7304d80aadca5dca84a2fbf6fe3faf6951d8cf2d46485d1e5"}, + {file = "coverage-7.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:046936ab032a2810dcaafd39cc4ef6dd295df1a7cbead08fe996d4765fca9fe4"}, + {file = "coverage-7.2.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e627dee428a176ffb13697a2c4318d3f60b2ccdde3acdc9b3f304206ec130ccd"}, + {file = "coverage-7.2.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fa54fb483decc45f94011898727802309a109d89446a3c76387d016057d2c84"}, + {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3668291b50b69a0c1ef9f462c7df2c235da3c4073f49543b01e7eb1dee7dd540"}, + {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7c20b731211261dc9739bbe080c579a1835b0c2d9b274e5fcd903c3a7821cf88"}, + {file = "coverage-7.2.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5764e1f7471cb8f64b8cda0554f3d4c4085ae4b417bfeab236799863703e5de2"}, + {file = "coverage-7.2.2-cp38-cp38-win32.whl", hash = "sha256:4f01911c010122f49a3e9bdc730eccc66f9b72bd410a3a9d3cb8448bb50d65d3"}, + {file = "coverage-7.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:c448b5c9e3df5448a362208b8d4b9ed85305528313fca1b479f14f9fe0d873b8"}, + {file = "coverage-7.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfe7085783cda55e53510482fa7b5efc761fad1abe4d653b32710eb548ebdd2d"}, + {file = "coverage-7.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9d22e94e6dc86de981b1b684b342bec5e331401599ce652900ec59db52940005"}, + {file = "coverage-7.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:507e4720791977934bba016101579b8c500fb21c5fa3cd4cf256477331ddd988"}, + {file = "coverage-7.2.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc4803779f0e4b06a2361f666e76f5c2e3715e8e379889d02251ec911befd149"}, + {file = "coverage-7.2.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db8c2c5ace167fd25ab5dd732714c51d4633f58bac21fb0ff63b0349f62755a8"}, + {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4f68ee32d7c4164f1e2c8797535a6d0a3733355f5861e0f667e37df2d4b07140"}, + {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d52f0a114b6a58305b11a5cdecd42b2e7f1ec77eb20e2b33969d702feafdd016"}, + {file = "coverage-7.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:797aad79e7b6182cb49c08cc5d2f7aa7b2128133b0926060d0a8889ac43843be"}, + {file = "coverage-7.2.2-cp39-cp39-win32.whl", hash = "sha256:db45eec1dfccdadb179b0f9ca616872c6f700d23945ecc8f21bb105d74b1c5fc"}, + {file = "coverage-7.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:8dbe2647bf58d2c5a6c5bcc685f23b5f371909a5624e9f5cd51436d6a9f6c6ef"}, + {file = "coverage-7.2.2-pp37.pp38.pp39-none-any.whl", hash = "sha256:872d6ce1f5be73f05bea4df498c140b9e7ee5418bfa2cc8204e7f9b817caa968"}, + {file = "coverage-7.2.2.tar.gz", hash = "sha256:36dd42da34fe94ed98c39887b86db9d06777b1c8f860520e21126a75507024f2"}, ] [package.dependencies] @@ -233,14 +233,14 @@ graph = ["objgraph (>=1.7.2)"] [[package]] name = "exceptiongroup" -version = "1.1.0" +version = "1.1.1" description = "Backport of PEP 654 (exception groups)" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, - {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, + {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, + {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, ] [package.extras] @@ -464,42 +464,42 @@ files = [ [[package]] name = "mypy" -version = "1.0.1" +version = "1.1.1" description = "Optional static typing for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "mypy-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a"}, - {file = "mypy-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf"}, - {file = "mypy-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0"}, - {file = "mypy-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b"}, - {file = "mypy-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4"}, - {file = "mypy-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262"}, - {file = "mypy-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8"}, - {file = "mypy-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8"}, - {file = "mypy-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65"}, - {file = "mypy-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994"}, - {file = "mypy-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64f48c6176e243ad015e995de05af7f22bbe370dbb5b32bd6988438ec873919"}, - {file = "mypy-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fdd63e4f50e3538617887e9aee91855368d9fc1dea30da743837b0df7373bc4"}, - {file = "mypy-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbeb24514c4acbc78d205f85dd0e800f34062efcc1f4a4857c57e4b4b8712bff"}, - {file = "mypy-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a2948c40a7dd46c1c33765718936669dc1f628f134013b02ff5ac6c7ef6942bf"}, - {file = "mypy-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bc8d6bd3b274dd3846597855d96d38d947aedba18776aa998a8d46fabdaed76"}, - {file = "mypy-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:17455cda53eeee0a4adb6371a21dd3dbf465897de82843751cf822605d152c8c"}, - {file = "mypy-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e831662208055b006eef68392a768ff83596035ffd6d846786578ba1714ba8f6"}, - {file = "mypy-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e60d0b09f62ae97a94605c3f73fd952395286cf3e3b9e7b97f60b01ddfbbda88"}, - {file = "mypy-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:0af4f0e20706aadf4e6f8f8dc5ab739089146b83fd53cb4a7e0e850ef3de0bb6"}, - {file = "mypy-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24189f23dc66f83b839bd1cce2dfc356020dfc9a8bae03978477b15be61b062e"}, - {file = "mypy-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93a85495fb13dc484251b4c1fd7a5ac370cd0d812bbfc3b39c1bafefe95275d5"}, - {file = "mypy-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f546ac34093c6ce33f6278f7c88f0f147a4849386d3bf3ae193702f4fe31407"}, - {file = "mypy-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6c2ccb7af7154673c591189c3687b013122c5a891bb5651eca3db8e6c6c55bd"}, - {file = "mypy-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:15b5a824b58c7c822c51bc66308e759243c32631896743f030daf449fe3677f3"}, - {file = "mypy-1.0.1-py3-none-any.whl", hash = "sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4"}, - {file = "mypy-1.0.1.tar.gz", hash = "sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d"}, + {file = "mypy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39c7119335be05630611ee798cc982623b9e8f0cff04a0b48dfc26100e0b97af"}, + {file = "mypy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:61bf08362e93b6b12fad3eab68c4ea903a077b87c90ac06c11e3d7a09b56b9c1"}, + {file = "mypy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbb19c9f662e41e474e0cff502b7064a7edc6764f5262b6cd91d698163196799"}, + {file = "mypy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:315ac73cc1cce4771c27d426b7ea558fb4e2836f89cb0296cbe056894e3a1f78"}, + {file = "mypy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5cb14ff9919b7df3538590fc4d4c49a0f84392237cbf5f7a816b4161c061829e"}, + {file = "mypy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:26cdd6a22b9b40b2fd71881a8a4f34b4d7914c679f154f43385ca878a8297389"}, + {file = "mypy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b5f81b40d94c785f288948c16e1f2da37203c6006546c5d947aab6f90aefef2"}, + {file = "mypy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21b437be1c02712a605591e1ed1d858aba681757a1e55fe678a15c2244cd68a5"}, + {file = "mypy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d809f88734f44a0d44959d795b1e6f64b2bbe0ea4d9cc4776aa588bb4229fc1c"}, + {file = "mypy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:a380c041db500e1410bb5b16b3c1c35e61e773a5c3517926b81dfdab7582be54"}, + {file = "mypy-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b7c7b708fe9a871a96626d61912e3f4ddd365bf7f39128362bc50cbd74a634d5"}, + {file = "mypy-1.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1c10fa12df1232c936830839e2e935d090fc9ee315744ac33b8a32216b93707"}, + {file = "mypy-1.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0a28a76785bf57655a8ea5eb0540a15b0e781c807b5aa798bd463779988fa1d5"}, + {file = "mypy-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ef6a01e563ec6a4940784c574d33f6ac1943864634517984471642908b30b6f7"}, + {file = "mypy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d64c28e03ce40d5303450f547e07418c64c241669ab20610f273c9e6290b4b0b"}, + {file = "mypy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64cc3afb3e9e71a79d06e3ed24bb508a6d66f782aff7e56f628bf35ba2e0ba51"}, + {file = "mypy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce61663faf7a8e5ec6f456857bfbcec2901fbdb3ad958b778403f63b9e606a1b"}, + {file = "mypy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2b0c373d071593deefbcdd87ec8db91ea13bd8f1328d44947e88beae21e8d5e9"}, + {file = "mypy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:2888ce4fe5aae5a673386fa232473014056967f3904f5abfcf6367b5af1f612a"}, + {file = "mypy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:19ba15f9627a5723e522d007fe708007bae52b93faab00f95d72f03e1afa9598"}, + {file = "mypy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:59bbd71e5c58eed2e992ce6523180e03c221dcd92b52f0e792f291d67b15a71c"}, + {file = "mypy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9401e33814cec6aec8c03a9548e9385e0e228fc1b8b0a37b9ea21038e64cdd8a"}, + {file = "mypy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4b398d8b1f4fba0e3c6463e02f8ad3346f71956b92287af22c9b12c3ec965a9f"}, + {file = "mypy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:69b35d1dcb5707382810765ed34da9db47e7f95b3528334a3c999b0c90fe523f"}, + {file = "mypy-1.1.1-py3-none-any.whl", hash = "sha256:4e4e8b362cdf99ba00c2b218036002bdcdf1e0de085cdb296a49df03fb31dfc4"}, + {file = "mypy-1.1.1.tar.gz", hash = "sha256:ae9ceae0f5b9059f33dbc62dea087e942c0ccab4b7a003719cb70f9b8abfa32f"}, ] [package.dependencies] -mypy-extensions = ">=0.4.3" +mypy-extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = ">=3.10" @@ -535,31 +535,31 @@ files = [ [[package]] name = "pathspec" -version = "0.11.0" +version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, - {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, ] [[package]] name = "platformdirs" -version = "3.0.0" +version = "3.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.0.0-py3-none-any.whl", hash = "sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567"}, - {file = "platformdirs-3.0.0.tar.gz", hash = "sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9"}, + {file = "platformdirs-3.2.0-py3-none-any.whl", hash = "sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e"}, + {file = "platformdirs-3.2.0.tar.gz", hash = "sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08"}, ] [package.extras] docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" @@ -591,48 +591,48 @@ files = [ [[package]] name = "pydantic" -version = "1.10.5" +version = "1.10.7" description = "Data validation and settings management using python type hints" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5920824fe1e21cbb3e38cf0f3dd24857c8959801d1031ce1fac1d50857a03bfb"}, - {file = "pydantic-1.10.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3bb99cf9655b377db1a9e47fa4479e3330ea96f4123c6c8200e482704bf1eda2"}, - {file = "pydantic-1.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2185a3b3d98ab4506a3f6707569802d2d92c3a7ba3a9a35683a7709ea6c2aaa2"}, - {file = "pydantic-1.10.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f582cac9d11c227c652d3ce8ee223d94eb06f4228b52a8adaafa9fa62e73d5c9"}, - {file = "pydantic-1.10.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c9e5b778b6842f135902e2d82624008c6a79710207e28e86966cd136c621bfee"}, - {file = "pydantic-1.10.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72ef3783be8cbdef6bca034606a5de3862be6b72415dc5cb1fb8ddbac110049a"}, - {file = "pydantic-1.10.5-cp310-cp310-win_amd64.whl", hash = "sha256:45edea10b75d3da43cfda12f3792833a3fa70b6eee4db1ed6aed528cef17c74e"}, - {file = "pydantic-1.10.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:63200cd8af1af2c07964546b7bc8f217e8bda9d0a2ef0ee0c797b36353914984"}, - {file = "pydantic-1.10.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:305d0376c516b0dfa1dbefeae8c21042b57b496892d721905a6ec6b79494a66d"}, - {file = "pydantic-1.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd326aff5d6c36f05735c7c9b3d5b0e933b4ca52ad0b6e4b38038d82703d35b"}, - {file = "pydantic-1.10.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bb0452d7b8516178c969d305d9630a3c9b8cf16fcf4713261c9ebd465af0d73"}, - {file = "pydantic-1.10.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9a9d9155e2a9f38b2eb9374c88f02fd4d6851ae17b65ee786a87d032f87008f8"}, - {file = "pydantic-1.10.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f836444b4c5ece128b23ec36a446c9ab7f9b0f7981d0d27e13a7c366ee163f8a"}, - {file = "pydantic-1.10.5-cp311-cp311-win_amd64.whl", hash = "sha256:8481dca324e1c7b715ce091a698b181054d22072e848b6fc7895cd86f79b4449"}, - {file = "pydantic-1.10.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:87f831e81ea0589cd18257f84386bf30154c5f4bed373b7b75e5cb0b5d53ea87"}, - {file = "pydantic-1.10.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ce1612e98c6326f10888df951a26ec1a577d8df49ddcaea87773bfbe23ba5cc"}, - {file = "pydantic-1.10.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58e41dd1e977531ac6073b11baac8c013f3cd8706a01d3dc74e86955be8b2c0c"}, - {file = "pydantic-1.10.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6a4b0aab29061262065bbdede617ef99cc5914d1bf0ddc8bcd8e3d7928d85bd6"}, - {file = "pydantic-1.10.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:36e44a4de37b8aecffa81c081dbfe42c4d2bf9f6dff34d03dce157ec65eb0f15"}, - {file = "pydantic-1.10.5-cp37-cp37m-win_amd64.whl", hash = "sha256:261f357f0aecda005934e413dfd7aa4077004a174dafe414a8325e6098a8e419"}, - {file = "pydantic-1.10.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b429f7c457aebb7fbe7cd69c418d1cd7c6fdc4d3c8697f45af78b8d5a7955760"}, - {file = "pydantic-1.10.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:663d2dd78596c5fa3eb996bc3f34b8c2a592648ad10008f98d1348be7ae212fb"}, - {file = "pydantic-1.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51782fd81f09edcf265823c3bf43ff36d00db246eca39ee765ef58dc8421a642"}, - {file = "pydantic-1.10.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c428c0f64a86661fb4873495c4fac430ec7a7cef2b8c1c28f3d1a7277f9ea5ab"}, - {file = "pydantic-1.10.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:76c930ad0746c70f0368c4596020b736ab65b473c1f9b3872310a835d852eb19"}, - {file = "pydantic-1.10.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3257bd714de9db2102b742570a56bf7978e90441193acac109b1f500290f5718"}, - {file = "pydantic-1.10.5-cp38-cp38-win_amd64.whl", hash = "sha256:f5bee6c523d13944a1fdc6f0525bc86dbbd94372f17b83fa6331aabacc8fd08e"}, - {file = "pydantic-1.10.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:532e97c35719f137ee5405bd3eeddc5c06eb91a032bc755a44e34a712420daf3"}, - {file = "pydantic-1.10.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ca9075ab3de9e48b75fa8ccb897c34ccc1519177ad8841d99f7fd74cf43be5bf"}, - {file = "pydantic-1.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd46a0e6296346c477e59a954da57beaf9c538da37b9df482e50f836e4a7d4bb"}, - {file = "pydantic-1.10.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3353072625ea2a9a6c81ad01b91e5c07fa70deb06368c71307529abf70d23325"}, - {file = "pydantic-1.10.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3f9d9b2be177c3cb6027cd67fbf323586417868c06c3c85d0d101703136e6b31"}, - {file = "pydantic-1.10.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b473d00ccd5c2061fd896ac127b7755baad233f8d996ea288af14ae09f8e0d1e"}, - {file = "pydantic-1.10.5-cp39-cp39-win_amd64.whl", hash = "sha256:5f3bc8f103b56a8c88021d481410874b1f13edf6e838da607dcb57ecff9b4594"}, - {file = "pydantic-1.10.5-py3-none-any.whl", hash = "sha256:7c5b94d598c90f2f46b3a983ffb46ab806a67099d118ae0da7ef21a2a4033b28"}, - {file = "pydantic-1.10.5.tar.gz", hash = "sha256:9e337ac83686645a46db0e825acceea8e02fca4062483f40e9ae178e8bd1103a"}, + {file = "pydantic-1.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e79e999e539872e903767c417c897e729e015872040e56b96e67968c3b918b2d"}, + {file = "pydantic-1.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:01aea3a42c13f2602b7ecbbea484a98169fb568ebd9e247593ea05f01b884b2e"}, + {file = "pydantic-1.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:516f1ed9bc2406a0467dd777afc636c7091d71f214d5e413d64fef45174cfc7a"}, + {file = "pydantic-1.10.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae150a63564929c675d7f2303008d88426a0add46efd76c3fc797cd71cb1b46f"}, + {file = "pydantic-1.10.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ecbbc51391248116c0a055899e6c3e7ffbb11fb5e2a4cd6f2d0b93272118a209"}, + {file = "pydantic-1.10.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f4a2b50e2b03d5776e7f21af73e2070e1b5c0d0df255a827e7c632962f8315af"}, + {file = "pydantic-1.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:a7cd2251439988b413cb0a985c4ed82b6c6aac382dbaff53ae03c4b23a70e80a"}, + {file = "pydantic-1.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:68792151e174a4aa9e9fc1b4e653e65a354a2fa0fed169f7b3d09902ad2cb6f1"}, + {file = "pydantic-1.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe2507b8ef209da71b6fb5f4e597b50c5a34b78d7e857c4f8f3115effaef5fe"}, + {file = "pydantic-1.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10a86d8c8db68086f1e30a530f7d5f83eb0685e632e411dbbcf2d5c0150e8dcd"}, + {file = "pydantic-1.10.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75ae19d2a3dbb146b6f324031c24f8a3f52ff5d6a9f22f0683694b3afcb16fb"}, + {file = "pydantic-1.10.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:464855a7ff7f2cc2cf537ecc421291b9132aa9c79aef44e917ad711b4a93163b"}, + {file = "pydantic-1.10.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:193924c563fae6ddcb71d3f06fa153866423ac1b793a47936656e806b64e24ca"}, + {file = "pydantic-1.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:b4a849d10f211389502059c33332e91327bc154acc1845f375a99eca3afa802d"}, + {file = "pydantic-1.10.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cc1dde4e50a5fc1336ee0581c1612215bc64ed6d28d2c7c6f25d2fe3e7c3e918"}, + {file = "pydantic-1.10.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0cfe895a504c060e5d36b287ee696e2fdad02d89e0d895f83037245218a87fe"}, + {file = "pydantic-1.10.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:670bb4683ad1e48b0ecb06f0cfe2178dcf74ff27921cdf1606e527d2617a81ee"}, + {file = "pydantic-1.10.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:950ce33857841f9a337ce07ddf46bc84e1c4946d2a3bba18f8280297157a3fd1"}, + {file = "pydantic-1.10.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c15582f9055fbc1bfe50266a19771bbbef33dd28c45e78afbe1996fd70966c2a"}, + {file = "pydantic-1.10.7-cp37-cp37m-win_amd64.whl", hash = "sha256:82dffb306dd20bd5268fd6379bc4bfe75242a9c2b79fec58e1041fbbdb1f7914"}, + {file = "pydantic-1.10.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c7f51861d73e8b9ddcb9916ae7ac39fb52761d9ea0df41128e81e2ba42886cd"}, + {file = "pydantic-1.10.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6434b49c0b03a51021ade5c4daa7d70c98f7a79e95b551201fff682fc1661245"}, + {file = "pydantic-1.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64d34ab766fa056df49013bb6e79921a0265204c071984e75a09cbceacbbdd5d"}, + {file = "pydantic-1.10.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:701daea9ffe9d26f97b52f1d157e0d4121644f0fcf80b443248434958fd03dc3"}, + {file = "pydantic-1.10.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf135c46099ff3f919d2150a948ce94b9ce545598ef2c6c7bf55dca98a304b52"}, + {file = "pydantic-1.10.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0f85904f73161817b80781cc150f8b906d521fa11e3cdabae19a581c3606209"}, + {file = "pydantic-1.10.7-cp38-cp38-win_amd64.whl", hash = "sha256:9f6f0fd68d73257ad6685419478c5aece46432f4bdd8d32c7345f1986496171e"}, + {file = "pydantic-1.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c230c0d8a322276d6e7b88c3f7ce885f9ed16e0910354510e0bae84d54991143"}, + {file = "pydantic-1.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:976cae77ba6a49d80f461fd8bba183ff7ba79f44aa5cfa82f1346b5626542f8e"}, + {file = "pydantic-1.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d45fc99d64af9aaf7e308054a0067fdcd87ffe974f2442312372dfa66e1001d"}, + {file = "pydantic-1.10.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d2a5ebb48958754d386195fe9e9c5106f11275867051bf017a8059410e9abf1f"}, + {file = "pydantic-1.10.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:abfb7d4a7cd5cc4e1d1887c43503a7c5dd608eadf8bc615413fc498d3e4645cd"}, + {file = "pydantic-1.10.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:80b1fab4deb08a8292d15e43a6edccdffa5377a36a4597bb545b93e79c5ff0a5"}, + {file = "pydantic-1.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:d71e69699498b020ea198468e2480a2f1e7433e32a3a99760058c6520e2bea7e"}, + {file = "pydantic-1.10.7-py3-none-any.whl", hash = "sha256:0cd181f1d0b1d00e2b705f1bf1ac7799a2d938cce3376b8007df62b29be3c2c6"}, + {file = "pydantic-1.10.7.tar.gz", hash = "sha256:cfc83c0678b6ba51b0532bea66860617c4cd4251ecf76e9846fa5a9f3454e97e"}, ] [package.dependencies] @@ -656,18 +656,18 @@ files = [ [[package]] name = "pylint" -version = "2.16.2" +version = "2.17.2" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" files = [ - {file = "pylint-2.16.2-py3-none-any.whl", hash = "sha256:ff22dde9c2128cd257c145cfd51adeff0be7df4d80d669055f24a962b351bbe4"}, - {file = "pylint-2.16.2.tar.gz", hash = "sha256:13b2c805a404a9bf57d002cd5f054ca4d40b0b87542bdaba5e05321ae8262c84"}, + {file = "pylint-2.17.2-py3-none-any.whl", hash = "sha256:001cc91366a7df2970941d7e6bbefcbf98694e00102c1f121c531a814ddc2ea8"}, + {file = "pylint-2.17.2.tar.gz", hash = "sha256:1b647da5249e7c279118f657ca28b6aaebb299f86bf92affc632acf199f7adbb"}, ] [package.dependencies] -astroid = ">=2.14.2,<=2.16.0-dev0" +astroid = ">=2.15.2,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, @@ -686,14 +686,14 @@ testutils = ["gitpython (>3)"] [[package]] name = "pytest" -version = "7.2.1" +version = "7.2.2" description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.2.1-py3-none-any.whl", hash = "sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5"}, - {file = "pytest-7.2.1.tar.gz", hash = "sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42"}, + {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, + {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, ] [package.dependencies] @@ -790,14 +790,14 @@ files = [ [[package]] name = "tomlkit" -version = "0.11.6" +version = "0.11.7" description = "Style preserving TOML library" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, - {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, + {file = "tomlkit-0.11.7-py3-none-any.whl", hash = "sha256:5325463a7da2ef0c6bbfefb62a3dc883aebe679984709aee32a317907d0a8d3c"}, + {file = "tomlkit-0.11.7.tar.gz", hash = "sha256:f392ef70ad87a672f02519f99967d28a4d3047133e2d1df936511465fbb3791d"}, ] [[package]] @@ -833,76 +833,87 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", [[package]] name = "wrapt" -version = "1.14.1" +version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ - {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, - {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, - {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, - {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, - {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, - {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, - {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, - {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, - {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, - {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, - {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, - {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, - {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, - {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, - {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, - {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, ] [[package]] diff --git a/requirements.txt b/requirements.txt index efc2c45..0cb2c91 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,3 @@ -alabaster==0.7.13 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ - --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 anyio==3.6.2 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421 \ --hash=sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3 @@ -10,9 +7,6 @@ astroid==2.15.2 ; python_version >= "3.9" and python_version < "4.0" \ attrs==22.2.0 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 -babel==2.12.1 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610 \ - --hash=sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455 black==23.3.0 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5 \ --hash=sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915 \ @@ -42,82 +36,6 @@ black==23.3.0 ; python_version >= "3.9" and python_version < "4.0" \ certifi==2022.12.7 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 -charset-normalizer==3.1.0 ; python_version >= "3.9" and python_version < "4" \ - --hash=sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6 \ - --hash=sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1 \ - --hash=sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e \ - --hash=sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373 \ - --hash=sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62 \ - --hash=sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230 \ - --hash=sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be \ - --hash=sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c \ - --hash=sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0 \ - --hash=sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448 \ - --hash=sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f \ - --hash=sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649 \ - --hash=sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d \ - --hash=sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0 \ - --hash=sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706 \ - --hash=sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a \ - --hash=sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59 \ - --hash=sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23 \ - --hash=sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5 \ - --hash=sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb \ - --hash=sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e \ - --hash=sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e \ - --hash=sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c \ - --hash=sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28 \ - --hash=sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d \ - --hash=sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41 \ - --hash=sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974 \ - --hash=sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce \ - --hash=sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f \ - --hash=sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1 \ - --hash=sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d \ - --hash=sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8 \ - --hash=sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017 \ - --hash=sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31 \ - --hash=sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7 \ - --hash=sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8 \ - --hash=sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e \ - --hash=sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14 \ - --hash=sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd \ - --hash=sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d \ - --hash=sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795 \ - --hash=sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b \ - --hash=sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b \ - --hash=sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b \ - --hash=sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203 \ - --hash=sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f \ - --hash=sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19 \ - --hash=sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1 \ - --hash=sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a \ - --hash=sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac \ - --hash=sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9 \ - --hash=sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0 \ - --hash=sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137 \ - --hash=sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f \ - --hash=sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6 \ - --hash=sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5 \ - --hash=sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909 \ - --hash=sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f \ - --hash=sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0 \ - --hash=sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324 \ - --hash=sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755 \ - --hash=sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb \ - --hash=sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854 \ - --hash=sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c \ - --hash=sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60 \ - --hash=sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84 \ - --hash=sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0 \ - --hash=sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b \ - --hash=sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1 \ - --hash=sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531 \ - --hash=sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1 \ - --hash=sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11 \ - --hash=sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326 \ - --hash=sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df \ - --hash=sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab click==8.1.3 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 @@ -176,15 +94,9 @@ coverage[toml]==7.2.2 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:e2926b8abedf750c2ecf5035c07515770944acf02e1c46ab08f6348d24c5f94d \ --hash=sha256:e627dee428a176ffb13697a2c4318d3f60b2ccdde3acdc9b3f304206ec130ccd \ --hash=sha256:efe1c0adad110bf0ad7fb59f833880e489a61e39d699d37249bdf42f80590169 -deepdiff==6.3.0 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:15838bd1cbd046ce15ed0c41e837cd04aff6b3e169c5e06fca69d7aa11615ceb \ - --hash=sha256:6a3bf1e7228ac5c71ca2ec43505ca0a743ff54ec77aa08d7db22de6bc7b2b644 dill==0.3.6 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0 \ --hash=sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373 -docutils==0.19 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6 \ - --hash=sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc exceptiongroup==1.1.1 ; python_version >= "3.9" and python_version < "3.11" \ --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 @@ -203,15 +115,9 @@ httpcore==0.16.3 ; python_version >= "3.9" and python_version < "4.0" \ httpx==0.23.3 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:9818458eb565bb54898ccb9b8b251a28785dd4a55afbc23d0eb410754fe7d0f9 \ --hash=sha256:a211fcce9b1254ea24f0cd6af9869b3d29aba40154e947d2a07bb499b3e310d6 -idna==3.4 ; python_version >= "3.9" and python_version < "4" \ +idna==3.4 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 -imagesize==1.4.1 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ - --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a -importlib-metadata==6.1.0 ; python_version >= "3.9" and python_version < "3.10" \ - --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ - --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 importlib-resources==5.12.0 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6 \ --hash=sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a @@ -221,9 +127,6 @@ iniconfig==2.0.0 ; python_version >= "3.9" and python_version < "4.0" \ isort==5.12.0 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \ --hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6 -jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ - --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 lazy-object-proxy==1.9.0 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382 \ --hash=sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82 \ @@ -261,57 +164,6 @@ lazy-object-proxy==1.9.0 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734 \ --hash=sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb \ --hash=sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59 -markupsafe==2.1.2 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed \ - --hash=sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc \ - --hash=sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2 \ - --hash=sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460 \ - --hash=sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7 \ - --hash=sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0 \ - --hash=sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1 \ - --hash=sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa \ - --hash=sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03 \ - --hash=sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323 \ - --hash=sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65 \ - --hash=sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013 \ - --hash=sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036 \ - --hash=sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f \ - --hash=sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4 \ - --hash=sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419 \ - --hash=sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2 \ - --hash=sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619 \ - --hash=sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a \ - --hash=sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a \ - --hash=sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd \ - --hash=sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7 \ - --hash=sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666 \ - --hash=sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65 \ - --hash=sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859 \ - --hash=sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625 \ - --hash=sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff \ - --hash=sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156 \ - --hash=sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd \ - --hash=sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba \ - --hash=sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f \ - --hash=sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1 \ - --hash=sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094 \ - --hash=sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a \ - --hash=sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513 \ - --hash=sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed \ - --hash=sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d \ - --hash=sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3 \ - --hash=sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147 \ - --hash=sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c \ - --hash=sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603 \ - --hash=sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601 \ - --hash=sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a \ - --hash=sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1 \ - --hash=sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d \ - --hash=sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3 \ - --hash=sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54 \ - --hash=sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2 \ - --hash=sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6 \ - --hash=sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58 mccabe==0.7.0 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e @@ -345,12 +197,6 @@ mypy==1.1.1 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:d809f88734f44a0d44959d795b1e6f64b2bbe0ea4d9cc4776aa588bb4229fc1c \ --hash=sha256:dbb19c9f662e41e474e0cff502b7064a7edc6764f5262b6cd91d698163196799 \ --hash=sha256:ef6a01e563ec6a4940784c574d33f6ac1943864634517984471642908b30b6f7 -networkx==2.8.8 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:230d388117af870fce5647a3c52401fcf753e94720e6ea6b4197a5355648885e \ - --hash=sha256:e435dfa75b1d7195c7b8378c3859f0445cd88c6b0375c181ed66823a9ceb7524 -ordered-set==4.1.0 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562 \ - --hash=sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8 packaging==23.0 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 @@ -406,116 +252,33 @@ pydantic==1.10.7 ; python_version >= "3.9" and python_version < "4.0" \ pyflakes==3.0.1 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf \ --hash=sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd -pygments==2.14.0 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297 \ - --hash=sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717 -pyinputplus==0.2.12 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:3a86b03dc6d003fec7dc627ad175cacaaf6e14a6a3b13b34c8fe6f5d01506231 pylint==2.17.2 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:001cc91366a7df2970941d7e6bbefcbf98694e00102c1f121c531a814ddc2ea8 \ --hash=sha256:1b647da5249e7c279118f657ca28b6aaebb299f86bf92affc632acf199f7adbb -pysimplevalidate==0.2.12 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:645d24bdca17ad4c40658f3aa0bd5c1aa1688ba0c02ba75c5ed2cb3b8abaaa19 pytest-cov==4.0.0 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b \ --hash=sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470 pytest==7.2.2 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e \ --hash=sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4 -pyyaml==6.0 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf \ - --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ - --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ - --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ - --hash=sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b \ - --hash=sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4 \ - --hash=sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07 \ - --hash=sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba \ - --hash=sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9 \ - --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ - --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ - --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ - --hash=sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782 \ - --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ - --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ - --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ - --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 \ - --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ - --hash=sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1 \ - --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ - --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ - --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ - --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ - --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ - --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ - --hash=sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d \ - --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ - --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ - --hash=sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7 \ - --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ - --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ - --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ - --hash=sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358 \ - --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ - --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ - --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ - --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ - --hash=sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f \ - --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ - --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 -requests==2.28.2 ; python_version >= "3.9" and python_version < "4" \ - --hash=sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa \ - --hash=sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf rfc3986[idna2008]==1.5.0 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835 \ --hash=sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97 sniffio==1.3.0 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \ --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384 -snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ - --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a -sphinx==5.3.0 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d \ - --hash=sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5 -sphinxcontrib-applehelp==1.0.4 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228 \ - --hash=sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e -sphinxcontrib-devhelp==1.0.2 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e \ - --hash=sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4 -sphinxcontrib-htmlhelp==2.0.1 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff \ - --hash=sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903 -sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ - --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 -sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72 \ - --hash=sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6 -sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd \ - --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 starlette==0.25.0 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:774f1df1983fd594b9b6fb3ded39c2aa1979d10ac45caac0f4255cbe2acb8628 \ --hash=sha256:854c71e73736c429c2bdb07801f2c76c9cba497e7c3cf4988fde5e95fe4cdb3c -stdiomask==0.0.6 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:c1e47069ead9e10bda150a26f7922ca01d2adc503042a9d7acf64877a2b9a3a6 tomli==2.0.1 ; python_version >= "3.9" and python_full_version <= "3.11.0a6" \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f tomlkit==0.11.7 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:5325463a7da2ef0c6bbfefb62a3dc883aebe679984709aee32a317907d0a8d3c \ --hash=sha256:f392ef70ad87a672f02519f99967d28a4d3047133e2d1df936511465fbb3791d -types-pyyaml==6.0.12.9 ; python_version >= "3.9" and python_version < "4.0" \ - --hash=sha256:5aed5aa66bd2d2e158f75dda22b059570ede988559f030cf294871d3b647e3e8 \ - --hash=sha256:c51b1bd6d99ddf0aa2884a7a328810ebf70a4262c292195d3f4f9a0005f9eeb6 typing-extensions==4.5.0 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 -urllib3==1.26.15 ; python_version >= "3.9" and python_version < "4" \ - --hash=sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305 \ - --hash=sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42 uvicorn==0.20.0 ; python_version >= "3.9" and python_version < "4.0" \ --hash=sha256:a4e12017b940247f836bc90b72e725d7dfd0c8ed1c51eb365f5ba30d9f5127d8 \ --hash=sha256:c3ed1598a5668208723f2bb49336f4509424ad198d6ab2615b7783db58d919fd From 858f4f5cfed97eb1100a50dee7ccb47e512cdf69 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Thu, 6 Apr 2023 09:08:54 -0400 Subject: [PATCH 06/61] separating running poetry export from pylint --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1cc313b..7412f77 100644 --- a/Makefile +++ b/Makefile @@ -29,13 +29,14 @@ default: @echo "${RED}There is no default make target.${END} Specify one of:" @echo "pylint - runs pylint" @echo "pytest - runs pytest" + @echo "reqs - generates a new requirements.txt file" @echo "etags - constructs an emacs tags table" @echo "" @echo "See ${BUILD_DIR}/README.md for more details and info" # Run pylint .PHONY: pylint -pylint: requirements.txt +pylint: @echo "${RED}NOTE - isort and black disagree on 3 files${END} - let black win" isort ${SRC_DIR} ${TEST_DIR} black ${SRC_DIR} ${TEST_DIR} From 7b56073d6b39319cd296918ab73a0deb93a9cf61 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Thu, 6 Apr 2023 13:06:57 -0400 Subject: [PATCH 07/61] first 3 endpoints have some initial functionality --- src/vtp/web/api/main.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 10319c2..7216b00 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -1,7 +1,9 @@ """API endpoints for the VoteTrackerPlus backend""" -from fastapi import FastAPI +# import json +import os +from fastapi import FastAPI from vtp.ops.accept_ballot_operation import AcceptBallotOperation from vtp.ops.cast_ballot_operation import CastBallotOperation from vtp.ops.setup_vtp_demo_operation import SetupVtpDemoOperation @@ -17,7 +19,13 @@ ) # pylint: disable=line-too-long DEFAULT_BLANK_BALLOT = "GGOs/states/Massachusetts/GGOs/towns/Concord/blank-ballots/json/000,001,002,003,ballot.json" -# two more +# for testing only +DEFAULT_CAST_BALLOT = os.path.join( + DEFAULT_ELECTION_DATA_DIR, + "receipts", + "cast-ballot.json", +) +# backend verbosity VERBOSITY = 3 ######## @@ -39,8 +47,8 @@ async def get_vote_store_id() -> dict: """Create and store a unique Vote Store ID for each client""" svdo = SetupVtpDemoOperation( - DEFAULT_ELECTION_DATA_DIR, - VERBOSITY, + election_data_dir=DEFAULT_ELECTION_DATA_DIR, + verbosity=VERBOSITY, ) guid = svdo.run( guid_client_store=True, @@ -67,13 +75,13 @@ async def get_empty_ballot(vote_store_id: str) -> dict: blank_ballot=DEFAULT_BLANK_BALLOT, return_bb=True, ) - return {"ballot": f"{empty_ballot}"} + return {"blank-ballot": empty_ballot} return {"error": "VoteStoreID not found"} # Endpoint #3 @app.get("/vote/cast-ballot/{vote_store_id}") -async def cast_ballot(vote_store_id: str) -> dict: +async def cast_ballot(vote_store_id: str, cast_ballot_json: dict = None) -> dict: """ Uploads the ballot; the backend accepts it, merges it, and returns the ballot check and voter index @@ -85,8 +93,10 @@ async def cast_ballot(vote_store_id: str) -> dict: guid=vote_store_id, verbosity=VERBOSITY, ) + # ZZZ stub out cast ballot ballot_check, voter_index = abo.run( - cast_ballot_json="SOMETHING", + cast_ballot=DEFAULT_CAST_BALLOT, + cast_ballot_json=cast_ballot_json, merge_contests=True, ) return {"ballot_check": ballot_check, "voter_index": voter_index} From 659d46d42b55e5661c6ab0706b3da264dccef473 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Thu, 6 Apr 2023 20:29:55 -0400 Subject: [PATCH 08/61] initial stub at some json data models --- src/vtp/web/api/json_data_models.py | 43 +++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/vtp/web/api/json_data_models.py diff --git a/src/vtp/web/api/json_data_models.py b/src/vtp/web/api/json_data_models.py new file mode 100644 index 0000000..49e268d --- /dev/null +++ b/src/vtp/web/api/json_data_models.py @@ -0,0 +1,43 @@ +""" +Pydandic Models for the blank and cast ballots, the ballot check. It +is probably the case that there is not enough time to create models +for endpoints 4 and 5 as that data is currently in more or less system +log sytax. +""" + +from typing import List, Dict +from pydantic import BaseModel + +class Choice(BaseModel): + name: str + party: str = None + ticket_names: List[str] = None + +class BaseContest(BaseModel): + choices: List[Choice] + contest_type: str = None + max: int = None + selection: List[str] + tally: str + uid: str + win-by: float = 0.5 + +class ContestentContest(BaseContest): + +class QuestionContest(BaseModel): + description: str + +class TicketContest(BaseModel): + contest_type: str = "ticket" + ticket_offices: List[str] + +class ContestDict(BaseModel): + __root__: List[Dict[str, Union[ContestentContest, QuestionContest, TicketContest]]] + +class CastBallot(BaseModel): + active_ggos: List[str] + ballot_filename: str + ballot_node: str + ballot_subdir: str + contests: Dict[str, ContestDict] + From 590515b5edc68d540bf65262cf8dff4aacf466dc Mon Sep 17 00:00:00 2001 From: sandy currier Date: Mon, 10 Apr 2023 08:09:56 -0400 Subject: [PATCH 09/61] Update src/vtp/web/api/json_data_models.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/json_data_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/json_data_models.py b/src/vtp/web/api/json_data_models.py index 49e268d..1c1fd63 100644 --- a/src/vtp/web/api/json_data_models.py +++ b/src/vtp/web/api/json_data_models.py @@ -1,5 +1,5 @@ """ -Pydandic Models for the blank and cast ballots, the ballot check. It +Pydantic Models for the blank and cast ballots, the ballot check. It is probably the case that there is not enough time to create models for endpoints 4 and 5 as that data is currently in more or less system log sytax. From 7442e95112e96c11f3142b631fb754a155ee7c54 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Mon, 10 Apr 2023 08:10:30 -0400 Subject: [PATCH 10/61] Update Makefile Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 7412f77..f55c29b 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,7 @@ DOC_DIR := docs SRC_DIR := src/vtp/web/api TEST_DIR := tests +# Use colors for errors and warnings when in an interactive terminal INTERACTIVE := $(shell test -t 0 && echo 1) ifdef INTERACTIVE RED := \033[0;31m From f9038eec17d2e2b0d85594791410817f8abd460f Mon Sep 17 00:00:00 2001 From: sandy currier Date: Mon, 10 Apr 2023 08:11:34 -0400 Subject: [PATCH 11/61] Update Makefile Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f55c29b..3bafcf2 100644 --- a/Makefile +++ b/Makefile @@ -55,5 +55,5 @@ etags: ${ETAG_SRCS} etags ${ETAG_SRCS} # Generate a requirements.txt for dependabot (ignoring the symlinks) -requirements.txt: pyproject.toml poetry.lock +reqs requirements.txt: pyproject.toml poetry.lock poetry export --with dev -f requirements.txt --output requirements.txt From c1678e949ab7aa579666f5871901f30a8ec5a489 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Mon, 10 Apr 2023 08:11:53 -0400 Subject: [PATCH 12/61] Update src/vtp/web/api/json_data_models.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/json_data_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/json_data_models.py b/src/vtp/web/api/json_data_models.py index 1c1fd63..be1c642 100644 --- a/src/vtp/web/api/json_data_models.py +++ b/src/vtp/web/api/json_data_models.py @@ -20,7 +20,7 @@ class BaseContest(BaseModel): selection: List[str] tally: str uid: str - win-by: float = 0.5 + win_by: float = 0.5 class ContestentContest(BaseContest): From 1a532bbfe17cccf37b46b282bba943c9ff277cac Mon Sep 17 00:00:00 2001 From: sandy currier Date: Mon, 10 Apr 2023 08:12:13 -0400 Subject: [PATCH 13/61] Update src/vtp/web/api/json_data_models.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/json_data_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/json_data_models.py b/src/vtp/web/api/json_data_models.py index be1c642..d80282a 100644 --- a/src/vtp/web/api/json_data_models.py +++ b/src/vtp/web/api/json_data_models.py @@ -22,7 +22,7 @@ class BaseContest(BaseModel): uid: str win_by: float = 0.5 -class ContestentContest(BaseContest): +class ContestantContest(BaseContest): class QuestionContest(BaseModel): description: str From 4b1eb70ad48f475724b025c886757c919b768c43 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Mon, 10 Apr 2023 08:12:31 -0400 Subject: [PATCH 14/61] Update src/vtp/web/api/json_data_models.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/json_data_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/json_data_models.py b/src/vtp/web/api/json_data_models.py index d80282a..2788224 100644 --- a/src/vtp/web/api/json_data_models.py +++ b/src/vtp/web/api/json_data_models.py @@ -32,7 +32,7 @@ class TicketContest(BaseModel): ticket_offices: List[str] class ContestDict(BaseModel): - __root__: List[Dict[str, Union[ContestentContest, QuestionContest, TicketContest]]] + __root__: List[Dict[str, Union[ContestantContest, QuestionContest, TicketContest]]] class CastBallot(BaseModel): active_ggos: List[str] From acf166251283962d2dbe7bd67e96a3b30f1e4566 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Mon, 10 Apr 2023 08:47:56 -0400 Subject: [PATCH 15/61] add missing PHONY target --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 3bafcf2..e458d63 100644 --- a/Makefile +++ b/Makefile @@ -55,5 +55,6 @@ etags: ${ETAG_SRCS} etags ${ETAG_SRCS} # Generate a requirements.txt for dependabot (ignoring the symlinks) +.PHONY: reqs reqs requirements.txt: pyproject.toml poetry.lock poetry export --with dev -f requirements.txt --output requirements.txt From 41ca7e56121ae8394c20b133b37ca2205a9cd375 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Mon, 10 Apr 2023 20:23:12 -0400 Subject: [PATCH 16/61] changing ContestDict to AnyContest --- src/vtp/web/api/json_data_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/json_data_models.py b/src/vtp/web/api/json_data_models.py index 2788224..9c5b473 100644 --- a/src/vtp/web/api/json_data_models.py +++ b/src/vtp/web/api/json_data_models.py @@ -31,7 +31,7 @@ class TicketContest(BaseModel): contest_type: str = "ticket" ticket_offices: List[str] -class ContestDict(BaseModel): +class AnyContest(BaseModel): __root__: List[Dict[str, Union[ContestantContest, QuestionContest, TicketContest]]] class CastBallot(BaseModel): From 802c03b9ec39e0e1dc5a0c45c3166d676d34db19 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Tue, 11 Apr 2023 15:42:19 -0400 Subject: [PATCH 17/61] checkpointing: post PR and 2023/04/11 meeting --- src/vtp/web/api/data/alameda_ca.json | 146 --------------------------- src/vtp/web/api/data/favicon.ico | Bin 15406 -> 4286 bytes src/vtp/web/api/json_data_models.py | 128 ++++++++++++++++++++--- 3 files changed, 114 insertions(+), 160 deletions(-) delete mode 100644 src/vtp/web/api/data/alameda_ca.json diff --git a/src/vtp/web/api/data/alameda_ca.json b/src/vtp/web/api/data/alameda_ca.json deleted file mode 100644 index d045f5d..0000000 --- a/src/vtp/web/api/data/alameda_ca.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "active_ggos": [ - ".", - "GGOs/states/California", - "GGOs/states/California/GGOs/counties/Alameda", - "GGOs/states/California/GGOs/towns/Alameda" - ], - "ballot_node": "GGOs/states/California/GGOs/towns/Alameda", - "ballot_subdir": "GGOs/states/California/GGOs/towns/Alameda", - "contests": { - "GGOs/states/California": [ - { - "US president": { - "choices": [ - { - "name": "Mitt Romney", - "party": "Circle Party" - }, - { - "name": "Phil Scott", - "party": "Circle Party" - }, - { - "name": "Ron DeSantis", - "party": "Circle Party" - }, - { - "name": "Kamala Harris", - "party": "Triangle Party" - }, - { - "name": "Cory Booker", - "party": "Triangle Party" - }, - { - "name": "Beta O'rourke", - "party": "Triangle Party" - } - ], - "tally": "rcv", - "uid": "0000" - } - }, - { - "US senate": { - "choices": [ - { - "name": "Larry Hogan", - "party": "Circle Party" - }, - { - "name": "Greg Abbott", - "party": "Circle Party" - }, - { - "name": "Pramila Jayapal", - "party": "Triangle Circle Party" - }, - { - "name": "Alexandria Ocasio-Cortez", - "party": "Triangle Party" - } - ], - "tally": "rcv", - "uid": "0001" - } - }, - { - "governor": { - "choices": [ - { - "name": "Brian Kemp", - "party": "Circle Party" - }, - { - "name": "Bernie Sanders", - "party": "Triangle Party" - } - ], - "tally": "plurality", - "uid": "0002" - } - } - ], - "GGOs/states/California/GGOs/counties/Alameda": [ - { - "County Clerk": { - "choices": [ - "Jean-Luc Picard", - "Huckleberry Finn", - "Peggy Carter" - ], - "tally": "plurality", - "uid": "0003" - } - } - ], - "GGOs/states/California/GGOs/towns/Alameda": [ - { - "mayor": { - "choices": [ - { - "name": "Twenty Seven", - "party": "Circle Party" - }, - { - "name": "Twenty Eight", - "party": "Triangle Party" - }, - { - "name": "Jane Doe", - "party": "Pentagon Party" - }, - { - "name": "John Doe", - "party": "Rectangle Party" - } - ], - "tally": "rcv", - "uid": "0005" - } - }, - { - "Question 1 - school budget override": { - "choices": [ - true, - false - ], - "tally": "plurality", - "uid": "0006" - } - }, - { - "Question 2 - new firehouse land purchase": { - "choices": [ - true, - false - ], - "tally": "plurality", - "uid": "0007", - "win-by": "2/3" - } - } - ] - } -} \ No newline at end of file diff --git a/src/vtp/web/api/data/favicon.ico b/src/vtp/web/api/data/favicon.ico index 71235a893f5f0763dc11f676370f22d7031b7493..92ca78f03f1e8a17a8147cce41c25ff07068a833 100644 GIT binary patch literal 4286 zcmeH}OG{Nz6oB_N&_M$;qcX^Dpb?eO+efbxsYztzq^Ks1A{*5}dl6khXjD-_j)F7` zbLdDK-JjA=aM&QaeV?8Uak$5~Gnahc?b>Uvwf5R;?`sGJeu~B5?=ZD3gqW!B`ONwK4&SmW{p|cM9T&f=m*bGAn>?il_`PyURSe<)rg|-y)P?u+~ zuMrr60_2H4XTW`1w`%^1=o5GZx8VpZ6<=Ta)VDG6#QW|2@m;Zxvi01B?i#!R`{Ntj zggkrCLLd6l#`|lGYEp-C0=&cZU@xn4y>%#pv7f;^@Vqa=6kLJp;QJTtUE^3E`qHPq z$3eTS_f0E`%8I>J2JdaG zTl9Yv-6$AaT>`W42K?LH%)$MckNqGCIBy;F*$HJZR#x<3{j+^;f4znn+nRre$6$Qf z4(GtLxC3n|=8(M?#xPb^s>Qc&kAd-?LNC~N#;_(Q;4PS2%t70GU=AyZ|9}1Mb88lB zYfa7jC)k6Ywe>VN-^x*V5B9}bFo(O~p6myG>2tCAH#2WPRkjCX)JnS-|as0DrMJFoxr=^p!`9$c4=(&77(K>rJ;#i$?33$HZ*c`0GEBFGFa36ddoYUuG?+?@SZ{rM~ z-H`YGT66bp+-iMp?ajfx#NJ=-`&(emlXQJMpT=_E-pTB}%!{x6VK@Yi^`Wm441+Ni zlRZpMf_3hOYW26C37CU8&O0xC^ucnze=(aE?~wQ0zIVNQ5Ob=7Z2uWsopahmd)Mki zU!KcK#GI$Wd(#1)VP2eUUfQ}wy|MMR8ZqZdu%G-t#&^itn^X2&)H$b(wk5FUU9c9h zAM6|Nh4&}^|Ly+lNpWnCdB3&M)-_GA9#VsoR`5lDyE#R7s5PQtG z+PmeOB97HLw<#;AKqbmteWg+=R4O4<{?hM%=;PlZ?3?3z;}>;}ltb9E7}3s8*Xl!G M`qcM)3}dD85BD+MHUIzs literal 15406 zcmeI3dypJe6^DBvL;`|Ag$fE7B|HTTtfDcn+cT4FSVBT}x_fsMf<#Lr6eyxqJQRxs zc~mJ?U_zBjY4C+&fq)gDupkg1Ae9FQgp>jjASCighy+-6rn~q0o!ir!o|&GR?w!f< z4_npgp6+|k`JLxI_YuQrGj=y7PBgerHqIVr7$+KrF?n+E`^fzaV;S$JPAz>u+%O*7 z-!P7(4PEFFyyuqaZ{`AZSjKj*GHv&e5K>#n#yaqpn>r}o8aga$OPtI^Jjd#~StLom#6 z)Un7{tZHX_Z)F^BHt!#(`i6X37W9#^{h!Bte=%njjuZMbEp-^*cf_<&=yZVo>!aV$ z{o`3jeY*P$wJ+ZZ8P$0dyi-wC4HmAzfPa4_A&E=2hnCV*D$hu(=^pM zo~z`b?guh*79D0-dmC1A&un& z18TR7Rs3$nw|~(7mlf~gd}r8nyhYV=_}7?L@r(4YZRb!ombZ0=Gk6H?&lP^iJCt#T zjxY?>#_wMzz#zC@p`Yf3O@1c!mA~n8-`t1y4<)35-MxFn=Y!tCznX^a{RSGfWx-Fg zj(`0$XVZje-<{7Q3;IB(8O!~*$Oyeb?DQrTh7E(G%*k>wF|{e)cjzyn#!yGi09JxDoy3SO4 z!|T3Q@{6H0EOAop52_8hFG*`}eDghcr1ec#d@`zo4r}Nz?DJ*}-lz@BpKbqX({WFt z&ze;Ibo>w(k=V>S?)52XNL=05)jxQ!$e=OU-n%LKiyXs}AEbY`qxNS!-;}Vwi~%>D zwBUbKcfp^GpIOVlQfMZm5$MtOpOidFpLt2_j;#ySQ$LBzt<*{%!+z=PAbFBpO+JsS zlgexjzPB@ZZ?TN?q1@R%b*Sm6DdF#uFT9gR2RcVf4O=It5*M2@z22#!=Mi4{;#VZM zg6n=6m*l;+gOkn<^#2|7U#`vH-5@#&`3?*W>_(r{>GPWO;n`=b`M%UD(#D*(eIjF_ z)OTh2tM!{&;34cb81sD?yR3}X^-^zkI{rEEF4Hj>wq<&XUkEYgZ1-g52Jv-m1upde zM5z|3!0SGDs-q@_G=q77f3^0(3K}In+~3vp+TKBX$z{w_62yb%Z+n|#EU4eS8#OW?gQk$f?BkHPIxGo2U4L*2Y2HFMtWF!SmlV(9f4 zTIuBnBfj!_&QV8~*}?M4VkY3l804sr3RY~qtX2F=bncl({U{i8Ub5Y5d0#d@p!*+( z7$ts_#%vOt=zwv`KUe!euR9ALe>U0=c{fXq8S}k#31zm}W zPoA_(Ft8pFu6@MujlL5-Fuwj1*_-wUZExFKk;@N#F3O|Pb63wh2hev(GjW0MZDowP zG>G#?9IL-eTu5w!V_7LjHPlB*Uh$!&vNluc=ha-2ykY%-JPFN(_{NRI>KbC}znYh< zmstKL*7#QO?grlFyL!|CNvM9@1L1LopDt+5d>{35_cV`^`@=n|9K3V2kkvYUJf^8_J+Gh5vPr?6e z^!h0H-T=3(xiySm+LYyfEemV0+&4q(@5r+t*Rvyb4WW5?RGX|%pzmJt?}PY4+}xlH zUnSlIzjtIE@77Gen+xlo=5ZT_QI~?`dW^=5p z$55}Ig3eciU$49GO8h0-!^k1)7I(~W3db6e`E43|w9ip{5nB$v@*K2M`**W)c3R{C z_M}W(nQ3EN>)k3a|Il;!n)AD6F(&BmVt4k^l$q2HB5Tg}PJ{LfrF=JPe@=ie32j;D zeZ0de9^Wt?@U>iCeTn#4N1rkGnOgD^4?eoQvr$aTI6^yWvIP4975Tgt?^eB+n3lX$ ztLBtE$r|vt;J39!JYD$7{Fyml`Pene-{d87E8|0T9#U-`vJV~jO%k81+Xh|9-0+qT z*7u0NwXKRH=z227RgTl>enKYC+Em=Ways3~eunI)-hiE_NG>p)LLc=;(skszdMVj$ zhtwL;oGSA-a^*9lwCe~@^!ysN=Y_$ZP*7LubvEW(t&AzDmn2rjk3p26~^O z8dEAC*q+UMJz3lPGjtNi71+1p2baqJS`?e;-<+o=qTh?4w?+Jfw)e`}ny77NFHrko z?_bd-h0dzw(mup`BX?QnZ-`&o({7WQ_rE7+eWI8|4)V^VtmR&bY|-;HF5}7-l{rby zu|RKa627#l6_@N8``44N$$Jg)OPsF7XZmEUi((i5$;<_h=(HTW=8Fwp%J!-`QlEtV z)VQ&?2l7;X15QDyhy`x_pkFVTC8=1$)>B_@Lm(xz~ z3y1y1*D`jIb;O$e;%G(R$zI%@^q2e{eP8y>Uf#O69Mj&e_P{r$gImra)%9ic{7xr( zGL`u#)5rdRoU^IJzs|Q1|0}eq3aAB|MA!5^6m`bJ%@QQadS3(UaHqG1_$~YUST>zBYWH8 zOA_1o@DgN5yFLIt&V6wPun`WC0s1Rt54Y2HFX378cO9F>`y+JTmE0?1L>LEhFP#-! z1(w8fZQYi&O38VN`ss0>eGbcG{VzRs`bbl9Cvvx6h= zN0$rI$}>pr`=P|rP6-TyGZ9Ci)8HIyeH@Z|R?51!)Nssu@6bM8zfW3>_1oLt^Rl)V z%}071#~;X5jmEVi{(B2_HCV3 zVSc!#mF;Km!S--Eq_MgX>bD!dN?wrEK_&)I=|U|FlMH9H9);sgKF0!94bZl|l4QUN59RYp%~M zB16dzAB69S?KiTA_4UenHPmyXyVybdQV$&%nY)Z} z!8q+Lm3j%AyvLPz&V>Cc?IAuXHPCwE?5bR!I$UyiGZ-89Rc%r)>6(waHK@IrKQIR> zgg_7+bm)Vh=rkU=F0`ag6`q`y2Q+ qpwDoQEb9~eKQMnC-#AC(UdlZ$dnU3Elr*QOL-t|o4>gcX1OEr!Ty;nQ diff --git a/src/vtp/web/api/json_data_models.py b/src/vtp/web/api/json_data_models.py index 9c5b473..57d95ec 100644 --- a/src/vtp/web/api/json_data_models.py +++ b/src/vtp/web/api/json_data_models.py @@ -1,43 +1,143 @@ """ -Pydantic Models for the blank and cast ballots, the ballot check. It -is probably the case that there is not enough time to create models -for endpoints 4 and 5 as that data is currently in more or less system -log sytax. +Pydantic Models for the blank and cast ballots, the ballot check, and +the voter's index. It is probably the case that there is not enough +time to create models for endpoints 4 and 5 as that data is currently +in more or less system log sytax. """ -from typing import List, Dict +from typing import Dict, List, Union + from pydantic import BaseModel +# This is a data model file +# pylint: disable=too-few-public-methods + + class Choice(BaseModel): + """A VTP choice data structure""" + name: str party: str = None ticket_names: List[str] = None -class BaseContest(BaseModel): + +class BaseUncastContest(BaseModel): + """The common fields across all VTP contests when uncast""" + + choices: List[Choice] + max: int = None + tally: str + uid: str + win_by: float = None + + +class BaseCastContest(BaseModel): + """The common fields across all VTP contests when cast""" + choices: List[Choice] contest_type: str = None max: int = None selection: List[str] tally: str uid: str - win_by: float = 0.5 + win_by: float = None + + +class ContestantUncastContest(BaseUncastContest): + """ + A contestant contest is the most basic. The description field is + optional while being mostly ignored. + """ + + contest_type: str = None + descriptiion: str = None + + +class ContestantCastContest(BaseCastContest): + """ + A contestant contest is the most basic. The description field is + optional while being mostly ignored. + """ + + contest_type: str = None + descriptiion: str = None + + +class QuestionUncastContest(BaseUncastContest): + """ + A ballot question data object - requires a description (well not + really, but why not?) + """ + + description: str + -class ContestantContest(BaseContest): +class QuestionCastContest(BaseCastContest): + """ + A ballot question data object - requires a description (well not + really, but why not?) + """ -class QuestionContest(BaseModel): description: str -class TicketContest(BaseModel): + +class TicketUncastContest(BaseUncastContest): + """A ticket contest requires a contest_type value of 'ticket'""" + contest_type: str = "ticket" ticket_offices: List[str] -class AnyContest(BaseModel): - __root__: List[Dict[str, Union[ContestantContest, QuestionContest, TicketContest]]] -class CastBallot(BaseModel): +class TicketCastContest(BaseCastContest): + """A ticket contest requires a contest_type value of 'ticket'""" + + contest_type: str = "ticket" + ticket_offices: List[str] + + +class AnyUncastContest(BaseModel): + """ + Only here because I don't know what I am doing and the CastBallot + class needs to be able to contain any number of any of the threee + """ + + __root__: List[ + Dict[ + str, + Union[ContestantUncastContest, QuestionUncastContest, TicketUncastContest], + ] + ] + + +class AnyCastContest(BaseModel): + """ + Only here because I don't know what I am doing and the CastBallot + class needs to be able to contain any number of any of the threee + """ + + __root__: List[ + Dict[ + str, + Union[ContestantUncastContest, QuestionUncastContest, TicketCastContest], + ] + ] + + +class BlankBallot(BaseModel): + """A blank ballot - cannot contain a selection node in any contest""" + active_ggos: List[str] ballot_filename: str ballot_node: str ballot_subdir: str - contests: Dict[str, ContestDict] + contests: Dict[str, AnyUncastContest] + +class CastBallot(BaseModel): + """A cast ballot - must contain a selection node in each contest""" + + active_ggos: List[str] + ballot_filename: str + ballot_node: str + ballot_subdir: str + contests: Dict[str, AnyCastContest] From 96b6b4a9677eacace4eb27280caab1db19d34456 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Tue, 11 Apr 2023 20:23:31 -0400 Subject: [PATCH 18/61] checkpoint during refactoring --- src/vtp/web/api/backend.py | 153 +++++++++++++++++++++++++++++++++++++ src/vtp/web/api/main.py | 102 +++++++++++-------------- 2 files changed, 196 insertions(+), 59 deletions(-) create mode 100644 src/vtp/web/api/backend.py diff --git a/src/vtp/web/api/backend.py b/src/vtp/web/api/backend.py new file mode 100644 index 0000000..8314be3 --- /dev/null +++ b/src/vtp/web/api/backend.py @@ -0,0 +1,153 @@ +"""Backend support for the web-api""" + +import csv +import json +import os + +from vtp.ops.accept_ballot_operation import AcceptBallotOperation +from vtp.ops.cast_ballot_operation import CastBallotOperation +from vtp.ops.setup_vtp_demo_operation import SetupVtpDemoOperation +from vtp.ops.verify_ballot_receipt_operation import VerifyBallotReceiptOperation + + +class VtpBackend: + """Class to keep the namespace separate""" + + ######## + # backend demo constants + ######## + # set mock mode + _MOCK_MODE = True + # where the ElectionData repo is + _DEFAULT_ELECTIONDATA = "VTP-mock-election.US.13" + # where the blank ballot is stored for the spring demo + # pylint: disable=line-too-long + _MOCK_BLANK_BALLOT = "GGOs/states/Massachusetts/GGOs/towns/Concord/blank-ballots/json/000,001,002,003,ballot.json" + # where the cast-ballot.json file is stored for the spring demo + _MOCK_CAST_BALLOT = "receipts/cast-ballot.json" + # where the ballot-check is stored for the spring demo + _MOCK_BALLOT_CHECK = "receipts/receipts.26.csv" + _MOCK_VOTER_INDEX = 26 + # default guid - making one up + _MOCK_GUID = "01d963fd74100ee3f36428740a8efd8afd781839" + # backend verbosity + _VERBOSITY = 3 + + # Class variables + _election_data_dir = None + _mock_blank_ballot = None + _mock_cast_ballot = None + + @staticmethod + def set_election_data(): + """Will set _election_data_dir or raise an error""" + # Just return if already set + if not VtpBackend._election_data_dir: + return + # Start wherever here is + cur_dir = os.getcwd() + while True: + file_list = os.listdir(cur_dir) + parent_dir = os.path.dirname(cur_dir) + if VtpBackend._DEFAULT_ELECTIONDATA in file_list: + # bingo + VtpBackend._election_data_dir = os.path.join( + cur_dir, + VtpBackend._DEFAULT_ELECTIONDATA, + ) + VtpBackend._mock_blank_ballot = os.path.join( + VtpBackend._election_data_dir, + VtpBackend._MOCK_BLANK_BALLOT, + ) + VtpBackend._mock_cast_ballot = os.path.join( + VtpBackend._election_data_dir, + VtpBackend._MOCK_CAST_BALLOT, + ) + break + # if dir is root dir, raise error + if cur_dir == parent_dir: + raise OSError( + f"The ElecationData directory ({VtpBackend._DEFAULT_ELECTIONDATA}) " + "was not found prior to reaching the root (/) of the filesystem" + ) + # continue walking up + cur_dir = parent_dir + + @staticmethod + def get_vote_store_id() -> str: + """Will return a vote_store_id, a.k.a. a guid""" + VtpBackend.set_election_data() + if VtpBackend._MOCK_MODE: + # in mock mode there is no guid - make one up + return VtpBackend._MOCK_GUID + operation = SetupVtpDemoOperation( + election_data_dir=VtpBackend._election_data_dir, + verbosity=VtpBackend._VERBOSITY, + ) + return operation.run(guid_client_store=True) + + @staticmethod + def get_empty_ballot(vote_store_id: str) -> dict: + """Given an existing guid, will return the blank ballot""" + VtpBackend.set_election_data() + if VtpBackend._MOCK_MODE: + # in mock mode there is no guid - make one up + with open(VtpBackend._MOCK_BLANK_BALLOT, "r", encoding="utf8") as infile: + json_doc = json.load(infile) + return json_doc + # Cet a (the) blank ballot from the backend + operation = CastBallotOperation( + guid=vote_store_id, + verbosity=VtpBackend._VERBOSITY, + ) + return operation.run( + blank_ballot=VtpBackend._MOCK_BLANK_BALLOT, + return_bb=True, + ) + + @staticmethod + def cast_ballot(vote_store_id: str, cast_ballot: dict) -> dict: + """Will cast (upload) a cast ballot and return the ballot-check and voter-index""" + VtpBackend.set_election_data() + if VtpBackend._MOCK_MODE: + # Just return a mock ballot-check and voter-index + with open(VtpBackend._MOCK_BLANK_BALLOT, "r", encoding="utf8") as infile: + csv_doc = csv.reader(infile) + return csv_doc, VtpBackend._MOCK_VOTER_INDEX + # handle the incoming ballot and return the ballot-check and voter-index + operation = AcceptBallotOperation( + guid=vote_store_id, + verbosity=VtpBackend._VERBOSITY, + ) + return operation.run( + cast_ballot_json=cast_ballot, + merge_contests=True, + ) + + + @staticmethod + def verify_ballot_check( + vote_store_id: str, + ballot_check: list, + vote_index: int, + ) -> str: + """ + Will verify a ballot-check and vote-inded, returning an + undefined string at this time. + """ + VtpBackend.set_election_data() + if VtpBackend._MOCK_MODE: + # Just return a mock ballot-check and voter-index + with open(VtpBackend._MOCK_BLANK_BALLOT, "r", encoding="utf8") as infile: + csv_doc = csv.reader(infile) + return csv_doc, VtpBackend._MOCK_VOTER_INDEX + # handle the incoming ballot and return the ballot-check and voter-index + operation = VerifyBallotReceiptOperation( + guid=vote_store_id, + verbosity=VtpBackend._VERBOSITY, + ) + return operation.run( + receipt_csv=ballot_check, + row=vote_index, + cvr=True, + ) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 7216b00..2aaea17 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -1,38 +1,16 @@ """API endpoints for the VoteTrackerPlus backend""" -# import json -import os - from fastapi import FastAPI -from vtp.ops.accept_ballot_operation import AcceptBallotOperation -from vtp.ops.cast_ballot_operation import CastBallotOperation -from vtp.ops.setup_vtp_demo_operation import SetupVtpDemoOperation -app = FastAPI() +from backend import VtpBackend -######## -# backend demo constants -######## -# where the ElectionData repo is -DEFAULT_ELECTION_DATA_DIR = ( - "/opt/VoteTrackerPlus/demo.01/mock-clients/scanner.00/VTP-mock-election.US.13" -) -# pylint: disable=line-too-long -DEFAULT_BLANK_BALLOT = "GGOs/states/Massachusetts/GGOs/towns/Concord/blank-ballots/json/000,001,002,003,ballot.json" -# for testing only -DEFAULT_CAST_BALLOT = os.path.join( - DEFAULT_ELECTION_DATA_DIR, - "receipts", - "cast-ballot.json", -) -# backend verbosity -VERBOSITY = 3 +app = FastAPI() ######## # local variables ######## # A dict to store VoteStoreIDs -vote_store_ids = [] +vote_store_ids = {} @app.get("/") @@ -46,17 +24,8 @@ async def root() -> dict: async def get_vote_store_id() -> dict: """Create and store a unique Vote Store ID for each client""" - svdo = SetupVtpDemoOperation( - election_data_dir=DEFAULT_ELECTION_DATA_DIR, - verbosity=VERBOSITY, - ) - guid = svdo.run( - guid_client_store=True, - ) - - vote_store_id = guid - # add VoteStoreID to list - vote_store_ids.append(vote_store_id) + vote_store_id = VtpBackend.get_vote_store_id() + vote_store_ids[vote_store_id] = "uncast" return {"VoteStoreID": vote_store_id} @@ -66,38 +35,53 @@ async def get_empty_ballot(vote_store_id: str) -> dict: """Return an empty ballot for a given Vote Store ID""" if vote_store_id in vote_store_ids: - # Cet a (the) blank ballot from the backend - cbo = CastBallotOperation( - guid=vote_store_id, - verbosity=VERBOSITY, - ) - empty_ballot = cbo.run( - blank_ballot=DEFAULT_BLANK_BALLOT, - return_bb=True, - ) + empty_ballot = VtpBackend.get_empty_ballot(vote_store_id) return {"blank-ballot": empty_ballot} return {"error": "VoteStoreID not found"} # Endpoint #3 -@app.get("/vote/cast-ballot/{vote_store_id}") -async def cast_ballot(vote_store_id: str, cast_ballot_json: dict = None) -> dict: +@app.post("/vote/{vote_store_id}/cast-ballot") +async def cast_ballot( + vote_store_id: str, + incoming_cast_ballot: dict = None, + ) -> dict: """ Uploads the ballot; the backend accepts it, merges it, and returns the ballot check and voter index """ if vote_store_id in vote_store_ids: - # Accept the incoming cast ballot json and return a ballot check and voter index - abo = AcceptBallotOperation( - guid=vote_store_id, - verbosity=VERBOSITY, - ) - # ZZZ stub out cast ballot - ballot_check, voter_index = abo.run( - cast_ballot=DEFAULT_CAST_BALLOT, - cast_ballot_json=cast_ballot_json, - merge_contests=True, - ) - return {"ballot_check": ballot_check, "voter_index": voter_index} + if vote_store_ids[vote_store_id] == "uncast": + ballot_check, voter_index = VtpBackend.cast_ballot(vote_store_id, incoming_cast_ballot) + vote_store_ids[vote_store_id] = "cast" + return {"ballot_check": ballot_check, "voter_index": voter_index} + return {"error": "This ballot has already been cast"} + return {"error": "VoteStoreID not found"} + + +# Endpoint #4 +@app.post("/vote/{vote_store_id}/verify-ballot-check") +async def verify_ballot_check( + vote_store_id: str, + ballot_check: list = None, + vote_index: int = 0, + ) -> dict: + """ + Will verify the ballot-check and voter-id. Return values are TBD + pending further discussions + """ + + if vote_store_id in vote_store_ids: + if vote_store_ids[vote_store_id] == "cast": + ballot_check_doc = VtpBackend.verify_ballot_check( + vote_store_id, + ballot_check, + vote_index, + ) + return {"ballot_check_doc": ballot_check_doc} + return {"error": "The supplied rest endpoint (URL) is not a valid URL"} return {"error": "VoteStoreID not found"} + + +# Endpoint #5 From d36f8cf81546603a86af3e0364962450f7511094 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Wed, 12 Apr 2023 01:48:37 -0400 Subject: [PATCH 19/61] initial pass on some thoughts regarding all 5 endpoints --- src/vtp/web/api/backend.py | 38 +++++++++++++++++++++++++++----- src/vtp/web/api/main.py | 45 +++++++++++++++++++++++++++++--------- 2 files changed, 68 insertions(+), 15 deletions(-) diff --git a/src/vtp/web/api/backend.py b/src/vtp/web/api/backend.py index 8314be3..ba72aea 100644 --- a/src/vtp/web/api/backend.py +++ b/src/vtp/web/api/backend.py @@ -7,6 +7,7 @@ from vtp.ops.accept_ballot_operation import AcceptBallotOperation from vtp.ops.cast_ballot_operation import CastBallotOperation from vtp.ops.setup_vtp_demo_operation import SetupVtpDemoOperation +from vtp.ops.tally_contests_operation import TallyContestsOperation from vtp.ops.verify_ballot_receipt_operation import VerifyBallotReceiptOperation @@ -124,13 +125,12 @@ def cast_ballot(vote_store_id: str, cast_ballot: dict) -> dict: merge_contests=True, ) - @staticmethod def verify_ballot_check( - vote_store_id: str, - ballot_check: list, - vote_index: int, - ) -> str: + vote_store_id: str, + ballot_check: list, + vote_index: int, + ) -> str: """ Will verify a ballot-check and vote-inded, returning an undefined string at this time. @@ -151,3 +151,31 @@ def verify_ballot_check( row=vote_index, cvr=True, ) + + @staticmethod + def tally_election_check( + vote_store_id: str, + contest_uids: list = None, + track_contests: list = None, + verbosity: int = 3, + ) -> str: + """ + Will verify a ballot-check and vote-inded, returning an + undefined string at this time. + """ + VtpBackend.set_election_data() + if VtpBackend._MOCK_MODE: + # Just return a mock ballot-check and voter-index + with open(VtpBackend._MOCK_BLANK_BALLOT, "r", encoding="utf8") as infile: + csv_doc = csv.reader(infile) + return csv_doc, VtpBackend._MOCK_VOTER_INDEX + # handle the incoming ballot and return the ballot-check and voter-index + operation = TallyContestsOperation( + guid=vote_store_id, + verbosity=verbosity, + ) + return operation.run( + guid=vote_store_id, + contest_uid=contest_uids, + track_contests=track_contests, + ) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 2aaea17..17e94a0 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -1,8 +1,7 @@ """API endpoints for the VoteTrackerPlus backend""" -from fastapi import FastAPI - from backend import VtpBackend +from fastapi import FastAPI app = FastAPI() @@ -43,9 +42,9 @@ async def get_empty_ballot(vote_store_id: str) -> dict: # Endpoint #3 @app.post("/vote/{vote_store_id}/cast-ballot") async def cast_ballot( - vote_store_id: str, - incoming_cast_ballot: dict = None, - ) -> dict: + vote_store_id: str, + incoming_cast_ballot: dict = None, +) -> dict: """ Uploads the ballot; the backend accepts it, merges it, and returns the ballot check and voter index @@ -53,7 +52,9 @@ async def cast_ballot( if vote_store_id in vote_store_ids: if vote_store_ids[vote_store_id] == "uncast": - ballot_check, voter_index = VtpBackend.cast_ballot(vote_store_id, incoming_cast_ballot) + ballot_check, voter_index = VtpBackend.cast_ballot( + vote_store_id, incoming_cast_ballot + ) vote_store_ids[vote_store_id] = "cast" return {"ballot_check": ballot_check, "voter_index": voter_index} return {"error": "This ballot has already been cast"} @@ -63,10 +64,10 @@ async def cast_ballot( # Endpoint #4 @app.post("/vote/{vote_store_id}/verify-ballot-check") async def verify_ballot_check( - vote_store_id: str, - ballot_check: list = None, - vote_index: int = 0, - ) -> dict: + vote_store_id: str, + ballot_check: list = None, + vote_index: int = 0, +) -> dict: """ Will verify the ballot-check and voter-id. Return values are TBD pending further discussions @@ -85,3 +86,27 @@ async def verify_ballot_check( # Endpoint #5 +@app.post("/vote/{vote_store_id}/tally-election") +async def tally_election( + vote_store_id: str, + contest_uids: str = None, + track_contests: list = None, + verbosity: int = 3, +) -> dict: + """ + Will execute the tally, optionally limited to a list of contests, + tracking an optional list of digests, with an optional verbosity + level. + """ + + if vote_store_id in vote_store_ids: + if vote_store_ids[vote_store_id] == "cast": + tally_election_doc = VtpBackend.tally_election_check( + vote_store_id, + contest_uids, + track_contests, + verbosity, + ) + return {"tally_election_doc": tally_election_doc} + return {"error": "The supplied rest endpoint (URL) is not a valid URL"} + return {"error": "VoteStoreID not found"} From 4dde5971efa6730163a5739c0b1c36ba74192034 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Wed, 12 Apr 2023 07:47:20 -0400 Subject: [PATCH 20/61] checkpointing endpoint #4 --- src/vtp/web/api/backend.py | 122 ++++++++++++++++++++++++++++--------- src/vtp/web/api/main.py | 39 +++++------- tests/test_main.py | 35 ++++++++++- 3 files changed, 141 insertions(+), 55 deletions(-) diff --git a/src/vtp/web/api/backend.py b/src/vtp/web/api/backend.py index ba72aea..9b0421a 100644 --- a/src/vtp/web/api/backend.py +++ b/src/vtp/web/api/backend.py @@ -1,4 +1,30 @@ -"""Backend support for the web-api""" +""" +Backend support for the web-api. One important aspect of this file is +to support web-api testing in the absense of a live ElectionData +deployment. An ElectionData deployment is when a setup-mock-election +operation has been run, nominally creating a +/opt/VoteTrackerPlus/demo.01 ElectionData folder and the required +subfolders. + +With an ElectionData deployment the VTP git commands can be executed +and VoteTracker+ can function as designed. + +Without an ElectionData deployment VTP git commands cannot be +executed. Currently this state is configured by the _MOCK_MODE +variable below. When set, and when this repo is part of the +VTP-dev-env parent repo (or when the VoteTrackerPlus and +VTP-mock-election.US.xx repos are simply sibling repos of this one), +the commands here do call into the VoteTrackerPlus repo and instead +stub out the IO with static, non-varying mock data. That mock data is +currently nominally stored in (checked into) the +VTP-mock-election.US.xx repo as it is a function of the live +ElectionData election configuration and CVR data found in that repo. +This is specifically due to two things: the VTP-mock-election.US.xx +holds the configuration of an election such as the blank ballot +definition as well as several hundred pre-cast random ballots so to +fill the ballot cache so that ballot-checks can be immediately +produced upon casting a ballot. +""" import csv import json @@ -38,12 +64,13 @@ class VtpBackend: _election_data_dir = None _mock_blank_ballot = None _mock_cast_ballot = None + _mock_ballot_check = None @staticmethod def set_election_data(): """Will set _election_data_dir or raise an error""" # Just return if already set - if not VtpBackend._election_data_dir: + if VtpBackend._election_data_dir: return # Start wherever here is cur_dir = os.getcwd() @@ -64,6 +91,10 @@ def set_election_data(): VtpBackend._election_data_dir, VtpBackend._MOCK_CAST_BALLOT, ) + VtpBackend._mock_ballot_check = os.path.join( + VtpBackend._election_data_dir, + VtpBackend._MOCK_BALLOT_CHECK, + ) break # if dir is root dir, raise error if cur_dir == parent_dir: @@ -76,7 +107,9 @@ def set_election_data(): @staticmethod def get_vote_store_id() -> str: - """Will return a vote_store_id, a.k.a. a guid""" + """ + Endpoint #1: will return a vote_store_id, a.k.a. a guid + """ VtpBackend.set_election_data() if VtpBackend._MOCK_MODE: # in mock mode there is no guid - make one up @@ -89,12 +122,16 @@ def get_vote_store_id() -> str: @staticmethod def get_empty_ballot(vote_store_id: str) -> dict: - """Given an existing guid, will return the blank ballot""" + """ + Endpoint #2: given an existing guid, will return the blank + ballot + """ VtpBackend.set_election_data() if VtpBackend._MOCK_MODE: # in mock mode there is no guid - make one up - with open(VtpBackend._MOCK_BLANK_BALLOT, "r", encoding="utf8") as infile: + with open(VtpBackend._mock_blank_ballot, "r", encoding="utf8") as infile: json_doc = json.load(infile) + # import pdb; pdb.set_trace() return json_doc # Cet a (the) blank ballot from the backend operation = CastBallotOperation( @@ -106,15 +143,34 @@ def get_empty_ballot(vote_store_id: str) -> dict: return_bb=True, ) + @staticmethod + def mock_get_cast_ballot() -> dict: + """Mock only - return a static cast ballot""" + VtpBackend.set_election_data() + with open(VtpBackend._mock_cast_ballot, "r", encoding="utf8") as infile: + json_doc = json.load(infile) + return json_doc + + + @staticmethod + def mock_get_ballot_check() -> tuple[list, int]: + """Mock only - return a static cast ballot""" + VtpBackend.set_election_data() + with open(VtpBackend._mock_ballot_check, "r", encoding="utf8") as infile: + csv_doc = list(csv.reader(infile)) + return csv_doc, VtpBackend._MOCK_VOTER_INDEX + + @staticmethod def cast_ballot(vote_store_id: str, cast_ballot: dict) -> dict: - """Will cast (upload) a cast ballot and return the ballot-check and voter-index""" + """ + Endpoint #3: will cast (upload) a cast ballot and return the + ballot-check and voter-index + """ VtpBackend.set_election_data() if VtpBackend._MOCK_MODE: # Just return a mock ballot-check and voter-index - with open(VtpBackend._MOCK_BLANK_BALLOT, "r", encoding="utf8") as infile: - csv_doc = csv.reader(infile) - return csv_doc, VtpBackend._MOCK_VOTER_INDEX + return VtpBackend.mock_get_ballot_check() # handle the incoming ballot and return the ballot-check and voter-index operation = AcceptBallotOperation( guid=vote_store_id, @@ -125,57 +181,63 @@ def cast_ballot(vote_store_id: str, cast_ballot: dict) -> dict: merge_contests=True, ) + + @staticmethod + def mock_get_verify_ballot_string() -> str: + """Return a mock tally string""" + return "Hello World" + @staticmethod def verify_ballot_check( vote_store_id: str, - ballot_check: list, - vote_index: int, + incoming_json: dict, ) -> str: """ - Will verify a ballot-check and vote-inded, returning an + Endpoint $4: will verify a ballot-check and vote-inded, returning an undefined string at this time. """ VtpBackend.set_election_data() if VtpBackend._MOCK_MODE: - # Just return a mock ballot-check and voter-index - with open(VtpBackend._MOCK_BLANK_BALLOT, "r", encoding="utf8") as infile: - csv_doc = csv.reader(infile) - return csv_doc, VtpBackend._MOCK_VOTER_INDEX + # Just return a mock verify ballot string + return VtpBackend.mock_get_verify_ballot_string() # handle the incoming ballot and return the ballot-check and voter-index operation = VerifyBallotReceiptOperation( guid=vote_store_id, verbosity=VtpBackend._VERBOSITY, ) return operation.run( - receipt_csv=ballot_check, - row=vote_index, + receipt_csv=incoming_json["ballot-check"], + row=incoming_json["vote-index"], cvr=True, ) + + @staticmethod + def mock_get_tally_string() -> str: + """Return a mock tally string""" + return "Good Morning" + + @staticmethod def tally_election_check( vote_store_id: str, - contest_uids: list = None, - track_contests: list = None, - verbosity: int = 3, + incoming_json: dict, ) -> str: """ - Will verify a ballot-check and vote-inded, returning an - undefined string at this time. + Endpoint #5: will verify a ballot-check and vote-inded, + returning an undefined string at this time. """ VtpBackend.set_election_data() if VtpBackend._MOCK_MODE: - # Just return a mock ballot-check and voter-index - with open(VtpBackend._MOCK_BLANK_BALLOT, "r", encoding="utf8") as infile: - csv_doc = csv.reader(infile) - return csv_doc, VtpBackend._MOCK_VOTER_INDEX + # Just return a mock tally string + return VtpBackend.mock_get_tally_string() # handle the incoming ballot and return the ballot-check and voter-index + verbosity = 3 if not "verbosity" in incoming_json else incoming_json["verbosity"] operation = TallyContestsOperation( guid=vote_store_id, verbosity=verbosity, ) return operation.run( - guid=vote_store_id, - contest_uid=contest_uids, - track_contests=track_contests, + contest_uid=incoming_json["contest-uids"], + track_contests=incoming_json["track-contests"], ) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 17e94a0..1fdd9b1 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -40,34 +40,34 @@ async def get_empty_ballot(vote_store_id: str) -> dict: # Endpoint #3 -@app.post("/vote/{vote_store_id}/cast-ballot") +@app.post("/vote/cast-ballot/{vote_store_id}") async def cast_ballot( vote_store_id: str, - incoming_cast_ballot: dict = None, -) -> dict: + incoming_json: dict = None, + ) -> dict: """ Uploads the ballot; the backend accepts it, merges it, and returns the ballot check and voter index """ + # import pdb; pdb.set_trace() if vote_store_id in vote_store_ids: if vote_store_ids[vote_store_id] == "uncast": - ballot_check, voter_index = VtpBackend.cast_ballot( - vote_store_id, incoming_cast_ballot + ballot_check, vote_index = VtpBackend.cast_ballot( + vote_store_id, incoming_json, ) vote_store_ids[vote_store_id] = "cast" - return {"ballot_check": ballot_check, "voter_index": voter_index} + return {"ballot-check": ballot_check, "vote-index": vote_index} return {"error": "This ballot has already been cast"} return {"error": "VoteStoreID not found"} # Endpoint #4 -@app.post("/vote/{vote_store_id}/verify-ballot-check") +@app.post("/vote/verify-ballot-check/{vote_store_id}") async def verify_ballot_check( vote_store_id: str, - ballot_check: list = None, - vote_index: int = 0, -) -> dict: + incoming_json: dict = None, + ) -> dict: """ Will verify the ballot-check and voter-id. Return values are TBD pending further discussions @@ -76,22 +76,18 @@ async def verify_ballot_check( if vote_store_id in vote_store_ids: if vote_store_ids[vote_store_id] == "cast": ballot_check_doc = VtpBackend.verify_ballot_check( - vote_store_id, - ballot_check, - vote_index, + vote_store_id, incoming_json, ) - return {"ballot_check_doc": ballot_check_doc} + return {"ballot-check-doc": ballot_check_doc} return {"error": "The supplied rest endpoint (URL) is not a valid URL"} return {"error": "VoteStoreID not found"} # Endpoint #5 -@app.post("/vote/{vote_store_id}/tally-election") +@app.post("/vote/tally-election/{vote_store_id}") async def tally_election( vote_store_id: str, - contest_uids: str = None, - track_contests: list = None, - verbosity: int = 3, + incoming_json: dict = None, ) -> dict: """ Will execute the tally, optionally limited to a list of contests, @@ -102,11 +98,8 @@ async def tally_election( if vote_store_id in vote_store_ids: if vote_store_ids[vote_store_id] == "cast": tally_election_doc = VtpBackend.tally_election_check( - vote_store_id, - contest_uids, - track_contests, - verbosity, + vote_store_id, incoming_json, ) - return {"tally_election_doc": tally_election_doc} + return {"tally-election-doc": tally_election_doc} return {"error": "The supplied rest endpoint (URL) is not a valid URL"} return {"error": "VoteStoreID not found"} diff --git a/tests/test_main.py b/tests/test_main.py index 0dd0b82..488a96d 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -15,6 +15,7 @@ def test_get_root(): assert "version" in response.json() +# Endpoint #1 @pytest.fixture def test_get_vote_store_id(): """Test retreiving and printing a voter store id guid""" @@ -25,12 +26,42 @@ def test_get_vote_store_id(): return response.json()["VoteStoreID"] +# Endpoint #2 +@pytest.fixture def test_get_empty_ballot(test_get_vote_store_id): - """test with invalid VoteStoreID""" + """Test with invalid VoteStoreID""" response = client.get("/vote/00000X") assert response.status_code == 200 assert "error" in response.json() # test with valid VoteStoreID response = client.get(f"/vote/{test_get_vote_store_id}") assert response.status_code == 200 - assert "ballot" in response.json() + assert "blank-ballot" in response.json() + return response.json()["blank-ballot"] + + +# Endpoint #3 +@pytest.fixture +def test_cast_ballot(test_get_vote_store_id, test_get_empty_ballot): + """test casting a filled-in ballot""" + # import pdb; pdb.set_trace() + response = client.post( + f"/vote/cast-ballot/{test_get_vote_store_id}", + json=test_get_empty_ballot, + ) + assert response.status_code == 200 + assert "ballot-check" in response.json() + assert "vote-index" in response.json() + return response.json() + + +# Endpoint #4 +def test_verify_ballot_check(test_get_vote_store_id, test_cast_ballot): + """testing the verification of a ballot check""" + # import pdb; pdb.set_trace() + response = client.post( + f"/vote/verify-ballot-check/{test_get_vote_store_id}", + json=test_cast_ballot, + ) + assert response.status_code == 200 + assert "ballot-check-doc" in response.json() From 2f9affd518a42cb7b6e11ffeb4a584c66f91bad0 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Wed, 12 Apr 2023 08:10:14 -0400 Subject: [PATCH 21/61] initial pass on endpoint #5 --- src/vtp/web/api/backend.py | 9 +-------- src/vtp/web/api/main.py | 31 ++++++++++++++++--------------- tests/test_main.py | 16 ++++++++++++++++ 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/vtp/web/api/backend.py b/src/vtp/web/api/backend.py index 9b0421a..afd75ba 100644 --- a/src/vtp/web/api/backend.py +++ b/src/vtp/web/api/backend.py @@ -151,7 +151,6 @@ def mock_get_cast_ballot() -> dict: json_doc = json.load(infile) return json_doc - @staticmethod def mock_get_ballot_check() -> tuple[list, int]: """Mock only - return a static cast ballot""" @@ -160,7 +159,6 @@ def mock_get_ballot_check() -> tuple[list, int]: csv_doc = list(csv.reader(infile)) return csv_doc, VtpBackend._MOCK_VOTER_INDEX - @staticmethod def cast_ballot(vote_store_id: str, cast_ballot: dict) -> dict: """ @@ -181,7 +179,6 @@ def cast_ballot(vote_store_id: str, cast_ballot: dict) -> dict: merge_contests=True, ) - @staticmethod def mock_get_verify_ballot_string() -> str: """Return a mock tally string""" @@ -203,7 +200,6 @@ def verify_ballot_check( # handle the incoming ballot and return the ballot-check and voter-index operation = VerifyBallotReceiptOperation( guid=vote_store_id, - verbosity=VtpBackend._VERBOSITY, ) return operation.run( receipt_csv=incoming_json["ballot-check"], @@ -211,13 +207,11 @@ def verify_ballot_check( cvr=True, ) - @staticmethod def mock_get_tally_string() -> str: """Return a mock tally string""" return "Good Morning" - @staticmethod def tally_election_check( vote_store_id: str, @@ -232,10 +226,9 @@ def tally_election_check( # Just return a mock tally string return VtpBackend.mock_get_tally_string() # handle the incoming ballot and return the ballot-check and voter-index - verbosity = 3 if not "verbosity" in incoming_json else incoming_json["verbosity"] operation = TallyContestsOperation( guid=vote_store_id, - verbosity=verbosity, + verbosity=incoming_json["verbosity"], ) return operation.run( contest_uid=incoming_json["contest-uids"], diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 1fdd9b1..4cb09cc 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -44,7 +44,7 @@ async def get_empty_ballot(vote_store_id: str) -> dict: async def cast_ballot( vote_store_id: str, incoming_json: dict = None, - ) -> dict: +) -> dict: """ Uploads the ballot; the backend accepts it, merges it, and returns the ballot check and voter index @@ -54,7 +54,8 @@ async def cast_ballot( if vote_store_id in vote_store_ids: if vote_store_ids[vote_store_id] == "uncast": ballot_check, vote_index = VtpBackend.cast_ballot( - vote_store_id, incoming_json, + vote_store_id, + incoming_json, ) vote_store_ids[vote_store_id] = "cast" return {"ballot-check": ballot_check, "vote-index": vote_index} @@ -67,19 +68,19 @@ async def cast_ballot( async def verify_ballot_check( vote_store_id: str, incoming_json: dict = None, - ) -> dict: +) -> dict: """ Will verify the ballot-check and voter-id. Return values are TBD pending further discussions """ + # import pdb; pdb.set_trace() if vote_store_id in vote_store_ids: - if vote_store_ids[vote_store_id] == "cast": - ballot_check_doc = VtpBackend.verify_ballot_check( - vote_store_id, incoming_json, - ) - return {"ballot-check-doc": ballot_check_doc} - return {"error": "The supplied rest endpoint (URL) is not a valid URL"} + ballot_check_doc = VtpBackend.verify_ballot_check( + vote_store_id, + incoming_json, + ) + return {"ballot-check-doc": ballot_check_doc} return {"error": "VoteStoreID not found"} @@ -95,11 +96,11 @@ async def tally_election( level. """ + # import pdb; pdb.set_trace() if vote_store_id in vote_store_ids: - if vote_store_ids[vote_store_id] == "cast": - tally_election_doc = VtpBackend.tally_election_check( - vote_store_id, incoming_json, - ) - return {"tally-election-doc": tally_election_doc} - return {"error": "The supplied rest endpoint (URL) is not a valid URL"} + tally_election_doc = VtpBackend.tally_election_check( + vote_store_id, + incoming_json, + ) + return {"tally-election-doc": tally_election_doc} return {"error": "VoteStoreID not found"} diff --git a/tests/test_main.py b/tests/test_main.py index 488a96d..ddb55a1 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -65,3 +65,19 @@ def test_verify_ballot_check(test_get_vote_store_id, test_cast_ballot): ) assert response.status_code == 200 assert "ballot-check-doc" in response.json() + + +# Endpoint #5 +def test_tally_election(test_get_vote_store_id): + """testing the tally""" + # import pdb; pdb.set_trace() + response = client.post( + f"/vote/tally-election/{test_get_vote_store_id}", + json={ + "contest-uids": None, + "track-contests": "123", + "verbosity": 3, + }, + ) + assert response.status_code == 200 + assert "tally-election-doc" in response.json() From d2844834ab2e976f3d8355314ed2a1ca2cf184d6 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Wed, 12 Apr 2023 09:05:46 -0400 Subject: [PATCH 22/61] wordsmithing --- src/vtp/web/api/backend.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/vtp/web/api/backend.py b/src/vtp/web/api/backend.py index afd75ba..5e77c04 100644 --- a/src/vtp/web/api/backend.py +++ b/src/vtp/web/api/backend.py @@ -1,8 +1,8 @@ """ Backend support for the web-api. One important aspect of this file is to support web-api testing in the absense of a live ElectionData -deployment. An ElectionData deployment is when a setup-mock-election -operation has been run, nominally creating a +deployment. An ElectionData deployment is when a +setup-vtp-demo-operation operation has been run, nominally creating a /opt/VoteTrackerPlus/demo.01 ElectionData folder and the required subfolders. @@ -14,16 +14,20 @@ variable below. When set, and when this repo is part of the VTP-dev-env parent repo (or when the VoteTrackerPlus and VTP-mock-election.US.xx repos are simply sibling repos of this one), -the commands here do call into the VoteTrackerPlus repo and instead -stub out the IO with static, non-varying mock data. That mock data is -currently nominally stored in (checked into) the -VTP-mock-election.US.xx repo as it is a function of the live -ElectionData election configuration and CVR data found in that repo. -This is specifically due to two things: the VTP-mock-election.US.xx -holds the configuration of an election such as the blank ballot -definition as well as several hundred pre-cast random ballots so to -fill the ballot cache so that ballot-checks can be immediately -produced upon casting a ballot. +the commands here do not call into the VoteTrackerPlus repo and +instead stub out the effective IO operations with static, non-varying +mock data. That mock data is currently nominally stored in (checked +into) the VTP-mock-election.US.xx repo as the mock data is a direct +function of the live ElectionData election configuration and CVR data +found in that repo. And that is due to two things: 1) the +VTP-mock-election.US.xx holds the configuration of an election such as +the blank ballot definition and 2) it also holds several hundred +pre-cast random ballots so to fill the ballot cache so that +ballot-checks can be immediately produced upon casting a ballot. + +Regardless, for the time being the VTP-mock-election.US.xx also holds +checkedin mock values for the data that the web-api and above layers +need when running in mock mode. """ import csv From 491d5fff6095bdfbcfb53e48aa2cb5a3b9c24d7e Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Wed, 12 Apr 2023 13:38:52 -0400 Subject: [PATCH 23/61] copying blank ballot, cast ballot, ballot check to here --- src/vtp/web/api/data/blank-ballot.json | 123 +++++++++++++++++++++ src/vtp/web/api/data/cast-ballot.json | 144 +++++++++++++++++++++++++ src/vtp/web/api/data/receipts.26.csv | 101 +++++++++++++++++ 3 files changed, 368 insertions(+) create mode 100644 src/vtp/web/api/data/blank-ballot.json create mode 100644 src/vtp/web/api/data/cast-ballot.json create mode 100644 src/vtp/web/api/data/receipts.26.csv diff --git a/src/vtp/web/api/data/blank-ballot.json b/src/vtp/web/api/data/blank-ballot.json new file mode 100644 index 0000000..4adda25 --- /dev/null +++ b/src/vtp/web/api/data/blank-ballot.json @@ -0,0 +1,123 @@ +{ + "active_ggos": [ + ".", + "GGOs/states/Massachusetts", + "GGOs/states/Massachusetts/GGOs/counties/Middlesex", + "GGOs/states/Massachusetts/GGOs/towns/Concord" + ], + "ballot_filename": "000,001,002,003,ballot.json", + "ballot_node": "GGOs/states/Massachusetts/GGOs/towns/Concord", + "ballot_subdir": "GGOs/states/Massachusetts/GGOs/towns/Concord", + "contests": { + "GGOs/states/Massachusetts": [ + { + "US president": { + "choices": [ + { + "name": "Circle Party Ticket", + "ticket_names": [ + "Rey Skywalker", + "Obi-Wan Kenobi" + ] + }, + { + "name": "Square Party Ticket", + "ticket_names": [ + "Atticus Finch", + "Hermione Granger" + ] + }, + { + "name": "Triangle Party Ticket", + "ticket_names": [ + "Evelyn Quan Wang", + "Waymond Wang" + ] + } + ], + "contest_type": "ticket", + "tally": "rcv", + "ticket_offices": [ + "President", + "Vice President" + ], + "uid": "0000" + } + }, + { + "US senate": { + "choices": [ + { + "name": "Anthony Alpha", + "party": "Circle Party" + }, + { + "name": "Betty Beta", + "party": "Pentagon Party" + }, + { + "name": "Gloria Gamma", + "party": "Square Party" + }, + { + "name": "David Delta", + "party": "Triangle Party" + }, + { + "name": "Emily Echo", + "party": "Ellipse Party" + }, + { + "name": "Francis Foxtrot", + "party": "Octagon Party" + } + ], + "tally": "rcv", + "uid": "0001" + } + }, + { + "governor": { + "choices": [ + { + "name": "Spencer Cogswell", + "party": "Circle Party" + }, + { + "name": "Cosmo Spacely", + "party": "Triangle Party" + } + ], + "tally": "plurality", + "uid": "0002" + } + } + ], + "GGOs/states/Massachusetts/GGOs/counties/Middlesex": [ + { + "County Clerk": { + "choices": [ + "Jean-Luc Picard", + "Katniss Everdeen", + "James T. Kirk" + ], + "tally": "plurality", + "uid": "0003" + } + } + ], + "GGOs/states/Massachusetts/GGOs/towns/Concord": [ + { + "Question 1 - should the starting time of the annual town meeting be moved to 6:30PM?": { + "choices": [ + "yes", + "no" + ], + "description": "Should the Town of Concord start the annual Town Meeting at 6:30PM instead of 7:00PM?\n", + "tally": "plurality", + "uid": "0004" + } + } + ] + } +} \ No newline at end of file diff --git a/src/vtp/web/api/data/cast-ballot.json b/src/vtp/web/api/data/cast-ballot.json new file mode 100644 index 0000000..cd0b1f5 --- /dev/null +++ b/src/vtp/web/api/data/cast-ballot.json @@ -0,0 +1,144 @@ +{ + "active_ggos": [ + ".", + "GGOs/states/Massachusetts", + "GGOs/states/Massachusetts/GGOs/counties/Middlesex", + "GGOs/states/Massachusetts/GGOs/towns/Concord" + ], + "ballot_filename": "000,001,002,003,ballot.json", + "ballot_node": "GGOs/states/Massachusetts/GGOs/towns/Concord", + "ballot_subdir": "GGOs/states/Massachusetts/GGOs/towns/Concord", + "contests": { + "GGOs/states/Massachusetts": [ + { + "US president": { + "choices": [ + { + "name": "Circle Party Ticket", + "ticket_names": [ + "Rey Skywalker", + "Obi-Wan Kenobi" + ] + }, + { + "name": "Square Party Ticket", + "ticket_names": [ + "Atticus Finch", + "Hermione Granger" + ] + }, + { + "name": "Triangle Party Ticket", + "ticket_names": [ + "Evelyn Quan Wang", + "Waymond Wang" + ] + } + ], + "contest_type": "ticket", + "selection": [ + "2: Triangle Party Ticket", + "1: Square Party Ticket" + ], + "tally": "rcv", + "ticket_offices": [ + "President", + "Vice President" + ], + "uid": "0000" + } + }, + { + "US senate": { + "choices": [ + { + "name": "Anthony Alpha", + "party": "Circle Party" + }, + { + "name": "Betty Beta", + "party": "Pentagon Party" + }, + { + "name": "Gloria Gamma", + "party": "Square Party" + }, + { + "name": "David Delta", + "party": "Triangle Party" + }, + { + "name": "Emily Echo", + "party": "Ellipse Party" + }, + { + "name": "Francis Foxtrot", + "party": "Octagon Party" + } + ], + "selection": [ + "5: Francis Foxtrot", + "3: David Delta", + "1: Betty Beta" + ], + "tally": "rcv", + "uid": "0001" + } + }, + { + "governor": { + "choices": [ + { + "name": "Spencer Cogswell", + "party": "Circle Party" + }, + { + "name": "Cosmo Spacely", + "party": "Triangle Party" + } + ], + "max": 1, + "selection": [ + "1: Cosmo Spacely" + ], + "tally": "plurality", + "uid": "0002" + } + } + ], + "GGOs/states/Massachusetts/GGOs/counties/Middlesex": [ + { + "County Clerk": { + "choices": [ + "Jean-Luc Picard", + "Katniss Everdeen", + "James T. Kirk" + ], + "max": 1, + "selection": [ + "0: Jean-Luc Picard" + ], + "tally": "plurality", + "uid": "0003" + } + } + ], + "GGOs/states/Massachusetts/GGOs/towns/Concord": [ + { + "Question 1 - should the starting time of the annual town meeting be moved to 6:30PM?": { + "choices": [ + "yes", + "no" + ], + "description": "Should the Town of Concord start the annual Town Meeting at 6:30PM instead of 7:00PM?\n", + "max": 1, + "selection": [ + "0: yes" + ], + "tally": "plurality", + "uid": "0004" + } + } + ] + } +} \ No newline at end of file diff --git a/src/vtp/web/api/data/receipts.26.csv b/src/vtp/web/api/data/receipts.26.csv new file mode 100644 index 0000000..7dc449f --- /dev/null +++ b/src/vtp/web/api/data/receipts.26.csv @@ -0,0 +1,101 @@ +"0000 - US president","0001 - US senate","0002 - governor","0003 - County Clerk","0004 - Question 1 - should the starting time of the annual town meeting be moved to 6:30PM?" +de3d4d2d506a2af28cfa047e44adec58d1a2bfed,cdb82385949b3a97ff9dc0bf406af73ddce74f7b,892735beb31544cdf7f0a6c3746dc0c71d406434,452514388a16aa14409d3085042523fab379eeb4,64b72d95bfa2d509d8785afe3e45e165775c3c81 +7d947965a8f52dcce015e847509cf0d9d5324ec9,ca047f4da4fe6bb5e41b2ef54f489c2579439d59,eab9b168a11001a5e11a863f31d178d3a3685f1b,e22d02bd23c1d9258a4d711f966993638fed786c,aeac8adf121fe55339dbcb6acda0f979987af959 +a9041f408e3060ee15a6ec21dea8d7a5bb5fdc6f,239aa38cd09d7872eda9a33c40a6bd309f09aeb8,b362238c1ed68cb139fc15d1d5b511cfb27787f9,52898f49245ab510e3ac0af70a4d82919b216589,201af09015da31f8f3643c51e44834ecc28d9ede +408258409ee4f28e2b4d4f95c5a775047aecdeff,59b5d60409c00e0c928b4dd0e2d4c332c7cf0bfd,32f95d1cd4ccad5a081398560c7582119684f4c2,90d742c21a24eb6cf256034356fb9fe6e0c3db05,6b3badd633b75e64bf88c4807625b66df324ef9e +758687986af791566d8a50630ceddbfa058b3187,feb883fe297c18061c1a52eea7ad914483a36b45,b718b87bc151c2e4e84e0d63b09af9a7eee98ab8,76a9585c63123254aef494160b2e73287a90a25a,573a1679b4c2e4dfc2b3781bf49f6878fda32ceb +cfe3543ecd36cb6264e4b9008dfcccda0b198de7,c1e98c8e1fdbf3a0d6a49482b100d2b10e735f03,24bed18905794c840ef9a5d78778a68b70e88219,1219f57f38077bc408fa7fdc0625a0f7df1667a4,b198e3ff22ae18edd6a3ba118e94ddca199b5dc4 +10376a8c042b346251f46d5e5c57c54b42df01f5,99a49c095006eef70c97571e047bef2710920694,69c3d37e8469a2642746c201a07d3afe7bea74fe,d749c6230b632dcede90d310b7e20740b2e7d4be,af88c339a1ce37aa0b0bc76f547cffe56e585b41 +a2ec253fe9d1a1ae1425bcc1c77fb2b0fdd8064c,85ea9d032d392f8fb889ba011af649813c710f95,b019788a11ca1a478b155080db61cfad9f75bfd7,ef7bb75e544c9914ecd31ce04f4c41d16a92485f,ddfd6d74fdc181c8467a040c3d40d1118cbc41a8 +dcda1142758d2fa851fcad6fd244f3c9b719a8ed,4e8f069f0ca913171ec9a77ab204d82d16cccb05,f93941212bd610fae6bdd931b461b5a6f3cd1259,8f0ce4e850f374978140960509288549b21cbf9d,d21ac8978a7f33d6436450f9484091fee0d96ac0 +cc44dfec25517ee2a2551c1d4bb68a09f3aa14b9,c7e3e0d9c4bd4c4028ee1f4457a3005d1e721271,c2ff0c1ee3067370d56b64eb65fb1a31c0420905,387895da9eaea5b7bce6d032f4812cfd3a7a11a7,acbd21fd3c41ee4afdfcb4778fc79b8279cbc64e +6db09a8a4e3ae0fd4508cd17b9826050e339566e,d631fbaf73ad493f86d2ffe8be13dca39236307e,a7f96ed7e37bf2b321a9958eb792504736deccc2,66405365783b30fabd365ffbc45ea662b3eca57f,df7d39839ad101574995d6818610802cfa4b160e +c0aa94160d4d2ebe64dcf19455fc6cd53c212132,b4c91a53cdbbd3614c823a3c7c2a4bc8646fe6b3,7fcc5f607191f9755902f5d22b1ab4b48caa1c82,ec02e499db8026bfe9fbcedf82d01de1e4cf18b4,2f55d2eff56f0b9cf6259e588d55c55300c8e423 +97c821746ad73e24bcefe3b176e51f6e068e07df,8492499cd7532dabd2fb8cf2f1a75974a21fc954,b08df56fdb175dbe43342a9b5a714750ba5df23d,41d93700d5f25bd0dbc2db4dacddb0ea000adfae,5f0092563ed1a5f402f9b0f0fe1dcdd34e3e1bc3 +498c2506d35f70dd818d495f2fca01d74074479d,512e076313e0efe0931078abeb908f3ba93aca81,27779275a843d2a451e4de2c9302543f93513ed5,5eafee6d1d0d3834c7f9469d28000bbc42484974,3430eb06f4f8784bd035d7d9b3973f0044a38954 +6a7343aaf675b260c805aa226a6685bfa1736bde,f8791aad52adfe4cbabe7f5cbcb46819a13b673a,46e34bbb476181210eb817020b8671606c779e7f,a2c6b71858bd3aed2553f36064d11c64ab7283a7,6c3f1a630925d770ccaa4fee69f2d72f7bc1f4d5 +152c866ec3b52523fc2290396b61997dc74dc8c3,60b27dd6de6b511b2fb78a3522d57da14089e790,e85ae60f7ce7229fe3efb983d2494c68a1ca78b9,fd1d56ba14e9ac68f1d73491e214bded356877e9,e35b533048f393704f939d28859e57aadc284e35 +0ebdf954b78e0f636608616d8ab51433f7bc1323,9c15fff96725912a0b5f14ad7981ff180db286ef,34dea7372996affc16a5d779adea8aa7c3847a81,cadf7d91748dd9c1bd94d2e326feb203502b3ccb,28dc8ae5835838c06cef6a19ee2e3cef5e0cf37f +ce3b717ade65eda731ceae267b9553ffbf44ca35,3b1120c9748ab6b2e2c3e2f4295971ba58f958e0,b7ca39b4ab2e040423f6e10a17730ec8071abdf0,b589a05e04ef07728d1f0be9cb8a0b67148e58bd,3bf2329753f5b27018f4f34dac037bebada44ad7 +3779fb3af7771212fce1966ad4301c9995557fd9,6a971a61c443de4d97b4edc7f510d984bc120833,01bf3038c5dd57285e5f97e14365af15610f0236,d21f0504cdeb339e59d8bc5d749632b68bdfd4a5,94d8f68810feb27f25ce6f4a3b4dee261be4570c +6cef89f39bc4821555c3bde3fbf99910e6a3234b,b959a01161c9e0804efebeb895bf1dd422d11b01,f597bb8c68b7f07e32fba114f4d1ec892a651ad0,766ed58a2c9f03d4fad8bfb7774b16d2c1746b0a,77030362159ce9205ef45f8f9fc7345bc2579c9b +1204aef9242231bf1f3057f7258d673394356444,ec74aa03c6ed9c0e4081d57e0cf94d7073194b95,d69edddd5f2e3d6add1fd32cc173dc1adf6cf211,8f8bd5f12e05b0d29ba226ad7fddda2d1c9bf65c,94653a2ab0632ff36b13bbb76178dcf024c53d36 +96399be2deb0b3d278fb73b6e90fd3b4b67d413e,0ea780585e6d4e42628387409edec530029ffaaf,d45b3475906824f2b1c5ffe9d67eeadf07bd633b,d4b7f227ce70242d58ca4f45e118bd44fb375a82,e3dae08574364f16e5a22b7da7eb70ff6012938a +49e8b4144a3c0681672878c536b5405b64ae6285,8b8451083878b8a400e29e65c6a8db66269121d2,cc94c036ea1c340e1049b44cdc77273e2e870caa,f77aae55c60f2a369326cb78d21599d57964f2e7,e42a25c33cee5dad2a6a76874eeeade45308d393 +431c2f3a40f77b090db415dd9a562f9882d6c612,210eaf80b866af6645e04d9d7a57081e4165d433,fc94904c20f8f28dba8f7858736afcba9ea901d3,b9a731ba823884a58dcfd329bd09f1eeae08c984,e37acdf84908246c1de76c4b08bb53eafb2adbf3 +36fc914930449e4652ed3ce9175bc82d761af80b,a6aaf9da2cc7293701e3db7d89aca0df491e3b01,be6c1da32cc05b10f711cfbc464e6e9a20194805,7c04912bd73f97a68ba96f28628efa58b8ff797c,bb6fefa5dafad7ef514fcaec4f3b2faa52ea3ce5 +2eac163797134991c776287d94700b6619d5a6b6,21fa3448ccbe29dc4ba498c5a2beecc9ee2ecb91,5ca6820a46b814bc61f7570c053d8e1e7181f9ff,7bf434ba6b259537fb50bf14543b5494633cc7d0,1a48b6237379c16e66a40ecffc58699a141b7340 +f8cc07b0df35c563b5554aa71de53ce3ba49ee1f,9213f10c20c0b9fca35bd2314c1983861aaca2db,806b2e408d1a64dfd99c2b78716c53665c7d4203,34474ad5f27c4705aa212cff67b724529380399f,544dd163bb2905ede25868c47715003a9f401d23 +2415dc0ccbce104045596a052d32fc78d371d5cf,972f632a85d5b532dacf63a760ba38290694a05a,716d6c609c8286c5a0cff14ef1337f2e6fcb91d9,e1e2024e3fc2cacfa0a20a94c25315a734552040,e79ae13993a42bb1bb738a500676ff3c9ac3b9bd +04b73beb77541ac390281f047f7f65ad9d2a0382,50e83788fa8609c5a560d9527853bd24bed42231,9c1517dcff4f2432f8239dc067f14c3c00758c40,737387027acad98b763137c7f8af868ef7bd06ca,1a79fe20da03ca2b6ce5f30310a0ed3233eb46bf +11016e28de693c47c7d0d742bec0174151329fdf,5e99316f96dd57e6a5309024f4efb7b30beb899a,c756404c36be39df5844208c685c7be622a85680,71c40d274fe2c1f5e2498861bccfae3ea1aa6042,fd5226ff1776d5f811b132062f632b1ef0948e70 +581a97d7aecfb1c809ba8631d9877a8b2c3cbaaf,0f3e52c0fdd6cf2c6b9ce98dda551fb0d2ada9a5,e0ec4487abec335ce2ff80cdda5a77c7c0db462f,544dfb45ed9a85087a109c204d8b6c9198365109,0d1d78f54682cfb789e32d86f601d96cedc61fab +d93aae6bd053f8d03e99ac0cbcbb6e2251d9a68f,e12f21904a7ef1f8a4e6fa9525343748607066e0,73082b7f6c510543b04454a25f698dee02a05677,891c3efbf636ce60786252c30a854b2313c599ca,3bc551ca87c49bbe5135622eedbbf88fd197239b +c51d126c8c54aa7401f48cfe4e754dba2eabfdde,8716272b4608d3b6bbf63e778b6e764d1797035e,c5d8854e06586cc04f18012b8089dccb06db69f2,66276e549ff8289cbaee10ab40e485b1e97ae1f3,c3bfd5573f2604e39197e68377cb8bc36218f11f +34b71204eabc56b994b737e7744d3c3c6ab9b5e5,ee3ebe322413a3c072f2a060c2fa8243e93c738c,a2ca6bcf08e93a38e39aa595d71e364452822b1b,d3497da59daf389395a6f37aad4ecf1eb583eafd,4aa2c3603d11315e2ce4b6f8d37fd1f407895849 +ca034ace74985d280fcd8ceeca4adf6d1ef983a7,f09ca300ae0a55583780a9290bb76c412a4aad47,ea44984b98c8487e1a7db6cd72b5ccf01ac2e349,a41c7ad6bbe6b7f0c5c4ea8747ce82b2a6672512,dffad77420b59076804c888f39530ec2fd4dc220 +6e0040c659c7923d57c2cd5ae1c9408737bc2baf,042449df1dc5ccfbdec8ac4ca253ebfe382b968c,ff0a8b112a152eda726b38f95c80b974d3d08e94,e8f579de093b51c0325d087165a6307eb1bad270,9e0c3855cf96a135603070a0ddd1f0ca938e0e00 +34dde4ecfae0922148b0b5d2bfb599fa3ed358b2,7e0446da60f3a2e4020e16d2af103c929c819d87,08aadd1e7a1bcad52f4fbf7cc7d3bf4d54f4f19e,ad27ebe01210a91085aa57c00a2ea16a02b1289f,dfb4262db7979a1482a00df1ff8ae33d2bbb26c3 +0cda07baa966523751a22fe42e5611a5ec746da6,65b794793817d5c27f9e469e6f038805e3a97370,5d2c44614369b105e708f55c4f8cb42bd975b37d,82898bc3b70161ef93d4ad465eefbfff82d330e8,1bc113eba55e1e93b8cec2d11e4499db7662372d +ec43ae91bbae018e13ddaad67eb87720823f8c8b,a106be04a016e87cee175d6e9f7f4aaf89124c62,26765c4cfff6560a0b0cce2ce80e09f82770796c,66dcd9ed73172c6d8cc10b0d8054b5f0ccba3345,71d44bd086419adc863de30b27c3d26b8e6fd8ba +37e28f83a1d5010aba2f4905fd28c91107837007,f92b09478c8b13db402e01431c292e81ee30f020,3a60e2bf53eee43780a864a90fccbdc42e4e15e0,d65e8c81165c0e7d3a904fcad10ee6cfc15aeb96,5bfaf60e63806eccc70a1d40d70abcf1ad8dbbb0 +502c23c4c54d62a0c02677f95e8f87c65cf179c8,f60f89bf8413f2c98920801def98b3cf82a8fa53,b06db26888e8836b7259b91bbffe18b20cfc81fb,dc08430db4eb5dbb7cee2388f40de7969b7c4c5b,b8d76bf18c0002c7c004e32a2d395f3ee1344cd7 +fa3b080844a4ab1ac45c8df08861e751218a4949,569c7fde6a897869454991fe0248b5fa59d2ae9f,e93db4c43f8f7b83d5ee3a099468810961158a45,80bef9c0adcb6fea3efa84a90da8b4c4fa4bff31,50a028c77f1ebe34738f6235873bb0669df52a45 +6a04c59803be2a1250227935425f4f7b87d1a886,3a7f14d6f756551a1715802fce551c4a9472f866,ec077789500c54ec21db877d67f822470af840da,079420c8b026b9915ba1e2e5ea4e4c2fd744d42e,56d6c0e1dcf2fad67c8a6e7ff5dcc77209bc50c9 +25851902f635edffc9b24942cd206ae817af7534,1484de298e542face051a4976a2fb1d91a68fc5e,44dabe0ee24951089c9de2bbe75872aaef26fb80,1656b12170c9ab5c802faef16e0316fce31e2b1a,706ad4cf26d2344afafb30349a9bb6e6100e7422 +9e3b37ab59aa6f4bed712c604e8c475398fb7517,fa3b7dff852a8a98c30673d80c688ab5e0d2283d,c1a9c1494998ac9e90b05aabf8f490391dde52fe,1091c3bf895956dc9c90c0fd9c06fe5f7ff5e0c2,b5aee03dd7fcf9c222c7274465f64461b480b0aa +062f9111d18dd2f48b23863c62abb42fdd06a7c8,a03381cb2757fec52acdeb19ecc8904adc73bb43,2be78d2b2adfbf95f1c7fadb37ba797e2917b748,31aff6836072be7b4f0884bb652215492ed548fa,6dc7d41ee2e67a9f0fe9be3c1783b759e28992e4 +4c8d0ab9ef00359c8b61eba9a2390402eb5f90a3,60d41bd093dbefd4cf23825a2bfa42abe140163c,75360985b5aa2232a80dc73c2bc01e9c61b9d9e5,202e1356ae61aeebc7057926fa5eb6258f5375fe,306d4ef2c5fd0cc60a6eaa2e06e9f6390d968e8c +6c19864cb18d3d390e25cf007519aad1145af51e,5498dcae61fef338ff6847ab2cef890ab7a2c4aa,c85b2cf2c896c1da783aa652440cc74f36f32f96,7b2d2495be512c4743188f95a372a46028259552,7f5754765b43326524a83f9e80d52ce56ea1f379 +b9080a3e749796682b3a4bc75351887119d63873,8b17f3e7f5054ce561eeeb7db9e544610fae1663,babc98251feab6f1b13d7ab7e606b0036dc0ec5a,86dc94ccbb2ea3b23d11753383cfa1fb29d2b969,43b77eae4ba308dc4034c702edfe1f5782e33c1d +d84b2302408015cda19299885643026a1b3eb459,21ccd075dcfcdd2ae4ada1ccb25327158ee3420c,0575ed751f0a07342e276a0d26bcac722ec2b55e,37c0b6b26af322aa9dfee93fa25ee6d726235e4b,538b35e153bebf26b509f43e0e724e577c7172b2 +48cfaca631e512170f4fb3d1ba7ea42fe43411c9,8fcb923c507a7272cb4e80aa6b0453bdda9b391d,98405818370481582e5dc0cdbdf21da59da03823,4ee89cadb914b64e51506d11664d4a41c074c885,d8f76d73a787238d3e4da5c4a5b62513a7243407 +2a94819aa9df2dafd7f042bd725b188deecbce41,134439cb52e758bd42b993d756ccb20f3d7c07da,9d13d7477498c92de8c1b04ca71aa57ebca226a2,9753a6126197696fe72de78ef329cc83492516df,1042f21c1047abef50cb479869c8f14d95df98c7 +302ccd0c9a74468841b6a422fe32a3d20d5c64d4,539c5758e4063e21b8b74ceced65aa20d6b5b544,00e7a98da7204d1ccd77609efae6d55bac5b915d,b98d0225318826d8e5fa154870afbb78f04fab48,cf679ce7a35cab40414c87cc17a7c7b6cf853cfc +2f670464e32fac48a27f04fbee5d10c305a49241,57ba21faeb6e628e4c95872188bebc27ad068d0a,500e1646b22fdae808c1c20673f733db338d3de6,b871c84eb5931e5953ec1877e653b44a78e82b4b,36311563666ca0f8171476664aece739e927d6e5 +64c31e6e27f515b66713a0e4c3b0dbfdd2554df1,6509f55b06d0311329f8a50e832f3692d968c161,d96ca237ad1e204f9eb27581e7e847e8acd6a59d,9e497084c411e635d4b0f222f9e3e80582d081b9,6a706e6231ea823b8c6439746d75d3df67290e25 +b600b26a4f3a8e8387601fe4a57f51b07526edac,53d6a37ad885dcb7c3546460c38bf764ac2d5430,83d12ad9ea8d075e7be4f4634fe72dfa07f3f70d,bf555b66e75d5af962d48f83c95f5a48dd8a0a07,a29d61cd6ef9a8a4cd78338a9522000fb9e63271 +4d37733363645153d1e3fa7ef627fe502471c58b,6fe283850e70eab533ff5d97f2532273ca4f1fa9,7cd10b8257f87c897ba0f308619ee4f0bb097de0,4e86b8828726c3cba42051aeee6272bdb7567c30,82c7f5273e3d6d3e86e417f3d981f08fb37fbc11 +c967fb0950948ffad3607192808df7199ed0b622,2d3c8ae5a53e504778affaf5cab88772d7b7283c,2496028871b6c6de264892f8ba7d95a7ced3fdaa,af2d65194ddb873d9dc28367b8923bf8f0635fb0,daf6be6ac452f30e3f86834c21318f2f27c197b3 +e1bf7110f05c16a1c32600fb0d33cbac98099c23,dc64f07035dfb1acb696f1d23e4e0ca4eca51e92,acf58593059d49478ff3f1cec04021f57d7eec23,cdb6cf9f1944572603a390c5ea5d9d9c6821c112,3149e76291b29d410f98f1d91d89f419fc314426 +4cc38ee4079b58f50e0696663b420ee3ae035039,713e7d669465c3ad227436702d49ebf0a5bc54dd,6c9565550950c597b1d7ae5ddd8175d1190887e6,491dd5285a71553efd075cfec7c74a3d41280d89,2495351a3c271e8ea043465af629d3e949319511 +c0bf5d2e18e909ecb0448e6ce5d4c6b18b699abf,0ea723717c36c23c585c27481b93968dcd3965a4,57b371423850a73b9a702f6c5daafbc1d9cab3d4,cb0727e7c0cfa992abcdbc5dfffc54ac3e21d1d1,7e9e122ffb17cbdf5699b1c090edd2b888134bbb +1e9459a22deb0df29d538e0d390a744916d3b2b7,85d5de246681c7faee829315f47450ab55c7e839,49a436609ebd03c7d4e7697bf66680924fb2dc3b,311374e52d8406641c59cd4a6fbf873f7e789794,00635c0b1032dfb3b621d83b015a302fe3a57d21 +36a89e399b1a98448bf27a758e3a243ad10a7d42,b39dcfd404f8ac7b911e598395bfe901e1d4b355,0859fbaf25e824f735ee3d14562c22a55f4618e7,b203962324f7ffe1c12aee4a586a7bea7805e57d,ef763cc1060ffae4dc156b0165b9253c7f073a76 +7da28e818c9421570abb45eb8f8e3953013f8787,3839ef5b853e2cf5b353883579073d30ff8e5956,8db51b94652deb4076fdc9455c891ef7230c64a3,7176eeb1f6018236ae4298771b4da9c1907651ed,a9df3f6a0dc9991eacb2ce180fe324f43b3a4f26 +e9e0a4f39ddb0fb1cb301dd4a128965c5eef4f2d,d3dca98c142ee8521fa85f27ef085f79606e7138,9d28e9e5cbdf9fe0c0e99c67a0d9570754a2c95c,f2f009629fbff1fcd0b3d1dec468ab5aa977df95,b6ae3de3e991d5b5404c126da2dff6c64dd9ef9f +aa14d541f444e64848d0def3a4703c7566c6d607,fb2aa06f94958be767270849b4d169b6f941718e,e3080b30a49f6d1954a16199f1611273d97b8144,78555bfc2374d9603a6def0041da1f3974a04846,65a34ac61f2b49a8c9926e9a9dcbe3f91575903f +9fe3b54e0512a1a3907ad32c131d733b479ca0ef,580565a61bddb114d9c491891a00bf8fda9a395c,76dc213aae00d707c6c3a41e5e834173a54b00df,85c460aac60a10242608c41f6ae629291ac26906,5b77b3ba07f6e1e5a5034b7038e6269f6037bdce +60e39b42b92b309ed44f52442240b34400729584,ab7e2bc0e0147abda86d4ef3bdd7e48e118276d4,d1d116cff9178327132bc9b56777f92dbac6c767,d89067fc9a5f3f933542f9e6d2e13944d77f2cc9,67cdc91d57a48ba565c97adba8808d6c565d0fcf +bbadacb06d1bf892979e67c7f2210a16d334a695,29f5cc079c3324e9eab704c802339ceadda19fe8,a3b9999823293070f5d19f65f6c8eb28221ce668,4b57eb854d054f144f1a7900f4bb3f931166b5f4,e9e5d31707f537adfa90394179895631153f4d38 +62336af2ffc05267b6f80bf2e97e036108368f54,0b7281aff3b15de2054da5d5c1b9548bc445a2d0,d85b7695243a12b8edb8ec50d5a0ba5b0a858ad1,bbe7c08be227acb76ddd72dbcd46affbe6d93750,ee47920231ec9a2dc041abef2346d4f7482af11d +b85f7d96f5ba952949dd83c58fc43bb46f1a17ad,9b36ef748edc6ae41a8095a997fd34a830a4c5ca,bd55ef9100df399da595a84096ade7d52efe52e9,22d84337607c916ae7fc47ef83b1a2c627e7897e,2341e83d7e30352fc3b3ac1e238a3bd6c305be3a +d7311d43158ebd340d870697c5c706233b42a230,45e3aa3418f44262636654565356577137523ea4,1453c47b5329f9513ccb0bd6f0dd6760acea64a1,7a48747727d920143738772ae5ce0db4c91a9085,4a337a2e4b59f2240f9fbb88ca3ff441c70a8c90 +c45ff3c194c35573d2d91d83795ef388aba982f2,7d858be91556bd21df1e0cb87e2af542eb6f1384,bd68f5a6e72f8ff687584ba2eb261255386cd30f,b85e0a8ce64c8c94672a0819758f6303e5a0128f,92cd2eb729a6436d72f13956157ae0310f50458e +e3eb6e43120a30dec93d7f1f1c5a445aa4caacca,fcdeba58fddcd9c2d3aa0ad43b6114b8fa30fcac,e34e351e2652def647f9c016fb688e948e42ec27,794f355edc5d917e82912a1ce5f5f8024a04f0e2,db7dc1a8458847f92c7f243fb5034006e7836880 +908cff151c7bc8539772ad4c7745b14cdeaa86a9,1bef61434673cc06a8c2f353ea47900005e5b723,d1f97b35b669783f41e22b916dc241d6cdc0909d,263e83bf4757e09f88e81c92d25af611491c3c97,213db74267a4a5da65cfc982498828464928b02e +0c5d019502e5547a92405e47e2088a02294c379f,a32807d675cc7df14e7cd981dc75f8ab5ce8c632,dcee3046fbbcea41688c29b1b7757362b1f357d7,7e1c3a08601add585e56805fa5904647b48da72a,8df9a8c10f3891b7200dde8f02be1f332f68af54 +a2db01110e38591d661354aab07be0bfac5df350,4dc5d70d8bccd61103308579614979481f7711b9,85aaca8b91bb43b335efe5dce9d200a420c4ab2c,233ec0f8a8d2edc65944fb7f871df3c6b72bdcae,c46cb156e8b8414da274910f3f071ea934b799ef +632761c51718dfb7cbf3b971e644c96504b179ec,66fa37cbb4385ad7571a44591ca6429d7280565e,46aa2cf0e2f6b3de482ff764677a029496ec23d7,8ffa9cdd68bd537084785a17fc65bb8220183118,caab0f9e613b8f072290bca3ddc61ecfff8c738c +76f01e9b8636eedb840d9ead5a5cd220dcc4f748,af557f4c228c1e415a0fca6556372f739bf58a79,d1fa4f12402ab057a2ad3bf689ab588533895842,5d5058661901d07e26d44e0d2d12cfcbeb71068a,045613611889bd1097bf3375a10e9fab84d244ec +91b48b27a4d53dcf0246a293da757fa71ee70c77,46e739cf5a4e9e2fc3a153296405dcd4a36449de,7747b04179803ff67aaba4484e8d7b5526042428,b2d9246c9ccc98a300963350cb696e825f3debe9,06f8364e28c4227fa0ffb243f591331661bb5130 +e796bb929035e4334987c261a29aafe608de2378,6e8b69b6e1388c76a7a54fe4569a3760d801cea5,653ca63a27f78d00dc643412977805ec849aaffa,65eec56a6b2b5a9b05e88c69618355a4286fa4be,91de589268b4e0a212910c60dd5cb966e7563b17 +03694ed965cc57abba9313be6fab1faf61313912,94db17a7a28f2fa0aeb9735d0c84489cf14b2bb3,34b446359665a509dc9270b70a9c0887e93562df,9a4676f1350edde5803d8a81b5105dd805789a00,c95596c98757107c9822c64bdc93d3dbe342556d +9cc81d18dfff63a25a51fd644f26457f89c734cc,b85315888b8ed4a9e1e3da60a6f3c677a92461d9,ac23cee423d5beb88571d795fecaedb61af23010,fb6c935452ff8445050c8bfb5b8b3eec47f83d0c,00d3a641e565eb54fc3098fa8f7ee2bd4966c6f0 +07b8825a50b74c5f240bc1f675c8979598137906,1c3e5a8de32b6d2b67ebba73d8c1333e2f9c342b,f8384c9d0da5a083c1ba81f54526357cfe8d1eef,39034cf7b0fb75d1f030bec0ecfdcf4268a9b817,9fe8ed306878b8c5a6b54c95e7bacf473d58ae4b +7de8edefa350bdefbfe1f77b234eb6ff61e80bef,b631a7cc775ac4ade1e36e5d339adb72f09cde59,e7d8c0dbe949036e201bd5f3256b4e88021d0c71,420a087703b0f76cb7fb5366f0746a503119ce1c,ae5ce23af1961937ba6f5e17088552ab4ce872bb +918fe783dcd5f5331ce1c69e5b4b9a31d09bd982,4ff1f4a5b8ea5191143c3716c567f9377f21e0dd,4e79f168a3367953bdafa6f019122a9c6d0d081c,bb1f5ffd73c8dcfe830bcd75b4e07ec77556aa90,83cb1a60b7326402a07fa28408168f73c1b634fc +a9dd04a10e151f4e0874bd9f55c5ec969fa48fe3,43af8a35e466a05ebd3076efa1ae4b4bc79ce983,1d71069ca378a3c494832278acd8c861d6507e1c,50431af79cf4f04cc122d2bf0fd1b5fd346c2b85,3e671678ed69cddeca3c8dec5f317fcef4b0626e +14c8df2edc36fd5a8fe0d2c242278c97ec4874f7,847e091a7db9b615436a558d769d3210ac48f4b5,b92573d2189b1dd02dd4020e8dca6e27e3526f60,a6fb2515971085dfc65533713641e052ae0550c9,e3726d0c8876a7999639913c95b18ccaa04a99a9 +af68cebc48797a15eeafb07a7b5f7ebb10b1c083,6295497fdab40d95e2f145ba06da6e0d25867b46,a809b13546972d94fc5f27332780c862e4935727,91bad1305e5946f9c3be229a5e4ea7e773678569,5d9723662226a86dc44e47dabf844c4131fadf11 +e29840b777c87632fdd4a7fbaef916952c0c475f,3f3e770bedc6a1408b4e38ff818ded26a32f127c,29f5158d3e93304679ba68e5682e8ed56e01ee4c,da221a9777163fe4c7fd01e5765b0df071e781ce,b402070818e224146a5e94cafad3071db55ef37a +8ce85845f8b0cdf9ee9894cde7557c3025c0b8e1,3658d1b3b0737609675d358ef31b6d2c8f9607e8,e74371dfb780a2bdf96ae9d1ba39f9b4aaa84c4b,58d45374b775937f8f0c4a5ccdbb608197a0fa96,1f20168a591c5bc7d4bdced6fc1d81e0945e5f56 +888d891c2a45e9d8823dc34a5498ce620c2838f6,599410596c2ebb1c72f79edc07affc21925cc257,390388508f5a6039dd59e7512a7377aff97e3754,2731a536122cbbecaddb124b299b6bd557c7c29e,259f272bfa47da1e882fc1b44ee23601555e2073 +e971d79c58f075fccf26fd0ee8c42422a502cee2,828cbbecfa12d6c480ec62fc21a926543e991798,46b399033b3d96208ff56ac043c05948f5fc61bd,0c9cae02602c76c6c460a42eda6ab3f51e68e415,63339ae8d79e9347515e284b05073d0a47ae6d58 +1c73ece8da1bcc14d8d15e23c87027e913bc4bde,dd71047fed6f86f518c6f66a6ee449971ed3cef5,6f04a2e335e807012f58147610dc9d9c6c474426,36efa4dd76ef64f762a6445a0cdc85f98d286ad8,e62194bc15202d826446c0c4e6c1a143c15ec314 +6bb78e3324be517e7a1541f6bff235b9f818847d,981070d53771e5d798478a0f7cfd049d3c467f8f,f2a3beb00509b60b0265f8932efc6c921671a04e,1d8d2b317ecb422cb033892e02f899689d53e29b,7492365615ac6d5750d418f370fb2eb565eef3fb +cc910d8be292ba4cf2c6441e51f493cd348e7a52,0b27a1a2ab9f2d4044499a5fbf82b8a846fb427a,0ca9ae6859c3850496fc1d1f361fd71eeed1e034,415caa01f42b51b4046b7bfb6f78b939cecfc891,256f17f11d706db1dffe817610e44b54002cda7d +5f42a375129ff41889efdabef2437f2fb9275341,1816db403727307aae34d480ca13deb32248486a,db8ecc14fe6fb4c3d2cb00865f44a7183f32ec39,ece72c3df061d3963dfc6c8aa44d8019577dbf8e,75d9565967c503b1d155590135e69f1dff3d0600 +297575f1f3f8a8538b6bb524d5456c18b13772c6,49c1bc94b240ff64a9c149d9eeb5ad98b7dec07b,8a51b330982d7b8a5b5625f4e6b340c2db6a2a5a,8f56c1f4fb56125eaa58ae1fd8f063d19421f054,5a0dfadad6fbbe0a4ff1bf2e2539d55e881940d8 +02f2c55a8dea17386c602c89f9d622928fc39899,55d6a57c83cf69f9cf85711a03e3c8780d002474,16dd932ea4e0d684680b3e9f8a7d863d19a1302c,7ebecb54a7d93dd55964ff23fb411de7a23d208a,aaf3ae2037126def3fe0ef25011c227bd683c960 +fe07d9c9510a299ce845251d09a281892132f74c,76f0fedc6250c1269fc479025b6628757d6f9c93,b47384e12ee1bd0bb05902966a5a1abf3b3eb882,df68d32eb452ef4f72448c3c79abd30532c40d87,3a8b11a5af523eec11a6749b0e42823844a19c67 From 438ffcb156c43c67234e475638e0557e58937adc Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Sun, 23 Apr 2023 17:04:32 -0400 Subject: [PATCH 24/61] refactoring backend.py - cleaning it up somewhat --- src/vtp/web/api/backend.py | 116 +++++------------- src/vtp/web/api/main.py | 38 +++++- .../api/{data => mock-data}/blank-ballot.json | 0 .../api/{data => mock-data}/cast-ballot.json | 0 .../web/api/{data => mock-data}/favicon.ico | Bin .../api/{data => mock-data}/receipts.26.csv | 0 6 files changed, 65 insertions(+), 89 deletions(-) rename src/vtp/web/api/{data => mock-data}/blank-ballot.json (100%) rename src/vtp/web/api/{data => mock-data}/cast-ballot.json (100%) rename src/vtp/web/api/{data => mock-data}/favicon.ico (100%) rename src/vtp/web/api/{data => mock-data}/receipts.26.csv (100%) diff --git a/src/vtp/web/api/backend.py b/src/vtp/web/api/backend.py index 5e77c04..e386646 100644 --- a/src/vtp/web/api/backend.py +++ b/src/vtp/web/api/backend.py @@ -32,8 +32,8 @@ import csv import json -import os +from vtp.core.common import Common from vtp.ops.accept_ballot_operation import AcceptBallotOperation from vtp.ops.cast_ballot_operation import CastBallotOperation from vtp.ops.setup_vtp_demo_operation import SetupVtpDemoOperation @@ -48,78 +48,35 @@ class VtpBackend: # backend demo constants ######## # set mock mode - _MOCK_MODE = True - # where the ElectionData repo is - _DEFAULT_ELECTIONDATA = "VTP-mock-election.US.13" + _MOCK_MODE = False # where the blank ballot is stored for the spring demo - # pylint: disable=line-too-long - _MOCK_BLANK_BALLOT = "GGOs/states/Massachusetts/GGOs/towns/Concord/blank-ballots/json/000,001,002,003,ballot.json" + _MOCK_BLANK_BALLOT = "mock-data/blank-ballot.json" # where the cast-ballot.json file is stored for the spring demo - _MOCK_CAST_BALLOT = "receipts/cast-ballot.json" + _MOCK_CAST_BALLOT = "mock-data/cast-ballot.json" # where the ballot-check is stored for the spring demo - _MOCK_BALLOT_CHECK = "receipts/receipts.26.csv" + _MOCK_BALLOT_CHECK = "mock-data/receipts.26.csv" _MOCK_VOTER_INDEX = 26 # default guid - making one up _MOCK_GUID = "01d963fd74100ee3f36428740a8efd8afd781839" + # default mock receipt log + _MOCK_VERIFY_BALLOT_RECEIPT_LOG = "Hello World" + # default mock tally log + _MOCK_TALLY_CONTESTS_LOG = "Good Morning" # backend verbosity _VERBOSITY = 3 - - # Class variables - _election_data_dir = None - _mock_blank_ballot = None - _mock_cast_ballot = None - _mock_ballot_check = None - - @staticmethod - def set_election_data(): - """Will set _election_data_dir or raise an error""" - # Just return if already set - if VtpBackend._election_data_dir: - return - # Start wherever here is - cur_dir = os.getcwd() - while True: - file_list = os.listdir(cur_dir) - parent_dir = os.path.dirname(cur_dir) - if VtpBackend._DEFAULT_ELECTIONDATA in file_list: - # bingo - VtpBackend._election_data_dir = os.path.join( - cur_dir, - VtpBackend._DEFAULT_ELECTIONDATA, - ) - VtpBackend._mock_blank_ballot = os.path.join( - VtpBackend._election_data_dir, - VtpBackend._MOCK_BLANK_BALLOT, - ) - VtpBackend._mock_cast_ballot = os.path.join( - VtpBackend._election_data_dir, - VtpBackend._MOCK_CAST_BALLOT, - ) - VtpBackend._mock_ballot_check = os.path.join( - VtpBackend._election_data_dir, - VtpBackend._MOCK_BALLOT_CHECK, - ) - break - # if dir is root dir, raise error - if cur_dir == parent_dir: - raise OSError( - f"The ElecationData directory ({VtpBackend._DEFAULT_ELECTIONDATA}) " - "was not found prior to reaching the root (/) of the filesystem" - ) - # continue walking up - cur_dir = parent_dir + # backend default address + _ADDRESS = "123, Main Street, Concord, Massachusetts" @staticmethod def get_vote_store_id() -> str: """ Endpoint #1: will return a vote_store_id, a.k.a. a guid """ - VtpBackend.set_election_data() if VtpBackend._MOCK_MODE: # in mock mode there is no guid - make one up return VtpBackend._MOCK_GUID operation = SetupVtpDemoOperation( - election_data_dir=VtpBackend._election_data_dir, + election_data_dir=Common.get_generic_ro_edf_dir(), verbosity=VtpBackend._VERBOSITY, ) return operation.run(guid_client_store=True) @@ -130,36 +87,40 @@ def get_empty_ballot(vote_store_id: str) -> dict: Endpoint #2: given an existing guid, will return the blank ballot """ - VtpBackend.set_election_data() if VtpBackend._MOCK_MODE: # in mock mode there is no guid - make one up - with open(VtpBackend._mock_blank_ballot, "r", encoding="utf8") as infile: + with open(VtpBackend._MOCK_BLANK_BALLOT, "r", encoding="utf8") as infile: json_doc = json.load(infile) # import pdb; pdb.set_trace() return json_doc # Cet a (the) blank ballot from the backend operation = CastBallotOperation( - guid=vote_store_id, + election_data_dir=Common.get_guid_based_edf_dir(vote_store_id), verbosity=VtpBackend._VERBOSITY, ) return operation.run( - blank_ballot=VtpBackend._MOCK_BLANK_BALLOT, + an_address = VtpBackend._ADDRESS, return_bb=True, ) + @staticmethod + def get_all_guid_workspaces() -> list: + """ + Will return a list of all the existing guid workspaces + """ + return SetupVtpDemoOperation.get_all_guid_workspaces() + @staticmethod def mock_get_cast_ballot() -> dict: """Mock only - return a static cast ballot""" - VtpBackend.set_election_data() - with open(VtpBackend._mock_cast_ballot, "r", encoding="utf8") as infile: + with open(VtpBackend._MOCK_CAST_BALLOT, "r", encoding="utf8") as infile: json_doc = json.load(infile) - return json_doc + return json_doc @staticmethod def mock_get_ballot_check() -> tuple[list, int]: """Mock only - return a static cast ballot""" - VtpBackend.set_election_data() - with open(VtpBackend._mock_ballot_check, "r", encoding="utf8") as infile: + with open(VtpBackend._MOCK_BALLOT_CHECK, "r", encoding="utf8") as infile: csv_doc = list(csv.reader(infile)) return csv_doc, VtpBackend._MOCK_VOTER_INDEX @@ -169,13 +130,12 @@ def cast_ballot(vote_store_id: str, cast_ballot: dict) -> dict: Endpoint #3: will cast (upload) a cast ballot and return the ballot-check and voter-index """ - VtpBackend.set_election_data() if VtpBackend._MOCK_MODE: # Just return a mock ballot-check and voter-index return VtpBackend.mock_get_ballot_check() # handle the incoming ballot and return the ballot-check and voter-index operation = AcceptBallotOperation( - guid=vote_store_id, + election_data_dir=Common.get_guid_based_edf_dir(vote_store_id), verbosity=VtpBackend._VERBOSITY, ) return operation.run( @@ -183,39 +143,28 @@ def cast_ballot(vote_store_id: str, cast_ballot: dict) -> dict: merge_contests=True, ) - @staticmethod - def mock_get_verify_ballot_string() -> str: - """Return a mock tally string""" - return "Hello World" - @staticmethod def verify_ballot_check( vote_store_id: str, incoming_json: dict, ) -> str: """ - Endpoint $4: will verify a ballot-check and vote-inded, returning an + Endpoint #4: will verify a ballot-check and vote-inded, returning an undefined string at this time. """ - VtpBackend.set_election_data() if VtpBackend._MOCK_MODE: # Just return a mock verify ballot string - return VtpBackend.mock_get_verify_ballot_string() + return VtpBackend._MOCK_VERIFY_BALLOT_RECEIPT_LOG # handle the incoming ballot and return the ballot-check and voter-index operation = VerifyBallotReceiptOperation( - guid=vote_store_id, + election_data_dir=Common.get_guid_based_edf_dir(vote_store_id), ) return operation.run( - receipt_csv=incoming_json["ballot-check"], + receipt_data=incoming_json["ballot-check"], row=incoming_json["vote-index"], cvr=True, ) - @staticmethod - def mock_get_tally_string() -> str: - """Return a mock tally string""" - return "Good Morning" - @staticmethod def tally_election_check( vote_store_id: str, @@ -225,13 +174,12 @@ def tally_election_check( Endpoint #5: will verify a ballot-check and vote-inded, returning an undefined string at this time. """ - VtpBackend.set_election_data() if VtpBackend._MOCK_MODE: # Just return a mock tally string - return VtpBackend.mock_get_tally_string() + return VtpBackend._MOCK_TALLY_CONTESTS_LOG # handle the incoming ballot and return the ballot-check and voter-index operation = TallyContestsOperation( - guid=vote_store_id, + election_data_dir=Common.get_guid_based_edf_dir(vote_store_id), verbosity=incoming_json["verbosity"], ) return operation.run( diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 4cb09cc..9ed14f0 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -1,7 +1,7 @@ """API endpoints for the VoteTrackerPlus backend""" -from backend import VtpBackend from fastapi import FastAPI +from backend import VtpBackend app = FastAPI() @@ -39,8 +39,36 @@ async def get_empty_ballot(vote_store_id: str) -> dict: return {"error": "VoteStoreID not found"} +# for testing - reuse a guid +@app.get("/reuse/{vote_store_id}") +async def reuse_guid(vote_store_id: str) -> dict: + """Reuse a pre-existing guid workspace""" + + vote_store_ids[vote_store_id] = "uncast" + return {"VoteStoreID": vote_store_id} + +# for testing - show a mock cast ballot +@app.get("/show-mock-ballot") +async def show_mock_cast_ballot() -> dict: + """Print a mock cast ballot""" + + a_cast_ballot = VtpBackend.mock_get_cast_ballot() + return {"cast-ballot": a_cast_ballot} + +@app.get("/restore-existing-guids") +async def restore_existing_guids() -> dict: + """Will restore the existing vote_store_id's""" + guids = VtpBackend.get_all_guid_workspaces() + for guid in guids: + vote_store_ids[guid] = "restored" + return { "restored": guids } + +# To manually test endpoint #3 +# pylint: disable=line-too-long +# curl -i -X POST -H 'Content-Type: application/json' -d '{"active_ggos":[".","GGOs/states/Massachusetts","GGOs/states/Massachusetts/GGOs/counties/Middlesex","GGOs/states/Massachusetts/GGOs/towns/Concord"],"ballot_filename":"000,001,002,003,ballot.json","ballot_node":"GGOs/states/Massachusetts/GGOs/towns/Concord","ballot_subdir":"GGOs/states/Massachusetts/GGOs/towns/Concord","contests":{"GGOs/states/Massachusetts":[{"US president":{"choices":[{"name":"Circle Party Ticket","ticket_names":["Rey Skywalker","Obi-Wan Kenobi"]},{"name":"Square Party Ticket","ticket_names":["Atticus Finch","Hermione Granger"]},{"name":"Triangle Party Ticket","ticket_names":["Evelyn Quan Wang","Waymond Wang"]}],"contest_type":"ticket","selection":["2: Triangle Party Ticket","1: Square Party Ticket"],"tally":"rcv","ticket_offices":["President","Vice President"],"uid":"0000"}},{"US senate":{"choices":[{"name":"Anthony Alpha","party":"Circle Party"},{"name":"Betty Beta","party":"Pentagon Party"},{"name":"Gloria Gamma","party":"Square Party"},{"name":"David Delta","party":"Triangle Party"},{"name":"Emily Echo","party":"Ellipse Party"},{"name":"Francis Foxtrot","party":"Octagon Party"}],"selection":["5: Francis Foxtrot","3: David Delta","1: Betty Beta"],"tally":"rcv","uid":"0001"}},{"governor":{"choices":[{"name":"Spencer Cogswell","party":"Circle Party"},{"name":"Cosmo Spacely","party":"Triangle Party"}],"max":1,"selection":["1: Cosmo Spacely"],"tally":"plurality","uid":"0002"}}],"GGOs/states/Massachusetts/GGOs/counties/Middlesex":[{"County Clerk":{"choices":["Jean-Luc Picard","Katniss Everdeen","James T. Kirk"],"max":1,"selection":["0: Jean-Luc Picard"],"tally":"plurality","uid":"0003"}}],"GGOs/states/Massachusetts/GGOs/towns/Concord":[{"Question 1 - should the starting time of the annual town meeting be moved to 6:30PM?":{"choices":["yes","no"],"description":"Should the Town of Concord start the annual Town Meeting at 6:30PM instead of 7:00PM?\n","max":1,"selection":["0: yes"],"tally":"plurality","uid":"0004"}}]}}' http://127.0.0.1:8000/cast-ballot/01d963fd74100ee3f36428740a8efd8afd781839 + # Endpoint #3 -@app.post("/vote/cast-ballot/{vote_store_id}") +@app.post("/cast-ballot/{vote_store_id}") async def cast_ballot( vote_store_id: str, incoming_json: dict = None, @@ -52,7 +80,7 @@ async def cast_ballot( # import pdb; pdb.set_trace() if vote_store_id in vote_store_ids: - if vote_store_ids[vote_store_id] == "uncast": + if vote_store_ids[vote_store_id] != "cast": ballot_check, vote_index = VtpBackend.cast_ballot( vote_store_id, incoming_json, @@ -64,7 +92,7 @@ async def cast_ballot( # Endpoint #4 -@app.post("/vote/verify-ballot-check/{vote_store_id}") +@app.post("/verify-ballot-check/{vote_store_id}") async def verify_ballot_check( vote_store_id: str, incoming_json: dict = None, @@ -85,7 +113,7 @@ async def verify_ballot_check( # Endpoint #5 -@app.post("/vote/tally-election/{vote_store_id}") +@app.get("/tally-election/{vote_store_id}/{contest}/{digests}") async def tally_election( vote_store_id: str, incoming_json: dict = None, diff --git a/src/vtp/web/api/data/blank-ballot.json b/src/vtp/web/api/mock-data/blank-ballot.json similarity index 100% rename from src/vtp/web/api/data/blank-ballot.json rename to src/vtp/web/api/mock-data/blank-ballot.json diff --git a/src/vtp/web/api/data/cast-ballot.json b/src/vtp/web/api/mock-data/cast-ballot.json similarity index 100% rename from src/vtp/web/api/data/cast-ballot.json rename to src/vtp/web/api/mock-data/cast-ballot.json diff --git a/src/vtp/web/api/data/favicon.ico b/src/vtp/web/api/mock-data/favicon.ico similarity index 100% rename from src/vtp/web/api/data/favicon.ico rename to src/vtp/web/api/mock-data/favicon.ico diff --git a/src/vtp/web/api/data/receipts.26.csv b/src/vtp/web/api/mock-data/receipts.26.csv similarity index 100% rename from src/vtp/web/api/data/receipts.26.csv rename to src/vtp/web/api/mock-data/receipts.26.csv From 03dc39071df3c336b58203a4b16ae89b3a68f62f Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Mon, 24 Apr 2023 12:35:26 -0400 Subject: [PATCH 25/61] another checkpoint at the tailend of the initial refactoring --- src/vtp/web/api/backend.py | 59 ++++++++++++++----- src/vtp/web/api/main.py | 40 +++++++++++-- .../{receipts.26.csv => receipt.26.csv} | 0 src/vtp/web/api/mock-data/receipt.70.json | 1 + 4 files changed, 78 insertions(+), 22 deletions(-) rename src/vtp/web/api/mock-data/{receipts.26.csv => receipt.26.csv} (100%) create mode 100644 src/vtp/web/api/mock-data/receipt.70.json diff --git a/src/vtp/web/api/backend.py b/src/vtp/web/api/backend.py index e386646..d62224e 100644 --- a/src/vtp/web/api/backend.py +++ b/src/vtp/web/api/backend.py @@ -37,6 +37,7 @@ from vtp.ops.accept_ballot_operation import AcceptBallotOperation from vtp.ops.cast_ballot_operation import CastBallotOperation from vtp.ops.setup_vtp_demo_operation import SetupVtpDemoOperation +from vtp.ops.show_contests_operation import ShowContestsOperation from vtp.ops.tally_contests_operation import TallyContestsOperation from vtp.ops.verify_ballot_receipt_operation import VerifyBallotReceiptOperation @@ -54,16 +55,16 @@ class VtpBackend: # where the cast-ballot.json file is stored for the spring demo _MOCK_CAST_BALLOT = "mock-data/cast-ballot.json" # where the ballot-check is stored for the spring demo - _MOCK_BALLOT_CHECK = "mock-data/receipts.26.csv" + _MOCK_BALLOT_CHECK = "mock-data/receipt.26.csv" _MOCK_VOTER_INDEX = 26 + # a mock contest content + _MOCK_CONTEST_CONTENT = "mock-data/mock_contest.json" # default guid - making one up _MOCK_GUID = "01d963fd74100ee3f36428740a8efd8afd781839" # default mock receipt log _MOCK_VERIFY_BALLOT_RECEIPT_LOG = "Hello World" # default mock tally log _MOCK_TALLY_CONTESTS_LOG = "Good Morning" - # backend verbosity - _VERBOSITY = 3 # backend default address _ADDRESS = "123, Main Street, Concord, Massachusetts" @@ -77,7 +78,6 @@ def get_vote_store_id() -> str: return VtpBackend._MOCK_GUID operation = SetupVtpDemoOperation( election_data_dir=Common.get_generic_ro_edf_dir(), - verbosity=VtpBackend._VERBOSITY, ) return operation.run(guid_client_store=True) @@ -96,7 +96,6 @@ def get_empty_ballot(vote_store_id: str) -> dict: # Cet a (the) blank ballot from the backend operation = CastBallotOperation( election_data_dir=Common.get_guid_based_edf_dir(vote_store_id), - verbosity=VtpBackend._VERBOSITY, ) return operation.run( an_address = VtpBackend._ADDRESS, @@ -136,7 +135,6 @@ def cast_ballot(vote_store_id: str, cast_ballot: dict) -> dict: # handle the incoming ballot and return the ballot-check and voter-index operation = AcceptBallotOperation( election_data_dir=Common.get_guid_based_edf_dir(vote_store_id), - verbosity=VtpBackend._VERBOSITY, ) return operation.run( cast_ballot_json=cast_ballot, @@ -146,7 +144,9 @@ def cast_ballot(vote_store_id: str, cast_ballot: dict) -> dict: @staticmethod def verify_ballot_check( vote_store_id: str, - incoming_json: dict, + ballot_check: list, + vote_index: int, + cvr: bool = False, ) -> str: """ Endpoint #4: will verify a ballot-check and vote-inded, returning an @@ -158,21 +158,22 @@ def verify_ballot_check( # handle the incoming ballot and return the ballot-check and voter-index operation = VerifyBallotReceiptOperation( election_data_dir=Common.get_guid_based_edf_dir(vote_store_id), + stdout_printing=False, ) return operation.run( - receipt_data=incoming_json["ballot-check"], - row=incoming_json["vote-index"], - cvr=True, + receipt_data=ballot_check, + row=str(vote_index), + cvr=cvr, ) @staticmethod def tally_election_check( vote_store_id: str, - incoming_json: dict, + contests: str, + digests: str, ) -> str: """ - Endpoint #5: will verify a ballot-check and vote-inded, - returning an undefined string at this time. + Endpoint #5: will tally an election and print stuff """ if VtpBackend._MOCK_MODE: # Just return a mock tally string @@ -180,9 +181,35 @@ def tally_election_check( # handle the incoming ballot and return the ballot-check and voter-index operation = TallyContestsOperation( election_data_dir=Common.get_guid_based_edf_dir(vote_store_id), - verbosity=incoming_json["verbosity"], + stdout_printing=False, ) + if digests == "None": + digests = "" + if contests == "None": + contests = "" return operation.run( - contest_uid=incoming_json["contest-uids"], - track_contests=incoming_json["track-contests"], + contest_uid=contests, + track_contests=digests, + ) + + @staticmethod + def show_contest( + vote_store_id: str, + contests: str, + ) -> dict: + """ + Endpoint #6: display the contents of one or more contests + """ + if VtpBackend._MOCK_MODE: + # Just return a mock contest + with open(VtpBackend._MOCK_CONTEST_CONTENT, "r", encoding="utf8") as infile: + json_doc = json.load(infile) + return json_doc + # handle the show_contest + operation = ShowContestsOperation( + election_data_dir=Common.get_guid_based_edf_dir(vote_store_id), + stdout_printing=False, + ) + return operation.run( + contest_check=contests ) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 9ed14f0..2a50f4f 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -71,7 +71,7 @@ async def restore_existing_guids() -> dict: @app.post("/cast-ballot/{vote_store_id}") async def cast_ballot( vote_store_id: str, - incoming_json: dict = None, + incoming_json: dict, ) -> dict: """ Uploads the ballot; the backend accepts it, merges it, and returns @@ -95,7 +95,7 @@ async def cast_ballot( @app.post("/verify-ballot-check/{vote_store_id}") async def verify_ballot_check( vote_store_id: str, - incoming_json: dict = None, + incoming_json: dict, ) -> dict: """ Will verify the ballot-check and voter-id. Return values are TBD @@ -103,32 +103,60 @@ async def verify_ballot_check( """ # import pdb; pdb.set_trace() + ballot_check = incoming_json["ballot-check"] + vote_index = incoming_json["vote-index"] if vote_store_id in vote_store_ids: ballot_check_doc = VtpBackend.verify_ballot_check( vote_store_id, - incoming_json, + ballot_check, + vote_index, ) return {"ballot-check-doc": ballot_check_doc} return {"error": "VoteStoreID not found"} # Endpoint #5 -@app.get("/tally-election/{vote_store_id}/{contest}/{digests}") +@app.get("/tally-election/{vote_store_id}/{contests}/{digests}") async def tally_election( vote_store_id: str, - incoming_json: dict = None, + contests: str, + digests: str, ) -> dict: """ Will execute the tally, optionally limited to a list of contests, tracking an optional list of digests, with an optional verbosity level. + + The contests and digests fields are optional but must be a comma + separated string (no spaces). If not specified they should be the + string "None". """ # import pdb; pdb.set_trace() if vote_store_id in vote_store_ids: tally_election_doc = VtpBackend.tally_election_check( vote_store_id, - incoming_json, + contests, + digests, ) return {"tally-election-doc": tally_election_doc} return {"error": "VoteStoreID not found"} + +# Endpoint #6 +@app.get("/show-contest/{vote_store_id}/{contests}") +async def show_contest( + vote_store_id: str, + contests: str, +) -> dict: + """ + Will display the CVR contents of one or more contests + """ + + # import pdb; pdb.set_trace() + if vote_store_id in vote_store_ids: + show_contest_doc = VtpBackend.show_contest( + vote_store_id, + contests, + ) + return {"show-contest-doc": show_contest_doc} + return {"error": "VoteStoreID not found"} diff --git a/src/vtp/web/api/mock-data/receipts.26.csv b/src/vtp/web/api/mock-data/receipt.26.csv similarity index 100% rename from src/vtp/web/api/mock-data/receipts.26.csv rename to src/vtp/web/api/mock-data/receipt.26.csv diff --git a/src/vtp/web/api/mock-data/receipt.70.json b/src/vtp/web/api/mock-data/receipt.70.json new file mode 100644 index 0000000..a4a4474 --- /dev/null +++ b/src/vtp/web/api/mock-data/receipt.70.json @@ -0,0 +1 @@ +{"ballot-check":[["0000 - US president","0001 - US senate","0002 - governor","0003 - County Clerk","0004 - Question 1 - should the starting time of the annual town meeting be moved to 6:30PM?"],["86e6b7d717c938cafb363b7a563a322fe34a99eb","b959a01161c9e0804efebeb895bf1dd422d11b01","46e34bbb476181210eb817020b8671606c779e7f","e06eb0e7881104a0de44ba4e5f4c0167c8a9438b","8df9a8c10f3891b7200dde8f02be1f332f68af54"],["de3d4d2d506a2af28cfa047e44adec58d1a2bfed","9213f10c20c0b9fca35bd2314c1983861aaca2db","d235c458d2de8747cc993b38c6b097e5c945cb43","d89067fc9a5f3f933542f9e6d2e13944d77f2cc9","4101d24db5cebe623826f4073292a0065d0bda50"],["297575f1f3f8a8538b6bb524d5456c18b13772c6","2120a6983fa33639459d94b609a26816e147a4b7","5c54c3c7b38f3745fc9b60a760d4b894e78004cb","ad27ebe01210a91085aa57c00a2ea16a02b1289f","1a79fe20da03ca2b6ce5f30310a0ed3233eb46bf"],["6cef89f39bc4821555c3bde3fbf99910e6a3234b","76f0fedc6250c1269fc479025b6628757d6f9c93","57b371423850a73b9a702f6c5daafbc1d9cab3d4","b8320e336566bad1ecd7f9b3df3dc668f62eba3e","6b3badd633b75e64bf88c4807625b66df324ef9e"],["d24f3ee9972e2f50baac63d899f953c71c8c0cb9","a106be04a016e87cee175d6e9f7f4aaf89124c62","26765c4cfff6560a0b0cce2ce80e09f82770796c","bf555b66e75d5af962d48f83c95f5a48dd8a0a07","7492365615ac6d5750d418f370fb2eb565eef3fb"],["1e9459a22deb0df29d538e0d390a744916d3b2b7","569c7fde6a897869454991fe0248b5fa59d2ae9f","c948a560199c6d2b154e78928caafbf6b80e98e4","766ed58a2c9f03d4fad8bfb7774b16d2c1746b0a","af88c339a1ce37aa0b0bc76f547cffe56e585b41"],["cff1bcdf2ed8db019168ed8fe6b19109da8d896b","6fe283850e70eab533ff5d97f2532273ca4f1fa9","2496028871b6c6de264892f8ba7d95a7ced3fdaa","491dd5285a71553efd075cfec7c74a3d41280d89","c46cb156e8b8414da274910f3f071ea934b799ef"],["b6958904cf91617909c9b3c7c52b8e3036e7e203","9c15fff96725912a0b5f14ad7981ff180db286ef","16dd932ea4e0d684680b3e9f8a7d863d19a1302c","fd1d56ba14e9ac68f1d73491e214bded356877e9","348a8d02a4023a35efb81b25c7785959968f54d2"],["c51d126c8c54aa7401f48cfe4e754dba2eabfdde","580565a61bddb114d9c491891a00bf8fda9a395c","76dc213aae00d707c6c3a41e5e834173a54b00df","aeb7be39ad4062a1d1462e0a204406bdb902d5c8","936e8b4240e8d8b060151b64562955b6e93f79bc"],["6a04c59803be2a1250227935425f4f7b87d1a886","d064b503470173617777879aae01c6fdb02e4d68","eb1a10e100640ffadc4eddb5cec623c896f60ffc","9e497084c411e635d4b0f222f9e3e80582d081b9","36311563666ca0f8171476664aece739e927d6e5"],["9fe3b54e0512a1a3907ad32c131d733b479ca0ef","cdb82385949b3a97ff9dc0bf406af73ddce74f7b","ca6bb0f1febac74debf4a15a9fe19d3e7780fb1c","d65e8c81165c0e7d3a904fcad10ee6cfc15aeb96","259f272bfa47da1e882fc1b44ee23601555e2073"],["94d23db61819339f02d610c92ec322bced53ac58","1bef61434673cc06a8c2f353ea47900005e5b723","b08df56fdb175dbe43342a9b5a714750ba5df23d","e1e2024e3fc2cacfa0a20a94c25315a734552040","06f8364e28c4227fa0ffb243f591331661bb5130"],["6e0040c659c7923d57c2cd5ae1c9408737bc2baf","60b27dd6de6b511b2fb78a3522d57da14089e790","32f95d1cd4ccad5a081398560c7582119684f4c2","e22d02bd23c1d9258a4d711f966993638fed786c","1042f21c1047abef50cb479869c8f14d95df98c7"],["dcda1142758d2fa851fcad6fd244f3c9b719a8ed","49c1bc94b240ff64a9c149d9eeb5ad98b7dec07b","40ada0d67bffb53525bb7b774acfae2e5a30e534","1ad2d4b5db87fec574e2fc182408244bf54d2661","91de589268b4e0a212910c60dd5cb966e7563b17"],["e7888e991826f36d7716bfbfdaf92fd958ae0658","ea62744a1996ccf39dc11bcec0b31791f5d014d7","93d77693b51f9b0e23152884b4352ad098791250","cc4de6ac6af1a1e2e90d526aae7a8de152f0a187","7f5754765b43326524a83f9e80d52ce56ea1f379"],["3779fb3af7771212fce1966ad4301c9995557fd9","599410596c2ebb1c72f79edc07affc21925cc257","c1a9c1494998ac9e90b05aabf8f490391dde52fe","8f56c1f4fb56125eaa58ae1fd8f063d19421f054","64b72d95bfa2d509d8785afe3e45e165775c3c81"],["8ce85845f8b0cdf9ee9894cde7557c3025c0b8e1","c7e3e0d9c4bd4c4028ee1f4457a3005d1e721271","7dcad591eea4eb1c736255cd769f0223d58f02a6","22d84337607c916ae7fc47ef83b1a2c627e7897e","b8d76bf18c0002c7c004e32a2d395f3ee1344cd7"],["56cd4a55bec030093ab5b4e3ba9545744be7224f","d293af6d8af4f0957cb4d729ac20baddf7aba63a","b8f64dea764101680b2f5adbab2a1b34c1f44baa","b203962324f7ffe1c12aee4a586a7bea7805e57d","82c7f5273e3d6d3e86e417f3d981f08fb37fbc11"],["1f9d4a1c19f7eb67ab7a0e230b3b57b46d606694","0f3e52c0fdd6cf2c6b9ce98dda551fb0d2ada9a5","b47384e12ee1bd0bb05902966a5a1abf3b3eb882","cb0727e7c0cfa992abcdbc5dfffc54ac3e21d1d1","43b77eae4ba308dc4034c702edfe1f5782e33c1d"],["4b244371774a10aa187ade65c5ab2f69347b6d6e","0ea723717c36c23c585c27481b93968dcd3965a4","d69edddd5f2e3d6add1fd32cc173dc1adf6cf211","6a7b57cddb364e177f422aeb99fbed1b084a0025","ca5d34a5fcc96c88aad54e0f8f320a1655f840d2"],["e1bf7110f05c16a1c32600fb0d33cbac98099c23","4ff1f4a5b8ea5191143c3716c567f9377f21e0dd","c2ff0c1ee3067370d56b64eb65fb1a31c0420905","93aaf2d2f1637400c91d46c544faa16bd7c0d855","b5aee03dd7fcf9c222c7274465f64461b480b0aa"],["17c006a063089c4bdef1b7fddb8f78c1ad4a726e","d35e565caf111660f57fec5695dd41d824bb8b65","ec077789500c54ec21db877d67f822470af840da","a3c4a735d08d8e85e26036262b72782caa915b91","e35b533048f393704f939d28859e57aadc284e35"],["cc910d8be292ba4cf2c6441e51f493cd348e7a52","f92b09478c8b13db402e01431c292e81ee30f020","a7f96ed7e37bf2b321a9958eb792504736deccc2","65eec56a6b2b5a9b05e88c69618355a4286fa4be","086e6e0e25dcde19a5007238cff7542ab692d55c"],["34b71204eabc56b994b737e7744d3c3c6ab9b5e5","022f7c3e566ddda18058d0502ff98630fcbdbebe","85aaca8b91bb43b335efe5dce9d200a420c4ab2c","8ffa9cdd68bd537084785a17fc65bb8220183118","aaf3ae2037126def3fe0ef25011c227bd683c960"],["152c866ec3b52523fc2290396b61997dc74dc8c3","886fc80c39a962c4f9a5823f1ddb3dcd36b70bae","ff0a8b112a152eda726b38f95c80b974d3d08e94","415caa01f42b51b4046b7bfb6f78b939cecfc891","ddfd6d74fdc181c8467a040c3d40d1118cbc41a8"],["5332fce3b9a73d09b0c16110fbb87f97cf65037c","f0d6ce835b6e1bf5daa857ccf81e029ca91bd47e","e3080b30a49f6d1954a16199f1611273d97b8144","34474ad5f27c4705aa212cff67b724529380399f","656fe753f157d74f208eba879c1d9c6d191f6838"],["9780e866e6ea3e598aac79ca10b051c4a3819fe0","01a0600ef13587aa05e51c50e480a72375a6658e","bd68f5a6e72f8ff687584ba2eb261255386cd30f","31aff6836072be7b4f0884bb652215492ed548fa","67cdc91d57a48ba565c97adba8808d6c565d0fcf"],["25851902f635edffc9b24942cd206ae817af7534","0b27a1a2ab9f2d4044499a5fbf82b8a846fb427a","9d13d7477498c92de8c1b04ca71aa57ebca226a2","b9a731ba823884a58dcfd329bd09f1eeae08c984","08cdd84e9987c8ce0a71b71574f1f56524780933"],["c0374176bf87c15b956393fa5116b622961af4d0","f8791aad52adfe4cbabe7f5cbcb46819a13b673a","390388508f5a6039dd59e7512a7377aff97e3754","37c0b6b26af322aa9dfee93fa25ee6d726235e4b","2341e83d7e30352fc3b3ac1e238a3bd6c305be3a"],["96399be2deb0b3d278fb73b6e90fd3b4b67d413e","feb883fe297c18061c1a52eea7ad914483a36b45","69c3d37e8469a2642746c201a07d3afe7bea74fe","263e83bf4757e09f88e81c92d25af611491c3c97","f81753b32a3993f22723cc4a945d432c794ea5f8"],["c0aa94160d4d2ebe64dcf19455fc6cd53c212132","b85315888b8ed4a9e1e3da60a6f3c677a92461d9","fb624c12c3159972dbf7b61f4fc064db914703fc","f2f009629fbff1fcd0b3d1dec468ab5aa977df95","fd5226ff1776d5f811b132062f632b1ef0948e70"],["a2ec253fe9d1a1ae1425bcc1c77fb2b0fdd8064c","ca047f4da4fe6bb5e41b2ef54f489c2579439d59","b8fcc16c40a7e49a881af6e60e7fb1a9e1d04f40","d749c6230b632dcede90d310b7e20740b2e7d4be","0d1d78f54682cfb789e32d86f601d96cedc61fab"],["b9080a3e749796682b3a4bc75351887119d63873","85ea9d032d392f8fb889ba011af649813c710f95","e74371dfb780a2bdf96ae9d1ba39f9b4aaa84c4b","dbcfc6d7e38c6ea67531981761ecd00aedc26013","c4f5d13234459156ed98a172ed792cacfa78f818"],["632761c51718dfb7cbf3b971e644c96504b179ec","99e36264472b785314c60e1ffef1ac623f590c24","f798cdb60980173a5b46961342e57ea38c7477cc","90882803fc4991e51e2bc54676f1f4d79e4698af","3e6752062d36daaab7e6d44c6fa9c66ce454af95"],["7de8edefa350bdefbfe1f77b234eb6ff61e80bef","59b5d60409c00e0c928b4dd0e2d4c332c7cf0bfd","5d15a4d0dfb6bd7e9c50014645e7e5c6a2dfd5c6","66276e549ff8289cbaee10ab40e485b1e97ae1f3","5f0092563ed1a5f402f9b0f0fe1dcdd34e3e1bc3"],["3acb682215269af9957c81ee7adba26a1dc4bb5c","0049fb55f254e2ea2a1ede639e0175aecc801e1a","c756404c36be39df5844208c685c7be622a85680","bb1f5ffd73c8dcfe830bcd75b4e07ec77556aa90","3bf2329753f5b27018f4f34dac037bebada44ad7"],["73ad611c67b1ad0fa8187b949665c774495d9770","b0dc39f9b531a8d233a6c43eea31f02fe83a8a82","bd55ef9100df399da595a84096ade7d52efe52e9","311374e52d8406641c59cd4a6fbf873f7e789794","83cb1a60b7326402a07fa28408168f73c1b634fc"],["0ebdf954b78e0f636608616d8ab51433f7bc1323","b39dcfd404f8ac7b911e598395bfe901e1d4b355","5dfec946ae3cb0a9e9d8d6d6f5b0abae122135a8","079420c8b026b9915ba1e2e5ea4e4c2fd744d42e","c95596c98757107c9822c64bdc93d3dbe342556d"],["b4b4b0257642482a94662afd564a589e310bf1c1","847e091a7db9b615436a558d769d3210ac48f4b5","d85b7695243a12b8edb8ec50d5a0ba5b0a858ad1","ef7bb75e544c9914ecd31ce04f4c41d16a92485f","46e8626eed5ad6ca693757046774e337be0169a3"],["e971d79c58f075fccf26fd0ee8c42422a502cee2","a4e0e05b8f3550359d504fb8fd92d56d04536338","f8384c9d0da5a083c1ba81f54526357cfe8d1eef","23f4fe9e8d30b6a9f386a12c12fca44deb734977","9b393c0afb93e3610196ab6be45b3efc184a6b23"],["a88714a4afa3a7a6df4d64e9f4b364f42a954e6a","a03381cb2757fec52acdeb19ecc8904adc73bb43","f597bb8c68b7f07e32fba114f4d1ec892a651ad0","b2d9246c9ccc98a300963350cb696e825f3debe9","d6179887b43c9b14005b0b243f1247d676a126ba"],["aa14d541f444e64848d0def3a4703c7566c6d607","6a971a61c443de4d97b4edc7f510d984bc120833","a8c5b8230612005afd2c501d95906cc99520878c","9753a6126197696fe72de78ef329cc83492516df","75d9565967c503b1d155590135e69f1dff3d0600"],["dd38a5e25562bb75a320900e452e9b5a153a70c1","dc64f07035dfb1acb696f1d23e4e0ca4eca51e92","e93db4c43f8f7b83d5ee3a099468810961158a45","8f0ce4e850f374978140960509288549b21cbf9d","caab0f9e613b8f072290bca3ddc61ecfff8c738c"],["ce3b717ade65eda731ceae267b9553ffbf44ca35","539c5758e4063e21b8b74ceced65aa20d6b5b544","e34e351e2652def647f9c016fb688e948e42ec27","41d93700d5f25bd0dbc2db4dacddb0ea000adfae","cf679ce7a35cab40414c87cc17a7c7b6cf853cfc"],["cfe3543ecd36cb6264e4b9008dfcccda0b198de7","239aa38cd09d7872eda9a33c40a6bd309f09aeb8","d1fa4f12402ab057a2ad3bf689ab588533895842","a6fb2515971085dfc65533713641e052ae0550c9","59d3bfa2d55b6d7965805cf0e1c57bd1a820ff67"],["758687986af791566d8a50630ceddbfa058b3187","29f5cc079c3324e9eab704c802339ceadda19fe8","34b446359665a509dc9270b70a9c0887e93562df","d3497da59daf389395a6f37aad4ecf1eb583eafd","573a1679b4c2e4dfc2b3781bf49f6878fda32ceb"],["03694ed965cc57abba9313be6fab1faf61313912","fb2aa06f94958be767270849b4d169b6f941718e","db8ecc14fe6fb4c3d2cb00865f44a7183f32ec39","71c40d274fe2c1f5e2498861bccfae3ea1aa6042","5d9723662226a86dc44e47dabf844c4131fadf11"],["5653d034bc9dfcb1bd2a96463f7bba6a47888d03","6e8b69b6e1388c76a7a54fe4569a3760d801cea5","8a51b330982d7b8a5b5625f4e6b340c2db6a2a5a","bec7f8374a810526ad22dd98b96ba33b13d18afe","db7dc1a8458847f92c7f243fb5034006e7836880"],["a766aa847cc57efd313811ec992bbd9a17ec2b28","3658d1b3b0737609675d358ef31b6d2c8f9607e8","c85b2cf2c896c1da783aa652440cc74f36f32f96","66405365783b30fabd365ffbc45ea662b3eca57f","db71b3969645fd2d5b63fbbd258969c5bf6ba54d"],["999046dd56665c1d24a5087fa91babe3c24debb5","042449df1dc5ccfbdec8ac4ca253ebfe382b968c","b7ca39b4ab2e040423f6e10a17730ec8071abdf0","e6e965a10308aaa8f9488bc0b82352eeeb886141","d859501131460ad9db5dbf2b9f2f5f2812dd1831"],["a518adf9594ff081ce3e8302eab0c3200c38220a","96ad2cedfd2fde3aea5fe8d806dfefc19b8eb267","806b2e408d1a64dfd99c2b78716c53665c7d4203","f13772302ea946bf559cc183c2687bc19d859339","4db45ca1663a874d38a1cfa767313c9efe4f5218"],["10376a8c042b346251f46d5e5c57c54b42df01f5","713e7d669465c3ad227436702d49ebf0a5bc54dd","c5d8854e06586cc04f18012b8089dccb06db69f2","d21f0504cdeb339e59d8bc5d749632b68bdfd4a5","706ad4cf26d2344afafb30349a9bb6e6100e7422"],["408258409ee4f28e2b4d4f95c5a775047aecdeff","15000e1af3010f1264927a8c05c73160d2478f1c","08aadd1e7a1bcad52f4fbf7cc7d3bf4d54f4f19e","b85e0a8ce64c8c94672a0819758f6303e5a0128f","94653a2ab0632ff36b13bbb76178dcf024c53d36"],["3cd1e76f37682d9bcc2d53d30f8359694b6322d8","4daa4c2d78f6eba4acc0da708677fadbb0842585","b718b87bc151c2e4e84e0d63b09af9a7eee98ab8","52898f49245ab510e3ac0af70a4d82919b216589","c3bfd5573f2604e39197e68377cb8bc36218f11f"],["f63103037ddab5f7bc1d8efe944b3b339d5ad5b0","45e3aa3418f44262636654565356577137523ea4","6c9565550950c597b1d7ae5ddd8175d1190887e6","f77aae55c60f2a369326cb78d21599d57964f2e7","94d8f68810feb27f25ce6f4a3b4dee261be4570c"],["a9041f408e3060ee15a6ec21dea8d7a5bb5fdc6f","3f3e770bedc6a1408b4e38ff818ded26a32f127c","d96ca237ad1e204f9eb27581e7e847e8acd6a59d","737387027acad98b763137c7f8af868ef7bd06ca","9e0c3855cf96a135603070a0ddd1f0ca938e0e00"],["c756fd8656ad05fb34c3fc88b604a26a81f294ca","0d71374f4c0ad6dfa59cff84d5bd17fbc7dd1874","b9a270661d2eaa686ee2f21e59a683286ec90d09","544dfb45ed9a85087a109c204d8b6c9198365109","201af09015da31f8f3643c51e44834ecc28d9ede"],["37e28f83a1d5010aba2f4905fd28c91107837007","5e99316f96dd57e6a5309024f4efb7b30beb899a","d1d116cff9178327132bc9b56777f92dbac6c767","1be292a939aa66d0c7f610812e1b0c8fd8b04517","a84aa2716b31ef6bf67b8a57e940a47883deeb30"],["6bb78e3324be517e7a1541f6bff235b9f818847d","ab7e2bc0e0147abda86d4ef3bdd7e48e118276d4","01bf3038c5dd57285e5f97e14365af15610f0236","df68d32eb452ef4f72448c3c79abd30532c40d87","fab67f4fd6ca690da87e4e0235b495ebbbc3ed43"],["c967fb0950948ffad3607192808df7199ed0b622","f60f89bf8413f2c98920801def98b3cf82a8fa53","2b91fbea34b61a5f318f8f49aa7529db13918979","80e6e6bda994b96d54faaa323336d767479de474","55b1565e9f7b52da821f98d03ebb37ac3d434c85"],["e9e0a4f39ddb0fb1cb301dd4a128965c5eef4f2d","1fd791e8817a2f01dc6db2e21ecf73b6ccd5f8a6","b92573d2189b1dd02dd4020e8dca6e27e3526f60","90d742c21a24eb6cf256034356fb9fe6e0c3db05","acbd21fd3c41ee4afdfcb4778fc79b8279cbc64e"],["64c31e6e27f515b66713a0e4c3b0dbfdd2554df1","46ff963d879ba28b678c62d6c6ed4188c52dbfe9","75360985b5aa2232a80dc73c2bc01e9c61b9d9e5","c15fbcab6f3767664307c620d1fc2601ddec5845","e3dae08574364f16e5a22b7da7eb70ff6012938a"],["062f9111d18dd2f48b23863c62abb42fdd06a7c8","f5e57400514a1b47e0446f19ad551aebeb45bf77","5d2c44614369b105e708f55c4f8cb42bd975b37d","a41c7ad6bbe6b7f0c5c4ea8747ce82b2a6672512","9fe8ed306878b8c5a6b54c95e7bacf473d58ae4b"],["36a89e399b1a98448bf27a758e3a243ad10a7d42","5498dcae61fef338ff6847ab2cef890ab7a2c4aa","7fcc5f607191f9755902f5d22b1ab4b48caa1c82","5148237cc8724e3d1921ec152dcf971d8a491dcf","bd53091a7361629418e5f44fa1f1701610b09ecd"],["97c821746ad73e24bcefe3b176e51f6e068e07df","85d5de246681c7faee829315f47450ab55c7e839","f2a3beb00509b60b0265f8932efc6c921671a04e","452514388a16aa14409d3085042523fab379eeb4","b6ae3de3e991d5b5404c126da2dff6c64dd9ef9f"],["0cda07baa966523751a22fe42e5611a5ec746da6","6509f55b06d0311329f8a50e832f3692d968c161","73082b7f6c510543b04454a25f698dee02a05677","4b57eb854d054f144f1a7900f4bb3f931166b5f4","e3726d0c8876a7999639913c95b18ccaa04a99a9"],["9cc81d18dfff63a25a51fd644f26457f89c734cc","360220d6188a394a87551d5ad1e303dc9cb228f5","f6c4ef8714eb8d7cfb7d901cac99b8568d983d8b","b589a05e04ef07728d1f0be9cb8a0b67148e58bd","00635c0b1032dfb3b621d83b015a302fe3a57d21"],["af68cebc48797a15eeafb07a7b5f7ebb10b1c083","65b794793817d5c27f9e469e6f038805e3a97370","c059e0f75c3030397a9bb4cdf571311039d59a54","2f0d141030e3cc3525d6427046021ea801d8c552","5b77b3ba07f6e1e5a5034b7038e6269f6037bdce"],["502c23c4c54d62a0c02677f95e8f87c65cf179c8","d4bfa695e504c53d00fa69fd06f7330fa701382c","1453c47b5329f9513ccb0bd6f0dd6760acea64a1","1219f57f38077bc408fa7fdc0625a0f7df1667a4","56d6c0e1dcf2fad67c8a6e7ff5dcc77209bc50c9"],["1db3ebe7d002e63a4dc7ff83d0853694f038a485","8bd848e8f35c3a33acd562f6a42c162d4b525ba0","d08be09bdb7ca2a66d7c15b82a1d91536f6581e1","f4e9194229d27ed6ce2580912901d21560b327be","80c99ec213f2c5339c9557950373b96afd303cfb"],["91b48b27a4d53dcf0246a293da757fa71ee70c77","1b8f4fac27539f0d76b2e0f692114867c81da375","ac23cee423d5beb88571d795fecaedb61af23010","e8f579de093b51c0325d087165a6307eb1bad270","4d68b157ab69aad3da2c152b6572bb1bf3c927e7"],["e29840b777c87632fdd4a7fbaef916952c0c475f","3a7f14d6f756551a1715802fce551c4a9472f866","0ca9ae6859c3850496fc1d1f361fd71eeed1e034","cdb6cf9f1944572603a390c5ea5d9d9c6821c112","4d62c567c5e881487e3f8af97d539372a59dc182"],["104546692ab4ca3eb7e6f14238c2aaec61ba8777","981070d53771e5d798478a0f7cfd049d3c467f8f","e1e49a8d8b0fba3aeebeed1dc823fd975698a700","576bba8bc646ca27f18abf94ac1adaa9c62d0e72","ae5ce23af1961937ba6f5e17088552ab4ce872bb"],["7d947965a8f52dcce015e847509cf0d9d5324ec9","4e8f069f0ca913171ec9a77ab204d82d16cccb05","6f04a2e335e807012f58147610dc9d9c6c474426","aefecb0c51631952a4551e9e8ed81538c85d8a6c","ef763cc1060ffae4dc156b0165b9253c7f073a76"],["d7311d43158ebd340d870697c5c706233b42a230","3b1120c9748ab6b2e2c3e2f4295971ba58f958e0","3a60e2bf53eee43780a864a90fccbdc42e4e15e0","202e1356ae61aeebc7057926fa5eb6258f5375fe","3430eb06f4f8784bd035d7d9b3973f0044a38954"],["0c5d019502e5547a92405e47e2088a02294c379f","d3dca98c142ee8521fa85f27ef085f79606e7138","d45b3475906824f2b1c5ffe9d67eeadf07bd633b","80bef9c0adcb6fea3efa84a90da8b4c4fa4bff31","77030362159ce9205ef45f8f9fc7345bc2579c9b"],["00b6f0bd1a46b010cb1934eaef1b5c69310566a5","8fcb923c507a7272cb4e80aa6b0453bdda9b391d","f93941212bd610fae6bdd931b461b5a6f3cd1259","5eafee6d1d0d3834c7f9469d28000bbc42484974","b402070818e224146a5e94cafad3071db55ef37a"],["e747dd0eda83811902fde0c5adb6ae17dc86dac9","a6aaf9da2cc7293701e3db7d89aca0df491e3b01","93ad361a041ed828b28cccb5c330427af619475a","dc08430db4eb5dbb7cee2388f40de7969b7c4c5b","e37acdf84908246c1de76c4b08bb53eafb2adbf3"],["bbadacb06d1bf892979e67c7f2210a16d334a695","3839ef5b853e2cf5b353883579073d30ff8e5956","500e1646b22fdae808c1c20673f733db338d3de6","ece72c3df061d3963dfc6c8aa44d8019577dbf8e","3a8b11a5af523eec11a6749b0e42823844a19c67"],["02f2c55a8dea17386c602c89f9d622928fc39899","1484de298e542face051a4976a2fb1d91a68fc5e","873e4c4782df373113e382e3fd4b62e153a12e86","686768ed5e802f0e6105c4c18ef940050a16e953","9fe9d5fb40e2f57081145de783afccf93dc3d445"],["b600b26a4f3a8e8387601fe4a57f51b07526edac","e12f21904a7ef1f8a4e6fa9525343748607066e0","44f566aa6ba9a036c7ed06e8e4f34ead22bd9c00","7e1c3a08601add585e56805fa5904647b48da72a","e9e5d31707f537adfa90394179895631153f4d38"],["a2db01110e38591d661354aab07be0bfac5df350","1816db403727307aae34d480ca13deb32248486a","eab9b168a11001a5e11a863f31d178d3a3685f1b","85c460aac60a10242608c41f6ae629291ac26906","9c14159e304cc39eca7907b8598087b0ac6f1499"],["4c8d0ab9ef00359c8b61eba9a2390402eb5f90a3","d631fbaf73ad493f86d2ffe8be13dca39236307e","44dabe0ee24951089c9de2bbe75872aaef26fb80","fb6c935452ff8445050c8bfb5b8b3eec47f83d0c","3d82db78b32e579811a329ae4a3ff106028445b7"],["ec43ae91bbae018e13ddaad67eb87720823f8c8b","a32807d675cc7df14e7cd981dc75f8ab5ce8c632","7747b04179803ff67aaba4484e8d7b5526042428","4e86b8828726c3cba42051aeee6272bdb7567c30","46b50709098934bb3f089c581fdf7470886e9ea3"],["36fc914930449e4652ed3ce9175bc82d761af80b","972f632a85d5b532dacf63a760ba38290694a05a","7ef1edd2e0aabecb713e84c937d861bcb23126df","fd9ece6734edf351920a587d8cf9ff97b884f30c","2f55d2eff56f0b9cf6259e588d55c55300c8e423"],["04c7270648866cd3caf1dd1dd1ae3de8c24cba32","53d6a37ad885dcb7c3546460c38bf764ac2d5430","1cd9796ccaf8f2385d64a8ee2a61590bf0d14c5f","36efa4dd76ef64f762a6445a0cdc85f98d286ad8","5a0dfadad6fbbe0a4ff1bf2e2539d55e881940d8"],["4cc38ee4079b58f50e0696663b420ee3ae035039","af557f4c228c1e415a0fca6556372f739bf58a79","24bed18905794c840ef9a5d78778a68b70e88219","794f355edc5d917e82912a1ce5f5f8024a04f0e2","d8f76d73a787238d3e4da5c4a5b62513a7243407"],["04b73beb77541ac390281f047f7f65ad9d2a0382","66fa37cbb4385ad7571a44591ca6429d7280565e","b362238c1ed68cb139fc15d1d5b511cfb27787f9","1d8d2b317ecb422cb033892e02f899689d53e29b","1f20168a591c5bc7d4bdced6fc1d81e0945e5f56"],["6c19864cb18d3d390e25cf007519aad1145af51e","f09ca300ae0a55583780a9290bb76c412a4aad47","1cf5a94df62a26f86241c8da2438ab907fba7f04","0c9cae02602c76c6c460a42eda6ab3f51e68e415","14abebc8b62badff510290b07d2efcdbae9776ce"],["9d39478bfcd232fed377987ae345a16036b0e6c9","fa3b7dff852a8a98c30673d80c688ab5e0d2283d","49a436609ebd03c7d4e7697bf66680924fb2dc3b","7b2d2495be512c4743188f95a372a46028259552","aeac8adf121fe55339dbcb6acda0f979987af959"],["d93aae6bd053f8d03e99ac0cbcbb6e2251d9a68f","46e739cf5a4e9e2fc3a153296405dcd4a36449de","a2ca6bcf08e93a38e39aa595d71e364452822b1b","86dc94ccbb2ea3b23d11753383cfa1fb29d2b969","dffad77420b59076804c888f39530ec2fd4dc220"],["fa3b080844a4ab1ac45c8df08861e751218a4949","9b36ef748edc6ae41a8095a997fd34a830a4c5ca","ea44984b98c8487e1a7db6cd72b5ccf01ac2e349","891c3efbf636ce60786252c30a854b2313c599ca","045613611889bd1097bf3375a10e9fab84d244ec"],["431c2f3a40f77b090db415dd9a562f9882d6c612","43af8a35e466a05ebd3076efa1ae4b4bc79ce983","e7d8c0dbe949036e201bd5f3256b4e88021d0c71","af2d65194ddb873d9dc28367b8923bf8f0635fb0","3e671678ed69cddeca3c8dec5f317fcef4b0626e"],["ca034ace74985d280fcd8ceeca4adf6d1ef983a7","0166bb6fb7148a2ce8a81c80deca04aaa46bcbf7","34dea7372996affc16a5d779adea8aa7c3847a81","416c9e86407abc355e0a6b21f9510d4617ebd483","6653cefcd9448edcca85f1a49719ddfa8555f3fd"],["62336af2ffc05267b6f80bf2e97e036108368f54","94db17a7a28f2fa0aeb9735d0c84489cf14b2bb3","98405818370481582e5dc0cdbdf21da59da03823","da221a9777163fe4c7fd01e5765b0df071e781ce","6c3f1a630925d770ccaa4fee69f2d72f7bc1f4d5"],["4d37733363645153d1e3fa7ef627fe502471c58b","99a49c095006eef70c97571e047bef2710920694","1d71069ca378a3c494832278acd8c861d6507e1c","cadf7d91748dd9c1bd94d2e326feb203502b3ccb","cfbdc28174068be637a036e7fcc40d06523dff14"],["11016e28de693c47c7d0d742bec0174151329fdf","57ba21faeb6e628e4c95872188bebc27ad068d0a","fc94904c20f8f28dba8f7858736afcba9ea901d3","58d45374b775937f8f0c4a5ccdbb608197a0fa96","e79ae13993a42bb1bb738a500676ff3c9ac3b9bd"],["485a05c987cb04c51a91b56a4bd09d3563146bf7","0ea780585e6d4e42628387409edec530029ffaaf","8f516e2308e1c599c43d263661570862c71a26c2","2731a536122cbbecaddb124b299b6bd557c7c29e","256f17f11d706db1dffe817610e44b54002cda7d"],["f8cc07b0df35c563b5554aa71de53ce3ba49ee1f","7e0446da60f3a2e4020e16d2af103c929c819d87","e85ae60f7ce7229fe3efb983d2494c68a1ca78b9","8f8bd5f12e05b0d29ba226ad7fddda2d1c9bf65c","daf6be6ac452f30e3f86834c21318f2f27c197b3"],["cc44dfec25517ee2a2551c1d4bb68a09f3aa14b9","436c79cd53e5816ba38c88847545be68474c7216","e979d7aa9410221ff08a32143a0afb3bd3e79730","bbe7c08be227acb76ddd72dbcd46affbe6d93750","92cd2eb729a6436d72f13956157ae0310f50458e"]],"vote-index":70} From 9ede0c0938313587206391cb9b5621ff52faffd2 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Mon, 24 Apr 2023 20:58:01 -0400 Subject: [PATCH 26/61] adding mock verify-ballot, tally-election, and show-contest json docs --- src/vtp/web/api/backend.py | 16 +++++++++++----- src/vtp/web/api/mock-data/show-contest-doc.json | 2 ++ .../web/api/mock-data/tally-election-doc.json | 1 + src/vtp/web/api/mock-data/verify-ballot-doc.json | 1 + 4 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 src/vtp/web/api/mock-data/show-contest-doc.json create mode 100644 src/vtp/web/api/mock-data/tally-election-doc.json create mode 100644 src/vtp/web/api/mock-data/verify-ballot-doc.json diff --git a/src/vtp/web/api/backend.py b/src/vtp/web/api/backend.py index d62224e..2218a53 100644 --- a/src/vtp/web/api/backend.py +++ b/src/vtp/web/api/backend.py @@ -62,9 +62,11 @@ class VtpBackend: # default guid - making one up _MOCK_GUID = "01d963fd74100ee3f36428740a8efd8afd781839" # default mock receipt log - _MOCK_VERIFY_BALLOT_RECEIPT_LOG = "Hello World" + _MOCK_VERIFY_BALLOT_LOG = "mock-data/verify-ballot-doc.json" # default mock tally log - _MOCK_TALLY_CONTESTS_LOG = "Good Morning" + _MOCK_TALLY_CONTESTS_LOG = "mock-data/tally-election-doc.json" + # default mock show contest log + _MOCK_SHOW_CONTEST_LOG = "mock-data/show-contest-doc.json" # backend default address _ADDRESS = "123, Main Street, Concord, Massachusetts" @@ -154,7 +156,9 @@ def verify_ballot_check( """ if VtpBackend._MOCK_MODE: # Just return a mock verify ballot string - return VtpBackend._MOCK_VERIFY_BALLOT_RECEIPT_LOG + with open(VtpBackend._MOCK_VERIFY_BALLOT_LOG, "r", encoding="utf8") as infile: + json_doc = json.load(infile) + return json_doc # handle the incoming ballot and return the ballot-check and voter-index operation = VerifyBallotReceiptOperation( election_data_dir=Common.get_guid_based_edf_dir(vote_store_id), @@ -177,7 +181,9 @@ def tally_election_check( """ if VtpBackend._MOCK_MODE: # Just return a mock tally string - return VtpBackend._MOCK_TALLY_CONTESTS_LOG + with open(VtpBackend._MOCK_TALLY_CONTESTS_LOG, "r", encoding="utf8") as infile: + json_doc = json.load(infile) + return json_doc # handle the incoming ballot and return the ballot-check and voter-index operation = TallyContestsOperation( election_data_dir=Common.get_guid_based_edf_dir(vote_store_id), @@ -202,7 +208,7 @@ def show_contest( """ if VtpBackend._MOCK_MODE: # Just return a mock contest - with open(VtpBackend._MOCK_CONTEST_CONTENT, "r", encoding="utf8") as infile: + with open(VtpBackend._MOCK_SHOW_CONTEST_LOG, "r", encoding="utf8") as infile: json_doc = json.load(infile) return json_doc # handle the show_contest diff --git a/src/vtp/web/api/mock-data/show-contest-doc.json b/src/vtp/web/api/mock-data/show-contest-doc.json new file mode 100644 index 0000000..c446463 --- /dev/null +++ b/src/vtp/web/api/mock-data/show-contest-doc.json @@ -0,0 +1,2 @@ +{"show-contest-doc":{"header":["commit 6ca91dbca44515587f59294107eee63dc480aa7b","Author: Sandy Currier ","Date: Sat Jan 1 12:00:00 2022 -0500"],"payload":{"CVR": {"cast_branch": "CVRs/0001/0f74637e08", +"choices": [{"name": "Anthony Alpha","party": "Circle Party"},{"name": "Betty Beta","party": "Pentagon Party"},{"name": "Gloria Gamma","party": "Square Party"},{"name": "David Delta","party": "Triangle Party"},{"name": "Emily Echo","party": "Ellipse Party"},{"name": "Francis Foxtrot","party": "OctagonParty"}],"ggo": "GGOs/states/Massachusetts","name": "US senate","selection": ["5: Francis Foxtrot","3: David Delta","1: Betty Beta"],"tally": "rcv","uid": "0001"}} diff --git a/src/vtp/web/api/mock-data/tally-election-doc.json b/src/vtp/web/api/mock-data/tally-election-doc.json new file mode 100644 index 0000000..ee6d8ab --- /dev/null +++ b/src/vtp/web/api/mock-data/tally-election-doc.json @@ -0,0 +1 @@ +{"tally-election-doc":["Scanned 67 contests for contest (US senate) uid=0001, tally=rcv, max=1, win-by>0.5","RCV: round 0","Counted 6ca91dbca44515587f59294107eee63dc480aa7b: choice=Francis Foxtrot","Total vote count: 66","[('Betty Beta', 13), ('Francis Foxtrot', 13), ('Gloria Gamma', 11), ('Anthony Alpha', 10), ('David Delta', 10), ('Emily Echo', 9)]","RCV: round 1","Total vote count: 66","[('Anthony Alpha', 14), ('Betty Beta', 14), ('Francis Foxtrot', 14), ('David Delta', 13), ('Gloria Gamma', 11), ('Emily Echo', 0)]","RCV: round 2","Total vote count: 66","[('Anthony Alpha', 17), ('Francis Foxtrot', 17), ('Betty Beta', 16), ('David Delta', 16), ('Gloria Gamma', 0), ('Emily Echo', 0)]","RCV: round 3","Total vote count: 63","Final results for contest US senate (uid=0001):"," ('Francis Foxtrot', 33)"," ('Anthony Alpha', 30)"," ('David Delta', 0)"," ('Betty Beta', 0)"," ('Gloria Gamma', 0)"," ('Emily Echo', 0)"]} diff --git a/src/vtp/web/api/mock-data/verify-ballot-doc.json b/src/vtp/web/api/mock-data/verify-ballot-doc.json new file mode 100644 index 0000000..ee8d4ae --- /dev/null +++ b/src/vtp/web/api/mock-data/verify-ballot-doc.json @@ -0,0 +1 @@ +{"ballot-check-doc":["Contest '0000 - US president' (d85f51b4363bbe5efba0e33663390db047388edd) is vote 6 out of 64 votes","Contest '0001 - US senate' (6ca91dbca44515587f59294107eee63dc480aa7b) is vote 6 out of 67 votes","Contest '0002 - governor' (9c97ac7adf9145c3f03542f305034942be881797) is vote 6 out of 65 votes","Contest '0003 - County Clerk' (b6764ac2a30fd02cb31d6d5510b06de302cd57bc) is vote 6 out of 65 votes","Contest '0004 - Question 1 - should the starting time of the annual town meeting be moved to 6:30PM?' (9efc283e600a81d4969bee737f3c2ddc2b9a0ea8) is vote 6 out of 64 votes","############","[GOOD]: ballot receipt VALID - no digest errors found","############"]} From 518b7ab59cc52dbd56a62a3c57752770b69dc75e Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Tue, 25 Apr 2023 10:44:23 -0400 Subject: [PATCH 27/61] show-contest is now returning a dictionary --- src/vtp/web/api/main.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 2a50f4f..9eb2d0d 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -154,9 +154,8 @@ async def show_contest( # import pdb; pdb.set_trace() if vote_store_id in vote_store_ids: - show_contest_doc = VtpBackend.show_contest( + return VtpBackend.show_contest( vote_store_id, contests, ) - return {"show-contest-doc": show_contest_doc} return {"error": "VoteStoreID not found"} From 8d6014b80fca8fb7e02bf01dd3ad8db819199b2f Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Fri, 28 Apr 2023 17:37:19 -0400 Subject: [PATCH 28/61] since the endpoint can support multiple digests, is seems easier to return (from the backend ops) a list than a dict --- src/vtp/web/api/backend.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/vtp/web/api/backend.py b/src/vtp/web/api/backend.py index 2218a53..ddc1f84 100644 --- a/src/vtp/web/api/backend.py +++ b/src/vtp/web/api/backend.py @@ -216,6 +216,4 @@ def show_contest( election_data_dir=Common.get_guid_based_edf_dir(vote_store_id), stdout_printing=False, ) - return operation.run( - contest_check=contests - ) + return {"contents": operation.run(contest_check=contests)} From 1433b3e3204b6fe496e450f1b7d9486986200b2e Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 14:56:08 -0400 Subject: [PATCH 29/61] Update src/vtp/web/api/json_data_models.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/json_data_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/json_data_models.py b/src/vtp/web/api/json_data_models.py index 57d95ec..e6dcbcd 100644 --- a/src/vtp/web/api/json_data_models.py +++ b/src/vtp/web/api/json_data_models.py @@ -50,7 +50,7 @@ class ContestantUncastContest(BaseUncastContest): """ contest_type: str = None - descriptiion: str = None + description: str = None class ContestantCastContest(BaseCastContest): From ac581e6483da9c77ffe5643c3e765e4960b38f6f Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 14:57:07 -0400 Subject: [PATCH 30/61] Update src/vtp/web/api/json_data_models.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/json_data_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/json_data_models.py b/src/vtp/web/api/json_data_models.py index e6dcbcd..6a5c3dd 100644 --- a/src/vtp/web/api/json_data_models.py +++ b/src/vtp/web/api/json_data_models.py @@ -60,7 +60,7 @@ class ContestantCastContest(BaseCastContest): """ contest_type: str = None - descriptiion: str = None + description: str = None class QuestionUncastContest(BaseUncastContest): From 3a106ff444651ca344d66e24ab50c81eb432fdc7 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 14:57:45 -0400 Subject: [PATCH 31/61] Update src/vtp/web/api/json_data_models.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/json_data_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/json_data_models.py b/src/vtp/web/api/json_data_models.py index 6a5c3dd..342d380 100644 --- a/src/vtp/web/api/json_data_models.py +++ b/src/vtp/web/api/json_data_models.py @@ -14,7 +14,7 @@ class Choice(BaseModel): - """A VTP choice data structure""" + """A choice made by a voter in a contest""" name: str party: str = None From cbc71e07e4e87ae29fb5beb3d0b5c9fed2d790a3 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 14:58:21 -0400 Subject: [PATCH 32/61] Update src/vtp/web/api/json_data_models.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/json_data_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/json_data_models.py b/src/vtp/web/api/json_data_models.py index 342d380..08eb13a 100644 --- a/src/vtp/web/api/json_data_models.py +++ b/src/vtp/web/api/json_data_models.py @@ -118,7 +118,7 @@ class needs to be able to contain any number of any of the threee __root__: List[ Dict[ str, - Union[ContestantUncastContest, QuestionUncastContest, TicketCastContest], + Union[ContestantCastContest, QuestionCastContest, TicketCastContest], ] ] From 6bae52bcfd07e7982f598ef73c9d8516d4eda326 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:01:16 -0400 Subject: [PATCH 33/61] Update src/vtp/web/api/main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 9eb2d0d..68182b6 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -19,7 +19,7 @@ async def root() -> dict: # Endpoint #1 -@app.get("/vote/") +@app.post("/vote") async def get_vote_store_id() -> dict: """Create and store a unique Vote Store ID for each client""" From 8b43373a71afcb7d1caf3e6092a40737f33da7eb Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Sun, 30 Apr 2023 15:09:01 -0400 Subject: [PATCH 34/61] PR - removing /resuse/ endpoint --- src/vtp/web/api/main.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 68182b6..757356d 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -38,15 +38,6 @@ async def get_empty_ballot(vote_store_id: str) -> dict: return {"blank-ballot": empty_ballot} return {"error": "VoteStoreID not found"} - -# for testing - reuse a guid -@app.get("/reuse/{vote_store_id}") -async def reuse_guid(vote_store_id: str) -> dict: - """Reuse a pre-existing guid workspace""" - - vote_store_ids[vote_store_id] = "uncast" - return {"VoteStoreID": vote_store_id} - # for testing - show a mock cast ballot @app.get("/show-mock-ballot") async def show_mock_cast_ballot() -> dict: @@ -55,6 +46,7 @@ async def show_mock_cast_ballot() -> dict: a_cast_ballot = VtpBackend.mock_get_cast_ballot() return {"cast-ballot": a_cast_ballot} +# for testing - reuse a guid @app.get("/restore-existing-guids") async def restore_existing_guids() -> dict: """Will restore the existing vote_store_id's""" From 957fc47db2b98bf910f7d048be3fe76bd062c012 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:10:38 -0400 Subject: [PATCH 35/61] Update src/vtp/web/api/main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 757356d..39b07c9 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -47,7 +47,7 @@ async def show_mock_cast_ballot() -> dict: return {"cast-ballot": a_cast_ballot} # for testing - reuse a guid -@app.get("/restore-existing-guids") +@app.post("/restore-existing-guids") async def restore_existing_guids() -> dict: """Will restore the existing vote_store_id's""" guids = VtpBackend.get_all_guid_workspaces() From 30556fcfa0402c3e080794d7c8d3a7640b184b46 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Sun, 30 Apr 2023 15:18:31 -0400 Subject: [PATCH 36/61] PR - cleaning up testing comments --- src/vtp/web/api/main.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 39b07c9..8ca677c 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -55,11 +55,12 @@ async def restore_existing_guids() -> dict: vote_store_ids[guid] = "restored" return { "restored": guids } -# To manually test endpoint #3 +# Endpoint #3 + +# To manually test endpoint #3 do something like: # pylint: disable=line-too-long -# curl -i -X POST -H 'Content-Type: application/json' -d '{"active_ggos":[".","GGOs/states/Massachusetts","GGOs/states/Massachusetts/GGOs/counties/Middlesex","GGOs/states/Massachusetts/GGOs/towns/Concord"],"ballot_filename":"000,001,002,003,ballot.json","ballot_node":"GGOs/states/Massachusetts/GGOs/towns/Concord","ballot_subdir":"GGOs/states/Massachusetts/GGOs/towns/Concord","contests":{"GGOs/states/Massachusetts":[{"US president":{"choices":[{"name":"Circle Party Ticket","ticket_names":["Rey Skywalker","Obi-Wan Kenobi"]},{"name":"Square Party Ticket","ticket_names":["Atticus Finch","Hermione Granger"]},{"name":"Triangle Party Ticket","ticket_names":["Evelyn Quan Wang","Waymond Wang"]}],"contest_type":"ticket","selection":["2: Triangle Party Ticket","1: Square Party Ticket"],"tally":"rcv","ticket_offices":["President","Vice President"],"uid":"0000"}},{"US senate":{"choices":[{"name":"Anthony Alpha","party":"Circle Party"},{"name":"Betty Beta","party":"Pentagon Party"},{"name":"Gloria Gamma","party":"Square Party"},{"name":"David Delta","party":"Triangle Party"},{"name":"Emily Echo","party":"Ellipse Party"},{"name":"Francis Foxtrot","party":"Octagon Party"}],"selection":["5: Francis Foxtrot","3: David Delta","1: Betty Beta"],"tally":"rcv","uid":"0001"}},{"governor":{"choices":[{"name":"Spencer Cogswell","party":"Circle Party"},{"name":"Cosmo Spacely","party":"Triangle Party"}],"max":1,"selection":["1: Cosmo Spacely"],"tally":"plurality","uid":"0002"}}],"GGOs/states/Massachusetts/GGOs/counties/Middlesex":[{"County Clerk":{"choices":["Jean-Luc Picard","Katniss Everdeen","James T. Kirk"],"max":1,"selection":["0: Jean-Luc Picard"],"tally":"plurality","uid":"0003"}}],"GGOs/states/Massachusetts/GGOs/towns/Concord":[{"Question 1 - should the starting time of the annual town meeting be moved to 6:30PM?":{"choices":["yes","no"],"description":"Should the Town of Concord start the annual Town Meeting at 6:30PM instead of 7:00PM?\n","max":1,"selection":["0: yes"],"tally":"plurality","uid":"0004"}}]}}' http://127.0.0.1:8000/cast-ballot/01d963fd74100ee3f36428740a8efd8afd781839 +# curl -i -X POST -H 'Content-Type: application/json' -d @docs/cast-ballot.json http://127.0.0.1:8000/cast-ballot/904ac6dc58021d7d9bf9e215bcd69c8e3a28b807 -# Endpoint #3 @app.post("/cast-ballot/{vote_store_id}") async def cast_ballot( vote_store_id: str, @@ -82,8 +83,12 @@ async def cast_ballot( return {"error": "This ballot has already been cast"} return {"error": "VoteStoreID not found"} - # Endpoint #4 + +# To manually test #4 do something like: +# pylint: disable=line-too-long +# curl -i -X POST -H 'Content-Type: application/json' -d @receipts/receipt.59.json http://127.0.0.1:8000/verify-ballot-check/d08a278a9a6b82040d505b9aae194efb72cceb0e + @app.post("/verify-ballot-check/{vote_store_id}") async def verify_ballot_check( vote_store_id: str, @@ -108,6 +113,11 @@ async def verify_ballot_check( # Endpoint #5 + +# To manually test #4 do something like: +# pylint: disable=line-too-long +# curl -i -X GET -H 'Content-Type: application/json' http://127.0.0.1:8000/tally-election/d08a278a9a6b82040d505b9aae194efb72cceb0e/0001/8bef5f87658c40bbe7dcda814422a59e844b204d + @app.get("/tally-election/{vote_store_id}/{contests}/{digests}") async def tally_election( vote_store_id: str, From c060b91cbf738e38e40825ee2a030bc53f437e5a Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:20:19 -0400 Subject: [PATCH 37/61] Update src/vtp/web/api/main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 8ca677c..d6ad6c0 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -64,7 +64,7 @@ async def restore_existing_guids() -> dict: @app.post("/cast-ballot/{vote_store_id}") async def cast_ballot( vote_store_id: str, - incoming_json: dict, + incoming_ballot_data: dict, ) -> dict: """ Uploads the ballot; the backend accepts it, merges it, and returns From bc4afe86c759587a812261e641980ffabe6c31f5 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:20:46 -0400 Subject: [PATCH 38/61] Update src/vtp/web/api/main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index d6ad6c0..29b104f 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -92,7 +92,7 @@ async def cast_ballot( @app.post("/verify-ballot-check/{vote_store_id}") async def verify_ballot_check( vote_store_id: str, - incoming_json: dict, + incoming_ballot_data: dict, ) -> dict: """ Will verify the ballot-check and voter-id. Return values are TBD From c90c380d0491d2c28bc15eaec53585766a4094be Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:21:13 -0400 Subject: [PATCH 39/61] Update src/vtp/web/api/main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 29b104f..008a39b 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -71,7 +71,7 @@ async def cast_ballot( the ballot check and voter index """ - # import pdb; pdb.set_trace() + # breakpoint() if vote_store_id in vote_store_ids: if vote_store_ids[vote_store_id] != "cast": ballot_check, vote_index = VtpBackend.cast_ballot( From b745d83482bf6f98eb84b6bebeba6a4a160a50ca Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:22:24 -0400 Subject: [PATCH 40/61] Update src/vtp/web/api/main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/main.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 008a39b..06c5622 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -72,16 +72,17 @@ async def cast_ballot( """ # breakpoint() - if vote_store_id in vote_store_ids: - if vote_store_ids[vote_store_id] != "cast": - ballot_check, vote_index = VtpBackend.cast_ballot( - vote_store_id, - incoming_json, - ) - vote_store_ids[vote_store_id] = "cast" - return {"ballot-check": ballot_check, "vote-index": vote_index} + if vote_store_id not in vote_store_ids: + return {"error": "VoteStoreID not found"} + if vote_store_ids[vote_store_id] != "cast": return {"error": "This ballot has already been cast"} - return {"error": "VoteStoreID not found"} + + ballot_check, vote_index = VtpBackend.cast_ballot( + vote_store_id, + incoming_ballot_data, + ) + vote_store_ids[vote_store_id] = "cast" + return {"ballot-check": ballot_check, "vote-index": vote_index} # Endpoint #4 From d355d57adfeaba2fe05ed3f01386cc82fe8fb43f Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:22:42 -0400 Subject: [PATCH 41/61] Update src/vtp/web/api/main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 06c5622..67d0ab8 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -101,8 +101,8 @@ async def verify_ballot_check( """ # import pdb; pdb.set_trace() - ballot_check = incoming_json["ballot-check"] - vote_index = incoming_json["vote-index"] + ballot_check = incoming_ballot_data["ballot-check"] + vote_index = incoming_ballot_data["vote-index"] if vote_store_id in vote_store_ids: ballot_check_doc = VtpBackend.verify_ballot_check( vote_store_id, From ce7ba8121f9826fab1574047d00036b12ce2cf56 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Sun, 30 Apr 2023 15:29:01 -0400 Subject: [PATCH 42/61] tweaking a comment re: verbosity when tallying --- src/vtp/web/api/main.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 67d0ab8..daa5c5c 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -127,8 +127,9 @@ async def tally_election( ) -> dict: """ Will execute the tally, optionally limited to a list of contests, - tracking an optional list of digests, with an optional verbosity - level. + tracking an optional list of digests. At some later time with a + better understanding of the client side UX a verbosity switch + could be added. Perhaps. The contests and digests fields are optional but must be a comma separated string (no spaces). If not specified they should be the From 31108ce410b3a696343d73445f10e977fad2597a Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:29:47 -0400 Subject: [PATCH 43/61] Update src/vtp/web/api/main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index daa5c5c..9c57a60 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -147,7 +147,7 @@ async def tally_election( return {"error": "VoteStoreID not found"} # Endpoint #6 -@app.get("/show-contest/{vote_store_id}/{contests}") +@app.get("/contests/{vote_store_id}/{contests}") async def show_contest( vote_store_id: str, contests: str, From 8b5dce7664fcaa8368884eb254a8b47e55206d85 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:30:37 -0400 Subject: [PATCH 44/61] Update src/vtp/web/api/main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/main.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index 9c57a60..c178955 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -157,7 +157,6 @@ async def show_contest( """ # import pdb; pdb.set_trace() - if vote_store_id in vote_store_ids: return VtpBackend.show_contest( vote_store_id, contests, From 8203807986970ced7086c43759c72ff3a47a2913 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:31:01 -0400 Subject: [PATCH 45/61] Update src/vtp/web/api/main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/main.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index c178955..c722ce1 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -157,8 +157,10 @@ async def show_contest( """ # import pdb; pdb.set_trace() - return VtpBackend.show_contest( + if vote_store_id in vote_store_ids: + return {"error": "VoteStoreID not found"} + + return VtpBackend.show_contest( vote_store_id, contests, - ) - return {"error": "VoteStoreID not found"} + ) From 95183bc537bc9e300035025942e968479cf6c4a5 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:33:25 -0400 Subject: [PATCH 46/61] Update src/vtp/web/api/mock-data/blank-ballot.json Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/mock-data/blank-ballot.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/mock-data/blank-ballot.json b/src/vtp/web/api/mock-data/blank-ballot.json index 4adda25..f14b3a9 100644 --- a/src/vtp/web/api/mock-data/blank-ballot.json +++ b/src/vtp/web/api/mock-data/blank-ballot.json @@ -24,7 +24,7 @@ "name": "Square Party Ticket", "ticket_names": [ "Atticus Finch", - "Hermione Granger" + "Hermione Granger" ] }, { From 5d811b13372f9faa67f3fd3d557d4932ac50adb6 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:34:01 -0400 Subject: [PATCH 47/61] Update src/vtp/web/api/mock-data/blank-ballot.json Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/mock-data/blank-ballot.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/mock-data/blank-ballot.json b/src/vtp/web/api/mock-data/blank-ballot.json index f14b3a9..ce55b4b 100644 --- a/src/vtp/web/api/mock-data/blank-ballot.json +++ b/src/vtp/web/api/mock-data/blank-ballot.json @@ -45,7 +45,7 @@ } }, { - "US senate": { + "U.S. Senate": { "choices": [ { "name": "Anthony Alpha", From be129bfa24d8c8ba3dc5bfdf61ac4acfb8d29fd5 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:34:24 -0400 Subject: [PATCH 48/61] Update src/vtp/web/api/mock-data/cast-ballot.json Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/mock-data/cast-ballot.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/mock-data/cast-ballot.json b/src/vtp/web/api/mock-data/cast-ballot.json index cd0b1f5..a069538 100644 --- a/src/vtp/web/api/mock-data/cast-ballot.json +++ b/src/vtp/web/api/mock-data/cast-ballot.json @@ -49,7 +49,7 @@ } }, { - "US senate": { + "U.S. Senate": { "choices": [ { "name": "Anthony Alpha", From e2b87fec6d42db1c9450ae119bada836b76866b7 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:34:47 -0400 Subject: [PATCH 49/61] Update src/vtp/web/api/mock-data/cast-ballot.json Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/mock-data/cast-ballot.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/mock-data/cast-ballot.json b/src/vtp/web/api/mock-data/cast-ballot.json index a069538..fcd45d5 100644 --- a/src/vtp/web/api/mock-data/cast-ballot.json +++ b/src/vtp/web/api/mock-data/cast-ballot.json @@ -86,7 +86,7 @@ } }, { - "governor": { + "Governor": { "choices": [ { "name": "Spencer Cogswell", From f9b3413c23c8a3e0f55b4cf7b537d32cb832087c Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:35:07 -0400 Subject: [PATCH 50/61] Update src/vtp/web/api/mock-data/cast-ballot.json Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- src/vtp/web/api/mock-data/cast-ballot.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vtp/web/api/mock-data/cast-ballot.json b/src/vtp/web/api/mock-data/cast-ballot.json index fcd45d5..492d2cc 100644 --- a/src/vtp/web/api/mock-data/cast-ballot.json +++ b/src/vtp/web/api/mock-data/cast-ballot.json @@ -11,7 +11,7 @@ "contests": { "GGOs/states/Massachusetts": [ { - "US president": { + "U.S. President": { "choices": [ { "name": "Circle Party Ticket", From 6eb6f94111285fc53480edb1f1eb0309dc29af85 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:35:39 -0400 Subject: [PATCH 51/61] Update tests/test_main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- tests/test_main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_main.py b/tests/test_main.py index ddb55a1..b7b85ce 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -17,7 +17,7 @@ def test_get_root(): # Endpoint #1 @pytest.fixture -def test_get_vote_store_id(): +def vote_store_id(): """Test retreiving and printing a voter store id guid""" response = client.get("/vote/") assert response.status_code == 200 From 1941fd45a7dc218f638e697d7aa6dbe4f9584c00 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:36:08 -0400 Subject: [PATCH 52/61] Update tests/test_main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- tests/test_main.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_main.py b/tests/test_main.py index b7b85ce..124409e 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -19,7 +19,8 @@ def test_get_root(): @pytest.fixture def vote_store_id(): """Test retreiving and printing a voter store id guid""" - response = client.get("/vote/") + response = client.post("/vote") + return response assert response.status_code == 200 assert "VoteStoreID" in response.json() # retrieve VoteStoreID from response From c2143321b303d65d5c7c135593ba6f5e9586be36 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:37:07 -0400 Subject: [PATCH 53/61] Update tests/test_main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- tests/test_main.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/test_main.py b/tests/test_main.py index 124409e..07f2a47 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -43,13 +43,14 @@ def test_get_empty_ballot(test_get_vote_store_id): # Endpoint #3 @pytest.fixture -def test_cast_ballot(test_get_vote_store_id, test_get_empty_ballot): - """test casting a filled-in ballot""" - # import pdb; pdb.set_trace() +def cast_ballot(vote_store_id, empty_ballot): + """Cast of a filled-in ballot""" + # breakpoint() response = client.post( - f"/vote/cast-ballot/{test_get_vote_store_id}", - json=test_get_empty_ballot, - ) + f"/vote/cast-ballot/{vote_store_id}", + json=empty_ballot.json(), + ) + return response assert response.status_code == 200 assert "ballot-check" in response.json() assert "vote-index" in response.json() From d3aedc203be93db541dd42928c27ea37c99074e6 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:37:32 -0400 Subject: [PATCH 54/61] Update tests/test_main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- tests/test_main.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/test_main.py b/tests/test_main.py index 07f2a47..845fee8 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -21,10 +21,11 @@ def vote_store_id(): """Test retreiving and printing a voter store id guid""" response = client.post("/vote") return response - assert response.status_code == 200 - assert "VoteStoreID" in response.json() +def test_get_vote_store_id(vote_store_id) + assert vote_store_id.status_code == 200 + assert "VoteStoreID" in vote_store_id.json() # retrieve VoteStoreID from response - return response.json()["VoteStoreID"] + return vote_store_id.json()["VoteStoreID"] # Endpoint #2 From 65b5f39674774022993e1ad1053c4096080935e9 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:38:03 -0400 Subject: [PATCH 55/61] Update tests/test_main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- tests/test_main.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_main.py b/tests/test_main.py index 845fee8..b96ad0f 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -52,10 +52,10 @@ def cast_ballot(vote_store_id, empty_ballot): json=empty_ballot.json(), ) return response - assert response.status_code == 200 - assert "ballot-check" in response.json() - assert "vote-index" in response.json() - return response.json() +def test_cast_ballot(vote_store_id, empty_ballot) + assert empty_ballot.status_code == 200 + assert "ballot-check" in empty_ballot.json() + assert "vote-index" in empty_ballot.json() # Endpoint #4 From c5fe9d8385ebd235c6a0e0b265dd439398207698 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:38:29 -0400 Subject: [PATCH 56/61] Update tests/test_main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- tests/test_main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_main.py b/tests/test_main.py index b96ad0f..8f3af79 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -59,7 +59,7 @@ def test_cast_ballot(vote_store_id, empty_ballot) # Endpoint #4 -def test_verify_ballot_check(test_get_vote_store_id, test_cast_ballot): +def test_verify_ballot_check(vote_store_id, cast_ballot): """testing the verification of a ballot check""" # import pdb; pdb.set_trace() response = client.post( From 780697b70675cca0aadd96bbe6f2ece56a9d8013 Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:38:49 -0400 Subject: [PATCH 57/61] Update tests/test_main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- tests/test_main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_main.py b/tests/test_main.py index 8f3af79..1b73d80 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -63,8 +63,8 @@ def test_verify_ballot_check(vote_store_id, cast_ballot): """testing the verification of a ballot check""" # import pdb; pdb.set_trace() response = client.post( - f"/vote/verify-ballot-check/{test_get_vote_store_id}", - json=test_cast_ballot, + f"/vote/verify-ballot-check/{vote_store_id}", + json=cast_ballot.json(), ) assert response.status_code == 200 assert "ballot-check-doc" in response.json() From 022be1366418f8bc2753f1ea798d67c6a0a4fc7a Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:39:05 -0400 Subject: [PATCH 58/61] Update tests/test_main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- tests/test_main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_main.py b/tests/test_main.py index 1b73d80..0d19f8d 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -71,7 +71,7 @@ def test_verify_ballot_check(vote_store_id, cast_ballot): # Endpoint #5 -def test_tally_election(test_get_vote_store_id): +def test_tally_election(vote_store_id): """testing the tally""" # import pdb; pdb.set_trace() response = client.post( From 46f4ce3197068bf167d8d891c45889f3352cc9fb Mon Sep 17 00:00:00 2001 From: sandy currier Date: Sun, 30 Apr 2023 15:39:27 -0400 Subject: [PATCH 59/61] Update tests/test_main.py Co-authored-by: Ion Y <78449689+ion-oset@users.noreply.github.com> --- tests/test_main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_main.py b/tests/test_main.py index 0d19f8d..71f11de 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -75,7 +75,7 @@ def test_tally_election(vote_store_id): """testing the tally""" # import pdb; pdb.set_trace() response = client.post( - f"/vote/tally-election/{test_get_vote_store_id}", + f"/vote/tally-election/{vote_store_id}", json={ "contest-uids": None, "track-contests": "123", From 7e7407477a8f00b533f610015f58ba9ab12b8f14 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Sun, 30 Apr 2023 15:47:09 -0400 Subject: [PATCH 60/61] PR - tweaking class documentation --- src/vtp/web/api/backend.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/vtp/web/api/backend.py b/src/vtp/web/api/backend.py index ddc1f84..a1f434c 100644 --- a/src/vtp/web/api/backend.py +++ b/src/vtp/web/api/backend.py @@ -43,7 +43,11 @@ class VtpBackend: - """Class to keep the namespace separate""" + """ + Class to keep the namespace separate and allow the creation of a + shim layer in the VTP-web-api repo so that this repo can easily + talk with the VoteTrackerPlus backend repo. + """ ######## # backend demo constants From dc8882d1e26d8621174afc5bbc5ee0e9d0156ad8 Mon Sep 17 00:00:00 2001 From: Sandy Currier Date: Sun, 30 Apr 2023 19:25:29 -0400 Subject: [PATCH 61/61] more PR work - clean up error testing idiom --- src/vtp/web/api/main.py | 59 ++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/src/vtp/web/api/main.py b/src/vtp/web/api/main.py index c722ce1..7127d1a 100644 --- a/src/vtp/web/api/main.py +++ b/src/vtp/web/api/main.py @@ -33,10 +33,11 @@ async def get_vote_store_id() -> dict: async def get_empty_ballot(vote_store_id: str) -> dict: """Return an empty ballot for a given Vote Store ID""" - if vote_store_id in vote_store_ids: - empty_ballot = VtpBackend.get_empty_ballot(vote_store_id) - return {"blank-ballot": empty_ballot} - return {"error": "VoteStoreID not found"} + if vote_store_id not in vote_store_ids: + return {"error": "VoteStoreID not found"} + + empty_ballot = VtpBackend.get_empty_ballot(vote_store_id) + return {"blank-ballot": empty_ballot} # for testing - show a mock cast ballot @app.get("/show-mock-ballot") @@ -74,15 +75,15 @@ async def cast_ballot( # breakpoint() if vote_store_id not in vote_store_ids: return {"error": "VoteStoreID not found"} - if vote_store_ids[vote_store_id] != "cast": + if vote_store_ids[vote_store_id] == "cast": return {"error": "This ballot has already been cast"} - + ballot_check, vote_index = VtpBackend.cast_ballot( vote_store_id, incoming_ballot_data, ) vote_store_ids[vote_store_id] = "cast" - return {"ballot-check": ballot_check, "vote-index": vote_index} + return {"ballot-check": ballot_check, "vote-index": vote_index} # Endpoint #4 @@ -100,17 +101,18 @@ async def verify_ballot_check( pending further discussions """ - # import pdb; pdb.set_trace() + # breakpoint() ballot_check = incoming_ballot_data["ballot-check"] vote_index = incoming_ballot_data["vote-index"] - if vote_store_id in vote_store_ids: - ballot_check_doc = VtpBackend.verify_ballot_check( - vote_store_id, - ballot_check, - vote_index, - ) - return {"ballot-check-doc": ballot_check_doc} - return {"error": "VoteStoreID not found"} + if vote_store_id not in vote_store_ids: + return {"error": "VoteStoreID not found"} + + ballot_check_doc = VtpBackend.verify_ballot_check( + vote_store_id, + ballot_check, + vote_index, + ) + return {"ballot-check-doc": ballot_check_doc} # Endpoint #5 @@ -136,15 +138,16 @@ async def tally_election( string "None". """ - # import pdb; pdb.set_trace() - if vote_store_id in vote_store_ids: - tally_election_doc = VtpBackend.tally_election_check( - vote_store_id, - contests, - digests, - ) - return {"tally-election-doc": tally_election_doc} - return {"error": "VoteStoreID not found"} + # breakpoint() + if vote_store_id not in vote_store_ids: + return {"error": "VoteStoreID not found"} + + tally_election_doc = VtpBackend.tally_election_check( + vote_store_id, + contests, + digests, + ) + return {"tally-election-doc": tally_election_doc} # Endpoint #6 @app.get("/contests/{vote_store_id}/{contests}") @@ -156,9 +159,9 @@ async def show_contest( Will display the CVR contents of one or more contests """ - # import pdb; pdb.set_trace() - if vote_store_id in vote_store_ids: - return {"error": "VoteStoreID not found"} + # breakpoint() + if vote_store_id not in vote_store_ids: + return {"error": "VoteStoreID not found"} return VtpBackend.show_contest( vote_store_id,