Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
ca1b41f
chore: update (dev) dependencies; bump version
yozachar Sep 3, 2024
fa9b550
Update README.md
mattseymour Sep 9, 2024
dd11808
Merge pull request #400 from mattseymour/patch-1
yozachar Sep 13, 2024
0a791b6
fix(domain): accept .onion as a valid TLD
davidt99 Sep 15, 2024
597a030
Merge pull request #402 from davidt99/master
yozachar Sep 16, 2024
1231f6a
fix(url): add hashtag to allowed fragment characters
davidt99 Oct 6, 2024
c9585e9
Merge pull request #405 from davidt99/master
yozachar Oct 7, 2024
7114870
chore(deps): bump jinja2 from 3.1.4 to 3.1.6 in /package
dependabot[bot] Mar 6, 2025
da45d42
Merge pull request #414 from python-validators/dependabot/pip/package…
yozachar Mar 7, 2025
640763f
Add script validators inn.py
TheDrunkenBear Oct 26, 2024
56f0210
Validators inn company
TheDrunkenBear Oct 26, 2024
d1ff35b
weight coefficients from company
TheDrunkenBear Oct 27, 2024
b4f1cb9
validators inn person
TheDrunkenBear Oct 27, 2024
5ffcdb3
update __init__.py
TheDrunkenBear Oct 27, 2024
011e861
update .gitignore
TheDrunkenBear Oct 27, 2024
014a6bb
drop comment
TheDrunkenBear Oct 27, 2024
1462c7b
Update weights && add description function
TheDrunkenBear Oct 27, 2024
71c9bbb
Add link validator algorithm
TheDrunkenBear Oct 27, 2024
874f0a9
Add decorator validator
TheDrunkenBear Oct 27, 2024
2398003
Moved all files to the i18n directory.
TheDrunkenBear Oct 29, 2024
6bf90e2
add tests
TheDrunkenBear Oct 29, 2024
e50832a
rename function `inn` -> `ru_inn`
TheDrunkenBear Nov 3, 2024
7722459
add function description and fix validators imports
TheDrunkenBear Mar 27, 2025
ad2e2c5
chore: linting & formatting
yozachar Mar 28, 2025
894a069
Merge pull request #408 from tabbols95/validators_inn
yozachar Mar 28, 2025
9dac863
feat: allow custom URL scheme validation (#409)
e3krisztian Mar 28, 2025
25fcef0
Fix email regex issue 140 (#411)
cwisdo Mar 28, 2025
d6241fc
fix(uri): remove "mailto:" prefix manually (#418)
max-moser Mar 29, 2025
f7742c5
Refactor API: remove print from ru_inn, update description, and expos…
TheDrunkenBear Apr 3, 2025
b2510d1
feat: adds `doctest` (#417)
d-chris Apr 26, 2025
7c97eca
Fix: Allow Special DOI Cases Used in Public Administration Tests (#415)
MaurizioPilia Apr 26, 2025
bafe62e
feat: add Mir card validation support (#420)
TheDrunkenBear Apr 26, 2025
8691cea
chore: formatting; sync dependencies (#422)
yozachar May 1, 2025
ca2db46
chore(deps): bump certifi from 2024.6.2 to 2024.7.4 in /package
dependabot[bot] May 1, 2025
6d8a1ab
chore: prepare for new release
yozachar May 1, 2025
de4948f
Merge pull request #424 from yozachar/workshop
yozachar May 1, 2025
0b1799c
chore: updates changelog
yozachar May 1, 2025
75788ed
Merge pull request #425 from yozachar/workshop
yozachar May 1, 2025
5a80c7e
chore: update project classifiers
yozachar May 1, 2025
74a8287
Merge pull request #426 from yozachar/workshop
yozachar May 1, 2025
560428d
chore(deps): bump jinja2 from 3.1.4 to 3.1.6 in /package
dependabot[bot] May 1, 2025
a93bca3
Merge pull request #428 from python-validators/dependabot/pip/package…
yozachar May 1, 2025
e6d50ba
Merge pull request #423 from python-validators/dependabot/pip/package…
yozachar May 1, 2025
8ff15cb
chore(deps): bump requests from 2.32.3 to 2.32.4 in /package
dependabot[bot] Jun 10, 2025
5440442
Merge pull request #430 from python-validators/dependabot/pip/package…
yozachar Jun 12, 2025
402b351
fix: reject MAC addresses with mixed separators
iCasture Jul 18, 2025
9bc7e82
Merge pull request #432 from iCasture/master
yozachar Oct 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions .github/workflows/pycqa.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,24 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
# set up specific python version
- name: Set up Python v3.8
- name: Set up Python v3.9
uses: actions/setup-python@v5
with:
python-version: "3.8"
python-version: "3.9"
# tooling
- name: Install 'tooling' dependencies
run: pip install -r package/requirements.tooling.txt
- name: Tooling
run: |
black .
ruff format .
ruff check .
pyright .
testing:
strategy:
fail-fast: true
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
runs-on: ${{ matrix.os }}
steps:
# checkout repository again!
Expand All @@ -48,6 +48,8 @@ jobs:
cache: "pip"
# testing
- name: Install 'testing' dependencies
run: pip install -r package/requirements.testing.txt
run: |
pip install -r package/requirements.testing.txt
pip install .
- name: Testing
run: pytest .
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ cython_debug/
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
.idea/

# VSCode
.vscode/
Expand All @@ -172,6 +172,10 @@ cython_debug/
# rtx/mise
.rtx.toml
.mise.toml
mise.toml

# ruff
.ruff_cache

# taplo
.taplo.toml
444 changes: 245 additions & 199 deletions CHANGES.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion LICENSE.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
The MIT License (MIT)

Copyright (c) 2013 - 2024 Konsta Vesterinen
Copyright (c) 2013 - 2025 Konsta Vesterinen

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
Expand Down
10 changes: 8 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,15 @@ require defining a schema or form. I wanted to create a simple validation
library where validating a simple value does not require defining a form or a
schema.

```shell
pip install validators
```

Then,

```python
>>> import validators
>>>
>>>
>>> validators.email('someone@example.com')
True
```
Expand All @@ -30,7 +36,7 @@ True

---

> **_Python 3.8 [reaches EOL in](https://endoflife.date/python) October 2024._**
> **_Python 3.9 [reaches EOL in](https://endoflife.date/python) October 2025._**

<!-- Links -->
[sast-badge]: https://github.com/python-validators/validators/actions/workflows/sast.yaml/badge.svg
Expand Down
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

| Version | Supported |
| ---------- | ------------------ |
| `>=0.33.0` | :white_check_mark: |
| `>=0.35.0` | :white_check_mark: |

## Reporting a Vulnerability

Expand Down
1 change: 1 addition & 0 deletions docs/api/card.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
::: validators.card.discover
::: validators.card.jcb
::: validators.card.mastercard
::: validators.card.mir
::: validators.card.unionpay
::: validators.card.visa
1 change: 1 addition & 0 deletions docs/api/card.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ card
.. autofunction:: discover
.. autofunction:: jcb
.. autofunction:: mastercard
.. autofunction:: mir
.. autofunction:: unionpay
.. autofunction:: visa
1 change: 1 addition & 0 deletions docs/api/i18n.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@
::: validators.i18n.fr_ssn
::: validators.i18n.ind_aadhar
::: validators.i18n.ind_pan
::: validators.i18n.ru_inn
1 change: 1 addition & 0 deletions docs/api/i18n.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ i18n
.. autofunction:: fr_ssn
.. autofunction:: ind_aadhar
.. autofunction:: ind_pan
.. autofunction:: ru_inn
10 changes: 8 additions & 2 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,15 @@ require defining a schema or form. I wanted to create a simple validation
library where validating a simple value does not require defining a form or a
schema.

```shell
pip install validators
```

Then,

```python
>>> import validators
>>>
>>>
>>> validators.email('someone@example.com')
True
```
Expand All @@ -30,7 +36,7 @@ True

---

> **_Python 3.8 [reaches EOL in](https://endoflife.date/python) October 2024._**
> **_Python 3.9 [reaches EOL in](https://endoflife.date/python) October 2025._**

<!-- Links -->
[sast-badge]: https://github.com/python-validators/validators/actions/workflows/sast.yaml/badge.svg
Expand Down
12 changes: 9 additions & 3 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,16 @@ seems to require defining a schema or form. I wanted to create a simple
validation library where validating a simple value does not require
defining a form or a schema.

.. code:: shell

pip install validators

Then,

.. code:: python

>>> import validators
>>>
>>>
>>> validators.email('someone@example.com')
True

Expand All @@ -41,8 +47,8 @@ Resources

--------------

**Python 3.8** `reaches EOL in <https://endoflife.date/python>`__
**October 2024.**
**Python 3.9** `reaches EOL in <https://endoflife.date/python>`__
**October 2025.**

.. raw:: html

Expand Down
2 changes: 1 addition & 1 deletion mkdocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ extra:
provider: mike
default: stable

copyright: Copyright &copy; 2013 - 2024 Konsta Vesterinen
copyright: Copyright &copy; 2013 - 2025 Konsta Vesterinen

nav:
- Home: index.md
Expand Down
3 changes: 2 additions & 1 deletion package/export/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ def _gen_rst_docs(source: Path, refs_path: Path, only_web: bool = False, only_ma
with open(source / "docs/index.rst", "wt") as idx_f:
idx_f.write(
convert_file(source_file=source / "docs/index.md", format="md", to="rst").replace(
"\r\n", "\n" # remove carriage return in windows
"\r\n",
"\n", # remove carriage return in windows
)
+ "\n\n.. toctree::"
+ "\n :hidden:"
Expand Down
21 changes: 9 additions & 12 deletions package/requirements.sphinx.txt
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,9 @@ docutils==0.20.1 \
eth-hash[pycryptodome]==0.7.0 \
--hash=sha256:b8d5a230a2b251f4a291e3164a23a14057c4a6de4b0aa4a16fa4dc9161b57e2f \
--hash=sha256:bacdc705bfd85dadd055ecd35fd1b4f846b671add101427e089a4ca2e8db310a
furo==2024.5.6 \
--hash=sha256:490a00d08c0a37ecc90de03ae9227e8eb5d6f7f750edf9807f398a2bdf2358de \
--hash=sha256:81f205a6605ebccbb883350432b4831c0196dd3d1bc92f61e1f459045b3d2b0b
furo==2024.8.6 \
--hash=sha256:6cd97c58b47813d3619e63e9081169880fbe331f0ca883c871ff1f3f11814f5c \
--hash=sha256:b63e4cee8abfc3136d3bc03a3d45a76a850bada4d6374d24c1716b0e01394a01
idna==3.7 \
--hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \
--hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0
Expand All @@ -112,9 +112,9 @@ imagesize==1.4.1 \
importlib-metadata==8.0.0 \
--hash=sha256:15584cf2b1bf449d98ff8a6ff1abef57bf20f3ac6454f431736cd3e660921b2f \
--hash=sha256:188bd24e4c346d3f0a933f275c2fec67050326a856b9a359881d7c2a697e8812
jinja2==3.1.4 \
--hash=sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369 \
--hash=sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d
jinja2==3.1.6 \
--hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \
--hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67
markdown-it-py==3.0.0 \
--hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \
--hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb
Expand Down Expand Up @@ -215,9 +215,6 @@ pypandoc-binary==1.13 \
--hash=sha256:67c0c7af811bcf3cd4f3221be756a4975ec35b2d7df89d8de4313a8caa2cd54f \
--hash=sha256:9455fdd9521cbf4b56d79a56b806afa94c8c22f3c8ef878536e58d941a70f6d6 \
--hash=sha256:946666388eb79b307d7f497b3b33045ef807750f8e5ef3440e0ba3bbab698044
pytz==2024.1 \
--hash=sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812 \
--hash=sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319
pyyaml==6.0.1 \
--hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \
--hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \
Expand Down Expand Up @@ -258,9 +255,9 @@ pyyaml==6.0.1 \
--hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \
--hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \
--hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f
requests==2.32.3 \
--hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \
--hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6
requests==2.32.4 \
--hash=sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c \
--hash=sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422
snowballstemmer==2.2.0 \
--hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \
--hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a
Expand Down
6 changes: 3 additions & 3 deletions package/requirements.testing.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ pycryptodome==3.20.0 \
--hash=sha256:f35d6cee81fa145333137009d9c8ba90951d7d77b67c79cbe5f03c7eb74d8fe2 \
--hash=sha256:f47888542a0633baff535a04726948e876bf1ed880fddb7c10a736fa99146ab3 \
--hash=sha256:fb3b87461fa35afa19c971b0a2b7456a7b1db7b4eba9a8424666104925b78128
pytest==8.2.2 \
--hash=sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343 \
--hash=sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977
pytest==8.3.2 \
--hash=sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5 \
--hash=sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce
tomli==2.0.1; python_version < "3.11" \
--hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \
--hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f
88 changes: 25 additions & 63 deletions package/requirements.tooling.txt
Original file line number Diff line number Diff line change
@@ -1,32 +1,6 @@
# This file is @generated by PDM.
# Please do not edit it manually.

black==24.4.2 \
--hash=sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474 \
--hash=sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1 \
--hash=sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0 \
--hash=sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8 \
--hash=sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96 \
--hash=sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1 \
--hash=sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04 \
--hash=sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021 \
--hash=sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94 \
--hash=sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d \
--hash=sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c \
--hash=sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7 \
--hash=sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c \
--hash=sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc \
--hash=sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7 \
--hash=sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d \
--hash=sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c \
--hash=sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741 \
--hash=sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce \
--hash=sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb \
--hash=sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063 \
--hash=sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e
click==8.1.7 \
--hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \
--hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de
colorama==0.4.6 \
--hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
--hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
Expand All @@ -39,21 +13,12 @@ exceptiongroup==1.2.1; python_version < "3.11" \
iniconfig==2.0.0 \
--hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \
--hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374
mypy-extensions==1.0.0 \
--hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \
--hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782
nodeenv==1.9.1 \
--hash=sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f \
--hash=sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9
packaging==24.1 \
--hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \
--hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124
pathspec==0.12.1 \
--hash=sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 \
--hash=sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712
platformdirs==4.2.2 \
--hash=sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee \
--hash=sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3
pluggy==1.5.0 \
--hash=sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1 \
--hash=sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669
Expand Down Expand Up @@ -87,34 +52,31 @@ pypandoc-binary==1.13 \
--hash=sha256:67c0c7af811bcf3cd4f3221be756a4975ec35b2d7df89d8de4313a8caa2cd54f \
--hash=sha256:9455fdd9521cbf4b56d79a56b806afa94c8c22f3c8ef878536e58d941a70f6d6 \
--hash=sha256:946666388eb79b307d7f497b3b33045ef807750f8e5ef3440e0ba3bbab698044
pyright==1.1.369 \
--hash=sha256:06d5167a8d7be62523ced0265c5d2f1e022e110caf57a25d92f50fb2d07bcda0 \
--hash=sha256:ad290710072d021e213b98cc7a2f90ae3a48609ef5b978f749346d1a47eb9af8
pytest==8.2.2 \
--hash=sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343 \
--hash=sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977
ruff==0.5.0 \
--hash=sha256:2c4dfcd8d34b143916994b3876b63d53f56724c03f8c1a33a253b7b1e6bf2a7d \
--hash=sha256:38f3b8327b3cb43474559d435f5fa65dacf723351c159ed0dc567f7ab735d1b6 \
--hash=sha256:46e193b36f2255729ad34a49c9a997d506e58f08555366b2108783b3064a0e1e \
--hash=sha256:49141d267100f5ceff541b4e06552e98527870eafa1acc9dec9139c9ec5af64c \
--hash=sha256:7594f8df5404a5c5c8f64b8311169879f6cf42142da644c7e0ba3c3f14130370 \
--hash=sha256:81e5facfc9f4a674c6a78c64d38becfbd5e4f739c31fcd9ce44c849f1fad9e4c \
--hash=sha256:9dc5cfd3558f14513ed0d5b70ce531e28ea81a8a3b1b07f0f48421a3d9e7d80a \
--hash=sha256:adc7012d6ec85032bc4e9065110df205752d64010bed5f958d25dbee9ce35de3 \
--hash=sha256:b1a321c4f68809fddd9b282fab6a8d8db796b270fff44722589a8b946925a2a8 \
--hash=sha256:cd096e23c6a4f9c819525a437fa0a99d1c67a1b6bb30948d46f33afbc53596cf \
--hash=sha256:d2ffbc3715a52b037bcb0f6ff524a9367f642cdc5817944f6af5479bbb2eb50e \
--hash=sha256:d505fb93b0fabef974b168d9b27c3960714d2ecda24b6ffa6a87ac432905ea38 \
--hash=sha256:db3ca35265de239a1176d56a464b51557fce41095c37d6c406e658cf80bbb362 \
--hash=sha256:e589e27971c2a3efff3fadafb16e5aef7ff93250f0134ec4b52052b673cf988d \
--hash=sha256:e9118f60091047444c1b90952736ee7b1792910cab56e9b9a9ac20af94cd0440 \
--hash=sha256:eb641b5873492cf9bd45bc9c5ae5320648218e04386a5f0c264ad6ccce8226a1 \
--hash=sha256:ed5c4df5c1fb4518abcb57725b576659542bdbe93366f4f329e8f398c4b71178 \
--hash=sha256:ee770ea8ab38918f34e7560a597cc0a8c9a193aaa01bfbd879ef43cb06bd9c4c
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 \
--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
typing-extensions==4.12.2; python_version < "3.11" \
--hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \
--hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8
Loading