### Development Setup and Testing Source: https://github.com/python-validators/validators/blob/master/CONTRIBUTING.md Commands to clone the repository, install dependencies using PDM, activate the virtual environment, and run tox for linting and type checking. ```sh # clone repository $ git clone "https://github.com/YOUR-USERNAME/validators.git" # change directory $ cd validators # install development dependencies $ pdm install # activate virtual environment $ . ./.venv/bin/activate # replace `/bin/` with `/Scripts/` if you're on Windows. # run tox for linting, type checking, formatting etc. $ tox ``` -------------------------------- ### Install validators Source: https://github.com/python-validators/validators/blob/master/docs/install_and_use.md Installs the validators library using pip. It is recommended to use a virtual environment for installation. ```text pip install validators ``` -------------------------------- ### Install validators Source: https://github.com/python-validators/validators/blob/master/docs/install_and_use.rst Installs the validators library using pip. It is recommended to use pip within a virtual environment. ```text pip install validators ``` -------------------------------- ### Install validators Source: https://github.com/python-validators/validators/blob/master/docs/index.rst Installs the validators library using pip. This is the first step to using the library in your Python projects. ```shell pip install validators ``` -------------------------------- ### Basic Usage Example Source: https://github.com/python-validators/validators/blob/master/docs/install_and_use.md Demonstrates the basic usage of the validators library by checking the validity of an email address. ```python import validators print(validators.email('someone@example.com')) ``` -------------------------------- ### Install validators Source: https://github.com/python-validators/validators/blob/master/docs/index.md Installs the validators library using pip. This is the first step to using the library in your Python projects. ```shell pip install validators ``` -------------------------------- ### Install validators Source: https://github.com/python-validators/validators/blob/master/README.md Installs the validators library using pip. This is the first step to using the library in your Python projects. ```shell pip install validators ``` -------------------------------- ### Basic String Validation Source: https://github.com/python-validators/validators/blob/master/src/validators/_tld.txt This snippet demonstrates basic string validation using the validators library. It covers common checks like email, URL, and UUID formats. Ensure the 'validators' library is installed (`pip install validators`). ```python import validators email = "test@example.com" url = "https://www.example.com" uuid_str = "a1b2c3d4-e5f6-7890-1234-567890abcdef" print(f"Is '{email}' a valid email? {validators.email(email)}") print(f"Is '{url}' a valid URL? {validators.url(url)}") print(f"Is '{uuid_str}' a valid UUID? {validators.uuid(uuid_str)}") ``` -------------------------------- ### Raise Validation Error via Environment Variable Source: https://github.com/python-validators/validators/blob/master/docs/install_and_use.md Shows how to configure the validators library to raise a ValidationError by setting the RAISE_VALIDATION_ERROR environment variable to True. Includes an example of an invalid URL. ```console $ export RAISE_VALIDATION_ERROR=True $ python -c "from validators import url; print(url('https//bad_url'))" Traceback (most recent call last): File "", line 1, in File "/path/to/lib/validators/utils.py", line 87, in wrapper raise ValidationError(func, _func_args_as_dict(func, *args, **kwargs)) validators.utils.ValidationError: ValidationError(func=url, args={'value': 'https//bad_url'}) ``` -------------------------------- ### Raise Validation Error via Environment Variable Source: https://github.com/python-validators/validators/blob/master/docs/install_and_use.rst Shows how to configure the validators library to raise a ValidationError when validation fails by setting the RAISE_VALIDATION_ERROR environment variable to True. Includes an example of a failing URL validation. ```console $ export RAISE_VALIDATION_ERROR=True $ python -c "from validators import url; print(url('https//bad_url'))" Traceback (most recent call last): File "", line 1, in File "/path/to/lib/validators/utils.py", line 87, in wrapper raise ValidationError(func, _func_args_as_dict(func, *args, **kwargs)) validators.utils.ValidationError: ValidationError(func=url, args={'value': 'https//bad_url'}) ``` -------------------------------- ### Custom Validation Rule Source: https://github.com/python-validators/validators/blob/master/src/validators/_tld.txt This example illustrates how to define and use custom validation rules within the validators library. This allows for flexible and specific validation logic. ```python import validators def is_even(value): return value % 2 == 0 number = 4 print(f"Is {number} even? {validators.ValidationFailure(is_even(number))}") ``` -------------------------------- ### Email Validation Example Source: https://github.com/python-validators/validators/blob/master/docs/index.rst Demonstrates how to use the validators library to check if a given string is a valid email address. It imports the library and calls the email validation function. ```python >>> import validators >>> >>> validators.email('someone@example.com') True ``` -------------------------------- ### Email Validation Example Source: https://github.com/python-validators/validators/blob/master/docs/index.md Demonstrates how to use the validators library to check if a given string is a valid email address. It imports the library and calls the email validation function. ```python >>> import validators >>> >>> validators.email('someone@example.com') True ``` -------------------------------- ### Raise Validation Error via Function Argument Source: https://github.com/python-validators/validators/blob/master/docs/install_and_use.rst Demonstrates how to explicitly trigger a ValidationError by passing the `r_ve=True` argument to a validation function. Includes an example of a failing Visa card number validation. ```console $ python -c "from validators.card import visa; print(visa('bad_visa_number', r_ve=True))" Traceback (most recent call last): File "", line 1, in File "/path/to/lib/validators/utils.py", line 87, in wrapper raise ValidationError(func, _func_args_as_dict(func, *args, **kwargs)) validators.utils.ValidationError: ValidationError(func=visa, args={'value': 'bad_visa_number'}) ``` -------------------------------- ### Email Validation Example Source: https://github.com/python-validators/validators/blob/master/README.md Demonstrates how to use the validators library to check if a given string is a valid email address. It imports the library and calls the email validation function. ```python >>> import validators >>> >>> validators.email('someone@example.com') True ``` -------------------------------- ### Raise Validation Error via Function Argument Source: https://github.com/python-validators/validators/blob/master/docs/install_and_use.md Demonstrates how to trigger a ValidationError for a specific function call by passing the `r_ve=True` argument. This example uses the `visa` validator with an invalid number. ```console $ python -c "from validators.card import visa; print(visa('bad_visa_number', r_ve=True))" Traceback (most recent call last): File "", line 1, in File "/path/to/lib/validators/utils.py", line 87, in wrapper raise ValidationError(func, _func_args_as_dict(func, *args, **kwargs)) validators.utils.ValidationError: ValidationError(func=visa, args={'value': 'bad_visa_number'}) ``` -------------------------------- ### Documentation Generation and Preview Source: https://github.com/python-validators/validators/blob/master/CONTRIBUTING.md Instructions for exporting documentation in different formats (doc, man, web) and previewing them using mkdocs or a simple HTTP server. ```sh $ . ./.venv/bin/activate # generate documentation $ python package/export TYPE # where TYPE is any of `doc`, `man` or `web`. # To preview mkdocs $ mkdocs serve # To preview man pages $ man docs/_build/man/validators.1 # To preview sphinx webpages $ python -m http.server -d docs/_build/web ``` -------------------------------- ### Validate TRX Address Source: https://github.com/python-validators/validators/blob/master/docs/api/crypto_addresses.rst Checks the validity of a Tron (TRX) address. TRX addresses typically start with 'T' and are 34 characters long. ```python import validators.crypto_addresses address = "T...") is_valid = validators.crypto_addresses.trx_address(address) print(f"Is valid TRX address: {is_valid}") ``` -------------------------------- ### Basic Usage of validators Source: https://github.com/python-validators/validators/blob/master/docs/install_and_use.rst Demonstrates the basic usage of the validators library by checking the validity of an email address. ```python import validators print(validators.email('someone@example.com')) ``` -------------------------------- ### Packaging and Uploading to PyPI Source: https://github.com/python-validators/validators/blob/master/CONTRIBUTING.md Scripts to generate distribution packages (sdist and bdist) and upload them to PyPI using twine. ```sh # Run `./package/roll.sh` (or `./package/roll.ps1`) to generate both `sdist` and `bdist`. # publishing $ twine check dist/* $ twine upload dist/* ``` -------------------------------- ### Tagging and Pushing for Release Source: https://github.com/python-validators/validators/blob/master/CONTRIBUTING.md Steps for tagging a new release, including syncing with upstream, creating an annotated tag, and pushing the tag to the remote repository. ```sh # syncing with upstream $ git pull upstream master $ git push # tagging that final merge commit before release $ GIT_COMMITTER_DATE=$(git log -n1 --pretty=%aD) git tag -a -m "vMAJOR.MINOR.PATCH" MAJOR.MINOR.PATCH # pushing tag to remote $ git push --tag $ git push upstream --tag ``` -------------------------------- ### Publishing Versioned Documentation Source: https://github.com/python-validators/validators/blob/master/CONTRIBUTING.md Commands using the 'mike' tool to deploy versioned documentation, including stable and bleeding-edge versions, to the gh-pages branch. ```sh # To preview versioned docs, run `mike serve` (`mike` is a dev dependency). # to publish stable docs run `mike deploy -p -u VERSION stable` after checking out to a stable tag name like `0.28.3` (note: document `VERSION = 0.29 if tag_name == 0.29.1`). # to publish bleeding-edge docs run `mike deploy -p -u dev master` after checking out to the `master` branch. ``` -------------------------------- ### Packaging and Documentation Fixes Source: https://github.com/python-validators/validators/blob/master/CHANGES.md Version 0.23.2 addresses issues with packaging and the generation of RST and MD documentation. ```python fix: packaging as well as `rST` & `md` document generation by @yozachar in [#337](ttps://github.com/python-validators/validators/pull/337) ``` -------------------------------- ### Documentation Build Flexibility Source: https://github.com/python-validators/validators/blob/master/CHANGES.md This feature allows the documentation to be built using either Sphinx or MkDocs, providing flexibility in the documentation generation process. ```bash # Example commands for building docs (specific commands depend on chosen tool): # sphinx-build -b html sourcedir builddir # mkdocs build ``` -------------------------------- ### Manual Nav Reference and Version Bump Source: https://github.com/python-validators/validators/blob/master/CHANGES.md Version 0.23.1 includes a fix for the manual navigation reference for MkDocs and bumps the project version. ```python fix: manual nav reference for mkdocs; bumps version by @yozachar in [#335](https://github.com/python-validators/validators/pull/335) ``` -------------------------------- ### Generating SHA256 Checksum for Release Source: https://github.com/python-validators/validators/blob/master/CONTRIBUTING.md Command to generate the SHA256 checksum for a Python wheel file, which is used for release verification on GitHub. ```sh # generate sha256sum $ sha256sum dist/validators-VERSION-py3-none-any.whl > dist/validators-VERSION-py3-none-any.whl.sha256 ``` -------------------------------- ### Project Dependencies with Hashes Source: https://github.com/python-validators/validators/blob/master/package/requirements.sphinx.txt This snippet lists the project's dependencies, including package names, versions, and their respective SHA256 hashes for integrity verification. These are commonly found in dependency management files like requirements.txt. ```shell --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 colorama==0.4.6 --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 docutils==0.20.1 --hash=sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6 --hash=sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b eth-hash[pycryptodome]==0.7.0 --hash=sha256:b8d5a230a2b251f4a291e3164a23a14057c4a6de4b0aa4a16fa4dc9161b57e2f --hash=sha256:bacdc705bfd85dadd055ecd35fd1b4f846b671add101427e089a4ca2e8db310a furo==2024.8.6 --hash=sha256:6cd97c58b47813d3619e63e9081169880fbe331f0ca883c871ff1f3f11814f5c --hash=sha256:b63e4cee8abfc3136d3bc03a3d45a76a850bada4d6374d24c1716b0e01394a01 idna==3.7 --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 imagesize==1.4.1 --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a importlib-metadata==8.0.0 --hash=sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f --hash=sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812 jinja2==3.1.6 --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 markdown-it-py==3.0.0 --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb markupsafe==2.1.5 --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f ``` -------------------------------- ### Build Process Improvement Source: https://github.com/python-validators/validators/blob/master/CHANGES.md This change improves the build process by ensuring the virtual environment is activated before building. It also addresses write permissions for id-token at the job level. ```bash source .venv/bin/activate ``` -------------------------------- ### Date and Time Validation Source: https://github.com/python-validators/validators/blob/master/src/validators/_tld.txt Demonstrates validation of date and time formats using the validators library. This includes checking for valid dates and times. ```python import validators date_str = "2023-10-26" time_str = "14:30:00" print(f"Is '{date_str}' a valid date? {validators.date(date_str)}") print(f"Is '{time_str}' a valid time? {validators.time(time_str)}") ``` -------------------------------- ### Project Dependencies with Hashes Source: https://github.com/python-validators/validators/blob/master/package/requirements.tooling.txt This snippet lists the project dependencies along with their version specifiers and SHA256 hashes. These hashes are used to ensure the integrity and authenticity of the downloaded packages. ```shell --hash=sha256:746af39356fee2b89aada06c7376e1aa274a23493d7016059c3a72e3b296befb \ --hash=sha256:7a62d3b5b0d7f9143d94893f8ba43aa5a5c51a0ffc4a401aa97a81ed76930521 \ --hash=sha256:7d7bd20dc07cebd68cc8bc7b3f5ada6d637f42d947c85264f94b0d1cd9d87384 \ --hash=sha256:97f58fda4e309382ad30ede7f30e2791d70dd29ea17f41970119f55bdb7a45c3 \ --hash=sha256:bddfbb8d63c460f4b4128b6a506e7052bad4d6f3ff607ebbb41b0aa19c2770d1 \ --hash=sha256:ced3eeb44df75353e08ab3b6a9e113b5f3f996bea48d4f7c027bc528ba87b672 \ --hash=sha256:d2e2c23cef30dc3cbe9cc5d04f2899e7f5e478c40d2e0a633513ad081f7361b5 \ --hash=sha256:d8a136aa7d228975a6aee3dd8bea9b28e2b43e9444aa678fb62aeb1956ff2351 \ --hash=sha256:f92fe93bc72e262b7b3f2bba9879897e2d58a989b4714ba6a5a7273e842ad2f8 tomli==2.0.1; python_version < "3.11" \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f ``` -------------------------------- ### Project Dependencies Source: https://github.com/python-validators/validators/blob/master/package/requirements.tooling.txt This snippet lists the Python packages and their specific versions required for the python-validators project. It also includes SHA256 hashes for each package to ensure the integrity and authenticity of the downloaded files. ```python colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 eth-hash[pycryptodome]==0.7.0 \ --hash=sha256:b8d5a230a2b251f4a291e3164a23a14057c4a6de4b0aa4a16fa4dc9161b57e2f \ --hash=sha256:bacdc705bfd85dadd055ecd35fd1b4f846b671add101427e089a4ca2e8db310a exceptiongroup==1.2.1; python_version < "3.11" \ --hash=sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad \ --hash=sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16 iniconfig==2.0.0 \ --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 nodeenv==1.9.1 \ --hash=sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f \ --hash=sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9 packaging==24.1 \ --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124 pluggy==1.5.0 \ --hash=sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1 \ --hash=sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669 pycryptodome==3.20.0 \ --hash=sha256:09609209ed7de61c2b560cc5c8c4fbf892f8b15b1faf7e4cbffac97db1fffda7 \ --hash=sha256:210ba1b647837bfc42dd5a813cdecb5b86193ae11a3f5d972b9a0ae2c7e9e4b4 \ --hash=sha256:2ab6ab0cb755154ad14e507d1df72de9897e99fd2d4922851a276ccc14f4f1a5 \ --hash=sha256:405002eafad114a2f9a930f5db65feef7b53c4784495dd8758069b89baf68eab \ --hash=sha256:4401564ebf37dfde45d096974c7a159b52eeabd9969135f0426907db367a652a \ --hash=sha256:49a4c4dc60b78ec41d2afa392491d788c2e06edf48580fbfb0dd0f828af49d25 \ --hash=sha256:6e0e4a987d38cfc2e71b4a1b591bae4891eeabe5fa0f56154f576e26287bfdea \ --hash=sha256:76658f0d942051d12a9bd08ca1b6b34fd762a8ee4240984f7c06ddfb55eaf15a \ --hash=sha256:76cb39afede7055127e35a444c1c041d2e8d2f1f9c121ecef573757ba4cd2c3c \ --hash=sha256:8d6b98d0d83d21fb757a182d52940d028564efe8147baa9ce0f38d057104ae72 \ --hash=sha256:9b3ae153c89a480a0ec402e23db8d8d84a3833b65fa4b15b81b83be9d637aab9 \ --hash=sha256:a60fedd2b37b4cb11ccb5d0399efe26db9e0dd149016c1cc6c8161974ceac2d6 \ --hash=sha256:ac1c7c0624a862f2e53438a15c9259d1655325fc2ec4392e66dc46cdae24d044 \ --hash=sha256:acae12b9ede49f38eb0ef76fdec2df2e94aad85ae46ec85be3648a57f0a7db04 \ --hash=sha256:acc2614e2e5346a4a4eab6e199203034924313626f9620b7b4b38e9ad74b7e0c \ --hash=sha256:acf6e43fa75aca2d33e93409f2dafe386fe051818ee79ee8a3e21de9caa2ac9e \ --hash=sha256:c18b381553638414b38705f07d1ef0a7cf301bc78a5f9bc17a957eb19446834b \ --hash=sha256:ec1f93feb3bb93380ab0ebf8b859e8e5678c0f010d2d78367cf6bc30bfeb148e \ --hash=sha256:f35d6cee81fa145333137009d9c8ba90951d7d77b67c79cbe5f03c7eb74d8fe2 \ --hash=sha256:f47888542a0633baff535a04726948e876bf1ed880fddb7c10a736fa99146ab3 \ --hash=sha256:fb3b87461fa35afa19c971b0a2b7456a7b1db7b4eba9a8424666104925b78128 pypandoc-binary==1.13 \ --hash=sha256:11a2497320eb3dccb74de3c67b6df3e5d3f66cdc2a36a67e9a871708f7e48412 \ --hash=sha256:21ef0345726d36fc45a50211320614daf2caede684b0d0963ce8738292809746 \ --hash=sha256:2915f52e4632bd2d0a8fcd2f7e7dfc2ea19b4e1a280fcbc2ddcd142713c4ff12 \ --hash=sha256:3881aa7c84faec2007c0ae4466d3a1cfc93171206b8540f2defa8ea971bf6fd6 \ --hash=sha256:67c0c7af811bcf3cd4f3221be756a4975ec35b2d7df89d8de4313a8caa2cd54f \ --hash=sha256:9455fdd9521cbf4b56d79a56b806afa94c8c22f3c8ef878536e58d941a70f6d6 \ --hash=sha256:946666388eb79b307d7f497b3b33045ef807750f8e5ef3440e0ba3bbab698044 pyright==1.1.378 \ --hash=sha256:78a043be2876d12d0af101d667e92c7734f3ebb9db71dccc2c220e7e7eb89ca2 \ --hash=sha256:8853776138b01bc284da07ac481235be7cc89d3176b073d2dba73636cb95be79 pytest==8.3.2 \ --hash=sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5 \ --hash=sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce ruff==0.6.3 \ --hash=sha256:14a9528a8b70ccc7a847637c29e56fd1f9183a9db743bbc5b8e0c4ad60592a82 \ --hash=sha256:183b99e9edd1ef63be34a3b51fee0a9f4ab95add123dbf89a71f7b1f0c991983 \ --hash=sha256:34e2824a13bb8c668c71c1760a6ac7d795ccbd8d38ff4a0d8471fdb15de910b1 \ --hash=sha256:3b061e49b5cf3a297b4d1c27ac5587954ccb4ff601160d3d6b2f70b1622194dc \ --hash=sha256:42844ff678f9b976366b262fa2d1d1a3fe76f6e145bd92c84e27d172e3c34500 \ --hash=sha256:47021dff5445d549be954eb275156dfd7c37222acc1e8014311badcb9b4ec8c1 \ --hash=sha256:500f166d03fc6d0e61c8e40a3ff853fa8a43d938f5d14c183c612df1b0d6c58a \ --hash=sha256:65a533235ed55f767d1fc62193a21cbf9e3329cf26d427b800fdeacfb77d296f \ --hash=sha256:70452a10eb2d66549de8e75f89ae82462159855e983ddff91bc0bce6511d0470 ```