amati 0.3.29__tar.gz → 0.3.30__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.29 → amati-0.3.30}/.github/workflows/checks.yaml +2 -2
  2. {amati-0.3.29 → amati-0.3.30}/.github/workflows/codeql.yml +2 -2
  3. {amati-0.3.29 → amati-0.3.30}/.github/workflows/data-refresh.yaml +1 -1
  4. {amati-0.3.29 → amati-0.3.30}/.github/workflows/publish.yaml +2 -2
  5. {amati-0.3.29 → amati-0.3.30}/.github/workflows/scorecards.yml +1 -1
  6. {amati-0.3.29 → amati-0.3.30}/.github/workflows/tag-and-create-release.yaml +1 -1
  7. {amati-0.3.29 → amati-0.3.30}/.pre-commit-config.yaml +1 -1
  8. {amati-0.3.29 → amati-0.3.30}/PKG-INFO +1 -1
  9. {amati-0.3.29 → amati-0.3.30}/amati/fields/uri.py +2 -2
  10. {amati-0.3.29 → amati-0.3.30}/pyproject.toml +2 -2
  11. {amati-0.3.29 → amati-0.3.30}/uv.lock +26 -27
  12. {amati-0.3.29 → amati-0.3.30}/.dockerignore +0 -0
  13. {amati-0.3.29 → amati-0.3.30}/.github/actions/setup/action.yaml +0 -0
  14. {amati-0.3.29 → amati-0.3.30}/.github/dependabot.yml +0 -0
  15. {amati-0.3.29 → amati-0.3.30}/.github/workflows/coverage.yaml +0 -0
  16. {amati-0.3.29 → amati-0.3.30}/.github/workflows/dependency-review.yml +0 -0
  17. {amati-0.3.29 → amati-0.3.30}/.gitignore +0 -0
  18. {amati-0.3.29 → amati-0.3.30}/.python-version +0 -0
  19. {amati-0.3.29 → amati-0.3.30}/Dockerfile +0 -0
  20. {amati-0.3.29 → amati-0.3.30}/LICENSE +0 -0
  21. {amati-0.3.29 → amati-0.3.30}/README.md +0 -0
  22. {amati-0.3.29 → amati-0.3.30}/SECURITY.md +0 -0
  23. {amati-0.3.29 → amati-0.3.30}/TEMPLATE.html +0 -0
  24. {amati-0.3.29 → amati-0.3.30}/amati/__init__.py +0 -0
  25. {amati-0.3.29 → amati-0.3.30}/amati/_data/files/http-status-codes.json +0 -0
  26. {amati-0.3.29 → amati-0.3.30}/amati/_data/files/iso9110.json +0 -0
  27. {amati-0.3.29 → amati-0.3.30}/amati/_data/files/media-types.json +0 -0
  28. {amati-0.3.29 → amati-0.3.30}/amati/_data/files/schemes.json +0 -0
  29. {amati-0.3.29 → amati-0.3.30}/amati/_data/files/spdx-licences.json +0 -0
  30. {amati-0.3.29 → amati-0.3.30}/amati/_data/files/tlds.json +0 -0
  31. {amati-0.3.29 → amati-0.3.30}/amati/_data/http_status_code.py +0 -0
  32. {amati-0.3.29 → amati-0.3.30}/amati/_data/iso9110.py +0 -0
  33. {amati-0.3.29 → amati-0.3.30}/amati/_data/media_types.py +0 -0
  34. {amati-0.3.29 → amati-0.3.30}/amati/_data/refresh.py +0 -0
  35. {amati-0.3.29 → amati-0.3.30}/amati/_data/schemes.py +0 -0
  36. {amati-0.3.29 → amati-0.3.30}/amati/_data/spdx_licences.py +0 -0
  37. {amati-0.3.29 → amati-0.3.30}/amati/_data/tlds.py +0 -0
  38. {amati-0.3.29 → amati-0.3.30}/amati/_error_handler.py +0 -0
  39. {amati-0.3.29 → amati-0.3.30}/amati/_logging.py +0 -0
  40. {amati-0.3.29 → amati-0.3.30}/amati/_references.py +0 -0
  41. {amati-0.3.29 → amati-0.3.30}/amati/_resolve_forward_references.py +0 -0
  42. {amati-0.3.29 → amati-0.3.30}/amati/amati.py +0 -0
  43. {amati-0.3.29 → amati-0.3.30}/amati/exceptions.py +0 -0
  44. {amati-0.3.29 → amati-0.3.30}/amati/fields/__init__.py +0 -0
  45. {amati-0.3.29 → amati-0.3.30}/amati/fields/_custom_types.py +0 -0
  46. {amati-0.3.29 → amati-0.3.30}/amati/fields/commonmark.py +0 -0
  47. {amati-0.3.29 → amati-0.3.30}/amati/fields/email.py +0 -0
  48. {amati-0.3.29 → amati-0.3.30}/amati/fields/http_status_codes.py +0 -0
  49. {amati-0.3.29 → amati-0.3.30}/amati/fields/iso9110.py +0 -0
  50. {amati-0.3.29 → amati-0.3.30}/amati/fields/json.py +0 -0
  51. {amati-0.3.29 → amati-0.3.30}/amati/fields/media.py +0 -0
  52. {amati-0.3.29 → amati-0.3.30}/amati/fields/oas.py +0 -0
  53. {amati-0.3.29 → amati-0.3.30}/amati/fields/spdx_licences.py +0 -0
  54. {amati-0.3.29 → amati-0.3.30}/amati/file_handler.py +0 -0
  55. {amati-0.3.29 → amati-0.3.30}/amati/grammars/oas.py +0 -0
  56. {amati-0.3.29 → amati-0.3.30}/amati/grammars/rfc6901.py +0 -0
  57. {amati-0.3.29 → amati-0.3.30}/amati/grammars/rfc7159.py +0 -0
  58. {amati-0.3.29 → amati-0.3.30}/amati/model_validators.py +0 -0
  59. {amati-0.3.29 → amati-0.3.30}/amati/py.typed +0 -0
  60. {amati-0.3.29 → amati-0.3.30}/amati/validators/__init__.py +0 -0
  61. {amati-0.3.29 → amati-0.3.30}/amati/validators/_discriminators.py +0 -0
  62. {amati-0.3.29 → amati-0.3.30}/amati/validators/generic.py +0 -0
  63. {amati-0.3.29 → amati-0.3.30}/amati/validators/oas304.py +0 -0
  64. {amati-0.3.29 → amati-0.3.30}/amati/validators/oas311.py +0 -0
  65. {amati-0.3.29 → amati-0.3.30}/bin/checks.sh +0 -0
  66. {amati-0.3.29 → amati-0.3.30}/bin/startup.sh +0 -0
  67. {amati-0.3.29 → amati-0.3.30}/bin/upgrade-python.sh +0 -0
  68. {amati-0.3.29 → amati-0.3.30}/bin/uv-upgrade-from-main.sh +0 -0
  69. {amati-0.3.29 → amati-0.3.30}/scripts/setup_test_specs.py +0 -0
  70. {amati-0.3.29 → amati-0.3.30}/tests/__init__.py +0 -0
  71. {amati-0.3.29 → amati-0.3.30}/tests/data/.amati.tests.yaml +0 -0
  72. {amati-0.3.29 → amati-0.3.30}/tests/data/DigitalOcean-public.v2.errors.json +0 -0
  73. {amati-0.3.29 → amati-0.3.30}/tests/data/api.github.com.json.errors.json +0 -0
  74. {amati-0.3.29 → amati-0.3.30}/tests/data/api.github.com.yaml.errors.json +0 -0
  75. {amati-0.3.29 → amati-0.3.30}/tests/data/discourse.yml.errors.json +0 -0
  76. {amati-0.3.29 → amati-0.3.30}/tests/data/invalid-openapi.yaml +0 -0
  77. {amati-0.3.29 → amati-0.3.30}/tests/data/next-api.github.com.json.errors.json +0 -0
  78. {amati-0.3.29 → amati-0.3.30}/tests/data/openapi.yaml +0 -0
  79. {amati-0.3.29 → amati-0.3.30}/tests/data/openapi.yaml.gz +0 -0
  80. {amati-0.3.29 → amati-0.3.30}/tests/fields/__init__.py +0 -0
  81. {amati-0.3.29 → amati-0.3.30}/tests/fields/test_email.py +0 -0
  82. {amati-0.3.29 → amati-0.3.30}/tests/fields/test_http_status_codes.py +0 -0
  83. {amati-0.3.29 → amati-0.3.30}/tests/fields/test_iso9110.py +0 -0
  84. {amati-0.3.29 → amati-0.3.30}/tests/fields/test_media.py +0 -0
  85. {amati-0.3.29 → amati-0.3.30}/tests/fields/test_oas.py +0 -0
  86. {amati-0.3.29 → amati-0.3.30}/tests/fields/test_spdx_licences.py +0 -0
  87. {amati-0.3.29 → amati-0.3.30}/tests/fields/test_uri.py +0 -0
  88. {amati-0.3.29 → amati-0.3.30}/tests/model_validators/test_all_of.py +0 -0
  89. {amati-0.3.29 → amati-0.3.30}/tests/model_validators/test_at_least_one.py +0 -0
  90. {amati-0.3.29 → amati-0.3.30}/tests/model_validators/test_if_then.py +0 -0
  91. {amati-0.3.29 → amati-0.3.30}/tests/model_validators/test_only_one.py +0 -0
  92. {amati-0.3.29 → amati-0.3.30}/tests/references/test_uri_collector_mixin.py +0 -0
  93. {amati-0.3.29 → amati-0.3.30}/tests/references/test_uri_reference.py +0 -0
  94. {amati-0.3.29 → amati-0.3.30}/tests/references/test_uri_registry.py +0 -0
  95. {amati-0.3.29 → amati-0.3.30}/tests/strategies.py +0 -0
  96. {amati-0.3.29 → amati-0.3.30}/tests/test_amati.py +0 -0
  97. {amati-0.3.29 → amati-0.3.30}/tests/test_external_specs.py +0 -0
  98. {amati-0.3.29 → amati-0.3.30}/tests/test_logging.py +0 -0
  99. {amati-0.3.29 → amati-0.3.30}/tests/validators/__init__.py +0 -0
  100. {amati-0.3.29 → amati-0.3.30}/tests/validators/test_generic.py +0 -0
  101. {amati-0.3.29 → amati-0.3.30}/tests/validators/test_licence_object.py +0 -0
  102. {amati-0.3.29 → amati-0.3.30}/tests/validators/test_security_scheme_object.py +0 -0
  103. {amati-0.3.29 → amati-0.3.30}/tests/validators/test_server_variable_object.py +0 -0
