pychrony 0.2.2__tar.gz → 0.2.4__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 (139) hide show
  1. {pychrony-0.2.2 → pychrony-0.2.4}/.github/workflows/publish.yml +2 -2
  2. {pychrony-0.2.2 → pychrony-0.2.4}/.github/workflows/release.yml +4 -4
  3. {pychrony-0.2.2 → pychrony-0.2.4}/.github/workflows/test.yml +2 -2
  4. {pychrony-0.2.2/src/pychrony.egg-info → pychrony-0.2.4}/PKG-INFO +1 -1
  5. {pychrony-0.2.2 → pychrony-0.2.4}/docker/Dockerfile.test +2 -2
  6. {pychrony-0.2.2 → pychrony-0.2.4}/pyproject.toml +3 -0
  7. {pychrony-0.2.2 → pychrony-0.2.4/src/pychrony.egg-info}/PKG-INFO +1 -1
  8. {pychrony-0.2.2 → pychrony-0.2.4}/uv.lock +58 -90
  9. {pychrony-0.2.2 → pychrony-0.2.4}/.claude/commands/speckit.analyze.md +0 -0
  10. {pychrony-0.2.2 → pychrony-0.2.4}/.claude/commands/speckit.checklist.md +0 -0
  11. {pychrony-0.2.2 → pychrony-0.2.4}/.claude/commands/speckit.clarify.md +0 -0
  12. {pychrony-0.2.2 → pychrony-0.2.4}/.claude/commands/speckit.constitution.md +0 -0
  13. {pychrony-0.2.2 → pychrony-0.2.4}/.claude/commands/speckit.implement.md +0 -0
  14. {pychrony-0.2.2 → pychrony-0.2.4}/.claude/commands/speckit.plan.md +0 -0
  15. {pychrony-0.2.2 → pychrony-0.2.4}/.claude/commands/speckit.specify.md +0 -0
  16. {pychrony-0.2.2 → pychrony-0.2.4}/.claude/commands/speckit.tasks.md +0 -0
  17. {pychrony-0.2.2 → pychrony-0.2.4}/.claude/commands/speckit.taskstoissues.md +0 -0
  18. {pychrony-0.2.2 → pychrony-0.2.4}/.dockerignore +0 -0
  19. {pychrony-0.2.2 → pychrony-0.2.4}/.github/dependabot.yml +0 -0
  20. {pychrony-0.2.2 → pychrony-0.2.4}/.github/workflows/ci.yml +0 -0
  21. {pychrony-0.2.2 → pychrony-0.2.4}/.github/workflows/docs.yml +0 -0
  22. {pychrony-0.2.2 → pychrony-0.2.4}/.gitignore +0 -0
  23. {pychrony-0.2.2 → pychrony-0.2.4}/.gitmodules +0 -0
  24. {pychrony-0.2.2 → pychrony-0.2.4}/.python-version +0 -0
  25. {pychrony-0.2.2 → pychrony-0.2.4}/.specify/memory/constitution.md +0 -0
  26. {pychrony-0.2.2 → pychrony-0.2.4}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  27. {pychrony-0.2.2 → pychrony-0.2.4}/.specify/scripts/bash/common.sh +0 -0
  28. {pychrony-0.2.2 → pychrony-0.2.4}/.specify/scripts/bash/create-new-feature.sh +0 -0
  29. {pychrony-0.2.2 → pychrony-0.2.4}/.specify/scripts/bash/execute-task-generation.sh +0 -0
  30. {pychrony-0.2.2 → pychrony-0.2.4}/.specify/scripts/bash/setup-plan.sh +0 -0
  31. {pychrony-0.2.2 → pychrony-0.2.4}/.specify/scripts/bash/update-agent-context.sh +0 -0
  32. {pychrony-0.2.2 → pychrony-0.2.4}/.specify/templates/agent-file-template.md +0 -0
  33. {pychrony-0.2.2 → pychrony-0.2.4}/.specify/templates/checklist-template.md +0 -0
  34. {pychrony-0.2.2 → pychrony-0.2.4}/.specify/templates/plan-template.md +0 -0
  35. {pychrony-0.2.2 → pychrony-0.2.4}/.specify/templates/spec-template.md +0 -0
  36. {pychrony-0.2.2 → pychrony-0.2.4}/.specify/templates/tasks-template.md +0 -0
  37. {pychrony-0.2.2 → pychrony-0.2.4}/CLAUDE.md +0 -0
  38. {pychrony-0.2.2 → pychrony-0.2.4}/LICENSE +0 -0
  39. {pychrony-0.2.2 → pychrony-0.2.4}/LICENSES/LGPL-2.1-or-later.txt +0 -0
  40. {pychrony-0.2.2 → pychrony-0.2.4}/README.md +0 -0
  41. {pychrony-0.2.2 → pychrony-0.2.4}/TESTING.md +0 -0
  42. {pychrony-0.2.2 → pychrony-0.2.4}/docker/docker-compose.test.yml +0 -0
  43. {pychrony-0.2.2 → pychrony-0.2.4}/docs/api/index.md +0 -0
  44. {pychrony-0.2.2 → pychrony-0.2.4}/docs/index.md +0 -0
  45. {pychrony-0.2.2 → pychrony-0.2.4}/mkdocs.yml +0 -0
  46. {pychrony-0.2.2 → pychrony-0.2.4}/setup.cfg +0 -0
  47. {pychrony-0.2.2 → pychrony-0.2.4}/setup.py +0 -0
  48. {pychrony-0.2.2 → pychrony-0.2.4}/specs/001-python-scaffold/checklists/requirements.md +0 -0
  49. {pychrony-0.2.2 → pychrony-0.2.4}/specs/001-python-scaffold/contracts/package.md +0 -0
  50. {pychrony-0.2.2 → pychrony-0.2.4}/specs/001-python-scaffold/data-model.md +0 -0
  51. {pychrony-0.2.2 → pychrony-0.2.4}/specs/001-python-scaffold/plan.md +0 -0
  52. {pychrony-0.2.2 → pychrony-0.2.4}/specs/001-python-scaffold/quickstart.md +0 -0
  53. {pychrony-0.2.2 → pychrony-0.2.4}/specs/001-python-scaffold/research.md +0 -0
  54. {pychrony-0.2.2 → pychrony-0.2.4}/specs/001-python-scaffold/spec.md +0 -0
  55. {pychrony-0.2.2 → pychrony-0.2.4}/specs/001-python-scaffold/tasks.md +0 -0
  56. {pychrony-0.2.2 → pychrony-0.2.4}/specs/002-tracking-binding/checklists/requirements.md +0 -0
  57. {pychrony-0.2.2 → pychrony-0.2.4}/specs/002-tracking-binding/contracts/python-api.md +0 -0
  58. {pychrony-0.2.2 → pychrony-0.2.4}/specs/002-tracking-binding/data-model.md +0 -0
  59. {pychrony-0.2.2 → pychrony-0.2.4}/specs/002-tracking-binding/plan.md +0 -0
  60. {pychrony-0.2.2 → pychrony-0.2.4}/specs/002-tracking-binding/quickstart.md +0 -0
  61. {pychrony-0.2.2 → pychrony-0.2.4}/specs/002-tracking-binding/research.md +0 -0
  62. {pychrony-0.2.2 → pychrony-0.2.4}/specs/002-tracking-binding/spec.md +0 -0
  63. {pychrony-0.2.2 → pychrony-0.2.4}/specs/002-tracking-binding/tasks.md +0 -0
  64. {pychrony-0.2.2 → pychrony-0.2.4}/specs/003-multiple-reports-bindings/checklists/requirements.md +0 -0
  65. {pychrony-0.2.2 → pychrony-0.2.4}/specs/003-multiple-reports-bindings/contracts/api.md +0 -0
  66. {pychrony-0.2.2 → pychrony-0.2.4}/specs/003-multiple-reports-bindings/contracts/python-api.md +0 -0
  67. {pychrony-0.2.2 → pychrony-0.2.4}/specs/003-multiple-reports-bindings/data-model.md +0 -0
  68. {pychrony-0.2.2 → pychrony-0.2.4}/specs/003-multiple-reports-bindings/plan.md +0 -0
  69. {pychrony-0.2.2 → pychrony-0.2.4}/specs/003-multiple-reports-bindings/quickstart.md +0 -0
  70. {pychrony-0.2.2 → pychrony-0.2.4}/specs/003-multiple-reports-bindings/research.md +0 -0
  71. {pychrony-0.2.2 → pychrony-0.2.4}/specs/003-multiple-reports-bindings/spec.md +0 -0
  72. {pychrony-0.2.2 → pychrony-0.2.4}/specs/003-multiple-reports-bindings/tasks.md +0 -0
  73. {pychrony-0.2.2 → pychrony-0.2.4}/specs/004-categorical-enums/checklists/requirements.md +0 -0
  74. {pychrony-0.2.2 → pychrony-0.2.4}/specs/004-categorical-enums/data-model.md +0 -0
  75. {pychrony-0.2.2 → pychrony-0.2.4}/specs/004-categorical-enums/plan.md +0 -0
  76. {pychrony-0.2.2 → pychrony-0.2.4}/specs/004-categorical-enums/quickstart.md +0 -0
  77. {pychrony-0.2.2 → pychrony-0.2.4}/specs/004-categorical-enums/research.md +0 -0
  78. {pychrony-0.2.2 → pychrony-0.2.4}/specs/004-categorical-enums/spec.md +0 -0
  79. {pychrony-0.2.2 → pychrony-0.2.4}/specs/004-categorical-enums/tasks.md +0 -0
  80. {pychrony-0.2.2 → pychrony-0.2.4}/specs/005-pypi-packaging/checklists/requirements.md +0 -0
  81. {pychrony-0.2.2 → pychrony-0.2.4}/specs/005-pypi-packaging/plan.md +0 -0
  82. {pychrony-0.2.2 → pychrony-0.2.4}/specs/005-pypi-packaging/quickstart.md +0 -0
  83. {pychrony-0.2.2 → pychrony-0.2.4}/specs/005-pypi-packaging/research.md +0 -0
  84. {pychrony-0.2.2 → pychrony-0.2.4}/specs/005-pypi-packaging/spec.md +0 -0
  85. {pychrony-0.2.2 → pychrony-0.2.4}/specs/005-pypi-packaging/tasks.md +0 -0
  86. {pychrony-0.2.2 → pychrony-0.2.4}/specs/006-protocol-test-mocks/analysis-report.md +0 -0
  87. {pychrony-0.2.2 → pychrony-0.2.4}/specs/006-protocol-test-mocks/checklists/requirements.md +0 -0
  88. {pychrony-0.2.2 → pychrony-0.2.4}/specs/006-protocol-test-mocks/contracts/mock-api.md +0 -0
  89. {pychrony-0.2.2 → pychrony-0.2.4}/specs/006-protocol-test-mocks/data-model.md +0 -0
  90. {pychrony-0.2.2 → pychrony-0.2.4}/specs/006-protocol-test-mocks/plan.md +0 -0
  91. {pychrony-0.2.2 → pychrony-0.2.4}/specs/006-protocol-test-mocks/quickstart.md +0 -0
  92. {pychrony-0.2.2 → pychrony-0.2.4}/specs/006-protocol-test-mocks/research.md +0 -0
  93. {pychrony-0.2.2 → pychrony-0.2.4}/specs/006-protocol-test-mocks/spec.md +0 -0
  94. {pychrony-0.2.2 → pychrony-0.2.4}/specs/006-protocol-test-mocks/tasks.md +0 -0
  95. {pychrony-0.2.2 → pychrony-0.2.4}/specs/007-api-docs-github-pages/tasks.md +0 -0
  96. {pychrony-0.2.2 → pychrony-0.2.4}/src/pychrony/__init__.py +0 -0
  97. {pychrony-0.2.2 → pychrony-0.2.4}/src/pychrony/_core/__init__.py +0 -0
  98. {pychrony-0.2.2 → pychrony-0.2.4}/src/pychrony/_core/_bindings.py +0 -0
  99. {pychrony-0.2.2 → pychrony-0.2.4}/src/pychrony/_core/_build_bindings.py +0 -0
  100. {pychrony-0.2.2 → pychrony-0.2.4}/src/pychrony/_core/_fields.py +0 -0
  101. {pychrony-0.2.2 → pychrony-0.2.4}/src/pychrony/exceptions.py +0 -0
  102. {pychrony-0.2.2 → pychrony-0.2.4}/src/pychrony/models.py +0 -0
  103. {pychrony-0.2.2 → pychrony-0.2.4}/src/pychrony/py.typed +0 -0
  104. {pychrony-0.2.2 → pychrony-0.2.4}/src/pychrony/testing.py +0 -0
  105. {pychrony-0.2.2 → pychrony-0.2.4}/src/pychrony.egg-info/SOURCES.txt +0 -0
  106. {pychrony-0.2.2 → pychrony-0.2.4}/src/pychrony.egg-info/dependency_links.txt +0 -0
  107. {pychrony-0.2.2 → pychrony-0.2.4}/src/pychrony.egg-info/entry_points.txt +0 -0
  108. {pychrony-0.2.2 → pychrony-0.2.4}/src/pychrony.egg-info/requires.txt +0 -0
  109. {pychrony-0.2.2 → pychrony-0.2.4}/src/pychrony.egg-info/top_level.txt +0 -0
  110. {pychrony-0.2.2 → pychrony-0.2.4}/tests/__init__.py +0 -0
  111. {pychrony-0.2.2 → pychrony-0.2.4}/tests/conftest.py +0 -0
  112. {pychrony-0.2.2 → pychrony-0.2.4}/tests/contract/__init__.py +0 -0
  113. {pychrony-0.2.2 → pychrony-0.2.4}/tests/contract/test_api.py +0 -0
  114. {pychrony-0.2.2 → pychrony-0.2.4}/tests/contract/test_api_stability.py +0 -0
  115. {pychrony-0.2.2 → pychrony-0.2.4}/tests/integration/__init__.py +0 -0
  116. {pychrony-0.2.2 → pychrony-0.2.4}/tests/integration/test_connection.py +0 -0
  117. {pychrony-0.2.2 → pychrony-0.2.4}/tests/integration/test_enums.py +0 -0
  118. {pychrony-0.2.2 → pychrony-0.2.4}/tests/integration/test_rtcdata.py +0 -0
  119. {pychrony-0.2.2 → pychrony-0.2.4}/tests/integration/test_sources.py +0 -0
  120. {pychrony-0.2.2 → pychrony-0.2.4}/tests/integration/test_sourcestats.py +0 -0
  121. {pychrony-0.2.2 → pychrony-0.2.4}/tests/integration/test_tracking.py +0 -0
  122. {pychrony-0.2.2 → pychrony-0.2.4}/tests/mocks/__init__.py +0 -0
  123. {pychrony-0.2.2 → pychrony-0.2.4}/tests/mocks/config.py +0 -0
  124. {pychrony-0.2.2 → pychrony-0.2.4}/tests/mocks/context.py +0 -0
  125. {pychrony-0.2.2 → pychrony-0.2.4}/tests/mocks/scenarios.py +0 -0
  126. {pychrony-0.2.2 → pychrony-0.2.4}/tests/mocks/session.py +0 -0
  127. {pychrony-0.2.2 → pychrony-0.2.4}/tests/test_import.py +0 -0
  128. {pychrony-0.2.2 → pychrony-0.2.4}/tests/unit/__init__.py +0 -0
  129. {pychrony-0.2.2 → pychrony-0.2.4}/tests/unit/test_connection.py +0 -0
  130. {pychrony-0.2.2 → pychrony-0.2.4}/tests/unit/test_enums.py +0 -0
  131. {pychrony-0.2.2 → pychrony-0.2.4}/tests/unit/test_exceptions.py +0 -0
  132. {pychrony-0.2.2 → pychrony-0.2.4}/tests/unit/test_leap_scenarios.py +0 -0
  133. {pychrony-0.2.2 → pychrony-0.2.4}/tests/unit/test_mock_config.py +0 -0
  134. {pychrony-0.2.2 → pychrony-0.2.4}/tests/unit/test_mock_scenarios.py +0 -0
  135. {pychrony-0.2.2 → pychrony-0.2.4}/tests/unit/test_models.py +0 -0
  136. {pychrony-0.2.2 → pychrony-0.2.4}/tests/unit/test_rtc_scenarios.py +0 -0
  137. {pychrony-0.2.2 → pychrony-0.2.4}/tests/unit/test_source_scenarios.py +0 -0
  138. {pychrony-0.2.2 → pychrony-0.2.4}/tests/unit/test_testing.py +0 -0
  139. {pychrony-0.2.2 → pychrony-0.2.4}/tests/unit/test_validation.py +0 -0
