mcp-postgresql-ops 3.3.3__tar.gz → 3.3.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/PKG-INFO +2 -17
  2. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/README.md +0 -16
  3. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/pyproject.toml +1 -0
  4. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/src/mcp_postgresql_ops.egg-info/PKG-INFO +2 -17
  5. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/src/mcp_postgresql_ops.egg-info/requires.txt +1 -0
  6. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/uv.lock +91 -0
  7. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.env.example +0 -0
  8. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.github/CONTRIBUTING.md +0 -0
  9. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.github/FUNDING.yml +0 -0
  10. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  11. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  12. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  13. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  14. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.github/ISSUE_TEMPLATE/question.md +0 -0
  15. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.github/copilot-instructions.md +0 -0
  16. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.github/dependabot.yml +0 -0
  17. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.github/pull_request_template.md +0 -0
  18. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.github/workflows/pypi-publish.yml +0 -0
  19. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.github/workflows/test.yml +0 -0
  20. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.gitignore +0 -0
  21. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.gitleaks.toml +0 -0
  22. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.pre-commit-config.yaml +0 -0
  23. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/.python-version +0 -0
  24. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/Dockerfile.MCP-Server +0 -0
  25. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/Dockerfile.MCPO-Proxy +0 -0
  26. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/LICENSE +0 -0
  27. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/MANIFEST.in +0 -0
  28. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/SECURITY.md +0 -0
  29. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/_config.yml +0 -0
  30. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/_includes/head-custom-google-analytics.html +0 -0
  31. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/build-mcp-server-docker-image.sh +0 -0
  32. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/build-mcpo-server-docker-image.sh +0 -0
  33. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/docker-compose.custom-db.yml +0 -0
  34. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/docker-compose.yml +0 -0
  35. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/img/MCP-Workflow-of-Quickstart-Tutorial.png +0 -0
  36. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/img/screenshot-000.png +0 -0
  37. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/img/screenshot-001.png +0 -0
  38. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/img/screenshot-002.png +0 -0
  39. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/img/screenshot-004.png +0 -0
  40. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/img/screenshot-005.png +0 -0
  41. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/img/screenshot-claude-desktop-airflow-connections-html.png +0 -0
  42. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/img/screenshot-claude-desktop-mermaid-diagram.png +0 -0
  43. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/img/screenshot-claude-desktop-question-001.png +0 -0
  44. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/img/screenshot-swagger-api.png +0 -0
  45. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/main.py +0 -0
  46. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/mcp-config.json.http +0 -0
  47. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/mcp-config.json.stdio +0 -0
  48. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/run-mcp-inspector-local.sh +0 -0
  49. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/run-mcp-inspector-pypi.sh +0 -0
  50. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/scripts/create-test-data.sh +0 -0
  51. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/scripts/create-test-data.sql +0 -0
  52. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/scripts/enable-pgsql-extensions.sh +0 -0
  53. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/scripts/mcp-server-docker-cmd.sh +0 -0
  54. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/setup.cfg +0 -0
  55. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/src/mcp_postgresql_ops/__init__.py +0 -0
  56. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/src/mcp_postgresql_ops/__main__.py +0 -0
  57. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/src/mcp_postgresql_ops/functions.py +0 -0
  58. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/src/mcp_postgresql_ops/mcp_main.py +0 -0
  59. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/src/mcp_postgresql_ops/prompt_template.md +0 -0
  60. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/src/mcp_postgresql_ops/version_compat.py +0 -0
  61. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/src/mcp_postgresql_ops.egg-info/SOURCES.txt +0 -0
  62. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/src/mcp_postgresql_ops.egg-info/dependency_links.txt +0 -0
  63. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/src/mcp_postgresql_ops.egg-info/entry_points.txt +0 -0
  64. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/src/mcp_postgresql_ops.egg-info/top_level.txt +0 -0
  65. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/tests/__init__.py +0 -0
  66. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/tests/conftest.py +0 -0
  67. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/tests/docker/docker-compose.test.yml +0 -0
  68. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/tests/docker/init-test-db.sql +0 -0
  69. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/tests/test_tools_integration.py +0 -0
  70. {mcp_postgresql_ops-3.3.3 → mcp_postgresql_ops-3.3.5}/tests/test_version_compat.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-postgresql-ops
