anaplan-sdk 0.4.4a2__tar.gz → 0.4.4a3__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.4a2 → anaplan_sdk-0.4.4a3}/PKG-INFO +1 -1
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_auth.py +6 -6
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_oauth.py +6 -6
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/guides/authentication.md +5 -6
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/pyproject.toml +1 -1
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/uv.lock +1 -1
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/.github/dependabot.yml +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/.github/workflows/docs.yml +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/.github/workflows/lint.yml +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/.github/workflows/tests.yml +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/.gitignore +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/.pre-commit-config.yaml +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/LICENSE +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/README.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/__init__.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_async_clients/__init__.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_async_clients/_alm.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_async_clients/_audit.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_async_clients/_bulk.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_async_clients/_cloud_works.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_async_clients/_cw_flow.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_async_clients/_transactional.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_base.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_clients/__init__.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_clients/_alm.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_clients/_audit.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_clients/_bulk.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_clients/_cloud_works.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_clients/_cw_flow.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/_clients/_transactional.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/exceptions.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/models/__init__.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/models/_alm.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/models/_base.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/models/_bulk.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/models/_transactional.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/models/cloud_works.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/anaplan_sdk/models/flows.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/anaplan_explained.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/async/async_alm_client.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/async/async_audit_client.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/async/async_client.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/async/async_cw_client.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/async/async_flows_client.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/async/async_oauth_client.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/async/async_transactional_client.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/exceptions.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/models/alm.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/models/bulk.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/models/cloud_works.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/models/flows.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/models/transactional.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/sync/sync_alm_client.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/sync/sync_audit_client.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/sync/sync_client.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/sync/sync_cw_client.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/sync/sync_flows_client.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/sync/sync_oauth_client.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/api/sync/sync_transactional_client.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/assets/overview.html +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/css/styles.css +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/guides/alm.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/guides/audit.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/guides/bulk.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/guides/bulk_vs_transactional.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/guides/cloud_works.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/guides/index.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/guides/logging.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/guides/multiple_models.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/guides/transactional.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/img/anaplan-sdk.webp +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/index.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/installation.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/js/assets/hljs.js +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/js/assets/hljs.min.js +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/js/assets/python.js +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/js/assets/python.min.js +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/js/highlight.js +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/js/highlight.min.js +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/docs/quickstart.md +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/mkdocs.yml +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/async/conftest.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/async/test_async_alm_client.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/async/test_async_audit_client.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/async/test_async_client.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/async/test_async_cloud_works_client.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/async/test_async_flows_client.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/async/test_async_transactional_client.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/conftest.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/sync/conftest.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/sync/test_alm_client.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/sync/test_audit_client.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/sync/test_client.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/sync/test_cloud_works_client.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/sync/test_flows_client.py +0 -0
- {anaplan_sdk-0.4.4a2 → anaplan_sdk-0.4.4a3}/tests/sync/test_transactional_client.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: anaplan-sdk
|
3
|
-
Version: 0.4.
|
3
|
+
Version: 0.4.4a3
|
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
|
@@ -159,7 +159,7 @@ class AnaplanOAuthCodeAuth(_AnaplanAuth):
|
|
159
159
|
self,
|
160
160
|
client_id: str,
|
161
161
|
client_secret: str,
|
162
|
-
|
162
|
+
redirect_uri: str,
|
163
163
|
token: dict[str, str] | None = None,
|
164
164
|
authorization_url: str = "https://us1a.app.anaplan.com/auth/prelogin",
|
165
165
|
token_url: str = "https://us1a.app.anaplan.com/oauth/token",
|
@@ -175,7 +175,7 @@ class AnaplanOAuthCodeAuth(_AnaplanAuth):
|
|
175
175
|
:param client_id: The client ID of your Anaplan Oauth 2.0 application. This Application
|
176
176
|
must be an Authorization Code Grant application.
|
177
177
|
:param client_secret: The client secret of your Anaplan Oauth 2.0 application.
|
178
|
-
:param
|
178
|
+
:param redirect_uri: The URL to which the user will be redirected after authorizing the
|
179
179
|
application.
|
180
180
|
:param authorization_url: The URL to which the user will be redirected to authorize the
|
181
181
|
application. Defaults to the Anaplan Prelogin Page, where the user can select the
|
@@ -193,7 +193,7 @@ class AnaplanOAuthCodeAuth(_AnaplanAuth):
|
|
193
193
|
self._oauth = _OAuthRequestFactory(
|
194
194
|
client_id=client_id,
|
195
195
|
client_secret=client_secret,
|
196
|
-
|
196
|
+
redirect_uri=redirect_uri,
|
197
197
|
scope=scope,
|
198
198
|
authorization_url=authorization_url,
|
199
199
|
token_url=token_url,
|
@@ -237,7 +237,7 @@ class AnaplanRefreshTokenAuth(_AnaplanAuth):
|
|
237
237
|
self,
|
238
238
|
client_id: str,
|
239
239
|
client_secret: str,
|
240
|
-
|
240
|
+
redirect_uri: str,
|
241
241
|
token: dict[str, str],
|
242
242
|
token_url: str = "https://us1a.app.anaplan.com/oauth/token",
|
243
243
|
):
|
@@ -249,7 +249,7 @@ class AnaplanRefreshTokenAuth(_AnaplanAuth):
|
|
249
249
|
:param client_id: The client ID of your Anaplan Oauth 2.0 application. This Application
|
250
250
|
must be an Authorization Code Grant application.
|
251
251
|
:param client_secret: The client secret of your Anaplan Oauth 2.0 application.
|
252
|
-
:param
|
252
|
+
:param redirect_uri: The URL to which the user will be redirected after authorizing the
|
253
253
|
application.
|
254
254
|
:param token: The OAuth token dictionary containing at least the `access_token` and
|
255
255
|
`refresh_token`.
|
@@ -260,7 +260,7 @@ class AnaplanRefreshTokenAuth(_AnaplanAuth):
|
|
260
260
|
self._oauth = _OAuthRequestFactory(
|
261
261
|
client_id=client_id,
|
262
262
|
client_secret=client_secret,
|
263
|
-
|
263
|
+
redirect_uri=redirect_uri,
|
264
264
|
token_url=token_url,
|
265
265
|
)
|
266
266
|
super().__init__(self._oauth_token["access_token"])
|
@@ -13,7 +13,7 @@ class _BaseOauth:
|
|
13
13
|
self,
|
14
14
|
client_id: str,
|
15
15
|
client_secret: str,
|
16
|
-
|
16
|
+
redirect_uri: str,
|
17
17
|
authorization_url: str = "https://us1a.app.anaplan.com/auth/prelogin",
|
18
18
|
token_url: str = "https://us1a.app.anaplan.com/oauth/token",
|
19
19
|
validation_url: str = "https://auth.anaplan.com/token/validate",
|
@@ -38,7 +38,7 @@ class _BaseOauth:
|
|
38
38
|
:param client_id: The client ID of your Anaplan Oauth 2.0 application. This Application
|
39
39
|
must be an Authorization Code Grant application.
|
40
40
|
:param client_secret: The client secret of your Anaplan Oauth 2.0 application.
|
41
|
-
:param
|
41
|
+
:param redirect_uri: The URL to which the user will be redirected after authorizing the
|
42
42
|
application.
|
43
43
|
:param authorization_url: The URL to which the user will be redirected to authorize the
|
44
44
|
application. Defaults to the Anaplan Prelogin Page, where the user can select the
|
@@ -53,7 +53,7 @@ class _BaseOauth:
|
|
53
53
|
"""
|
54
54
|
self._client_id = client_id
|
55
55
|
self._client_secret = client_secret
|
56
|
-
self.
|
56
|
+
self._redirect_uri = redirect_uri
|
57
57
|
self._authorization_url = authorization_url
|
58
58
|
self._token_url = token_url
|
59
59
|
self._validation_url = validation_url
|
@@ -86,7 +86,7 @@ class _BaseOauth:
|
|
86
86
|
auth_url = authorization_url or self._authorization_url
|
87
87
|
state = state or self._state_generator()
|
88
88
|
url, _, _ = self._oauth.prepare_authorization_request(
|
89
|
-
auth_url, state, self.
|
89
|
+
auth_url, state, self._redirect_uri, self._scope
|
90
90
|
)
|
91
91
|
return url, state
|
92
92
|
|
@@ -94,7 +94,7 @@ class _BaseOauth:
|
|
94
94
|
url, headers, body = self._oauth.prepare_token_request(
|
95
95
|
authorization_response=authorization_response,
|
96
96
|
token_url=self._token_url,
|
97
|
-
redirect_url=self.
|
97
|
+
redirect_url=self._redirect_uri,
|
98
98
|
client_secret=self._client_secret,
|
99
99
|
)
|
100
100
|
return httpx.Request(method="POST", url=url, headers=headers, content=body)
|
@@ -206,7 +206,7 @@ class Oauth(_BaseOauth):
|
|
206
206
|
url, headers, body = self._oauth.prepare_token_request(
|
207
207
|
authorization_response=authorization_response,
|
208
208
|
token_url=self._token_url,
|
209
|
-
redirect_url=self.
|
209
|
+
redirect_url=self._redirect_uri,
|
210
210
|
client_secret=self._client_secret,
|
211
211
|
)
|
212
212
|
with httpx.Client() as client:
|
@@ -114,7 +114,6 @@ An example for FastAPI is shown below, but you can use any other Web Framework.
|
|
114
114
|
```
|
115
115
|
This will install [OAuthLib](https://oauthlib.readthedocs.io/en/latest/index.html) to securely construct the authentication request.
|
116
116
|
|
117
|
-
|
118
117
|
```python
|
119
118
|
import os
|
120
119
|
from typing import Annotated
|
@@ -127,7 +126,7 @@ from anaplan_sdk import AsyncClient, AsyncOauth, exceptions
|
|
127
126
|
_oauth = AsyncOauth(
|
128
127
|
client_id=os.environ["OAUTH_CLIENT_ID"],
|
129
128
|
client_secret=os.environ["OAUTH_CLIENT_SECRET"],
|
130
|
-
|
129
|
+
redirect_uri="https://vinzenzklass.github.io/anaplan-sdk/oauth/callback",
|
131
130
|
)
|
132
131
|
|
133
132
|
app = FastAPI()
|
@@ -182,7 +181,7 @@ when it expires.
|
|
182
181
|
token=token,
|
183
182
|
client_id=os.environ["OAUTH_CLIENT_ID"],
|
184
183
|
client_secret=os.environ["OAUTH_CLIENT_SECRET"],
|
185
|
-
|
184
|
+
redirect_uri="https://vinzenzklass.github.io/anaplan-sdk",
|
186
185
|
)
|
187
186
|
)
|
188
187
|
```
|
@@ -193,7 +192,7 @@ when it expires.
|
|
193
192
|
token=token,
|
194
193
|
client_id=os.environ["OAUTH_CLIENT_ID"],
|
195
194
|
client_secret=os.environ["OAUTH_CLIENT_SECRET"],
|
196
|
-
|
195
|
+
redirect_uri="https://vinzenzklass.github.io/anaplan-sdk",
|
197
196
|
)
|
198
197
|
)
|
199
198
|
```
|
@@ -226,7 +225,7 @@ and the subsequent token refreshes.
|
|
226
225
|
auth=AnaplanOAuthCodeAuth(
|
227
226
|
client_id=os.environ["OAUTH_CLIENT_ID"],
|
228
227
|
client_secret=os.environ["OAUTH_CLIENT_SECRET"],
|
229
|
-
|
228
|
+
redirect_uri="https://vinzenzklass.github.io/anaplan-sdk",
|
230
229
|
)
|
231
230
|
)
|
232
231
|
```
|
@@ -236,7 +235,7 @@ and the subsequent token refreshes.
|
|
236
235
|
auth=AnaplanOAuthCodeAuth(
|
237
236
|
client_id=os.environ["OAUTH_CLIENT_ID"],
|
238
237
|
client_secret=os.environ["OAUTH_CLIENT_SECRET"],
|
239
|
-
|
238
|
+
redirect_uri="https://vinzenzklass.github.io/anaplan-sdk",
|
240
239
|
)
|
241
240
|
)
|
242
241
|
```
|
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
|
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
|