diff --git a/poetry.lock b/poetry.lock index 09c8a826..414b5276 100644 --- a/poetry.lock +++ b/poetry.lock @@ -11,6 +11,27 @@ files = [ {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, ] +[[package]] +name = "beautifulsoup4" +version = "4.12.3" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, + {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] +html5lib = ["html5lib"] +lxml = ["lxml"] + [[package]] name = "black" version = "24.3.0" @@ -55,6 +76,116 @@ d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] +[[package]] +name = "certifi" +version = "2024.2.2" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + [[package]] name = "click" version = "8.1.7" @@ -82,63 +213,63 @@ files = [ [[package]] name = "coverage" -version = "7.4.1" +version = "7.4.4" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:077d366e724f24fc02dbfe9d946534357fda71af9764ff99d73c3c596001bbd7"}, - {file = "coverage-7.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0193657651f5399d433c92f8ae264aff31fc1d066deee4b831549526433f3f61"}, - {file = "coverage-7.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d17bbc946f52ca67adf72a5ee783cd7cd3477f8f8796f59b4974a9b59cacc9ee"}, - {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3277f5fa7483c927fe3a7b017b39351610265308f5267ac6d4c2b64cc1d8d25"}, - {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dceb61d40cbfcf45f51e59933c784a50846dc03211054bd76b421a713dcdf19"}, - {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6008adeca04a445ea6ef31b2cbaf1d01d02986047606f7da266629afee982630"}, - {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c61f66d93d712f6e03369b6a7769233bfda880b12f417eefdd4f16d1deb2fc4c"}, - {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9bb62fac84d5f2ff523304e59e5c439955fb3b7f44e3d7b2085184db74d733b"}, - {file = "coverage-7.4.1-cp310-cp310-win32.whl", hash = "sha256:f86f368e1c7ce897bf2457b9eb61169a44e2ef797099fb5728482b8d69f3f016"}, - {file = "coverage-7.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:869b5046d41abfea3e381dd143407b0d29b8282a904a19cb908fa24d090cc018"}, - {file = "coverage-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b8ffb498a83d7e0305968289441914154fb0ef5d8b3157df02a90c6695978295"}, - {file = "coverage-7.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3cacfaefe6089d477264001f90f55b7881ba615953414999c46cc9713ff93c8c"}, - {file = "coverage-7.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6850e6e36e332d5511a48a251790ddc545e16e8beaf046c03985c69ccb2676"}, - {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18e961aa13b6d47f758cc5879383d27b5b3f3dcd9ce8cdbfdc2571fe86feb4dd"}, - {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfd1e1b9f0898817babf840b77ce9fe655ecbe8b1b327983df485b30df8cc011"}, - {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6b00e21f86598b6330f0019b40fb397e705135040dbedc2ca9a93c7441178e74"}, - {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:536d609c6963c50055bab766d9951b6c394759190d03311f3e9fcf194ca909e1"}, - {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7ac8f8eb153724f84885a1374999b7e45734bf93a87d8df1e7ce2146860edef6"}, - {file = "coverage-7.4.1-cp311-cp311-win32.whl", hash = "sha256:f3771b23bb3675a06f5d885c3630b1d01ea6cac9e84a01aaf5508706dba546c5"}, - {file = "coverage-7.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:9d2f9d4cc2a53b38cabc2d6d80f7f9b7e3da26b2f53d48f05876fef7956b6968"}, - {file = "coverage-7.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f68ef3660677e6624c8cace943e4765545f8191313a07288a53d3da188bd8581"}, - {file = "coverage-7.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23b27b8a698e749b61809fb637eb98ebf0e505710ec46a8aa6f1be7dc0dc43a6"}, - {file = "coverage-7.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3424c554391dc9ef4a92ad28665756566a28fecf47308f91841f6c49288e66"}, - {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0860a348bf7004c812c8368d1fc7f77fe8e4c095d661a579196a9533778e156"}, - {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe558371c1bdf3b8fa03e097c523fb9645b8730399c14fe7721ee9c9e2a545d3"}, - {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3468cc8720402af37b6c6e7e2a9cdb9f6c16c728638a2ebc768ba1ef6f26c3a1"}, - {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:02f2edb575d62172aa28fe00efe821ae31f25dc3d589055b3fb64d51e52e4ab1"}, - {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ca6e61dc52f601d1d224526360cdeab0d0712ec104a2ce6cc5ccef6ed9a233bc"}, - {file = "coverage-7.4.1-cp312-cp312-win32.whl", hash = "sha256:ca7b26a5e456a843b9b6683eada193fc1f65c761b3a473941efe5a291f604c74"}, - {file = "coverage-7.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:85ccc5fa54c2ed64bd91ed3b4a627b9cce04646a659512a051fa82a92c04a448"}, - {file = "coverage-7.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8bdb0285a0202888d19ec6b6d23d5990410decb932b709f2b0dfe216d031d218"}, - {file = "coverage-7.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:918440dea04521f499721c039863ef95433314b1db00ff826a02580c1f503e45"}, - {file = "coverage-7.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379d4c7abad5afbe9d88cc31ea8ca262296480a86af945b08214eb1a556a3e4d"}, - {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b094116f0b6155e36a304ff912f89bbb5067157aff5f94060ff20bbabdc8da06"}, - {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f5968608b1fe2a1d00d01ad1017ee27efd99b3437e08b83ded9b7af3f6f766"}, - {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:10e88e7f41e6197ea0429ae18f21ff521d4f4490aa33048f6c6f94c6045a6a75"}, - {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a4a3907011d39dbc3e37bdc5df0a8c93853c369039b59efa33a7b6669de04c60"}, - {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d224f0c4c9c98290a6990259073f496fcec1b5cc613eecbd22786d398ded3ad"}, - {file = "coverage-7.4.1-cp38-cp38-win32.whl", hash = "sha256:23f5881362dcb0e1a92b84b3c2809bdc90db892332daab81ad8f642d8ed55042"}, - {file = "coverage-7.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:a07f61fc452c43cd5328b392e52555f7d1952400a1ad09086c4a8addccbd138d"}, - {file = "coverage-7.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8e738a492b6221f8dcf281b67129510835461132b03024830ac0e554311a5c54"}, - {file = "coverage-7.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46342fed0fff72efcda77040b14728049200cbba1279e0bf1188f1f2078c1d70"}, - {file = "coverage-7.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9641e21670c68c7e57d2053ddf6c443e4f0a6e18e547e86af3fad0795414a628"}, - {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aeb2c2688ed93b027eb0d26aa188ada34acb22dceea256d76390eea135083950"}, - {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d12c923757de24e4e2110cf8832d83a886a4cf215c6e61ed506006872b43a6d1"}, - {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0491275c3b9971cdbd28a4595c2cb5838f08036bca31765bad5e17edf900b2c7"}, - {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8dfc5e195bbef80aabd81596ef52a1277ee7143fe419efc3c4d8ba2754671756"}, - {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1a78b656a4d12b0490ca72651fe4d9f5e07e3c6461063a9b6265ee45eb2bdd35"}, - {file = "coverage-7.4.1-cp39-cp39-win32.whl", hash = "sha256:f90515974b39f4dea2f27c0959688621b46d96d5a626cf9c53dbc653a895c05c"}, - {file = "coverage-7.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:64e723ca82a84053dd7bfcc986bdb34af8d9da83c521c19d6b472bc6880e191a"}, - {file = "coverage-7.4.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:32a8d985462e37cfdab611a6f95b09d7c091d07668fdc26e47a725ee575fe166"}, - {file = "coverage-7.4.1.tar.gz", hash = "sha256:1ed4b95480952b1a26d863e546fa5094564aa0065e1e5f0d4d0041f293251d04"}, + {file = "coverage-7.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0be5efd5127542ef31f165de269f77560d6cdef525fffa446de6f7e9186cfb2"}, + {file = "coverage-7.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ccd341521be3d1b3daeb41960ae94a5e87abe2f46f17224ba5d6f2b8398016cf"}, + {file = "coverage-7.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fa497a8ab37784fbb20ab699c246053ac294d13fc7eb40ec007a5043ec91f8"}, + {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1a93009cb80730c9bca5d6d4665494b725b6e8e157c1cb7f2db5b4b122ea562"}, + {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:690db6517f09336559dc0b5f55342df62370a48f5469fabf502db2c6d1cffcd2"}, + {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:09c3255458533cb76ef55da8cc49ffab9e33f083739c8bd4f58e79fecfe288f7"}, + {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8ce1415194b4a6bd0cdcc3a1dfbf58b63f910dcb7330fe15bdff542c56949f87"}, + {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b91cbc4b195444e7e258ba27ac33769c41b94967919f10037e6355e998af255c"}, + {file = "coverage-7.4.4-cp310-cp310-win32.whl", hash = "sha256:598825b51b81c808cb6f078dcb972f96af96b078faa47af7dfcdf282835baa8d"}, + {file = "coverage-7.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:09ef9199ed6653989ebbcaacc9b62b514bb63ea2f90256e71fea3ed74bd8ff6f"}, + {file = "coverage-7.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f9f50e7ef2a71e2fae92774c99170eb8304e3fdf9c8c3c7ae9bab3e7229c5cf"}, + {file = "coverage-7.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:623512f8ba53c422fcfb2ce68362c97945095b864cda94a92edbaf5994201083"}, + {file = "coverage-7.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0513b9508b93da4e1716744ef6ebc507aff016ba115ffe8ecff744d1322a7b63"}, + {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40209e141059b9370a2657c9b15607815359ab3ef9918f0196b6fccce8d3230f"}, + {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a2b2b78c78293782fd3767d53e6474582f62443d0504b1554370bde86cc8227"}, + {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:73bfb9c09951125d06ee473bed216e2c3742f530fc5acc1383883125de76d9cd"}, + {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f384c3cc76aeedce208643697fb3e8437604b512255de6d18dae3f27655a384"}, + {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:54eb8d1bf7cacfbf2a3186019bcf01d11c666bd495ed18717162f7eb1e9dd00b"}, + {file = "coverage-7.4.4-cp311-cp311-win32.whl", hash = "sha256:cac99918c7bba15302a2d81f0312c08054a3359eaa1929c7e4b26ebe41e9b286"}, + {file = "coverage-7.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:b14706df8b2de49869ae03a5ccbc211f4041750cd4a66f698df89d44f4bd30ec"}, + {file = "coverage-7.4.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:201bef2eea65e0e9c56343115ba3814e896afe6d36ffd37bab783261db430f76"}, + {file = "coverage-7.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41c9c5f3de16b903b610d09650e5e27adbfa7f500302718c9ffd1c12cf9d6818"}, + {file = "coverage-7.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d898fe162d26929b5960e4e138651f7427048e72c853607f2b200909794ed978"}, + {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ea79bb50e805cd6ac058dfa3b5c8f6c040cb87fe83de10845857f5535d1db70"}, + {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce4b94265ca988c3f8e479e741693d143026632672e3ff924f25fab50518dd51"}, + {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:00838a35b882694afda09f85e469c96367daa3f3f2b097d846a7216993d37f4c"}, + {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fdfafb32984684eb03c2d83e1e51f64f0906b11e64482df3c5db936ce3839d48"}, + {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:69eb372f7e2ece89f14751fbcbe470295d73ed41ecd37ca36ed2eb47512a6ab9"}, + {file = "coverage-7.4.4-cp312-cp312-win32.whl", hash = "sha256:137eb07173141545e07403cca94ab625cc1cc6bc4c1e97b6e3846270e7e1fea0"}, + {file = "coverage-7.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:d71eec7d83298f1af3326ce0ff1d0ea83c7cb98f72b577097f9083b20bdaf05e"}, + {file = "coverage-7.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ae728ff3b5401cc320d792866987e7e7e880e6ebd24433b70a33b643bb0384"}, + {file = "coverage-7.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cc4f1358cb0c78edef3ed237ef2c86056206bb8d9140e73b6b89fbcfcbdd40e1"}, + {file = "coverage-7.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8130a2aa2acb8788e0b56938786c33c7c98562697bf9f4c7d6e8e5e3a0501e4a"}, + {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf271892d13e43bc2b51e6908ec9a6a5094a4df1d8af0bfc360088ee6c684409"}, + {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4cdc86d54b5da0df6d3d3a2f0b710949286094c3a6700c21e9015932b81447e"}, + {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae71e7ddb7a413dd60052e90528f2f65270aad4b509563af6d03d53e979feafd"}, + {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:38dd60d7bf242c4ed5b38e094baf6401faa114fc09e9e6632374388a404f98e7"}, + {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa5b1c1bfc28384f1f53b69a023d789f72b2e0ab1b3787aae16992a7ca21056c"}, + {file = "coverage-7.4.4-cp38-cp38-win32.whl", hash = "sha256:dfa8fe35a0bb90382837b238fff375de15f0dcdb9ae68ff85f7a63649c98527e"}, + {file = "coverage-7.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:b2991665420a803495e0b90a79233c1433d6ed77ef282e8e152a324bbbc5e0c8"}, + {file = "coverage-7.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b799445b9f7ee8bf299cfaed6f5b226c0037b74886a4e11515e569b36fe310d"}, + {file = "coverage-7.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b4d33f418f46362995f1e9d4f3a35a1b6322cb959c31d88ae56b0298e1c22357"}, + {file = "coverage-7.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aadacf9a2f407a4688d700e4ebab33a7e2e408f2ca04dbf4aef17585389eff3e"}, + {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c95949560050d04d46b919301826525597f07b33beba6187d04fa64d47ac82e"}, + {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff7687ca3d7028d8a5f0ebae95a6e4827c5616b31a4ee1192bdfde697db110d4"}, + {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5fc1de20b2d4a061b3df27ab9b7c7111e9a710f10dc2b84d33a4ab25065994ec"}, + {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c74880fc64d4958159fbd537a091d2a585448a8f8508bf248d72112723974cbd"}, + {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:742a76a12aa45b44d236815d282b03cfb1de3b4323f3e4ec933acfae08e54ade"}, + {file = "coverage-7.4.4-cp39-cp39-win32.whl", hash = "sha256:d89d7b2974cae412400e88f35d86af72208e1ede1a541954af5d944a8ba46c57"}, + {file = "coverage-7.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:9ca28a302acb19b6af89e90f33ee3e1906961f94b54ea37de6737b7ca9d8827c"}, + {file = "coverage-7.4.4-pp38.pp39.pp310-none-any.whl", hash = "sha256:b2c5edc4ac10a7ef6605a966c58929ec6c1bd0917fb8c15cb3363f65aa40e677"}, + {file = "coverage-7.4.4.tar.gz", hash = "sha256:c901df83d097649e257e803be22592aedfd5182f07b3cc87d640bbb9afd50f49"}, ] [package.extras] @@ -155,6 +286,17 @@ files = [ {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, ] +[[package]] +name = "idna" +version = "3.6" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, +] + [[package]] name = "iniconfig" version = "2.0.0" @@ -166,6 +308,135 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +[[package]] +name = "lxml" +version = "5.2.0" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +optional = false +python-versions = ">=3.6" +files = [ + {file = "lxml-5.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c54f8d6160080831a76780d850302fdeb0e8d0806f661777b0714dfb55d9a08a"}, + {file = "lxml-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0e95ae029396382a0d2e8174e4077f96befcd4a2184678db363ddc074eb4d3b2"}, + {file = "lxml-5.2.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5810fa80e64a0c689262a71af999c5735f48c0da0affcbc9041d1ef5ef3920be"}, + {file = "lxml-5.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae69524fd6a68b288574013f8fadac23cacf089c75cd3fc5b216277a445eb736"}, + {file = "lxml-5.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fadda215e32fe375d65e560b7f7e2a37c7f9c4ecee5315bb1225ca6ac9bf5838"}, + {file = "lxml-5.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:f1f164e4cc6bc646b1fc86664c3543bf4a941d45235797279b120dc740ee7af5"}, + {file = "lxml-5.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3603a8a41097daf7672cae22cc4a860ab9ea5597f1c5371cb21beca3398b8d6a"}, + {file = "lxml-5.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3b4bb89a785f4fd60e05f3c3a526c07d0d68e3536f17f169ca13bf5b5dd75a5"}, + {file = "lxml-5.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1effc10bf782f0696e76ecfeba0720ea02c0c31d5bffb7b29ba10debd57d1c3d"}, + {file = "lxml-5.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b03531f6cd6ce4b511dcece060ca20aa5412f8db449274b44f4003f282e6272f"}, + {file = "lxml-5.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fac15090bb966719df06f0c4f8139783746d1e60e71016d8a65db2031ca41b8"}, + {file = "lxml-5.2.0-cp310-cp310-win32.whl", hash = "sha256:92bb37c96215c4b2eb26f3c791c0bf02c64dd251effa532b43ca5049000c4478"}, + {file = "lxml-5.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:b0181c22fdb89cc19e70240a850e5480817c3e815b1eceb171b3d7a3aa3e596a"}, + {file = "lxml-5.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ada8ce9e6e1d126ef60d215baaa0c81381ba5841c25f1d00a71cdafdc038bd27"}, + {file = "lxml-5.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3cefb133c859f06dab2ae63885d9f405000c4031ec516e0ed4f9d779f690d8e3"}, + {file = "lxml-5.2.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ede2a7a86a977b0c741654efaeca0af7860a9b1ae39f9268f0936246a977ee0"}, + {file = "lxml-5.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d46df6f0b1a0cda39d12c5c4615a7d92f40342deb8001c7b434d7c8c78352e58"}, + {file = "lxml-5.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2259243ee734cc736e237719037efb86603c891fd363cc7973a2d0ac8a0e3f"}, + {file = "lxml-5.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:c53164f29ed3c3868787144e8ea8a399ffd7d8215f59500a20173593c19e96eb"}, + {file = "lxml-5.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:371aab9a397dcc76625ad3b02fa9b21be63406d69237b773156e7d1fc2ce0cae"}, + {file = "lxml-5.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e08784288a179b59115b5e57abf6d387528b39abb61105fe17510a199a277a40"}, + {file = "lxml-5.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c232726f7b6df5143415a06323faaa998ef8abbe1c0ed00d718755231d76f08"}, + {file = "lxml-5.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e4366e58c0508da4dee4c7c70cee657e38553d73abdffa53abbd7d743711ee11"}, + {file = "lxml-5.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c84dce8fb2e900d4fb094e76fdad34a5fd06de53e41bddc1502c146eb11abd74"}, + {file = "lxml-5.2.0-cp311-cp311-win32.whl", hash = "sha256:0947d1114e337dc2aae2fa14bbc9ed5d9ca1a0acd6d2f948df9926aef65305e9"}, + {file = "lxml-5.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1eace37a9f4a1bef0bb5c849434933fd6213008ec583c8e31ee5b8e99c7c8500"}, + {file = "lxml-5.2.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f2cb157e279d28c66b1c27e0948687dc31dc47d1ab10ce0cd292a8334b7de3d5"}, + {file = "lxml-5.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:53c0e56f41ef68c1ce4e96f27ecdc2df389730391a2fd45439eb3facb02d36c8"}, + {file = "lxml-5.2.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:703d60e59ab45c17485c2c14b11880e4f7f0eab07134afa9007573fa5a779a5a"}, + {file = "lxml-5.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaf5e308a5e50bc0548c4fdca0117a31ec9596f8cfc96592db170bcecc71a957"}, + {file = "lxml-5.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af64df85fecd3cf3b2e792f0b5b4d92740905adfa8ce3b24977a55415f1a0c40"}, + {file = "lxml-5.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:df7dfbdef11702fd22c2eaf042d7098d17edbc62d73f2199386ad06cbe466f6d"}, + {file = "lxml-5.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7250030a7835bfd5ba6ca7d1ad483ec90f9cbc29978c5e75c1cc3e031d3c4160"}, + {file = "lxml-5.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:be5faa2d5c8c8294d770cfd09d119fb27b5589acc59635b0cf90f145dbe81dca"}, + {file = "lxml-5.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:347ec08250d5950f5b016caa3e2e13fb2cb9714fe6041d52e3716fb33c208663"}, + {file = "lxml-5.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:dc7b630c4fb428b8a40ddd0bfc4bc19de11bb3c9b031154f77360e48fe8b4451"}, + {file = "lxml-5.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ae550cbd7f229cdf2841d9b01406bcca379a5fb327b9efb53ba620a10452e835"}, + {file = "lxml-5.2.0-cp312-cp312-win32.whl", hash = "sha256:7c61ce3cdd6e6c9f4003ac118be7eb3036d0ce2afdf23929e533e54482780f74"}, + {file = "lxml-5.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:f90c36ca95a44d2636bbf55a51ca30583b59b71b6547b88d954e029598043551"}, + {file = "lxml-5.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1cce2eaad7e38b985b0f91f18468dda0d6b91862d32bec945b0e46e2ffe7222e"}, + {file = "lxml-5.2.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:60a3983d32f722a8422c01e4dc4badc7a307ca55c59e2485d0e14244a52c482f"}, + {file = "lxml-5.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60847dfbdfddf08a56c4eefe48234e8c1ab756c7eda4a2a7c1042666a5516564"}, + {file = "lxml-5.2.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bbe335f0d1a86391671d975a1b5e9b08bb72fba6b567c43bdc2e55ca6e6c086"}, + {file = "lxml-5.2.0-cp36-cp36m-manylinux_2_28_aarch64.whl", hash = "sha256:3ac7c8a60b8ad51fe7bca99a634dd625d66492c502fd548dc6dc769ce7d94b6a"}, + {file = "lxml-5.2.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:73e69762cf740ac3ae81137ef9d6f15f93095f50854e233d50b29e7b8a91dbc6"}, + {file = "lxml-5.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:281ee1ffeb0ab06204dfcd22a90e9003f0bb2dab04101ad983d0b1773bc10588"}, + {file = "lxml-5.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ba3a86b0d5a5c93104cb899dff291e3ae13729c389725a876d00ef9696de5425"}, + {file = "lxml-5.2.0-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:356f8873b1e27b81793e30144229adf70f6d3e36e5cb7b6d289da690f4398953"}, + {file = "lxml-5.2.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:2a34e74ffe92c413f197ff4967fb1611d938ee0691b762d062ef0f73814f3aa4"}, + {file = "lxml-5.2.0-cp36-cp36m-win32.whl", hash = "sha256:6f0d2b97a5a06c00c963d4542793f3e486b1ed3a957f8c19f6006ed39d104bb0"}, + {file = "lxml-5.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:35e39c6fd089ad6674eb52d93aa874d6027b3ae44d2381cca6e9e4c2e102c9c8"}, + {file = "lxml-5.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5f6e4e5a62114ae76690c4a04c5108d067442d0a41fd092e8abd25af1288c450"}, + {file = "lxml-5.2.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93eede9bcc842f891b2267c7f0984d811940d1bc18472898a1187fe560907a99"}, + {file = "lxml-5.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ad364026c2cebacd7e01d1138bd53639822fefa8f7da90fc38cd0e6319a2699"}, + {file = "lxml-5.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f06e4460e76468d99cc36d5b9bc6fc5f43e6662af44960e13e3f4e040aacb35"}, + {file = "lxml-5.2.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:ca3236f31d565555139d5b00b790ed2a98ac6f0c4470c4032f8b5e5a5dba3c1a"}, + {file = "lxml-5.2.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:a9b67b850ab1d304cb706cf71814b0e0c3875287083d7ec55ee69504a9c48180"}, + {file = "lxml-5.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5261c858c390ae9a19aba96796948b6a2d56649cbd572968970dc8da2b2b2a42"}, + {file = "lxml-5.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e8359fb610c8c444ac473cfd82dae465f405ff807cabb98a9b9712bbd0028751"}, + {file = "lxml-5.2.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:f9e27841cddfaebc4e3ffbe5dbdff42891051acf5befc9f5323944b2c61cef16"}, + {file = "lxml-5.2.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:641a8da145aca67671205f3e89bfec9815138cf2fe06653c909eab42e486d373"}, + {file = "lxml-5.2.0-cp37-cp37m-win32.whl", hash = "sha256:931a3a13e0f574abce8f3152b207938a54304ccf7a6fd7dff1fdb2f6691d08af"}, + {file = "lxml-5.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:246c93e2503c710cf02c7e9869dc0258223cbefe5e8f9ecded0ac0aa07fd2bf8"}, + {file = "lxml-5.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:11acfcdf5a38cf89c48662123a5d02ae0a7d99142c7ee14ad90de5c96a9b6f06"}, + {file = "lxml-5.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:200f70b5d95fc79eb9ed7f8c4888eef4e274b9bf380b829d3d52e9ed962e9231"}, + {file = "lxml-5.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba4d02aed47c25be6775a40d55c5774327fdedba79871b7c2485e80e45750cb2"}, + {file = "lxml-5.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e283b24c14361fe9e04026a1d06c924450415491b83089951d469509900d9f32"}, + {file = "lxml-5.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:03e3962d6ad13a862dacd5b3a3ea60b4d092a550f36465234b8639311fd60989"}, + {file = "lxml-5.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6e45fd5213e5587a610b7e7c8c5319a77591ab21ead42df46bb342e21bc1418d"}, + {file = "lxml-5.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:27877732946843f4b6bfc56eb40d865653eef34ad2edeed16b015d5c29c248df"}, + {file = "lxml-5.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4d16b44ad0dd8c948129639e34c8d301ad87ebc852568ace6fe9a5ad9ce67ee1"}, + {file = "lxml-5.2.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b8f842df9ba26135c5414e93214e04fe0af259bb4f96a32f756f89467f7f3b45"}, + {file = "lxml-5.2.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c74e77df9e36c8c91157853e6cd400f6f9ca7a803ba89981bfe3f3fc7e5651ef"}, + {file = "lxml-5.2.0-cp38-cp38-win32.whl", hash = "sha256:1459a998c10a99711ac532abe5cc24ba354e4396dafef741c7797f8830712d56"}, + {file = "lxml-5.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:a00f5931b7cccea775123c3c0a2513aee58afdad8728550cc970bff32280bdd2"}, + {file = "lxml-5.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ddda5ba8831f258ac7e6364be03cb27aa62f50c67fd94bc1c3b6247959cc0369"}, + {file = "lxml-5.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56835b9e9a7767202fae06310c6b67478963e535fe185bed3bf9af5b18d2b67e"}, + {file = "lxml-5.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25fef8794f0dc89f01bdd02df6a7fec4bcb2fbbe661d571e898167a83480185e"}, + {file = "lxml-5.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32d44af078485c4da9a7ec460162392d49d996caf89516fa0b75ad0838047122"}, + {file = "lxml-5.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f354d62345acdf22aa3e171bd9723790324a66fafe61bfe3873b86724cf6daaa"}, + {file = "lxml-5.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6a7e0935f05e1cf1a3aa1d49a87505773b04f128660eac2a24a5594ea6b1baa7"}, + {file = "lxml-5.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:75a4117b43694c72a0d89f6c18a28dc57407bde4650927d4ef5fd384bdf6dcc7"}, + {file = "lxml-5.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:57402d6cdd8a897ce21cf8d1ff36683583c17a16322a321184766c89a1980600"}, + {file = "lxml-5.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:56591e477bea531e5e1854f5dfb59309d5708669bc921562a35fd9ca5182bdcd"}, + {file = "lxml-5.2.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7efbce96719aa275d49ad5357886845561328bf07e1d5ab998f4e3066c5ccf15"}, + {file = "lxml-5.2.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a3c39def0965e8fb5c8d50973e0c7b4ce429a2fa730f3f9068a7f4f9ce78410b"}, + {file = "lxml-5.2.0-cp39-cp39-win32.whl", hash = "sha256:5188f22c00381cb44283ecb28c8d85c2db4a3035774dd851876c8647cb809c27"}, + {file = "lxml-5.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:ed1fe80e1fcdd1205a443bddb1ad3c3135bb1cd3f36cc996a1f4aed35960fbe8"}, + {file = "lxml-5.2.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d2b339fb790fc923ae2e9345c8633e3d0064d37ea7920c027f20c8ae6f65a91f"}, + {file = "lxml-5.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06036d60fccb21e22dd167f6d0e422b9cbdf3588a7e999a33799f9cbf01e41a5"}, + {file = "lxml-5.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a1611fb9de0a269c05575c024e6d8cdf2186e3fa52b364e3b03dcad82514d57"}, + {file = "lxml-5.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:05fc3720250d221792b6e0d150afc92d20cb10c9cdaa8c8f93c2a00fbdd16015"}, + {file = "lxml-5.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:11e41ffd3cd27b0ca1c76073b27bd860f96431d9b70f383990f1827ca19f2f52"}, + {file = "lxml-5.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0382e6a3eefa3f6699b14fa77c2eb32af2ada261b75120eaf4fc028a20394975"}, + {file = "lxml-5.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be5c8e776ecbcf8c1bce71a7d90e3a3680c9ceae516cac0be08b47e9fac0ca43"}, + {file = "lxml-5.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da12b4efc93d53068888cb3b58e355b31839f2428b8f13654bd25d68b201c240"}, + {file = "lxml-5.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f46f8033da364bacc74aca5e319509a20bb711c8a133680ca5f35020f9eaf025"}, + {file = "lxml-5.2.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:50a26f68d090594477df8572babac64575cd5c07373f7a8319c527c8e56c0f99"}, + {file = "lxml-5.2.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:57cbadf028727705086047994d2e50124650e63ce5a035b0aa79ab50f001989f"}, + {file = "lxml-5.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8aa11638902ac23f944f16ce45c9f04c9d5d57bb2da66822abb721f4efe5fdbb"}, + {file = "lxml-5.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b7150e630b879390e02121e71ceb1807f682b88342e2ea2082e2c8716cf8bd93"}, + {file = "lxml-5.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4add722393c99da4d51c8d9f3e1ddf435b30677f2d9ba9aeaa656f23c1b7b580"}, + {file = "lxml-5.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd0f25a431cd16f70ec1c47c10b413e7ddfe1ccaaddd1a7abd181e507c012374"}, + {file = "lxml-5.2.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:883e382695f346c2ea3ad96bdbdf4ca531788fbeedb4352be3a8fcd169fc387d"}, + {file = "lxml-5.2.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:80cc2b55bb6e35d3cb40936b658837eb131e9f16357241cd9ba106ae1e9c5ecb"}, + {file = "lxml-5.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:59ec2948385336e9901008fdf765780fe30f03e7fdba8090aafdbe5d1b7ea0cd"}, + {file = "lxml-5.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ddbea6e58cce1a640d9d65947f1e259423fc201c9cf9761782f355f53b7f3097"}, + {file = "lxml-5.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52d6cdea438eb7282c41c5ac00bd6d47d14bebb6e8a8d2a1c168ed9e0cacfbab"}, + {file = "lxml-5.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c556bbf88a8b667c849d326dd4dd9c6290ede5a33383ffc12b0ed17777f909d"}, + {file = "lxml-5.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:947fa8bf15d1c62c6db36c6ede9389cac54f59af27010251747f05bddc227745"}, + {file = "lxml-5.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e6cb8f7a332eaa2d876b649a748a445a38522e12f2168e5e838d1505a91cdbb7"}, + {file = "lxml-5.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:16e65223f34fd3d65259b174f0f75a4bb3d9893698e5e7d01e54cd8c5eb98d85"}, + {file = "lxml-5.2.0.tar.gz", hash = "sha256:21dc490cdb33047bc7f7ad76384f3366fa8f5146b86cc04c4af45de901393b90"}, +] + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html-clean = ["lxml-html-clean"] +html5 = ["html5lib"] +htmlsoup = ["BeautifulSoup4"] +source = ["Cython (>=3.0.10)"] + [[package]] name = "multimethod" version = "1.10" @@ -249,13 +520,13 @@ et-xmlfile = "*" [[package]] name = "packaging" -version = "23.2" +version = "24.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] [[package]] @@ -405,18 +676,18 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pydantic" -version = "2.6.1" +version = "2.6.4" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.6.1-py3-none-any.whl", hash = "sha256:0b6a909df3192245cb736509a92ff69e4fef76116feffec68e93a567347bae6f"}, - {file = "pydantic-2.6.1.tar.gz", hash = "sha256:4fd5c182a2488dc63e6d32737ff19937888001e2a6d86e94b3f233104a5d1fa9"}, + {file = "pydantic-2.6.4-py3-none-any.whl", hash = "sha256:cc46fce86607580867bdc3361ad462bab9c222ef042d3da86f2fb333e1d916c5"}, + {file = "pydantic-2.6.4.tar.gz", hash = "sha256:b1704e0847db01817624a6b86766967f552dd9dbf3afba4004409f908dcc84e6"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.16.2" +pydantic-core = "2.16.3" typing-extensions = ">=4.6.1" [package.extras] @@ -424,90 +695,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.16.2" +version = "2.16.3" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.16.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3fab4e75b8c525a4776e7630b9ee48aea50107fea6ca9f593c98da3f4d11bf7c"}, - {file = "pydantic_core-2.16.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8bde5b48c65b8e807409e6f20baee5d2cd880e0fad00b1a811ebc43e39a00ab2"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2924b89b16420712e9bb8192396026a8fbd6d8726224f918353ac19c4c043d2a"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:16aa02e7a0f539098e215fc193c8926c897175d64c7926d00a36188917717a05"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:936a787f83db1f2115ee829dd615c4f684ee48ac4de5779ab4300994d8af325b"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:459d6be6134ce3b38e0ef76f8a672924460c455d45f1ad8fdade36796df1ddc8"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9ee4febb249c591d07b2d4dd36ebcad0ccd128962aaa1801508320896575ef"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40a0bd0bed96dae5712dab2aba7d334a6c67cbcac2ddfca7dbcc4a8176445990"}, - {file = "pydantic_core-2.16.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:870dbfa94de9b8866b37b867a2cb37a60c401d9deb4a9ea392abf11a1f98037b"}, - {file = "pydantic_core-2.16.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:308974fdf98046db28440eb3377abba274808bf66262e042c412eb2adf852731"}, - {file = "pydantic_core-2.16.2-cp310-none-win32.whl", hash = "sha256:a477932664d9611d7a0816cc3c0eb1f8856f8a42435488280dfbf4395e141485"}, - {file = "pydantic_core-2.16.2-cp310-none-win_amd64.whl", hash = "sha256:8f9142a6ed83d90c94a3efd7af8873bf7cefed2d3d44387bf848888482e2d25f"}, - {file = "pydantic_core-2.16.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:406fac1d09edc613020ce9cf3f2ccf1a1b2f57ab00552b4c18e3d5276c67eb11"}, - {file = "pydantic_core-2.16.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce232a6170dd6532096cadbf6185271e4e8c70fc9217ebe105923ac105da9978"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a90fec23b4b05a09ad988e7a4f4e081711a90eb2a55b9c984d8b74597599180f"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8aafeedb6597a163a9c9727d8a8bd363a93277701b7bfd2749fbefee2396469e"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9957433c3a1b67bdd4c63717eaf174ebb749510d5ea612cd4e83f2d9142f3fc8"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0d7a9165167269758145756db43a133608a531b1e5bb6a626b9ee24bc38a8f7"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dffaf740fe2e147fedcb6b561353a16243e654f7fe8e701b1b9db148242e1272"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8ed79883b4328b7f0bd142733d99c8e6b22703e908ec63d930b06be3a0e7113"}, - {file = "pydantic_core-2.16.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cf903310a34e14651c9de056fcc12ce090560864d5a2bb0174b971685684e1d8"}, - {file = "pydantic_core-2.16.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:46b0d5520dbcafea9a8645a8164658777686c5c524d381d983317d29687cce97"}, - {file = "pydantic_core-2.16.2-cp311-none-win32.whl", hash = "sha256:70651ff6e663428cea902dac297066d5c6e5423fda345a4ca62430575364d62b"}, - {file = "pydantic_core-2.16.2-cp311-none-win_amd64.whl", hash = "sha256:98dc6f4f2095fc7ad277782a7c2c88296badcad92316b5a6e530930b1d475ebc"}, - {file = "pydantic_core-2.16.2-cp311-none-win_arm64.whl", hash = "sha256:ef6113cd31411eaf9b39fc5a8848e71c72656fd418882488598758b2c8c6dfa0"}, - {file = "pydantic_core-2.16.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:88646cae28eb1dd5cd1e09605680c2b043b64d7481cdad7f5003ebef401a3039"}, - {file = "pydantic_core-2.16.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b883af50eaa6bb3299780651e5be921e88050ccf00e3e583b1e92020333304b"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bf26c2e2ea59d32807081ad51968133af3025c4ba5753e6a794683d2c91bf6e"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99af961d72ac731aae2a1b55ccbdae0733d816f8bfb97b41909e143de735f522"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02906e7306cb8c5901a1feb61f9ab5e5c690dbbeaa04d84c1b9ae2a01ebe9379"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5362d099c244a2d2f9659fb3c9db7c735f0004765bbe06b99be69fbd87c3f15"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ac426704840877a285d03a445e162eb258924f014e2f074e209d9b4ff7bf380"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b94cbda27267423411c928208e89adddf2ea5dd5f74b9528513f0358bba019cb"}, - {file = "pydantic_core-2.16.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6db58c22ac6c81aeac33912fb1af0e930bc9774166cdd56eade913d5f2fff35e"}, - {file = "pydantic_core-2.16.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:396fdf88b1b503c9c59c84a08b6833ec0c3b5ad1a83230252a9e17b7dfb4cffc"}, - {file = "pydantic_core-2.16.2-cp312-none-win32.whl", hash = "sha256:7c31669e0c8cc68400ef0c730c3a1e11317ba76b892deeefaf52dcb41d56ed5d"}, - {file = "pydantic_core-2.16.2-cp312-none-win_amd64.whl", hash = "sha256:a3b7352b48fbc8b446b75f3069124e87f599d25afb8baa96a550256c031bb890"}, - {file = "pydantic_core-2.16.2-cp312-none-win_arm64.whl", hash = "sha256:a9e523474998fb33f7c1a4d55f5504c908d57add624599e095c20fa575b8d943"}, - {file = "pydantic_core-2.16.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:ae34418b6b389d601b31153b84dce480351a352e0bb763684a1b993d6be30f17"}, - {file = "pydantic_core-2.16.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:732bd062c9e5d9582a30e8751461c1917dd1ccbdd6cafb032f02c86b20d2e7ec"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b52776a2e3230f4854907a1e0946eec04d41b1fc64069ee774876bbe0eab55"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ef551c053692b1e39e3f7950ce2296536728871110e7d75c4e7753fb30ca87f4"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ebb892ed8599b23fa8f1799e13a12c87a97a6c9d0f497525ce9858564c4575a4"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa6c8c582036275997a733427b88031a32ffa5dfc3124dc25a730658c47a572f"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4ba0884a91f1aecce75202473ab138724aa4fb26d7707f2e1fa6c3e68c84fbf"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7924e54f7ce5d253d6160090ddc6df25ed2feea25bfb3339b424a9dd591688bc"}, - {file = "pydantic_core-2.16.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69a7b96b59322a81c2203be537957313b07dd333105b73db0b69212c7d867b4b"}, - {file = "pydantic_core-2.16.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7e6231aa5bdacda78e96ad7b07d0c312f34ba35d717115f4b4bff6cb87224f0f"}, - {file = "pydantic_core-2.16.2-cp38-none-win32.whl", hash = "sha256:41dac3b9fce187a25c6253ec79a3f9e2a7e761eb08690e90415069ea4a68ff7a"}, - {file = "pydantic_core-2.16.2-cp38-none-win_amd64.whl", hash = "sha256:f685dbc1fdadb1dcd5b5e51e0a378d4685a891b2ddaf8e2bba89bd3a7144e44a"}, - {file = "pydantic_core-2.16.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:55749f745ebf154c0d63d46c8c58594d8894b161928aa41adbb0709c1fe78b77"}, - {file = "pydantic_core-2.16.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b30b0dd58a4509c3bd7eefddf6338565c4905406aee0c6e4a5293841411a1286"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18de31781cdc7e7b28678df7c2d7882f9692ad060bc6ee3c94eb15a5d733f8f7"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5864b0242f74b9dd0b78fd39db1768bc3f00d1ffc14e596fd3e3f2ce43436a33"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8f9186ca45aee030dc8234118b9c0784ad91a0bb27fc4e7d9d6608a5e3d386c"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc6f6c9be0ab6da37bc77c2dda5f14b1d532d5dbef00311ee6e13357a418e646"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa057095f621dad24a1e906747179a69780ef45cc8f69e97463692adbcdae878"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ad84731a26bcfb299f9eab56c7932d46f9cad51c52768cace09e92a19e4cf55"}, - {file = "pydantic_core-2.16.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3b052c753c4babf2d1edc034c97851f867c87d6f3ea63a12e2700f159f5c41c3"}, - {file = "pydantic_core-2.16.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e0f686549e32ccdb02ae6f25eee40cc33900910085de6aa3790effd391ae10c2"}, - {file = "pydantic_core-2.16.2-cp39-none-win32.whl", hash = "sha256:7afb844041e707ac9ad9acad2188a90bffce2c770e6dc2318be0c9916aef1469"}, - {file = "pydantic_core-2.16.2-cp39-none-win_amd64.whl", hash = "sha256:9da90d393a8227d717c19f5397688a38635afec89f2e2d7af0df037f3249c39a"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f60f920691a620b03082692c378661947d09415743e437a7478c309eb0e4f82"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:47924039e785a04d4a4fa49455e51b4eb3422d6eaacfde9fc9abf8fdef164e8a"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6294e76b0380bb7a61eb8a39273c40b20beb35e8c87ee101062834ced19c545"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe56851c3f1d6f5384b3051c536cc81b3a93a73faf931f404fef95217cf1e10d"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9d776d30cde7e541b8180103c3f294ef7c1862fd45d81738d156d00551005784"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:72f7919af5de5ecfaf1eba47bf9a5d8aa089a3340277276e5636d16ee97614d7"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:4bfcbde6e06c56b30668a0c872d75a7ef3025dc3c1823a13cf29a0e9b33f67e8"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ff7c97eb7a29aba230389a2661edf2e9e06ce616c7e35aa764879b6894a44b25"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9b5f13857da99325dcabe1cc4e9e6a3d7b2e2c726248ba5dd4be3e8e4a0b6d0e"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a7e41e3ada4cca5f22b478c08e973c930e5e6c7ba3588fb8e35f2398cdcc1545"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60eb8ceaa40a41540b9acae6ae7c1f0a67d233c40dc4359c256ad2ad85bdf5e5"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7beec26729d496a12fd23cf8da9944ee338c8b8a17035a560b585c36fe81af20"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:22c5f022799f3cd6741e24f0443ead92ef42be93ffda0d29b2597208c94c3753"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:eca58e319f4fd6df004762419612122b2c7e7d95ffafc37e890252f869f3fb2a"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed957db4c33bc99895f3a1672eca7e80e8cda8bd1e29a80536b4ec2153fa9804"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:459c0d338cc55d099798618f714b21b7ece17eb1a87879f2da20a3ff4c7628e2"}, - {file = "pydantic_core-2.16.2.tar.gz", hash = "sha256:0ba503850d8b8dcc18391f10de896ae51d37fe5fe43dbfb6a35c5c5cad271a06"}, + {file = "pydantic_core-2.16.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4"}, + {file = "pydantic_core-2.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:162e498303d2b1c036b957a1278fa0899d02b2842f1ff901b6395104c5554a45"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f583bd01bbfbff4eaee0868e6fc607efdfcc2b03c1c766b06a707abbc856187"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b926dd38db1519ed3043a4de50214e0d600d404099c3392f098a7f9d75029ff8"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:716b542728d4c742353448765aa7cdaa519a7b82f9564130e2b3f6766018c9ec"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4ad7f7ee1a13d9cb49d8198cd7d7e3aa93e425f371a68235f784e99741561f"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd87f48924f360e5d1c5f770d6155ce0e7d83f7b4e10c2f9ec001c73cf475c99"}, + {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0df446663464884297c793874573549229f9eca73b59360878f382a0fc085979"}, + {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4df8a199d9f6afc5ae9a65f8f95ee52cae389a8c6b20163762bde0426275b7db"}, + {file = "pydantic_core-2.16.3-cp310-none-win32.whl", hash = "sha256:456855f57b413f077dff513a5a28ed838dbbb15082ba00f80750377eed23d132"}, + {file = "pydantic_core-2.16.3-cp310-none-win_amd64.whl", hash = "sha256:732da3243e1b8d3eab8c6ae23ae6a58548849d2e4a4e03a1924c8ddf71a387cb"}, + {file = "pydantic_core-2.16.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:519ae0312616026bf4cedc0fe459e982734f3ca82ee8c7246c19b650b60a5ee4"}, + {file = "pydantic_core-2.16.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b3992a322a5617ded0a9f23fd06dbc1e4bd7cf39bc4ccf344b10f80af58beacd"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d62da299c6ecb04df729e4b5c52dc0d53f4f8430b4492b93aa8de1f541c4aac"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2acca2be4bb2f2147ada8cac612f8a98fc09f41c89f87add7256ad27332c2fda"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b662180108c55dfbf1280d865b2d116633d436cfc0bba82323554873967b340"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7c6ed0dc9d8e65f24f5824291550139fe6f37fac03788d4580da0d33bc00c97"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1bb0827f56654b4437955555dc3aeeebeddc47c2d7ed575477f082622c49e"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e56f8186d6210ac7ece503193ec84104da7ceb98f68ce18c07282fcc2452e76f"}, + {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:936e5db01dd49476fa8f4383c259b8b1303d5dd5fb34c97de194560698cc2c5e"}, + {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33809aebac276089b78db106ee692bdc9044710e26f24a9a2eaa35a0f9fa70ba"}, + {file = "pydantic_core-2.16.3-cp311-none-win32.whl", hash = "sha256:ded1c35f15c9dea16ead9bffcde9bb5c7c031bff076355dc58dcb1cb436c4721"}, + {file = "pydantic_core-2.16.3-cp311-none-win_amd64.whl", hash = "sha256:d89ca19cdd0dd5f31606a9329e309d4fcbb3df860960acec32630297d61820df"}, + {file = "pydantic_core-2.16.3-cp311-none-win_arm64.whl", hash = "sha256:6162f8d2dc27ba21027f261e4fa26f8bcb3cf9784b7f9499466a311ac284b5b9"}, + {file = "pydantic_core-2.16.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f56ae86b60ea987ae8bcd6654a887238fd53d1384f9b222ac457070b7ac4cff"}, + {file = "pydantic_core-2.16.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9bd22a2a639e26171068f8ebb5400ce2c1bc7d17959f60a3b753ae13c632975"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4204e773b4b408062960e65468d5346bdfe139247ee5f1ca2a378983e11388a2"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f651dd19363c632f4abe3480a7c87a9773be27cfe1341aef06e8759599454120"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aaf09e615a0bf98d406657e0008e4a8701b11481840be7d31755dc9f97c44053"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e47755d8152c1ab5b55928ab422a76e2e7b22b5ed8e90a7d584268dd49e9c6b"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500960cb3a0543a724a81ba859da816e8cf01b0e6aaeedf2c3775d12ee49cade"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf6204fe865da605285c34cf1172879d0314ff267b1c35ff59de7154f35fdc2e"}, + {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d33dd21f572545649f90c38c227cc8631268ba25c460b5569abebdd0ec5974ca"}, + {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:49d5d58abd4b83fb8ce763be7794d09b2f50f10aa65c0f0c1696c677edeb7cbf"}, + {file = "pydantic_core-2.16.3-cp312-none-win32.whl", hash = "sha256:f53aace168a2a10582e570b7736cc5bef12cae9cf21775e3eafac597e8551fbe"}, + {file = "pydantic_core-2.16.3-cp312-none-win_amd64.whl", hash = "sha256:0d32576b1de5a30d9a97f300cc6a3f4694c428d956adbc7e6e2f9cad279e45ed"}, + {file = "pydantic_core-2.16.3-cp312-none-win_arm64.whl", hash = "sha256:ec08be75bb268473677edb83ba71e7e74b43c008e4a7b1907c6d57e940bf34b6"}, + {file = "pydantic_core-2.16.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b1f6f5938d63c6139860f044e2538baeee6f0b251a1816e7adb6cbce106a1f01"}, + {file = "pydantic_core-2.16.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a1ef6a36fdbf71538142ed604ad19b82f67b05749512e47f247a6ddd06afdc7"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704d35ecc7e9c31d48926150afada60401c55efa3b46cd1ded5a01bdffaf1d48"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d937653a696465677ed583124b94a4b2d79f5e30b2c46115a68e482c6a591c8a"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9803edf8e29bd825f43481f19c37f50d2b01899448273b3a7758441b512acf8"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72282ad4892a9fb2da25defeac8c2e84352c108705c972db82ab121d15f14e6d"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f752826b5b8361193df55afcdf8ca6a57d0232653494ba473630a83ba50d8c9"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4384a8f68ddb31a0b0c3deae88765f5868a1b9148939c3f4121233314ad5532c"}, + {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4b2bf78342c40b3dc830880106f54328928ff03e357935ad26c7128bbd66ce8"}, + {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:13dcc4802961b5f843a9385fc821a0b0135e8c07fc3d9949fd49627c1a5e6ae5"}, + {file = "pydantic_core-2.16.3-cp38-none-win32.whl", hash = "sha256:e3e70c94a0c3841e6aa831edab1619ad5c511199be94d0c11ba75fe06efe107a"}, + {file = "pydantic_core-2.16.3-cp38-none-win_amd64.whl", hash = "sha256:ecdf6bf5f578615f2e985a5e1f6572e23aa632c4bd1dc67f8f406d445ac115ed"}, + {file = "pydantic_core-2.16.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:bda1ee3e08252b8d41fa5537413ffdddd58fa73107171a126d3b9ff001b9b820"}, + {file = "pydantic_core-2.16.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:21b888c973e4f26b7a96491c0965a8a312e13be108022ee510248fe379a5fa23"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be0ec334369316fa73448cc8c982c01e5d2a81c95969d58b8f6e272884df0074"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5b6079cc452a7c53dd378c6f881ac528246b3ac9aae0f8eef98498a75657805"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee8d5f878dccb6d499ba4d30d757111847b6849ae07acdd1205fffa1fc1253c"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7233d65d9d651242a68801159763d09e9ec96e8a158dbf118dc090cd77a104c9"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6119dc90483a5cb50a1306adb8d52c66e447da88ea44f323e0ae1a5fcb14256"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:578114bc803a4c1ff9946d977c221e4376620a46cf78da267d946397dc9514a8"}, + {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d8f99b147ff3fcf6b3cc60cb0c39ea443884d5559a30b1481e92495f2310ff2b"}, + {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4ac6b4ce1e7283d715c4b729d8f9dab9627586dafce81d9eaa009dd7f25dd972"}, + {file = "pydantic_core-2.16.3-cp39-none-win32.whl", hash = "sha256:e7774b570e61cb998490c5235740d475413a1f6de823169b4cf94e2fe9e9f6b2"}, + {file = "pydantic_core-2.16.3-cp39-none-win_amd64.whl", hash = "sha256:9091632a25b8b87b9a605ec0e61f241c456e9248bfdcf7abdf344fdb169c81cf"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:36fa178aacbc277bc6b62a2c3da95226520da4f4e9e206fdf076484363895d2c"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:dcca5d2bf65c6fb591fff92da03f94cd4f315972f97c21975398bd4bd046854a"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a72fb9963cba4cd5793854fd12f4cfee731e86df140f59ff52a49b3552db241"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60cc1a081f80a2105a59385b92d82278b15d80ebb3adb200542ae165cd7d183"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cbcc558401de90a746d02ef330c528f2e668c83350f045833543cd57ecead1ad"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fee427241c2d9fb7192b658190f9f5fd6dfe41e02f3c1489d2ec1e6a5ab1e04a"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f4cb85f693044e0f71f394ff76c98ddc1bc0953e48c061725e540396d5c8a2e1"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b29eeb887aa931c2fcef5aa515d9d176d25006794610c264ddc114c053bf96fe"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a425479ee40ff021f8216c9d07a6a3b54b31c8267c6e17aa88b70d7ebd0e5e5b"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5c5cbc703168d1b7a838668998308018a2718c2130595e8e190220238addc96f"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99b6add4c0b39a513d323d3b93bc173dac663c27b99860dd5bf491b240d26137"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f76ee558751746d6a38f89d60b6228fa174e5172d143886af0f85aa306fd89"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:00ee1c97b5364b84cb0bd82e9bbf645d5e2871fb8c58059d158412fee2d33d8a"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:287073c66748f624be4cef893ef9174e3eb88fe0b8a78dc22e88eca4bc357ca6"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed25e1835c00a332cb10c683cd39da96a719ab1dfc08427d476bce41b92531fc"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:86b3d0033580bd6bbe07590152007275bd7af95f98eaa5bd36f3da219dcd93da"}, + {file = "pydantic_core-2.16.3.tar.gz", hash = "sha256:1cac689f80a3abab2d3c0048b29eea5751114054f032a941a32de4c852c59cad"}, ] [package.dependencies] @@ -553,13 +824,13 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] [package.dependencies] @@ -576,6 +847,27 @@ files = [ {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + [[package]] name = "ruff" version = "0.3.4" @@ -613,6 +905,17 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +[[package]] +name = "soupsieve" +version = "2.5" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.8" +files = [ + {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, + {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, +] + [[package]] name = "tabulate" version = "0.9.0" @@ -629,15 +932,18 @@ widechars = ["wcwidth"] [[package]] name = "typeguard" -version = "4.1.5" +version = "4.2.1" description = "Run-time type checker for Python" optional = false python-versions = ">=3.8" files = [ - {file = "typeguard-4.1.5-py3-none-any.whl", hash = "sha256:8923e55f8873caec136c892c3bed1f676eae7be57cdb94819281b3d3bc9c0953"}, - {file = "typeguard-4.1.5.tar.gz", hash = "sha256:ea0a113bbc111bcffc90789ebb215625c963411f7096a7e9062d4e4630c155fd"}, + {file = "typeguard-4.2.1-py3-none-any.whl", hash = "sha256:7da3bd46e61f03e0852f8d251dcbdc2a336aa495d7daff01e092b55327796eb8"}, + {file = "typeguard-4.2.1.tar.gz", hash = "sha256:c556a1b95948230510070ca53fa0341fb0964611bd05d598d87fb52115d65fee"}, ] +[package.dependencies] +typing-extensions = {version = ">=4.10.0", markers = "python_version < \"3.13\""} + [package.extras] doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"] test = ["coverage[toml] (>=7)", "mypy (>=1.2.0)", "pytest (>=7)"] @@ -662,13 +968,13 @@ all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>= [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.10.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, + {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, ] [[package]] @@ -697,6 +1003,23 @@ files = [ {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, ] +[[package]] +name = "urllib3" +version = "2.2.1" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, + {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + [[package]] name = "wrapt" version = "1.16.0" @@ -779,4 +1102,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = ">=3.12,<4" -content-hash = "3b5ca5668e0ecdc9d817342b27c2022a747b6231b45906faf196a911dc67210f" +content-hash = "44969df13c347eca916fcbb0ec628888c7a014b52db89c4121ac7f94ea64f3e6" diff --git a/pyproject.toml b/pyproject.toml index 46994708..295dd09e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,11 +14,14 @@ packages = [{ include = "regtech_data_validator", from = "src" }] python = ">=3.12,<4" pandas = "^2.2.1" pandera = "^0.18.3" +requests = "^2.31.0" tabulate = "^0.9.0" [tool.poetry.group.dev.dependencies] pytest = "8.1.1" pytest-cov = "5.0.0" +beautifulsoup4 = "^4.12.3" +lxml = "^5.1.1" [tool.poetry.group.data.dependencies] openpyxl = "^3.1.2" diff --git a/src/regtech_data_validator/checks.py b/src/regtech_data_validator/checks.py index 64b11604..727cdaa1 100644 --- a/src/regtech_data_validator/checks.py +++ b/src/regtech_data_validator/checks.py @@ -25,7 +25,16 @@ class SBLCheck(Check): SBLWarningCheck subclasses below. """ - def __init__(self, check_fn: Callable, id: str, name: str, description: str, severity: Severity, **check_kwargs): + def __init__( + self, + check_fn: Callable, + id: str, + name: str, + description: str, + severity: Severity, + fig_link: str, + **check_kwargs + ): """ Subclass of Pandera's `Check`, with special handling for severity level Args: @@ -38,6 +47,7 @@ def __init__(self, check_fn: Callable, id: str, name: str, description: str, sev """ self.severity = severity + self.fig_link = fig_link super().__init__(check_fn, title=id, name=name, description=description, **check_kwargs) diff --git a/src/regtech_data_validator/create_schemas.py b/src/regtech_data_validator/create_schemas.py index 1c03e0cc..17c1b04e 100644 --- a/src/regtech_data_validator/create_schemas.py +++ b/src/regtech_data_validator/create_schemas.py @@ -85,6 +85,7 @@ def _add_validation_metadata(failed_check_fields_df: pd.DataFrame, check: SBLChe validation_fields_df = ( failed_check_fields_df.assign(validation_severity=check.severity) + .assign(fig_link=check.fig_link) .assign(validation_id=check.title) .assign(validation_name=check.name) .assign(validation_desc=check.description) diff --git a/src/regtech_data_validator/global_data.py b/src/regtech_data_validator/global_data.py index 177a9458..97edf4ac 100644 --- a/src/regtech_data_validator/global_data.py +++ b/src/regtech_data_validator/global_data.py @@ -1,6 +1,9 @@ import csv from importlib.resources import files +fig_base_url = ( + "https://www.consumerfinance.gov/data-research/small-business-lending/filing-instructions-guide/2024-guide/" +) # global variable for NAICS codes naics_codes: dict[str, str] = {} diff --git a/src/regtech_data_validator/phase_validations.py b/src/regtech_data_validator/phase_validations.py index fae702cc..46f83f29 100644 --- a/src/regtech_data_validator/phase_validations.py +++ b/src/regtech_data_validator/phase_validations.py @@ -41,6 +41,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_unique_column, id="E3000", + fig_link=global_data.fig_base_url + "#4.3.1", name="uid.duplicates_in_dataset", description=dedent( """\ @@ -55,11 +56,12 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 21, 45, id="E0001", + fig_link=global_data.fig_base_url + "#4.1.1", name="uid.invalid_text_length", description=dedent( """\ * 'Unique identifier' must be at least 21 characters in - length and at most 45 characters in length." + length and at most 45 characters in length. """ ), severity=Severity.ERROR, @@ -67,6 +69,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_format, id="E0002", + fig_link=global_data.fig_base_url + "#4.1.2", name="uid.invalid_text_pattern", description=dedent( """\ @@ -84,6 +87,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( string_contains, id="W0003", + fig_link=global_data.fig_base_url + "#4.4.1", name="uid.invalid_uid_lei", description=dedent( """\ @@ -103,6 +107,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_date, id="E0020", + fig_link=global_data.fig_base_url + "#4.1.3", name="app_date.invalid_date_format", description="* 'Application date' must be a real calendar date using YYYYMMDD format.", severity=Severity.ERROR, @@ -116,6 +121,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0040", + fig_link=global_data.fig_base_url + "#4.1.4", name="app_method.invalid_enum_value", description="* 'Application method' must equal 1, 2, 3, or 4.", severity=Severity.ERROR, @@ -135,6 +141,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0060", + fig_link=global_data.fig_base_url + "#4.1.5", name="app_recipient.invalid_enum_value", description="* 'Application recipient' must equal 1 or 2.", severity=Severity.ERROR, @@ -152,6 +159,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0080", + fig_link=global_data.fig_base_url + "#4.1.6", name="ct_credit_product.invalid_enum_value", description="* 'Credit product' must equal 1, 2, 3, 4, 5, 6, 7, 8, 977, or 988.", severity=Severity.ERROR, @@ -179,6 +187,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E0100", + fig_link=global_data.fig_base_url + "#4.1.7", name="ct_credit_product_ff.invalid_text_length", description=dedent( """\ @@ -193,6 +202,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2000", + fig_link=global_data.fig_base_url + "#4.2.1", name="ct_credit_product_ff.conditional_field_conflict", description=dedent( """\ @@ -213,6 +223,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0120", + fig_link=global_data.fig_base_url + "#4.1.8", name="ct_guarantee.invalid_enum_value", description=dedent( """\ @@ -243,6 +254,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_value_count, id="E0121", + fig_link=global_data.fig_base_url + "#4.1.9", name="ct_guarantee.invalid_number_of_values", description=dedent( """\ @@ -258,6 +270,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_unique_in_field, id="W0123", + fig_link=global_data.fig_base_url + "#4.4.3", name="ct_guarantee.duplicates_in_field", description="* 'Type of guarantee' should **not** contain duplicated values.", severity=Severity.WARNING, @@ -266,6 +279,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( meets_multi_value_field_restriction, id="W0122", + fig_link=global_data.fig_base_url + "#4.4.2", name="ct_guarantee.multi_value_field_restriction", description=dedent( """\ @@ -285,6 +299,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E0140", + fig_link=global_data.fig_base_url + "#4.1.10", name="ct_guarantee_ff.invalid_text_length", description="* 'Free-form text field for other guarantee' must **not** exceed 300 characters in length.", severity=Severity.ERROR, @@ -294,6 +309,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2001", + fig_link=global_data.fig_base_url + "#4.2.2", name="ct_guarantee_ff.conditional_field_conflict", description=dedent( """\ @@ -308,6 +324,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_multi_field_value_count, id="W2002", + fig_link=global_data.fig_base_url + "#4.5.1", name="ct_guarantee_ff.multi_invalid_number_of_values", description=dedent( """\ @@ -329,6 +346,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0160", + fig_link=global_data.fig_base_url + "#4.1.11", name="ct_loan_term_flag.invalid_enum_value", description="* 'Loan term: NA/NP flag' must equal 900, 988, or 999.", severity=Severity.ERROR, @@ -344,6 +362,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_enum_pair, id="E2003", + fig_link=global_data.fig_base_url + "#4.2.3", name="ct_loan_term_flag.enum_value_conflict", description=dedent( """\ @@ -377,6 +396,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_number, id="E0180", + fig_link=global_data.fig_base_url + "#4.1.12", name="ct_loan_term.invalid_numeric_format", description="* When present, 'loan term' must be a whole number.", severity=Severity.ERROR, @@ -388,6 +408,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2004", + fig_link=global_data.fig_base_url + "#4.2.4", name="ct_loan_term.conditional_field_conflict", description=dedent( """\ @@ -402,6 +423,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_greater_than_or_equal_to, id="E0181", + fig_link=global_data.fig_base_url + "#4.1.13", name="ct_loan_term.invalid_numeric_value", description="* When present, 'loan term' must be greater than or equal to 1.", severity=Severity.ERROR, @@ -412,6 +434,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_less_than, id="W0182", + fig_link=global_data.fig_base_url + "#4.4.4", name="ct_loan_term.unreasonable_numeric_value", description="* When present, 'loan term' should be less than 1200 (100 years).", severity=Severity.WARNING, @@ -426,6 +449,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0200", + fig_link=global_data.fig_base_url + "#4.1.14", name="credit_purpose.invalid_enum_value", description=dedent( """\ @@ -457,6 +481,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_value_count, id="E0201", + fig_link=global_data.fig_base_url + "#4.1.15", name="credit_purpose.invalid_number_of_values", description=dedent( """\ @@ -472,6 +497,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( meets_multi_value_field_restriction, id="W0202", + fig_link=global_data.fig_base_url + "#4.4.5", name="credit_purpose.multi_value_field_restriction", description=dedent( """\ @@ -490,6 +516,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_unique_in_field, id="W0203", + fig_link=global_data.fig_base_url + "#4.4.6", name="credit_purpose.duplicates_in_field", description="* 'Credit purpose' should **not** contain duplicated values.", severity=Severity.WARNING, @@ -503,6 +530,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E0220", + fig_link=global_data.fig_base_url + "#4.1.16", name="credit_purpose_ff.invalid_text_length", description=dedent( """\ @@ -517,6 +545,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2005", + fig_link=global_data.fig_base_url + "#4.2.5", name="credit_purpose_ff.conditional_field_conflict", description=dedent( """\ @@ -533,6 +562,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_multi_field_value_count, id="W2006", + fig_link=global_data.fig_base_url + "#4.5.2", name="credit_purpose_ff.multi_invalid_number_of_values", description=dedent( """\ @@ -555,6 +585,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0240", + fig_link=global_data.fig_base_url + "#4.1.17", name="amount_applied_for_flag.invalid_enum_value", description="* 'Amount applied For: NA/NP flag' must equal 900, 988, or 999.", severity=Severity.ERROR, @@ -573,6 +604,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_number, id="E0260", + fig_link=global_data.fig_base_url + "#4.1.18", name="amount_applied_for.invalid_numeric_format", description="* When present, 'amount applied for' must be a numeric value.", severity=Severity.ERROR, @@ -584,6 +616,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2007", + fig_link=global_data.fig_base_url + "#4.2.6", name="amount_applied_for.conditional_field_conflict", description=dedent( """\ @@ -600,6 +633,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_greater_than, id="E0261", + fig_link=global_data.fig_base_url + "#4.1.19", name="amount_applied_for.invalid_numeric_value", description="* When present, 'amount applied for' must be greater than 0.", severity=Severity.ERROR, @@ -614,6 +648,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_number, id="E0280", + fig_link=global_data.fig_base_url + "#4.1.20", name="amount_approved.invalid_numeric_format", description="* When present, 'amount approved or originated' must be a numeric value.", severity=Severity.ERROR, @@ -625,6 +660,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_greater_than, id="E0281", + fig_link=global_data.fig_base_url + "#4.1.21", name="amount_approved.invalid_numeric_value", description="* When present, 'amount approved or originated' must be greater than 0.", severity=Severity.ERROR, @@ -635,6 +671,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2008", + fig_link=global_data.fig_base_url + "#4.2.7", name="amount_approved.conditional_field_conflict", description=dedent( """\ @@ -654,6 +691,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0300", + fig_link=global_data.fig_base_url + "#4.1.22", name="action_taken.invalid_enum_value", description="* 'Action taken' must equal 1, 2, 3, 4, or 5.", severity=Severity.ERROR, @@ -671,6 +709,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_fieldset_pair, id="E2014", + fig_link=global_data.fig_base_url + "#4.2.11", name="pricing_all.conditional_fieldset_conflict", description=dedent( """\ @@ -712,6 +751,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_fieldset_pair, id="E2015", + fig_link=global_data.fig_base_url + "#4.2.12", name="pricing_charges.conditional_fieldset_conflict", description=dedent( """\ @@ -751,6 +791,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_date, id="E0320", + fig_link=global_data.fig_base_url + "#4.1.23", name="action_taken_date.invalid_date_format", description="* 'Action taken date' must be a real calendar date using YYYYMMDD format.", severity=Severity.ERROR, @@ -761,6 +802,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_date_in_range, id="E0321", + fig_link=global_data.fig_base_url + "#4.1.24", name="action_taken_date.invalid_date_value", description=dedent( """\ @@ -776,6 +818,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_date_after, id="E2009", + fig_link=global_data.fig_base_url + "#4.2.8", name="action_taken_date.date_value_conflict", description="* The date indicated by 'action taken date' must occur on or after 'application date'.", severity=Severity.ERROR, @@ -784,12 +827,13 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_date_before_in_days, id="W2010", + fig_link=global_data.fig_base_url + "#4.5.3", name="action_taken_date.unreasonable_date_value", description=dedent( """\ * The date indicated by 'application date' should generally be less than two years (730 days) before - 'action taken date'." + 'action taken date'. """ ), severity=Severity.WARNING, @@ -803,11 +847,12 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0340", + fig_link=global_data.fig_base_url + "#4.1.25", name="denial_reasons.invalid_enum_value", description=dedent( """\ * Each value in 'denial reason(s)' (separated by semicolons) - must equal 1, 2, 3, 4, 5, 6, 7, 8, 9, 977, or 999." + must equal 1, 2, 3, 4, 5, 6, 7, 8, 9, 977, or 999. """ ), severity=Severity.ERROR, @@ -831,6 +876,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_value_count, id="E0341", + fig_link=global_data.fig_base_url + "#4.1.26", name="denial_reasons.invalid_number_of_values", description=dedent( """\ @@ -846,6 +892,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_enum_pair, id="E2011", + fig_link=global_data.fig_base_url + "#4.2.9", name="denial_reasons.enum_value_conflict", description=dedent( """\ @@ -873,6 +920,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( meets_multi_value_field_restriction, id="W0340", + fig_link=global_data.fig_base_url + "#4.4.7", name="denial_reasons.multi_value_field_restriction", description=dedent( """\ @@ -887,6 +935,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_unique_in_field, id="W0341", + fig_link=global_data.fig_base_url + "#4.4.8", name="denial_reasons.duplicates_in_field", description="* 'Denial reason(s)' should **not** contain duplicated values.", severity=Severity.WARNING, @@ -900,6 +949,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) min_value=0, max_value=300, id="E0360", + fig_link=global_data.fig_base_url + "#4.1.27", name="denial_reasons_ff.invalid_text_length", description=dedent( """\ @@ -914,6 +964,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2012", + fig_link=global_data.fig_base_url + "#4.2.10", name="denial_reasons_ff.conditional_field_conflict", description=dedent( """\ @@ -930,6 +981,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_multi_field_value_count, id="W2013", + fig_link=global_data.fig_base_url + "#4.5.4", name="denial_reasons_ff.multi_invalid_number_of_values", description=dedent( """\ @@ -937,7 +989,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) denial reason(s)' combined should **not** contain more than four values. Code 977 (other), within 'Denial reason(s)', does **not** count toward the maximum number of values for - the purpose of this validation check." + the purpose of this validation check. """ ), severity=Severity.WARNING, @@ -952,6 +1004,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0380", + fig_link=global_data.fig_base_url + "#4.1.28", name="pricing_interest_rate_type.invalid_enum_value", description="* 'Interest rate type' must equal 1, 2, 3, 4, 5, 6, or 999.", severity=Severity.ERROR, @@ -974,6 +1027,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_number, id="E0400", + fig_link=global_data.fig_base_url + "#4.1.29", name="pricing_init_rate_period.invalid_numeric_format", description=dedent( """\ @@ -989,6 +1043,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2016", + fig_link=global_data.fig_base_url + "#4.2.13", name="pricing_init_rate_period.conditional_field_conflict", description=dedent( """\ @@ -1005,6 +1060,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_greater_than, id="E0401", + fig_link=global_data.fig_base_url + "#4.1.30", name="pricing_init_rate_period.invalid_numeric_value", description=dedent( """\ @@ -1023,6 +1079,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_number, id="E0420", + fig_link=global_data.fig_base_url + "#4.1.31", name="pricing_fixed_rate.invalid_numeric_format", description="* When present, 'fixed rate: interest rate' must be a numeric value.", severity=Severity.ERROR, @@ -1034,6 +1091,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2017", + fig_link=global_data.fig_base_url + "#4.2.14", name="pricing_fixed_rate.conditional_field_conflict", description=dedent( """\ @@ -1050,6 +1108,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_greater_than, id="W0420", + fig_link=global_data.fig_base_url + "#4.4.9", name="pricing_fixed_rate.unreasonable_numeric_value", description="* When present, 'fixed rate: interest rate' should generally be greater than 0.1.", severity=Severity.WARNING, @@ -1064,6 +1123,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_number, id="E0440", + fig_link=global_data.fig_base_url + "#4.1.32", name="pricing_adj_margin.invalid_numeric_format", description="* When present, 'adjustable rate transaction: margin' must be a numeric value.", severity=Severity.ERROR, @@ -1075,6 +1135,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2018", + fig_link=global_data.fig_base_url + "#4.2.15", name="pricing_adj_margin.conditional_field_conflict", description=dedent( """\ @@ -1092,6 +1153,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_greater_than, id="W0441", + fig_link=global_data.fig_base_url + "#4.4.10", name="pricing_adj_margin.unreasonable_numeric_value", description=dedent( """\ @@ -1110,6 +1172,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0460", + fig_link=global_data.fig_base_url + "#4.1.33", name="pricing_adj_index_name.invalid_enum_value", description=dedent( """\ @@ -1139,6 +1202,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_enum_pair, id="E2019", + fig_link=global_data.fig_base_url + "#4.2.16", name="pricing_adj_index_name.enum_value_conflict", description=dedent( """\ @@ -1174,6 +1238,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) min_value=0, max_value=300, id="E0480", + fig_link=global_data.fig_base_url + "#4.1.34", name="pricing_adj_index_name_ff.invalid_text_length", description=dedent( """\ @@ -1187,6 +1252,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2020", + fig_link=global_data.fig_base_url + "#4.2.17", name="pricing_adj_index_name_ff.conditional_field_conflict", description=dedent( """\ @@ -1207,6 +1273,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_number, id="E0500", + fig_link=global_data.fig_base_url + "#4.1.35", name="pricing_adj_index_value.invalid_numeric_format", description="* When present, 'adjustable rate transaction: index value' must be a numeric value.", severity=Severity.ERROR, @@ -1218,6 +1285,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2021", + fig_link=global_data.fig_base_url + "#4.2.18", name="pricing_adj_index_value.conditional_field_conflict", description=dedent( """\ @@ -1238,6 +1306,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_number, id="E0520", + fig_link=global_data.fig_base_url + "#4.1.36", name="pricing_origination_charges.invalid_numeric_format", description="* When present, 'total origination charges' must be a numeric value.", severity=Severity.ERROR, @@ -1252,6 +1321,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_number, id="E0540", + fig_link=global_data.fig_base_url + "#4.1.37", name="pricing_broker_fees.invalid_numeric_format", description="* When present, 'amount of total broker fees' must be a numeric value.", severity=Severity.ERROR, @@ -1266,6 +1336,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_number, id="E0560", + fig_link=global_data.fig_base_url + "#4.1.38", name="pricing_initial_charges.invalid_numeric_format", description="* When present, 'initial annual charges' must be a numeric value.", severity=Severity.ERROR, @@ -1280,6 +1351,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0580", + fig_link=global_data.fig_base_url + "#4.1.39", name="pricing_mca_addcost_flag.invalid_enum_value", description=dedent( """\ @@ -1299,6 +1371,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_enum_pair, id="E2022", + fig_link=global_data.fig_base_url + "#4.2.19", name="pricing_mca_addcost_flag.enum_value_conflict", description=dedent( """\ @@ -1327,6 +1400,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_number, id="E0600", + fig_link=global_data.fig_base_url + "#4.1.40", name="pricing_mca_addcost.invalid_numeric_format", description=dedent( """\ @@ -1343,6 +1417,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2023", + fig_link=global_data.fig_base_url + "#4.2.20", name="pricing_mca_addcost.conditional_field_conflict", description=dedent( """\ @@ -1366,6 +1441,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0620", + fig_link=global_data.fig_base_url + "#4.1.41", name="pricing_prepenalty_allowed.invalid_enum_value", description="* Prepayment penalty could be imposed' must equal 1, 2, or 999.", severity=Severity.ERROR, @@ -1384,6 +1460,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0640", + fig_link=global_data.fig_base_url + "#4.1.42", name="pricing_prepenalty_exists.invalid_enum_value", description="* 'Prepayment penalty exists' must equal 1, 2, or 999.", severity=Severity.ERROR, @@ -1402,6 +1479,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0660", + fig_link=global_data.fig_base_url + "#4.1.43", name="census_tract_adr_type.invalid_enum_value", description="* 'Census tract: type of address' must equal 1, 2, 3, or 988.", severity=Severity.ERROR, @@ -1421,6 +1499,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_correct_length, id="E0680", + fig_link=global_data.fig_base_url + "#4.1.44", name="census_tract_number.invalid_text_length", description="* When present, 'census tract: tract number' must be a GEOID with exactly 11 digits.", severity=Severity.ERROR, @@ -1433,6 +1512,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_enum_pair, id="E2024", + fig_link=global_data.fig_base_url + "#4.2.21", name="census_tract_number.conditional_field_conflict", description=dedent( """\ @@ -1464,6 +1544,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_code, id="W0680", + fig_link=global_data.fig_base_url + "#4.4.11", name="census_tract_number.invalid_geoid", description=dedent( """\ @@ -1483,6 +1564,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0700", + fig_link=global_data.fig_base_url + "#4.1.45", name="gross_annual_revenue_flag.invalid_enum_value", description="* 'Gross annual revenue: NP flag' must equal 900 or 988.", severity=Severity.ERROR, @@ -1500,6 +1582,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_number, id="E0720", + fig_link=global_data.fig_base_url + "#4.1.46", name="gross_annual_revenue.invalid_numeric_format", description="* When present, 'gross annual revenue' must be a numeric value.", severity=Severity.ERROR, @@ -1511,6 +1594,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2025", + fig_link=global_data.fig_base_url + "#4.2.22", name="gross_annual_revenue.conditional_field_conflict", description=dedent( """\ @@ -1531,6 +1615,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0740", + fig_link=global_data.fig_base_url + "#4.1.47", name="naics_code_flag.invalid_enum_value", description=dedent( """\ @@ -1553,6 +1638,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_number, id="E0761", + fig_link=global_data.fig_base_url + "#4.1.49", name="naics_code.invalid_naics_format", description=dedent( """\ @@ -1569,6 +1655,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_correct_length, id="E0760", + fig_link=global_data.fig_base_url + "#4.1.48", name="naics_code.invalid_text_length", description=dedent( """\ @@ -1584,6 +1671,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_code, id="W0762", + fig_link=global_data.fig_base_url + "#4.4.12", name="naics_code.invalid_naics_value", description=dedent( """\ @@ -1599,6 +1687,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2026", + fig_link=global_data.fig_base_url + "#4.2.23", name="naics_code.conditional_field_conflict", description=dedent( """\ @@ -1621,6 +1710,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0780", + fig_link=global_data.fig_base_url + "#4.1.50", name="number_of_workers.invalid_enum_value", description="* 'Number of workers' must equal 1, 2, 3, 4, 5, 6, 7, 8, 9, or 988.", severity=Severity.ERROR, @@ -1646,6 +1736,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0800", + fig_link=global_data.fig_base_url + "#4.1.51", name="time_in_business_type.invalid_enum_value", description="* 'Time in business: type of response' must equal 1, 2, 3, or 988.", severity=Severity.ERROR, @@ -1665,6 +1756,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_number, id="E0820", + fig_link=global_data.fig_base_url + "#4.1.52", name="time_in_business.invalid_numeric_format", description="* When present, 'time in business' must be a whole number.", severity=Severity.ERROR, @@ -1676,6 +1768,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_greater_than_or_equal_to, id="E0821", + fig_link=global_data.fig_base_url + "#4.1.53", name="time_in_business.invalid_numeric_value", description="* When present, 'time in business' must be greater than or equal to 0.", severity=Severity.ERROR, @@ -1686,6 +1779,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2027", + fig_link=global_data.fig_base_url + "#4.2.24", name="time_in_business.conditional_field_conflict", description=dedent( """\ @@ -1705,6 +1799,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0840", + fig_link=global_data.fig_base_url + "#4.1.54", name="business_ownership_status.invalid_enum_value", description=dedent( """\ @@ -1728,6 +1823,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_value_count, id="E0841", + fig_link=global_data.fig_base_url + "#4.1.55", name="business_ownership_status.invalid_number_of_values", description="* 'Business ownership status' must contain at least one value.", severity=Severity.ERROR, @@ -1737,6 +1833,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_unique_in_field, id="W0842", + fig_link=global_data.fig_base_url + "#4.4.13", name="business_ownership_status.duplicates_in_field", description="* 'Business ownership status' should **not** contain duplicated values.", severity=Severity.WARNING, @@ -1745,6 +1842,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( meets_multi_value_field_restriction, id="W0843", + fig_link=global_data.fig_base_url + "#4.4.14", name="business_ownership_status.multi_value_field_restriction", description=dedent( """\ @@ -1765,6 +1863,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0860", + fig_link=global_data.fig_base_url + "#4.1.56", name="num_principal_owners_flag.invalid_enum_value", description="* 'Number of principal owners: NP flag' must equal 900 or 988.", severity=Severity.ERROR, @@ -1779,6 +1878,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_fieldset_pair, id="W2035", + fig_link=global_data.fig_base_url + "#4.5.5", name="po_demographics_0.conditional_fieldset_conflict", description=dedent( """\ @@ -1821,6 +1921,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_fieldset_pair, id="W2036", + fig_link=global_data.fig_base_url + "#4.5.6", name="po_demographics_1.conditional_fieldset_conflict", description=dedent( """\ @@ -1864,6 +1965,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_fieldset_pair, id="W2037", + fig_link=global_data.fig_base_url + "#4.5.7", name="po_demographics_2.conditional_fieldset_conflict", description=dedent( """\ @@ -1907,6 +2009,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_fieldset_pair, id="W2038", + fig_link=global_data.fig_base_url + "#4.5.8", name="po_demographics_3.conditional_fieldset_conflict", description=dedent( """\ @@ -1950,6 +2053,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_valid_fieldset_pair, id="W2039", + fig_link=global_data.fig_base_url + "#4.5.9", name="po_demographics_4.conditional_fieldset_conflict", description=dedent( """\ @@ -1996,6 +2100,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0880", + fig_link=global_data.fig_base_url + "#4.1.57", name="num_principal_owners.invalid_enum_value", description="* When present, 'number of principal owners' must equal 0, 1, 2, 3, or 4.", severity=Severity.ERROR, @@ -2008,6 +2113,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2028", + fig_link=global_data.fig_base_url + "#4.2.25", name="num_principal_owners.conditional_field_conflict", description=dedent( """\ @@ -2028,6 +2134,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0900", + fig_link=global_data.fig_base_url + "#4.1.58", name="po_1_ethnicity.invalid_enum_value", description=dedent( """\ @@ -2055,6 +2162,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_unique_in_field, id="W0901", + fig_link=global_data.fig_base_url + "#4.4.15", name="po_1_ethnicity.duplicates_in_field", description="* 'Ethnicity of principal owner 1' should **not** contain duplicated values.", severity=Severity.WARNING, @@ -2063,6 +2171,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( meets_multi_value_field_restriction, id="W0902", + fig_link=global_data.fig_base_url + "#4.4.16", name="po_1_ethnicity.multi_value_field_restriction", description=dedent( """\ @@ -2084,6 +2193,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E0920", + fig_link=global_data.fig_base_url + "#4.1.59", name="po_1_ethnicity_ff.invalid_text_length", description=dedent( """\ @@ -2098,6 +2208,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2040", + fig_link=global_data.fig_base_url + "#4.2.26", name="po_1_ethnicity_ff.conditional_field_conflict", description=dedent( """\ @@ -2119,6 +2230,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E0940", + fig_link=global_data.fig_base_url + "#4.1.60", name="po_1_race.invalid_enum_value", description=dedent( """\ @@ -2168,6 +2280,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_unique_in_field, id="W0941", + fig_link=global_data.fig_base_url + "#4.4.17", name="po_1_race.duplicates_in_field", description="* 'Race of principal owner 1' should **not** contain duplicated values.", severity=Severity.WARNING, @@ -2176,12 +2289,13 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( meets_multi_value_field_restriction, id="W0942", + fig_link=global_data.fig_base_url + "#4.4.18", name="po_1_race.multi_value_field_restriction", description=dedent( """\ * When 'race of principal owner 1' contains 966 (the applicant responded that they did not wish to provide this information) or 988 (not provided by applicant), - 'race of principal owner: 1' should **not** contain more than one value." + 'race of principal owner: 1' should **not** contain more than one value. """ ), severity=Severity.WARNING, @@ -2196,6 +2310,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E0960", + fig_link=global_data.fig_base_url + "#4.1.61", name="po_1_race_anai_ff.invalid_text_length", description=dedent( """\ @@ -2211,6 +2326,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2060", + fig_link=global_data.fig_base_url + "#4.2.30", name="po_1_race_anai_ff.conditional_field_conflict", description=dedent( """\ @@ -2234,6 +2350,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E0980", + fig_link=global_data.fig_base_url + "#4.1.62", name="po_1_race_asian_ff.invalid_text_length", description=dedent( """\ @@ -2248,6 +2365,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2080", + fig_link=global_data.fig_base_url + "#4.2.34", name="po_1_race_asian_ff.conditional_field_conflict", description=dedent( """\ @@ -2269,6 +2387,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1000", + fig_link=global_data.fig_base_url + "#4.1.63", name="po_1_race_baa_ff.invalid_text_length", description=dedent( """\ @@ -2283,6 +2402,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2100", + fig_link=global_data.fig_base_url + "#4.2.38", name="po_1_race_baa_ff.conditional_field_conflict", description=dedent( """\ @@ -2306,6 +2426,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1020", + fig_link=global_data.fig_base_url + "#4.1.64", name="po_1_race_pi_ff.invalid_text_length", description=dedent( """\ @@ -2320,6 +2441,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2120", + fig_link=global_data.fig_base_url + "#4.2.42", name="po_1_race_pi_ff.conditional_field_conflict", description=dedent( """\ @@ -2342,6 +2464,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E1040", + fig_link=global_data.fig_base_url + "#4.1.65", name="po_1_gender_flag.invalid_enum_value", description="* When present, 'sex/gender of principal owner 1: NP flag' must equal 1, 966, or 988.", severity=Severity.ERROR, @@ -2362,6 +2485,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1060", + fig_link=global_data.fig_base_url + "#4.1.66", name="po_1_gender_ff.invalid_text_length", description=dedent( """\ @@ -2376,6 +2500,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2140", + fig_link=global_data.fig_base_url + "#4.2.46", name="po_1_gender_ff.conditional_field_conflict", description=dedent( """\ @@ -2397,6 +2522,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E1080", + fig_link=global_data.fig_base_url + "#4.1.67", name="po_2_ethnicity.invalid_enum_value", description=dedent( """\ @@ -2424,6 +2550,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_unique_in_field, id="W1081", + fig_link=global_data.fig_base_url + "#4.4.19", name="po_2_ethnicity.duplicates_in_field", description="* 'Ethnicity of principal owner 2' should **not** contain duplicated values.", severity=Severity.WARNING, @@ -2432,6 +2559,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( meets_multi_value_field_restriction, id="W1082", + fig_link=global_data.fig_base_url + "#4.4.20", name="po_2_ethnicity.multi_value_field_restriction", description=dedent( """\ @@ -2453,6 +2581,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1100", + fig_link=global_data.fig_base_url + "#4.1.68", name="po_2_ethnicity_ff.invalid_text_length", description=dedent( """\ @@ -2467,6 +2596,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2041", + fig_link=global_data.fig_base_url + "#4.2.27", name="po_2_ethnicity_ff.conditional_field_conflict", description=dedent( """\ @@ -2488,6 +2618,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E1120", + fig_link=global_data.fig_base_url + "#4.1.69", name="po_2_race.invalid_enum_value", description=dedent( """\ @@ -2537,6 +2668,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_unique_in_field, id="W1121", + fig_link=global_data.fig_base_url + "#4.4.21", name="po_2_race.duplicates_in_field", description="* 'Race of principal owner 2' should **not** contain duplicated values.", severity=Severity.WARNING, @@ -2545,6 +2677,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( meets_multi_value_field_restriction, id="W1122", + fig_link=global_data.fig_base_url + "#4.4.22", name="po_2_race.multi_value_field_restriction", description=dedent( """\ @@ -2567,6 +2700,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1140", + fig_link=global_data.fig_base_url + "#4.1.70", name="po_2_race_anai_ff.invalid_text_length", description=dedent( """\ @@ -2582,6 +2716,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2061", + fig_link=global_data.fig_base_url + "#4.2.31", name="po_2_race_anai_ff.conditional_field_conflict", description=dedent( """\ @@ -2605,6 +2740,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1160", + fig_link=global_data.fig_base_url + "#4.1.71", name="po_2_race_asian_ff.invalid_text_length", description=dedent( """\ @@ -2619,6 +2755,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2081", + fig_link=global_data.fig_base_url + "#4.2.35", name="po_2_race_asian_ff.conditional_field_conflict", description=dedent( """\ @@ -2640,6 +2777,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1180", + fig_link=global_data.fig_base_url + "#4.1.72", name="po_2_race_baa_ff.invalid_text_length", description=dedent( """\ @@ -2654,6 +2792,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2101", + fig_link=global_data.fig_base_url + "#4.2.39", name="po_2_race_baa_ff.conditional_field_conflict", description=dedent( """\ @@ -2676,6 +2815,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1200", + fig_link=global_data.fig_base_url + "#4.1.73", name="po_2_race_pi_ff.invalid_text_length", description=dedent( """\ @@ -2690,6 +2830,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2121", + fig_link=global_data.fig_base_url + "#4.2.43", name="po_2_race_pi_ff.conditional_field_conflict", description=dedent( """\ @@ -2711,6 +2852,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E1220", + fig_link=global_data.fig_base_url + "#4.1.74", name="po_2_gender_flag.invalid_enum_value", description="* When present, 'sex/gender of principal owner 2: NP flag' must equal 1, 966, or 988.", severity=Severity.ERROR, @@ -2731,6 +2873,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1240", + fig_link=global_data.fig_base_url + "#4.1.75", name="po_2_gender_ff.invalid_text_length", description=dedent( """\ @@ -2745,6 +2888,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2141", + fig_link=global_data.fig_base_url + "#4.2.47", name="po_2_gender_ff.conditional_field_conflict", description=dedent( """\ @@ -2768,6 +2912,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E1260", + fig_link=global_data.fig_base_url + "#4.1.76", name="po_3_ethnicity.invalid_enum_value", description=dedent( """\ @@ -2796,6 +2941,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_unique_in_field, id="W1261", + fig_link=global_data.fig_base_url + "#4.4.23", name="po_3_ethnicity.duplicates_in_field", description="* 'Ethnicity of principal owner 3' should **not** contain duplicated values.", severity=Severity.WARNING, @@ -2804,6 +2950,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( meets_multi_value_field_restriction, id="W1262", + fig_link=global_data.fig_base_url + "#4.4.24", name="po_3_ethnicity.multi_value_field_restriction", description=dedent( """\ @@ -2825,6 +2972,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1280", + fig_link=global_data.fig_base_url + "#4.1.77", name="po_3_ethnicity_ff.invalid_text_length", description=dedent( """\ @@ -2839,6 +2987,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2042", + fig_link=global_data.fig_base_url + "#4.2.28", name="po_3_ethnicity_ff.conditional_field_conflict", description=dedent( """\ @@ -2860,6 +3009,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E1300", + fig_link=global_data.fig_base_url + "#4.1.78", name="po_3_race.invalid_enum_value", description=dedent( """\ @@ -2909,6 +3059,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_unique_in_field, id="W1301", + fig_link=global_data.fig_base_url + "#4.4.25", name="po_3_race.duplicates_in_field", description="* 'Race of principal owner 3' should **not** contain duplicated values.", severity=Severity.WARNING, @@ -2917,6 +3068,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( meets_multi_value_field_restriction, id="W1302", + fig_link=global_data.fig_base_url + "#4.4.26", name="po_3_race.multi_value_field_restriction", description=dedent( """\ @@ -2938,6 +3090,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1320", + fig_link=global_data.fig_base_url + "#4.1.79", name="po_3_race_anai_ff.invalid_text_length", description=dedent( """\ @@ -2953,6 +3106,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2062", + fig_link=global_data.fig_base_url + "#4.2.32", name="po_3_race_anai_ff.conditional_field_conflict", description=dedent( """\ @@ -2976,6 +3130,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1340", + fig_link=global_data.fig_base_url + "#4.1.80", name="po_3_race_asian_ff.invalid_text_length", description=dedent( """\ @@ -2990,6 +3145,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2082", + fig_link=global_data.fig_base_url + "#4.2.36", name="po_3_race_asian_ff.conditional_field_conflict", description=dedent( """\ @@ -3012,6 +3168,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1360", + fig_link=global_data.fig_base_url + "#4.1.81", name="po_3_race_baa_ff.invalid_text_length", description=dedent( """\ @@ -3026,6 +3183,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2102", + fig_link=global_data.fig_base_url + "#4.2.40", name="po_3_race_baa_ff.conditional_field_conflict", description=dedent( """\ @@ -3048,6 +3206,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1380", + fig_link=global_data.fig_base_url + "#4.1.82", name="po_3_race_pi_ff.invalid_text_length", description=dedent( """\ @@ -3062,6 +3221,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2122", + fig_link=global_data.fig_base_url + "#4.2.44", name="po_3_race_pi_ff.conditional_field_conflict", description=dedent( """\ @@ -3083,6 +3243,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E1400", + fig_link=global_data.fig_base_url + "#4.1.83", name="po_3_gender_flag.invalid_enum_value", description="* When present, 'sex/gender of principal owner 3: NP flag' must equal 1, 966, or 988.", severity=Severity.ERROR, @@ -3103,6 +3264,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1420", + fig_link=global_data.fig_base_url + "#4.1.84", name="po_3_gender_ff.invalid_text_length", description=dedent( """\ @@ -3117,6 +3279,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2142", + fig_link=global_data.fig_base_url + "#4.2.48", name="po_3_gender_ff.conditional_field_conflict", description=dedent( """\ @@ -3138,6 +3301,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E1440", + fig_link=global_data.fig_base_url + "#4.1.85", name="po_4_ethnicity.invalid_enum_value", description=dedent( """\ @@ -3165,6 +3329,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_unique_in_field, id="W1441", + fig_link=global_data.fig_base_url + "#4.4.27", name="po_4_ethnicity.duplicates_in_field", description="* 'Ethnicity of principal owner 4' should **not** contain duplicated values.", severity=Severity.WARNING, @@ -3173,6 +3338,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( meets_multi_value_field_restriction, id="W1442", + fig_link=global_data.fig_base_url + "#4.4.28", name="po_4_ethnicity.multi_value_field_restriction", description=dedent( """\ @@ -3194,6 +3360,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1460", + fig_link=global_data.fig_base_url + "#4.1.86", name="po_4_ethnicity_ff.invalid_text_length", description=dedent( """\ @@ -3208,6 +3375,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2043", + fig_link=global_data.fig_base_url + "#4.2.29", name="po_4_ethnicity_ff.conditional_field_conflict", description=dedent( """\ @@ -3229,6 +3397,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E1480", + fig_link=global_data.fig_base_url + "#4.1.87", name="po_4_race.invalid_enum_value", description=dedent( """\ @@ -3278,6 +3447,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_unique_in_field, id="W1481", + fig_link=global_data.fig_base_url + "#4.4.29", name="po_4_race.duplicates_in_field", description="* 'Race of principal owner 4' should **not** contain duplicated values.", severity=Severity.WARNING, @@ -3286,6 +3456,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( meets_multi_value_field_restriction, id="W1482", + fig_link=global_data.fig_base_url + "#4.4.30", name="po_4_race.multi_value_field_restriction", description=dedent( """\ @@ -3307,6 +3478,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1500", + fig_link=global_data.fig_base_url + "#4.1.88", name="po_4_race_anai_ff.invalid_text_length", description=dedent( """\ @@ -3322,6 +3494,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2063", + fig_link=global_data.fig_base_url + "#4.2.33", name="po_4_race_anai_ff.conditional_field_conflict", description=dedent( """\ @@ -3345,6 +3518,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1520", + fig_link=global_data.fig_base_url + "#4.1.89", name="po_4_race_asian_ff.invalid_text_length", description=dedent( """\ @@ -3359,6 +3533,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2083", + fig_link=global_data.fig_base_url + "#4.2.37", name="po_4_race_asian_ff.conditional_field_conflict", description=dedent( """\ @@ -3381,6 +3556,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1540", + fig_link=global_data.fig_base_url + "#4.1.90", name="po_4_race_baa_ff.invalid_text_length", description=dedent( """\ @@ -3395,6 +3571,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2103", + fig_link=global_data.fig_base_url + "#4.2.41", name="po_4_race_baa_ff.conditional_field_conflict", description=dedent( """\ @@ -3418,6 +3595,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1560", + fig_link=global_data.fig_base_url + "#4.1.91", name="po_4_race_pi_ff.invalid_text_length", description=dedent( """\ @@ -3432,6 +3610,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2123", + fig_link=global_data.fig_base_url + "#4.2.45", name="po_4_race_pi_ff.conditional_field_conflict", description=dedent( """\ @@ -3454,6 +3633,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( is_valid_enum, id="E1580", + fig_link=global_data.fig_base_url + "#4.1.92", name="po_4_gender_flag.invalid_enum_value", description="* When present, 'sex/gender of principal owner 4: NP flag' must equal 1, 966, or 988.", severity=Severity.ERROR, @@ -3474,6 +3654,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) 0, 300, id="E1600", + fig_link=global_data.fig_base_url + "#4.1.93", name="po_4_gender_ff.invalid_text_length", description=dedent( """\ @@ -3488,6 +3669,7 @@ def get_phase_1_and_2_validations_for_lei(context: dict[str, str] | None = None) SBLCheck( has_no_conditional_field_conflict, id="E2143", + fig_link=global_data.fig_base_url + "#4.2.49", name="po_4_gender_ff.conditional_field_conflict", description=dedent( """\ diff --git a/tests/test_fig_links.py b/tests/test_fig_links.py new file mode 100644 index 00000000..16d06ff5 --- /dev/null +++ b/tests/test_fig_links.py @@ -0,0 +1,39 @@ +import requests + +from regtech_data_validator.phase_validations import get_phase_1_and_2_validations_for_lei +from regtech_data_validator.global_data import fig_base_url +from bs4 import BeautifulSoup + + +class TestFigAnchors: + + def test_fig_links(self): + + html_text = requests.get( + "https://www.consumerfinance.gov/data-research/small-business-lending/filing-instructions-guide/2024-guide/#4" + ).text + source_links = BeautifulSoup(html_text, 'html.parser') + + validators = get_phase_1_and_2_validations_for_lei() + checks = [] + validator_anchors = [] + fig_links = [] + + for k in validators.keys(): + v = validators[k] + for p in v.keys(): + checks.extend(v[p]) + + for check in checks: + validator_anchors.append({"id": check.title, "anchor": check.fig_link}) + + elements = source_links.find_all(lambda tag: tag.name == "a" and "Validation ID:" in tag.text) + for e in elements: + anchor = e.get('href') + id = e.text.split("Validation ID:")[1].strip() + fig_links.append({"id": id, "anchor": fig_base_url + anchor}) + + validator_anchors = sorted(validator_anchors, key=lambda d: d['id']) + fig_links = sorted(fig_links, key=lambda d: d['id']) + anchors = zip(validator_anchors, fig_links) + assert not any(x != y for x, y in anchors)