anaplan-sdk 0.4.4a4__tar.gz → 0.4.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/.github/workflows/docs.yml +3 -8
  2. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/.github/workflows/lint.yml +1 -1
  3. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/.github/workflows/tests.yml +1 -1
  4. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/PKG-INFO +3 -2
  5. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/README.md +2 -1
  6. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_async_clients/_bulk.py +11 -0
  7. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_auth.py +5 -4
  8. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_clients/_bulk.py +11 -0
  9. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/guides/bulk.md +18 -0
  10. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/guides/transactional.md +2 -2
  11. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/mkdocs.yml +5 -5
  12. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/pyproject.toml +11 -9
  13. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/uv.lock +80 -64
  14. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/.github/dependabot.yml +0 -0
  15. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/.gitignore +0 -0
  16. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/.pre-commit-config.yaml +0 -0
  17. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/LICENSE +0 -0
  18. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/__init__.py +0 -0
  19. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_async_clients/__init__.py +0 -0
  20. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_async_clients/_alm.py +0 -0
  21. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_async_clients/_audit.py +0 -0
  22. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_async_clients/_cloud_works.py +0 -0
  23. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_async_clients/_cw_flow.py +0 -0
  24. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_async_clients/_transactional.py +0 -0
  25. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_base.py +0 -0
  26. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_clients/__init__.py +0 -0
  27. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_clients/_alm.py +0 -0
  28. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_clients/_audit.py +0 -0
  29. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_clients/_cloud_works.py +0 -0
  30. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_clients/_cw_flow.py +0 -0
  31. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_clients/_transactional.py +0 -0
  32. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/_oauth.py +0 -0
  33. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/exceptions.py +0 -0
  34. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/models/__init__.py +0 -0
  35. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/models/_alm.py +0 -0
  36. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/models/_base.py +0 -0
  37. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/models/_bulk.py +0 -0
  38. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/models/_transactional.py +0 -0
  39. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/models/cloud_works.py +0 -0
  40. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/anaplan_sdk/models/flows.py +0 -0
  41. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/anaplan_explained.md +0 -0
  42. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/async/async_alm_client.md +0 -0
  43. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/async/async_audit_client.md +0 -0
  44. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/async/async_client.md +0 -0
  45. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/async/async_cw_client.md +0 -0
  46. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/async/async_flows_client.md +0 -0
  47. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/async/async_oauth_client.md +0 -0
  48. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/async/async_transactional_client.md +0 -0
  49. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/exceptions.md +0 -0
  50. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/models/alm.md +0 -0
  51. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/models/bulk.md +0 -0
  52. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/models/cloud_works.md +0 -0
  53. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/models/flows.md +0 -0
  54. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/models/transactional.md +0 -0
  55. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/sync/sync_alm_client.md +0 -0
  56. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/sync/sync_audit_client.md +0 -0
  57. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/sync/sync_client.md +0 -0
  58. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/sync/sync_cw_client.md +0 -0
  59. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/sync/sync_flows_client.md +0 -0
  60. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/sync/sync_oauth_client.md +0 -0
  61. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/api/sync/sync_transactional_client.md +0 -0
  62. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/assets/overview.html +0 -0
  63. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/css/styles.css +0 -0
  64. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/guides/alm.md +0 -0
  65. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/guides/audit.md +0 -0
  66. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/guides/authentication.md +0 -0
  67. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/guides/bulk_vs_transactional.md +0 -0
  68. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/guides/cloud_works.md +0 -0
  69. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/guides/index.md +0 -0
  70. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/guides/logging.md +0 -0
  71. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/guides/multiple_models.md +0 -0
  72. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/img/anaplan-sdk.webp +0 -0
  73. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/index.md +0 -0
  74. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/installation.md +0 -0
  75. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/js/assets/hljs.js +0 -0
  76. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/js/assets/hljs.min.js +0 -0
  77. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/js/assets/python.js +0 -0
  78. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/js/assets/python.min.js +0 -0
  79. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/js/highlight.js +0 -0
  80. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/js/highlight.min.js +0 -0
  81. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/docs/quickstart.md +0 -0
  82. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/async/conftest.py +0 -0
  83. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/async/test_async_alm_client.py +0 -0
  84. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/async/test_async_audit_client.py +0 -0
  85. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/async/test_async_client.py +0 -0
  86. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/async/test_async_cloud_works_client.py +0 -0
  87. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/async/test_async_flows_client.py +0 -0
  88. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/async/test_async_transactional_client.py +0 -0
  89. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/conftest.py +0 -0
  90. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/sync/conftest.py +0 -0
  91. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/sync/test_alm_client.py +0 -0
  92. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/sync/test_audit_client.py +0 -0
  93. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/sync/test_client.py +0 -0
  94. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/sync/test_cloud_works_client.py +0 -0
  95. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/sync/test_flows_client.py +0 -0
  96. {anaplan_sdk-0.4.4a4 → anaplan_sdk-0.4.5}/tests/sync/test_transactional_client.py +0 -0
@@ -3,11 +3,13 @@ on:
3
3
  push:
4
4
  branches:
5
5
  - master
6
+ workflow_dispatch:
7
+
6
8
  permissions:
7
9
  contents: write
8
10
  jobs:
9
11
  deploy:
10
- runs-on: ubuntu-latest
12
+ runs-on: ubuntu-22.04
11
13
  steps:
12
14
  - uses: actions/checkout@v4
13
15
  - name: Configure Git Credentials
@@ -17,13 +19,6 @@ jobs:
17
19
  - uses: actions/setup-python@v5
18
20
  with:
19
21
  python-version: 3.13
20
- - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
21
- - uses: actions/cache@v4
22
- with:
23
- key: mkdocs-material-${{ env.cache_id }}
24
- path: .cache
25
- restore-keys: |
26
- mkdocs-material-
27
22
  - name: "Setup"
28
23
  run: |
29
24
  pip install uv
@@ -2,7 +2,7 @@ name: Ruff
2
2
  on: [ push, pull_request ]
3
3
  jobs:
4
4
  ruff:
5
- runs-on: ubuntu-latest
5
+ runs-on: ubuntu-22.04
6
6
  steps:
7
7
  - uses: actions/checkout@v4
8
8
  - uses: astral-sh/ruff-action@v3
@@ -17,7 +17,7 @@ jobs:
17
17
  AZ_STORAGE_SAS_TOKEN: ${{secrets.AZ_STORAGE_SAS_TOKEN}}
18
18
 
19
19
  name: "Python ${{ matrix.python-version }}"
20
- runs-on: "ubuntu-latest"
20
+ runs-on: ubuntu-22.04
21
21
 
22
22
  strategy:
23
23
  max-parallel: 4
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: anaplan-sdk
3
- Version: 0.4.4a4
3
+ Version: 0.4.5
4
4
  Summary: Streamlined Python Interface for Anaplan
5
5
  Project-URL: Homepage, https://vinzenzklass.github.io/anaplan-sdk/