3
- Version: 3.3.3
3
+ Version: 3.3.5
4
4
  Summary: Add your description here
5
5
  Author-email: JungJungIn <call518@gmail.com>
6
6
  Requires-Python: >=3.12
@@ -10,6 +10,7 @@ Requires-Dist: fastmcp>=2.12.3
10
10
  Requires-Dist: asyncpg>=0.29.0
11
11
  Requires-Dist: psycopg2-binary>=2.9.7
12
12
  Requires-Dist: setuptools-scm>=10.0.5
13
+ Requires-Dist: pre-commit>=4.6.0
13
14
  Provides-Extra: dev
14
15
  Requires-Dist: pytest>=7.0.0; extra == "dev"
15
16
  Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
@@ -957,8 +958,6 @@ Two test suites are available:
957
958
  | Unit tests (version compatibility logic) | `tests/test_version_compat.py` | No |
958
959
  | Integration tests (all tools × PG 12–18) | `tests/test_tools_integration.py` | Yes |
959
960
 
960
- #### Option A — Run everything with a single command (recommended)
961
-
962
961
  `uv run pytest` automatically starts the Docker test containers (PG 12–18), waits for them to be fully initialized, runs all tests, then tears everything down.
963
962
 
964
963
  ```bash
@@ -972,21 +971,7 @@ uv run pytest tests/test_version_compat.py -v
972
971
  uv run pytest tests/test_tools_integration.py -v
973
972
  ```
974
973
 
975
- #### Option B — Manual control via helper script
976
-
977
- ```bash
978
- # Full run: docker up → wait → pytest → docker down
979
- uv run python scripts/run-tests.py
980
-
981
- # Pass pytest options directly
982
- uv run python scripts/run-tests.py -v --tb=short
983
-
984
- # Keep containers running after tests (for debugging)
985
- uv run python scripts/run-tests.py --no-cleanup
986
- ```
987
-
988
974
  > **Note**: Docker must be running. The test stack uses ports 5412–5418 (PG 12–18).
989
- ```
990
975
 
991
976
  ### Version Compatibility Testing
992
977
 
@@ -940,8 +940,6 @@ Two test suites are available:
940
940
  | Unit tests (version compatibility logic) | `tests/test_version_compat.py` | No |
941
941
  | Integration tests (all tools × PG 12–18) | `tests/test_tools_integration.py` | Yes |
942
942
 
943
- #### Option A — Run everything with a single command (recommended)
944
-
945
943
  `uv run pytest` automatically starts the Docker test containers (PG 12–18), waits for them to be fully initialized, runs all tests, then tears everything down.
946
944
 
947
945
  ```bash
@@ -955,21 +953,7 @@ uv run pytest tests/test_version_compat.py -v
955
953
  uv run pytest tests/test_tools_integration.py -v
956
954
  ```
957
955
 
958
- #### Option B — Manual control via helper script
959
-
960
- ```bash
961
- # Full run: docker up → wait → pytest → docker down
962
- uv run python scripts/run-tests.py
963
-
964
- # Pass pytest options directly
965
- uv run python scripts/run-tests.py -v --tb=short
966
-
967
- # Keep containers running after tests (for debugging)
968
- uv run python scripts/run-tests.py --no-cleanup
969
- ```
970
-
971
956
  > **Note**: Docker must be running. The test stack uses ports 5412–5418 (PG 12–18).
972
- ```
973
957
 
974
958
  ### Version Compatibility Testing
975
959
 
@@ -10,6 +10,7 @@ dependencies = [
10
10
  "asyncpg>=0.29.0",
11
11
  "psycopg2-binary>=2.9.7",
12
12
  "setuptools-scm>=10.0.5",
13
+ "pre-commit>=4.6.0",
13
14
  ]