@@ -30,7 +30,7 @@ jobs:
30
30
  steps:
31
31
  - name: Download artifacts (from triggering workflow_run)
32
32
  if: github.event_name == 'workflow_run'
33
- uses: dawidd6/action-download-artifact@v14
33
+ uses: dawidd6/action-download-artifact@v21
34
34
  with:
35
35
  workflow: release.yml
36
36
  run_id: ${{ github.event.workflow_run.id }}
@@ -42,7 +42,7 @@ jobs:
42
42
 
43
43
  - name: Download artifacts (from manual dispatch)
44
44
  if: github.event_name == 'workflow_dispatch'
45
- uses: dawidd6/action-download-artifact@v14
45
+ uses: dawidd6/action-download-artifact@v21
46
46
  with:
47
47
  workflow: release.yml
48
48
  name: ^(wheels-.*|sdist)$
@@ -28,14 +28,14 @@ jobs:
28
28
  submodules: recursive # Required for vendor/libchrony
29
29
 
30
30
  - name: Build wheels with cibuildwheel
31
- uses: pypa/cibuildwheel@v3.3
31
+ uses: pypa/cibuildwheel@v3.4
32
32
  with:
33
33
  extras: uv
34
34
  env:
35
35
  CIBW_ARCHS_LINUX: ${{ matrix.arch }}