@@ -48,13 +48,13 @@ jobs:
48
48
 
49
49
  - name: Run linting
50
50
  if: steps.check_changes.outputs.relevant == 'true'
51
- uses: astral-sh/ruff-action@57714a7c8a2e59f32539362ba31877a1957dded1 # v3.5.1
51
+ uses: astral-sh/ruff-action@4919ec5cf1f49eff0871dbcea0da843445b837e6 # v3.6.1
52
52
  with:
53
53
  args: check --fix
54
54
 
55
55
  - name: Run formatting
56
56
  if: steps.check_changes.outputs.relevant == 'true'
57
- uses: astral-sh/ruff-action@57714a7c8a2e59f32539362ba31877a1957dded1 # v3.5.1
57
+ uses: astral-sh/ruff-action@4919ec5cf1f49eff0871dbcea0da843445b837e6 # v3.6.1
58
58
  with:
59
59
  args: format
60
60
 
@@ -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@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0
76
+ uses: github/codeql-action/init@6bc82e05fd0ea64601dd4b465378bbcf57de0314 # v4.32.1
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@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0
104
+ uses: github/codeql-action/analyze@6bc82e05fd0ea64601dd4b465378bbcf57de0314 # v4.32.1
105
105
  with:
106
106
  category: "/language:${{matrix.language}}"