6
6
  Project-URL: Repository, https://github.com/VinzenzKlass/anaplan-sdk
@@ -60,7 +60,8 @@ abstractions over all Anaplan APIs, allowing you to focus on business requiremen
60
60
 
61
61
  ## Getting Started
62
62
 
63
- Head over to the [Quick Start](quickstart.md) for basic usage instructions and examples.
63
+ Head over to the [Quick Start](https://vinzenzklass.github.io/anaplan-sdk/quickstart/) for basic usage instructions and
64
+ examples.
64
65
 
65
66
  ## Contributing
66
67
 
@@ -38,7 +38,8 @@ abstractions over all Anaplan APIs, allowing you to focus on business requiremen
38
38
 
39
39
  ## Getting Started
40
40
 
41
- Head over to the [Quick Start](quickstart.md) for basic usage instructions and examples.
41
+ Head over to the [Quick Start](https://vinzenzklass.github.io/anaplan-sdk/quickstart/) for basic usage instructions and
42
+ examples.
42
43
 
43
44
  ## Contributing
44
45
 
@@ -451,6 +451,17 @@ class AsyncClient(_AsyncBaseClient):
451
451
  ).get("task")
452
452
  )
453
453
 
454
+ async def get_optimizer_log(self, action_id: int, task_id: str) -> bytes:
455
+ """
456
+ Retrieves the solution logs of the specified optimization action task.
457
+ :param action_id: The identifier of the optimization action that was invoked.
458
+ :param task_id: The Task identifier, sometimes also referred to as the Correlation Id.
459
+ :return: The content of the solution logs.
460
+ """
461
+ return await self._get_binary(
462
+ f"{self._url}/optimizeActions/{action_id}/tasks/{task_id}/solutionLogs"
463
+ )
464
+
454
465
  async def invoke_action(self, action_id: int) -> str:
455
466
  """
456
467
  You may want to consider using `run_action()` instead.
@@ -4,7 +4,6 @@ from base64 import b64encode
4
4
  from typing import Callable
5
5
 
6
6
  import httpx
7
- import keyring
8
7
 
9
8
  from ._oauth import _OAuthRequestFactory
10
9
  from .exceptions import AnaplanException, InvalidCredentialsException, InvalidPrivateKeyException
@@ -205,7 +204,7 @@ class AnaplanLocalOAuth(_AnaplanAuth):
205
204
  if stored:
206
205
  logger.info("Using persisted OAuth refresh token.")
207
206
  self._oauth_token = {"refresh_token": stored}
208
- self._token = None # Set to None to trigger the super().__init__ auth request.
207
+ self._token = "" # Set to blank to trigger the super().__init__ auth request.
209
208
  except ImportError as e:
210
209
  raise AnaplanException(
211
210
  "keyring is not available. Please install anaplan-sdk with the keyring extra "
@@ -246,6 +245,8 @@ class AnaplanLocalOAuth(_AnaplanAuth):
246
245
  raise AnaplanException(f"Authentication failed: {response.status_code} {response.text}")
247
246
  self._oauth_token = response.json()
248
247
  if self._persist_token:
248
+ import keyring
249
+
249
250
  keyring.set_password(
250
251
  self._service_name, self._service_name, self._oauth_token["refresh_token"]
251
252
  )
@@ -304,7 +305,7 @@ class AnaplanRefreshTokenAuth(_AnaplanAuth):
304
305
  :param token_url: The URL to post the refresh token request to in order to fetch the access
305
306
  token.
306
307
  """
