amati 0.3.23__tar.gz → 0.3.25__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 (103) hide show
  1. {amati-0.3.23 → amati-0.3.25}/.github/workflows/checks.yaml +1 -1
  2. {amati-0.3.23 → amati-0.3.25}/.github/workflows/codeql.yml +2 -2
  3. {amati-0.3.23 → amati-0.3.25}/.github/workflows/coverage.yaml +1 -1
  4. {amati-0.3.23 → amati-0.3.25}/.github/workflows/data-refresh.yaml +1 -1
  5. {amati-0.3.23 → amati-0.3.25}/.github/workflows/publish.yaml +1 -1
  6. {amati-0.3.23 → amati-0.3.25}/.github/workflows/scorecards.yml +1 -1
  7. {amati-0.3.23 → amati-0.3.25}/.github/workflows/tag-and-create-release.yaml +1 -1
  8. {amati-0.3.23 → amati-0.3.25}/.pre-commit-config.yaml +1 -1
  9. {amati-0.3.23 → amati-0.3.25}/Dockerfile +1 -1
  10. {amati-0.3.23 → amati-0.3.25}/PKG-INFO +1 -1
  11. {amati-0.3.23 → amati-0.3.25}/amati/_data/files/media-types.json +1 -0
  12. {amati-0.3.23 → amati-0.3.25}/amati/_data/files/spdx-licences.json +22 -0
  13. {amati-0.3.23 → amati-0.3.25}/pyproject.toml +1 -1
  14. {amati-0.3.23 → amati-0.3.25}/uv.lock +32 -32
  15. {amati-0.3.23 → amati-0.3.25}/.dockerignore +0 -0
  16. {amati-0.3.23 → amati-0.3.25}/.github/actions/setup/action.yaml +0 -0
  17. {amati-0.3.23 → amati-0.3.25}/.github/dependabot.yml +0 -0
  18. {amati-0.3.23 → amati-0.3.25}/.github/workflows/dependency-review.yml +0 -0
  19. {amati-0.3.23 → amati-0.3.25}/.gitignore +0 -0
  20. {amati-0.3.23 → amati-0.3.25}/.python-version +0 -0
  21. {amati-0.3.23 → amati-0.3.25}/LICENSE +0 -0
  22. {amati-0.3.23 → amati-0.3.25}/README.md +0 -0
  23. {amati-0.3.23 → amati-0.3.25}/SECURITY.md +0 -0
  24. {amati-0.3.23 → amati-0.3.25}/TEMPLATE.html +0 -0
  25. {amati-0.3.23 → amati-0.3.25}/amati/__init__.py +0 -0
  26. {amati-0.3.23 → amati-0.3.25}/amati/_data/files/http-status-codes.json +0 -0
  27. {amati-0.3.23 → amati-0.3.25}/amati/_data/files/iso9110.json +0 -0
  28. {amati-0.3.23 → amati-0.3.25}/amati/_data/files/schemes.json +0 -0
  29. {amati-0.3.23 → amati-0.3.25}/amati/_data/files/tlds.json +0 -0
  30. {amati-0.3.23 → amati-0.3.25}/amati/_data/http_status_code.py +0 -0
  31. {amati-0.3.23 → amati-0.3.25}/amati/_data/iso9110.py +0 -0
  32. {amati-0.3.23 → amati-0.3.25}/amati/_data/media_types.py +0 -0
  33. {amati-0.3.23 → amati-0.3.25}/amati/_data/refresh.py +0 -0
  34. {amati-0.3.23 → amati-0.3.25}/amati/_data/schemes.py +0 -0
  35. {amati-0.3.23 → amati-0.3.25}/amati/_data/spdx_licences.py +0 -0
  36. {amati-0.3.23 → amati-0.3.25}/amati/_data/tlds.py +0 -0
  37. {amati-0.3.23 → amati-0.3.25}/amati/_error_handler.py +0 -0
  38. {amati-0.3.23 → amati-0.3.25}/amati/_logging.py +0 -0
  39. {amati-0.3.23 → amati-0.3.25}/amati/_references.py +0 -0
  40. {amati-0.3.23 → amati-0.3.25}/amati/_resolve_forward_references.py +0 -0
  41. {amati-0.3.23 → amati-0.3.25}/amati/amati.py +0 -0
  42. {amati-0.3.23 → amati-0.3.25}/amati/exceptions.py +0 -0
  43. {amati-0.3.23 → amati-0.3.25}/amati/fields/__init__.py +0 -0
  44. {amati-0.3.23 → amati-0.3.25}/amati/fields/_custom_types.py +0 -0
  45. {amati-0.3.23 → amati-0.3.25}/amati/fields/commonmark.py +0 -0
  46. {amati-0.3.23 → amati-0.3.25}/amati/fields/email.py +0 -0
  47. {amati-0.3.23 → amati-0.3.25}/amati/fields/http_status_codes.py +0 -0
  48. {amati-0.3.23 → amati-0.3.25}/amati/fields/iso9110.py +0 -0
  49. {amati-0.3.23 → amati-0.3.25}/amati/fields/json.py +0 -0
  50. {amati-0.3.23 → amati-0.3.25}/amati/fields/media.py +0 -0
  51. {amati-0.3.23 → amati-0.3.25}/amati/fields/oas.py +0 -0
  52. {amati-0.3.23 → amati-0.3.25}/amati/fields/spdx_licences.py +0 -0
  53. {amati-0.3.23 → amati-0.3.25}/amati/fields/uri.py +0 -0
  54. {amati-0.3.23 → amati-0.3.25}/amati/file_handler.py +0 -0
  55. {amati-0.3.23 → amati-0.3.25}/amati/grammars/oas.py +0 -0
  56. {amati-0.3.23 → amati-0.3.25}/amati/grammars/rfc6901.py +0 -0
  57. {amati-0.3.23 → amati-0.3.25}/amati/grammars/rfc7159.py +0 -0
  58. {amati-0.3.23 → amati-0.3.25}/amati/model_validators.py +0 -0
  59. {amati-0.3.23 → amati-0.3.25}/amati/py.typed +0 -0
  60. {amati-0.3.23 → amati-0.3.25}/amati/validators/__init__.py +0 -0
  61. {amati-0.3.23 → amati-0.3.25}/amati/validators/_discriminators.py +0 -0
  62. {amati-0.3.23 → amati-0.3.25}/amati/validators/generic.py +0 -0
  63. {amati-0.3.23 → amati-0.3.25}/amati/validators/oas304.py +0 -0
  64. {amati-0.3.23 → amati-0.3.25}/amati/validators/oas311.py +0 -0
  65. {amati-0.3.23 → amati-0.3.25}/bin/checks.sh +0 -0
  66. {amati-0.3.23 → amati-0.3.25}/bin/startup.sh +0 -0
  67. {amati-0.3.23 → amati-0.3.25}/bin/upgrade-python.sh +0 -0
  68. {amati-0.3.23 → amati-0.3.25}/bin/uv-upgrade-from-main.sh +0 -0
  69. {amati-0.3.23 → amati-0.3.25}/scripts/setup_test_specs.py +0 -0
  70. {amati-0.3.23 → amati-0.3.25}/tests/__init__.py +0 -0
  71. {amati-0.3.23 → amati-0.3.25}/tests/data/.amati.tests.yaml +0 -0
  72. {amati-0.3.23 → amati-0.3.25}/tests/data/DigitalOcean-public.v2.errors.json +0 -0
  73. {amati-0.3.23 → amati-0.3.25}/tests/data/api.github.com.json.errors.json +0 -0
  74. {amati-0.3.23 → amati-0.3.25}/tests/data/api.github.com.yaml.errors.json +0 -0
  75. {amati-0.3.23 → amati-0.3.25}/tests/data/discourse.yml.errors.json +0 -0
  76. {amati-0.3.23 → amati-0.3.25}/tests/data/invalid-openapi.yaml +0 -0
  77. {amati-0.3.23 → amati-0.3.25}/tests/data/next-api.github.com.json.errors.json +0 -0
  78. {amati-0.3.23 → amati-0.3.25}/tests/data/openapi.yaml +0 -0
  79. {amati-0.3.23 → amati-0.3.25}/tests/data/openapi.yaml.gz +0 -0
  80. {amati-0.3.23 → amati-0.3.25}/tests/fields/__init__.py +0 -0
  81. {amati-0.3.23 → amati-0.3.25}/tests/fields/test_email.py +0 -0
  82. {amati-0.3.23 → amati-0.3.25}/tests/fields/test_http_status_codes.py +0 -0
  83. {amati-0.3.23 → amati-0.3.25}/tests/fields/test_iso9110.py +0 -0
  84. {amati-0.3.23 → amati-0.3.25}/tests/fields/test_media.py +0 -0
  85. {amati-0.3.23 → amati-0.3.25}/tests/fields/test_oas.py +0 -0
  86. {amati-0.3.23 → amati-0.3.25}/tests/fields/test_spdx_licences.py +0 -0
  87. {amati-0.3.23 → amati-0.3.25}/tests/fields/test_uri.py +0 -0
  88. {amati-0.3.23 → amati-0.3.25}/tests/model_validators/test_all_of.py +0 -0
  89. {amati-0.3.23 → amati-0.3.25}/tests/model_validators/test_at_least_one.py +0 -0
  90. {amati-0.3.23 → amati-0.3.25}/tests/model_validators/test_if_then.py +0 -0
  91. {amati-0.3.23 → amati-0.3.25}/tests/model_validators/test_only_one.py +0 -0
  92. {amati-0.3.23 → amati-0.3.25}/tests/references/test_uri_collector_mixin.py +0 -0
  93. {amati-0.3.23 → amati-0.3.25}/tests/references/test_uri_reference.py +0 -0
  94. {amati-0.3.23 → amati-0.3.25}/tests/references/test_uri_registry.py +0 -0
  95. {amati-0.3.23 → amati-0.3.25}/tests/strategies.py +0 -0
  96. {amati-0.3.23 → amati-0.3.25}/tests/test_amati.py +0 -0
  97. {amati-0.3.23 → amati-0.3.25}/tests/test_external_specs.py +0 -0
  98. {amati-0.3.23 → amati-0.3.25}/tests/test_logging.py +0 -0
  99. {amati-0.3.23 → amati-0.3.25}/tests/validators/__init__.py +0 -0
  100. {amati-0.3.23 → amati-0.3.25}/tests/validators/test_generic.py +0 -0
  101. {amati-0.3.23 → amati-0.3.25}/tests/validators/test_licence_object.py +0 -0
  102. {amati-0.3.23 → amati-0.3.25}/tests/validators/test_security_scheme_object.py +0 -0
  103. {amati-0.3.23 → amati-0.3.25}/tests/validators/test_server_variable_object.py +0 -0