@@ -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@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
28
+ uses: astral-sh/setup-uv@803947b9bd8e9f986429fa0c5a41c367cd732b41 # v7.2.1
29
29
  with:
30
30
  version: "latest"
31
31
 
@@ -24,7 +24,7 @@ jobs:
24
24
 
25
25
  - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
26
26
  - name: Install uv
27
- uses: astral-sh/setup-uv@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
27
+ uses: astral-sh/setup-uv@803947b9bd8e9f986429fa0c5a41c367cd732b41 # v7.2.1
28
28
  - name: Set up Python
29
29
  uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
30
30
  with:
@@ -37,7 +37,7 @@ jobs:
37
37
  run: uv publish
38
38
 
39
39
  - name: Log in to Docker Hub
40
- uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
40
+ uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
41
41
  with:
42
42
  username: ${{ secrets.DOCKERHUB_USER }}
43
43
  password: ${{ secrets.DOCKERHUB_TOKEN }}
@@ -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@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0
83
+ uses: github/codeql-action/upload-sarif@6bc82e05fd0ea64601dd4b465378bbcf57de0314 # v4.32.1
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@61cb8a9741eeb8a550a1b8544337180c0fc8476b # v7.2.0
37
+ uses: astral-sh/setup-uv@803947b9bd8e9f986429fa0c5a41c367cd732b41 # v7.2.1
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.14
4
+ rev: v0.15.0
5
5
  hooks:
6
6
  # Run the linter.
7
7
  - id: ruff-check
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: amati
3
- Version: 0.3.29
3
+ Version: 0.3.30
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
@@ -2,7 +2,7 @@
2
2
  Validates a URI according to the RFC3986 ABNF grammar
3
3
  """
4
4
 
5
- from enum import Enum
5
+ from enum import StrEnum
6
6
  from typing import ClassVar, Self, cast
7
7
 
8
8
  import idna
@@ -65,7 +65,7 @@ class Scheme(_Str):
65
65
  self.status = SCHEMES.get(value)
66
66
 
67
67
 
68
- class URIType(str, Enum):
68
+ class URIType(StrEnum):
69
69
  """Enumeration of URI reference types.
70
70
 
71
71
  Categorizes different types of URI references as defined in RFC 3986,
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "amati"
3
- version = "0.3.29"
3
+ version = "0.3.30"
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 = [
@@ -56,7 +56,7 @@ dev = [
56
56
  "pyright>=1.1.406",
57
57
  "pytest>=8.3.5",
58
58
  "pytest-cov>=6.1.1",
59
- "ruff>=0.12.1",
59
+ "ruff>=0.15.0",
60
60
  ]
61
61
 
62
62
  [tool.coverage.run]
@@ -13,7 +13,7 @@ wheels = [
13
13
 
14
14
  [[package]]
15
15
  name = "amati"
16
- version = "0.3.29"
16
+ version = "0.3.30"
17
17
  source = { editable = "." }
18
18
  dependencies = [
19
19
  { name = "abnf" },
@@ -61,7 +61,7 @@ dev = [
61
61
  { name = "pyright", specifier = ">=1.1.406" },
62
62
  { name = "pytest", specifier = ">=8.3.5" },
63
63
  { name = "pytest-cov", specifier = ">=6.1.1" },
64
- { name = "ruff", specifier = ">=0.12.1" },
64
+ { name = "ruff", specifier = ">=0.15.0" },
65
65
  ]
66
66
 
67
67
  [[package]]
@@ -248,14 +248,14 @@ wheels = [
248
248
 
249
249
  [[package]]
250
250
  name = "hypothesis"
251
- version = "6.151.4"
251
+ version = "6.151.5"
252
252
  source = { registry = "https://pypi.org/simple/" }
253
253
  dependencies = [
254
254
  { name = "sortedcontainers" },
255
255
  ]
256
- sdist = { url = "https://files.pythonhosted.org/packages/47/03/9fd03d5db09029250e69745c1600edab16fe90947636f77a12ba92d79939/hypothesis-6.151.4.tar.gz", hash = "sha256:658a62da1c3ccb36746ac2f7dc4bb1a6e76bd314e0dc54c4e1aaba2503d5545c", size = 475706, upload-time = "2026-01-29T01:30:14.985Z" }
256
+ sdist = { url = "https://files.pythonhosted.org/packages/4e/d7/c40dcd401cc360d8d084e584ffb7ab17255fde22e2b9cf2b53bf25aed629/hypothesis-6.151.5.tar.gz", hash = "sha256:ae3a0622f9693e6b19c697777c2c266c02801f9769ab7c2c37b7ec83d4743783", size = 475923, upload-time = "2026-02-03T19:33:55.845Z" }
257
257
  wheels = [
258
- { url = "https://files.pythonhosted.org/packages/9b/6d/01ad1b6c3b8cb2bb47eeaa9765dabc27cbe68e3b59f6cff83d5668f57780/hypothesis-6.151.4-py3-none-any.whl", hash = "sha256:a1cf7e0fdaa296d697a68ff3c0b3912c0050f07aa37e7d2ff33a966749d1d9b4", size = 543146, upload-time = "2026-01-29T01:30:12.805Z" },
258
+ { url = "https://files.pythonhosted.org/packages/c0/d9/53a8b53e75279a953fae608bd01025d9afcf393406c0da1dda1b7f5693c5/hypothesis-6.151.5-py3-none-any.whl", hash = "sha256:c0e15c91fa0e67bc0295551ef5041bebad42753b7977a610cd7a6ec1ad04ef13", size = 543338, upload-time = "2026-02-03T19:33:54.583Z" },
259
259
  ]
260
260
 
261
261
  [[package]]
@@ -630,28 +630,27 @@ wheels = [
630
630
 
631
631
  [[package]]
632
632
  name = "ruff"
633
- version = "0.14.14"
634
- source = { registry = "https://pypi.org/simple/" }
635
- sdist = { url = "https://files.pythonhosted.org/packages/2e/06/f71e3a86b2df0dfa2d2f72195941cd09b44f87711cb7fa5193732cb9a5fc/ruff-0.14.14.tar.gz", hash = "sha256:2d0f819c9a90205f3a867dbbd0be083bee9912e170fd7d9704cc8ae45824896b", size = 4515732, upload-time = "2026-01-22T22:30:17.527Z" }
636
- wheels = [
637
- { url = "https://files.pythonhosted.org/packages/d2/89/20a12e97bc6b9f9f68343952da08a8099c57237aef953a56b82711d55edd/ruff-0.14.14-py3-none-linux_armv6l.whl", hash = "sha256:7cfe36b56e8489dee8fbc777c61959f60ec0f1f11817e8f2415f429552846aed", size = 10467650, upload-time = "2026-01-22T22:30:08.578Z" },
638
- { url = "https://files.pythonhosted.org/packages/a3/b1/c5de3fd2d5a831fcae21beda5e3589c0ba67eec8202e992388e4b17a6040/ruff-0.14.14-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6006a0082336e7920b9573ef8a7f52eec837add1265cc74e04ea8a4368cd704c", size = 10883245, upload-time = "2026-01-22T22:30:04.155Z" },
639
- { url = "https://files.pythonhosted.org/packages/b8/7c/3c1db59a10e7490f8f6f8559d1db8636cbb13dccebf18686f4e3c9d7c772/ruff-0.14.14-py3-none-macosx_11_0_arm64.whl", hash = "sha256:026c1d25996818f0bf498636686199d9bd0d9d6341c9c2c3b62e2a0198b758de", size = 10231273, upload-time = "2026-01-22T22:30:34.642Z" },
640
- { url = "https://files.pythonhosted.org/packages/a1/6e/5e0e0d9674be0f8581d1f5e0f0a04761203affce3232c1a1189d0e3b4dad/ruff-0.14.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f666445819d31210b71e0a6d1c01e24447a20b85458eea25a25fe8142210ae0e", size = 10585753, upload-time = "2026-01-22T22:30:31.781Z" },
641
- { url = "https://files.pythonhosted.org/packages/23/09/754ab09f46ff1884d422dc26d59ba18b4e5d355be147721bb2518aa2a014/ruff-0.14.14-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c0f18b922c6d2ff9a5e6c3ee16259adc513ca775bcf82c67ebab7cbd9da5bc8", size = 10286052, upload-time = "2026-01-22T22:30:24.827Z" },
642
- { url = "https://files.pythonhosted.org/packages/c8/cc/e71f88dd2a12afb5f50733851729d6b571a7c3a35bfdb16c3035132675a0/ruff-0.14.14-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1629e67489c2dea43e8658c3dba659edbfd87361624b4040d1df04c9740ae906", size = 11043637, upload-time = "2026-01-22T22:30:13.239Z" },
643
- { url = "https://files.pythonhosted.org/packages/67/b2/397245026352494497dac935d7f00f1468c03a23a0c5db6ad8fc49ca3fb2/ruff-0.14.14-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:27493a2131ea0f899057d49d303e4292b2cae2bb57253c1ed1f256fbcd1da480", size = 12194761, upload-time = "2026-01-22T22:30:22.542Z" },
644
- { url = "https://files.pythonhosted.org/packages/5b/06/06ef271459f778323112c51b7587ce85230785cd64e91772034ddb88f200/ruff-0.14.14-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01ff589aab3f5b539e35db38425da31a57521efd1e4ad1ae08fc34dbe30bd7df", size = 12005701, upload-time = "2026-01-22T22:30:20.499Z" },
645
- { url = "https://files.pythonhosted.org/packages/41/d6/99364514541cf811ccc5ac44362f88df66373e9fec1b9d1c4cc830593fe7/ruff-0.14.14-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cc12d74eef0f29f51775f5b755913eb523546b88e2d733e1d701fe65144e89b", size = 11282455, upload-time = "2026-01-22T22:29:59.679Z" },
646
- { url = "https://files.pythonhosted.org/packages/ca/71/37daa46f89475f8582b7762ecd2722492df26421714a33e72ccc9a84d7a5/ruff-0.14.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb8481604b7a9e75eff53772496201690ce2687067e038b3cc31aaf16aa0b974", size = 11215882, upload-time = "2026-01-22T22:29:57.032Z" },
647
- { url = "https://files.pythonhosted.org/packages/2c/10/a31f86169ec91c0705e618443ee74ede0bdd94da0a57b28e72db68b2dbac/ruff-0.14.14-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:14649acb1cf7b5d2d283ebd2f58d56b75836ed8c6f329664fa91cdea19e76e66", size = 11180549, upload-time = "2026-01-22T22:30:27.175Z" },
648
- { url = "https://files.pythonhosted.org/packages/fd/1e/c723f20536b5163adf79bdd10c5f093414293cdf567eed9bdb7b83940f3f/ruff-0.14.14-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8058d2145566510790eab4e2fad186002e288dec5e0d343a92fe7b0bc1b3e13", size = 10543416, upload-time = "2026-01-22T22:30:01.964Z" },
649
- { url = "https://files.pythonhosted.org/packages/3e/34/8a84cea7e42c2d94ba5bde1d7a4fae164d6318f13f933d92da6d7c2041ff/ruff-0.14.14-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e651e977a79e4c758eb807f0481d673a67ffe53cfa92209781dfa3a996cf8412", size = 10285491, upload-time = "2026-01-22T22:30:29.51Z" },
650
- { url = "https://files.pythonhosted.org/packages/55/ef/b7c5ea0be82518906c978e365e56a77f8de7678c8bb6651ccfbdc178c29f/ruff-0.14.14-py3-none-musllinux_1_2_i686.whl", hash = "sha256:cc8b22da8d9d6fdd844a68ae937e2a0adf9b16514e9a97cc60355e2d4b219fc3", size = 10733525, upload-time = "2026-01-22T22:30:06.499Z" },
651
- { url = "https://files.pythonhosted.org/packages/6a/5b/aaf1dfbcc53a2811f6cc0a1759de24e4b03e02ba8762daabd9b6bd8c59e3/ruff-0.14.14-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:16bc890fb4cc9781bb05beb5ab4cd51be9e7cb376bf1dd3580512b24eb3fda2b", size = 11315626, upload-time = "2026-01-22T22:30:36.848Z" },
652
- { url = "https://files.pythonhosted.org/packages/2c/aa/9f89c719c467dfaf8ad799b9bae0df494513fb21d31a6059cb5870e57e74/ruff-0.14.14-py3-none-win32.whl", hash = "sha256:b530c191970b143375b6a68e6f743800b2b786bbcf03a7965b06c4bf04568167", size = 10502442, upload-time = "2026-01-22T22:30:38.93Z" },
653
- { url = "https://files.pythonhosted.org/packages/87/44/90fa543014c45560cae1fffc63ea059fb3575ee6e1cb654562197e5d16fb/ruff-0.14.14-py3-none-win_amd64.whl", hash = "sha256:3dde1435e6b6fe5b66506c1dff67a421d0b7f6488d466f651c07f4cab3bf20fd", size = 11630486, upload-time = "2026-01-22T22:30:10.852Z" },
654
- { url = "https://files.pythonhosted.org/packages/9e/6a/40fee331a52339926a92e17ae748827270b288a35ef4a15c9c8f2ec54715/ruff-0.14.14-py3-none-win_arm64.whl", hash = "sha256:56e6981a98b13a32236a72a8da421d7839221fa308b223b9283312312e5ac76c", size = 10920448, upload-time = "2026-01-22T22:30:15.417Z" },
633
+ version = "0.15.0"
634
+ source = { registry = "https://pypi.org/simple/" }
635
+ sdist = { url = "https://files.pythonhosted.org/packages/c8/39/5cee96809fbca590abea6b46c6d1c586b49663d1d2830a751cc8fc42c666/ruff-0.15.0.tar.gz", hash = "sha256:6bdea47cdbea30d40f8f8d7d69c0854ba7c15420ec75a26f463290949d7f7e9a", size = 4524893, upload-time = "2026-02-03T17:53:35.357Z" }
636
+ wheels = [
637
+ { url = "https://files.pythonhosted.org/packages/bc/88/3fd1b0aa4b6330d6aaa63a285bc96c9f71970351579152d231ed90914586/ruff-0.15.0-py3-none-linux_armv6l.whl", hash = "sha256:aac4ebaa612a82b23d45964586f24ae9bc23ca101919f5590bdb368d74ad5455", size = 10354332, upload-time = "2026-02-03T17:52:54.892Z" },
638
+ { url = "https://files.pythonhosted.org/packages/72/f6/62e173fbb7eb75cc29fe2576a1e20f0a46f671a2587b5f604bfb0eaf5f6f/ruff-0.15.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:dcd4be7cc75cfbbca24a98d04d0b9b36a270d0833241f776b788d59f4142b14d", size = 10767189, upload-time = "2026-02-03T17:53:19.778Z" },
639
+ { url = "https://files.pythonhosted.org/packages/99/e4/968ae17b676d1d2ff101d56dc69cf333e3a4c985e1ec23803df84fc7bf9e/ruff-0.15.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d747e3319b2bce179c7c1eaad3d884dc0a199b5f4d5187620530adf9105268ce", size = 10075384, upload-time = "2026-02-03T17:53:29.241Z" },
640
+ { url = "https://files.pythonhosted.org/packages/a2/bf/9843c6044ab9e20af879c751487e61333ca79a2c8c3058b15722386b8cae/ruff-0.15.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:650bd9c56ae03102c51a5e4b554d74d825ff3abe4db22b90fd32d816c2e90621", size = 10481363, upload-time = "2026-02-03T17:52:43.332Z" },
641
+ { url = "https://files.pythonhosted.org/packages/55/d9/4ada5ccf4cd1f532db1c8d44b6f664f2208d3d93acbeec18f82315e15193/ruff-0.15.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a6664b7eac559e3048223a2da77769c2f92b43a6dfd4720cef42654299a599c9", size = 10187736, upload-time = "2026-02-03T17:53:00.522Z" },
642
+ { url = "https://files.pythonhosted.org/packages/86/e2/f25eaecd446af7bb132af0a1d5b135a62971a41f5366ff41d06d25e77a91/ruff-0.15.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f811f97b0f092b35320d1556f3353bf238763420ade5d9e62ebd2b73f2ff179", size = 10968415, upload-time = "2026-02-03T17:53:15.705Z" },
643
+ { url = "https://files.pythonhosted.org/packages/e7/dc/f06a8558d06333bf79b497d29a50c3a673d9251214e0d7ec78f90b30aa79/ruff-0.15.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:761ec0a66680fab6454236635a39abaf14198818c8cdf691e036f4bc0f406b2d", size = 11809643, upload-time = "2026-02-03T17:53:23.031Z" },
644
+ { url = "https://files.pythonhosted.org/packages/dd/45/0ece8db2c474ad7df13af3a6d50f76e22a09d078af63078f005057ca59eb/ruff-0.15.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:940f11c2604d317e797b289f4f9f3fa5555ffe4fb574b55ed006c3d9b6f0eb78", size = 11234787, upload-time = "2026-02-03T17:52:46.432Z" },
645
+ { url = "https://files.pythonhosted.org/packages/8a/d9/0e3a81467a120fd265658d127db648e4d3acfe3e4f6f5d4ea79fac47e587/ruff-0.15.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcbca3d40558789126da91d7ef9a7c87772ee107033db7191edefa34e2c7f1b4", size = 11112797, upload-time = "2026-02-03T17:52:49.274Z" },
646
+ { url = "https://files.pythonhosted.org/packages/b2/cb/8c0b3b0c692683f8ff31351dfb6241047fa873a4481a76df4335a8bff716/ruff-0.15.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9a121a96db1d75fa3eb39c4539e607f628920dd72ff1f7c5ee4f1b768ac62d6e", size = 11033133, upload-time = "2026-02-03T17:53:33.105Z" },
647
+ { url = "https://files.pythonhosted.org/packages/f8/5e/23b87370cf0f9081a8c89a753e69a4e8778805b8802ccfe175cc410e50b9/ruff-0.15.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5298d518e493061f2eabd4abd067c7e4fb89e2f63291c94332e35631c07c3662", size = 10442646, upload-time = "2026-02-03T17:53:06.278Z" },
648
+ { url = "https://files.pythonhosted.org/packages/e1/9a/3c94de5ce642830167e6d00b5c75aacd73e6347b4c7fc6828699b150a5ee/ruff-0.15.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:afb6e603d6375ff0d6b0cee563fa21ab570fd15e65c852cb24922cef25050cf1", size = 10195750, upload-time = "2026-02-03T17:53:26.084Z" },
649
+ { url = "https://files.pythonhosted.org/packages/30/15/e396325080d600b436acc970848d69df9c13977942fb62bb8722d729bee8/ruff-0.15.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:77e515f6b15f828b94dc17d2b4ace334c9ddb7d9468c54b2f9ed2b9c1593ef16", size = 10676120, upload-time = "2026-02-03T17:53:09.363Z" },
650
+ { url = "https://files.pythonhosted.org/packages/8d/c9/229a23d52a2983de1ad0fb0ee37d36e0257e6f28bfd6b498ee2c76361874/ruff-0.15.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6f6e80850a01eb13b3e42ee0ebdf6e4497151b48c35051aab51c101266d187a3", size = 11201636, upload-time = "2026-02-03T17:52:57.281Z" },
651
+ { url = "https://files.pythonhosted.org/packages/6f/b0/69adf22f4e24f3677208adb715c578266842e6e6a3cc77483f48dd999ede/ruff-0.15.0-py3-none-win32.whl", hash = "sha256:238a717ef803e501b6d51e0bdd0d2c6e8513fe9eec14002445134d3907cd46c3", size = 10465945, upload-time = "2026-02-03T17:53:12.591Z" },
652
+ { url = "https://files.pythonhosted.org/packages/51/ad/f813b6e2c97e9b4598be25e94a9147b9af7e60523b0cb5d94d307c15229d/ruff-0.15.0-py3-none-win_amd64.whl", hash = "sha256:dd5e4d3301dc01de614da3cdffc33d4b1b96fb89e45721f1598e5532ccf78b18", size = 11564657, upload-time = "2026-02-03T17:52:51.893Z" },
653
+ { url = "https://files.pythonhosted.org/packages/f6/b0/2d823f6e77ebe560f4e397d078487e8d52c1516b331e3521bc75db4272ca/ruff-0.15.0-py3-none-win_arm64.whl", hash = "sha256:c480d632cc0ca3f0727acac8b7d053542d9e114a462a145d0b00e7cd658c515a", size = 10865753, upload-time = "2026-02-03T17:53:03.014Z" },
655
654
  ]
656
655
 
657
656
  [[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