36
36
 
37
37
  - name: Upload wheel artifacts
38
- uses: actions/upload-artifact@v6
38
+ uses: actions/upload-artifact@v7
39
39
  with:
40
40
  name: wheels-${{ matrix.arch }}
41
41
  path: wheelhouse/*.whl
@@ -58,7 +58,7 @@ jobs:
58
58
  run: uv build --sdist
59
59
 
60
60
  - name: Upload sdist artifact
61
- uses: actions/upload-artifact@v6
61
+ uses: actions/upload-artifact@v7
62
62
  with:
63
63
  name: sdist
64
64
  path: dist/*.tar.gz
@@ -71,7 +71,7 @@ jobs:
71
71
 
72
72
  steps:
73
73
  - name: Download all artifacts
74
- uses: actions/download-artifact@v7
74
+ uses: actions/download-artifact@v8
75
75
  with:
76
76
  path: dist/
77
77
  merge-multiple: true
@@ -67,10 +67,10 @@ jobs:
67
67
  submodules: true
68
68
 
69
69
  - name: Set up Docker Buildx
70
- uses: docker/setup-buildx-action@v3
70
+ uses: docker/setup-buildx-action@v4
71
71
 
72
72
  - name: Build Docker image
73
- uses: docker/build-push-action@v6
73
+ uses: docker/build-push-action@v7
74
74
  with:
75
75
  context: .
76
76
  file: docker/Dockerfile.test
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pychrony
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: Python bindings for chrony NTP client
5
5
  Author-email: arunderwood <arunderwood@users.noreply.github.com>
6
6
  License-Expression: MIT AND LGPL-2.1-or-later
@@ -4,7 +4,7 @@
4
4
  # =============================================================================
5
5
  # Stage 1: Builder - compile libchrony from vendored source
6
6
  # =============================================================================
7
- FROM fedora:43 AS builder
7
+ FROM fedora:44 AS builder
8
8
 
9
9
  # Install build tools only
10
10
  RUN dnf install -y \
@@ -22,7 +22,7 @@ RUN make && \
22
22
  # =============================================================================
23
23
  # Stage 2: Runtime - minimal image with chrony and Python
24
24
  # =============================================================================
25
- FROM fedora:43
25
+ FROM fedora:44
26
26
 
27
27
  # Install runtime dependencies
28
28
  # Note: gcc is needed to compile CFFI bindings at install time
@@ -57,7 +57,9 @@ include = ["src/pychrony/_core/_bindings.py"]
57
57
 
58
58
  [tool.ty.overrides.rules]
59
59
  possibly-missing-attribute = "ignore"
60
+ unresolved-attribute = "ignore" # ty 0.0.21+ renamed possibly-missing-attribute
60
61
  invalid-argument-type = "ignore" # Dict unpacking uses runtime validation
62
+ unresolved-import = "ignore" # _cffi_bindings is generated at install time
61
63
 
62
64
  [tool.pytest.ini_options]
63
65
  testpaths = ["tests"]
@@ -67,6 +69,7 @@ python_functions = ["test_*"]
67
69
  addopts = ["-v", "--tb=short"]
68
70
 
69
71
  [tool.cibuildwheel]
72
+ build-frontend = "build[uv]"
70
73
  build = "cp310-* cp311-* cp312-* cp313-* cp314-*"
71
74
 
72
75
  [tool.cibuildwheel.linux]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pychrony
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: Python bindings for chrony NTP client
5
5
  Author-email: arunderwood <arunderwood@users.noreply.github.com>
6
6
  License-Expression: MIT AND LGPL-2.1-or-later
@@ -380,27 +380,6 @@ wheels = [
380
380
  { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
381
381
  ]
382
382
 
383
- [[package]]
384
- name = "importlib-metadata"
385
- version = "8.7.1"
386
- source = { registry = "https://pypi.org/simple" }
387
- dependencies = [
388
- { name = "zipp" },
389
- ]
390
- sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" }
391
- wheels = [
392
- { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" },
393
- ]
394
-
395
- [[package]]
396
- name = "importlib-resources"
397
- version = "6.5.2"
398
- source = { registry = "https://pypi.org/simple" }
399
- sdist = { url = "https://files.pythonhosted.org/packages/cf/8c/f834fbf984f691b4f7ff60f50b514cc3de5cc08abfc3295564dd89c5e2e7/importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c", size = 44693, upload-time = "2025-01-03T18:51:56.698Z" }
400
- wheels = [
401
- { url = "https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec", size = 37461, upload-time = "2025-01-03T18:51:54.306Z" },
402
- ]
403
-
404
383
  [[package]]
405
384
  name = "iniconfig"
406
385
  version = "2.3.0"
@@ -527,11 +506,9 @@ wheels = [
527
506
 
528
507
  [[package]]
529
508
  name = "mike"
530
- version = "2.1.3"
509
+ version = "2.1.4"
531
510
  source = { registry = "https://pypi.org/simple" }
532
511
  dependencies = [
533
- { name = "importlib-metadata" },
534
- { name = "importlib-resources" },
535
512
  { name = "jinja2" },
536
513
  { name = "mkdocs" },
537
514
  { name = "pyparsing" },
@@ -539,9 +516,9 @@ dependencies = [
539
516
  { name = "pyyaml-env-tag" },
540
517
  { name = "verspec" },
541
518
  ]
542
- sdist = { url = "https://files.pythonhosted.org/packages/ab/f7/2933f1a1fb0e0f077d5d6a92c6c7f8a54e6128241f116dff4df8b6050bbf/mike-2.1.3.tar.gz", hash = "sha256:abd79b8ea483fb0275b7972825d3082e5ae67a41820f8d8a0dc7a3f49944e810", size = 38119, upload-time = "2024-08-13T05:02:14.167Z" }
519
+ sdist = { url = "https://files.pythonhosted.org/packages/ec/09/de1cab0018eb5f1fbd9dcc26b6e61f9453c5ec2eb790949d6ed75e1ffe55/mike-2.1.4.tar.gz", hash = "sha256:75d549420b134603805a65fc67f7dcd9fcd0ad1454fb2c893d9e844cba1aa6e4", size = 38190, upload-time = "2026-03-08T02:46:29.187Z" }
543
520
  wheels = [
544
- { url = "https://files.pythonhosted.org/packages/fd/1a/31b7cd6e4e7a02df4e076162e9783620777592bea9e4bb036389389af99d/mike-2.1.3-py3-none-any.whl", hash = "sha256:d90c64077e84f06272437b464735130d380703a76a5738b152932884c60c062a", size = 33754, upload-time = "2024-08-13T05:02:12.515Z" },
521
+ { url = "https://files.pythonhosted.org/packages/48/f7/10f5e101db25741b91e4f4792c5d97b4fa834ead5cf509ae91097d939424/mike-2.1.4-py3-none-any.whl", hash = "sha256:39933e992e155dd70f2297e749a0ed78d8fd7942bc33a3666195d177758a280e", size = 33820, upload-time = "2026-03-08T02:46:28.149Z" },
545
522
  ]
546
523
 
547
524
  [[package]]
@@ -598,7 +575,7 @@ wheels = [
598
575
 
599
576
  [[package]]
600
577
  name = "mkdocs-material"
601
- version = "9.7.1"
578
+ version = "9.7.6"
602
579
  source = { registry = "https://pypi.org/simple" }
603
580
  dependencies = [
604
581
  { name = "babel" },
@@ -613,9 +590,9 @@ dependencies = [
613
590
  { name = "pymdown-extensions" },
614
591
  { name = "requests" },
615
592
  ]
616
- sdist = { url = "https://files.pythonhosted.org/packages/27/e2/2ffc356cd72f1473d07c7719d82a8f2cbd261666828614ecb95b12169f41/mkdocs_material-9.7.1.tar.gz", hash = "sha256:89601b8f2c3e6c6ee0a918cc3566cb201d40bf37c3cd3c2067e26fadb8cce2b8", size = 4094392, upload-time = "2025-12-18T09:49:00.308Z" }
593
+ sdist = { url = "https://files.pythonhosted.org/packages/45/29/6d2bcf41ae40802c4beda2432396fff97b8456fb496371d1bc7aad6512ec/mkdocs_material-9.7.6.tar.gz", hash = "sha256:00bdde50574f776d328b1862fe65daeaf581ec309bd150f7bff345a098c64a69", size = 4097959, upload-time = "2026-03-19T15:41:58.161Z" }
617
594
  wheels = [
618
- { url = "https://files.pythonhosted.org/packages/3e/32/ed071cb721aca8c227718cffcf7bd539620e9799bbf2619e90c757bfd030/mkdocs_material-9.7.1-py3-none-any.whl", hash = "sha256:3f6100937d7d731f87f1e3e3b021c97f7239666b9ba1151ab476cabb96c60d5c", size = 9297166, upload-time = "2025-12-18T09:48:56.664Z" },
595
+ { url = "https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl", hash = "sha256:71b84353921b8ea1ba84fe11c50912cc512da8fe0881038fcc9a0761c0e635ba", size = 9305470, upload-time = "2026-03-19T15:41:55.217Z" },
619
596
  ]
620
597
 
621
598
  [[package]]
@@ -758,24 +735,24 @@ wheels = [
758
735
 
759
736
  [[package]]
760
737
  name = "pygments"
761
- version = "2.19.2"
738
+ version = "2.20.0"
762
739
  source = { registry = "https://pypi.org/simple" }
763
- sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" }
740
+ sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
764
741
  wheels = [
765
- { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" },
742
+ { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
766
743
  ]
767
744
 
768
745
  [[package]]
769
746
  name = "pymdown-extensions"
770
- version = "10.20"
747
+ version = "10.21.2"
771
748
  source = { registry = "https://pypi.org/simple" }
772
749
  dependencies = [
773
750
  { name = "markdown" },
774
751
  { name = "pyyaml" },
775
752
  ]
776
- sdist = { url = "https://files.pythonhosted.org/packages/3e/35/e3814a5b7df295df69d035cfb8aab78b2967cdf11fcfae7faed726b66664/pymdown_extensions-10.20.tar.gz", hash = "sha256:5c73566ab0cf38c6ba084cb7c5ea64a119ae0500cce754ccb682761dfea13a52", size = 852774, upload-time = "2025-12-31T19:59:42.211Z" }
753
+ sdist = { url = "https://files.pythonhosted.org/packages/df/08/f1c908c581fd11913da4711ea7ba32c0eee40b0190000996bb863b0c9349/pymdown_extensions-10.21.2.tar.gz", hash = "sha256:c3f55a5b8a1d0edf6699e35dcbea71d978d34ff3fa79f3d807b8a5b3fa90fbdc", size = 853922, upload-time = "2026-03-29T15:01:55.233Z" }
777
754
  wheels = [
778
- { url = "https://files.pythonhosted.org/packages/ea/10/47caf89cbb52e5bb764696fd52a8c591a2f0e851a93270c05a17f36000b5/pymdown_extensions-10.20-py3-none-any.whl", hash = "sha256:ea9e62add865da80a271d00bfa1c0fa085b20d133fb3fc97afdc88e682f60b2f", size = 268733, upload-time = "2025-12-31T19:59:40.652Z" },
755
+ { url = "https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl", hash = "sha256:5c0fd2a2bea14eb39af8ff284f1066d898ab2187d81b889b75d46d4348c01638", size = 268901, upload-time = "2026-03-29T15:01:53.244Z" },
779
756
  ]
780
757
 
781
758
  [[package]]
@@ -789,7 +766,7 @@ wheels = [
789
766
 
790
767
  [[package]]
791
768
  name = "pytest"
792
- version = "9.0.2"
769
+ version = "9.0.3"
793
770
  source = { registry = "https://pypi.org/simple" }
794
771
  dependencies = [
795
772
  { name = "colorama", marker = "sys_platform == 'win32'" },
@@ -800,23 +777,23 @@ dependencies = [
800
777
  { name = "pygments" },
801
778
  { name = "tomli", marker = "python_full_version < '3.11'" },
802
779
  ]
803
- sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" }
780
+ sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" }
804
781
  wheels = [
805
- { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" },
782
+ { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" },
806
783
  ]
807
784
 
808
785
  [[package]]
809
786
  name = "pytest-cov"
810
- version = "7.0.0"
787
+ version = "7.1.0"
811
788
  source = { registry = "https://pypi.org/simple" }
812
789
  dependencies = [
813
790
  { name = "coverage", extra = ["toml"] },
814
791
  { name = "pluggy" },
815
792
  { name = "pytest" },
816
793
  ]
817
- sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328, upload-time = "2025-09-09T10:57:02.113Z" }
794
+ sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592, upload-time = "2026-03-21T20:11:16.284Z" }
818
795
  wheels = [
819
- { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424, upload-time = "2025-09-09T10:57:00.695Z" },
796
+ { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876, upload-time = "2026-03-21T20:11:14.438Z" },
820
797
  ]
821
798
 
822
799
  [[package]]
@@ -909,7 +886,7 @@ wheels = [
909
886
 
910
887
  [[package]]
911
888
  name = "requests"
912
- version = "2.32.5"
889
+ version = "2.33.0"
913
890
  source = { registry = "https://pypi.org/simple" }
914
891
  dependencies = [
915
892
  { name = "certifi" },
@@ -917,34 +894,34 @@ dependencies = [
917
894
  { name = "idna" },
918
895
  { name = "urllib3" },
919
896
  ]
920
- sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" }
897
+ sdist = { url = "https://files.pythonhosted.org/packages/34/64/8860370b167a9721e8956ae116825caff829224fbca0ca6e7bf8ddef8430/requests-2.33.0.tar.gz", hash = "sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652", size = 134232, upload-time = "2026-03-25T15:10:41.586Z" }
921
898
  wheels = [
922
- { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" },
899
+ { url = "https://files.pythonhosted.org/packages/56/5d/c814546c2333ceea4ba42262d8c4d55763003e767fa169adc693bd524478/requests-2.33.0-py3-none-any.whl", hash = "sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b", size = 65017, upload-time = "2026-03-25T15:10:40.382Z" },
923
900
  ]
924
901
 
925
902
  [[package]]
926
903
  name = "ruff"
927
- version = "0.15.1"
904
+ version = "0.15.7"
928
905
  source = { registry = "https://pypi.org/simple" }
929
- sdist = { url = "https://files.pythonhosted.org/packages/04/dc/4e6ac71b511b141cf626357a3946679abeba4cf67bc7cc5a17920f31e10d/ruff-0.15.1.tar.gz", hash = "sha256:c590fe13fb57c97141ae975c03a1aedb3d3156030cabd740d6ff0b0d601e203f", size = 4540855, upload-time = "2026-02-12T23:09:09.998Z" }
906
+ sdist = { url = "https://files.pythonhosted.org/packages/a1/22/9e4f66ee588588dc6c9af6a994e12d26e19efbe874d1a909d09a6dac7a59/ruff-0.15.7.tar.gz", hash = "sha256:04f1ae61fc20fe0b148617c324d9d009b5f63412c0b16474f3d5f1a1a665f7ac", size = 4601277, upload-time = "2026-03-19T16:26:22.605Z" }
930
907
  wheels = [
931
- { url = "https://files.pythonhosted.org/packages/23/bf/e6e4324238c17f9d9120a9d60aa99a7daaa21204c07fcd84e2ef03bb5fd1/ruff-0.15.1-py3-none-linux_armv6l.whl", hash = "sha256:b101ed7cf4615bda6ffe65bdb59f964e9f4a0d3f85cbf0e54f0ab76d7b90228a", size = 10367819, upload-time = "2026-02-12T23:09:03.598Z" },
932
- { url = "https://files.pythonhosted.org/packages/b3/ea/c8f89d32e7912269d38c58f3649e453ac32c528f93bb7f4219258be2e7ed/ruff-0.15.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:939c995e9277e63ea632cc8d3fae17aa758526f49a9a850d2e7e758bfef46602", size = 10798618, upload-time = "2026-02-12T23:09:22.928Z" },
933
- { url = "https://files.pythonhosted.org/packages/5e/0f/1d0d88bc862624247d82c20c10d4c0f6bb2f346559d8af281674cf327f15/ruff-0.15.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:1d83466455fdefe60b8d9c8df81d3c1bbb2115cede53549d3b522ce2bc703899", size = 10148518, upload-time = "2026-02-12T23:08:58.339Z" },
934
- { url = "https://files.pythonhosted.org/packages/f5/c8/291c49cefaa4a9248e986256df2ade7add79388fe179e0691be06fae6f37/ruff-0.15.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9457e3c3291024866222b96108ab2d8265b477e5b1534c7ddb1810904858d16", size = 10518811, upload-time = "2026-02-12T23:09:31.865Z" },
935
- { url = "https://files.pythonhosted.org/packages/c3/1a/f5707440e5ae43ffa5365cac8bbb91e9665f4a883f560893829cf16a606b/ruff-0.15.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92c92b003e9d4f7fbd33b1867bb15a1b785b1735069108dfc23821ba045b29bc", size = 10196169, upload-time = "2026-02-12T23:09:17.306Z" },
936
- { url = "https://files.pythonhosted.org/packages/2a/ff/26ddc8c4da04c8fd3ee65a89c9fb99eaa5c30394269d424461467be2271f/ruff-0.15.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fe5c41ab43e3a06778844c586251eb5a510f67125427625f9eb2b9526535779", size = 10990491, upload-time = "2026-02-12T23:09:25.503Z" },
937
- { url = "https://files.pythonhosted.org/packages/fc/00/50920cb385b89413f7cdb4bb9bc8fc59c1b0f30028d8bccc294189a54955/ruff-0.15.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66a6dd6df4d80dc382c6484f8ce1bcceb55c32e9f27a8b94c32f6c7331bf14fb", size = 11843280, upload-time = "2026-02-12T23:09:19.88Z" },
938
- { url = "https://files.pythonhosted.org/packages/5d/6d/2f5cad8380caf5632a15460c323ae326f1e1a2b5b90a6ee7519017a017ca/ruff-0.15.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a4a42cbb8af0bda9bcd7606b064d7c0bc311a88d141d02f78920be6acb5aa83", size = 11274336, upload-time = "2026-02-12T23:09:14.907Z" },
939
- { url = "https://files.pythonhosted.org/packages/a3/1d/5f56cae1d6c40b8a318513599b35ea4b075d7dc1cd1d04449578c29d1d75/ruff-0.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ab064052c31dddada35079901592dfba2e05f5b1e43af3954aafcbc1096a5b2", size = 11137288, upload-time = "2026-02-12T23:09:07.475Z" },
940
- { url = "https://files.pythonhosted.org/packages/cd/20/6f8d7d8f768c93b0382b33b9306b3b999918816da46537d5a61635514635/ruff-0.15.1-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:5631c940fe9fe91f817a4c2ea4e81f47bee3ca4aa646134a24374f3c19ad9454", size = 11070681, upload-time = "2026-02-12T23:08:55.43Z" },
941
- { url = "https://files.pythonhosted.org/packages/9a/67/d640ac76069f64cdea59dba02af2e00b1fa30e2103c7f8d049c0cff4cafd/ruff-0.15.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:68138a4ba184b4691ccdc39f7795c66b3c68160c586519e7e8444cf5a53e1b4c", size = 10486401, upload-time = "2026-02-12T23:09:27.927Z" },
942
- { url = "https://files.pythonhosted.org/packages/65/3d/e1429f64a3ff89297497916b88c32a5cc88eeca7e9c787072d0e7f1d3e1e/ruff-0.15.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:518f9af03bfc33c03bdb4cb63fabc935341bb7f54af500f92ac309ecfbba6330", size = 10197452, upload-time = "2026-02-12T23:09:12.147Z" },
943
- { url = "https://files.pythonhosted.org/packages/78/83/e2c3bade17dad63bf1e1c2ffaf11490603b760be149e1419b07049b36ef2/ruff-0.15.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:da79f4d6a826caaea95de0237a67e33b81e6ec2e25fc7e1993a4015dffca7c61", size = 10693900, upload-time = "2026-02-12T23:09:34.418Z" },
944
- { url = "https://files.pythonhosted.org/packages/a1/27/fdc0e11a813e6338e0706e8b39bb7a1d61ea5b36873b351acee7e524a72a/ruff-0.15.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:3dd86dccb83cd7d4dcfac303ffc277e6048600dfc22e38158afa208e8bf94a1f", size = 11227302, upload-time = "2026-02-12T23:09:36.536Z" },
945
- { url = "https://files.pythonhosted.org/packages/f6/58/ac864a75067dcbd3b95be5ab4eb2b601d7fbc3d3d736a27e391a4f92a5c1/ruff-0.15.1-py3-none-win32.whl", hash = "sha256:660975d9cb49b5d5278b12b03bb9951d554543a90b74ed5d366b20e2c57c2098", size = 10462555, upload-time = "2026-02-12T23:09:29.899Z" },
946
- { url = "https://files.pythonhosted.org/packages/e0/5e/d4ccc8a27ecdb78116feac4935dfc39d1304536f4296168f91ed3ec00cd2/ruff-0.15.1-py3-none-win_amd64.whl", hash = "sha256:c820fef9dd5d4172a6570e5721704a96c6679b80cf7be41659ed439653f62336", size = 11599956, upload-time = "2026-02-12T23:09:01.157Z" },
947
- { url = "https://files.pythonhosted.org/packages/2a/07/5bda6a85b220c64c65686bc85bd0bbb23b29c62b3a9f9433fa55f17cda93/ruff-0.15.1-py3-none-win_arm64.whl", hash = "sha256:5ff7d5f0f88567850f45081fac8f4ec212be8d0b963e385c3f7d0d2eb4899416", size = 10874604, upload-time = "2026-02-12T23:09:05.515Z" },
908
+ { url = "https://files.pythonhosted.org/packages/41/2f/0b08ced94412af091807b6119ca03755d651d3d93a242682bf020189db94/ruff-0.15.7-py3-none-linux_armv6l.whl", hash = "sha256:a81cc5b6910fb7dfc7c32d20652e50fa05963f6e13ead3c5915c41ac5d16668e", size = 10489037, upload-time = "2026-03-19T16:26:32.47Z" },
909
+ { url = "https://files.pythonhosted.org/packages/91/4a/82e0fa632e5c8b1eba5ee86ecd929e8ff327bbdbfb3c6ac5d81631bef605/ruff-0.15.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:722d165bd52403f3bdabc0ce9e41fc47070ac56d7a91b4e0d097b516a53a3477", size = 10955433, upload-time = "2026-03-19T16:27:00.205Z" },
910
+ { url = "https://files.pythonhosted.org/packages/ab/10/12586735d0ff42526ad78c049bf51d7428618c8b5c467e72508c694119df/ruff-0.15.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7fbc2448094262552146cbe1b9643a92f66559d3761f1ad0656d4991491af49e", size = 10269302, upload-time = "2026-03-19T16:26:26.183Z" },
911
+ { url = "https://files.pythonhosted.org/packages/eb/5d/32b5c44ccf149a26623671df49cbfbd0a0ae511ff3df9d9d2426966a8d57/ruff-0.15.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b39329b60eba44156d138275323cc726bbfbddcec3063da57caa8a8b1d50adf", size = 10607625, upload-time = "2026-03-19T16:27:03.263Z" },
912
+ { url = "https://files.pythonhosted.org/packages/5d/f1/f0001cabe86173aaacb6eb9bb734aa0605f9a6aa6fa7d43cb49cbc4af9c9/ruff-0.15.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:87768c151808505f2bfc93ae44e5f9e7c8518943e5074f76ac21558ef5627c85", size = 10324743, upload-time = "2026-03-19T16:27:09.791Z" },
913
+ { url = "https://files.pythonhosted.org/packages/7a/87/b8a8f3d56b8d848008559e7c9d8bf367934d5367f6d932ba779456e2f73b/ruff-0.15.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb0511670002c6c529ec66c0e30641c976c8963de26a113f3a30456b702468b0", size = 11138536, upload-time = "2026-03-19T16:27:06.101Z" },
914
+ { url = "https://files.pythonhosted.org/packages/e4/f2/4fd0d05aab0c5934b2e1464784f85ba2eab9d54bffc53fb5430d1ed8b829/ruff-0.15.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0d19644f801849229db8345180a71bee5407b429dd217f853ec515e968a6912", size = 11994292, upload-time = "2026-03-19T16:26:48.718Z" },
915
+ { url = "https://files.pythonhosted.org/packages/64/22/fc4483871e767e5e95d1622ad83dad5ebb830f762ed0420fde7dfa9d9b08/ruff-0.15.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4806d8e09ef5e84eb19ba833d0442f7e300b23fe3f0981cae159a248a10f0036", size = 11398981, upload-time = "2026-03-19T16:26:54.513Z" },
916
+ { url = "https://files.pythonhosted.org/packages/b0/99/66f0343176d5eab02c3f7fcd2de7a8e0dd7a41f0d982bee56cd1c24db62b/ruff-0.15.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dce0896488562f09a27b9c91b1f58a097457143931f3c4d519690dea54e624c5", size = 11242422, upload-time = "2026-03-19T16:26:29.277Z" },
917
+ { url = "https://files.pythonhosted.org/packages/5d/3a/a7060f145bfdcce4c987ea27788b30c60e2c81d6e9a65157ca8afe646328/ruff-0.15.7-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:1852ce241d2bc89e5dc823e03cff4ce73d816b5c6cdadd27dbfe7b03217d2a12", size = 11232158, upload-time = "2026-03-19T16:26:42.321Z" },
918
+ { url = "https://files.pythonhosted.org/packages/a7/53/90fbb9e08b29c048c403558d3cdd0adf2668b02ce9d50602452e187cd4af/ruff-0.15.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5f3e4b221fb4bd293f79912fc5e93a9063ebd6d0dcbd528f91b89172a9b8436c", size = 10577861, upload-time = "2026-03-19T16:26:57.459Z" },
919
+ { url = "https://files.pythonhosted.org/packages/2f/aa/5f486226538fe4d0f0439e2da1716e1acf895e2a232b26f2459c55f8ddad/ruff-0.15.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b15e48602c9c1d9bdc504b472e90b90c97dc7d46c7028011ae67f3861ceba7b4", size = 10327310, upload-time = "2026-03-19T16:26:35.909Z" },
920
+ { url = "https://files.pythonhosted.org/packages/99/9e/271afdffb81fe7bfc8c43ba079e9d96238f674380099457a74ccb3863857/ruff-0.15.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1b4705e0e85cedc74b0a23cf6a179dbb3df184cb227761979cc76c0440b5ab0d", size = 10840752, upload-time = "2026-03-19T16:26:45.723Z" },
921
+ { url = "https://files.pythonhosted.org/packages/bf/29/a4ae78394f76c7759953c47884eb44de271b03a66634148d9f7d11e721bd/ruff-0.15.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:112c1fa316a558bb34319282c1200a8bf0495f1b735aeb78bfcb2991e6087580", size = 11336961, upload-time = "2026-03-19T16:26:39.076Z" },
922
+ { url = "https://files.pythonhosted.org/packages/26/6b/8786ba5736562220d588a2f6653e6c17e90c59ced34a2d7b512ef8956103/ruff-0.15.7-py3-none-win32.whl", hash = "sha256:6d39e2d3505b082323352f733599f28169d12e891f7dd407f2d4f54b4c2886de", size = 10582538, upload-time = "2026-03-19T16:26:15.992Z" },
923
+ { url = "https://files.pythonhosted.org/packages/2b/e9/346d4d3fffc6871125e877dae8d9a1966b254fbd92a50f8561078b88b099/ruff-0.15.7-py3-none-win_amd64.whl", hash = "sha256:4d53d712ddebcd7dace1bc395367aec12c057aacfe9adbb6d832302575f4d3a1", size = 11755839, upload-time = "2026-03-19T16:26:19.897Z" },
924
+ { url = "https://files.pythonhosted.org/packages/8f/e8/726643a3ea68c727da31570bde48c7a10f1aa60eddd628d94078fec586ff/ruff-0.15.7-py3-none-win_arm64.whl", hash = "sha256:18e8d73f1c3fdf27931497972250340f92e8c861722161a9caeb89a58ead6ed2", size = 11023304, upload-time = "2026-03-19T16:26:51.669Z" },
948
925
  ]
949
926
 
950
927
  [[package]]
@@ -1012,26 +989,26 @@ wheels = [
1012
989
 
1013
990
  [[package]]
1014
991
  name = "ty"
1015
- version = "0.0.16"
992
+ version = "0.0.25"
1016
993
  source = { registry = "https://pypi.org/simple" }
1017
- sdist = { url = "https://files.pythonhosted.org/packages/ee/18/77f84d89db54ea0d1d1b09fa2f630ac4c240c8e270761cb908c06b6e735c/ty-0.0.16.tar.gz", hash = "sha256:a999b0db6aed7d6294d036ebe43301105681e0c821a19989be7c145805d7351c", size = 5129637, upload-time = "2026-02-10T20:24:16.48Z" }
994
+ sdist = { url = "https://files.pythonhosted.org/packages/12/bf/3c3147c7237277b0e8a911ff89de7183408be96b31fb42b38edb666d287f/ty-0.0.25.tar.gz", hash = "sha256:8ae3891be17dfb6acab51a2df3a8f8f6c551eb60ea674c10946dc92aae8d4401", size = 5375500, upload-time = "2026-03-24T22:32:34.608Z" }
1018
995
  wheels = [
1019
- { url = "https://files.pythonhosted.org/packages/67/b9/909ebcc7f59eaf8a2c18fb54bfcf1c106f99afb3e5460058d4b46dec7b20/ty-0.0.16-py3-none-linux_armv6l.whl", hash = "sha256:6d8833b86396ed742f2b34028f51c0e98dbf010b13ae4b79d1126749dc9dab15", size = 10113870, upload-time = "2026-02-10T20:24:11.864Z" },
1020
- { url = "https://files.pythonhosted.org/packages/c3/2c/b963204f3df2fdbf46a4a1ea4a060af9bb676e065d59c70ad0f5ae0dbae8/ty-0.0.16-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:934c0055d3b7f1cf3c8eab78c6c127ef7f347ff00443cef69614bda6f1502377", size = 9936286, upload-time = "2026-02-10T20:24:08.695Z" },
1021
- { url = "https://files.pythonhosted.org/packages/ef/4d/3d78294f2ddfdded231e94453dea0e0adef212b2bd6536296039164c2a3e/ty-0.0.16-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b55e8e8733b416d914003cd22e831e139f034681b05afed7e951cc1a5ea1b8d4", size = 9442660, upload-time = "2026-02-10T20:24:02.704Z" },
1022
- { url = "https://files.pythonhosted.org/packages/15/40/ce48c0541e3b5749b0890725870769904e6b043e077d4710e5325d5cf807/ty-0.0.16-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feccae8f4abd6657de111353bd604f36e164844466346eb81ffee2c2b06ea0f0", size = 9934506, upload-time = "2026-02-10T20:24:35.818Z" },
1023
- { url = "https://files.pythonhosted.org/packages/84/16/3b29de57e1ec6e56f50a4bb625ee0923edb058c5f53e29014873573a00cd/ty-0.0.16-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1cad5e29d8765b92db5fa284940ac57149561f3f89470b363b9aab8a6ce553b0", size = 9933099, upload-time = "2026-02-10T20:24:43.003Z" },
1024
- { url = "https://files.pythonhosted.org/packages/f7/a1/e546995c25563d318c502b2f42af0fdbed91e1fc343708241e2076373644/ty-0.0.16-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:86f28797c7dc06f081238270b533bf4fc8e93852f34df49fb660e0b58a5cda9a", size = 10438370, upload-time = "2026-02-10T20:24:33.44Z" },
1025
- { url = "https://files.pythonhosted.org/packages/11/c1/22d301a4b2cce0f75ae84d07a495f87da193bcb68e096d43695a815c4708/ty-0.0.16-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be971a3b42bcae44d0e5787f88156ed2102ad07558c05a5ae4bfd32a99118e66", size = 10992160, upload-time = "2026-02-10T20:24:25.574Z" },
1026
- { url = "https://files.pythonhosted.org/packages/6f/40/f1892b8c890db3f39a1bab8ec459b572de2df49e76d3cad2a9a239adcde9/ty-0.0.16-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c9f982b7c4250eb91af66933f436b3a2363c24b6353e94992eab6551166c8b7", size = 10717892, upload-time = "2026-02-10T20:24:05.914Z" },
1027
- { url = "https://files.pythonhosted.org/packages/2f/1b/caf9be8d0c738983845f503f2e92ea64b8d5fae1dd5ca98c3fca4aa7dadc/ty-0.0.16-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d122edf85ce7bdf6f85d19158c991d858fc835677bd31ca46319c4913043dc84", size = 10510916, upload-time = "2026-02-10T20:24:00.252Z" },
1028
- { url = "https://files.pythonhosted.org/packages/60/ea/28980f5c7e1f4c9c44995811ea6a36f2fcb205232a6ae0f5b60b11504621/ty-0.0.16-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:497ebdddbb0e35c7758ded5aa4c6245e8696a69d531d5c9b0c1a28a075374241", size = 9908506, upload-time = "2026-02-10T20:24:28.133Z" },
1029
- { url = "https://files.pythonhosted.org/packages/f7/80/8672306596349463c21644554f935ff8720679a14fd658fef658f66da944/ty-0.0.16-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e1e0ac0837bde634b030243aeba8499383c0487e08f22e80f5abdacb5b0bd8ce", size = 9949486, upload-time = "2026-02-10T20:24:18.62Z" },
1030
- { url = "https://files.pythonhosted.org/packages/8b/8a/d8747d36f30bd82ea157835f5b70d084c9bb5d52dd9491dba8a149792d6a/ty-0.0.16-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1216c9bcca551d9f89f47a817ebc80e88ac37683d71504e5509a6445f24fd024", size = 10145269, upload-time = "2026-02-10T20:24:38.249Z" },
1031
- { url = "https://files.pythonhosted.org/packages/6f/4c/753535acc7243570c259158b7df67e9c9dd7dab9a21ee110baa4cdcec45d/ty-0.0.16-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:221bbdd2c6ee558452c96916ab67fcc465b86967cf0482e19571d18f9c831828", size = 10608644, upload-time = "2026-02-10T20:24:40.565Z" },
1032
- { url = "https://files.pythonhosted.org/packages/3e/05/8e8db64cf45a8b16757e907f7a3bfde8d6203e4769b11b64e28d5bdcd79a/ty-0.0.16-py3-none-win32.whl", hash = "sha256:d52c4eb786be878e7514cab637200af607216fcc5539a06d26573ea496b26512", size = 9582579, upload-time = "2026-02-10T20:24:30.406Z" },
1033
- { url = "https://files.pythonhosted.org/packages/25/bc/45759faea132cd1b2a9ff8374e42ba03d39d076594fbb94f3e0e2c226c62/ty-0.0.16-py3-none-win_amd64.whl", hash = "sha256:f572c216aa8ecf79e86589c6e6d4bebc01f1f3cb3be765c0febd942013e1e73a", size = 10436043, upload-time = "2026-02-10T20:23:57.51Z" },
1034
- { url = "https://files.pythonhosted.org/packages/7f/02/70a491802e7593e444137ed4e41a04c34d186eb2856f452dd76b60f2e325/ty-0.0.16-py3-none-win_arm64.whl", hash = "sha256:430eadeb1c0de0c31ef7bef9d002bdbb5f25a31e3aad546f1714d76cd8da0a87", size = 9915122, upload-time = "2026-02-10T20:24:14.285Z" },
996
+ { url = "https://files.pythonhosted.org/packages/97/a4/6c289cbd1474285223124a4ffb55c078dbe9ae1d925d0b6a948643c7f115/ty-0.0.25-py3-none-linux_armv6l.whl", hash = "sha256:26d6d5aede5d54fb055779460f896d9c1473c6fb996716bd11cb90f027d8fee7", size = 10452747, upload-time = "2026-03-24T22:32:32.662Z" },
997
+ { url = "https://files.pythonhosted.org/packages/00/13/74cb9de356b9ceb3f281ab048f8c4ac2207122161b0ac0066886ce129abe/ty-0.0.25-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:aedcfbc7b6b96dbc55b0da78fa02bd049373ff3d8a827f613dadd8bd17d10758", size = 10271349, upload-time = "2026-03-24T22:32:13.041Z" },
998
+ { url = "https://files.pythonhosted.org/packages/0e/93/ffc5a20cc9e14fa9b32b0c54884864bede30d144ce2ae013805bce0c86d0/ty-0.0.25-py3-none-macosx_11_0_arm64.whl", hash = "sha256:0a8fb3c1e28f73618941811e2568dca195178a1a6314651d4ee97086a4497253", size = 9730308, upload-time = "2026-03-24T22:32:19.24Z" },
999
+ { url = "https://files.pythonhosted.org/packages/6d/78/52e05ef32a5f172fce70633a4e19d8e04364271a4322ae12382c7344b0de/ty-0.0.25-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:814870b7f347b5d0276304cddb98a0958f08de183bf159abc920ebe321247ad4", size = 10247664, upload-time = "2026-03-24T22:32:08.669Z" },
1000
+ { url = "https://files.pythonhosted.org/packages/c2/64/0d0a47ed0aa1d634c666c2cc15d3b0af4b95d0fd3dbb796032bd493f3433/ty-0.0.25-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:781150e23825dc110cd5e1f50ca3d61664f7a5db5b4a55d5dbf7d3b1e246b917", size = 10261961, upload-time = "2026-03-24T22:32:43.935Z" },
1001
+ { url = "https://files.pythonhosted.org/packages/3e/ba/4666b96f0499465efb97c244554107c541d74a1add393e62276b3de9b54f/ty-0.0.25-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc81ff2a0143911321251dc81d1c259fa5cdc56d043019a733c845d55409e2a", size = 10746076, upload-time = "2026-03-24T22:32:26.37Z" },
1002
+ { url = "https://files.pythonhosted.org/packages/e7/ed/aa958ccbcd85cc206600e48fbf0a1c27aef54b4b90112d9a73f69ed0c739/ty-0.0.25-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f03c5c5b5c10355ea030cbe3cd93b2e759b9492c66688288ea03a68086069f2e", size = 11287331, upload-time = "2026-03-24T22:32:21.607Z" },
1003
+ { url = "https://files.pythonhosted.org/packages/26/e4/f4a004e1952e6042f5bfeeb7d09cffb379270ef009d9f8568471863e86e6/ty-0.0.25-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fc1ef49cd6262eb9223ccf6e258ac899aaa53e7dc2151ba65a2c9fa248dfa75", size = 11028804, upload-time = "2026-03-24T22:32:39.088Z" },
1004
+ { url = "https://files.pythonhosted.org/packages/56/32/5c15bb8ea20ed54d43c734f253a2a5da95d41474caecf4ef3682df9f68f5/ty-0.0.25-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad98da1393161096235a387cc36abecd31861060c68416761eccdb7c1bc326b", size = 10845246, upload-time = "2026-03-24T22:32:41.33Z" },
1005
+ { url = "https://files.pythonhosted.org/packages/6f/fe/4ddd83e810c8682fcfada0d1c9d38936a34a024d32d7736075c1e53a038e/ty-0.0.25-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2d4336aa5381eb4eab107c3dec75fe22943a648ef6646f5a8431ef1c8cdabb66", size = 10233515, upload-time = "2026-03-24T22:32:17.012Z" },
1006
+ { url = "https://files.pythonhosted.org/packages/ad/db/9fe54f6fb952e5b218f2e661e64ed656512edf2046cfbb9c159558e255db/ty-0.0.25-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e10ed39564227de2b7bd89398250b65daaedbef15a25cef8eee70078f5d9e0b2", size = 10275289, upload-time = "2026-03-24T22:32:28.21Z" },
1007
+ { url = "https://files.pythonhosted.org/packages/b1/e0/090d7b33791b42bc7ec29463ac6a634738e16b289e027608ebe542682773/ty-0.0.25-py3-none-musllinux_1_2_i686.whl", hash = "sha256:aca04e9ed9b61c706064a1c0b71a247c3f92f373d0222103f3bc54b649421796", size = 10461195, upload-time = "2026-03-24T22:32:24.252Z" },
1008
+ { url = "https://files.pythonhosted.org/packages/42/31/5bf12bce01b80b72a7a4e627380779b41510e730f6000862a1d078e423f7/ty-0.0.25-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:18a5443e4ef339c1bd8c57fc13112c22080617ea582bfc22b497d82d65361325", size = 10931471, upload-time = "2026-03-24T22:32:14.985Z" },
1009
+ { url = "https://files.pythonhosted.org/packages/6a/5e/ab60c11f8a6dd2a0ae96daac83458ef2e9be1ae70481d1ad9c59d3eaf20f/ty-0.0.25-py3-none-win32.whl", hash = "sha256:a685b9a611b69195b5a557e05dbb7ebcd12815f6c32fb27fdf15edeb1fa33d8f", size = 9835974, upload-time = "2026-03-24T22:32:36.86Z" },
1010
+ { url = "https://files.pythonhosted.org/packages/41/55/625acc2ef34646268bc2baa8fdd6e22fb47cd5965e2acd3be92c687fb6b0/ty-0.0.25-py3-none-win_amd64.whl", hash = "sha256:0d4d37a1f1ab7f2669c941c38c65144ff223eb51ececd7ccfc0d623afbc0f729", size = 10815449, upload-time = "2026-03-24T22:32:11.031Z" },
1011
+ { url = "https://files.pythonhosted.org/packages/82/c7/0147bfb543df97740b45b222c54ff79ef20fa57f14b9d2c1dab3cd7d3faa/ty-0.0.25-py3-none-win_arm64.whl", hash = "sha256:d80b8cd965cbacbfd887ac2d985f5b6da09b7aa3569371e2894e0b30b26b89cd", size = 10225494, upload-time = "2026-03-24T22:32:30.611Z" },
1035
1012
  ]
1036
1013
 
1037
1014
  [[package]]
@@ -1092,12 +1069,3 @@ wheels = [
1092
1069
  { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" },
1093
1070
  { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" },
1094
1071
  ]
1095
-
1096
- [[package]]
1097
- name = "zipp"
1098
- version = "3.23.0"
1099
- source = { registry = "https://pypi.org/simple" }
1100
- sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" }
1101
- wheels = [
1102
- { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" },
1103
- ]
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