14
15
 
15
16
  [project.optional-dependencies]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-postgresql-ops
3
- Version: 3.3.3
3
+ Version: 3.3.5
4
4
  Summary: Add your description here
5
5
  Author-email: JungJungIn <call518@gmail.com>
6
6
  Requires-Python: >=3.12
@@ -10,6 +10,7 @@ Requires-Dist: fastmcp>=2.12.3
10
10
  Requires-Dist: asyncpg>=0.29.0
11
11
  Requires-Dist: psycopg2-binary>=2.9.7
12
12
  Requires-Dist: setuptools-scm>=10.0.5
13
+ Requires-Dist: pre-commit>=4.6.0
13
14
  Provides-Extra: dev
14
15
  Requires-Dist: pytest>=7.0.0; extra == "dev"
15
16
  Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
@@ -957,8 +958,6 @@ Two test suites are available:
957
958
  | Unit tests (version compatibility logic) | `tests/test_version_compat.py` | No |
958
959
  | Integration tests (all tools × PG 12–18) | `tests/test_tools_integration.py` | Yes |
959
960
 
960
- #### Option A — Run everything with a single command (recommended)
961
-
962
961
  `uv run pytest` automatically starts the Docker test containers (PG 12–18), waits for them to be fully initialized, runs all tests, then tears everything down.
963
962
 
964
963
  ```bash
@@ -972,21 +971,7 @@ uv run pytest tests/test_version_compat.py -v
972
971
  uv run pytest tests/test_tools_integration.py -v
973
972
  ```
974
973
 
975
- #### Option B — Manual control via helper script
976
-
977
- ```bash
978
- # Full run: docker up → wait → pytest → docker down
979
- uv run python scripts/run-tests.py
980
-
981
- # Pass pytest options directly
982
- uv run python scripts/run-tests.py -v --tb=short
983
-
984
- # Keep containers running after tests (for debugging)
985
- uv run python scripts/run-tests.py --no-cleanup
986
- ```
987
-
988
974
  > **Note**: Docker must be running. The test stack uses ports 5412–5418 (PG 12–18).