307
- if not isinstance(token, dict) and all(
308
+ if not isinstance(token, dict) or not all(
308
309
  key in token for key in ("access_token", "refresh_token")
309
310
  ):
310
311
  raise ValueError(
@@ -322,7 +323,7 @@ class AnaplanRefreshTokenAuth(_AnaplanAuth):
322
323
  @property
323
324
  def token(self) -> dict[str, str]:
324
325
  """
325
- Returns the current token dictionary. You can safely use the `access_token`, but if you
326
+ Returns the current OAuth token. You can safely use the `access_token`, but you
326
327
  must not use the `refresh_token` outside of this class, if you expect to use this instance
327
328
  further. If you do use the `refresh_token` outside of this class, this will error on the
328
329
  next attempt to refresh the token, as the `refresh_token` can only be used once.
@@ -438,6 +438,17 @@ class Client(_BaseClient):
438
438
  )
439
439
  )
440
440
 
441
+ def get_optimizer_log(self, action_id: int, task_id: str) -> bytes:
442
+ """
443
+ Retrieves the solution logs of the specified optimization action task.
444
+ :param action_id: The identifier of the optimization action that was invoked.
445
+ :param task_id: The Task identifier, sometimes also referred to as the Correlation Id.
446
+ :return: The content of the solution logs.
447
+ """
448
+ return self._get_binary(
449
+ f"{self._url}/optimizeActions/{action_id}/tasks/{task_id}/solutionLogs"
450
+ )
451
+
441
452
  def invoke_action(self, action_id: int) -> str:
442
453
  """
443
454
  You may want to consider using `run_action()` instead.
@@ -120,6 +120,24 @@ provide the workspace and model IDs.
120
120
  await anaplan.run_action(116000000000)
121
121
  ...
122
122
  content = await anaplan.get_file(116000000000)
123
+
124
+
125
+ ### Optimizer Logs
126
+
127
+ You can download the Optimizer Logs from Anaplan. This will give you the Solution Logs produced by Gurobi, which can be
128
+ very useful for debugging and understanding the performance of your Optimizer models.
129
+
130
+ === "Synchronous"
131
+ ```python
132
+ log = anaplan.get_optimizer_log(
133
+ 117000000000, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
134
+ )
135
+ ```
136
+ === "Asynchronous"
137
+ ```python
138
+ log = await anaplan.get_optimizer_log(
139
+ 117000000000, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
140
+ )
123
141
  ```
124
142
 
125
143
  ## Applications
@@ -175,7 +175,7 @@ Warning. To automate this tedious task without losing any data, we can perform f
175
175
  )
176
176
  anaplan.transactional.reset_list_index(101000000000)
177
177
  result = anaplan.transactional.insert_list_items(
178
- 101000000008, [e.model_dump() for e in items] # Reimport all fields.
178
+ 101000000000, [e.model_dump() for e in items] # Reimport all fields.
179
179
  )
180
180
  ```
181
181
  === "Asynchronous"
@@ -186,6 +186,6 @@ Warning. To automate this tedious task without losing any data, we can perform f
186
186
  )
187
187
  await anaplan.transactional.reset_list_index(101000000000)
188
188
  result = await anaplan.transactional.insert_list_items(
189
- 101000000008, [e.model_dump() for e in items] # Reimport all fields.
189
+ 101000000000, [e.model_dump() for e in items] # Reimport all fields.
190
190
  )
191
191
  ```
@@ -68,11 +68,11 @@ nav:
68
68
  - Flows: 'api/sync/sync_flows_client.md'
69
69
  - OAuth: 'api/sync/sync_oauth_client.md'
70
70
  - Models:
71
- - ALM: 'api/models/alm.md'
72
- - Bulk: 'api/models/bulk.md'
73
- - CloudWorks: 'api/models/cloud_works.md'
74
- - Flows: 'api/models/flows.md'
75
- - Transactional: 'api/models/transactional.md'
71
+ - ALM: 'api/models/alm.md'
72
+ - Bulk: 'api/models/bulk.md'
73
+ - CloudWorks: 'api/models/cloud_works.md'
74
+ - Flows: 'api/models/flows.md'
75
+ - Transactional: 'api/models/transactional.md'
76
76
  - Exceptions: 'api/exceptions.md'
77
77
  - Concepts:
78
78
  - Anaplan Basics: 'anaplan_explained.md'
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "anaplan-sdk"
3
- version = "0.4.4a4"
3
+ version = "0.4.5"
4
4
  description = "Streamlined Python Interface for Anaplan"
5
5
  license = "Apache-2.0"
6
6
  authors = [{ name = "Vinzenz Klass", email = "vinzenz.klass@valantic.com" }]
@@ -30,15 +30,17 @@ keyring = ["keyring>=25.6.0,<26.0.0"]
30
30
 
31
31
  [dependency-groups]
32
32
  dev = [
33
- "ruff>=0.11.9",
34
- "pre-commit>=4.2.0",
35
- "pytest>=8.3.5",
36
- "pytest-asyncio>=0.26.0",
37
- "pytest-xdist>=3.6.1",
33
+ "ruff>=0.12.8",
34
+ "pre-commit>=4.3.0",
35
+ "pytest>=8.4.1",
36
+ "pytest-asyncio>=1.1.0",
37
+ "pytest-xdist>=3.8.0",
38
38
  "mkdocs>=1.6.1",
39
- "mkdocs-material>=9.5.41",
40
- "mkdocstrings[python]>=0.26.2",
41
- "griffe-fieldz>=0.2.1",
39
+ "mkdocs-material>=9.6.16",
40
+ "mkdocstrings[python]>=0.30.0",
41
+ "griffe>=1.7.3",
42
+ "fieldz>=0.1.2",
43
+ "griffe-fieldz>=0.3.0",
42
44
  "oauthlib>=3.2.2",
43
45
  "cryptography>=45.0.0",
44
46
  "keyring>=25.6.0",
@@ -4,7 +4,7 @@ requires-python = ">=3.10.4"
4
4
 
5
5
  [[package]]
6
6
  name = "anaplan-sdk"
7
- version = "0.4.4a4"
7
+ version = "0.4.5"
8
8
  source = { editable = "." }
9
9
  dependencies = [
10
10
  { name = "httpx" },
@@ -25,6 +25,8 @@ oauth = [
25
25
  [package.dev-dependencies]
26
26
  dev = [
27
27
  { name = "cryptography" },
28
+ { name = "fieldz" },
29
+ { name = "griffe" },
28
30
  { name = "griffe-fieldz" },
29
31
  { name = "keyring" },
30
32
  { name = "mkdocs" },
@@ -51,17 +53,19 @@ provides-extras = ["cert", "oauth", "keyring"]
51
53
  [package.metadata.requires-dev]
52
54
  dev = [
53
55
  { name = "cryptography", specifier = ">=45.0.0" },
54
- { name = "griffe-fieldz", specifier = ">=0.2.1" },
56
+ { name = "fieldz", specifier = ">=0.1.2" },
57
+ { name = "griffe", specifier = ">=1.7.3" },
58
+ { name = "griffe-fieldz", specifier = ">=0.3.0" },
55
59
  { name = "keyring", specifier = ">=25.6.0" },
56
60
  { name = "mkdocs", specifier = ">=1.6.1" },
57
- { name = "mkdocs-material", specifier = ">=9.5.41" },
58
- { name = "mkdocstrings", extras = ["python"], specifier = ">=0.26.2" },
61
+ { name = "mkdocs-material", specifier = ">=9.6.16" },
62
+ { name = "mkdocstrings", extras = ["python"], specifier = ">=0.30.0" },
59
63
  { name = "oauthlib", specifier = ">=3.2.2" },
60
- { name = "pre-commit", specifier = ">=4.2.0" },
61
- { name = "pytest", specifier = ">=8.3.5" },
62
- { name = "pytest-asyncio", specifier = ">=0.26.0" },
63
- { name = "pytest-xdist", specifier = ">=3.6.1" },
64
- { name = "ruff", specifier = ">=0.11.9" },
64
+ { name = "pre-commit", specifier = ">=4.3.0" },
65
+ { name = "pytest", specifier = ">=8.4.1" },
66
+ { name = "pytest-asyncio", specifier = ">=1.1.0" },
67
+ { name = "pytest-xdist", specifier = ">=3.8.0" },
68
+ { name = "ruff", specifier = ">=0.12.8" },
65
69
  ]
66
70
 
67
71
  [[package]]
@@ -97,6 +101,15 @@ wheels = [
97
101
  { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" },
98
102
  ]
99
103
 
104
+ [[package]]
105
+ name = "backports-asyncio-runner"
106
+ version = "1.2.0"
107
+ source = { registry = "https://pypi.org/simple" }
108
+ sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893, upload-time = "2025-07-02T02:27:15.685Z" }
109
+ wheels = [
110
+ { url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313, upload-time = "2025-07-02T02:27:14.263Z" },
111
+ ]
112
+
100
113
  [[package]]
101
114
  name = "backports-tarfile"
102
115
  version = "1.2.0"
@@ -108,15 +121,16 @@ wheels = [
108
121
 
109
122
  [[package]]
110
123
  name = "backrefs"
111
- version = "5.8"
124
+ version = "5.9"
112
125
  source = { registry = "https://pypi.org/simple" }
113
- sdist = { url = "https://files.pythonhosted.org/packages/6c/46/caba1eb32fa5784428ab401a5487f73db4104590ecd939ed9daaf18b47e0/backrefs-5.8.tar.gz", hash = "sha256:2cab642a205ce966af3dd4b38ee36009b31fa9502a35fd61d59ccc116e40a6bd", size = 6773994, upload-time = "2025-02-25T18:15:32.003Z" }
126
+ sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857, upload-time = "2025-06-22T19:34:13.97Z" }
114
127
  wheels = [
115
- { url = "https://files.pythonhosted.org/packages/bf/cb/d019ab87fe70e0fe3946196d50d6a4428623dc0c38a6669c8cae0320fbf3/backrefs-5.8-py310-none-any.whl", hash = "sha256:c67f6638a34a5b8730812f5101376f9d41dc38c43f1fdc35cb54700f6ed4465d", size = 380337, upload-time = "2025-02-25T16:53:14.607Z" },
116
- { url = "https://files.pythonhosted.org/packages/a9/86/abd17f50ee21b2248075cb6924c6e7f9d23b4925ca64ec660e869c2633f1/backrefs-5.8-py311-none-any.whl", hash = "sha256:2e1c15e4af0e12e45c8701bd5da0902d326b2e200cafcd25e49d9f06d44bb61b", size = 392142, upload-time = "2025-02-25T16:53:17.266Z" },
117
- { url = "https://files.pythonhosted.org/packages/b3/04/7b415bd75c8ab3268cc138c76fa648c19495fcc7d155508a0e62f3f82308/backrefs-5.8-py312-none-any.whl", hash = "sha256:bbef7169a33811080d67cdf1538c8289f76f0942ff971222a16034da88a73486", size = 398021, upload-time = "2025-02-25T16:53:26.378Z" },
118
- { url = "https://files.pythonhosted.org/packages/04/b8/60dcfb90eb03a06e883a92abbc2ab95c71f0d8c9dd0af76ab1d5ce0b1402/backrefs-5.8-py313-none-any.whl", hash = "sha256:e3a63b073867dbefd0536425f43db618578528e3896fb77be7141328642a1585", size = 399915, upload-time = "2025-02-25T16:53:28.167Z" },
119
- { url = "https://files.pythonhosted.org/packages/0c/37/fb6973edeb700f6e3d6ff222400602ab1830446c25c7b4676d8de93e65b8/backrefs-5.8-py39-none-any.whl", hash = "sha256:a66851e4533fb5b371aa0628e1fee1af05135616b86140c9d787a2ffdf4b8fdc", size = 380336, upload-time = "2025-02-25T16:53:29.858Z" },
128
+ { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267, upload-time = "2025-06-22T19:34:05.252Z" },
129
+ { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072, upload-time = "2025-06-22T19:34:06.743Z" },
130
+ { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947, upload-time = "2025-06-22T19:34:08.172Z" },
131
+ { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843, upload-time = "2025-06-22T19:34:09.68Z" },
132
+ { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762, upload-time = "2025-06-22T19:34:11.037Z" },
133
+ { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload-time = "2025-06-22T19:34:12.405Z" },
120
134
  ]
121
135
 
122
136
  [[package]]
@@ -355,14 +369,14 @@ wheels = [
355
369
 
356
370
  [[package]]
357
371
  name = "fieldz"
358
- version = "0.1.0"
372
+ version = "0.1.2"
359
373
  source = { registry = "https://pypi.org/simple" }
360
374
  dependencies = [
361
375
  { name = "typing-extensions" },
362
376
  ]
363
- sdist = { url = "https://files.pythonhosted.org/packages/24/55/6b5cc16fcd242610bed76486980594e9f0ab2350dac041fcc6cb63daa38f/fieldz-0.1.0.tar.gz", hash = "sha256:ee3352534bc5d04ee8e1cafa5f59add2c11bea0fc2ecefe18454ccfdc7e21fb2", size = 16972, upload-time = "2024-08-16T14:24:41.27Z" }
377
+ sdist = { url = "https://files.pythonhosted.org/packages/90/62/698c5cc2e7d4c8c89e63033e2e9d3c74902a1bf28782712eacb0653097ce/fieldz-0.1.2.tar.gz", hash = "sha256:0448ed5dacb13eaa49da0db786e87fae298fbd2652d26c510e5d7aea6b6bebf4", size = 17277, upload-time = "2025-06-30T18:06:40.881Z" }
364
378
  wheels = [
365
- { url = "https://files.pythonhosted.org/packages/86/2d/90a713b473206f5505e01fbf86d881b3856cb3461503d9b073bf55b19ce6/fieldz-0.1.0-py3-none-any.whl", hash = "sha256:0825a45396877769b107ce016e63f6fedbe625a0ace3e56fe2f9d6d61c7ea8df", size = 17560, upload-time = "2024-08-16T14:24:40.319Z" },
379
+ { url = "https://files.pythonhosted.org/packages/6d/8c/8958392cade27a272daf45d09a08473073dedeccad94b097dfeb898d969f/fieldz-0.1.2-py3-none-any.whl", hash = "sha256:e25884d2821a2d5638ef8d4d8bce5d1039359cfcb46d0f93df8cb1f7c2eb3a2e", size = 17878, upload-time = "2025-06-30T18:06:39.322Z" },
366
380
  ]
367
381
 
368
382
  [[package]]
@@ -400,15 +414,15 @@ wheels = [
400
414
 
401
415
  [[package]]
402
416
  name = "griffe-fieldz"
403
- version = "0.2.1"
417
+ version = "0.3.0"
404
418
  source = { registry = "https://pypi.org/simple" }
405
419
  dependencies = [
406
420
  { name = "fieldz" },
407
421
  { name = "griffe" },
408
422
  ]
409
- sdist = { url = "https://files.pythonhosted.org/packages/95/95/5c47b6c54d106c76aad9b51177401ad4215a0de910c6853b689a2c6d07da/griffe_fieldz-0.2.1.tar.gz", hash = "sha256:7371693cdd045ac95aaebd16a81586d8dfa72c30e2d4519e0dde0d80f8ef0dc7", size = 8148, upload-time = "2025-01-12T20:55:09.063Z" }
423
+ sdist = { url = "https://files.pythonhosted.org/packages/c5/6a/94754bf39fd63ba424c667b2abf0ade78e3878e223591d1fb9c3e8a77bce/griffe_fieldz-0.3.0.tar.gz", hash = "sha256:42e7707dac51d38e26fb7f3f7f51429da9b47e98060bfeb81a4287456d5b8a89", size = 10149, upload-time = "2025-07-30T21:43:10.042Z" }
410
424
  wheels = [
411
- { url = "https://files.pythonhosted.org/packages/6f/fc/c059d128d77a369f54a3753162a38cd7668e5b4d14464672001a50cf2e9d/griffe_fieldz-0.2.1-py3-none-any.whl", hash = "sha256:04ae78b487c832a38b0495f971784d513da413b867c51e429f39d74f76d4f941", size = 5691, upload-time = "2025-01-12T20:55:07.634Z" },
425
+ { url = "https://files.pythonhosted.org/packages/4d/33/cc527c11132a6274724a04938d50e1ff2b54a5f5943cd0480427571e1adb/griffe_fieldz-0.3.0-py3-none-any.whl", hash = "sha256:52e02fdcbdf6dea3c8c95756d1e0b30861569f871d19437fda702776fde4e64d", size = 6577, upload-time = "2025-07-30T21:43:09.073Z" },
412
426
  ]
413
427
 
414
428
  [[package]]
@@ -692,7 +706,7 @@ wheels = [
692
706
 
693
707
  [[package]]
694
708
  name = "mkdocs-material"
695
- version = "9.6.14"
709
+ version = "9.6.16"
696
710
  source = { registry = "https://pypi.org/simple" }
697
711
  dependencies = [
698
712
  { name = "babel" },
@@ -707,9 +721,9 @@ dependencies = [
707
721
  { name = "pymdown-extensions" },
708
722
  { name = "requests" },
709
723
  ]
710
- sdist = { url = "https://files.pythonhosted.org/packages/b3/fa/0101de32af88f87cf5cc23ad5f2e2030d00995f74e616306513431b8ab4b/mkdocs_material-9.6.14.tar.gz", hash = "sha256:39d795e90dce6b531387c255bd07e866e027828b7346d3eba5ac3de265053754", size = 3951707, upload-time = "2025-05-13T13:27:57.173Z" }
724
+ sdist = { url = "https://files.pythonhosted.org/packages/dd/84/aec27a468c5e8c27689c71b516fb5a0d10b8fca45b9ad2dd9d6e43bc4296/mkdocs_material-9.6.16.tar.gz", hash = "sha256:d07011df4a5c02ee0877496d9f1bfc986cfb93d964799b032dd99fe34c0e9d19", size = 4028828, upload-time = "2025-07-26T15:53:47.542Z" }
711
725
  wheels = [
712
- { url = "https://files.pythonhosted.org/packages/3a/a1/7fdb959ad592e013c01558822fd3c22931a95a0f08cf0a7c36da13a5b2b5/mkdocs_material-9.6.14-py3-none-any.whl", hash = "sha256:3b9cee6d3688551bf7a8e8f41afda97a3c39a12f0325436d76c86706114b721b", size = 8703767, upload-time = "2025-05-13T13:27:54.089Z" },
726
+ { url = "https://files.pythonhosted.org/packages/65/f4/90ad67125b4dd66e7884e4dbdfab82e3679eb92b751116f8bb25ccfe2f0c/mkdocs_material-9.6.16-py3-none-any.whl", hash = "sha256:8d1a1282b892fe1fdf77bfeb08c485ba3909dd743c9ba69a19a40f637c6ec18c", size = 9223743, upload-time = "2025-07-26T15:53:44.236Z" },
713
727
  ]
714
728
 
715
729
  [[package]]
@@ -723,7 +737,7 @@ wheels = [
723
737
 
724
738
  [[package]]
725
739
  name = "mkdocstrings"
726
- version = "0.29.1"
740
+ version = "0.30.0"
727
741
  source = { registry = "https://pypi.org/simple" }
728
742
  dependencies = [
729
743
  { name = "jinja2" },
@@ -733,9 +747,9 @@ dependencies = [
733
747
  { name = "mkdocs-autorefs" },
734
748
  { name = "pymdown-extensions" },
735
749
  ]
736
- sdist = { url = "https://files.pythonhosted.org/packages/41/e8/d22922664a627a0d3d7ff4a6ca95800f5dde54f411982591b4621a76225d/mkdocstrings-0.29.1.tar.gz", hash = "sha256:8722f8f8c5cd75da56671e0a0c1bbed1df9946c0cef74794d6141b34011abd42", size = 1212686, upload-time = "2025-03-31T08:33:11.997Z" }
750
+ sdist = { url = "https://files.pythonhosted.org/packages/e2/0a/7e4776217d4802009c8238c75c5345e23014a4706a8414a62c0498858183/mkdocstrings-0.30.0.tar.gz", hash = "sha256:5d8019b9c31ddacd780b6784ffcdd6f21c408f34c0bd1103b5351d609d5b4444", size = 106597, upload-time = "2025-07-22T23:48:45.998Z" }
737
751
  wheels = [
738
- { url = "https://files.pythonhosted.org/packages/98/14/22533a578bf8b187e05d67e2c1721ce10e3f526610eebaf7a149d557ea7a/mkdocstrings-0.29.1-py3-none-any.whl", hash = "sha256:37a9736134934eea89cbd055a513d40a020d87dfcae9e3052c2a6b8cd4af09b6", size = 1631075, upload-time = "2025-03-31T08:33:09.661Z" },
752
+ { url = "https://files.pythonhosted.org/packages/de/b4/3c5eac68f31e124a55d255d318c7445840fa1be55e013f507556d6481913/mkdocstrings-0.30.0-py3-none-any.whl", hash = "sha256:ae9e4a0d8c1789697ac776f2e034e2ddd71054ae1cf2c2bb1433ccfd07c226f2", size = 36579, upload-time = "2025-07-22T23:48:44.152Z" },
739
753
  ]
740
754
 
741
755
  [package.optional-dependencies]
@@ -745,7 +759,7 @@ python = [
745
759
 
746
760
  [[package]]
747
761
  name = "mkdocstrings-python"
748
- version = "1.16.10"
762
+ version = "1.16.12"
749
763
  source = { registry = "https://pypi.org/simple" }
750
764
  dependencies = [
751
765
  { name = "griffe" },
@@ -753,9 +767,9 @@ dependencies = [
753
767
  { name = "mkdocstrings" },
754
768
  { name = "typing-extensions", marker = "python_full_version < '3.11'" },
755
769
  ]
756
- sdist = { url = "https://files.pythonhosted.org/packages/44/c8/600c4201b6b9e72bab16802316d0c90ce04089f8e6bb5e064cd2a5abba7e/mkdocstrings_python-1.16.10.tar.gz", hash = "sha256:f9eedfd98effb612ab4d0ed6dd2b73aff6eba5215e0a65cea6d877717f75502e", size = 205771, upload-time = "2025-04-03T14:24:48.12Z" }
770
+ sdist = { url = "https://files.pythonhosted.org/packages/bf/ed/b886f8c714fd7cccc39b79646b627dbea84cd95c46be43459ef46852caf0/mkdocstrings_python-1.16.12.tar.gz", hash = "sha256:9b9eaa066e0024342d433e332a41095c4e429937024945fea511afe58f63175d", size = 206065, upload-time = "2025-06-03T12:52:49.276Z" }
757
771
  wheels = [
758
- { url = "https://files.pythonhosted.org/packages/53/37/19549c5e0179785308cc988a68e16aa7550e4e270ec8a9878334e86070c6/mkdocstrings_python-1.16.10-py3-none-any.whl", hash = "sha256:63bb9f01f8848a644bdb6289e86dc38ceddeaa63ecc2e291e3b2ca52702a6643", size = 124112, upload-time = "2025-04-03T14:24:46.561Z" },
772
+ { url = "https://files.pythonhosted.org/packages/3b/dd/a24ee3de56954bfafb6ede7cd63c2413bb842cc48eb45e41c43a05a33074/mkdocstrings_python-1.16.12-py3-none-any.whl", hash = "sha256:22ded3a63b3d823d57457a70ff9860d5a4de9e8b1e482876fc9baabaf6f5f374", size = 124287, upload-time = "2025-06-03T12:52:47.819Z" },
759
773
  ]
760
774
 
761
775
  [[package]]
@@ -832,7 +846,7 @@ wheels = [
832
846
 
833
847
  [[package]]
834
848
  name = "pre-commit"
835
- version = "4.2.0"
849
+ version = "4.3.0"
836
850
  source = { registry = "https://pypi.org/simple" }
837
851
  dependencies = [
838
852
  { name = "cfgv" },
@@ -841,9 +855,9 @@ dependencies = [
841
855
  { name = "pyyaml" },
842
856
  { name = "virtualenv" },
843
857
  ]
844
- sdist = { url = "https://files.pythonhosted.org/packages/08/39/679ca9b26c7bb2999ff122d50faa301e49af82ca9c066ec061cfbc0c6784/pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146", size = 193424, upload-time = "2025-03-18T21:35:20.987Z" }
858
+ sdist = { url = "https://files.pythonhosted.org/packages/ff/29/7cf5bbc236333876e4b41f56e06857a87937ce4bf91e117a6991a2dbb02a/pre_commit-4.3.0.tar.gz", hash = "sha256:499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16", size = 193792, upload-time = "2025-08-09T18:56:14.651Z" }
845
859
  wheels = [
846
- { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707, upload-time = "2025-03-18T21:35:19.343Z" },
860
+ { url = "https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl", hash = "sha256:2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8", size = 220965, upload-time = "2025-08-09T18:56:13.192Z" },
847
861
  ]
848
862
 
849
863
  [[package]]
@@ -981,7 +995,7 @@ wheels = [
981
995
 
982
996
  [[package]]
983
997
  name = "pytest"
984
- version = "8.3.5"
998
+ version = "8.4.1"
985
999
  source = { registry = "https://pypi.org/simple" }
986
1000
  dependencies = [
987
1001
  { name = "colorama", marker = "sys_platform == 'win32'" },
@@ -989,36 +1003,38 @@ dependencies = [
989
1003
  { name = "iniconfig" },
990
1004
  { name = "packaging" },
991
1005
  { name = "pluggy" },
1006
+ { name = "pygments" },
992
1007
  { name = "tomli", marker = "python_full_version < '3.11'" },
993
1008
  ]
994
- sdist = { url = "https://files.pythonhosted.org/packages/ae/3c/c9d525a414d506893f0cd8a8d0de7706446213181570cdbd766691164e40/pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845", size = 1450891, upload-time = "2025-03-02T12:54:54.503Z" }
1009
+ sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload-time = "2025-06-18T05:48:06.109Z" }
995
1010
  wheels = [
996
- { url = "https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", size = 343634, upload-time = "2025-03-02T12:54:52.069Z" },
1011
+ { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" },
997
1012
  ]
998
1013
 
999
1014
  [[package]]
1000
1015
  name = "pytest-asyncio"
1001
- version = "0.26.0"
1016
+ version = "1.1.0"
1002
1017
  source = { registry = "https://pypi.org/simple" }
1003
1018
  dependencies = [
1019
+ { name = "backports-asyncio-runner", marker = "python_full_version < '3.11'" },
1004
1020
  { name = "pytest" },
1005
1021
  ]
1006
- sdist = { url = "https://files.pythonhosted.org/packages/8e/c4/453c52c659521066969523e87d85d54139bbd17b78f09532fb8eb8cdb58e/pytest_asyncio-0.26.0.tar.gz", hash = "sha256:c4df2a697648241ff39e7f0e4a73050b03f123f760673956cf0d72a4990e312f", size = 54156, upload-time = "2025-03-25T06:22:28.883Z" }
1022
+ sdist = { url = "https://files.pythonhosted.org/packages/4e/51/f8794af39eeb870e87a8c8068642fc07bce0c854d6865d7dd0f2a9d338c2/pytest_asyncio-1.1.0.tar.gz", hash = "sha256:796aa822981e01b68c12e4827b8697108f7205020f24b5793b3c41555dab68ea", size = 46652, upload-time = "2025-07-16T04:29:26.393Z" }
1007
1023
  wheels = [
1008
- { url = "https://files.pythonhosted.org/packages/20/7f/338843f449ace853647ace35870874f69a764d251872ed1b4de9f234822c/pytest_asyncio-0.26.0-py3-none-any.whl", hash = "sha256:7b51ed894f4fbea1340262bdae5135797ebbe21d8638978e35d31c6d19f72fb0", size = 19694, upload-time = "2025-03-25T06:22:27.807Z" },
1024
+ { url = "https://files.pythonhosted.org/packages/c7/9d/bf86eddabf8c6c9cb1ea9a869d6873b46f105a5d292d3a6f7071f5b07935/pytest_asyncio-1.1.0-py3-none-any.whl", hash = "sha256:5fe2d69607b0bd75c656d1211f969cadba035030156745ee09e7d71740e58ecf", size = 15157, upload-time = "2025-07-16T04:29:24.929Z" },
1009
1025
  ]
1010
1026
 
1011
1027
  [[package]]
1012
1028
  name = "pytest-xdist"
1013
- version = "3.6.1"
1029
+ version = "3.8.0"
1014
1030
  source = { registry = "https://pypi.org/simple" }
1015
1031
  dependencies = [
1016
1032
  { name = "execnet" },
1017
1033
  { name = "pytest" },
1018
1034
  ]
1019
- sdist = { url = "https://files.pythonhosted.org/packages/41/c4/3c310a19bc1f1e9ef50075582652673ef2bfc8cd62afef9585683821902f/pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d", size = 84060, upload-time = "2024-04-28T19:29:54.414Z" }
1035
+ sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload-time = "2025-07-01T13:30:59.346Z" }
1020
1036
  wheels = [
1021
- { url = "https://files.pythonhosted.org/packages/6d/82/1d96bf03ee4c0fdc3c0cbe61470070e659ca78dc0086fb88b66c185e2449/pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7", size = 46108, upload-time = "2024-04-28T19:29:52.813Z" },
1037
+ { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload-time = "2025-07-01T13:30:56.632Z" },
1022
1038
  ]
1023
1039
 
1024
1040
  [[package]]
@@ -1115,27 +1131,27 @@ wheels = [
1115
1131
 
1116
1132
  [[package]]
1117
1133
  name = "ruff"
1118
- version = "0.11.9"
1119
- source = { registry = "https://pypi.org/simple" }
1120
- sdist = { url = "https://files.pythonhosted.org/packages/f5/e7/e55dda1c92cdcf34b677ebef17486669800de01e887b7831a1b8fdf5cb08/ruff-0.11.9.tar.gz", hash = "sha256:ebd58d4f67a00afb3a30bf7d383e52d0e036e6195143c6db7019604a05335517", size = 4132134, upload-time = "2025-05-09T16:19:41.511Z" }
1121
- wheels = [
1122
- { url = "https://files.pythonhosted.org/packages/fb/71/75dfb7194fe6502708e547941d41162574d1f579c4676a8eb645bf1a6842/ruff-0.11.9-py3-none-linux_armv6l.whl", hash = "sha256:a31a1d143a5e6f499d1fb480f8e1e780b4dfdd580f86e05e87b835d22c5c6f8c", size = 10335453, upload-time = "2025-05-09T16:18:58.2Z" },
1123
- { url = "https://files.pythonhosted.org/packages/74/fc/ad80c869b1732f53c4232bbf341f33c5075b2c0fb3e488983eb55964076a/ruff-0.11.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:66bc18ca783b97186a1f3100e91e492615767ae0a3be584e1266aa9051990722", size = 11072566, upload-time = "2025-05-09T16:19:01.432Z" },
1124
- { url = "https://files.pythonhosted.org/packages/87/0d/0ccececef8a0671dae155cbf7a1f90ea2dd1dba61405da60228bbe731d35/ruff-0.11.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:bd576cd06962825de8aece49f28707662ada6a1ff2db848d1348e12c580acbf1", size = 10435020, upload-time = "2025-05-09T16:19:03.897Z" },
1125
- { url = "https://files.pythonhosted.org/packages/52/01/e249e1da6ad722278094e183cbf22379a9bbe5f21a3e46cef24ccab76e22/ruff-0.11.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b1d18b4be8182cc6fddf859ce432cc9631556e9f371ada52f3eaefc10d878de", size = 10593935, upload-time = "2025-05-09T16:19:06.455Z" },
1126
- { url = "https://files.pythonhosted.org/packages/ed/9a/40cf91f61e3003fe7bd43f1761882740e954506c5a0f9097b1cff861f04c/ruff-0.11.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0f3f46f759ac623e94824b1e5a687a0df5cd7f5b00718ff9c24f0a894a683be7", size = 10172971, upload-time = "2025-05-09T16:19:10.261Z" },
1127
- { url = "https://files.pythonhosted.org/packages/61/12/d395203de1e8717d7a2071b5a340422726d4736f44daf2290aad1085075f/ruff-0.11.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f34847eea11932d97b521450cf3e1d17863cfa5a94f21a056b93fb86f3f3dba2", size = 11748631, upload-time = "2025-05-09T16:19:12.307Z" },
1128
- { url = "https://files.pythonhosted.org/packages/66/d6/ef4d5eba77677eab511644c37c55a3bb8dcac1cdeb331123fe342c9a16c9/ruff-0.11.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f33b15e00435773df97cddcd263578aa83af996b913721d86f47f4e0ee0ff271", size = 12409236, upload-time = "2025-05-09T16:19:15.006Z" },
1129
- { url = "https://files.pythonhosted.org/packages/c5/8f/5a2c5fc6124dd925a5faf90e1089ee9036462118b619068e5b65f8ea03df/ruff-0.11.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b27613a683b086f2aca8996f63cb3dd7bc49e6eccf590563221f7b43ded3f65", size = 11881436, upload-time = "2025-05-09T16:19:17.063Z" },
1130
- { url = "https://files.pythonhosted.org/packages/39/d1/9683f469ae0b99b95ef99a56cfe8c8373c14eba26bd5c622150959ce9f64/ruff-0.11.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e0d88756e63e8302e630cee3ce2ffb77859797cc84a830a24473939e6da3ca6", size = 13982759, upload-time = "2025-05-09T16:19:19.693Z" },
1131
- { url = "https://files.pythonhosted.org/packages/4e/0b/c53a664f06e0faab596397867c6320c3816df479e888fe3af63bc3f89699/ruff-0.11.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:537c82c9829d7811e3aa680205f94c81a2958a122ac391c0eb60336ace741a70", size = 11541985, upload-time = "2025-05-09T16:19:21.831Z" },
1132
- { url = "https://files.pythonhosted.org/packages/23/a0/156c4d7e685f6526a636a60986ee4a3c09c8c4e2a49b9a08c9913f46c139/ruff-0.11.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:440ac6a7029f3dee7d46ab7de6f54b19e34c2b090bb4f2480d0a2d635228f381", size = 10465775, upload-time = "2025-05-09T16:19:24.401Z" },
1133
- { url = "https://files.pythonhosted.org/packages/43/d5/88b9a6534d9d4952c355e38eabc343df812f168a2c811dbce7d681aeb404/ruff-0.11.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:71c539bac63d0788a30227ed4d43b81353c89437d355fdc52e0cda4ce5651787", size = 10170957, upload-time = "2025-05-09T16:19:27.08Z" },
1134
- { url = "https://files.pythonhosted.org/packages/f0/b8/2bd533bdaf469dc84b45815ab806784d561fab104d993a54e1852596d581/ruff-0.11.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c67117bc82457e4501473c5f5217d49d9222a360794bfb63968e09e70f340abd", size = 11143307, upload-time = "2025-05-09T16:19:29.462Z" },
1135
- { url = "https://files.pythonhosted.org/packages/2f/d9/43cfba291788459b9bfd4e09a0479aa94d05ab5021d381a502d61a807ec1/ruff-0.11.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e4b78454f97aa454586e8a5557facb40d683e74246c97372af3c2d76901d697b", size = 11603026, upload-time = "2025-05-09T16:19:31.569Z" },
1136
- { url = "https://files.pythonhosted.org/packages/22/e6/7ed70048e89b01d728ccc950557a17ecf8df4127b08a56944b9d0bae61bc/ruff-0.11.9-py3-none-win32.whl", hash = "sha256:7fe1bc950e7d7b42caaee2a8a3bc27410547cc032c9558ee2e0f6d3b209e845a", size = 10548627, upload-time = "2025-05-09T16:19:33.657Z" },
1137
- { url = "https://files.pythonhosted.org/packages/90/36/1da5d566271682ed10f436f732e5f75f926c17255c9c75cefb77d4bf8f10/ruff-0.11.9-py3-none-win_amd64.whl", hash = "sha256:52edaa4a6d70f8180343a5b7f030c7edd36ad180c9f4d224959c2d689962d964", size = 11634340, upload-time = "2025-05-09T16:19:35.815Z" },
1138
- { url = "https://files.pythonhosted.org/packages/40/f7/70aad26e5877c8f7ee5b161c4c9fa0100e63fc4c944dc6d97b9c7e871417/ruff-0.11.9-py3-none-win_arm64.whl", hash = "sha256:bcf42689c22f2e240f496d0c183ef2c6f7b35e809f12c1db58f75d9aa8d630ca", size = 10741080, upload-time = "2025-05-09T16:19:39.605Z" },
1134
+ version = "0.12.8"
1135
+ source = { registry = "https://pypi.org/simple" }
1136
+ sdist = { url = "https://files.pythonhosted.org/packages/4b/da/5bd7565be729e86e1442dad2c9a364ceeff82227c2dece7c29697a9795eb/ruff-0.12.8.tar.gz", hash = "sha256:4cb3a45525176e1009b2b64126acf5f9444ea59066262791febf55e40493a033", size = 5242373, upload-time = "2025-08-07T19:05:47.268Z" }
1137
+ wheels = [
1138
+ { url = "https://files.pythonhosted.org/packages/c9/1e/c843bfa8ad1114fab3eb2b78235dda76acd66384c663a4e0415ecc13aa1e/ruff-0.12.8-py3-none-linux_armv6l.whl", hash = "sha256:63cb5a5e933fc913e5823a0dfdc3c99add73f52d139d6cd5cc8639d0e0465513", size = 11675315, upload-time = "2025-08-07T19:05:06.15Z" },
1139
+ { url = "https://files.pythonhosted.org/packages/24/ee/af6e5c2a8ca3a81676d5480a1025494fd104b8896266502bb4de2a0e8388/ruff-0.12.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9a9bbe28f9f551accf84a24c366c1aa8774d6748438b47174f8e8565ab9dedbc", size = 12456653, upload-time = "2025-08-07T19:05:09.759Z" },
1140
+ { url = "https://files.pythonhosted.org/packages/99/9d/e91f84dfe3866fa648c10512904991ecc326fd0b66578b324ee6ecb8f725/ruff-0.12.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:2fae54e752a3150f7ee0e09bce2e133caf10ce9d971510a9b925392dc98d2fec", size = 11659690, upload-time = "2025-08-07T19:05:12.551Z" },
1141
+ { url = "https://files.pythonhosted.org/packages/fe/ac/a363d25ec53040408ebdd4efcee929d48547665858ede0505d1d8041b2e5/ruff-0.12.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0acbcf01206df963d9331b5838fb31f3b44fa979ee7fa368b9b9057d89f4a53", size = 11896923, upload-time = "2025-08-07T19:05:14.821Z" },
1142
+ { url = "https://files.pythonhosted.org/packages/58/9f/ea356cd87c395f6ade9bb81365bd909ff60860975ca1bc39f0e59de3da37/ruff-0.12.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae3e7504666ad4c62f9ac8eedb52a93f9ebdeb34742b8b71cd3cccd24912719f", size = 11477612, upload-time = "2025-08-07T19:05:16.712Z" },
1143
+ { url = "https://files.pythonhosted.org/packages/1a/46/92e8fa3c9dcfd49175225c09053916cb97bb7204f9f899c2f2baca69e450/ruff-0.12.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb82efb5d35d07497813a1c5647867390a7d83304562607f3579602fa3d7d46f", size = 13182745, upload-time = "2025-08-07T19:05:18.709Z" },
1144
+ { url = "https://files.pythonhosted.org/packages/5e/c4/f2176a310f26e6160deaf661ef60db6c3bb62b7a35e57ae28f27a09a7d63/ruff-0.12.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:dbea798fc0065ad0b84a2947b0aff4233f0cb30f226f00a2c5850ca4393de609", size = 14206885, upload-time = "2025-08-07T19:05:21.025Z" },
1145
+ { url = "https://files.pythonhosted.org/packages/87/9d/98e162f3eeeb6689acbedbae5050b4b3220754554526c50c292b611d3a63/ruff-0.12.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49ebcaccc2bdad86fd51b7864e3d808aad404aab8df33d469b6e65584656263a", size = 13639381, upload-time = "2025-08-07T19:05:23.423Z" },
1146
+ { url = "https://files.pythonhosted.org/packages/81/4e/1b7478b072fcde5161b48f64774d6edd59d6d198e4ba8918d9f4702b8043/ruff-0.12.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ac9c570634b98c71c88cb17badd90f13fc076a472ba6ef1d113d8ed3df109fb", size = 12613271, upload-time = "2025-08-07T19:05:25.507Z" },
1147
+ { url = "https://files.pythonhosted.org/packages/e8/67/0c3c9179a3ad19791ef1b8f7138aa27d4578c78700551c60d9260b2c660d/ruff-0.12.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:560e0cd641e45591a3e42cb50ef61ce07162b9c233786663fdce2d8557d99818", size = 12847783, upload-time = "2025-08-07T19:05:28.14Z" },
1148
+ { url = "https://files.pythonhosted.org/packages/4e/2a/0b6ac3dd045acf8aa229b12c9c17bb35508191b71a14904baf99573a21bd/ruff-0.12.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:71c83121512e7743fba5a8848c261dcc454cafb3ef2934a43f1b7a4eb5a447ea", size = 11702672, upload-time = "2025-08-07T19:05:30.413Z" },
1149
+ { url = "https://files.pythonhosted.org/packages/9d/ee/f9fdc9f341b0430110de8b39a6ee5fa68c5706dc7c0aa940817947d6937e/ruff-0.12.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:de4429ef2ba091ecddedd300f4c3f24bca875d3d8b23340728c3cb0da81072c3", size = 11440626, upload-time = "2025-08-07T19:05:32.492Z" },
1150
+ { url = "https://files.pythonhosted.org/packages/89/fb/b3aa2d482d05f44e4d197d1de5e3863feb13067b22c571b9561085c999dc/ruff-0.12.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a2cab5f60d5b65b50fba39a8950c8746df1627d54ba1197f970763917184b161", size = 12462162, upload-time = "2025-08-07T19:05:34.449Z" },
1151
+ { url = "https://files.pythonhosted.org/packages/18/9f/5c5d93e1d00d854d5013c96e1a92c33b703a0332707a7cdbd0a4880a84fb/ruff-0.12.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:45c32487e14f60b88aad6be9fd5da5093dbefb0e3e1224131cb1d441d7cb7d46", size = 12913212, upload-time = "2025-08-07T19:05:36.541Z" },
1152
+ { url = "https://files.pythonhosted.org/packages/71/13/ab9120add1c0e4604c71bfc2e4ef7d63bebece0cfe617013da289539cef8/ruff-0.12.8-py3-none-win32.whl", hash = "sha256:daf3475060a617fd5bc80638aeaf2f5937f10af3ec44464e280a9d2218e720d3", size = 11694382, upload-time = "2025-08-07T19:05:38.468Z" },
1153
+ { url = "https://files.pythonhosted.org/packages/f6/dc/a2873b7c5001c62f46266685863bee2888caf469d1edac84bf3242074be2/ruff-0.12.8-py3-none-win_amd64.whl", hash = "sha256:7209531f1a1fcfbe8e46bcd7ab30e2f43604d8ba1c49029bb420b103d0b5f76e", size = 12740482, upload-time = "2025-08-07T19:05:40.391Z" },
1154
+ { url = "https://files.pythonhosted.org/packages/cb/5c/799a1efb8b5abab56e8a9f2a0b72d12bd64bb55815e9476c7d0a2887d2f7/ruff-0.12.8-py3-none-win_arm64.whl", hash = "sha256:c90e1a334683ce41b0e7a04f41790c429bf5073b62c1ae701c9dc5b3d14f0749", size = 11884718, upload-time = "2025-08-07T19:05:42.866Z" },
1139
1155
  ]
1140
1156
 
1141
1157
  [[package]]
File without changes
File without changes
File without changes