@@ -77,7 +77,7 @@ jobs:
77
77
  - name: Coverage comment
78
78
  if: steps.check_changes.outputs.relevant == 'true'
79
79
  id: coverage_comment
80
- uses: py-cov-action/python-coverage-comment-action@0b4822882443b98c09c51091ad20a7a556581c17 # v3
80
+ uses: py-cov-action/python-coverage-comment-action@7188638f871f721a365d644f505d1ff3df20d683 # v3
81
81
  with:
82
82
  GITHUB_TOKEN: ${{ secrets.BOT_COMMENT_TOKEN }}
83
83
  continue-on-error: true
@@ -73,7 +73,7 @@ jobs:
73
73
 
74
74
  # Initializes the CodeQL tools for scanning.
75
75
  - name: Initialize CodeQL
76
- uses: github/codeql-action/init@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
76
+ uses: github/codeql-action/init@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
77
77
  with:
78
78
  languages: ${{ matrix.language }}
79
79
  build-mode: ${{ matrix.build-mode }}
@@ -101,6 +101,6 @@ jobs:
101
101
  exit 1
102
102
 
103
103
  - name: Perform CodeQL Analysis
104
- uses: github/codeql-action/analyze@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
104
+ uses: github/codeql-action/analyze@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
105
105
  with:
106
106
  category: "/language:${{matrix.language}}"
@@ -24,7 +24,7 @@ jobs:
24
24
  egress-policy: audit
25
25
 
26
26
  - name: Post comment
27
- uses: py-cov-action/python-coverage-comment-action@0b4822882443b98c09c51091ad20a7a556581c17 # v3
27
+ uses: py-cov-action/python-coverage-comment-action@7188638f871f721a365d644f505d1ff3df20d683 # v3
28
28
  with:
29
29
  GITHUB_TOKEN: ${{ secrets.BOT_COMMENT_TOKEN }}
30
30
  GITHUB_PR_RUN_ID: ${{ github.event.workflow_run.id }}
@@ -25,7 +25,7 @@ jobs:
25
25
  token: ${{ secrets.BOT_TOKEN }}
26
26
 
27
27
  - name: Set up uv
28
- uses: astral-sh/setup-uv@681c641aba71e4a1c380be3ab5e12ad51f415867 # v7.1.6
28
+ uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
29
29
  with:
30
30
  version: "latest"
31
31
 
@@ -24,7 +24,7 @@ jobs:
24
24
 
25
25
  - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
26
26
  - name: Install uv
27
- uses: astral-sh/setup-uv@681c641aba71e4a1c380be3ab5e12ad51f415867 # v7.1.6
27
+ uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
28
28
  - name: Set up Python
29
29
  uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
30
30
  with:
@@ -80,6 +80,6 @@ jobs:
80
80
 
81
81
  # Upload the results to GitHub's code scanning dashboard.
82
82
  - name: "Upload to code-scanning"
83
- uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
83
+ uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
84
84
  with:
85
85
  sarif_file: results.sarif
@@ -34,7 +34,7 @@ jobs:
34
34
  fetch-depth: 0 # Fetch all history for proper tag creation
35
35
  token: ${{ secrets.BOT_TOKEN }}
36
36
  - name: Install uv
37
- uses: astral-sh/setup-uv@681c641aba71e4a1c380be3ab5e12ad51f415867 # v7.1.6
37
+ uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
38
38
 
39
39
  - name: Current version
40
40
  id: current_version
@@ -1,7 +1,7 @@
1
1
  repos:
2
2
  - repo: https://github.com/astral-sh/ruff-pre-commit
3
3
  # Ruff version.
4
- rev: v0.14.10
4
+ rev: v0.14.11
5
5
  hooks:
6
6
  # Run the linter.
7
7
  - id: ruff-check
@@ -1,4 +1,4 @@
1
- FROM python:3.14.2-slim@sha256:2751cbe93751f0147bc1584be957c6dd4c5f977c3d4e0396b56456a9fd4ed137
1
+ FROM python:3.14.2-slim@sha256:3955a7dd66ccf92b68d0232f7f86d892eaf75255511dc7e98961bdc990dc6c9b
2
2
 
3
3
  ENV PYTHONUNBUFFERED=1
4
4
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: amati
3
- Version: 0.3.23
3
+ Version: 0.3.25
4
4
  Summary: Validates that a .yaml or .json file conforms to the OpenAPI Specifications 3.x.
5
5
  Project-URL: Homepage, https://github.com/gwyli/amati
6
6
  Project-URL: Issues, https://github.com/gwyli/amati/issues
@@ -1631,6 +1631,7 @@
1631
1631
  "vnd.xacml+json",
1632
1632
  "vnd.xara",
1633
1633
  "vnd.xarin.cpj",
1634
+ "vnd.xcdn",
1634
1635
  "vnd.xecrets-encrypted",
1635
1636
  "vnd.xfdl",
1636
1637
  "vnd.xfdl.webform",
@@ -4073,6 +4073,17 @@
4073
4073
  ],
4074
4074
  "isOsiApproved": false
4075
4075
  },
4076
+ {
4077
+ "reference": "https://spdx.org/licenses/HPND-sell-variant-critical-systems.html",
4078
+ "isDeprecatedLicenseId": false,
4079
+ "detailsUrl": "https://spdx.org/licenses/HPND-sell-variant-critical-systems.json",
4080
+ "name": "HPND - sell variant with safety critical systems clause",
4081
+ "licenseId": "HPND-sell-variant-critical-systems",
4082
+ "seeAlso": [
4083
+ "https://gitlab.freedesktop.org/xorg/driver/xf86-video-voodoo/-/blob/68a5b6d98ae34749cca889f4373b4043d00bfe6a/src/voodoo_dga.c#L12-33"
4084
+ ],
4085
+ "isOsiApproved": false
4086
+ },
4076
4087
  {
4077
4088
  "reference": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer.html",
4078
4089
  "isDeprecatedLicenseId": false,
@@ -7770,6 +7781,17 @@
7770
7781
  ],
7771
7782
  "isOsiApproved": false
7772
7783
  },