989
- ```
990
975
 
991
976
  ### Version Compatibility Testing
992
977
 
@@ -2,6 +2,7 @@ fastmcp>=2.12.3
2
2
  asyncpg>=0.29.0
3
3
  psycopg2-binary>=2.9.7
4
4
  setuptools-scm>=10.0.5
5
+ pre-commit>=4.6.0
5
6
 
6
7
  [dev]
7
8
  pytest>=7.0.0
@@ -187,6 +187,15 @@ wheels = [
187
187
  { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" },
188
188
  ]
189
189
 
190
+ [[package]]
191
+ name = "cfgv"
192
+ version = "3.5.0"
193
+ source = { registry = "https://pypi.org/simple" }
194
+ sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" }
195
+ wheels = [
196
+ { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" },
197
+ ]
198
+
190
199
  [[package]]
191
200
  name = "charset-normalizer"
192
201
  version = "3.4.3"
@@ -318,6 +327,15 @@ wheels = [
318
327
  { url = "https://files.pythonhosted.org/packages/06/06/d68a5d5d292c2ad2bc6a02e5ca2cb1bb9c15e941ab02f004a06a342d7f0f/cyclopts-4.10.0-py3-none-any.whl", hash = "sha256:50f333382a60df8d40ec14aa2e627316b361c4f478598ada1f4169d959bf9ea7", size = 204097, upload-time = "2026-03-14T14:09:32.504Z" },
319
328
  ]
320
329
 
330
+ [[package]]
331
+ name = "distlib"
332
+ version = "0.4.0"
333
+ source = { registry = "https://pypi.org/simple" }
334
+ sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605, upload-time = "2025-07-17T16:52:00.465Z" }
335
+ wheels = [
336
+ { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" },
337
+ ]
338
+
321
339
  [[package]]
322
340
  name = "dnspython"
323
341
  version = "2.8.0"
@@ -402,6 +420,15 @@ wheels = [
402
420
  { url = "https://files.pythonhosted.org/packages/4f/67/684fa2d2de1e7504549d4ca457b4f854ccec3cd3be03bd86b33b599fbf58/fastmcp-3.2.0-py3-none-any.whl", hash = "sha256:e71aba3df16f86f546a4a9e513261d3233bcc92bef0dfa647bac3fa33623f681", size = 705550, upload-time = "2026-03-30T20:25:35.499Z" },
403
421
  ]
404
422
 
423
+ [[package]]
424
+ name = "filelock"
425
+ version = "3.29.0"
426
+ source = { registry = "https://pypi.org/simple" }
427
+ sdist = { url = "https://files.pythonhosted.org/packages/b5/fe/997687a931ab51049acce6fa1f23e8f01216374ea81374ddee763c493db5/filelock-3.29.0.tar.gz", hash = "sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90", size = 57571, upload-time = "2026-04-19T15:39:10.068Z" }
428
+ wheels = [
429
+ { url = "https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl", hash = "sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258", size = 39812, upload-time = "2026-04-19T15:39:08.752Z" },
430
+ ]
431
+
405
432
  [[package]]
406
433
  name = "h11"
407
434
  version = "0.16.0"
@@ -448,6 +475,15 @@ wheels = [
448
475
  { url = "https://files.pythonhosted.org/packages/25/0a/6269e3473b09aed2dab8aa1a600c70f31f00ae1349bee30658f7e358a159/httpx_sse-0.4.1-py3-none-any.whl", hash = "sha256:cba42174344c3a5b06f255ce65b350880f962d99ead85e776f23c6618a377a37", size = 8054, upload-time = "2025-06-24T13:21:04.772Z" },
449
476
  ]
450
477
 
478
+ [[package]]
479
+ name = "identify"
480
+ version = "2.6.19"
481
+ source = { registry = "https://pypi.org/simple" }
482
+ sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" }
483
+ wheels = [
484
+ { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" },
485
+ ]
486
+
451
487
  [[package]]
452
488
  name = "idna"
453
489
  version = "3.10"
@@ -631,6 +667,7 @@ source = { editable = "." }
631
667
  dependencies = [
632
668
  { name = "asyncpg" },
633
669
  { name = "fastmcp" },
670
+ { name = "pre-commit" },
634
671
  { name = "psycopg2-binary" },
635
672
  { name = "setuptools-scm" },
636
673
  ]
@@ -650,6 +687,7 @@ dev = [
650
687
  requires-dist = [
651
688
  { name = "asyncpg", specifier = ">=0.29.0" },
652
689
  { name = "fastmcp", specifier = ">=2.12.3" },
690
+ { name = "pre-commit", specifier = ">=4.6.0" },
653
691
  { name = "psycopg2-binary", specifier = ">=2.9.7" },
654
692
  { name = "pytest", marker = "extra == 'dev'", specifier = ">=7.0.0" },
655
693
  { name = "pytest-asyncio", marker = "extra == 'dev'", specifier = ">=0.21.0" },
@@ -678,6 +716,15 @@ wheels = [
678
716
  { url = "https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl", hash = "sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b", size = 69667, upload-time = "2025-09-02T15:23:09.635Z" },
679
717
  ]
680
718
 
719
+ [[package]]
720
+ name = "nodeenv"
721
+ version = "1.10.0"
722
+ source = { registry = "https://pypi.org/simple" }
723
+ sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" }
724
+ wheels = [
725
+ { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" },
726
+ ]
727
+
681
728
  [[package]]
682
729
  name = "openapi-pydantic"
683
730
  version = "0.5.1"
@@ -748,6 +795,22 @@ wheels = [
748
795
  { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
749
796
  ]
750
797
 
798
+ [[package]]
799
+ name = "pre-commit"
800
+ version = "4.6.0"
801
+ source = { registry = "https://pypi.org/simple" }
802
+ dependencies = [
803
+ { name = "cfgv" },
804
+ { name = "identify" },
805
+ { name = "nodeenv" },
806
+ { name = "pyyaml" },
807
+ { name = "virtualenv" },
808
+ ]
809
+ sdist = { url = "https://files.pythonhosted.org/packages/8e/22/2de9408ac81acbb8a7d05d4cc064a152ccf33b3d480ebe0cd292153db239/pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", size = 198525, upload-time = "2026-04-21T20:31:41.613Z" }
810
+ wheels = [
811
+ { url = "https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b", size = 226472, upload-time = "2026-04-21T20:31:40.092Z" },
812
+ ]
813
+
751
814
  [[package]]
752
815
  name = "psycopg2-binary"
753
816
  version = "2.9.10"
@@ -950,6 +1013,19 @@ wheels = [
950
1013
  { url = "https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl", hash = "sha256:611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5", size = 15075, upload-time = "2025-11-10T16:07:45.537Z" },
951
1014
  ]
952
1015
 
1016
+ [[package]]
1017
+ name = "python-discovery"
1018
+ version = "1.2.2"
1019
+ source = { registry = "https://pypi.org/simple" }
1020
+ dependencies = [
1021
+ { name = "filelock" },
1022
+ { name = "platformdirs" },
1023
+ ]
1024
+ sdist = { url = "https://files.pythonhosted.org/packages/de/ef/3bae0e537cfe91e8431efcba4434463d2c5a65f5a89edd47c6cf2f03c55f/python_discovery-1.2.2.tar.gz", hash = "sha256:876e9c57139eb757cb5878cbdd9ae5379e5d96266c99ef731119e04fffe533bb", size = 58872, upload-time = "2026-04-07T17:28:49.249Z" }
1025
+ wheels = [
1026
+ { url = "https://files.pythonhosted.org/packages/d8/db/795879cc3ddfe338599bddea6388cc5100b088db0a4caf6e6c1af1c27e04/python_discovery-1.2.2-py3-none-any.whl", hash = "sha256:e1ae95d9af875e78f15e19aed0c6137ab1bb49c200f21f5061786490c9585c7a", size = 31894, upload-time = "2026-04-07T17:28:48.09Z" },
1027
+ ]
1028
+
953
1029
  [[package]]
954
1030
  name = "python-dotenv"
955
1031
  version = "1.2.2"
@@ -1289,6 +1365,21 @@ wheels = [
1289
1365
  { url = "https://files.pythonhosted.org/packages/e6/60/73603fbcdbe5e803855bcce4414f94eaeed449083bd8183e67161af78188/vcs_versioning-1.1.1-py3-none-any.whl", hash = "sha256:b541e2ba79fc6aaa3850f8a7f88af43d97c1c80649c01142ee4146eddbc599e4", size = 79851, upload-time = "2026-03-27T20:42:40.45Z" },
1290
1366
  ]
1291
1367
 
1368
+ [[package]]
1369
+ name = "virtualenv"
1370
+ version = "21.2.4"
1371
+ source = { registry = "https://pypi.org/simple" }
1372
+ dependencies = [
1373
+ { name = "distlib" },
1374
+ { name = "filelock" },
1375
+ { name = "platformdirs" },
1376
+ { name = "python-discovery" },
1377
+ ]
1378
+ sdist = { url = "https://files.pythonhosted.org/packages/0c/98/3a7e644e19cb26133488caff231be390579860bbbb3da35913c49a1d0a46/virtualenv-21.2.4.tar.gz", hash = "sha256:b294ef68192638004d72524ce7ef303e9d0cf5a44c95ce2e54a7500a6381cada", size = 5850742, upload-time = "2026-04-14T22:15:31.438Z" }
1379
+ wheels = [
1380
+ { url = "https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl", hash = "sha256:29d21e941795206138d0f22f4e45ff7050e5da6c6472299fb7103318763861ac", size = 5831232, upload-time = "2026-04-14T22:15:29.342Z" },
1381
+ ]
1382
+
1292
1383
  [[package]]
1293
1384
  name = "watchfiles"
1294
1385
  version = "1.1.1"