diff --git a/user/.gitattributes b/user/.gitattributes
new file mode 100755
index 000000000..4d75d5900
--- /dev/null
+++ b/user/.gitattributes
@@ -0,0 +1,2 @@
+# This allows generated code to be indexed correctly
+*.py linguist-generated=false
\ No newline at end of file
diff --git a/user/.gitignore b/user/.gitignore
new file mode 100755
index 000000000..8ac3f51d4
--- /dev/null
+++ b/user/.gitignore
@@ -0,0 +1,7 @@
+.python-version
+.DS_Store
+venv/
+src/*.egg-info/
+__pycache__/
+.pytest_cache/
+.python-version`
diff --git a/user/README.md b/user/README.md
index 910892c4a..299cd6955 100755
--- a/user/README.md
+++ b/user/README.md
@@ -12,46 +12,162 @@ pip install git+https://github.com/epilot-dev/sdk-python.git#subdirectory=user
```python
import epilot
-from epilot.models import operations, shared
+from epilot.models import shared
s = epilot.Epilot(
security=shared.Security(
- epilot_auth="Bearer YOUR_BEARER_TOKEN_HERE",
+ epilot_auth="",
),
)
-
+
res = s.user_v1.get_me()
if res.user is not None:
# handle response
+ pass
```
-## SDK Available Operations
+## Available Resources and Operations
-### user_v1
+### [user_v1](docs/sdks/userv1/README.md)
-* `get_me` - getMe
-* `get_user` - getUser
-* `get_user_login_parameters` - getUserLoginParameters
-* `list_users` - listUsers
+* [get_me](docs/sdks/userv1/README.md#get_me) - getMe
+* [get_user](docs/sdks/userv1/README.md#get_user) - getUser
+* [get_user_login_parameters](docs/sdks/userv1/README.md#get_user_login_parameters) - getUserLoginParameters
+* [list_users](docs/sdks/userv1/README.md#list_users) - listUsers
-### user_v2
+### [user_v2](docs/sdks/userv2/README.md)
-* `activate_user` - activateUser
-* `delete_user_v2` - deleteUserV2
-* `get_me_v2` - getMeV2
-* `get_user_login_parameters_v2` - getUserLoginParametersV2
-* `get_user_v2` - getUserV2
-* `invite_user` - inviteUser
-* `list_users_v2` - listUsersV2
-* `resend_user_invitation` - resendUserInvitation
-* `sign_up_user` - signUpUser
-* `update_user_v2` - updateUserV2
-* `verify_email_with_token` - verifyEmailWithToken
+* [activate_user](docs/sdks/userv2/README.md#activate_user) - activateUser
+* [delete_user_v2](docs/sdks/userv2/README.md#delete_user_v2) - deleteUserV2
+* [get_me_v2](docs/sdks/userv2/README.md#get_me_v2) - getMeV2
+* [get_user_login_parameters_v2](docs/sdks/userv2/README.md#get_user_login_parameters_v2) - getUserLoginParametersV2
+* [get_user_v2](docs/sdks/userv2/README.md#get_user_v2) - getUserV2
+* [invite_user](docs/sdks/userv2/README.md#invite_user) - inviteUser
+* [list_users_v2](docs/sdks/userv2/README.md#list_users_v2) - listUsersV2
+* [resend_user_invitation](docs/sdks/userv2/README.md#resend_user_invitation) - resendUserInvitation
+* [sign_up_user](docs/sdks/userv2/README.md#sign_up_user) - signUpUser
+* [update_user_v2](docs/sdks/userv2/README.md#update_user_v2) - updateUserV2
+* [verify_email_with_token](docs/sdks/userv2/README.md#verify_email_with_token) - verifyEmailWithToken
+
+
+
+
+
+
+
+
+
+# Pagination
+
+Some of the endpoints in this SDK support pagination. To use pagination, you make your SDK calls as usual, but the
+returned response object will have a `Next` method that can be called to pull down the next group of results. If the
+return value of `Next` is `None`, then there are no more pages to be fetched.
+
+Here's an example of one such pagination call:
+
+
+
+
+
+# Error Handling
+
+Handling errors in your SDK should largely match your expectations. All operations return a response object or raise an error. If Error objects are specified in your OpenAPI Spec, the SDK will raise the appropriate Error type.
+
+
+
+
+
+
+
+# Server Selection
+
+## Select Server by Index
+
+You can override the default server globally by passing a server index to the `server_idx: int` optional parameter when initializing the SDK client instance. The selected server will then be used as the default on the operations that use it. This table lists the indexes associated with the available servers:
+
+| # | Server | Variables |
+| - | ------ | --------- |
+| 0 | `https://user.sls.epilot.io` | None |
+
+For example:
+
+
+```python
+import epilot
+from epilot.models import shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+ server_idx=0
+)
+
+
+res = s.user_v1.get_me()
+
+if res.user is not None:
+ # handle response
+ pass
+```
+
+
+## Override Server URL Per-Client
+
+The default server can also be overridden globally by passing a URL to the `server_url: str` optional parameter when initializing the SDK client instance. For example:
+
+
+```python
+import epilot
+from epilot.models import shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+ server_url="https://user.sls.epilot.io"
+)
+
+
+res = s.user_v1.get_me()
+
+if res.user is not None:
+ # handle response
+ pass
+```
+
+
+
+
+
+# Custom HTTP Client
+
+The Python SDK makes API calls using the (requests)[https://pypi.org/project/requests/] HTTP library. In order to provide a convenient way to configure timeouts, cookies, proxies, custom headers, and other low-level configuration, you can initialize the SDK client with a custom `requests.Session` object.
+
+
+For example, you could specify a header for every request that your sdk makes as follows:
+
+```python
+import epilot
+import requests
+
+http_client = requests.Session()
+http_client.headers.update({'x-custom-header': 'someValue'})
+s = epilot.Epilot(client: http_client)
+```
+
+
+
+
+
+
+
+
### SDK Generated by [Speakeasy](https://docs.speakeasyapi.dev/docs/using-speakeasy/client-sdks)
diff --git a/user/RELEASES.md b/user/RELEASES.md
index 168f90c0b..4949e09e5 100644
--- a/user/RELEASES.md
+++ b/user/RELEASES.md
@@ -34,4 +34,550 @@ Based on:
### Changes
Based on:
- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
-- Speakeasy CLI 1.19.2 (2.16.5) https://github.com/speakeasy-api/speakeasy
\ No newline at end of file
+- Speakeasy CLI 1.19.2 (2.16.5) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-01 00:38:01
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.19.3 (2.16.7) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-06 00:35:15
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.19.6 (2.17.8) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-12 00:35:54
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.19.7 (2.17.9) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-14 00:35:01
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.20.0 (2.18.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-18 00:35:11
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.20.1 (2.18.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-19 00:37:35
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.20.2 (2.18.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-21 00:35:50
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.21.4 (2.19.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-22 00:36:18
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.22.1 (2.20.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-26 00:36:50
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.23.1 (2.21.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-27 00:38:48
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.25.1 (2.22.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-28 00:37:15
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.26.2 (2.23.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-04-29 00:35:19
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.26.4 (2.23.4) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-02 00:36:46
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.26.5 (2.23.6) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-03 00:36:05
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.27.0 (2.24.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-05 00:33:28
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.29.0 (2.26.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-06 00:33:39
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.29.1 (2.26.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-10 00:36:17
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.29.2 (2.26.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-11 00:36:11
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.30.0 (2.26.3) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-12 00:36:02
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.30.1 (2.26.4) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-13 00:34:35
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.31.1 (2.27.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-16 00:36:31
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.32.0 (2.28.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-17 00:39:37
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.33.2 (2.29.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-18 00:36:45
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.34.0 (2.30.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-19 00:36:59
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.35.0 (2.31.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-23 00:38:04
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.37.5 (2.32.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-05-27 00:38:19
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.39.0 (2.32.7) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-01 00:51:57
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.40.2 (2.34.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-02 00:41:31
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.40.3 (2.34.7) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-03 00:40:57
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.43.0 (2.35.3) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-07 00:43:58
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.44.2 (2.35.9) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-08 00:43:02
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.45.0 (2.37.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-09 00:44:53
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.45.2 (2.37.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-10 00:39:35
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.47.0 (2.39.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-11 00:46:04
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.47.1 (2.39.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-14 00:39:57
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.47.3 (2.40.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-16 00:42:12
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.48.0 (2.41.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-20 00:39:31
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.49.0 (2.41.4) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-21 00:42:09
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.49.1 (2.41.5) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-23 00:45:11
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.50.1 (2.43.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-27 00:45:58
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.51.1 (2.50.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-29 00:46:22
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.51.3 (2.52.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-01 00:52:04
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.52.0 (2.55.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-06 00:48:52
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.52.2 (2.57.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-07 00:47:38
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.53.0 (2.58.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-08 00:46:00
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.53.1 (2.58.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-11 00:41:27
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.56.0 (2.61.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-12 00:47:36
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.56.3 (2.61.4) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-13 00:47:41
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.57.0 (2.62.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-14 00:47:06
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.59.0 (2.65.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-18 01:05:26
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.61.0 (2.70.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-19 01:11:36
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.62.1 (2.70.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-22 00:40:57
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.64.0 (2.71.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-26 00:40:00
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.65.0 (2.73.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-27 00:37:47
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.65.1 (2.73.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-28 00:38:04
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.65.2 (2.75.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-08-01 00:44:53
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.66.1 (2.75.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-08-03 00:39:28
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.68.1 (2.77.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-08-04 00:39:57
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.68.3 (2.81.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-08-08 00:38:04
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.69.1 (2.82.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-08-15 00:31:17
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.72.0 (2.84.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.40.0] user
+
+## 2023-08-19 00:29:46
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.74.3 (2.86.6) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.40.1] user
+
+## 2023-08-25 00:31:59
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.74.11 (2.87.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.40.2] user
+
+## 2023-08-26 00:30:23
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.74.16 (2.88.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.41.0] user
+
+## 2023-08-29 00:32:34
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.74.17 (2.88.5) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.41.1] user
+
+## 2023-08-31 00:32:25
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.76.0 (2.89.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.42.0] user
+
+## 2023-09-01 00:34:54
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.77.0 (2.91.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.0] user
+
+## 2023-09-02 00:30:54
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.77.2 (2.93.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.1] user
+
+## 2023-09-05 00:31:54
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.78.3 (2.96.3) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.2] user
+
+## 2023-09-12 00:31:09
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.82.5 (2.108.3) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.3] user
+
+## 2023-09-16 00:31:37
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.86.0 (2.115.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.4] user
+
+## 2023-09-19 00:33:05
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.87.0 (2.116.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.5] user
+
+## 2023-09-20 00:32:49
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.88.0 (2.118.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.43.6] user
+
+## 2023-09-26 00:33:22
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.91.0 (2.129.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.44.0] user
+
+## 2023-09-27 00:33:37
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.91.2 (2.131.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.44.1] user
+
+## 2023-09-29 00:33:12
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.91.3 (2.139.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.45.0] user
+
+## 2023-10-01 00:38:04
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.92.2 (2.142.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.46.0] user
+
+## 2023-10-02 00:33:42
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.92.3 (2.143.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.46.1] user
+
+## 2023-10-05 00:33:23
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.94.0 (2.147.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.46.2] user
+
+## 2023-10-07 00:32:34
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.96.1 (2.150.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.47.0] user
+
+## 2023-10-13 00:34:18
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.99.0 (2.154.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.47.1] user
+
+## 2023-10-18 00:33:31
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.101.0 (2.161.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.0.0] user
+
+## 2023-10-21 00:32:04
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.104.0 (2.169.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.1.0] user
+
+## 2023-10-28 00:31:52
+### Changes
+Based on:
+- OpenAPI Doc 2.0.0 https://docs.api.epilot.io/user.yaml
+- Speakeasy CLI 1.109.0 (2.173.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.1.1] user
\ No newline at end of file
diff --git a/user/USAGE.md b/user/USAGE.md
index 0ba3877bd..0e0830b80 100755
--- a/user/USAGE.md
+++ b/user/USAGE.md
@@ -1,18 +1,21 @@
+
+
```python
import epilot
-from epilot.models import operations, shared
+from epilot.models import shared
s = epilot.Epilot(
security=shared.Security(
- epilot_auth="Bearer YOUR_BEARER_TOKEN_HERE",
+ epilot_auth="",
),
)
-
+
res = s.user_v1.get_me()
if res.user is not None:
# handle response
+ pass
```
\ No newline at end of file
diff --git a/user/docs/models/operations/activateuserrequest.md b/user/docs/models/operations/activateuserrequest.md
new file mode 100755
index 000000000..9bfc0fbcd
--- /dev/null
+++ b/user/docs/models/operations/activateuserrequest.md
@@ -0,0 +1,9 @@
+# ActivateUserRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `user_activation_payload` | [Optional[shared.UserActivationPayload]](../../models/shared/useractivationpayload.md) | :heavy_minus_sign: | N/A |
+| `token` | *str* | :heavy_check_mark: | Invite Token |
\ No newline at end of file
diff --git a/user/docs/models/operations/activateuserresponse.md b/user/docs/models/operations/activateuserresponse.md
new file mode 100755
index 000000000..c17e916f5
--- /dev/null
+++ b/user/docs/models/operations/activateuserresponse.md
@@ -0,0 +1,10 @@
+# ActivateUserResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/user/docs/models/operations/deleteuserv2request.md b/user/docs/models/operations/deleteuserv2request.md
new file mode 100755
index 000000000..a51d56912
--- /dev/null
+++ b/user/docs/models/operations/deleteuserv2request.md
@@ -0,0 +1,8 @@
+# DeleteUserV2Request
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `id` | *str* | :heavy_check_mark: | The Id of user |
\ No newline at end of file
diff --git a/user/docs/models/operations/deleteuserv2response.md b/user/docs/models/operations/deleteuserv2response.md
new file mode 100755
index 000000000..976e70a4f
--- /dev/null
+++ b/user/docs/models/operations/deleteuserv2response.md
@@ -0,0 +1,11 @@
+# DeleteUserV2Response
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `user` | [Optional[shared.User]](../../models/shared/user.md) | :heavy_minus_sign: | The deleted user |
\ No newline at end of file
diff --git a/user/docs/models/operations/getmeresponse.md b/user/docs/models/operations/getmeresponse.md
new file mode 100755
index 000000000..d5bed5376
--- /dev/null
+++ b/user/docs/models/operations/getmeresponse.md
@@ -0,0 +1,11 @@
+# GetMeResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `user` | [Optional[shared.User]](../../models/shared/user.md) | :heavy_minus_sign: | Currently logged in user |
\ No newline at end of file
diff --git a/user/docs/models/operations/getmev2response.md b/user/docs/models/operations/getmev2response.md
new file mode 100755
index 000000000..8d9fe6ce1
--- /dev/null
+++ b/user/docs/models/operations/getmev2response.md
@@ -0,0 +1,11 @@
+# GetMeV2Response
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `user_v2` | [Optional[shared.UserV2]](../../models/shared/userv2.md) | :heavy_minus_sign: | currently logged in user |
\ No newline at end of file
diff --git a/user/docs/models/operations/getuserloginparameters200applicationjson.md b/user/docs/models/operations/getuserloginparameters200applicationjson.md
new file mode 100755
index 000000000..dbe5b709e
--- /dev/null
+++ b/user/docs/models/operations/getuserloginparameters200applicationjson.md
@@ -0,0 +1,10 @@
+# GetUserLoginParameters200ApplicationJSON
+
+User
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `login_parameters` | List[[shared.LoginParameters](../../models/shared/loginparameters.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/user/docs/models/operations/getuserloginparametersrequest.md b/user/docs/models/operations/getuserloginparametersrequest.md
new file mode 100755
index 000000000..e292ef6b4
--- /dev/null
+++ b/user/docs/models/operations/getuserloginparametersrequest.md
@@ -0,0 +1,8 @@
+# GetUserLoginParametersRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `username` | *str* | :heavy_check_mark: | Username |
\ No newline at end of file
diff --git a/user/docs/models/operations/getuserloginparametersresponse.md b/user/docs/models/operations/getuserloginparametersresponse.md
new file mode 100755
index 000000000..d4f5816e3
--- /dev/null
+++ b/user/docs/models/operations/getuserloginparametersresponse.md
@@ -0,0 +1,11 @@
+# GetUserLoginParametersResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_user_login_parameters_200_application_json_object` | [Optional[GetUserLoginParameters200ApplicationJSON]](../../models/operations/getuserloginparameters200applicationjson.md) | :heavy_minus_sign: | User |
\ No newline at end of file
diff --git a/user/docs/models/operations/getuserloginparametersv2200applicationjson.md b/user/docs/models/operations/getuserloginparametersv2200applicationjson.md
new file mode 100755
index 000000000..5c18c4074
--- /dev/null
+++ b/user/docs/models/operations/getuserloginparametersv2200applicationjson.md
@@ -0,0 +1,10 @@
+# GetUserLoginParametersV2200ApplicationJSON
+
+User
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `login_parameters` | List[[shared.LoginParameters](../../models/shared/loginparameters.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/user/docs/models/operations/getuserloginparametersv2request.md b/user/docs/models/operations/getuserloginparametersv2request.md
new file mode 100755
index 000000000..eb7c59328
--- /dev/null
+++ b/user/docs/models/operations/getuserloginparametersv2request.md
@@ -0,0 +1,8 @@
+# GetUserLoginParametersV2Request
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `username` | *str* | :heavy_check_mark: | Username |
\ No newline at end of file
diff --git a/user/docs/models/operations/getuserloginparametersv2response.md b/user/docs/models/operations/getuserloginparametersv2response.md
new file mode 100755
index 000000000..7968e9a57
--- /dev/null
+++ b/user/docs/models/operations/getuserloginparametersv2response.md
@@ -0,0 +1,11 @@
+# GetUserLoginParametersV2Response
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_user_login_parameters_v2_200_application_json_object` | [Optional[GetUserLoginParametersV2200ApplicationJSON]](../../models/operations/getuserloginparametersv2200applicationjson.md) | :heavy_minus_sign: | User |
\ No newline at end of file
diff --git a/user/docs/models/operations/getuserrequest.md b/user/docs/models/operations/getuserrequest.md
new file mode 100755
index 000000000..1dd295cff
--- /dev/null
+++ b/user/docs/models/operations/getuserrequest.md
@@ -0,0 +1,8 @@
+# GetUserRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `id` | *str* | :heavy_check_mark: | User id |
\ No newline at end of file
diff --git a/user/docs/models/operations/getuserresponse.md b/user/docs/models/operations/getuserresponse.md
new file mode 100755
index 000000000..fae4ae8b3
--- /dev/null
+++ b/user/docs/models/operations/getuserresponse.md
@@ -0,0 +1,11 @@
+# GetUserResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `user` | [Optional[shared.User]](../../models/shared/user.md) | :heavy_minus_sign: | User |
\ No newline at end of file
diff --git a/user/docs/models/operations/getuserv2request.md b/user/docs/models/operations/getuserv2request.md
new file mode 100755
index 000000000..4bbef2b59
--- /dev/null
+++ b/user/docs/models/operations/getuserv2request.md
@@ -0,0 +1,8 @@
+# GetUserV2Request
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `id` | *str* | :heavy_check_mark: | The Id of user |
\ No newline at end of file
diff --git a/user/docs/models/operations/getuserv2response.md b/user/docs/models/operations/getuserv2response.md
new file mode 100755
index 000000000..127a7a92e
--- /dev/null
+++ b/user/docs/models/operations/getuserv2response.md
@@ -0,0 +1,11 @@
+# GetUserV2Response
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `user_v2` | [Optional[shared.UserV2]](../../models/shared/userv2.md) | :heavy_minus_sign: | The returned user |
\ No newline at end of file
diff --git a/user/docs/models/operations/inviteuserresponse.md b/user/docs/models/operations/inviteuserresponse.md
new file mode 100755
index 000000000..42789bf8f
--- /dev/null
+++ b/user/docs/models/operations/inviteuserresponse.md
@@ -0,0 +1,11 @@
+# InviteUserResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `user_v2` | [Optional[shared.UserV2]](../../models/shared/userv2.md) | :heavy_minus_sign: | Invited successfully |
\ No newline at end of file
diff --git a/user/docs/models/operations/listusers200applicationjson.md b/user/docs/models/operations/listusers200applicationjson.md
new file mode 100755
index 000000000..62f65fd56
--- /dev/null
+++ b/user/docs/models/operations/listusers200applicationjson.md
@@ -0,0 +1,10 @@
+# ListUsers200ApplicationJSON
+
+List of users
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `users` | List[[shared.User](../../models/shared/user.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/user/docs/models/operations/listusersrequest.md b/user/docs/models/operations/listusersrequest.md
new file mode 100755
index 000000000..772b9aad4
--- /dev/null
+++ b/user/docs/models/operations/listusersrequest.md
@@ -0,0 +1,11 @@
+# ListUsersRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- |
+| `limit` | *Optional[float]* | :heavy_minus_sign: | Limit the results size |
+| `offset` | *Optional[float]* | :heavy_minus_sign: | Specify the page |
+| `org_ids` | List[*str*] | :heavy_minus_sign: | Comma-separated list of organization ids to filter by |
+| `query` | *Optional[str]* | :heavy_minus_sign: | Query text to filter by |
\ No newline at end of file
diff --git a/user/docs/models/operations/listusersresponse.md b/user/docs/models/operations/listusersresponse.md
new file mode 100755
index 000000000..e6fa5ff30
--- /dev/null
+++ b/user/docs/models/operations/listusersresponse.md
@@ -0,0 +1,11 @@
+# ListUsersResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `list_users_200_application_json_object` | [Optional[ListUsers200ApplicationJSON]](../../models/operations/listusers200applicationjson.md) | :heavy_minus_sign: | List of users |
\ No newline at end of file
diff --git a/user/docs/models/operations/listusersv2200applicationjson.md b/user/docs/models/operations/listusersv2200applicationjson.md
new file mode 100755
index 000000000..3e6712af6
--- /dev/null
+++ b/user/docs/models/operations/listusersv2200applicationjson.md
@@ -0,0 +1,10 @@
+# ListUsersV2200ApplicationJSON
+
+List of organization users
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- |
+| `results` | List[[shared.UserV2](../../models/shared/userv2.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/user/docs/models/operations/listusersv2request.md b/user/docs/models/operations/listusersv2request.md
new file mode 100755
index 000000000..71150aad4
--- /dev/null
+++ b/user/docs/models/operations/listusersv2request.md
@@ -0,0 +1,10 @@
+# ListUsersV2Request
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------- | ----------------------- | ----------------------- | ----------------------- |
+| `limit` | *Optional[float]* | :heavy_minus_sign: | Limit the results size |
+| `offset` | *Optional[float]* | :heavy_minus_sign: | Specify the page |
+| `query` | *Optional[str]* | :heavy_minus_sign: | Query text to filter by |
\ No newline at end of file
diff --git a/user/docs/models/operations/listusersv2response.md b/user/docs/models/operations/listusersv2response.md
new file mode 100755
index 000000000..390bdc2cb
--- /dev/null
+++ b/user/docs/models/operations/listusersv2response.md
@@ -0,0 +1,11 @@
+# ListUsersV2Response
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `list_users_v2_200_application_json_object` | [Optional[ListUsersV2200ApplicationJSON]](../../models/operations/listusersv2200applicationjson.md) | :heavy_minus_sign: | List of organization users |
\ No newline at end of file
diff --git a/user/docs/models/operations/resenduserinvitationrequestbody.md b/user/docs/models/operations/resenduserinvitationrequestbody.md
new file mode 100755
index 000000000..79ba58dbc
--- /dev/null
+++ b/user/docs/models/operations/resenduserinvitationrequestbody.md
@@ -0,0 +1,9 @@
+# ResendUserInvitationRequestBody
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
+| `email` | *Optional[str]* | :heavy_minus_sign: | Email address of the address | test@example.com |
+| `language` | [Optional[ResendUserInvitationRequestBodyLanguage]](../../models/operations/resenduserinvitationrequestbodylanguage.md) | :heavy_minus_sign: | Language for user invitation email | |
\ No newline at end of file
diff --git a/user/docs/models/operations/resenduserinvitationrequestbodylanguage.md b/user/docs/models/operations/resenduserinvitationrequestbodylanguage.md
new file mode 100755
index 000000000..19b880524
--- /dev/null
+++ b/user/docs/models/operations/resenduserinvitationrequestbodylanguage.md
@@ -0,0 +1,11 @@
+# ResendUserInvitationRequestBodyLanguage
+
+Language for user invitation email
+
+
+## Values
+
+| Name | Value |
+| ----- | ----- |
+| `EN` | en |
+| `DE` | de |
\ No newline at end of file
diff --git a/user/docs/models/operations/resenduserinvitationresponse.md b/user/docs/models/operations/resenduserinvitationresponse.md
new file mode 100755
index 000000000..f98d922c1
--- /dev/null
+++ b/user/docs/models/operations/resenduserinvitationresponse.md
@@ -0,0 +1,11 @@
+# ResendUserInvitationResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `user_v2` | [Optional[shared.UserV2]](../../models/shared/userv2.md) | :heavy_minus_sign: | User Invitation sent successfully. |
\ No newline at end of file
diff --git a/user/docs/models/operations/signupuser200applicationjson.md b/user/docs/models/operations/signupuser200applicationjson.md
new file mode 100755
index 000000000..c47d2b0c3
--- /dev/null
+++ b/user/docs/models/operations/signupuser200applicationjson.md
@@ -0,0 +1,11 @@
+# SignUpUser200ApplicationJSON
+
+The created user and organization
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `organization` | [Optional[shared.Organization]](../../models/shared/organization.md) | :heavy_minus_sign: | N/A |
+| `user` | [Optional[shared.User]](../../models/shared/user.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/user/docs/models/operations/signupuserrequest.md b/user/docs/models/operations/signupuserrequest.md
new file mode 100755
index 000000000..122ee6109
--- /dev/null
+++ b/user/docs/models/operations/signupuserrequest.md
@@ -0,0 +1,9 @@
+# SignUpUserRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
+| `signup_user_payload` | [Optional[shared.SignupUserPayload]](../../models/shared/signupuserpayload.md) | :heavy_minus_sign: | N/A |
+| `token` | *Optional[str]* | :heavy_minus_sign: | Invitation partner token |
\ No newline at end of file
diff --git a/user/docs/models/operations/signupuserresponse.md b/user/docs/models/operations/signupuserresponse.md
new file mode 100755
index 000000000..1c55fa3d4
--- /dev/null
+++ b/user/docs/models/operations/signupuserresponse.md
@@ -0,0 +1,11 @@
+# SignUpUserResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `sign_up_user_200_application_json_object` | [Optional[SignUpUser200ApplicationJSON]](../../models/operations/signupuser200applicationjson.md) | :heavy_minus_sign: | The created user and organization |
\ No newline at end of file
diff --git a/user/docs/models/operations/updateuserv2request.md b/user/docs/models/operations/updateuserv2request.md
new file mode 100755
index 000000000..51fe8dde2
--- /dev/null
+++ b/user/docs/models/operations/updateuserv2request.md
@@ -0,0 +1,9 @@
+# UpdateUserV2Request
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `user_v2` | [Optional[shared.UserV2]](../../models/shared/userv2.md) | :heavy_minus_sign: | N/A |
+| `id` | *str* | :heavy_check_mark: | The Id of user |
\ No newline at end of file
diff --git a/user/docs/models/operations/updateuserv2response.md b/user/docs/models/operations/updateuserv2response.md
new file mode 100755
index 000000000..5bf3c16cc
--- /dev/null
+++ b/user/docs/models/operations/updateuserv2response.md
@@ -0,0 +1,11 @@
+# UpdateUserV2Response
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `user_v2` | [Optional[shared.UserV2]](../../models/shared/userv2.md) | :heavy_minus_sign: | The returned user |
\ No newline at end of file
diff --git a/user/docs/models/operations/verifyemailwithtokenrequest.md b/user/docs/models/operations/verifyemailwithtokenrequest.md
new file mode 100755
index 000000000..92231ef79
--- /dev/null
+++ b/user/docs/models/operations/verifyemailwithtokenrequest.md
@@ -0,0 +1,9 @@
+# VerifyEmailWithTokenRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `user_verification_payload` | [Optional[shared.UserVerificationPayload]](../../models/shared/userverificationpayload.md) | :heavy_minus_sign: | N/A |
+| `token` | *str* | :heavy_check_mark: | Verification Token |
\ No newline at end of file
diff --git a/user/docs/models/operations/verifyemailwithtokenresponse.md b/user/docs/models/operations/verifyemailwithtokenresponse.md
new file mode 100755
index 000000000..58dbb6136
--- /dev/null
+++ b/user/docs/models/operations/verifyemailwithtokenresponse.md
@@ -0,0 +1,10 @@
+# VerifyEmailWithTokenResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/user/docs/models/shared/loginparameters.md b/user/docs/models/shared/loginparameters.md
new file mode 100755
index 000000000..acd25404a
--- /dev/null
+++ b/user/docs/models/shared/loginparameters.md
@@ -0,0 +1,17 @@
+# LoginParameters
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
+| `cognito_identity_pool_id` | *Optional[str]* | :heavy_minus_sign: | N/A | eu-central-1:d24af723-7b40-4c3d-be57-d0a732a59a5d |
+| `cognito_oauth_domain` | *Optional[str]* | :heavy_minus_sign: | N/A | epilot-org-123 |
+| `cognito_oauth_scopes` | List[*str*] | :heavy_minus_sign: | N/A | openid |
+| `cognito_region` | *Optional[str]* | :heavy_minus_sign: | N/A | eu-central-1 |
+| `cognito_user_pool_client_id` | *Optional[str]* | :heavy_minus_sign: | N/A | asbkh213ehkquwhdi |
+| `cognito_user_pool_id` | *Optional[str]* | :heavy_minus_sign: | N/A | eu-central-sample |
+| `oauth_response_type` | [Optional[LoginParametersOauthResponseType]](../../models/shared/loginparametersoauthresponsetype.md) | :heavy_minus_sign: | N/A | |
+| `organization_id` | *Optional[str]* | :heavy_minus_sign: | N/A | 123 |
+| `organization_name` | *Optional[str]* | :heavy_minus_sign: | N/A | epilot GmbH |
+| `organization_type` | *Optional[str]* | :heavy_minus_sign: | N/A | Vendor |
\ No newline at end of file
diff --git a/user/docs/models/shared/loginparametersoauthresponsetype.md b/user/docs/models/shared/loginparametersoauthresponsetype.md
new file mode 100755
index 000000000..dbff00d79
--- /dev/null
+++ b/user/docs/models/shared/loginparametersoauthresponsetype.md
@@ -0,0 +1,9 @@
+# LoginParametersOauthResponseType
+
+
+## Values
+
+| Name | Value |
+| ------- | ------- |
+| `CODE` | code |
+| `TOKEN` | token |
\ No newline at end of file
diff --git a/user/docs/models/shared/organization.md b/user/docs/models/shared/organization.md
new file mode 100755
index 000000000..139711307
--- /dev/null
+++ b/user/docs/models/shared/organization.md
@@ -0,0 +1,20 @@
+# Organization
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
+| `address` | [Optional[OrganizationAddress]](../../models/shared/organizationaddress.md) | :heavy_minus_sign: | N/A | |
+| `email` | *Optional[str]* | :heavy_minus_sign: | N/A | someone@epilot.cloud |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `is_unlicensed_org` | *Optional[bool]* | :heavy_minus_sign: | N/A | false |
+| `logo_thumbnail_url` | *Optional[str]* | :heavy_minus_sign: | N/A | https://epilot-playground-organization-data.s3.eu-central-1.amazonaws.com/epilot-logo.png |
+| `logo_url` | *Optional[str]* | :heavy_minus_sign: | N/A | https://epilot-playground-organization-data.s3.eu-central-1.amazonaws.com/epilot-logo.png |
+| `name` | *Optional[str]* | :heavy_minus_sign: | N/A | Epilot |
+| `phone` | *Optional[str]* | :heavy_minus_sign: | N/A | 49123123123 |
+| `pricing_tier` | *Optional[str]* | :heavy_minus_sign: | N/A | professional |
+| `signature` | *Optional[str]* | :heavy_minus_sign: | N/A |
Thanks
|
+| `symbol` | *Optional[str]* | :heavy_minus_sign: | N/A | EPI |
+| `type` | [Optional[OrganizationType]](../../models/shared/organizationtype.md) | :heavy_minus_sign: | N/A | |
+| `website` | *Optional[str]* | :heavy_minus_sign: | N/A | https://epilot.cloud |
\ No newline at end of file
diff --git a/user/docs/models/shared/organizationaddress.md b/user/docs/models/shared/organizationaddress.md
new file mode 100755
index 000000000..05487a59c
--- /dev/null
+++ b/user/docs/models/shared/organizationaddress.md
@@ -0,0 +1,12 @@
+# OrganizationAddress
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `city` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `country` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `postal_code` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `street` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `street_number` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/user/docs/models/shared/organizationdetail.md b/user/docs/models/shared/organizationdetail.md
new file mode 100755
index 000000000..eec276cb4
--- /dev/null
+++ b/user/docs/models/shared/organizationdetail.md
@@ -0,0 +1,16 @@
+# OrganizationDetail
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `email` | *str* | :heavy_check_mark: | N/A | |
+| `is_privacy_policy_checked` | *Optional[bool]* | :heavy_minus_sign: | N/A | false |
+| `is_terms_and_conditions_checked` | *Optional[bool]* | :heavy_minus_sign: | N/A | false |
+| `name` | *str* | :heavy_check_mark: | N/A | Epilot |
+| `phone` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `pricing_tier` | *str* | :heavy_check_mark: | N/A | professional |
+| `type` | [OrganizationDetailType](../../models/shared/organizationdetailtype.md) | :heavy_check_mark: | N/A | |
+| `website` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/user/docs/models/shared/organizationdetailtype.md b/user/docs/models/shared/organizationdetailtype.md
new file mode 100755
index 000000000..537ee18da
--- /dev/null
+++ b/user/docs/models/shared/organizationdetailtype.md
@@ -0,0 +1,9 @@
+# OrganizationDetailType
+
+
+## Values
+
+| Name | Value |
+| --------- | --------- |
+| `VENDOR` | Vendor |
+| `PARTNER` | Partner |
\ No newline at end of file
diff --git a/user/docs/models/shared/organizationtype.md b/user/docs/models/shared/organizationtype.md
new file mode 100755
index 000000000..c91a9df64
--- /dev/null
+++ b/user/docs/models/shared/organizationtype.md
@@ -0,0 +1,9 @@
+# OrganizationType
+
+
+## Values
+
+| Name | Value |
+| --------- | --------- |
+| `VENDOR` | Vendor |
+| `PARTNER` | Partner |
\ No newline at end of file
diff --git a/user/docs/models/shared/security.md b/user/docs/models/shared/security.md
new file mode 100755
index 000000000..f06333390
--- /dev/null
+++ b/user/docs/models/shared/security.md
@@ -0,0 +1,8 @@
+# Security
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/user/docs/models/shared/signupuserpayload.md b/user/docs/models/shared/signupuserpayload.md
new file mode 100755
index 000000000..81676f6c9
--- /dev/null
+++ b/user/docs/models/shared/signupuserpayload.md
@@ -0,0 +1,10 @@
+# SignupUserPayload
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
+| `language` | [Optional[SignupUserPayloadLanguage]](../../models/shared/signupuserpayloadlanguage.md) | :heavy_minus_sign: | Language for user invitation email |
+| `organization_detail` | [Optional[OrganizationDetail]](../../models/shared/organizationdetail.md) | :heavy_minus_sign: | N/A |
+| `user_detail` | [Optional[UserDetail]](../../models/shared/userdetail.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/user/docs/models/shared/signupuserpayloadlanguage.md b/user/docs/models/shared/signupuserpayloadlanguage.md
new file mode 100755
index 000000000..9adf4c581
--- /dev/null
+++ b/user/docs/models/shared/signupuserpayloadlanguage.md
@@ -0,0 +1,11 @@
+# SignupUserPayloadLanguage
+
+Language for user invitation email
+
+
+## Values
+
+| Name | Value |
+| ----- | ----- |
+| `EN` | en |
+| `DE` | de |
\ No newline at end of file
diff --git a/user/docs/models/shared/user.md b/user/docs/models/shared/user.md
new file mode 100755
index 000000000..1b2a0f065
--- /dev/null
+++ b/user/docs/models/shared/user.md
@@ -0,0 +1,17 @@
+# User
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| ~~`display_name`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible. | Example user |
+| `email` | *str* | :heavy_check_mark: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `image_uri` | [Optional[UserImageURI]](../../models/shared/userimageuri.md) | :heavy_minus_sign: | N/A | |
+| ~~`name`~~ | *str* | :heavy_check_mark: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible. | Example user |
+| `organization_id` | *str* | :heavy_check_mark: | N/A | |
+| `preferred_language` | *str* | :heavy_check_mark: | N/A | de |
+| `properties` | List[[UserProperties](../../models/shared/userproperties.md)] | :heavy_check_mark: | N/A | |
+| ~~`roles`~~ | List[*str*] | :heavy_check_mark: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Deprecated! Please use Permissions API instead | Owner |
+| `signature` | *Optional[str]* | :heavy_minus_sign: | N/A | Thanks
|
\ No newline at end of file
diff --git a/user/docs/models/shared/useractivationpayload.md b/user/docs/models/shared/useractivationpayload.md
new file mode 100755
index 000000000..f191f1195
--- /dev/null
+++ b/user/docs/models/shared/useractivationpayload.md
@@ -0,0 +1,9 @@
+# UserActivationPayload
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- |
+| `display_name` | *Optional[str]* | :heavy_minus_sign: | User's display name (default: email address) | Example User |
+| `password` | *Optional[str]* | :heavy_minus_sign: | User's password | AKjhdakjsdh@!34 |
\ No newline at end of file
diff --git a/user/docs/models/shared/userdetail.md b/user/docs/models/shared/userdetail.md
new file mode 100755
index 000000000..de89ee00e
--- /dev/null
+++ b/user/docs/models/shared/userdetail.md
@@ -0,0 +1,10 @@
+# UserDetail
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `email` | *str* | :heavy_check_mark: | N/A | |
+| `full_name` | *str* | :heavy_check_mark: | N/A | Example user |
+| `password` | *str* | :heavy_check_mark: | User's password | AKjhdakjsdh@!34 |
\ No newline at end of file
diff --git a/user/docs/models/shared/userimageuri.md b/user/docs/models/shared/userimageuri.md
new file mode 100755
index 000000000..a03653884
--- /dev/null
+++ b/user/docs/models/shared/userimageuri.md
@@ -0,0 +1,10 @@
+# UserImageURI
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `original` | *Optional[str]* | :heavy_minus_sign: | N/A | https://account-profile-images.epilot.cloud/1/avatar.png |
+| `thumbnail_32` | *Optional[str]* | :heavy_minus_sign: | N/A | https://account-profile-images.epilot.cloud/1/avatar_32x32.png |
\ No newline at end of file
diff --git a/user/docs/models/shared/userinvitationpayload.md b/user/docs/models/shared/userinvitationpayload.md
new file mode 100755
index 000000000..4cbf59c00
--- /dev/null
+++ b/user/docs/models/shared/userinvitationpayload.md
@@ -0,0 +1,10 @@
+# UserInvitationPayload
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
+| `email` | *Optional[str]* | :heavy_minus_sign: | Email address of the address | test@example.com |
+| `language` | [Optional[UserInvitationPayloadLanguage]](../../models/shared/userinvitationpayloadlanguage.md) | :heavy_minus_sign: | Language for user invitation email | |
+| `roles` | List[*str*] | :heavy_minus_sign: | N/A | 123:owner |
\ No newline at end of file
diff --git a/user/docs/models/shared/userinvitationpayloadlanguage.md b/user/docs/models/shared/userinvitationpayloadlanguage.md
new file mode 100755
index 000000000..5c8afbcac
--- /dev/null
+++ b/user/docs/models/shared/userinvitationpayloadlanguage.md
@@ -0,0 +1,11 @@
+# UserInvitationPayloadLanguage
+
+Language for user invitation email
+
+
+## Values
+
+| Name | Value |
+| ----- | ----- |
+| `EN` | en |
+| `DE` | de |
\ No newline at end of file
diff --git a/user/docs/models/shared/userproperties.md b/user/docs/models/shared/userproperties.md
new file mode 100755
index 000000000..3f28f6770
--- /dev/null
+++ b/user/docs/models/shared/userproperties.md
@@ -0,0 +1,9 @@
+# UserProperties
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `name` | *str* | :heavy_check_mark: | N/A | profileImageName |
+| `value` | *str* | :heavy_check_mark: | N/A | avatar.png |
\ No newline at end of file
diff --git a/user/docs/models/shared/userv2.md b/user/docs/models/shared/userv2.md
new file mode 100755
index 000000000..b12677a72
--- /dev/null
+++ b/user/docs/models/shared/userv2.md
@@ -0,0 +1,25 @@
+# UserV2
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- |
+| `created_at` | *Optional[str]* | :heavy_minus_sign: | N/A | 2022-02-08T04:44:32.246Z |
+| `department` | *Optional[str]* | :heavy_minus_sign: | User's department | Sales |
+| `display_name` | *Optional[str]* | :heavy_minus_sign: | User's display name (default: email address) | Example User |
+| `draft_email` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `email` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `favorites` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | [object Object] |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `image_uri` | [Optional[UserV2ImageURI]](../../models/shared/userv2imageuri.md) | :heavy_minus_sign: | N/A | |
+| `is_signature_enabled` | *Optional[bool]* | :heavy_minus_sign: | N/A | true |
+| `mfa_enabled` | *Optional[bool]* | :heavy_minus_sign: | N/A | false |
+| `organization_id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `phone` | *Optional[str]* | :heavy_minus_sign: | N/A | 1234567890 |
+| `phone_verified` | *Optional[bool]* | :heavy_minus_sign: | N/A | true |
+| `preferred_language` | *Optional[str]* | :heavy_minus_sign: | N/A | de |
+| `properties` | List[[UserV2Properties](../../models/shared/userv2properties.md)] | :heavy_minus_sign: | N/A | |
+| `signature` | *Optional[str]* | :heavy_minus_sign: | N/A | Thanks
|
+| `status` | [Optional[UserV2Status]](../../models/shared/userv2status.md) | :heavy_minus_sign: | N/A | |
+| `token` | *Optional[str]* | :heavy_minus_sign: | N/A | 65dc527f-cb2d-4158-8f2e-8978dbceb599 |
\ No newline at end of file
diff --git a/user/docs/models/shared/userv2imageuri.md b/user/docs/models/shared/userv2imageuri.md
new file mode 100755
index 000000000..37a3d4c22
--- /dev/null
+++ b/user/docs/models/shared/userv2imageuri.md
@@ -0,0 +1,10 @@
+# UserV2ImageURI
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------- | ----------------------- | ----------------------- | ----------------------- | ----------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | [object Object] |
+| `original` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `thumbnail_32` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/user/docs/models/shared/userv2properties.md b/user/docs/models/shared/userv2properties.md
new file mode 100755
index 000000000..d100a47c5
--- /dev/null
+++ b/user/docs/models/shared/userv2properties.md
@@ -0,0 +1,9 @@
+# UserV2Properties
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `name` | *str* | :heavy_check_mark: | N/A | profileImageName |
+| `value` | *str* | :heavy_check_mark: | N/A | avatar.png |
\ No newline at end of file
diff --git a/user/docs/models/shared/userv2status.md b/user/docs/models/shared/userv2status.md
new file mode 100755
index 000000000..4536edb5a
--- /dev/null
+++ b/user/docs/models/shared/userv2status.md
@@ -0,0 +1,11 @@
+# UserV2Status
+
+
+## Values
+
+| Name | Value |
+| ------------- | ------------- |
+| `ACTIVE` | Active |
+| `PENDING` | Pending |
+| `DEACTIVATED` | Deactivated |
+| `DELETED` | Deleted |
\ No newline at end of file
diff --git a/user/docs/models/shared/userverificationpayload.md b/user/docs/models/shared/userverificationpayload.md
new file mode 100755
index 000000000..09e3d731c
--- /dev/null
+++ b/user/docs/models/shared/userverificationpayload.md
@@ -0,0 +1,8 @@
+# UserVerificationPayload
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `password` | *Optional[str]* | :heavy_minus_sign: | User's password | AKjhdakjsdh@!34 |
\ No newline at end of file
diff --git a/user/docs/sdks/epilot/README.md b/user/docs/sdks/epilot/README.md
new file mode 100755
index 000000000..6f5517c64
--- /dev/null
+++ b/user/docs/sdks/epilot/README.md
@@ -0,0 +1,10 @@
+# Epilot SDK
+
+
+## Overview
+
+User API: Manage users in epilot organization(s)
+
+
+### Available Operations
+
diff --git a/user/docs/sdks/userv1/README.md b/user/docs/sdks/userv1/README.md
new file mode 100755
index 000000000..802615f4b
--- /dev/null
+++ b/user/docs/sdks/userv1/README.md
@@ -0,0 +1,162 @@
+# UserV1
+(*user_v1*)
+
+## Overview
+
+Legacy User API
+
+### Available Operations
+
+* [get_me](#get_me) - getMe
+* [get_user](#get_user) - getUser
+* [get_user_login_parameters](#get_user_login_parameters) - getUserLoginParameters
+* [list_users](#list_users) - listUsers
+
+## get_me
+
+Get currently logged in user
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+
+res = s.user_v1.get_me()
+
+if res.user is not None:
+ # handle response
+ pass
+```
+
+
+### Response
+
+**[operations.GetMeResponse](../../models/operations/getmeresponse.md)**
+
+
+## get_user
+
+Get user by id
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetUserRequest(
+ id='',
+)
+
+res = s.user_v1.get_user(req)
+
+if res.user is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `request` | [operations.GetUserRequest](../../models/operations/getuserrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetUserResponse](../../models/operations/getuserresponse.md)**
+
+
+## get_user_login_parameters
+
+Get user organization login parameters by username
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetUserLoginParametersRequest(
+ username='Matilda.Jenkins64',
+)
+
+res = s.user_v1.get_user_login_parameters(req)
+
+if res.get_user_login_parameters_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetUserLoginParametersRequest](../../models/operations/getuserloginparametersrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetUserLoginParametersResponse](../../models/operations/getuserloginparametersresponse.md)**
+
+
+## list_users
+
+Lists users in organizations you have access to
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.ListUsersRequest(
+ org_ids=[
+ 'string',
+ ],
+)
+
+res = s.user_v1.list_users(req)
+
+if res.list_users_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `request` | [operations.ListUsersRequest](../../models/operations/listusersrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.ListUsersResponse](../../models/operations/listusersresponse.md)**
+
diff --git a/user/docs/sdks/userv2/README.md b/user/docs/sdks/userv2/README.md
new file mode 100755
index 000000000..4fd9cc890
--- /dev/null
+++ b/user/docs/sdks/userv2/README.md
@@ -0,0 +1,501 @@
+# UserV2
+(*user_v2*)
+
+## Overview
+
+User API V2
+
+### Available Operations
+
+* [activate_user](#activate_user) - activateUser
+* [delete_user_v2](#delete_user_v2) - deleteUserV2
+* [get_me_v2](#get_me_v2) - getMeV2
+* [get_user_login_parameters_v2](#get_user_login_parameters_v2) - getUserLoginParametersV2
+* [get_user_v2](#get_user_v2) - getUserV2
+* [invite_user](#invite_user) - inviteUser
+* [list_users_v2](#list_users_v2) - listUsersV2
+* [resend_user_invitation](#resend_user_invitation) - resendUserInvitation
+* [sign_up_user](#sign_up_user) - signUpUser
+* [update_user_v2](#update_user_v2) - updateUserV2
+* [verify_email_with_token](#verify_email_with_token) - verifyEmailWithToken
+
+## activate_user
+
+Activate user using an invite token
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.ActivateUserRequest(
+ user_activation_payload=shared.UserActivationPayload(
+ display_name='Example User',
+ password='AKjhdakjsdh@!34',
+ ),
+ token='string',
+)
+
+res = s.user_v2.activate_user(req)
+
+if res.status_code == 200:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.ActivateUserRequest](../../models/operations/activateuserrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.ActivateUserResponse](../../models/operations/activateuserresponse.md)**
+
+
+## delete_user_v2
+
+Delete user by user id
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.DeleteUserV2Request(
+ id='',
+)
+
+res = s.user_v2.delete_user_v2(req)
+
+if res.user is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.DeleteUserV2Request](../../models/operations/deleteuserv2request.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.DeleteUserV2Response](../../models/operations/deleteuserv2response.md)**
+
+
+## get_me_v2
+
+Get currently logged in user
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+
+res = s.user_v2.get_me_v2()
+
+if res.user_v2 is not None:
+ # handle response
+ pass
+```
+
+
+### Response
+
+**[operations.GetMeV2Response](../../models/operations/getmev2response.md)**
+
+
+## get_user_login_parameters_v2
+
+Get user organization login parameters by username
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetUserLoginParametersV2Request(
+ username='Eve.Kunde',
+)
+
+res = s.user_v2.get_user_login_parameters_v2(req)
+
+if res.get_user_login_parameters_v2_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetUserLoginParametersV2Request](../../models/operations/getuserloginparametersv2request.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetUserLoginParametersV2Response](../../models/operations/getuserloginparametersv2response.md)**
+
+
+## get_user_v2
+
+Get user details by user id
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetUserV2Request(
+ id='',
+)
+
+res = s.user_v2.get_user_v2(req)
+
+if res.user_v2 is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `request` | [operations.GetUserV2Request](../../models/operations/getuserv2request.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetUserV2Response](../../models/operations/getuserv2response.md)**
+
+
+## invite_user
+
+Creates a new user in the caller's organization and sends an invite email to activate
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = shared.UserInvitationPayload(
+ email='test@example.com',
+ roles=[
+ '1',
+ '2',
+ '3',
+ ':',
+ 'o',
+ 'w',
+ 'n',
+ 'e',
+ 'r',
+ ],
+)
+
+res = s.user_v2.invite_user(req)
+
+if res.user_v2 is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `request` | [shared.UserInvitationPayload](../../models/shared/userinvitationpayload.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.InviteUserResponse](../../models/operations/inviteuserresponse.md)**
+
+
+## list_users_v2
+
+Get the list of organization users
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.ListUsersV2Request()
+
+res = s.user_v2.list_users_v2(req)
+
+if res.list_users_v2_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
+| `request` | [operations.ListUsersV2Request](../../models/operations/listusersv2request.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.ListUsersV2Response](../../models/operations/listusersv2response.md)**
+
+
+## resend_user_invitation
+
+Resend user invitation email
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.ResendUserInvitationRequestBody(
+ email='test@example.com',
+)
+
+res = s.user_v2.resend_user_invitation(req)
+
+if res.user_v2 is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| `request` | [operations.ResendUserInvitationRequestBody](../../models/operations/resenduserinvitationrequestbody.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.ResendUserInvitationResponse](../../models/operations/resenduserinvitationresponse.md)**
+
+
+## sign_up_user
+
+signUpUser
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.SignUpUserRequest(
+ signup_user_payload=shared.SignupUserPayload(
+ organization_detail=shared.OrganizationDetail(
+ additional_properties={
+ "key": 'string',
+ },
+ email='Jettie71@yahoo.com',
+ is_privacy_policy_checked=False,
+ is_terms_and_conditions_checked=False,
+ name='Epilot',
+ pricing_tier='professional',
+ type=shared.OrganizationDetailType.PARTNER,
+ ),
+ user_detail=shared.UserDetail(
+ email='Caden82@hotmail.com',
+ full_name='Example user',
+ password='AKjhdakjsdh@!34',
+ ),
+ ),
+)
+
+res = s.user_v2.sign_up_user(req)
+
+if res.sign_up_user_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `request` | [operations.SignUpUserRequest](../../models/operations/signupuserrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.SignUpUserResponse](../../models/operations/signupuserresponse.md)**
+
+
+## update_user_v2
+
+Update user details
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.UpdateUserV2Request(
+ user_v2=shared.UserV2(
+ created_at='2022-02-08T04:44:32.246Z',
+ department='Sales',
+ display_name='Example User',
+ favorites={
+ "entity_views": 'string',
+ "dashboard": 'string',
+ },
+ image_uri=shared.UserV2ImageURI(
+ additional_properties={
+ "original": 'string',
+ "thumbnail_32": 'string',
+ },
+ ),
+ is_signature_enabled=True,
+ mfa_enabled=False,
+ phone='1234567890',
+ phone_verified=True,
+ preferred_language='de',
+ properties=[
+ shared.UserV2Properties(
+ name='profileImageName',
+ value='avatar.png',
+ ),
+ ],
+ signature='Thanks
',
+ token='65dc527f-cb2d-4158-8f2e-8978dbceb599',
+ ),
+ id='',
+)
+
+res = s.user_v2.update_user_v2(req)
+
+if res.user_v2 is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.UpdateUserV2Request](../../models/operations/updateuserv2request.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.UpdateUserV2Response](../../models/operations/updateuserv2response.md)**
+
+
+## verify_email_with_token
+
+Update new email using an verification token
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.VerifyEmailWithTokenRequest(
+ user_verification_payload=shared.UserVerificationPayload(
+ password='AKjhdakjsdh@!34',
+ ),
+ token='string',
+)
+
+res = s.user_v2.verify_email_with_token(req)
+
+if res.status_code == 200:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `request` | [operations.VerifyEmailWithTokenRequest](../../models/operations/verifyemailwithtokenrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.VerifyEmailWithTokenResponse](../../models/operations/verifyemailwithtokenresponse.md)**
+
diff --git a/user/files.gen b/user/files.gen
index 58c34f5fd..dbacd1898 100755
--- a/user/files.gen
+++ b/user/files.gen
@@ -1,3 +1,4 @@
+src/epilot/sdkconfiguration.py
src/epilot/user_v1.py
src/epilot/user_v2.py
src/epilot/sdk.py
@@ -5,6 +6,7 @@ pylintrc
setup.py
src/epilot/__init__.py
src/epilot/models/__init__.py
+src/epilot/models/errors/sdkerror.py
src/epilot/utils/__init__.py
src/epilot/utils/retries.py
src/epilot/utils/utils.py
@@ -32,7 +34,68 @@ src/epilot/models/shared/userinvitationpayload.py
src/epilot/models/shared/organization.py
src/epilot/models/shared/signupuserpayload.py
src/epilot/models/shared/userdetail.py
+src/epilot/models/shared/organizationdetail.py
src/epilot/models/shared/userverificationpayload.py
src/epilot/models/shared/security.py
src/epilot/models/shared/__init__.py
-USAGE.md
\ No newline at end of file
+src/epilot/models/errors/__init__.py
+USAGE.md
+docs/models/operations/getmeresponse.md
+docs/models/operations/getuserrequest.md
+docs/models/operations/getuserresponse.md
+docs/models/operations/getuserloginparametersrequest.md
+docs/models/operations/getuserloginparameters200applicationjson.md
+docs/models/operations/getuserloginparametersresponse.md
+docs/models/operations/listusersrequest.md
+docs/models/operations/listusers200applicationjson.md
+docs/models/operations/listusersresponse.md
+docs/models/operations/activateuserrequest.md
+docs/models/operations/activateuserresponse.md
+docs/models/operations/deleteuserv2request.md
+docs/models/operations/deleteuserv2response.md
+docs/models/operations/getmev2response.md
+docs/models/operations/getuserloginparametersv2request.md
+docs/models/operations/getuserloginparametersv2200applicationjson.md
+docs/models/operations/getuserloginparametersv2response.md
+docs/models/operations/getuserv2request.md
+docs/models/operations/getuserv2response.md
+docs/models/operations/inviteuserresponse.md
+docs/models/operations/listusersv2request.md
+docs/models/operations/listusersv2200applicationjson.md
+docs/models/operations/listusersv2response.md
+docs/models/operations/resenduserinvitationrequestbodylanguage.md
+docs/models/operations/resenduserinvitationrequestbody.md
+docs/models/operations/resenduserinvitationresponse.md
+docs/models/operations/signupuserrequest.md
+docs/models/operations/signupuser200applicationjson.md
+docs/models/operations/signupuserresponse.md
+docs/models/operations/updateuserv2request.md
+docs/models/operations/updateuserv2response.md
+docs/models/operations/verifyemailwithtokenrequest.md
+docs/models/operations/verifyemailwithtokenresponse.md
+docs/models/shared/userimageuri.md
+docs/models/shared/userproperties.md
+docs/models/shared/user.md
+docs/models/shared/loginparametersoauthresponsetype.md
+docs/models/shared/loginparameters.md
+docs/models/shared/useractivationpayload.md
+docs/models/shared/userv2imageuri.md
+docs/models/shared/userv2properties.md
+docs/models/shared/userv2status.md
+docs/models/shared/userv2.md
+docs/models/shared/userinvitationpayloadlanguage.md
+docs/models/shared/userinvitationpayload.md
+docs/models/shared/organizationaddress.md
+docs/models/shared/organizationtype.md
+docs/models/shared/organization.md
+docs/models/shared/signupuserpayloadlanguage.md
+docs/models/shared/signupuserpayload.md
+docs/models/shared/userdetail.md
+docs/models/shared/organizationdetailtype.md
+docs/models/shared/organizationdetail.md
+docs/models/shared/userverificationpayload.md
+docs/models/shared/security.md
+docs/sdks/epilot/README.md
+docs/sdks/userv1/README.md
+docs/sdks/userv2/README.md
+.gitattributes
\ No newline at end of file
diff --git a/user/gen.yaml b/user/gen.yaml
index 72f1bfecd..38a973974 100644
--- a/user/gen.yaml
+++ b/user/gen.yaml
@@ -1,16 +1,27 @@
configVersion: 1.0.0
management:
- docChecksum: ab611dfad561f049eaf6bf82be4cdda4
+ docChecksum: a523ed2d24b424122c0c1ce5c48c22a1
docVersion: 2.0.0
- speakeasyVersion: 1.19.2
- generationVersion: 2.16.5
+ speakeasyVersion: 1.109.0
+ generationVersion: 2.173.0
generation:
- telemetryEnabled: false
+ repoURL: https://github.com/epilot-dev/sdk-python.git
sdkClassName: epilot
- sdkFlattening: true
singleTagPerOp: false
+ telemetryEnabled: false
+features:
+ python:
+ additionalProperties: 0.1.0
+ core: 3.3.1
+ deprecations: 2.81.1
+ globalSecurity: 2.82.0
+ globalServerURLs: 2.82.0
python:
- version: 1.2.2
+ version: 2.1.1
author: epilot
description: Python Client SDK for Epilot
+ flattenGlobalSecurity: false
+ installationURL: https://github.com/epilot-dev/sdk-python.git#subdirectory=user
+ maxMethodParams: 0
packageName: epilot-user
+ repoSubDirectory: user
diff --git a/user/pylintrc b/user/pylintrc
index 79b8008d0..1ed32214e 100755
--- a/user/pylintrc
+++ b/user/pylintrc
@@ -88,7 +88,7 @@ persistent=yes
# Minimum Python version to use for version dependent checks. Will default to
# the version used to run pylint.
-py-version=3.9
+py-version=3.8
# Discover python modules and packages in the file system subtree.
recursive=no
@@ -116,20 +116,15 @@ argument-naming-style=snake_case
#argument-rgx=
# Naming style matching correct attribute names.
-attr-naming-style=snake_case
+#attr-naming-style=snake_case
# Regular expression matching correct attribute names. Overrides attr-naming-
# style. If left empty, attribute names will be checked with the set naming
# style.
-#attr-rgx=
+attr-rgx=[^\W\d][^\W]*|__.*__$
# Bad variable names which should always be refused, separated by a comma.
-bad-names=foo,
- bar,
- baz,
- toto,
- tutu,
- tata
+bad-names=
# Bad variable names regexes, separated by a comma. If names match any regex,
# they will always be refused
@@ -439,7 +434,13 @@ disable=raw-checker-failed,
trailing-newlines,
too-many-public-methods,
too-many-locals,
- too-many-lines
+ too-many-lines,
+ using-constant-test,
+ too-many-statements,
+ cyclic-import,
+ too-many-nested-blocks,
+ too-many-boolean-expressions,
+ no-else-raise
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
@@ -620,7 +621,7 @@ additional-builtins=
allow-global-unused-variables=yes
# List of names allowed to shadow builtins
-allowed-redefined-builtins=
+allowed-redefined-builtins=id,object
# List of strings which can identify a callback function by name. A callback
# name must start or end with one of those strings.
diff --git a/user/setup.py b/user/setup.py
index d7daeacda..f8ed23c98 100755
--- a/user/setup.py
+++ b/user/setup.py
@@ -10,30 +10,31 @@
setuptools.setup(
name="epilot-user",
- version="1.2.2",
+ version="2.1.1",
author="epilot",
description="Python Client SDK for Epilot",
long_description=long_description,
long_description_content_type="text/markdown",
packages=setuptools.find_packages(where="src"),
install_requires=[
- "certifi==2022.12.07",
- "charset-normalizer==2.1.1",
- "dataclasses-json-speakeasy==0.5.8",
- "idna==3.3",
- "marshmallow==3.17.1",
- "marshmallow-enum==1.5.1",
- "mypy-extensions==0.4.3",
- "packaging==21.3",
- "pyparsing==3.0.9",
- "python-dateutil==2.8.2",
- "requests==2.28.1",
- "six==1.16.0",
- "typing-inspect==0.8.0",
- "typing_extensions==4.3.0",
- "urllib3==1.26.12",
- "pylint==2.16.2",
+ "certifi>=2023.7.22",
+ "charset-normalizer>=3.2.0",
+ "dataclasses-json>=0.6.1",
+ "idna>=3.4",
+ "jsonpath-python>=1.0.6 ",
+ "marshmallow>=3.19.0",
+ "mypy-extensions>=1.0.0",
+ "packaging>=23.1",
+ "python-dateutil>=2.8.2",
+ "requests>=2.31.0",
+ "six>=1.16.0",
+ "typing-inspect>=0.9.0",
+ "typing_extensions>=4.7.1",
+ "urllib3>=2.0.4",
],
+ extras_require={
+ "dev":["pylint==2.16.2"]
+ },
package_dir={'': 'src'},
- python_requires='>=3.9'
+ python_requires='>=3.8'
)
diff --git a/user/src/epilot/__init__.py b/user/src/epilot/__init__.py
index b9e232018..e6c0deeb6 100755
--- a/user/src/epilot/__init__.py
+++ b/user/src/epilot/__init__.py
@@ -1,3 +1,4 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
from .sdk import *
+from .sdkconfiguration import *
diff --git a/user/src/epilot/models/__init__.py b/user/src/epilot/models/__init__.py
index 889f8adcf..36628d6cc 100755
--- a/user/src/epilot/models/__init__.py
+++ b/user/src/epilot/models/__init__.py
@@ -1,2 +1,3 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+# __init__.py
diff --git a/user/src/epilot/models/errors/__init__.py b/user/src/epilot/models/errors/__init__.py
new file mode 100755
index 000000000..cfd848441
--- /dev/null
+++ b/user/src/epilot/models/errors/__init__.py
@@ -0,0 +1,4 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from .sdkerror import SDKError
+__all__ = ["SDKError"]
diff --git a/user/src/epilot/models/errors/sdkerror.py b/user/src/epilot/models/errors/sdkerror.py
new file mode 100755
index 000000000..6bb02bbd6
--- /dev/null
+++ b/user/src/epilot/models/errors/sdkerror.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import requests as requests_http
+
+
+class SDKError(Exception):
+ """Represents an error returned by the API."""
+ message: str
+ status_code: int
+ body: str
+ raw_response: requests_http.Response
+
+ def __init__(self, message: str, status_code: int, body: str, raw_response: requests_http.Response):
+ self.message = message
+ self.status_code = status_code
+ self.body = body
+ self.raw_response = raw_response
+
+ def __str__(self):
+ body = ''
+ if len(self.body) > 0:
+ body = f'\n{self.body}'
+
+ return f'{self.message}: Status {self.status_code}{body}'
diff --git a/user/src/epilot/models/operations/__init__.py b/user/src/epilot/models/operations/__init__.py
index 50981df66..fb931bef6 100755
--- a/user/src/epilot/models/operations/__init__.py
+++ b/user/src/epilot/models/operations/__init__.py
@@ -16,4 +16,4 @@
from .updateuserv2 import *
from .verifyemailwithtoken import *
-__all__ = ["ActivateUserRequest","ActivateUserResponse","DeleteUserV2Request","DeleteUserV2Response","GetMeResponse","GetMeV2Response","GetUserLoginParameters200ApplicationJSON","GetUserLoginParametersRequest","GetUserLoginParametersResponse","GetUserLoginParametersV2200ApplicationJSON","GetUserLoginParametersV2Request","GetUserLoginParametersV2Response","GetUserRequest","GetUserResponse","GetUserV2Request","GetUserV2Response","InviteUserResponse","ListUsers200ApplicationJSON","ListUsersRequest","ListUsersResponse","ListUsersV2200ApplicationJSON","ListUsersV2Request","ListUsersV2Response","ResendUserInvitationRequestBody","ResendUserInvitationRequestBodyLanguageEnum","ResendUserInvitationResponse","SignUpUser200ApplicationJSON","SignUpUserRequest","SignUpUserResponse","UpdateUserV2Request","UpdateUserV2Response","VerifyEmailWithTokenRequest","VerifyEmailWithTokenResponse"]
+__all__ = ["ActivateUserRequest","ActivateUserResponse","DeleteUserV2Request","DeleteUserV2Response","GetMeResponse","GetMeV2Response","GetUserLoginParameters200ApplicationJSON","GetUserLoginParametersRequest","GetUserLoginParametersResponse","GetUserLoginParametersV2200ApplicationJSON","GetUserLoginParametersV2Request","GetUserLoginParametersV2Response","GetUserRequest","GetUserResponse","GetUserV2Request","GetUserV2Response","InviteUserResponse","ListUsers200ApplicationJSON","ListUsersRequest","ListUsersResponse","ListUsersV2200ApplicationJSON","ListUsersV2Request","ListUsersV2Response","ResendUserInvitationRequestBody","ResendUserInvitationRequestBodyLanguage","ResendUserInvitationResponse","SignUpUser200ApplicationJSON","SignUpUserRequest","SignUpUserResponse","UpdateUserV2Request","UpdateUserV2Response","VerifyEmailWithTokenRequest","VerifyEmailWithTokenResponse"]
diff --git a/user/src/epilot/models/operations/activateuser.py b/user/src/epilot/models/operations/activateuser.py
index 313eca4ba..daaeded86 100755
--- a/user/src/epilot/models/operations/activateuser.py
+++ b/user/src/epilot/models/operations/activateuser.py
@@ -9,16 +9,20 @@
@dataclasses.dataclass
class ActivateUserRequest:
-
token: str = dataclasses.field(metadata={'query_param': { 'field_name': 'token', 'style': 'form', 'explode': True }})
- r"""Invite Token"""
- user_activation_payload: Optional[shared_useractivationpayload.UserActivationPayload] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ r"""Invite Token"""
+ user_activation_payload: Optional[shared_useractivationpayload.UserActivationPayload] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+
+
@dataclasses.dataclass
class ActivateUserResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/user/src/epilot/models/operations/deleteuserv2.py b/user/src/epilot/models/operations/deleteuserv2.py
index 2ec96496b..15b0c51b9 100755
--- a/user/src/epilot/models/operations/deleteuserv2.py
+++ b/user/src/epilot/models/operations/deleteuserv2.py
@@ -9,17 +9,21 @@
@dataclasses.dataclass
class DeleteUserV2Request:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""The Id of user"""
+ r"""The Id of user"""
+
+
@dataclasses.dataclass
class DeleteUserV2Response:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
user: Optional[shared_user.User] = dataclasses.field(default=None)
- r"""The deleted user"""
-
\ No newline at end of file
+ r"""The deleted user"""
+
+
diff --git a/user/src/epilot/models/operations/getme.py b/user/src/epilot/models/operations/getme.py
index 635060a1a..8381a7652 100755
--- a/user/src/epilot/models/operations/getme.py
+++ b/user/src/epilot/models/operations/getme.py
@@ -9,10 +9,13 @@
@dataclasses.dataclass
class GetMeResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
user: Optional[shared_user.User] = dataclasses.field(default=None)
- r"""Currently logged in user"""
-
\ No newline at end of file
+ r"""Currently logged in user"""
+
+
diff --git a/user/src/epilot/models/operations/getmev2.py b/user/src/epilot/models/operations/getmev2.py
index 837f50465..5e499ecc8 100755
--- a/user/src/epilot/models/operations/getmev2.py
+++ b/user/src/epilot/models/operations/getmev2.py
@@ -9,10 +9,13 @@
@dataclasses.dataclass
class GetMeV2Response:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
user_v2: Optional[shared_userv2.UserV2] = dataclasses.field(default=None)
- r"""currently logged in user"""
-
\ No newline at end of file
+ r"""currently logged in user"""
+
+
diff --git a/user/src/epilot/models/operations/getuser.py b/user/src/epilot/models/operations/getuser.py
index d5eb0e8ce..238f411a9 100755
--- a/user/src/epilot/models/operations/getuser.py
+++ b/user/src/epilot/models/operations/getuser.py
@@ -9,17 +9,21 @@
@dataclasses.dataclass
class GetUserRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""User id"""
+ r"""User id"""
+
+
@dataclasses.dataclass
class GetUserResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
user: Optional[shared_user.User] = dataclasses.field(default=None)
- r"""User"""
-
\ No newline at end of file
+ r"""User"""
+
+
diff --git a/user/src/epilot/models/operations/getuserloginparameters.py b/user/src/epilot/models/operations/getuserloginparameters.py
index b37f700fc..72fe0e830 100755
--- a/user/src/epilot/models/operations/getuserloginparameters.py
+++ b/user/src/epilot/models/operations/getuserloginparameters.py
@@ -6,30 +6,35 @@
from ..shared import loginparameters as shared_loginparameters
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class GetUserLoginParametersRequest:
-
username: str = dataclasses.field(metadata={'path_param': { 'field_name': 'username', 'style': 'simple', 'explode': False }})
- r"""Username"""
+ r"""Username"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetUserLoginParameters200ApplicationJSON:
r"""User"""
+ login_parameters: Optional[List[shared_loginparameters.LoginParameters]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('login_parameters'), 'exclude': lambda f: f is None }})
- login_parameters: Optional[list[shared_loginparameters.LoginParameters]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('login_parameters'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class GetUserLoginParametersResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
get_user_login_parameters_200_application_json_object: Optional[GetUserLoginParameters200ApplicationJSON] = dataclasses.field(default=None)
- r"""User"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""User"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/user/src/epilot/models/operations/getuserloginparametersv2.py b/user/src/epilot/models/operations/getuserloginparametersv2.py
index 4ffacfef4..412cd13ab 100755
--- a/user/src/epilot/models/operations/getuserloginparametersv2.py
+++ b/user/src/epilot/models/operations/getuserloginparametersv2.py
@@ -6,30 +6,35 @@
from ..shared import loginparameters as shared_loginparameters
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class GetUserLoginParametersV2Request:
-
username: str = dataclasses.field(metadata={'path_param': { 'field_name': 'username', 'style': 'simple', 'explode': False }})
- r"""Username"""
+ r"""Username"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetUserLoginParametersV2200ApplicationJSON:
r"""User"""
+ login_parameters: Optional[List[shared_loginparameters.LoginParameters]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('login_parameters'), 'exclude': lambda f: f is None }})
- login_parameters: Optional[list[shared_loginparameters.LoginParameters]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('login_parameters'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class GetUserLoginParametersV2Response:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
get_user_login_parameters_v2_200_application_json_object: Optional[GetUserLoginParametersV2200ApplicationJSON] = dataclasses.field(default=None)
- r"""User"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""User"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/user/src/epilot/models/operations/getuserv2.py b/user/src/epilot/models/operations/getuserv2.py
index 3eba7a1ca..fb2ef9b74 100755
--- a/user/src/epilot/models/operations/getuserv2.py
+++ b/user/src/epilot/models/operations/getuserv2.py
@@ -9,17 +9,21 @@
@dataclasses.dataclass
class GetUserV2Request:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""The Id of user"""
+ r"""The Id of user"""
+
+
@dataclasses.dataclass
class GetUserV2Response:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
user_v2: Optional[shared_userv2.UserV2] = dataclasses.field(default=None)
- r"""The returned user"""
-
\ No newline at end of file
+ r"""The returned user"""
+
+
diff --git a/user/src/epilot/models/operations/inviteuser.py b/user/src/epilot/models/operations/inviteuser.py
index f228bcc1f..35b6ec6a1 100755
--- a/user/src/epilot/models/operations/inviteuser.py
+++ b/user/src/epilot/models/operations/inviteuser.py
@@ -9,10 +9,13 @@
@dataclasses.dataclass
class InviteUserResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
user_v2: Optional[shared_userv2.UserV2] = dataclasses.field(default=None)
- r"""Invited successfully"""
-
\ No newline at end of file
+ r"""Invited successfully"""
+
+
diff --git a/user/src/epilot/models/operations/listusers.py b/user/src/epilot/models/operations/listusers.py
index 43eb767e2..288ddb8b3 100755
--- a/user/src/epilot/models/operations/listusers.py
+++ b/user/src/epilot/models/operations/listusers.py
@@ -6,36 +6,41 @@
from ..shared import user as shared_user
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class ListUsersRequest:
-
limit: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'limit', 'style': 'form', 'explode': True }})
- r"""Limit the results size"""
+ r"""Limit the results size"""
offset: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'offset', 'style': 'form', 'explode': True }})
- r"""Specify the page"""
- org_ids: Optional[list[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'org_ids', 'style': 'form', 'explode': False }})
- r"""Comma-separated list of organization ids to filter by"""
+ r"""Specify the page"""
+ org_ids: Optional[List[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'org_ids', 'style': 'form', 'explode': False }})
+ r"""Comma-separated list of organization ids to filter by"""
query: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'query', 'style': 'form', 'explode': True }})
- r"""Query text to filter by"""
+ r"""Query text to filter by"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ListUsers200ApplicationJSON:
r"""List of users"""
+ users: Optional[List[shared_user.User]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('users'), 'exclude': lambda f: f is None }})
- users: Optional[list[shared_user.User]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('users'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class ListUsersResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
list_users_200_application_json_object: Optional[ListUsers200ApplicationJSON] = dataclasses.field(default=None)
- r"""List of users"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""List of users"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/user/src/epilot/models/operations/listusersv2.py b/user/src/epilot/models/operations/listusersv2.py
index d5f7808bd..952b9cef9 100755
--- a/user/src/epilot/models/operations/listusersv2.py
+++ b/user/src/epilot/models/operations/listusersv2.py
@@ -6,34 +6,39 @@
from ..shared import userv2 as shared_userv2
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class ListUsersV2Request:
-
limit: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'limit', 'style': 'form', 'explode': True }})
- r"""Limit the results size"""
+ r"""Limit the results size"""
offset: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'offset', 'style': 'form', 'explode': True }})
- r"""Specify the page"""
+ r"""Specify the page"""
query: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'query', 'style': 'form', 'explode': True }})
- r"""Query text to filter by"""
+ r"""Query text to filter by"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ListUsersV2200ApplicationJSON:
r"""List of organization users"""
+ results: Optional[List[shared_userv2.UserV2]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
- results: Optional[list[shared_userv2.UserV2]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class ListUsersV2Response:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
list_users_v2_200_application_json_object: Optional[ListUsersV2200ApplicationJSON] = dataclasses.field(default=None)
- r"""List of organization users"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""List of organization users"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/user/src/epilot/models/operations/resenduserinvitation.py b/user/src/epilot/models/operations/resenduserinvitation.py
index 8b6f9e1df..75be17f2b 100755
--- a/user/src/epilot/models/operations/resenduserinvitation.py
+++ b/user/src/epilot/models/operations/resenduserinvitation.py
@@ -9,28 +9,32 @@
from epilot import utils
from typing import Optional
-class ResendUserInvitationRequestBodyLanguageEnum(str, Enum):
+class ResendUserInvitationRequestBodyLanguage(str, Enum):
r"""Language for user invitation email"""
- EN = "en"
- DE = "de"
+ EN = 'en'
+ DE = 'de'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ResendUserInvitationRequestBody:
-
email: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email'), 'exclude': lambda f: f is None }})
- r"""Email address of the address"""
- language: Optional[ResendUserInvitationRequestBodyLanguageEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('language'), 'exclude': lambda f: f is None }})
- r"""Language for user invitation email"""
+ r"""Email address of the address"""
+ language: Optional[ResendUserInvitationRequestBodyLanguage] = dataclasses.field(default=ResendUserInvitationRequestBodyLanguage.EN, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('language'), 'exclude': lambda f: f is None }})
+ r"""Language for user invitation email"""
+
+
@dataclasses.dataclass
class ResendUserInvitationResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
user_v2: Optional[shared_userv2.UserV2] = dataclasses.field(default=None)
- r"""User Invitation sent successfully."""
-
\ No newline at end of file
+ r"""User Invitation sent successfully."""
+
+
diff --git a/user/src/epilot/models/operations/signupuser.py b/user/src/epilot/models/operations/signupuser.py
index 2e4610568..71b2df439 100755
--- a/user/src/epilot/models/operations/signupuser.py
+++ b/user/src/epilot/models/operations/signupuser.py
@@ -13,27 +13,32 @@
@dataclasses.dataclass
class SignUpUserRequest:
-
- signup_user_payload: Optional[shared_signupuserpayload.SignupUserPayload] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ signup_user_payload: Optional[shared_signupuserpayload.SignupUserPayload] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
token: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'token', 'style': 'form', 'explode': True }})
- r"""Invitation partner token"""
+ r"""Invitation partner token"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SignUpUser200ApplicationJSON:
r"""The created user and organization"""
+ organization: Optional[shared_organization.Organization] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization'), 'exclude': lambda f: f is None }})
+ user: Optional[shared_user.User] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user'), 'exclude': lambda f: f is None }})
- organization: Optional[shared_organization.Organization] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization'), 'exclude': lambda f: f is None }})
- user: Optional[shared_user.User] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class SignUpUserResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
sign_up_user_200_application_json_object: Optional[SignUpUser200ApplicationJSON] = dataclasses.field(default=None)
- r"""The created user and organization"""
-
\ No newline at end of file
+ r"""The created user and organization"""
+
+
diff --git a/user/src/epilot/models/operations/updateuserv2.py b/user/src/epilot/models/operations/updateuserv2.py
index 6bed4adcc..5cd2e477e 100755
--- a/user/src/epilot/models/operations/updateuserv2.py
+++ b/user/src/epilot/models/operations/updateuserv2.py
@@ -9,18 +9,22 @@
@dataclasses.dataclass
class UpdateUserV2Request:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""The Id of user"""
- user_v2: Optional[shared_userv2.UserV2] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ r"""The Id of user"""
+ user_v2: Optional[shared_userv2.UserV2] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+
+
@dataclasses.dataclass
class UpdateUserV2Response:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
user_v2: Optional[shared_userv2.UserV2] = dataclasses.field(default=None)
- r"""The returned user"""
-
\ No newline at end of file
+ r"""The returned user"""
+
+
diff --git a/user/src/epilot/models/operations/verifyemailwithtoken.py b/user/src/epilot/models/operations/verifyemailwithtoken.py
index 88121026b..b21237346 100755
--- a/user/src/epilot/models/operations/verifyemailwithtoken.py
+++ b/user/src/epilot/models/operations/verifyemailwithtoken.py
@@ -9,16 +9,20 @@
@dataclasses.dataclass
class VerifyEmailWithTokenRequest:
-
token: str = dataclasses.field(metadata={'query_param': { 'field_name': 'token', 'style': 'form', 'explode': True }})
- r"""Verification Token"""
- user_verification_payload: Optional[shared_userverificationpayload.UserVerificationPayload] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ r"""Verification Token"""
+ user_verification_payload: Optional[shared_userverificationpayload.UserVerificationPayload] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+
+
@dataclasses.dataclass
class VerifyEmailWithTokenResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/user/src/epilot/models/shared/__init__.py b/user/src/epilot/models/shared/__init__.py
index d24354b4b..bec168618 100755
--- a/user/src/epilot/models/shared/__init__.py
+++ b/user/src/epilot/models/shared/__init__.py
@@ -2,6 +2,7 @@
from .loginparameters import *
from .organization import *
+from .organizationdetail import *
from .security import *
from .signupuserpayload import *
from .user import *
@@ -11,4 +12,4 @@
from .userv2 import *
from .userverificationpayload import *
-__all__ = ["LoginParameters","LoginParametersOauthResponseTypeEnum","Organization","OrganizationAddress","OrganizationTypeEnum","Security","SignupUserPayload","SignupUserPayloadLanguageEnum","User","UserActivationPayload","UserDetail","UserInvitationPayload","UserInvitationPayloadLanguageEnum","UserProperties","UserV2","UserV2Properties","UserV2StatusEnum","UserVerificationPayload"]
+__all__ = ["LoginParameters","LoginParametersOauthResponseType","Organization","OrganizationAddress","OrganizationDetail","OrganizationDetailType","OrganizationType","Security","SignupUserPayload","SignupUserPayloadLanguage","User","UserActivationPayload","UserDetail","UserImageURI","UserInvitationPayload","UserInvitationPayloadLanguage","UserProperties","UserV2","UserV2ImageURI","UserV2Properties","UserV2Status","UserVerificationPayload"]
diff --git a/user/src/epilot/models/shared/loginparameters.py b/user/src/epilot/models/shared/loginparameters.py
index fa35d69bf..aafc73395 100755
--- a/user/src/epilot/models/shared/loginparameters.py
+++ b/user/src/epilot/models/shared/loginparameters.py
@@ -5,25 +5,25 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Optional
+from typing import List, Optional
-class LoginParametersOauthResponseTypeEnum(str, Enum):
- CODE = "code"
- TOKEN = "token"
+class LoginParametersOauthResponseType(str, Enum):
+ CODE = 'code'
+ TOKEN = 'token'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class LoginParameters:
+ cognito_identity_pool_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_identity_pool_id'), 'exclude': lambda f: f is None }})
+ cognito_oauth_domain: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_oauth_domain'), 'exclude': lambda f: f is None }})
+ cognito_oauth_scopes: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_oauth_scopes'), 'exclude': lambda f: f is None }})
+ cognito_region: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_region'), 'exclude': lambda f: f is None }})
+ cognito_user_pool_client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_client_id'), 'exclude': lambda f: f is None }})
+ cognito_user_pool_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_id'), 'exclude': lambda f: f is None }})
+ oauth_response_type: Optional[LoginParametersOauthResponseType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('oauth_response_type'), 'exclude': lambda f: f is None }})
+ organization_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization_id'), 'exclude': lambda f: f is None }})
+ organization_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization_name'), 'exclude': lambda f: f is None }})
+ organization_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization_type'), 'exclude': lambda f: f is None }})
- cognito_identity_pool_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_identity_pool_id'), 'exclude': lambda f: f is None }})
- cognito_oauth_domain: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_oauth_domain'), 'exclude': lambda f: f is None }})
- cognito_oauth_scopes: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_oauth_scopes'), 'exclude': lambda f: f is None }})
- cognito_region: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_region'), 'exclude': lambda f: f is None }})
- cognito_user_pool_client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_client_id'), 'exclude': lambda f: f is None }})
- cognito_user_pool_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito_user_pool_id'), 'exclude': lambda f: f is None }})
- oauth_response_type: Optional[LoginParametersOauthResponseTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('oauth_response_type'), 'exclude': lambda f: f is None }})
- organization_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization_id'), 'exclude': lambda f: f is None }})
- organization_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization_name'), 'exclude': lambda f: f is None }})
- organization_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization_type'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/user/src/epilot/models/shared/organization.py b/user/src/epilot/models/shared/organization.py
index 8bb8945a7..74fb27c53 100755
--- a/user/src/epilot/models/shared/organization.py
+++ b/user/src/epilot/models/shared/organization.py
@@ -11,33 +11,34 @@
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrganizationAddress:
+ city: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('city') }})
+ country: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('country') }})
+ postal_code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('postal_code') }})
+ street: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('street') }})
+ street_number: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('street_number') }})
- city: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('city'), 'exclude': lambda f: f is None }})
- country: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('country'), 'exclude': lambda f: f is None }})
- postal_code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('postal_code'), 'exclude': lambda f: f is None }})
- street: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('street'), 'exclude': lambda f: f is None }})
- street_number: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('street_number'), 'exclude': lambda f: f is None }})
-
-class OrganizationTypeEnum(str, Enum):
- VENDOR = "Vendor"
- PARTNER = "Partner"
+
+
+class OrganizationType(str, Enum):
+ VENDOR = 'Vendor'
+ PARTNER = 'Partner'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class Organization:
+ address: Optional[OrganizationAddress] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('address'), 'exclude': lambda f: f is None }})
+ email: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
+ id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
+ is_unlicensed_org: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_unlicensed_org') }})
+ logo_thumbnail_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('logo_thumbnail_url') }})
+ logo_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('logo_url') }})
+ name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ phone: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('phone') }})
+ pricing_tier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pricing_tier') }})
+ signature: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('signature') }})
+ symbol: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('symbol') }})
+ type: Optional[OrganizationType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ website: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('website') }})
- address: Optional[OrganizationAddress] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('address'), 'exclude': lambda f: f is None }})
- email: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email'), 'exclude': lambda f: f is None }})
- id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
- is_unlicensed_org: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_unlicensed_org'), 'exclude': lambda f: f is None }})
- logo_thumbnail_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('logo_thumbnail_url'), 'exclude': lambda f: f is None }})
- logo_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('logo_url'), 'exclude': lambda f: f is None }})
- name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }})
- phone: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('phone'), 'exclude': lambda f: f is None }})
- pricing_tier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pricing_tier'), 'exclude': lambda f: f is None }})
- signature: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('signature'), 'exclude': lambda f: f is None }})
- symbol: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('symbol'), 'exclude': lambda f: f is None }})
- type: Optional[OrganizationTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- website: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('website'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/user/src/epilot/models/shared/organizationdetail.py b/user/src/epilot/models/shared/organizationdetail.py
new file mode 100755
index 000000000..e7c1f1793
--- /dev/null
+++ b/user/src/epilot/models/shared/organizationdetail.py
@@ -0,0 +1,28 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from epilot import utils
+from typing import Any, Dict, Optional
+
+class OrganizationDetailType(str, Enum):
+ VENDOR = 'Vendor'
+ PARTNER = 'Partner'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class OrganizationDetail:
+ email: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ pricing_tier: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pricing_tier') }})
+ type: OrganizationDetailType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ is_privacy_policy_checked: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_privacy_policy_checked') }})
+ is_terms_and_conditions_checked: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_terms_and_conditions_checked') }})
+ phone: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('phone'), 'exclude': lambda f: f is None }})
+ website: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('website'), 'exclude': lambda f: f is None }})
+
+
diff --git a/user/src/epilot/models/shared/security.py b/user/src/epilot/models/shared/security.py
index cca0d01c8..bb832caeb 100755
--- a/user/src/epilot/models/shared/security.py
+++ b/user/src/epilot/models/shared/security.py
@@ -6,6 +6,6 @@
@dataclasses.dataclass
class Security:
+ epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
-
\ No newline at end of file
+
diff --git a/user/src/epilot/models/shared/signupuserpayload.py b/user/src/epilot/models/shared/signupuserpayload.py
index e290d1f71..b6b6bfce3 100755
--- a/user/src/epilot/models/shared/signupuserpayload.py
+++ b/user/src/epilot/models/shared/signupuserpayload.py
@@ -2,24 +2,25 @@
from __future__ import annotations
import dataclasses
+from ..shared import organizationdetail as shared_organizationdetail
from ..shared import userdetail as shared_userdetail
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Optional
-class SignupUserPayloadLanguageEnum(str, Enum):
+class SignupUserPayloadLanguage(str, Enum):
r"""Language for user invitation email"""
- EN = "en"
- DE = "de"
+ EN = 'en'
+ DE = 'de'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SignupUserPayload:
+ language: Optional[SignupUserPayloadLanguage] = dataclasses.field(default=SignupUserPayloadLanguage.EN, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('language'), 'exclude': lambda f: f is None }})
+ r"""Language for user invitation email"""
+ organization_detail: Optional[shared_organizationdetail.OrganizationDetail] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization_detail'), 'exclude': lambda f: f is None }})
+ user_detail: Optional[shared_userdetail.UserDetail] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_detail'), 'exclude': lambda f: f is None }})
- language: Optional[SignupUserPayloadLanguageEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('language'), 'exclude': lambda f: f is None }})
- r"""Language for user invitation email"""
- organization_detail: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization_detail'), 'exclude': lambda f: f is None }})
- user_detail: Optional[shared_userdetail.UserDetail] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_detail'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/user/src/epilot/models/shared/user.py b/user/src/epilot/models/shared/user.py
index e9ec3d39c..20eff5dcf 100755
--- a/user/src/epilot/models/shared/user.py
+++ b/user/src/epilot/models/shared/user.py
@@ -4,31 +4,46 @@
import dataclasses
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class UserProperties:
+class UserImageURI:
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ original: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('original'), 'exclude': lambda f: f is None }})
+ thumbnail_32: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumbnail_32'), 'exclude': lambda f: f is None }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value') }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class UserProperties:
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value') }})
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class User:
- r"""Currently logged in user"""
+ email: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ r"""Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible."""
+ organization_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization_id') }})
+ preferred_language: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preferred_language') }})
+ properties: List[UserProperties] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('properties') }})
+ roles: List[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('roles') }})
+ r"""Deprecated! Please use Permissions API instead
+
+ Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.
+ """
+ display_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('display_name'), 'exclude': lambda f: f is None }})
+ r"""Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible."""
+ image_uri: Optional[UserImageURI] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('image_uri') }})
+ signature: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('signature'), 'exclude': lambda f: f is None }})
- email: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
- id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- organization_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization_id') }})
- preferred_language: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preferred_language') }})
- properties: list[UserProperties] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('properties') }})
- roles: list[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('roles') }})
- r"""Deprecated! Please use Permissions API instead"""
- display_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('display_name'), 'exclude': lambda f: f is None }})
- image_uri: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('image_uri'), 'exclude': lambda f: f is None }})
- signature: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('signature'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/user/src/epilot/models/shared/useractivationpayload.py b/user/src/epilot/models/shared/useractivationpayload.py
index e69cc5c11..50f1243ee 100755
--- a/user/src/epilot/models/shared/useractivationpayload.py
+++ b/user/src/epilot/models/shared/useractivationpayload.py
@@ -10,9 +10,9 @@
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UserActivationPayload:
-
display_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('display_name'), 'exclude': lambda f: f is None }})
- r"""User's display name (default: email address)"""
+ r"""User's display name (default: email address)"""
password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
- r"""User's password"""
-
\ No newline at end of file
+ r"""User's password"""
+
+
diff --git a/user/src/epilot/models/shared/userdetail.py b/user/src/epilot/models/shared/userdetail.py
index 1518c9330..9c94563ca 100755
--- a/user/src/epilot/models/shared/userdetail.py
+++ b/user/src/epilot/models/shared/userdetail.py
@@ -9,9 +9,9 @@
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UserDetail:
-
- email: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
- full_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('full_name') }})
+ email: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email') }})
+ full_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('full_name') }})
password: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password') }})
- r"""User's password"""
-
\ No newline at end of file
+ r"""User's password"""
+
+
diff --git a/user/src/epilot/models/shared/userinvitationpayload.py b/user/src/epilot/models/shared/userinvitationpayload.py
index 268f4d7a5..da056ea17 100755
--- a/user/src/epilot/models/shared/userinvitationpayload.py
+++ b/user/src/epilot/models/shared/userinvitationpayload.py
@@ -5,21 +5,21 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Optional
+from typing import List, Optional
-class UserInvitationPayloadLanguageEnum(str, Enum):
+class UserInvitationPayloadLanguage(str, Enum):
r"""Language for user invitation email"""
- EN = "en"
- DE = "de"
+ EN = 'en'
+ DE = 'de'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UserInvitationPayload:
-
email: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email'), 'exclude': lambda f: f is None }})
- r"""Email address of the address"""
- language: Optional[UserInvitationPayloadLanguageEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('language'), 'exclude': lambda f: f is None }})
- r"""Language for user invitation email"""
- roles: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('roles'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Email address of the address"""
+ language: Optional[UserInvitationPayloadLanguage] = dataclasses.field(default=UserInvitationPayloadLanguage.EN, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('language'), 'exclude': lambda f: f is None }})
+ r"""Language for user invitation email"""
+ roles: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('roles'), 'exclude': lambda f: f is None }})
+
+
diff --git a/user/src/epilot/models/shared/userv2.py b/user/src/epilot/models/shared/userv2.py
index 8712114a6..9a829e195 100755
--- a/user/src/epilot/models/shared/userv2.py
+++ b/user/src/epilot/models/shared/userv2.py
@@ -5,45 +5,56 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class UserV2Properties:
+class UserV2ImageURI:
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ original: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('original'), 'exclude': lambda f: f is None }})
+ thumbnail_32: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumbnail_32'), 'exclude': lambda f: f is None }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value') }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class UserV2Properties:
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value') }})
-class UserV2StatusEnum(str, Enum):
- ACTIVE = "Active"
- PENDING = "Pending"
- DEACTIVATED = "Deactivated"
- DELETED = "Deleted"
+
+
+class UserV2Status(str, Enum):
+ ACTIVE = 'Active'
+ PENDING = 'Pending'
+ DEACTIVATED = 'Deactivated'
+ DELETED = 'Deleted'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UserV2:
- r"""Invited successfully"""
-
- created_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at'), 'exclude': lambda f: f is None }})
- department: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('department'), 'exclude': lambda f: f is None }})
- r"""User's department"""
+ created_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at'), 'exclude': lambda f: f is None }})
+ department: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('department') }})
+ r"""User's department"""
display_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('display_name'), 'exclude': lambda f: f is None }})
- r"""User's display name (default: email address)"""
- draft_email: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('draft_email'), 'exclude': lambda f: f is None }})
- email: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email'), 'exclude': lambda f: f is None }})
- id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
- image_uri: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('image_uri'), 'exclude': lambda f: f is None }})
- is_signature_enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_signature_enabled'), 'exclude': lambda f: f is None }})
- mfa_enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mfa_enabled'), 'exclude': lambda f: f is None }})
- organization_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization_id'), 'exclude': lambda f: f is None }})
- phone: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('phone'), 'exclude': lambda f: f is None }})
- phone_verified: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('phone_verified'), 'exclude': lambda f: f is None }})
- preferred_language: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preferred_language'), 'exclude': lambda f: f is None }})
- properties: Optional[list[UserV2Properties]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('properties'), 'exclude': lambda f: f is None }})
- signature: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('signature'), 'exclude': lambda f: f is None }})
- status: Optional[UserV2StatusEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }})
- token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""User's display name (default: email address)"""
+ draft_email: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('draft_email') }})
+ email: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email'), 'exclude': lambda f: f is None }})
+ favorites: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('favorites'), 'exclude': lambda f: f is None }})
+ id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
+ image_uri: Optional[UserV2ImageURI] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('image_uri') }})
+ is_signature_enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_signature_enabled') }})
+ mfa_enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mfa_enabled'), 'exclude': lambda f: f is None }})
+ organization_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('organization_id'), 'exclude': lambda f: f is None }})
+ phone: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('phone') }})
+ phone_verified: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('phone_verified'), 'exclude': lambda f: f is None }})
+ preferred_language: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preferred_language'), 'exclude': lambda f: f is None }})
+ properties: Optional[List[UserV2Properties]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('properties'), 'exclude': lambda f: f is None }})
+ signature: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('signature') }})
+ status: Optional[UserV2Status] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }})
+ token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token'), 'exclude': lambda f: f is None }})
+
+
diff --git a/user/src/epilot/models/shared/userverificationpayload.py b/user/src/epilot/models/shared/userverificationpayload.py
index 02f283b83..2fedf0867 100755
--- a/user/src/epilot/models/shared/userverificationpayload.py
+++ b/user/src/epilot/models/shared/userverificationpayload.py
@@ -10,7 +10,7 @@
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UserVerificationPayload:
-
password: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('password'), 'exclude': lambda f: f is None }})
- r"""User's password"""
-
\ No newline at end of file
+ r"""User's password"""
+
+
diff --git a/user/src/epilot/sdk.py b/user/src/epilot/sdk.py
index 0fc65e34d..d89f8f2fd 100755
--- a/user/src/epilot/sdk.py
+++ b/user/src/epilot/sdk.py
@@ -1,83 +1,61 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
import requests as requests_http
-from . import utils
+from .sdkconfiguration import SDKConfiguration
from .user_v1 import UserV1
from .user_v2 import UserV2
+from epilot import utils
from epilot.models import shared
-
-SERVERS = [
- "https://user.sls.epilot.io",
-]
-"""Contains the list of servers available to the SDK"""
+from typing import Dict
class Epilot:
- r"""Manage users in epilot organization(s)
-
- """
+ r"""User API: Manage users in epilot organization(s)"""
user_v1: UserV1
r"""Legacy User API"""
user_v2: UserV2
r"""User API V2"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str = SERVERS[0]
- _language: str = "python"
- _sdk_version: str = "1.2.2"
- _gen_version: str = "2.16.5"
+ sdk_configuration: SDKConfiguration
def __init__(self,
security: shared.Security = None,
+ server_idx: int = None,
server_url: str = None,
- url_params: dict[str, str] = None,
- client: requests_http.Session = None
+ url_params: Dict[str, str] = None,
+ client: requests_http.Session = None,
+ retry_config: utils.RetryConfig = None
) -> None:
"""Instantiates the SDK configuring it with the provided parameters.
:param security: The security details required for authentication
:type security: shared.Security
+ :param server_idx: The index of the server to use for all operations
+ :type server_idx: int
:param server_url: The server URL to use for all operations
:type server_url: str
:param url_params: Parameters to optionally template the server URL with
- :type url_params: dict[str, str]
+ :type url_params: Dict[str, str]
:param client: The requests.Session HTTP client to use for all operations
- :type client: requests_http.Session
+ :type client: requests_http.Session
+ :param retry_config: The utils.RetryConfig to use globally
+ :type retry_config: utils.RetryConfig
"""
- self._client = requests_http.Session()
+ if client is None:
+ client = requests_http.Session()
- if server_url is not None:
- if url_params is not None:
- self._server_url = utils.template_url(server_url, url_params)
- else:
- self._server_url = server_url
-
- if client is not None:
- self._client = client
+ security_client = utils.configure_security_client(client, security)
- self._security_client = utils.configure_security_client(self._client, security)
+ if server_url is not None:
+ if url_params is not None:
+ server_url = utils.template_url(server_url, url_params)
+ self.sdk_configuration = SDKConfiguration(client, security_client, server_url, server_idx, retry_config=retry_config)
+
self._init_sdks()
def _init_sdks(self):
- self.user_v1 = UserV1(
- self._client,
- self._security_client,
- self._server_url,
- self._language,
- self._sdk_version,
- self._gen_version
- )
-
- self.user_v2 = UserV2(
- self._client,
- self._security_client,
- self._server_url,
- self._language,
- self._sdk_version,
- self._gen_version
- )
-
+ self.user_v1 = UserV1(self.sdk_configuration)
+ self.user_v2 = UserV2(self.sdk_configuration)
\ No newline at end of file
diff --git a/user/src/epilot/sdkconfiguration.py b/user/src/epilot/sdkconfiguration.py
new file mode 100755
index 000000000..5f78e77e5
--- /dev/null
+++ b/user/src/epilot/sdkconfiguration.py
@@ -0,0 +1,34 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import requests
+from dataclasses import dataclass
+from typing import Dict, Tuple
+from .utils.retries import RetryConfig
+from .utils import utils
+
+
+SERVERS = [
+ 'https://user.sls.epilot.io',
+]
+"""Contains the list of servers available to the SDK"""
+
+@dataclass
+class SDKConfiguration:
+ client: requests.Session
+ security_client: requests.Session
+ server_url: str = ''
+ server_idx: int = 0
+ language: str = 'python'
+ openapi_doc_version: str = '2.0.0'
+ sdk_version: str = '2.1.1'
+ gen_version: str = '2.173.0'
+ user_agent: str = 'speakeasy-sdk/python 2.1.1 2.173.0 2.0.0 epilot-user'
+ retry_config: RetryConfig = None
+
+ def get_server_details(self) -> Tuple[str, Dict[str, str]]:
+ if self.server_url:
+ return utils.remove_suffix(self.server_url, '/'), {}
+ if self.server_idx is None:
+ self.server_idx = 0
+
+ return SERVERS[self.server_idx], {}
diff --git a/user/src/epilot/user_v1.py b/user/src/epilot/user_v1.py
index 691653ad8..c399223d6 100755
--- a/user/src/epilot/user_v1.py
+++ b/user/src/epilot/user_v1.py
@@ -1,39 +1,32 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-import requests as requests_http
-from . import utils
-from epilot.models import operations, shared
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
+from epilot.models import errors, operations, shared
from typing import Optional
class UserV1:
r"""Legacy User API"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str
- _language: str
- _sdk_version: str
- _gen_version: str
+ sdk_configuration: SDKConfiguration
- def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
- self._client = client
- self._security_client = security_client
- self._server_url = server_url
- self._language = language
- self._sdk_version = sdk_version
- self._gen_version = gen_version
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
+
def get_me(self) -> operations.GetMeResponse:
r"""getMe
Get currently logged in user
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
- url = base_url.removesuffix('/') + '/v1/users/me'
+ url = base_url + '/v1/users/me'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = self.sdk_configuration.security_client
- client = self._security_client
-
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetMeResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -42,21 +35,26 @@ def get_me(self) -> operations.GetMeResponse:
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.User])
res.user = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_user(self, request: operations.GetUserRequest) -> operations.GetUserResponse:
r"""getUser
Get user by id
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetUserRequest, base_url, '/v1/users/{id}', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = self.sdk_configuration.security_client
- client = self._security_client
-
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetUserResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -65,21 +63,26 @@ def get_user(self, request: operations.GetUserRequest) -> operations.GetUserResp
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.User])
res.user = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_user_login_parameters(self, request: operations.GetUserLoginParametersRequest) -> operations.GetUserLoginParametersResponse:
r"""getUserLoginParameters
Get user organization login parameters by username
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetUserLoginParametersRequest, base_url, '/v1/users/username/{username}:getLoginParameters', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = self.sdk_configuration.security_client
- client = self._security_client
-
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetUserLoginParametersResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -88,22 +91,27 @@ def get_user_login_parameters(self, request: operations.GetUserLoginParametersRe
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetUserLoginParameters200ApplicationJSON])
res.get_user_login_parameters_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def list_users(self, request: operations.ListUsersRequest) -> operations.ListUsersResponse:
r"""listUsers
Lists users in organizations you have access to
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v1/users'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v1/users'
+ headers = {}
query_params = utils.get_query_params(operations.ListUsersRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.ListUsersResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -112,6 +120,8 @@ def list_users(self, request: operations.ListUsersRequest) -> operations.ListUse
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.ListUsers200ApplicationJSON])
res.list_users_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
diff --git a/user/src/epilot/user_v2.py b/user/src/epilot/user_v2.py
index 63ba75a8f..201cbcd5a 100755
--- a/user/src/epilot/user_v2.py
+++ b/user/src/epilot/user_v2.py
@@ -1,65 +1,58 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-import requests as requests_http
-from . import utils
-from epilot.models import operations, shared
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
+from epilot.models import errors, operations, shared
from typing import Optional
class UserV2:
r"""User API V2"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str
- _language: str
- _sdk_version: str
- _gen_version: str
-
- def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
- self._client = client
- self._security_client = security_client
- self._server_url = server_url
- self._language = language
- self._sdk_version = sdk_version
- self._gen_version = gen_version
+ sdk_configuration: SDKConfiguration
+
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
+
def activate_user(self, request: operations.ActivateUserRequest) -> operations.ActivateUserResponse:
r"""activateUser
Activate user using an invite token
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/users/public/activate'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/users/public/activate'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "user_activation_payload", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "user_activation_payload", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
query_params = utils.get_query_params(operations.ActivateUserRequest, request)
+ headers['Accept'] = '*/*'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.ActivateUserResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- if http_res.status_code in [200, 404]:
- pass
return res
+
def delete_user_v2(self, request: operations.DeleteUserV2Request) -> operations.DeleteUserV2Response:
r"""deleteUserV2
Delete user by user id
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.DeleteUserV2Request, base_url, '/v2/users/{id}', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = self.sdk_configuration.security_client
- client = self._security_client
-
- http_res = client.request('DELETE', url)
+ http_res = client.request('DELETE', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.DeleteUserV2Response(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -68,21 +61,26 @@ def delete_user_v2(self, request: operations.DeleteUserV2Request) -> operations.
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.User])
res.user = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_me_v2(self) -> operations.GetMeV2Response:
r"""getMeV2
Get currently logged in user
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/users/me'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/users/me'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetMeV2Response(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -91,21 +89,26 @@ def get_me_v2(self) -> operations.GetMeV2Response:
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.UserV2])
res.user_v2 = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_user_login_parameters_v2(self, request: operations.GetUserLoginParametersV2Request) -> operations.GetUserLoginParametersV2Response:
r"""getUserLoginParametersV2
Get user organization login parameters by username
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetUserLoginParametersV2Request, base_url, '/v2/users/public/username/{username}:getLoginParameters', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = self.sdk_configuration.security_client
- client = self._security_client
-
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetUserLoginParametersV2Response(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -114,21 +117,26 @@ def get_user_login_parameters_v2(self, request: operations.GetUserLoginParameter
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetUserLoginParametersV2200ApplicationJSON])
res.get_user_login_parameters_v2_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_user_v2(self, request: operations.GetUserV2Request) -> operations.GetUserV2Response:
r"""getUserV2
Get user details by user id
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetUserV2Request, base_url, '/v2/users/{id}', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = self.sdk_configuration.security_client
- client = self._security_client
-
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetUserV2Response(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -137,23 +145,27 @@ def get_user_v2(self, request: operations.GetUserV2Request) -> operations.GetUse
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.UserV2])
res.user_v2 = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def invite_user(self, request: shared.UserInvitationPayload) -> operations.InviteUserResponse:
r"""inviteUser
Creates a new user in the caller's organization and sends an invite email to activate
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/users/invite'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/users/invite'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('POST', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -164,24 +176,29 @@ def invite_user(self, request: shared.UserInvitationPayload) -> operations.Invit
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.UserV2])
res.user_v2 = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
elif http_res.status_code == 400:
pass
return res
+
def list_users_v2(self, request: operations.ListUsersV2Request) -> operations.ListUsersV2Response:
r"""listUsersV2
Get the list of organization users
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/users'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/users'
+ headers = {}
query_params = utils.get_query_params(operations.ListUsersV2Request, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.ListUsersV2Response(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -190,23 +207,27 @@ def list_users_v2(self, request: operations.ListUsersV2Request) -> operations.Li
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.ListUsersV2200ApplicationJSON])
res.list_users_v2_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def resend_user_invitation(self, request: operations.ResendUserInvitationRequestBody) -> operations.ResendUserInvitationResponse:
r"""resendUserInvitation
Resend user invitation email
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/users/invite:resendEmail'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/users/invite:resendEmail'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('POST', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -217,24 +238,28 @@ def resend_user_invitation(self, request: operations.ResendUserInvitationRequest
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.UserV2])
res.user_v2 = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
elif http_res.status_code == 400:
pass
return res
+
def sign_up_user(self, request: operations.SignUpUserRequest) -> operations.SignUpUserResponse:
r"""signUpUser"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/users/public/signup'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/users/public/signup'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "signup_user_payload", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "signup_user_payload", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
query_params = utils.get_query_params(operations.SignUpUserRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -245,23 +270,27 @@ def sign_up_user(self, request: operations.SignUpUserRequest) -> operations.Sign
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.SignUpUser200ApplicationJSON])
res.sign_up_user_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def update_user_v2(self, request: operations.UpdateUserV2Request) -> operations.UpdateUserV2Response:
r"""updateUserV2
Update user details
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.UpdateUserV2Request, base_url, '/v2/users/{id}', request)
-
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "user_v2", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "user_v2", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('PATCH', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -272,32 +301,34 @@ def update_user_v2(self, request: operations.UpdateUserV2Request) -> operations.
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.UserV2])
res.user_v2 = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def verify_email_with_token(self, request: operations.VerifyEmailWithTokenRequest) -> operations.VerifyEmailWithTokenResponse:
r"""verifyEmailWithToken
Update new email using an verification token
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v2/users/public/verifyEmail'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v2/users/public/verifyEmail'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "user_verification_payload", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "user_verification_payload", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
query_params = utils.get_query_params(operations.VerifyEmailWithTokenRequest, request)
+ headers['Accept'] = '*/*'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.VerifyEmailWithTokenResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- if http_res.status_code in [200, 404]:
- pass
return res
diff --git a/user/src/epilot/utils/retries.py b/user/src/epilot/utils/retries.py
index c6251d948..25f49a1f2 100755
--- a/user/src/epilot/utils/retries.py
+++ b/user/src/epilot/utils/retries.py
@@ -2,6 +2,7 @@
import random
import time
+from typing import List
import requests
@@ -24,16 +25,17 @@ class RetryConfig:
backoff: BackoffStrategy
retry_connection_errors: bool
- def __init__(self, strategy: str, retry_connection_errors: bool):
+ def __init__(self, strategy: str, backoff: BackoffStrategy, retry_connection_errors: bool):
self.strategy = strategy
+ self.backoff = backoff
self.retry_connection_errors = retry_connection_errors
class Retries:
config: RetryConfig
- status_codes: list[str]
+ status_codes: List[str]
- def __init__(self, config: RetryConfig, status_codes: list[str]):
+ def __init__(self, config: RetryConfig, status_codes: List[str]):
self.config = config
self.status_codes = status_codes
diff --git a/user/src/epilot/utils/utils.py b/user/src/epilot/utils/utils.py
index 9d4fba324..3ab126104 100755
--- a/user/src/epilot/utils/utils.py
+++ b/user/src/epilot/utils/utils.py
@@ -3,11 +3,14 @@
import base64
import json
import re
+import sys
from dataclasses import Field, dataclass, fields, is_dataclass, make_dataclass
from datetime import date, datetime
+from decimal import Decimal
from email.message import Message
from enum import Enum
-from typing import Any, Callable, Optional, Tuple, Union, get_args, get_origin
+from typing import (Any, Callable, Dict, List, Optional, Tuple, Union,
+ get_args, get_origin)
from xmlrpc.client import boolean
import dateutil.parser
@@ -17,14 +20,14 @@
class SecurityClient:
client: requests.Session
- query_params: dict[str, str] = {}
+ query_params: Dict[str, str] = {}
def __init__(self, client: requests.Session):
self.client = client
def request(self, method, url, **kwargs):
params = kwargs.get('params', {})
- kwargs["params"] = self.query_params | params
+ kwargs["params"] = {**self.query_params, **params}
return self.client.request(method, url, **kwargs)
@@ -67,7 +70,7 @@ def _parse_security_option(client: SecurityClient, option: dataclass):
client, metadata, getattr(option, opt_field.name))
-def _parse_security_scheme(client: SecurityClient, scheme_metadata: dict, scheme: any):
+def _parse_security_scheme(client: SecurityClient, scheme_metadata: Dict, scheme: any):
scheme_type = scheme_metadata.get('type')
sub_type = scheme_metadata.get('sub_type')
@@ -91,7 +94,7 @@ def _parse_security_scheme(client: SecurityClient, scheme_metadata: dict, scheme
client, scheme_metadata, scheme_metadata, scheme)
-def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: dict, security_metadata: dict, value: any):
+def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: Dict, security_metadata: Dict, value: any):
scheme_type = scheme_metadata.get('type')
sub_type = scheme_metadata.get('sub_type')
@@ -112,7 +115,8 @@ def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: dict,
client.client.headers[header_name] = value
elif scheme_type == 'http':
if sub_type == 'bearer':
- client.client.headers[header_name] = value
+ client.client.headers[header_name] = value.lower().startswith(
+ 'bearer ') and value or f'Bearer {value}'
else:
raise Exception('not supported')
else:
@@ -141,7 +145,8 @@ def _parse_basic_auth_scheme(client: SecurityClient, scheme: dataclass):
client.client.headers['Authorization'] = f'Basic {base64.b64encode(data).decode()}'
-def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass, gbls: dict[str, dict[str, dict[str, Any]]] = None) -> str:
+def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass,
+ gbls: Dict[str, Dict[str, Dict[str, Any]]] = None) -> str:
path_param_fields: Tuple[Field, ...] = fields(clazz)
for field in path_param_fields:
request_metadata = field.metadata.get('request')
@@ -152,71 +157,80 @@ def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass
if param_metadata is None:
continue
- if param_metadata.get('style', 'simple') == 'simple':
- param = getattr(
- path_params, field.name) if path_params is not None else None
- param = _populate_from_globals(
- field.name, param, 'pathParam', gbls)
-
- if param is None:
- continue
-
- if isinstance(param, list):
- pp_vals: list[str] = []
- for pp_val in param:
- if pp_val is None:
- continue
- pp_vals.append(_val_to_string(pp_val))
- path = path.replace(
- '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
- elif isinstance(param, dict):
- pp_vals: list[str] = []
- for pp_key in param:
- if param[pp_key] is None:
- continue
- if param_metadata.get('explode'):
- pp_vals.append(
- f"{pp_key}={_val_to_string(param[pp_key])}")
- else:
- pp_vals.append(
- f"{pp_key},{_val_to_string(param[pp_key])}")
- path = path.replace(
- '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
- elif not isinstance(param, (str, int, float, complex, bool)):
- pp_vals: list[str] = []
- param_fields: Tuple[Field, ...] = fields(param)
- for param_field in param_fields:
- param_value_metadata = param_field.metadata.get(
- 'path_param')
- if not param_value_metadata:
- continue
+ param = getattr(
+ path_params, field.name) if path_params is not None else None
+ param = _populate_from_globals(
+ field.name, param, 'pathParam', gbls)
- parm_name = param_value_metadata.get(
- 'field_name', field.name)
+ if param is None:
+ continue
- param_field_val = getattr(param, param_field.name)
- if param_field_val is None:
- continue
- if param_metadata.get('explode'):
- pp_vals.append(
- f"{parm_name}={_val_to_string(param_field_val)}")
- else:
- pp_vals.append(
- f"{parm_name},{_val_to_string(param_field_val)}")
- path = path.replace(
- '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
- else:
+ f_name = param_metadata.get("field_name", field.name)
+ serialization = param_metadata.get('serialization', '')
+ if serialization != '':
+ serialized_params = _get_serialized_params(
+ param_metadata, f_name, param)
+ for key, value in serialized_params.items():
path = path.replace(
- '{' + param_metadata.get('field_name', field.name) + '}', _val_to_string(param), 1)
+ '{' + key + '}', value, 1)
+ else:
+ if param_metadata.get('style', 'simple') == 'simple':
+ if isinstance(param, List):
+ pp_vals: List[str] = []
+ for pp_val in param:
+ if pp_val is None:
+ continue
+ pp_vals.append(_val_to_string(pp_val))
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
+ elif isinstance(param, Dict):
+ pp_vals: List[str] = []
+ for pp_key in param:
+ if param[pp_key] is None:
+ continue
+ if param_metadata.get('explode'):
+ pp_vals.append(
+ f"{pp_key}={_val_to_string(param[pp_key])}")
+ else:
+ pp_vals.append(
+ f"{pp_key},{_val_to_string(param[pp_key])}")
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
+ elif not isinstance(param, (str, int, float, complex, bool, Decimal)):
+ pp_vals: List[str] = []
+ param_fields: Tuple[Field, ...] = fields(param)
+ for param_field in param_fields:
+ param_value_metadata = param_field.metadata.get(
+ 'path_param')
+ if not param_value_metadata:
+ continue
+
+ parm_name = param_value_metadata.get(
+ 'field_name', field.name)
+
+ param_field_val = getattr(param, param_field.name)
+ if param_field_val is None:
+ continue
+ if param_metadata.get('explode'):
+ pp_vals.append(
+ f"{parm_name}={_val_to_string(param_field_val)}")
+ else:
+ pp_vals.append(
+ f"{parm_name},{_val_to_string(param_field_val)}")
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
+ else:
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', _val_to_string(param), 1)
- return server_url.removesuffix("/") + path
+ return remove_suffix(server_url, '/') + path
def is_optional(field):
return get_origin(field) is Union and type(None) in get_args(field)
-def template_url(url_with_params: str, params: dict[str, str]) -> str:
+def template_url(url_with_params: str, params: Dict[str, str]) -> str:
for key, value in params.items():
url_with_params = url_with_params.replace(
'{' + key + '}', value)
@@ -224,8 +238,9 @@ def template_url(url_with_params: str, params: dict[str, str]) -> str:
return url_with_params
-def get_query_params(clazz: type, query_params: dataclass, gbls: dict[str, dict[str, dict[str, Any]]] = None) -> dict[str, list[str]]:
- params: dict[str, list[str]] = {}
+def get_query_params(clazz: type, query_params: dataclass, gbls: Dict[str, Dict[str, Dict[str, Any]]] = None) -> Dict[
+ str, List[str]]:
+ params: Dict[str, List[str]] = {}
param_fields: Tuple[Field, ...] = fields(clazz)
for field in param_fields:
@@ -246,26 +261,33 @@ def get_query_params(clazz: type, query_params: dataclass, gbls: dict[str, dict[
f_name = metadata.get("field_name")
serialization = metadata.get('serialization', '')
if serialization != '':
- params = params | _get_serialized_query_params(
- metadata, f_name, value)
+ serialized_parms = _get_serialized_params(metadata, f_name, value)
+ for key, value in serialized_parms.items():
+ if key in params:
+ params[key].extend(value)
+ else:
+ params[key] = [value]
else:
style = metadata.get('style', 'form')
if style == 'deepObject':
- params = params | _get_deep_object_query_params(
- metadata, f_name, value)
+ params = {**params, **_get_deep_object_query_params(
+ metadata, f_name, value)}
elif style == 'form':
- params = params | _get_form_query_params(
- metadata, f_name, value)
+ params = {**params, **_get_delimited_query_params(
+ metadata, f_name, value, ",")}
+ elif style == 'pipeDelimited':
+ params = {**params, **_get_delimited_query_params(
+ metadata, f_name, value, "|")}
else:
raise Exception('not yet implemented')
return params
-def get_headers(headers_params: dataclass) -> dict[str, str]:
+def get_headers(headers_params: dataclass) -> Dict[str, str]:
if headers_params is None:
return {}
- headers: dict[str, str] = {}
+ headers: Dict[str, str] = {}
param_fields: Tuple[Field, ...] = fields(headers_params)
for field in param_fields:
@@ -282,8 +304,8 @@ def get_headers(headers_params: dataclass) -> dict[str, str]:
return headers
-def _get_serialized_query_params(metadata: dict, field_name: str, obj: any) -> dict[str, list[str]]:
- params: dict[str, list[str]] = {}
+def _get_serialized_params(metadata: Dict, field_name: str, obj: any) -> Dict[str, str]:
+ params: Dict[str, str] = {}
serialization = metadata.get('serialization', '')
if serialization == 'json':
@@ -292,8 +314,8 @@ def _get_serialized_query_params(metadata: dict, field_name: str, obj: any) -> d
return params
-def _get_deep_object_query_params(metadata: dict, field_name: str, obj: any) -> dict[str, list[str]]:
- params: dict[str, list[str]] = {}
+def _get_deep_object_query_params(metadata: Dict, field_name: str, obj: any) -> Dict[str, List[str]]:
+ params: Dict[str, List[str]] = {}
if obj is None:
return params
@@ -309,27 +331,30 @@ def _get_deep_object_query_params(metadata: dict, field_name: str, obj: any) ->
if obj_val is None:
continue
- if isinstance(obj_val, list):
+ if isinstance(obj_val, List):
for val in obj_val:
if val is None:
continue
- if params.get(f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]') is None:
- params[f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [
+ if params.get(
+ f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]') is None:
+ params[
+ f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [
]
params[
- f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'].append(_val_to_string(val))
+ f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'].append(
+ _val_to_string(val))
else:
params[
f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [
_val_to_string(obj_val)]
- elif isinstance(obj, dict):
+ elif isinstance(obj, Dict):
for key, value in obj.items():
if value is None:
continue
- if isinstance(value, list):
+ if isinstance(value, List):
for val in value:
if val is None:
continue
@@ -355,28 +380,36 @@ def _get_query_param_field_name(obj_field: Field) -> str:
return obj_param_metadata.get("field_name", obj_field.name)
-def _get_form_query_params(metadata: dict, field_name: str, obj: any) -> dict[str, list[str]]:
- return _populate_form(field_name, metadata.get("explode", True), obj, _get_query_param_field_name)
+def _get_delimited_query_params(metadata: Dict, field_name: str, obj: any, delimiter: str) -> Dict[
+ str, List[str]]:
+ return _populate_form(field_name, metadata.get("explode", True), obj, _get_query_param_field_name, delimiter)
SERIALIZATION_METHOD_TO_CONTENT_TYPE = {
- 'json': 'application/json',
- 'form': 'application/x-www-form-urlencoded',
+ 'json': 'application/json',
+ 'form': 'application/x-www-form-urlencoded',
'multipart': 'multipart/form-data',
- 'raw': 'application/octet-stream',
- 'string': 'text/plain',
+ 'raw': 'application/octet-stream',
+ 'string': 'text/plain',
}
-def serialize_request_body(request: dataclass, request_field_name: str, serialization_method: str) -> Tuple[str, any, any]:
+def serialize_request_body(request: dataclass, request_field_name: str, nullable: bool, optional: bool, serialization_method: str, encoder=None) -> Tuple[
+ str, any, any]:
if request is None:
- return None, None, None, None
+ if not nullable and optional:
+ return None, None, None
if not is_dataclass(request) or not hasattr(request, request_field_name):
- return serialize_content_type(request_field_name, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], request)
+ return serialize_content_type(request_field_name, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method],
+ request, encoder)
request_val = getattr(request, request_field_name)
+ if request_val is None:
+ if not nullable and optional:
+ return None, None, None
+
request_fields: Tuple[Field, ...] = fields(request)
request_metadata = None
@@ -388,12 +421,13 @@ def serialize_request_body(request: dataclass, request_field_name: str, serializ
if request_metadata is None:
raise Exception('invalid request type')
- return serialize_content_type(request_field_name, request_metadata.get('media_type', 'application/octet-stream'), request_val)
+ return serialize_content_type(request_field_name, request_metadata.get('media_type', 'application/octet-stream'),
+ request_val)
-def serialize_content_type(field_name: str, media_type: str, request: dataclass) -> Tuple[str, any, list[list[any]]]:
+def serialize_content_type(field_name: str, media_type: str, request: dataclass, encoder=None) -> Tuple[str, any, List[List[any]]]:
if re.match(r'(application|text)\/.*?\+*json.*', media_type) is not None:
- return media_type, marshal_json(request), None
+ return media_type, marshal_json(request, encoder), None
if re.match(r'multipart\/.*', media_type) is not None:
return serialize_multipart_form(media_type, request)
if re.match(r'application\/x-www-form-urlencoded.*', media_type) is not None:
@@ -407,8 +441,8 @@ def serialize_content_type(field_name: str, media_type: str, request: dataclass)
f"invalid request body type {type(request)} for mediaType {media_type}")
-def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, any, list[list[any]]]:
- form: list[list[any]] = []
+def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, any, List[List[any]]]:
+ form: List[List[any]] = []
request_fields = fields(request)
for field in request_fields:
@@ -449,7 +483,7 @@ def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str,
else:
field_name = field_metadata.get(
"field_name", field.name)
- if isinstance(val, list):
+ if isinstance(val, List):
for value in val:
if value is None:
continue
@@ -460,8 +494,8 @@ def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str,
return media_type, None, form
-def serialize_dict(original: dict, explode: bool, field_name, existing: Optional[dict[str, list[str]]]) -> dict[
- str, list[str]]:
+def serialize_dict(original: Dict, explode: bool, field_name, existing: Optional[Dict[str, List[str]]]) -> Dict[
+ str, List[str]]:
if existing is None:
existing = []
@@ -481,8 +515,8 @@ def serialize_dict(original: dict, explode: bool, field_name, existing: Optional
return existing
-def serialize_form_data(field_name: str, data: dataclass) -> dict[str, any]:
- form: dict[str, list[str]] = {}
+def serialize_form_data(field_name: str, data: dataclass) -> Dict[str, any]:
+ form: Dict[str, List[str]] = {}
if is_dataclass(data):
for field in fields(data):
@@ -500,12 +534,12 @@ def serialize_form_data(field_name: str, data: dataclass) -> dict[str, any]:
form[field_name] = [marshal_json(val)]
else:
if metadata.get('style', 'form') == 'form':
- form = form | _populate_form(
- field_name, metadata.get('explode', True), val, _get_form_field_name)
+ form = {**form, **_populate_form(
+ field_name, metadata.get('explode', True), val, _get_form_field_name, ",")}
else:
raise Exception(
f'Invalid form style for field {field.name}')
- elif isinstance(data, dict):
+ elif isinstance(data, Dict):
for key, value in data.items():
form[key] = [_val_to_string(value)]
else:
@@ -523,8 +557,9 @@ def _get_form_field_name(obj_field: Field) -> str:
return obj_param_metadata.get("field_name", obj_field.name)
-def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_func: Callable) -> dict[str, list[str]]:
- params: dict[str, list[str]] = {}
+def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_func: Callable, delimiter: str) -> \
+ Dict[str, List[str]]:
+ params: Dict[str, List[str]] = {}
if obj is None:
return params
@@ -546,11 +581,11 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f
params[obj_field_name] = [_val_to_string(val)]
else:
items.append(
- f'{obj_field_name},{_val_to_string(val)}')
+ f'{obj_field_name}{delimiter}{_val_to_string(val)}')
if len(items) > 0:
- params[field_name] = [','.join(items)]
- elif isinstance(obj, dict):
+ params[field_name] = [delimiter.join(items)]
+ elif isinstance(obj, Dict):
items = []
for key, value in obj.items():
if value is None:
@@ -559,11 +594,11 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f
if explode:
params[key] = _val_to_string(value)
else:
- items.append(f'{key},{_val_to_string(value)}')
+ items.append(f'{key}{delimiter}{_val_to_string(value)}')
if len(items) > 0:
- params[field_name] = [','.join(items)]
- elif isinstance(obj, list):
+ params[field_name] = [delimiter.join(items)]
+ elif isinstance(obj, List):
items = []
for value in obj:
@@ -578,7 +613,8 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f
items.append(_val_to_string(value))
if len(items) > 0:
- params[field_name] = [','.join([str(item) for item in items])]
+ params[field_name] = [delimiter.join(
+ [str(item) for item in items])]
else:
params[field_name] = [_val_to_string(obj)]
@@ -616,7 +652,7 @@ def _serialize_header(explode: bool, obj: any) -> str:
if len(items) > 0:
return ','.join(items)
- elif isinstance(obj, dict):
+ elif isinstance(obj, Dict):
items = []
for key, value in obj.items():
@@ -631,7 +667,7 @@ def _serialize_header(explode: bool, obj: any) -> str:
if len(items) > 0:
return ','.join([str(item) for item in items])
- elif isinstance(obj, list):
+ elif isinstance(obj, List):
items = []
for value in obj:
@@ -648,20 +684,28 @@ def _serialize_header(explode: bool, obj: any) -> str:
return ''
-def unmarshal_json(data, typ):
- unmarhsal = make_dataclass('Unmarhsal', [('res', typ)],
+def unmarshal_json(data, typ, decoder=None):
+ unmarshal = make_dataclass('Unmarshal', [('res', typ)],
bases=(DataClassJsonMixin,))
json_dict = json.loads(data)
- out = unmarhsal.from_dict({"res": json_dict})
- return out.res
+ try:
+ out = unmarshal.from_dict({"res": json_dict})
+ except AttributeError as attr_err:
+ raise AttributeError(
+ f'unable to unmarshal {data} as {typ}') from attr_err
+
+ return out.res if decoder is None else decoder(out.res)
-def marshal_json(val):
+def marshal_json(val, encoder=None):
marshal = make_dataclass('Marshal', [('res', type(val))],
bases=(DataClassJsonMixin,))
marshaller = marshal(res=val)
json_dict = marshaller.to_dict()
- return json.dumps(json_dict["res"])
+
+ val = json_dict["res"] if encoder is None else encoder(json_dict["res"])
+
+ return json.dumps(val)
def match_content_type(content_type: str, pattern: str) -> boolean:
@@ -705,6 +749,106 @@ def datefromisoformat(date_str: str):
return dateutil.parser.parse(date_str).date()
+def bigintencoder(optional: bool):
+ def bigintencode(val: int):
+ if optional and val is None:
+ return None
+ return str(val)
+
+ return bigintencode
+
+
+def bigintdecoder(val):
+ if isinstance(val, float):
+ raise ValueError(f"{val} is a float")
+ return int(val)
+
+
+def decimalencoder(optional: bool, as_str: bool):
+ def decimalencode(val: Decimal):
+ if optional and val is None:
+ return None
+
+ if as_str:
+ return str(val)
+
+ return float(val)
+
+ return decimalencode
+
+
+def decimaldecoder(val):
+ return Decimal(str(val))
+
+
+def map_encoder(optional: bool, value_encoder: Callable):
+ def map_encode(val: Dict):
+ if optional and val is None:
+ return None
+
+ encoded = {}
+ for key, value in val.items():
+ encoded[key] = value_encoder(value)
+
+ return encoded
+
+ return map_encode
+
+
+def map_decoder(value_decoder: Callable):
+ def map_decode(val: Dict):
+ decoded = {}
+ for key, value in val.items():
+ decoded[key] = value_decoder(value)
+
+ return decoded
+
+ return map_decode
+
+
+def list_encoder(optional: bool, value_encoder: Callable):
+ def list_encode(val: List):
+ if optional and val is None:
+ return None
+
+ encoded = []
+ for value in val:
+ encoded.append(value_encoder(value))
+
+ return encoded
+
+ return list_encode
+
+
+def list_decoder(value_decoder: Callable):
+ def list_decode(val: List):
+ decoded = []
+ for value in val:
+ decoded.append(value_decoder(value))
+
+ return decoded
+
+ return list_decode
+
+def union_encoder(all_encoders: Dict[str, Callable]):
+ def selective_encoder(val: any):
+ if type(val) in all_encoders:
+ return all_encoders[type(val)](val)
+ return val
+ return selective_encoder
+
+def union_decoder(all_decoders: List[Callable]):
+ def selective_decoder(val: any):
+ decoded = val
+ for decoder in all_decoders:
+ try:
+ decoded = decoder(val)
+ break
+ except (TypeError, ValueError):
+ continue
+ return decoded
+ return selective_decoder
+
def get_field_name(name):
def override(_, _field_name=name):
return _field_name
@@ -718,12 +862,12 @@ def _val_to_string(val):
if isinstance(val, datetime):
return val.isoformat().replace('+00:00', 'Z')
if isinstance(val, Enum):
- return val.value
+ return str(val.value)
return str(val)
-def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: dict[str, dict[str, dict[str, Any]]]):
+def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: Dict[str, Dict[str, Dict[str, Any]]]):
if value is None and gbls is not None:
if 'parameters' in gbls:
if param_type in gbls['parameters']:
@@ -733,3 +877,16 @@ def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: d
value = global_value
return value
+
+
+def decoder_with_discriminator(field_name):
+ def decode_fx(obj):
+ kls = getattr(sys.modules['sdk.models.shared'], obj[field_name])
+ return unmarshal_json(json.dumps(obj), kls)
+ return decode_fx
+
+
+def remove_suffix(input_string, suffix):
+ if suffix and input_string.endswith(suffix):
+ return input_string[:-len(suffix)]
+ return input_string