7784
+ {
7785
+ "reference": "https://spdx.org/licenses/UnRAR.html",
7786
+ "isDeprecatedLicenseId": false,
7787
+ "detailsUrl": "https://spdx.org/licenses/UnRAR.json",
7788
+ "name": "UnRAR License",
7789
+ "licenseId": "UnRAR",
7790
+ "seeAlso": [
7791
+ "https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/LICENSES/unRAR.txt"
7792
+ ],
7793
+ "isOsiApproved": false
7794
+ },
7773
7795
  {
7774
7796
  "reference": "https://spdx.org/licenses/UPL-1.0.html",
7775
7797
  "isDeprecatedLicenseId": false,
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "amati"
3
- version = "0.3.23"
3
+ version = "0.3.25"
4
4
  description = "Validates that a .yaml or .json file conforms to the OpenAPI Specifications 3.x."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -13,7 +13,7 @@ wheels = [
13
13
 
14
14
  [[package]]
15
15
  name = "amati"
16
- version = "0.3.23"
16
+ version = "0.3.25"
17
17
  source = { editable = "." }
18
18
  dependencies = [
19
19
  { name = "abnf" },
@@ -212,14 +212,14 @@ wheels = [
212
212
 
213
213
  [[package]]
214
214
  name = "hypothesis"
215
- version = "6.148.9"
215
+ version = "6.150.2"
216
216
  source = { registry = "https://pypi.org/simple/" }
217
217
  dependencies = [
218
218
  { name = "sortedcontainers" },
219
219
  ]
220
- sdist = { url = "https://files.pythonhosted.org/packages/b4/1b/de4a349fe5942e500c3f6b0e61e09347d9fefab9e1ac7048c909080a31a0/hypothesis-6.148.9.tar.gz", hash = "sha256:6ec0696ed2fff8c514d61b6f1ca2cd1cb00c948ffd18cab1877c941c0ddb2839", size = 471562, upload-time = "2026-01-01T04:52:54.005Z" }
220
+ sdist = { url = "https://files.pythonhosted.org/packages/d2/19/a4eee0c98e2ec678854272f79646f34943f8fbbc42689cc355b530c5bc96/hypothesis-6.150.2.tar.gz", hash = "sha256:deb043c41c53eaf0955f4a08739c2a34c3d8040ee3d9a2da0aa5470122979f75", size = 475250, upload-time = "2026-01-13T17:09:22.146Z" }
221
221
  wheels = [
222
- { url = "https://files.pythonhosted.org/packages/ac/65/c7fbad05a0ace913b60342d36d1b871edc861f81ab98f60a298a781144a5/hypothesis-6.148.9-py3-none-any.whl", hash = "sha256:c514fcca90eded0e6b56d4df4bc41db935cb4635a9fe3ec9be21d09243ca983b", size = 538490, upload-time = "2026-01-01T04:52:51.353Z" },
222
+ { url = "https://files.pythonhosted.org/packages/b3/5e/21caad4acf45db7caf730cca1bc61422283e4c4e841efbc862d17ab81a21/hypothesis-6.150.2-py3-none-any.whl", hash = "sha256:648d6a2be435889e713ba3d335b0fb5e7a250f569b56e6867887c1e7a0d1f02f", size = 542712, upload-time = "2026-01-13T17:09:19.945Z" },
223
223
  ]
224
224
 
225
225
  [[package]]
@@ -272,7 +272,7 @@ wheels = [
272
272
 
273
273
  [[package]]
274
274
  name = "jsonschema"
275
- version = "4.25.1"
275
+ version = "4.26.0"
276
276
  source = { registry = "https://pypi.org/simple/" }
277
277
  dependencies = [
278
278
  { name = "attrs" },
@@ -280,9 +280,9 @@ dependencies = [
280
280
  { name = "referencing" },
281
281
  { name = "rpds-py" },
282
282
  ]
283
- sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342, upload-time = "2025-08-18T17:03:50.038Z" }
283
+ sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" }
284
284
  wheels = [
285
- { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040, upload-time = "2025-08-18T17:03:48.373Z" },
285
+ { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" },
286
286
  ]
287
287
 
288
288
  [[package]]
@@ -457,15 +457,15 @@ wheels = [
457
457
 
458
458
  [[package]]
459
459
  name = "pyright"
460
- version = "1.1.407"
460
+ version = "1.1.408"
461
461
  source = { registry = "https://pypi.org/simple/" }
462
462
  dependencies = [
463
463
  { name = "nodeenv" },
464
464
  { name = "typing-extensions" },
465
465
  ]
466
- sdist = { url = "https://files.pythonhosted.org/packages/a6/1b/0aa08ee42948b61745ac5b5b5ccaec4669e8884b53d31c8ec20b2fcd6b6f/pyright-1.1.407.tar.gz", hash = "sha256:099674dba5c10489832d4a4b2d302636152a9a42d317986c38474c76fe562262", size = 4122872, upload-time = "2025-10-24T23:17:15.145Z" }
466
+ sdist = { url = "https://files.pythonhosted.org/packages/74/b2/5db700e52554b8f025faa9c3c624c59f1f6c8841ba81ab97641b54322f16/pyright-1.1.408.tar.gz", hash = "sha256:f28f2321f96852fa50b5829ea492f6adb0e6954568d1caa3f3af3a5f555eb684", size = 4400578, upload-time = "2026-01-08T08:07:38.795Z" }
467
467
  wheels = [
468
- { url = "https://files.pythonhosted.org/packages/dc/93/b69052907d032b00c40cb656d21438ec00b3a471733de137a3f65a49a0a0/pyright-1.1.407-py3-none-any.whl", hash = "sha256:6dd419f54fcc13f03b52285796d65e639786373f433e243f8b94cf93a7444d21", size = 5997008, upload-time = "2025-10-24T23:17:13.159Z" },
468
+ { url = "https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl", hash = "sha256:090b32865f4fdb1e0e6cd82bf5618480d48eecd2eb2e70f960982a3d9a4c17c1", size = 6399144, upload-time = "2026-01-08T08:07:37.082Z" },
469
469
  ]
470
470
 
471
471
  [[package]]
@@ -591,28 +591,28 @@ wheels = [
591
591
 
592
592
  [[package]]
593
593
  name = "ruff"
594
- version = "0.14.10"
595
- source = { registry = "https://pypi.org/simple/" }
596
- sdist = { url = "https://files.pythonhosted.org/packages/57/08/52232a877978dd8f9cf2aeddce3e611b40a63287dfca29b6b8da791f5e8d/ruff-0.14.10.tar.gz", hash = "sha256:9a2e830f075d1a42cd28420d7809ace390832a490ed0966fe373ba288e77aaf4", size = 5859763, upload-time = "2025-12-18T19:28:57.98Z" }
597
- wheels = [
598
- { url = "https://files.pythonhosted.org/packages/60/01/933704d69f3f05ee16ef11406b78881733c186fe14b6a46b05cfcaf6d3b2/ruff-0.14.10-py3-none-linux_armv6l.whl", hash = "sha256:7a3ce585f2ade3e1f29ec1b92df13e3da262178df8c8bdf876f48fa0e8316c49", size = 13527080, upload-time = "2025-12-18T19:29:25.642Z" },
599
- { url = "https://files.pythonhosted.org/packages/df/58/a0349197a7dfa603ffb7f5b0470391efa79ddc327c1e29c4851e85b09cc5/ruff-0.14.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:674f9be9372907f7257c51f1d4fc902cb7cf014b9980152b802794317941f08f", size = 13797320, upload-time = "2025-12-18T19:29:02.571Z" },
600
- { url = "https://files.pythonhosted.org/packages/7b/82/36be59f00a6082e38c23536df4e71cdbc6af8d7c707eade97fcad5c98235/ruff-0.14.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d85713d522348837ef9df8efca33ccb8bd6fcfc86a2cde3ccb4bc9d28a18003d", size = 12918434, upload-time = "2025-12-18T19:28:51.202Z" },
601
- { url = "https://files.pythonhosted.org/packages/a6/00/45c62a7f7e34da92a25804f813ebe05c88aa9e0c25e5cb5a7d23dd7450e3/ruff-0.14.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6987ebe0501ae4f4308d7d24e2d0fe3d7a98430f5adfd0f1fead050a740a3a77", size = 13371961, upload-time = "2025-12-18T19:29:04.991Z" },
602
- { url = "https://files.pythonhosted.org/packages/40/31/a5906d60f0405f7e57045a70f2d57084a93ca7425f22e1d66904769d1628/ruff-0.14.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:16a01dfb7b9e4eee556fbfd5392806b1b8550c9b4a9f6acd3dbe6812b193c70a", size = 13275629, upload-time = "2025-12-18T19:29:21.381Z" },
603
- { url = "https://files.pythonhosted.org/packages/3e/60/61c0087df21894cf9d928dc04bcd4fb10e8b2e8dca7b1a276ba2155b2002/ruff-0.14.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7165d31a925b7a294465fa81be8c12a0e9b60fb02bf177e79067c867e71f8b1f", size = 14029234, upload-time = "2025-12-18T19:29:00.132Z" },
604
- { url = "https://files.pythonhosted.org/packages/44/84/77d911bee3b92348b6e5dab5a0c898d87084ea03ac5dc708f46d88407def/ruff-0.14.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c561695675b972effb0c0a45db233f2c816ff3da8dcfbe7dfc7eed625f218935", size = 15449890, upload-time = "2025-12-18T19:28:53.573Z" },
605
- { url = "https://files.pythonhosted.org/packages/e9/36/480206eaefa24a7ec321582dda580443a8f0671fdbf6b1c80e9c3e93a16a/ruff-0.14.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bb98fcbbc61725968893682fd4df8966a34611239c9fd07a1f6a07e7103d08e", size = 15123172, upload-time = "2025-12-18T19:29:23.453Z" },
606
- { url = "https://files.pythonhosted.org/packages/5c/38/68e414156015ba80cef5473d57919d27dfb62ec804b96180bafdeaf0e090/ruff-0.14.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f24b47993a9d8cb858429e97bdf8544c78029f09b520af615c1d261bf827001d", size = 14460260, upload-time = "2025-12-18T19:29:27.808Z" },
607
- { url = "https://files.pythonhosted.org/packages/b3/19/9e050c0dca8aba824d67cc0db69fb459c28d8cd3f6855b1405b3f29cc91d/ruff-0.14.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59aabd2e2c4fd614d2862e7939c34a532c04f1084476d6833dddef4afab87e9f", size = 14229978, upload-time = "2025-12-18T19:29:11.32Z" },
608
- { url = "https://files.pythonhosted.org/packages/51/eb/e8dd1dd6e05b9e695aa9dd420f4577debdd0f87a5ff2fedda33c09e9be8c/ruff-0.14.10-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:213db2b2e44be8625002dbea33bb9c60c66ea2c07c084a00d55732689d697a7f", size = 14338036, upload-time = "2025-12-18T19:29:09.184Z" },
609
- { url = "https://files.pythonhosted.org/packages/6a/12/f3e3a505db7c19303b70af370d137795fcfec136d670d5de5391e295c134/ruff-0.14.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b914c40ab64865a17a9a5b67911d14df72346a634527240039eb3bd650e5979d", size = 13264051, upload-time = "2025-12-18T19:29:13.431Z" },
610
- { url = "https://files.pythonhosted.org/packages/08/64/8c3a47eaccfef8ac20e0484e68e0772013eb85802f8a9f7603ca751eb166/ruff-0.14.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1484983559f026788e3a5c07c81ef7d1e97c1c78ed03041a18f75df104c45405", size = 13283998, upload-time = "2025-12-18T19:29:06.994Z" },
611
- { url = "https://files.pythonhosted.org/packages/12/84/534a5506f4074e5cc0529e5cd96cfc01bb480e460c7edf5af70d2bcae55e/ruff-0.14.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c70427132db492d25f982fffc8d6c7535cc2fd2c83fc8888f05caaa248521e60", size = 13601891, upload-time = "2025-12-18T19:28:55.811Z" },
612
- { url = "https://files.pythonhosted.org/packages/0d/1e/14c916087d8598917dbad9b2921d340f7884824ad6e9c55de948a93b106d/ruff-0.14.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5bcf45b681e9f1ee6445d317ce1fa9d6cba9a6049542d1c3d5b5958986be8830", size = 14336660, upload-time = "2025-12-18T19:29:16.531Z" },
613
- { url = "https://files.pythonhosted.org/packages/f2/1c/d7b67ab43f30013b47c12b42d1acd354c195351a3f7a1d67f59e54227ede/ruff-0.14.10-py3-none-win32.whl", hash = "sha256:104c49fc7ab73f3f3a758039adea978869a918f31b73280db175b43a2d9b51d6", size = 13196187, upload-time = "2025-12-18T19:29:19.006Z" },
614
- { url = "https://files.pythonhosted.org/packages/fb/9c/896c862e13886fae2af961bef3e6312db9ebc6adc2b156fe95e615dee8c1/ruff-0.14.10-py3-none-win_amd64.whl", hash = "sha256:466297bd73638c6bdf06485683e812db1c00c7ac96d4ddd0294a338c62fdc154", size = 14661283, upload-time = "2025-12-18T19:29:30.16Z" },
615
- { url = "https://files.pythonhosted.org/packages/74/31/b0e29d572670dca3674eeee78e418f20bdf97fa8aa9ea71380885e175ca0/ruff-0.14.10-py3-none-win_arm64.whl", hash = "sha256:e51d046cf6dda98a4633b8a8a771451107413b0f07183b2bef03f075599e44e6", size = 13729839, upload-time = "2025-12-18T19:28:48.636Z" },
594
+ version = "0.14.11"
595
+ source = { registry = "https://pypi.org/simple/" }
596
+ sdist = { url = "https://files.pythonhosted.org/packages/d4/77/9a7fe084d268f8855d493e5031ea03fa0af8cc05887f638bf1c4e3363eb8/ruff-0.14.11.tar.gz", hash = "sha256:f6dc463bfa5c07a59b1ff2c3b9767373e541346ea105503b4c0369c520a66958", size = 5993417, upload-time = "2026-01-08T19:11:58.322Z" }
597
+ wheels = [
598
+ { url = "https://files.pythonhosted.org/packages/f0/a6/a4c40a5aaa7e331f245d2dc1ac8ece306681f52b636b40ef87c88b9f7afd/ruff-0.14.11-py3-none-linux_armv6l.whl", hash = "sha256:f6ff2d95cbd335841a7217bdfd9c1d2e44eac2c584197ab1385579d55ff8830e", size = 12951208, upload-time = "2026-01-08T19:12:09.218Z" },
599
+ { url = "https://files.pythonhosted.org/packages/5c/5c/360a35cb7204b328b685d3129c08aca24765ff92b5a7efedbdd6c150d555/ruff-0.14.11-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6f6eb5c1c8033680f4172ea9c8d3706c156223010b8b97b05e82c59bdc774ee6", size = 13330075, upload-time = "2026-01-08T19:12:02.549Z" },
600
+ { url = "https://files.pythonhosted.org/packages/1b/9e/0cc2f1be7a7d33cae541824cf3f95b4ff40d03557b575912b5b70273c9ec/ruff-0.14.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f2fc34cc896f90080fca01259f96c566f74069a04b25b6205d55379d12a6855e", size = 12257809, upload-time = "2026-01-08T19:12:00.366Z" },
601
+ { url = "https://files.pythonhosted.org/packages/a7/e5/5faab97c15bb75228d9f74637e775d26ac703cc2b4898564c01ab3637c02/ruff-0.14.11-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53386375001773ae812b43205d6064dae49ff0968774e6befe16a994fc233caa", size = 12678447, upload-time = "2026-01-08T19:12:13.899Z" },
602
+ { url = "https://files.pythonhosted.org/packages/1b/33/e9767f60a2bef779fb5855cab0af76c488e0ce90f7bb7b8a45c8a2ba4178/ruff-0.14.11-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a697737dce1ca97a0a55b5ff0434ee7205943d4874d638fe3ae66166ff46edbe", size = 12758560, upload-time = "2026-01-08T19:11:42.55Z" },
603
+ { url = "https://files.pythonhosted.org/packages/eb/84/4c6cf627a21462bb5102f7be2a320b084228ff26e105510cd2255ea868e5/ruff-0.14.11-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6845ca1da8ab81ab1dce755a32ad13f1db72e7fba27c486d5d90d65e04d17b8f", size = 13599296, upload-time = "2026-01-08T19:11:30.371Z" },
604
+ { url = "https://files.pythonhosted.org/packages/88/e1/92b5ed7ea66d849f6157e695dc23d5d6d982bd6aa8d077895652c38a7cae/ruff-0.14.11-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e36ce2fd31b54065ec6f76cb08d60159e1b32bdf08507862e32f47e6dde8bcbf", size = 15048981, upload-time = "2026-01-08T19:12:04.742Z" },
605
+ { url = "https://files.pythonhosted.org/packages/61/df/c1bd30992615ac17c2fb64b8a7376ca22c04a70555b5d05b8f717163cf9f/ruff-0.14.11-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590bcc0e2097ecf74e62a5c10a6b71f008ad82eb97b0a0079e85defe19fe74d9", size = 14633183, upload-time = "2026-01-08T19:11:40.069Z" },
606
+ { url = "https://files.pythonhosted.org/packages/04/e9/fe552902f25013dd28a5428a42347d9ad20c4b534834a325a28305747d64/ruff-0.14.11-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53fe71125fc158210d57fe4da26e622c9c294022988d08d9347ec1cf782adafe", size = 14050453, upload-time = "2026-01-08T19:11:37.555Z" },
607
+ { url = "https://files.pythonhosted.org/packages/ae/93/f36d89fa021543187f98991609ce6e47e24f35f008dfe1af01379d248a41/ruff-0.14.11-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a35c9da08562f1598ded8470fcfef2afb5cf881996e6c0a502ceb61f4bc9c8a3", size = 13757889, upload-time = "2026-01-08T19:12:07.094Z" },
608
+ { url = "https://files.pythonhosted.org/packages/b7/9f/c7fb6ecf554f28709a6a1f2a7f74750d400979e8cd47ed29feeaa1bd4db8/ruff-0.14.11-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:0f3727189a52179393ecf92ec7057c2210203e6af2676f08d92140d3e1ee72c1", size = 13955832, upload-time = "2026-01-08T19:11:55.064Z" },
609
+ { url = "https://files.pythonhosted.org/packages/db/a0/153315310f250f76900a98278cf878c64dfb6d044e184491dd3289796734/ruff-0.14.11-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:eb09f849bd37147a789b85995ff734a6c4a095bed5fd1608c4f56afc3634cde2", size = 12586522, upload-time = "2026-01-08T19:11:35.356Z" },
610
+ { url = "https://files.pythonhosted.org/packages/2f/2b/a73a2b6e6d2df1d74bf2b78098be1572191e54bec0e59e29382d13c3adc5/ruff-0.14.11-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:c61782543c1231bf71041461c1f28c64b961d457d0f238ac388e2ab173d7ecb7", size = 12724637, upload-time = "2026-01-08T19:11:47.796Z" },
611
+ { url = "https://files.pythonhosted.org/packages/f0/41/09100590320394401cd3c48fc718a8ba71c7ddb1ffd07e0ad6576b3a3df2/ruff-0.14.11-py3-none-musllinux_1_2_i686.whl", hash = "sha256:82ff352ea68fb6766140381748e1f67f83c39860b6446966cff48a315c3e2491", size = 13145837, upload-time = "2026-01-08T19:11:32.87Z" },
612
+ { url = "https://files.pythonhosted.org/packages/3b/d8/e035db859d1d3edf909381eb8ff3e89a672d6572e9454093538fe6f164b0/ruff-0.14.11-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:728e56879df4ca5b62a9dde2dd0eb0edda2a55160c0ea28c4025f18c03f86984", size = 13850469, upload-time = "2026-01-08T19:12:11.694Z" },
613
+ { url = "https://files.pythonhosted.org/packages/4e/02/bb3ff8b6e6d02ce9e3740f4c17dfbbfb55f34c789c139e9cd91985f356c7/ruff-0.14.11-py3-none-win32.whl", hash = "sha256:337c5dd11f16ee52ae217757d9b82a26400be7efac883e9e852646f1557ed841", size = 12851094, upload-time = "2026-01-08T19:11:45.163Z" },
614
+ { url = "https://files.pythonhosted.org/packages/58/f1/90ddc533918d3a2ad628bc3044cdfc094949e6d4b929220c3f0eb8a1c998/ruff-0.14.11-py3-none-win_amd64.whl", hash = "sha256:f981cea63d08456b2c070e64b79cb62f951aa1305282974d4d5216e6e0178ae6", size = 14001379, upload-time = "2026-01-08T19:11:52.591Z" },
615
+ { url = "https://files.pythonhosted.org/packages/c4/1c/1dbe51782c0e1e9cfce1d1004752672d2d4629ea46945d19d731ad772b3b/ruff-0.14.11-py3-none-win_arm64.whl", hash = "sha256:649fb6c9edd7f751db276ef42df1f3df41c38d67d199570ae2a7bd6cbc3590f0", size = 12938644, upload-time = "2026-01-08T19:11:50.027Z" },
616
616
  ]
617
617
 
618
618
  [[package]]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes