anaplan-sdk 0.4.0a3__tar.gz → 0.4.1__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.
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/PKG-INFO +3 -3
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_async_clients/_bulk.py +5 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_auth.py +13 -5
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_clients/_bulk.py +5 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/guides/authentication.md +35 -0
- anaplan_sdk-0.4.1/docs/img/anaplan-sdk.webp +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/pyproject.toml +4 -4
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/uv.lock +42 -42
- anaplan_sdk-0.4.0a3/docs/img/anaplan-sdk.webp +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/.github/dependabot.yml +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/.github/workflows/docs.yml +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/.github/workflows/lint.yml +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/.github/workflows/tests.yml +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/.gitignore +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/.pre-commit-config.yaml +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/LICENSE +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/README.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/__init__.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_async_clients/__init__.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_async_clients/_alm.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_async_clients/_audit.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_async_clients/_cloud_works.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_async_clients/_cw_flow.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_async_clients/_transactional.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_base.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_clients/__init__.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_clients/_alm.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_clients/_audit.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_clients/_cloud_works.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_clients/_cw_flow.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/_clients/_transactional.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/exceptions.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/models/__init__.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/models/_alm.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/models/_base.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/models/_bulk.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/models/_transactional.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/models/cloud_works.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/anaplan_sdk/models/flows.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/anaplan_explained.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/api/async/async_alm_client.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/api/async/async_audit_client.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/api/async/async_client.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/api/async/async_cw_client.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/api/async/async_flows_client.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/api/async/async_transactional_client.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/api/exceptions.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/api/models.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/api/sync/sync_alm_client.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/api/sync/sync_audit_client.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/api/sync/sync_client.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/api/sync/sync_cw_client.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/api/sync/sync_flows_client.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/api/sync/sync_transactional_client.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/assets/overview.html +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/css/styles.css +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/guides/alm.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/guides/audit.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/guides/bulk.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/guides/bulk_vs_transactional.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/guides/cloud_works.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/guides/index.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/guides/logging.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/guides/multiple_models.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/guides/transactional.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/index.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/installation.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/js/assets/hljs.js +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/js/assets/hljs.min.js +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/js/assets/python.js +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/js/assets/python.min.js +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/js/highlight.js +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/js/highlight.min.js +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/docs/quickstart.md +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/mkdocs.yml +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/async/conftest.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/async/test_async_alm_client.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/async/test_async_audit_client.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/async/test_async_client.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/async/test_async_cloud_works_client.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/async/test_async_flows_client.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/async/test_async_transactional_client.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/conftest.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/sync/conftest.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/sync/test_alm_client.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/sync/test_audit_client.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/sync/test_client.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/sync/test_cloud_works_client.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/sync/test_flows_client.py +0 -0
- {anaplan_sdk-0.4.0a3 → anaplan_sdk-0.4.1}/tests/sync/test_transactional_client.py +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: anaplan-sdk
|
3
|
-
Version: 0.4.
|
4
|
-
Summary:
|
3
|
+
Version: 0.4.1
|
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
|
7
7
|
Project-URL: Documentation, https://vinzenzklass.github.io/anaplan-sdk/
|
@@ -13,7 +13,7 @@ Requires-Python: >=3.10.4
|
|
13
13
|
Requires-Dist: httpx<1.0.0,>=0.27.0
|
14
14
|
Requires-Dist: pydantic<3.0.0,>=2.7.2
|
15
15
|
Provides-Extra: cert
|
16
|
-
Requires-Dist: cryptography<
|
16
|
+
Requires-Dist: cryptography<46.0.0,>=42.0.7; extra == 'cert'
|
17
17
|
Provides-Extra: oauth
|
18
18
|
Requires-Dist: oauthlib<4.0.0,>=3.0.0; extra == 'oauth'
|
19
19
|
Description-Content-Type: text/markdown
|
@@ -56,6 +56,7 @@ class AsyncClient(_AsyncBaseClient):
|
|
56
56
|
redirect_uri: str | None = None,
|
57
57
|
refresh_token: str | None = None,
|
58
58
|
oauth2_scope: str = "openid profile email offline_access",
|
59
|
+
on_auth_code: Callable[[str], str] | None = None,
|
59
60
|
on_token_refresh: Callable[[dict[str, str]], None] | None = None,
|
60
61
|
timeout: float | httpx.Timeout = 30,
|
61
62
|
retry_count: int = 2,
|
@@ -91,6 +92,9 @@ class AsyncClient(_AsyncBaseClient):
|
|
91
92
|
:param refresh_token: If you have a valid refresh token, you can pass it to skip the
|
92
93
|
interactive authentication code step.
|
93
94
|
:param oauth2_scope: The scope of the Oauth2 token, if you want to narrow it.
|
95
|
+
:param on_auth_code: A callback that takes the redirect URI as a single argument and must
|
96
|
+
return the entire response URI. This will substitute the interactive
|
97
|
+
authentication code step in the terminal.
|
94
98
|
:param on_token_refresh: A callback function that is called whenever the token is refreshed.
|
95
99
|
With this you can for example securely store the token in your
|
96
100
|
application or on your server for later reuse. The function
|
@@ -124,6 +128,7 @@ class AsyncClient(_AsyncBaseClient):
|
|
124
128
|
redirect_uri=redirect_uri,
|
125
129
|
refresh_token=refresh_token,
|
126
130
|
oauth2_scope=oauth2_scope,
|
131
|
+
on_auth_code=on_auth_code,
|
127
132
|
on_token_refresh=on_token_refresh,
|
128
133
|
)
|
129
134
|
),
|
@@ -144,6 +144,7 @@ class AnaplanOauth2AuthCodeAuth(_AnaplanAuth):
|
|
144
144
|
redirect_uri: str,
|
145
145
|
refresh_token: str | None = None,
|
146
146
|
scope: str = "openid profile email offline_access",
|
147
|
+
on_auth_code: Callable[[str], str] | None = None,
|
147
148
|
on_token_refresh: Callable[[dict[str, str]], None] | None = None,
|
148
149
|
):
|
149
150
|
try:
|
@@ -163,6 +164,7 @@ class AnaplanOauth2AuthCodeAuth(_AnaplanAuth):
|
|
163
164
|
self._refresh_token = refresh_token
|
164
165
|
self._scope = scope
|
165
166
|
self._id_token = None
|
167
|
+
self._on_auth_code = on_auth_code
|
166
168
|
self._on_token_refresh = on_token_refresh
|
167
169
|
if not refresh_token:
|
168
170
|
self.__auth_code_flow()
|
@@ -195,13 +197,17 @@ class AnaplanOauth2AuthCodeAuth(_AnaplanAuth):
|
|
195
197
|
try:
|
196
198
|
logger.info("Creating Authentication Token with OAuth2 Authorization Code Flow.")
|
197
199
|
url, _, _ = self._oauth.prepare_authorization_request(
|
198
|
-
"https://us1a.app.anaplan.com/auth/
|
200
|
+
"https://us1a.app.anaplan.com/auth/prelogin",
|
199
201
|
redirect_url=self._redirect_uri,
|
200
202
|
scope=self._scope,
|
201
203
|
)
|
202
|
-
authorization_response =
|
203
|
-
|
204
|
-
|
204
|
+
authorization_response = (
|
205
|
+
self._on_auth_code(url)
|
206
|
+
if self._on_auth_code
|
207
|
+
else input(
|
208
|
+
f"Please go to {url} and authorize the app.\n"
|
209
|
+
"Then paste the entire redirect URL here: "
|
210
|
+
)
|
205
211
|
)
|
206
212
|
url, headers, body = self._oauth.prepare_token_request(
|
207
213
|
token_url=self._token_url,
|
@@ -211,7 +217,7 @@ class AnaplanOauth2AuthCodeAuth(_AnaplanAuth):
|
|
211
217
|
)
|
212
218
|
self._parse_auth_response(httpx.post(url=url, headers=headers, content=body))
|
213
219
|
except (httpx.HTTPError, ValueError, TypeError, OAuth2Error) as error:
|
214
|
-
raise
|
220
|
+
raise InvalidCredentialsException("Error during OAuth2 authorization flow.") from error
|
215
221
|
|
216
222
|
|
217
223
|
def create_auth(
|
@@ -225,6 +231,7 @@ def create_auth(
|
|
225
231
|
redirect_uri: str | None = None,
|
226
232
|
refresh_token: str | None = None,
|
227
233
|
oauth2_scope: str = "openid profile email offline_access",
|
234
|
+
on_auth_code: Callable[[str], str] | None = None,
|
228
235
|
on_token_refresh: Callable[[dict[str, str]], None] | None = None,
|
229
236
|
) -> _AnaplanAuth:
|
230
237
|
if certificate and private_key:
|
@@ -238,6 +245,7 @@ def create_auth(
|
|
238
245
|
redirect_uri=redirect_uri,
|
239
246
|
refresh_token=refresh_token,
|
240
247
|
scope=oauth2_scope,
|
248
|
+
on_auth_code=on_auth_code,
|
241
249
|
on_token_refresh=on_token_refresh,
|
242
250
|
)
|
243
251
|
raise ValueError(
|
@@ -58,6 +58,7 @@ class Client(_BaseClient):
|
|
58
58
|
redirect_uri: str | None = None,
|
59
59
|
refresh_token: str | None = None,
|
60
60
|
oauth2_scope: str = "openid profile email offline_access",
|
61
|
+
on_auth_code: Callable[[str], str] | None = None,
|
61
62
|
on_token_refresh: Callable[[dict[str, str]], None] | None = None,
|
62
63
|
timeout: float | httpx.Timeout = 30,
|
63
64
|
retry_count: int = 2,
|
@@ -94,6 +95,9 @@ class Client(_BaseClient):
|
|
94
95
|
:param refresh_token: If you have a valid refresh token, you can pass it to skip the
|
95
96
|
interactive authentication code step.
|
96
97
|
:param oauth2_scope: The scope of the Oauth2 token, if you want to narrow it.
|
98
|
+
:param on_auth_code: A callback that takes the redirect URI as a single argument and must
|
99
|
+
return the entire response URI. This will substitute the interactive
|
100
|
+
authentication code step in the terminal.
|
97
101
|
:param on_token_refresh: A callback function that is called whenever the token is refreshed.
|
98
102
|
With this you can for example securely store the token in your
|
99
103
|
application or on your server for later reuse. The function
|
@@ -130,6 +134,7 @@ class Client(_BaseClient):
|
|
130
134
|
redirect_uri=redirect_uri,
|
131
135
|
refresh_token=refresh_token,
|
132
136
|
oauth2_scope=oauth2_scope,
|
137
|
+
on_auth_code=on_auth_code,
|
133
138
|
on_token_refresh=on_token_refresh,
|
134
139
|
)
|
135
140
|
),
|
@@ -142,6 +142,41 @@ will need to copy the entire redirect URI from your browser and paste it into th
|
|
142
142
|
Unfortunately, registering localhost redirect URIs is not supported by Anaplan. This means we cannot intercept the
|
143
143
|
redirect URI and extract the `authorization_code` automatically. This is a limitation of Anaplan's OAuth2 implementation. See [this Community Note](https://community.anaplan.com/discussion/156599/oauth-rediredt-url-port-for-desktop-apps).
|
144
144
|
|
145
|
+
### Authorization Code
|
146
|
+
|
147
|
+
When using OAuth authentication, the default behavior prompts you to manually open a URL, authorize the application, and paste the redirect URL back into your terminal. However, you can customize this flow by providing the `on_auth_code` callback.
|
148
|
+
|
149
|
+
The `on_auth_code` callback lets you hook into the Auth Flow to handle the authorization URL programmatically and return the authorization response. `on_auth_code` must be a callable that takes the authorization URL as a single argument of type `str` and returns the redirect URL as a `str`.
|
150
|
+
|
151
|
+
=== "Synchronous"
|
152
|
+
```python
|
153
|
+
def on_auth_code(redirect_uri: str) -> str:
|
154
|
+
return input(f"Go fetch! {redirect_uri}\nPaste here: ")
|
155
|
+
|
156
|
+
anaplan = anaplan_sdk.Client(
|
157
|
+
workspace_id="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
|
158
|
+
model_id="11111111111111111111111111111111",
|
159
|
+
redirect_uri="https://vinzenzklass.github.io/anaplan-sdk",
|
160
|
+
client_id="my_anaplan_oauth_client_id",
|
161
|
+
client_secret="my_anaplan_oauth_client_secret",
|
162
|
+
on_auth_code=on_auth_code,
|
163
|
+
)
|
164
|
+
```
|
165
|
+
=== "Asynchronous"
|
166
|
+
```python
|
167
|
+
def on_auth_code(redirect_uri: str) -> str:
|
168
|
+
return input(f"Go fetch! {redirect_uri}\nPaste here: ")
|
169
|
+
|
170
|
+
anaplan = anaplan_sdk.AsyncClient(
|
171
|
+
workspace_id="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
|
172
|
+
model_id="11111111111111111111111111111111",
|
173
|
+
redirect_uri="https://vinzenzklass.github.io/anaplan-sdk",
|
174
|
+
client_id="my_anaplan_oauth_client_id",
|
175
|
+
client_secret="my_anaplan_oauth_client_secret",
|
176
|
+
on_auth_code=on_auth_code,
|
177
|
+
)
|
178
|
+
```
|
179
|
+
|
145
180
|
### Refresh Tokens
|
146
181
|
|
147
182
|
You can extend the above example to also pass a `refresh_token` to authenticate without any user interaction, and
|
Binary file
|
@@ -1,7 +1,7 @@
|
|
1
1
|
[project]
|
2
2
|
name = "anaplan-sdk"
|
3
|
-
version = "0.4.
|
4
|
-
description = "
|
3
|
+
version = "0.4.1"
|
4
|
+
description = "Streamlined Python Interface for Anaplan"
|
5
5
|
license = "Apache-2.0"
|
6
6
|
authors = [{ name = "Vinzenz Klass", email = "vinzenz.klass@valantic.com" }]
|
7
7
|
readme = "README.md"
|
@@ -24,7 +24,7 @@ dependencies = [
|
|
24
24
|
]
|
25
25
|
|
26
26
|
[project.optional-dependencies]
|
27
|
-
cert = ["cryptography>=42.0.7,<
|
27
|
+
cert = ["cryptography>=42.0.7,<46.0.0"]
|
28
28
|
oauth = ["oauthlib>=3.0.0,<4.0.0"]
|
29
29
|
|
30
30
|
[dependency-groups]
|
@@ -40,7 +40,7 @@ dev = [
|
|
40
40
|
"polars>=1.29.0",
|
41
41
|
"griffe-fieldz>=0.2.1",
|
42
42
|
"oauthlib>=3.2.2",
|
43
|
-
"cryptography>=
|
43
|
+
"cryptography>=45.0.0",
|
44
44
|
]
|
45
45
|
|
46
46
|
[project.urls]
|
@@ -4,7 +4,7 @@ requires-python = ">=3.10.4"
|
|
4
4
|
|
5
5
|
[[package]]
|
6
6
|
name = "anaplan-sdk"
|
7
|
-
version = "0.4.
|
7
|
+
version = "0.4.1"
|
8
8
|
source = { editable = "." }
|
9
9
|
dependencies = [
|
10
10
|
{ name = "httpx" },
|
@@ -37,7 +37,7 @@ dev = [
|
|
37
37
|
|
38
38
|
[package.metadata]
|
39
39
|
requires-dist = [
|
40
|
-
{ name = "cryptography", marker = "extra == 'cert'", specifier = ">=42.0.7,<
|
40
|
+
{ name = "cryptography", marker = "extra == 'cert'", specifier = ">=42.0.7,<46.0.0" },
|
41
41
|
{ name = "httpx", specifier = ">=0.27.0,<1.0.0" },
|
42
42
|
{ name = "oauthlib", marker = "extra == 'oauth'", specifier = ">=3.0.0,<4.0.0" },
|
43
43
|
{ name = "pydantic", specifier = ">=2.7.2,<3.0.0" },
|
@@ -46,7 +46,7 @@ provides-extras = ["cert", "oauth"]
|
|
46
46
|
|
47
47
|
[package.metadata.requires-dev]
|
48
48
|
dev = [
|
49
|
-
{ name = "cryptography", specifier = ">=
|
49
|
+
{ name = "cryptography", specifier = ">=45.0.0" },
|
50
50
|
{ name = "griffe-fieldz", specifier = ">=0.2.1" },
|
51
51
|
{ name = "mkdocs", specifier = ">=1.6.1" },
|
52
52
|
{ name = "mkdocs-material", specifier = ">=9.5.41" },
|
@@ -265,49 +265,49 @@ wheels = [
|
|
265
265
|
|
266
266
|
[[package]]
|
267
267
|
name = "cryptography"
|
268
|
-
version = "
|
268
|
+
version = "45.0.2"
|
269
269
|
source = { registry = "https://pypi.org/simple" }
|
270
270
|
dependencies = [
|
271
271
|
{ name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
|
272
272
|
]
|
273
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
274
|
-
wheels = [
|
275
|
-
{ url = "https://files.pythonhosted.org/packages/
|
276
|
-
{ url = "https://files.pythonhosted.org/packages/
|
277
|
-
{ url = "https://files.pythonhosted.org/packages/
|
278
|
-
{ url = "https://files.pythonhosted.org/packages/
|
279
|
-
{ url = "https://files.pythonhosted.org/packages/
|
280
|
-
{ url = "https://files.pythonhosted.org/packages/
|
281
|
-
{ url = "https://files.pythonhosted.org/packages/
|
282
|
-
{ url = "https://files.pythonhosted.org/packages/
|
283
|
-
{ url = "https://files.pythonhosted.org/packages/
|
284
|
-
{ url = "https://files.pythonhosted.org/packages/
|
285
|
-
{ url = "https://files.pythonhosted.org/packages/
|
286
|
-
{ url = "https://files.pythonhosted.org/packages/
|
287
|
-
{ url = "https://files.pythonhosted.org/packages/
|
288
|
-
{ url = "https://files.pythonhosted.org/packages/
|
289
|
-
{ url = "https://files.pythonhosted.org/packages/
|
290
|
-
{ url = "https://files.pythonhosted.org/packages/
|
291
|
-
{ url = "https://files.pythonhosted.org/packages/
|
292
|
-
{ url = "https://files.pythonhosted.org/packages/
|
293
|
-
{ url = "https://files.pythonhosted.org/packages/
|
294
|
-
{ url = "https://files.pythonhosted.org/packages/
|
295
|
-
{ url = "https://files.pythonhosted.org/packages/
|
296
|
-
{ url = "https://files.pythonhosted.org/packages/
|
297
|
-
{ url = "https://files.pythonhosted.org/packages/
|
298
|
-
{ url = "https://files.pythonhosted.org/packages/
|
299
|
-
{ url = "https://files.pythonhosted.org/packages/
|
300
|
-
{ url = "https://files.pythonhosted.org/packages/
|
301
|
-
{ url = "https://files.pythonhosted.org/packages/
|
302
|
-
{ url = "https://files.pythonhosted.org/packages/
|
303
|
-
{ url = "https://files.pythonhosted.org/packages/
|
304
|
-
{ url = "https://files.pythonhosted.org/packages/
|
305
|
-
{ url = "https://files.pythonhosted.org/packages/
|
306
|
-
{ url = "https://files.pythonhosted.org/packages/
|
307
|
-
{ url = "https://files.pythonhosted.org/packages/
|
308
|
-
{ url = "https://files.pythonhosted.org/packages/
|
309
|
-
{ url = "https://files.pythonhosted.org/packages/
|
310
|
-
{ url = "https://files.pythonhosted.org/packages/
|
273
|
+
sdist = { url = "https://files.pythonhosted.org/packages/f6/47/92a8914716f2405f33f1814b97353e3cfa223cd94a77104075d42de3099e/cryptography-45.0.2.tar.gz", hash = "sha256:d784d57b958ffd07e9e226d17272f9af0c41572557604ca7554214def32c26bf", size = 743865, upload-time = "2025-05-18T02:46:34.986Z" }
|
274
|
+
wheels = [
|
275
|
+
{ url = "https://files.pythonhosted.org/packages/3d/2f/46b9e715157643ad16f039ec3c3c47d174da6f825bf5034b1c5f692ab9e2/cryptography-45.0.2-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:61a8b1bbddd9332917485b2453d1de49f142e6334ce1d97b7916d5a85d179c84", size = 7043448, upload-time = "2025-05-18T02:45:12.495Z" },
|
276
|
+
{ url = "https://files.pythonhosted.org/packages/90/52/49e6c86278e1b5ec226e96b62322538ccc466306517bf9aad8854116a088/cryptography-45.0.2-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cc31c66411e14dd70e2f384a9204a859dc25b05e1f303df0f5326691061b839", size = 4201098, upload-time = "2025-05-18T02:45:15.178Z" },
|
277
|
+
{ url = "https://files.pythonhosted.org/packages/7b/3a/201272539ac5b66b4cb1af89021e423fc0bfacb73498950280c51695fb78/cryptography-45.0.2-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:463096533acd5097f8751115bc600b0b64620c4aafcac10c6d0041e6e68f88fe", size = 4429839, upload-time = "2025-05-18T02:45:17.614Z" },
|
278
|
+
{ url = "https://files.pythonhosted.org/packages/99/89/fa1a84832b8f8f3917875cb15324bba98def5a70175a889df7d21a45dc75/cryptography-45.0.2-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:cdafb86eb673c3211accffbffdb3cdffa3aaafacd14819e0898d23696d18e4d3", size = 4205154, upload-time = "2025-05-18T02:45:19.874Z" },
|
279
|
+
{ url = "https://files.pythonhosted.org/packages/1c/c5/5225d5230d538ab461725711cf5220560a813d1eb68bafcfb00131b8f631/cryptography-45.0.2-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:05c2385b1f5c89a17df19900cfb1345115a77168f5ed44bdf6fd3de1ce5cc65b", size = 3897145, upload-time = "2025-05-18T02:45:22.209Z" },
|
280
|
+
{ url = "https://files.pythonhosted.org/packages/fe/24/f19aae32526cc55ae17d473bc4588b1234af2979483d99cbfc57e55ffea6/cryptography-45.0.2-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:e9e4bdcd70216b08801e267c0b563316b787f957a46e215249921f99288456f9", size = 4462192, upload-time = "2025-05-18T02:45:24.773Z" },
|
281
|
+
{ url = "https://files.pythonhosted.org/packages/19/18/4a69ac95b0b3f03355970baa6c3f9502bbfc54e7df81fdb179654a00f48e/cryptography-45.0.2-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b2de529027579e43b6dc1f805f467b102fb7d13c1e54c334f1403ee2b37d0059", size = 4208093, upload-time = "2025-05-18T02:45:27.028Z" },
|
282
|
+
{ url = "https://files.pythonhosted.org/packages/7c/54/2dea55ccc9558b8fa14f67156250b6ee231e31765601524e4757d0b5db6b/cryptography-45.0.2-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10d68763892a7b19c22508ab57799c4423c7c8cd61d7eee4c5a6a55a46511949", size = 4461819, upload-time = "2025-05-18T02:45:29.39Z" },
|
283
|
+
{ url = "https://files.pythonhosted.org/packages/37/f1/1b220fcd5ef4b1f0ff3e59e733b61597505e47f945606cc877adab2c1a17/cryptography-45.0.2-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d2a90ce2f0f5b695e4785ac07c19a58244092f3c85d57db6d8eb1a2b26d2aad6", size = 4329202, upload-time = "2025-05-18T02:45:31.925Z" },
|
284
|
+
{ url = "https://files.pythonhosted.org/packages/6d/e0/51d1dc4f96f819a56db70f0b4039b4185055bbb8616135884c3c3acc4c6d/cryptography-45.0.2-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:59c0c8f043dd376bbd9d4f636223836aed50431af4c5a467ed9bf61520294627", size = 4570412, upload-time = "2025-05-18T02:45:34.348Z" },
|
285
|
+
{ url = "https://files.pythonhosted.org/packages/dc/44/88efb40a3600d15277a77cdc69eeeab45a98532078d2a36cffd9325d3b3f/cryptography-45.0.2-cp311-abi3-win32.whl", hash = "sha256:80303ee6a02ef38c4253160446cbeb5c400c07e01d4ddbd4ff722a89b736d95a", size = 2933584, upload-time = "2025-05-18T02:45:36.198Z" },
|
286
|
+
{ url = "https://files.pythonhosted.org/packages/d9/a1/bc9f82ba08760442cc8346d1b4e7b769b86d197193c45b42b3595d231e84/cryptography-45.0.2-cp311-abi3-win_amd64.whl", hash = "sha256:7429936146063bd1b2cfc54f0e04016b90ee9b1c908a7bed0800049cbace70eb", size = 3408537, upload-time = "2025-05-18T02:45:38.184Z" },
|
287
|
+
{ url = "https://files.pythonhosted.org/packages/59/bc/1b6acb1dca366f9c0b3880888ecd7fcfb68023930d57df854847c6da1d10/cryptography-45.0.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:e86c8d54cd19a13e9081898b3c24351683fd39d726ecf8e774aaa9d8d96f5f3a", size = 7025581, upload-time = "2025-05-18T02:45:40.632Z" },
|
288
|
+
{ url = "https://files.pythonhosted.org/packages/31/a3/a3e4a298d3db4a04085728f5ae6c8cda157e49c5bb784886d463b9fbff70/cryptography-45.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e328357b6bbf79928363dbf13f4635b7aac0306afb7e5ad24d21d0c5761c3253", size = 4189148, upload-time = "2025-05-18T02:45:42.538Z" },
|
289
|
+
{ url = "https://files.pythonhosted.org/packages/53/90/100dfadd4663b389cb56972541ec1103490a19ebad0132af284114ba0868/cryptography-45.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49af56491473231159c98c2c26f1a8f3799a60e5cf0e872d00745b858ddac9d2", size = 4424113, upload-time = "2025-05-18T02:45:44.316Z" },
|
290
|
+
{ url = "https://files.pythonhosted.org/packages/0d/40/e2b9177dbed6f3fcbbf1942e1acea2fd15b17007204b79d675540dd053af/cryptography-45.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f169469d04a23282de9d0be349499cb6683b6ff1b68901210faacac9b0c24b7d", size = 4189696, upload-time = "2025-05-18T02:45:46.622Z" },
|
291
|
+
{ url = "https://files.pythonhosted.org/packages/70/ae/ec29c79f481e1767c2ff916424ba36f3cf7774de93bbd60428a3c52d1357/cryptography-45.0.2-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9cfd1399064b13043082c660ddd97a0358e41c8b0dc7b77c1243e013d305c344", size = 3881498, upload-time = "2025-05-18T02:45:48.884Z" },
|
292
|
+
{ url = "https://files.pythonhosted.org/packages/5f/4a/72937090e5637a232b2f73801c9361cd08404a2d4e620ca4ec58c7ea4b70/cryptography-45.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:18f8084b7ca3ce1b8d38bdfe33c48116edf9a08b4d056ef4a96dceaa36d8d965", size = 4451678, upload-time = "2025-05-18T02:45:50.706Z" },
|
293
|
+
{ url = "https://files.pythonhosted.org/packages/d3/fa/1377fced81fd67a4a27514248261bb0d45c3c1e02169411fe231583088c8/cryptography-45.0.2-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:2cb03a944a1a412724d15a7c051d50e63a868031f26b6a312f2016965b661942", size = 4192296, upload-time = "2025-05-18T02:45:52.422Z" },
|
294
|
+
{ url = "https://files.pythonhosted.org/packages/d1/cf/b6fe837c83a08b9df81e63299d75fc5b3c6d82cf24b3e1e0e331050e9e5c/cryptography-45.0.2-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:a9727a21957d3327cf6b7eb5ffc9e4b663909a25fea158e3fcbc49d4cdd7881b", size = 4451749, upload-time = "2025-05-18T02:45:55.025Z" },
|
295
|
+
{ url = "https://files.pythonhosted.org/packages/af/d8/5a655675cc635c7190bfc8cffb84bcdc44fc62ce945ad1d844adaa884252/cryptography-45.0.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ddb8d01aa900b741d6b7cc585a97aff787175f160ab975e21f880e89d810781a", size = 4317601, upload-time = "2025-05-18T02:45:56.911Z" },
|
296
|
+
{ url = "https://files.pythonhosted.org/packages/b9/d4/75d2375a20d80aa262a8adee77bf56950e9292929e394b9fae2481803f11/cryptography-45.0.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:c0c000c1a09f069632d8a9eb3b610ac029fcc682f1d69b758e625d6ee713f4ed", size = 4560535, upload-time = "2025-05-18T02:45:59.33Z" },
|
297
|
+
{ url = "https://files.pythonhosted.org/packages/aa/18/c3a94474987ebcfb88692036b2ec44880d243fefa73794bdcbf748679a6e/cryptography-45.0.2-cp37-abi3-win32.whl", hash = "sha256:08281de408e7eb71ba3cd5098709a356bfdf65eebd7ee7633c3610f0aa80d79b", size = 2922045, upload-time = "2025-05-18T02:46:01.012Z" },
|
298
|
+
{ url = "https://files.pythonhosted.org/packages/63/63/fb28b30c144182fd44ce93d13ab859791adbf923e43bdfb610024bfecda1/cryptography-45.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:48caa55c528617fa6db1a9c3bf2e37ccb31b73e098ac2b71408d1f2db551dde4", size = 3393321, upload-time = "2025-05-18T02:46:03.441Z" },
|
299
|
+
{ url = "https://files.pythonhosted.org/packages/6e/f5/d1d4dead3b269671cda7be6d6b2970b25398e84219681cb397139bdce88b/cryptography-45.0.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a8ec324711596fbf21837d3a5db543937dd84597d364769b46e0102250023f77", size = 3578517, upload-time = "2025-05-18T02:46:05.263Z" },
|
300
|
+
{ url = "https://files.pythonhosted.org/packages/ac/7b/00e18d24f08bc642e4018e0066a6f872d85c744e3265910c3beabb1f4d73/cryptography-45.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:965611880c3fa8e504b7458484c0697e00ae6e937279cd6734fdaa2bc954dc49", size = 4135515, upload-time = "2025-05-18T02:46:07.241Z" },
|
301
|
+
{ url = "https://files.pythonhosted.org/packages/29/9f/ea7ad5239c33c36f0e2cbdf631a0e3b7633466e87e55923f5b5ea1b0b92d/cryptography-45.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d891942592789fa0ab71b502550bbadb12f540d7413d7d7c4cef4b02af0f5bc6", size = 4378133, upload-time = "2025-05-18T02:46:09.035Z" },
|
302
|
+
{ url = "https://files.pythonhosted.org/packages/47/f8/b4e29d87fbc4d2cf46b36e01fcb98305bf76699f34de6b877cddd8bc3a64/cryptography-45.0.2-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:b19f4b28dd2ef2e6d600307fee656c00825a2980c4356a7080bd758d633c3a6f", size = 4136787, upload-time = "2025-05-18T02:46:10.772Z" },
|
303
|
+
{ url = "https://files.pythonhosted.org/packages/dc/7c/ac19bbf24d261667a67aac712d8aa3bb740f94bc2391f06ccc90e783f3ff/cryptography-45.0.2-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:7c73968fbb7698a4c5d6160859db560d3aac160edde89c751edd5a8bc6560c88", size = 4377741, upload-time = "2025-05-18T02:46:13.215Z" },
|
304
|
+
{ url = "https://files.pythonhosted.org/packages/e2/69/51f1c3d03ef4e3bcac4d3f00738f6ac0a205199809e2b92368b6f15a9ec4/cryptography-45.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:501de1296b2041dccf2115e3c7d4947430585601b251b140970ce255c5cfb985", size = 3326934, upload-time = "2025-05-18T02:46:15.081Z" },
|
305
|
+
{ url = "https://files.pythonhosted.org/packages/d7/74/2a0fb642c4c34d8c46c12b6eac89b10769b378c7b6a901ff94a8d4ba1b52/cryptography-45.0.2-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1655d3a76e3dedb683c982a6c3a2cbfae2d08f47a48ec5a3d58db52b3d29ea6f", size = 3587805, upload-time = "2025-05-18T02:46:17.531Z" },
|
306
|
+
{ url = "https://files.pythonhosted.org/packages/8a/18/57bc98fa5d93e74c2c2b16a3c5383f7ec218f957aa44559c0008a46c3629/cryptography-45.0.2-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc7693573f16535428183de8fd27f0ca1ca37a51baa0b41dc5ed7b3d68fe80e2", size = 4143347, upload-time = "2025-05-18T02:46:19.934Z" },
|
307
|
+
{ url = "https://files.pythonhosted.org/packages/84/6f/d015e7e7bd7f3a6c538973005de5a780d93b68138c2d88c804422cf46b1c/cryptography-45.0.2-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:614bca7c6ed0d8ad1dce683a6289afae1f880675b4090878a0136c3da16bc693", size = 4387414, upload-time = "2025-05-18T02:46:21.944Z" },
|
308
|
+
{ url = "https://files.pythonhosted.org/packages/de/9e/fa5ec89cce7e4b86e430438da4d66b79113bdf321d0a00167d34b61daf19/cryptography-45.0.2-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:4142e20c29224cec63e9e32eb1e6014fb285fe39b7be66b3564ca978a3a8afe9", size = 4145849, upload-time = "2025-05-18T02:46:24.327Z" },
|
309
|
+
{ url = "https://files.pythonhosted.org/packages/7c/09/5887d4fcc6f9c6fb19920789d094c4e25c2f604cc1b10b7e69d6f56187fe/cryptography-45.0.2-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:9a900036b42f7324df7c7ad9569eb92ba0b613cf699160dd9c2154b24fd02f8e", size = 4387449, upload-time = "2025-05-18T02:46:26.144Z" },
|
310
|
+
{ url = "https://files.pythonhosted.org/packages/a5/4a/e27ab71dc3e517becc3f2ae358454bb4b78c0cb5af52f8e11b8943525ea6/cryptography-45.0.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:057723b79752a142efbc609e90b0dff27b0361ccbee3bd48312d70f5cdf53b78", size = 3335090, upload-time = "2025-05-18T02:46:27.913Z" },
|
311
311
|
]
|
312
312
|
|
313
313
|
[[package]]
|
Binary file
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|