diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index df0a8bcc..a0415ffa 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: a3e2761c-0979-427e-b940-b6de6c04cc0d management: - docChecksum: 53d039df5dc25ea1f734cb75b0954d09 + docChecksum: 402331dd353b2c2a2992971bda59aec8 docVersion: 0.0.2 speakeasyVersion: 1.555.0 generationVersion: 2.618.0 - releaseVersion: 0.35.4 - configChecksum: e441d231abf9224a1f034ec67c9da73d + releaseVersion: 0.35.5 + configChecksum: afe443c486508289be35507a4757ab23 repoURL: https://github.com/asksyllable/syllable-sdk-python.git installationURL: https://github.com/asksyllable/syllable-sdk-python.git published: true @@ -225,6 +225,7 @@ generatedFiles: - docs/models/listresponsesession.md - docs/models/listresponsesessionlabel.md - docs/models/listresponsetoolresponse.md + - docs/models/listresponseuserresponse.md - docs/models/loc.md - docs/models/metadata.md - docs/models/orderbydirection.md @@ -335,6 +336,13 @@ generatedFiles: - docs/models/twilionumberupdateresponse.md - docs/models/twiliophonenumber.md - docs/models/type.md + - docs/models/usercreaterequest.md + - docs/models/userdeleterequest.md + - docs/models/userproperties.md + - docs/models/userresponse.md + - docs/models/usersgetbyemailrequest.md + - docs/models/userslistrequest.md + - docs/models/userupdaterequest.md - docs/models/utils/retryconfig.md - docs/models/validationerror.md - docs/models/voicesamplecreaterequest.md @@ -576,6 +584,7 @@ generatedFiles: - src/syllable_sdk/models/listresponse_session_.py - src/syllable_sdk/models/listresponse_sessionlabel_.py - src/syllable_sdk/models/listresponse_toolresponse_.py + - src/syllable_sdk/models/listresponse_userresponse_.py - src/syllable_sdk/models/orderbydirection.py - src/syllable_sdk/models/outbound_batch_addop.py - src/syllable_sdk/models/outbound_batch_deleteop.py @@ -682,6 +691,13 @@ generatedFiles: - src/syllable_sdk/models/twilionumberupdaterequest.py - src/syllable_sdk/models/twilionumberupdateresponse.py - src/syllable_sdk/models/twiliophonenumber.py + - src/syllable_sdk/models/usercreaterequest.py + - src/syllable_sdk/models/userdeleterequest.py + - src/syllable_sdk/models/userproperties.py + - src/syllable_sdk/models/userresponse.py + - src/syllable_sdk/models/users_get_by_emailop.py + - src/syllable_sdk/models/users_listop.py + - src/syllable_sdk/models/userupdaterequest.py - src/syllable_sdk/models/validationerror.py - src/syllable_sdk/models/voicesamplecreaterequest.py - src/syllable_sdk/numbers.py @@ -2098,5 +2114,57 @@ examples: application/json: {"phone_numbers": [{"sid": "PN123", "phone_number": "+19876543210", "friendly_name": "Test number", "trunk_sid": "TK123"}]} "422": application/json: {} + users_list: + speakeasy-default-users-list: + parameters: + query: + page: 0 + limit: 25 + search_fields: ["role_id"] + search_field_values: ["Some Object Name"] + start_datetime: "2023-01-01T00:00:00Z" + end_datetime: "2024-01-01T00:00:00Z" + responses: + "200": + application/json: {"items": [{"email": "user@email.com", "first_name": "Jane", "last_name": "Smith", "role_id": 1, "last_updated_comments": "Updated to change which role was assigned", "id": 1, "last_updated": "2023-05-14T13:30:57.305Z", "last_updated_by": "admin@email.com", "last_session_at": "2025-01-01T12:00:00Z"}, {"email": "user@email.com", "first_name": "Jane", "last_name": "Smith", "role_id": 1, "last_updated_comments": "Updated to change which role was assigned", "id": 1, "last_updated": "2023-05-14T13:30:57.305Z", "last_updated_by": "admin@email.com", "last_session_at": "2025-01-01T12:00:00Z"}, {"email": "user@email.com", "first_name": "Jane", "last_name": "Smith", "role_id": 1, "last_updated_comments": "Updated to change which role was assigned", "id": 1, "last_updated": "2023-05-14T13:30:57.305Z", "last_updated_by": "admin@email.com", "last_session_at": "2025-01-01T12:00:00Z"}], "page": 0, "page_size": 25, "total_pages": 4, "total_count": 100} + "422": + application/json: {} + users_create: + speakeasy-default-users-create: + requestBody: + application/json: {"email": "user@email.com", "first_name": "Jane", "last_name": "Smith", "role_id": 1} + responses: + "200": + application/json: {"email": "user@email.com", "first_name": "Jane", "last_name": "Smith", "role_id": 1, "last_updated_comments": "Updated to change which role was assigned", "id": 1, "last_updated": "2024-06-21T05:54:26.670Z", "last_updated_by": "admin@email.com", "last_session_at": "2025-01-01T12:00:00Z"} + "422": + application/json: {} + users_update: + speakeasy-default-users-update: + requestBody: + application/json: {"email": "user@email.com", "first_name": "Jane", "last_name": "Smith", "role_id": 1, "last_updated_comments": "Updated to change which role was assigned"} + responses: + "200": + application/json: {"email": "user@email.com", "first_name": "Jane", "last_name": "Smith", "role_id": 1, "last_updated_comments": "Updated to change which role was assigned", "id": 1, "last_updated": "2024-09-29T21:34:27.623Z", "last_updated_by": "admin@email.com", "last_session_at": "2025-01-01T12:00:00Z"} + "422": + application/json: {} + users_delete: + speakeasy-default-users-delete: + requestBody: + application/json: {"email": "user@email.com", "reason": "User left the organization"} + responses: + "200": + application/json: "" + "422": + application/json: {} + users_get_by_email: + speakeasy-default-users-get-by-email: + parameters: + path: + user_email: "" + responses: + "200": + application/json: {"email": "user@email.com", "first_name": "Jane", "last_name": "Smith", "role_id": 1, "last_updated_comments": "Updated to change which role was assigned", "id": 1, "last_updated": "2024-09-14T02:53:37.916Z", "last_updated_by": "admin@email.com", "last_session_at": "2025-01-01T12:00:00Z"} + "422": + application/json: {} examplesVersion: 1.0.2 generatedTests: {} diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 1335d22b..2beb55b9 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -20,7 +20,7 @@ generation: oAuth2ClientCredentialsEnabled: true oAuth2PasswordEnabled: true python: - version: 0.35.4 + version: 0.35.5 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 511fe88b..4f9a0949 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -2,20 +2,20 @@ speakeasyVersion: 1.555.0 sources: SyllableSDK: sourceNamespace: syllable-sdk-oas - sourceRevisionDigest: sha256:79999898587caca9f46096237050aae397d6a3e179f81aed87cfbbfd56de2123 - sourceBlobDigest: sha256:03976621ef4e5f66a3de017eabe54c5720c09f2e655da93c5b47f7e69f8c48f4 + sourceRevisionDigest: sha256:8e7137aeced0b1cacad93ea842a6610be39f514baf2aed03cc777565d665b524 + sourceBlobDigest: sha256:eb1847e795496f421a5e5cd543f670bb944c310a82ebf81f2e9df5af4555224f tags: - latest - - speakeasy-sdk-regen-1748965017 + - speakeasy-sdk-regen-1748975244 - 0.0.2 targets: syllable-sdk: source: SyllableSDK sourceNamespace: syllable-sdk-oas - sourceRevisionDigest: sha256:79999898587caca9f46096237050aae397d6a3e179f81aed87cfbbfd56de2123 - sourceBlobDigest: sha256:03976621ef4e5f66a3de017eabe54c5720c09f2e655da93c5b47f7e69f8c48f4 + sourceRevisionDigest: sha256:8e7137aeced0b1cacad93ea842a6610be39f514baf2aed03cc777565d665b524 + sourceBlobDigest: sha256:eb1847e795496f421a5e5cd543f670bb944c310a82ebf81f2e9df5af4555224f codeSamplesNamespace: code-samples-python-sdk-syllable-sdk-oas-code-samples - codeSamplesRevisionDigest: sha256:25716edc56f8fb76048a705f432207f76c9d6fdd03b8639f1b77f94a138da37a + codeSamplesRevisionDigest: sha256:bb242b710ba756f5cad99164b3c619abda12f6e47dbfabfbadf2a363bee95acd workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README-PYPI.md b/README-PYPI.md index 69b324b1..29f23dad 100644 --- a/README-PYPI.md +++ b/README-PYPI.md @@ -433,10 +433,20 @@ with SyllableSDK( ### [users](https://github.com/asksyllable/syllable-sdk-python/blob/master/docs/sdks/users/README.md) +* [list](https://github.com/asksyllable/syllable-sdk-python/blob/master/docs/sdks/users/README.md#list) - List Users +* [create](https://github.com/asksyllable/syllable-sdk-python/blob/master/docs/sdks/users/README.md#create) - Create User +* [update](https://github.com/asksyllable/syllable-sdk-python/blob/master/docs/sdks/users/README.md#update) - Update User +* [delete](https://github.com/asksyllable/syllable-sdk-python/blob/master/docs/sdks/users/README.md#delete) - Delete User +* [users_get_by_email](https://github.com/asksyllable/syllable-sdk-python/blob/master/docs/sdks/users/README.md#users_get_by_email) - Get User * [users_delete_account](https://github.com/asksyllable/syllable-sdk-python/blob/master/docs/sdks/users/README.md#users_delete_account) - Request Removal Of This Account ### [v1](https://github.com/asksyllable/syllable-sdk-python/blob/master/docs/sdks/v1/README.md) +* [list](https://github.com/asksyllable/syllable-sdk-python/blob/master/docs/sdks/v1/README.md#list) - List Users +* [create](https://github.com/asksyllable/syllable-sdk-python/blob/master/docs/sdks/v1/README.md#create) - Create User +* [update](https://github.com/asksyllable/syllable-sdk-python/blob/master/docs/sdks/v1/README.md#update) - Update User +* [delete](https://github.com/asksyllable/syllable-sdk-python/blob/master/docs/sdks/v1/README.md#delete) - Delete User +* [users_get_by_email](https://github.com/asksyllable/syllable-sdk-python/blob/master/docs/sdks/v1/README.md#users_get_by_email) - Get User * [users_delete_account](https://github.com/asksyllable/syllable-sdk-python/blob/master/docs/sdks/v1/README.md#users_delete_account) - Request Removal Of This Account diff --git a/README.md b/README.md index 115ae203..89076620 100644 --- a/README.md +++ b/README.md @@ -433,10 +433,20 @@ with SyllableSDK( ### [users](docs/sdks/users/README.md) +* [list](docs/sdks/users/README.md#list) - List Users +* [create](docs/sdks/users/README.md#create) - Create User +* [update](docs/sdks/users/README.md#update) - Update User +* [delete](docs/sdks/users/README.md#delete) - Delete User +* [users_get_by_email](docs/sdks/users/README.md#users_get_by_email) - Get User * [users_delete_account](docs/sdks/users/README.md#users_delete_account) - Request Removal Of This Account ### [v1](docs/sdks/v1/README.md) +* [list](docs/sdks/v1/README.md#list) - List Users +* [create](docs/sdks/v1/README.md#create) - Create User +* [update](docs/sdks/v1/README.md#update) - Update User +* [delete](docs/sdks/v1/README.md#delete) - Delete User +* [users_get_by_email](docs/sdks/v1/README.md#users_get_by_email) - Get User * [users_delete_account](docs/sdks/v1/README.md#users_delete_account) - Request Removal Of This Account diff --git a/RELEASES.md b/RELEASES.md index 7a654af1..127fbb00 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1196,4 +1196,14 @@ Based on: ### Generated - [python v0.35.4] . ### Releases -- [PyPI v0.35.4] https://pypi.org/project/syllable-sdk/0.35.4 - . \ No newline at end of file +- [PyPI v0.35.4] https://pypi.org/project/syllable-sdk/0.35.4 - . + +## 2025-06-03 18:27:05 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.555.0 (2.618.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v0.35.5] . +### Releases +- [PyPI v0.35.5] https://pypi.org/project/syllable-sdk/0.35.5 - . \ No newline at end of file diff --git a/codeSamples.yaml b/codeSamples.yaml index 41073977..40ee4711 100644 --- a/codeSamples.yaml +++ b/codeSamples.yaml @@ -2890,6 +2890,176 @@ actions: res = ss_client.tools.get_by_name(tool_name="") + # Handle response + print(res) + - target: $["paths"]["/api/v1/users/"]["delete"] + update: + x-codeSamples: + - lang: python + label: Python (SDK) + source: |- + import os + from syllable_sdk import SyllableSDK + + + with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), + ) as ss_client: + + res = ss_client.users.delete(request={ + "email": "user@email.com", + "reason": "User left the organization", + }) + + # Handle response + print(res) + - lang: python + label: Python (SDK) + source: |- + import os + from syllable_sdk import SyllableSDK + + + with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), + ) as ss_client: + + res = ss_client.v1.delete(request={ + "email": "user@email.com", + "reason": "User left the organization", + }) + + # Handle response + print(res) + - target: $["paths"]["/api/v1/users/"]["get"] + update: + x-codeSamples: + - lang: python + label: Python (SDK) + source: |- + import os + import syllable_sdk + from syllable_sdk import SyllableSDK + + + with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), + ) as ss_client: + + res = ss_client.users.list(page=0, search_fields=[ + syllable_sdk.UserProperties.ROLE_ID, + ], search_field_values=[ + "Some Object Name", + ], start_datetime="2023-01-01T00:00:00Z", end_datetime="2024-01-01T00:00:00Z") + + # Handle response + print(res) + - lang: python + label: Python (SDK) + source: |- + import os + import syllable_sdk + from syllable_sdk import SyllableSDK + + + with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), + ) as ss_client: + + res = ss_client.v1.list(page=0, search_fields=[ + syllable_sdk.UserProperties.ROLE_ID, + ], search_field_values=[ + "Some Object Name", + ], start_datetime="2023-01-01T00:00:00Z", end_datetime="2024-01-01T00:00:00Z") + + # Handle response + print(res) + - target: $["paths"]["/api/v1/users/"]["post"] + update: + x-codeSamples: + - lang: python + label: Python (SDK) + source: |- + import os + from syllable_sdk import SyllableSDK + + + with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), + ) as ss_client: + + res = ss_client.users.create(request={ + "email": "user@email.com", + "first_name": "Jane", + "last_name": "Smith", + "role_id": 1, + }) + + # Handle response + print(res) + - lang: python + label: Python (SDK) + source: |- + import os + from syllable_sdk import SyllableSDK + + + with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), + ) as ss_client: + + res = ss_client.v1.create(request={ + "email": "user@email.com", + "first_name": "Jane", + "last_name": "Smith", + "role_id": 1, + }) + + # Handle response + print(res) + - target: $["paths"]["/api/v1/users/"]["put"] + update: + x-codeSamples: + - lang: python + label: Python (SDK) + source: |- + import os + from syllable_sdk import SyllableSDK + + + with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), + ) as ss_client: + + res = ss_client.users.update(request={ + "email": "user@email.com", + "first_name": "Jane", + "last_name": "Smith", + "role_id": 1, + "last_updated_comments": "Updated to change which role was assigned", + }) + + # Handle response + print(res) + - lang: python + label: Python (SDK) + source: |- + import os + from syllable_sdk import SyllableSDK + + + with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), + ) as ss_client: + + res = ss_client.v1.update(request={ + "email": "user@email.com", + "first_name": "Jane", + "last_name": "Smith", + "role_id": 1, + "last_updated_comments": "Updated to change which role was assigned", + }) + # Handle response print(res) - target: $["paths"]["/api/v1/users/delete_account"]["delete"] @@ -2923,5 +3093,38 @@ actions: res = ss_client.v1.users_delete_account() + # Handle response + print(res) + - target: $["paths"]["/api/v1/users/{user_email}"]["get"] + update: + x-codeSamples: + - lang: python + label: Python (SDK) + source: |- + import os + from syllable_sdk import SyllableSDK + + + with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), + ) as ss_client: + + res = ss_client.users.users_get_by_email(user_email="") + + # Handle response + print(res) + - lang: python + label: Python (SDK) + source: |- + import os + from syllable_sdk import SyllableSDK + + + with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), + ) as ss_client: + + res = ss_client.v1.users_get_by_email(user_email="") + # Handle response print(res) diff --git a/docs/models/listresponseuserresponse.md b/docs/models/listresponseuserresponse.md new file mode 100644 index 00000000..897d17c7 --- /dev/null +++ b/docs/models/listresponseuserresponse.md @@ -0,0 +1,12 @@ +# ListResponseUserResponse + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `items` | List[[models.UserResponse](../models/userresponse.md)] | :heavy_check_mark: | List of items returned from the query | | +| `page` | *int* | :heavy_check_mark: | The page number of the results (0-based) | 0 | +| `page_size` | *int* | :heavy_check_mark: | The number of items returned per page | 25 | +| `total_pages` | *OptionalNullable[int]* | :heavy_minus_sign: | The total number of pages of results given the indicated page size | 4 | +| `total_count` | *OptionalNullable[int]* | :heavy_minus_sign: | The total number of items returned from the query | 100 | \ No newline at end of file diff --git a/docs/models/usercreaterequest.md b/docs/models/usercreaterequest.md new file mode 100644 index 00000000..8ff989a7 --- /dev/null +++ b/docs/models/usercreaterequest.md @@ -0,0 +1,13 @@ +# UserCreateRequest + +Request model to create a user. + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `email` | *str* | :heavy_check_mark: | Email address of the user | user@email.com | +| `first_name` | *OptionalNullable[str]* | :heavy_minus_sign: | First name of the user | Jane | +| `last_name` | *OptionalNullable[str]* | :heavy_minus_sign: | Last name of the user | Smith | +| `role_id` | *int* | :heavy_check_mark: | ID of the role assigned to the user | 1 | \ No newline at end of file diff --git a/docs/models/userdeleterequest.md b/docs/models/userdeleterequest.md new file mode 100644 index 00000000..51c576d6 --- /dev/null +++ b/docs/models/userdeleterequest.md @@ -0,0 +1,11 @@ +# UserDeleteRequest + +Request model to delete a user. + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- | +| `email` | *str* | :heavy_check_mark: | The email address of the user to delete | user@email.com | +| `reason` | *str* | :heavy_check_mark: | The reason for deleting the user | User left the organization | \ No newline at end of file diff --git a/docs/models/userproperties.md b/docs/models/userproperties.md new file mode 100644 index 00000000..05cd4562 --- /dev/null +++ b/docs/models/userproperties.md @@ -0,0 +1,13 @@ +# UserProperties + +Names of user fields supported for filtering/sorting on list endpoint. + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `EMAIL` | email | +| `FIRST_NAME` | first_name | +| `LAST_NAME` | last_name | +| `ROLE_ID` | role_id | \ No newline at end of file diff --git a/docs/models/userresponse.md b/docs/models/userresponse.md new file mode 100644 index 00000000..0ef7ba01 --- /dev/null +++ b/docs/models/userresponse.md @@ -0,0 +1,18 @@ +# UserResponse + +Information about a user. + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `email` | *str* | :heavy_check_mark: | Email address of the user | user@email.com | +| `first_name` | *OptionalNullable[str]* | :heavy_minus_sign: | First name of the user | Jane | +| `last_name` | *OptionalNullable[str]* | :heavy_minus_sign: | Last name of the user | Smith | +| `role_id` | *int* | :heavy_check_mark: | ID of the role assigned to the user | 1 | +| `last_updated_comments` | *OptionalNullable[str]* | :heavy_minus_sign: | Comments for the most recent edit to the user. | Updated to change which role was assigned | +| `id` | *int* | :heavy_check_mark: | Internal ID of the user | 1 | +| `last_updated` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | The timestamp of the most recent update to the user | | +| `last_updated_by` | *OptionalNullable[str]* | :heavy_minus_sign: | The email address of the user who last updated the user | admin@email.com | +| `last_session_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | The timestamp of the user's last session | 2025-01-01T12:00:00Z | \ No newline at end of file diff --git a/docs/models/usersgetbyemailrequest.md b/docs/models/usersgetbyemailrequest.md new file mode 100644 index 00000000..6127ba33 --- /dev/null +++ b/docs/models/usersgetbyemailrequest.md @@ -0,0 +1,8 @@ +# UsersGetByEmailRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `user_email` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/userslistrequest.md b/docs/models/userslistrequest.md new file mode 100644 index 00000000..6e6ebfde --- /dev/null +++ b/docs/models/userslistrequest.md @@ -0,0 +1,16 @@ +# UsersListRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `page` | *OptionalNullable[int]* | :heavy_minus_sign: | The page number from which to start (0-based) | 0 | +| `limit` | *Optional[int]* | :heavy_minus_sign: | The maximum number of items to return | 25 | +| `search_fields` | List[[models.UserProperties](../models/userproperties.md)] | :heavy_minus_sign: | String names of fields to search. Correspond by index to search field values | name | +| `search_field_values` | List[*str*] | :heavy_minus_sign: | Values of fields to search. Correspond by index to search fields. Unless field name contains "list", an individual search field value cannot be a list | Some Object Name | +| `order_by` | [OptionalNullable[models.UserProperties]](../models/userproperties.md) | :heavy_minus_sign: | The field whose value should be used to order the results | | +| `order_by_direction` | [OptionalNullable[models.OrderByDirection]](../models/orderbydirection.md) | :heavy_minus_sign: | The direction in which to order the results | | +| `fields` | List[[models.UserProperties](../models/userproperties.md)] | :heavy_minus_sign: | The fields to include in the response | | +| `start_datetime` | *OptionalNullable[str]* | :heavy_minus_sign: | The start datetime for filtering results | 2023-01-01T00:00:00Z | +| `end_datetime` | *OptionalNullable[str]* | :heavy_minus_sign: | The end datetime for filtering results | 2024-01-01T00:00:00Z | \ No newline at end of file diff --git a/docs/models/userupdaterequest.md b/docs/models/userupdaterequest.md new file mode 100644 index 00000000..a669cdf9 --- /dev/null +++ b/docs/models/userupdaterequest.md @@ -0,0 +1,14 @@ +# UserUpdateRequest + +Request model to update an existing user. + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | +| `email` | *str* | :heavy_check_mark: | Email address of the user | user@email.com | +| `first_name` | *OptionalNullable[str]* | :heavy_minus_sign: | First name of the user | Jane | +| `last_name` | *OptionalNullable[str]* | :heavy_minus_sign: | Last name of the user | Smith | +| `role_id` | *int* | :heavy_check_mark: | ID of the role assigned to the user | 1 | +| `last_updated_comments` | *OptionalNullable[str]* | :heavy_minus_sign: | Comments for the most recent edit to the user. | Updated to change which role was assigned | \ No newline at end of file diff --git a/docs/sdks/users/README.md b/docs/sdks/users/README.md index 1dabb017..f5427f26 100644 --- a/docs/sdks/users/README.md +++ b/docs/sdks/users/README.md @@ -5,11 +5,244 @@ ### Available Operations +* [list](#list) - List Users +* [create](#create) - Create User +* [update](#update) - Update User +* [delete](#delete) - Delete User +* [users_get_by_email](#users_get_by_email) - Get User * [users_delete_account](#users_delete_account) - Request Removal Of This Account +## list + +List the existing users. + +### Example Usage + +```python +import os +import syllable_sdk +from syllable_sdk import SyllableSDK + + +with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), +) as ss_client: + + res = ss_client.users.list(page=0, search_fields=[ + syllable_sdk.UserProperties.ROLE_ID, + ], search_field_values=[ + "Some Object Name", + ], start_datetime="2023-01-01T00:00:00Z", end_datetime="2024-01-01T00:00:00Z") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `page` | *OptionalNullable[int]* | :heavy_minus_sign: | The page number from which to start (0-based) | 0 | +| `limit` | *Optional[int]* | :heavy_minus_sign: | The maximum number of items to return | 25 | +| `search_fields` | List[[models.UserProperties](../../models/userproperties.md)] | :heavy_minus_sign: | String names of fields to search. Correspond by index to search field values | name | +| `search_field_values` | List[*str*] | :heavy_minus_sign: | Values of fields to search. Correspond by index to search fields. Unless field name contains "list", an individual search field value cannot be a list | Some Object Name | +| `order_by` | [OptionalNullable[models.UserProperties]](../../models/userproperties.md) | :heavy_minus_sign: | The field whose value should be used to order the results | | +| `order_by_direction` | [OptionalNullable[models.OrderByDirection]](../../models/orderbydirection.md) | :heavy_minus_sign: | The direction in which to order the results | | +| `fields` | List[[models.UserProperties](../../models/userproperties.md)] | :heavy_minus_sign: | The fields to include in the response | | +| `start_datetime` | *OptionalNullable[str]* | :heavy_minus_sign: | The start datetime for filtering results | 2023-01-01T00:00:00Z | +| `end_datetime` | *OptionalNullable[str]* | :heavy_minus_sign: | The end datetime for filtering results | 2024-01-01T00:00:00Z | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | + +### Response + +**[models.ListResponseUserResponse](../../models/listresponseuserresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------- | -------------------------- | -------------------------- | +| models.HTTPValidationError | 422 | application/json | +| models.APIError | 4XX, 5XX | \*/\* | + +## create + +Create a new user. + +### Example Usage + +```python +import os +from syllable_sdk import SyllableSDK + + +with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), +) as ss_client: + + res = ss_client.users.create(request={ + "email": "user@email.com", + "first_name": "Jane", + "last_name": "Smith", + "role_id": 1, + }) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `request` | [models.UserCreateRequest](../../models/usercreaterequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.UserResponse](../../models/userresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------- | -------------------------- | -------------------------- | +| models.HTTPValidationError | 422 | application/json | +| models.APIError | 4XX, 5XX | \*/\* | + +## update + +Update an existing user. + +### Example Usage + +```python +import os +from syllable_sdk import SyllableSDK + + +with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), +) as ss_client: + + res = ss_client.users.update(request={ + "email": "user@email.com", + "first_name": "Jane", + "last_name": "Smith", + "role_id": 1, + "last_updated_comments": "Updated to change which role was assigned", + }) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `request` | [models.UserUpdateRequest](../../models/userupdaterequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.UserResponse](../../models/userresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------- | -------------------------- | -------------------------- | +| models.HTTPValidationError | 422 | application/json | +| models.APIError | 4XX, 5XX | \*/\* | + +## delete + +Delete a user. + +### Example Usage + +```python +import os +from syllable_sdk import SyllableSDK + + +with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), +) as ss_client: + + res = ss_client.users.delete(request={ + "email": "user@email.com", + "reason": "User left the organization", + }) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `request` | [models.UserDeleteRequest](../../models/userdeleterequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[Any](../../models/.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------- | -------------------------- | -------------------------- | +| models.HTTPValidationError | 422 | application/json | +| models.APIError | 4XX, 5XX | \*/\* | + +## users_get_by_email + +Fetch a given user. + +### Example Usage + +```python +import os +from syllable_sdk import SyllableSDK + + +with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), +) as ss_client: + + res = ss_client.users.users_get_by_email(user_email="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `user_email` | *str* | :heavy_check_mark: | N/A | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.UserResponse](../../models/userresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------- | -------------------------- | -------------------------- | +| models.HTTPValidationError | 422 | application/json | +| models.APIError | 4XX, 5XX | \*/\* | + ## users_delete_account -Request Removal Of This Account +Request removal of the account of the user calling this endpoint. Intended for removing trial +accounts. ### Example Usage diff --git a/docs/sdks/v1/README.md b/docs/sdks/v1/README.md index b2921388..7128c8eb 100644 --- a/docs/sdks/v1/README.md +++ b/docs/sdks/v1/README.md @@ -5,11 +5,244 @@ ### Available Operations +* [list](#list) - List Users +* [create](#create) - Create User +* [update](#update) - Update User +* [delete](#delete) - Delete User +* [users_get_by_email](#users_get_by_email) - Get User * [users_delete_account](#users_delete_account) - Request Removal Of This Account +## list + +List the existing users. + +### Example Usage + +```python +import os +import syllable_sdk +from syllable_sdk import SyllableSDK + + +with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), +) as ss_client: + + res = ss_client.v1.list(page=0, search_fields=[ + syllable_sdk.UserProperties.ROLE_ID, + ], search_field_values=[ + "Some Object Name", + ], start_datetime="2023-01-01T00:00:00Z", end_datetime="2024-01-01T00:00:00Z") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `page` | *OptionalNullable[int]* | :heavy_minus_sign: | The page number from which to start (0-based) | 0 | +| `limit` | *Optional[int]* | :heavy_minus_sign: | The maximum number of items to return | 25 | +| `search_fields` | List[[models.UserProperties](../../models/userproperties.md)] | :heavy_minus_sign: | String names of fields to search. Correspond by index to search field values | name | +| `search_field_values` | List[*str*] | :heavy_minus_sign: | Values of fields to search. Correspond by index to search fields. Unless field name contains "list", an individual search field value cannot be a list | Some Object Name | +| `order_by` | [OptionalNullable[models.UserProperties]](../../models/userproperties.md) | :heavy_minus_sign: | The field whose value should be used to order the results | | +| `order_by_direction` | [OptionalNullable[models.OrderByDirection]](../../models/orderbydirection.md) | :heavy_minus_sign: | The direction in which to order the results | | +| `fields` | List[[models.UserProperties](../../models/userproperties.md)] | :heavy_minus_sign: | The fields to include in the response | | +| `start_datetime` | *OptionalNullable[str]* | :heavy_minus_sign: | The start datetime for filtering results | 2023-01-01T00:00:00Z | +| `end_datetime` | *OptionalNullable[str]* | :heavy_minus_sign: | The end datetime for filtering results | 2024-01-01T00:00:00Z | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | + +### Response + +**[models.ListResponseUserResponse](../../models/listresponseuserresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------- | -------------------------- | -------------------------- | +| models.HTTPValidationError | 422 | application/json | +| models.APIError | 4XX, 5XX | \*/\* | + +## create + +Create a new user. + +### Example Usage + +```python +import os +from syllable_sdk import SyllableSDK + + +with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), +) as ss_client: + + res = ss_client.v1.create(request={ + "email": "user@email.com", + "first_name": "Jane", + "last_name": "Smith", + "role_id": 1, + }) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `request` | [models.UserCreateRequest](../../models/usercreaterequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.UserResponse](../../models/userresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------- | -------------------------- | -------------------------- | +| models.HTTPValidationError | 422 | application/json | +| models.APIError | 4XX, 5XX | \*/\* | + +## update + +Update an existing user. + +### Example Usage + +```python +import os +from syllable_sdk import SyllableSDK + + +with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), +) as ss_client: + + res = ss_client.v1.update(request={ + "email": "user@email.com", + "first_name": "Jane", + "last_name": "Smith", + "role_id": 1, + "last_updated_comments": "Updated to change which role was assigned", + }) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `request` | [models.UserUpdateRequest](../../models/userupdaterequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.UserResponse](../../models/userresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------- | -------------------------- | -------------------------- | +| models.HTTPValidationError | 422 | application/json | +| models.APIError | 4XX, 5XX | \*/\* | + +## delete + +Delete a user. + +### Example Usage + +```python +import os +from syllable_sdk import SyllableSDK + + +with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), +) as ss_client: + + res = ss_client.v1.delete(request={ + "email": "user@email.com", + "reason": "User left the organization", + }) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `request` | [models.UserDeleteRequest](../../models/userdeleterequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[Any](../../models/.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------- | -------------------------- | -------------------------- | +| models.HTTPValidationError | 422 | application/json | +| models.APIError | 4XX, 5XX | \*/\* | + +## users_get_by_email + +Fetch a given user. + +### Example Usage + +```python +import os +from syllable_sdk import SyllableSDK + + +with SyllableSDK( + api_key_header=os.getenv("SYLLABLESDK_API_KEY_HEADER", ""), +) as ss_client: + + res = ss_client.v1.users_get_by_email(user_email="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `user_email` | *str* | :heavy_check_mark: | N/A | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.UserResponse](../../models/userresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------- | -------------------------- | -------------------------- | +| models.HTTPValidationError | 422 | application/json | +| models.APIError | 4XX, 5XX | \*/\* | + ## users_delete_account -Request Removal Of This Account +Request removal of the account of the user calling this endpoint. Intended for removing trial +accounts. ### Example Usage diff --git a/openapi.yaml b/openapi.yaml index 25b5c39f..adc55933 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -6338,12 +6338,247 @@ paths: content: "application/json": schema: {"$ref": "#/components/schemas/HTTPValidationError"} + "/api/v1/users/": + get: + tags: + - "users" + - "V1" + summary: "List Users" + description: "List the existing users." + operationId: "users_list" + security: + - APIKeyHeader: [] + parameters: + - name: "page" + in: "query" + required: false + schema: + anyOf: + - type: "integer" + minimum: 0 + - type: "null" + description: "The page number from which to start (0-based)" + examples: + - 0 + default: 0 + title: "Page" + description: "The page number from which to start (0-based)" + - name: "limit" + in: "query" + required: false + schema: + type: "integer" + minimum: 0 + description: "The maximum number of items to return" + examples: + - 25 + default: 25 + title: "Limit" + description: "The maximum number of items to return" + - name: "search_fields" + in: "query" + required: false + schema: + type: "array" + items: {"$ref": "#/components/schemas/UserProperties"} + description: "String names of fields to search. Correspond by index to search field values" + examples: + - "name" + default: [] + title: "Search Fields" + description: "String names of fields to search. Correspond by index to search field values" + - name: "search_field_values" + in: "query" + required: false + schema: + type: "array" + items: + type: "string" + description: "Values of fields to search. Correspond by index to search fields. Unless field name contains \"list\", an individual search field value cannot be a list" + examples: + - "Some Object Name" + default: [] + title: "Search Field Values" + description: "Values of fields to search. Correspond by index to search fields. Unless field name contains \"list\", an individual search field value cannot be a list" + - name: "order_by" + in: "query" + required: false + schema: + anyOf: + - {"$ref": "#/components/schemas/UserProperties"} + - type: "null" + description: "The field whose value should be used to order the results" + examples: + - "name" + title: "Order By" + description: "The field whose value should be used to order the results" + - name: "order_by_direction" + in: "query" + required: false + schema: + anyOf: + - {"$ref": "#/components/schemas/OrderByDirection"} + - type: "null" + description: "The direction in which to order the results" + title: "Order By Direction" + description: "The direction in which to order the results" + - name: "fields" + in: "query" + required: false + schema: + anyOf: + - type: "array" + items: {"$ref": "#/components/schemas/UserProperties"} + - type: "null" + description: "The fields to include in the response" + default: [] + title: "Fields" + description: "The fields to include in the response" + - name: "start_datetime" + in: "query" + required: false + schema: + anyOf: + - type: "string" + - type: "null" + description: "The start datetime for filtering results" + examples: + - "2023-01-01T00:00:00Z" + title: "Start Datetime" + description: "The start datetime for filtering results" + - name: "end_datetime" + in: "query" + required: false + schema: + anyOf: + - type: "string" + - type: "null" + description: "The end datetime for filtering results" + examples: + - "2024-01-01T00:00:00Z" + title: "End Datetime" + description: "The end datetime for filtering results" + responses: + "200": + description: "Successful Response" + content: + "application/json": + schema: {"$ref": "#/components/schemas/ListResponse_UserResponse_"} + "422": + description: "Validation Error" + content: + "application/json": + schema: {"$ref": "#/components/schemas/HTTPValidationError"} + post: + tags: + - "users" + - "V1" + summary: "Create User" + description: "Create a new user." + operationId: "users_create" + security: + - APIKeyHeader: [] + requestBody: + required: true + content: + "application/json": + schema: {"$ref": "#/components/schemas/UserCreateRequest"} + responses: + "200": + description: "Successful Response" + content: + "application/json": + schema: {"$ref": "#/components/schemas/UserResponse"} + "422": + description: "Validation Error" + content: + "application/json": + schema: {"$ref": "#/components/schemas/HTTPValidationError"} + put: + tags: + - "users" + - "V1" + summary: "Update User" + description: "Update an existing user." + operationId: "users_update" + security: + - APIKeyHeader: [] + requestBody: + required: true + content: + "application/json": + schema: {"$ref": "#/components/schemas/UserUpdateRequest"} + responses: + "200": + description: "Successful Response" + content: + "application/json": + schema: {"$ref": "#/components/schemas/UserResponse"} + "422": + description: "Validation Error" + content: + "application/json": + schema: {"$ref": "#/components/schemas/HTTPValidationError"} + delete: + tags: + - "users" + - "V1" + summary: "Delete User" + description: "Delete a user." + operationId: "users_delete" + security: + - APIKeyHeader: [] + requestBody: + required: true + content: + "application/json": + schema: {"$ref": "#/components/schemas/UserDeleteRequest"} + responses: + "200": + description: "Successful Response" + content: + "application/json": + schema: {} + "422": + description: "Validation Error" + content: + "application/json": + schema: {"$ref": "#/components/schemas/HTTPValidationError"} + "/api/v1/users/{user_email}": + get: + tags: + - "users" + - "V1" + summary: "Get User" + description: "Fetch a given user." + operationId: "users_get_by_email" + security: + - APIKeyHeader: [] + parameters: + - name: "user_email" + in: "path" + required: true + schema: + type: "string" + title: "User Email" + responses: + "200": + description: "Successful Response" + content: + "application/json": + schema: {"$ref": "#/components/schemas/UserResponse"} + "422": + description: "Validation Error" + content: + "application/json": + schema: {"$ref": "#/components/schemas/HTTPValidationError"} "/api/v1/users/delete_account": delete: tags: - "users" - "V1" summary: "Request Removal Of This Account" + description: "Request removal of the account of the user calling this endpoint. Intended for removing trial\naccounts." operationId: "users_delete_account" responses: "200": @@ -11512,6 +11747,47 @@ components: - "page" - "page_size" title: "ListResponse[ToolResponse]" + "ListResponse_UserResponse_": + properties: + "items": + items: {"$ref": "#/components/schemas/UserResponse"} + type: "array" + title: "Items" + description: "List of items returned from the query" + "page": + type: "integer" + title: "Page" + description: "The page number of the results (0-based)" + examples: + - 0 + "page_size": + type: "integer" + title: "Page Size" + description: "The number of items returned per page" + examples: + - 25 + "total_pages": + anyOf: + - type: "integer" + - type: "null" + title: "Total Pages" + description: "The total number of pages of results given the indicated page size" + examples: + - 4 + "total_count": + anyOf: + - type: "integer" + - type: "null" + title: "Total Count" + description: "The total number of items returned from the query" + examples: + - 100 + type: "object" + required: + - "items" + - "page" + - "page_size" + title: "ListResponse[UserResponse]" "OrderByDirection": type: "string" enum: @@ -13825,6 +14101,189 @@ components: - "friendly_name" - "trunk_sid" title: "TwilioPhoneNumber" + "UserCreateRequest": + properties: + "email": + type: "string" + title: "Email" + description: "Email address of the user" + examples: + - "user@email.com" + "first_name": + anyOf: + - type: "string" + - type: "null" + title: "First Name" + description: "First name of the user" + examples: + - "Jane" + "last_name": + anyOf: + - type: "string" + - type: "null" + title: "Last Name" + description: "Last name of the user" + examples: + - "Smith" + "role_id": + type: "integer" + title: "Role Id" + description: "ID of the role assigned to the user" + examples: + - 1 + type: "object" + required: + - "email" + - "role_id" + title: "UserCreateRequest" + description: "Request model to create a user." + "UserDeleteRequest": + properties: + "email": + type: "string" + title: "Email" + description: "The email address of the user to delete" + examples: + - "user@email.com" + "reason": + type: "string" + title: "Reason" + description: "The reason for deleting the user" + examples: + - "User left the organization" + type: "object" + required: + - "email" + - "reason" + title: "UserDeleteRequest" + description: "Request model to delete a user." + "UserProperties": + type: "string" + enum: + - "email" + - "first_name" + - "last_name" + - "role_id" + title: "UserProperties" + description: "Names of user fields supported for filtering/sorting on list endpoint." + "UserResponse": + properties: + "email": + type: "string" + title: "Email" + description: "Email address of the user" + examples: + - "user@email.com" + "first_name": + anyOf: + - type: "string" + - type: "null" + title: "First Name" + description: "First name of the user" + examples: + - "Jane" + "last_name": + anyOf: + - type: "string" + - type: "null" + title: "Last Name" + description: "Last name of the user" + examples: + - "Smith" + "role_id": + type: "integer" + title: "Role Id" + description: "ID of the role assigned to the user" + examples: + - 1 + "last_updated_comments": + anyOf: + - type: "string" + - type: "null" + title: "Last Updated Comments" + description: "Comments for the most recent edit to the user." + examples: + - "Updated to change which role was assigned" + "id": + type: "integer" + title: "Id" + description: "Internal ID of the user" + examples: + - 1 + "last_updated": + type: "string" + format: "date-time" + title: "Last Updated" + description: "The timestamp of the most recent update to the user" + "last_updated_by": + anyOf: + - type: "string" + - type: "null" + title: "Last Updated By" + description: "The email address of the user who last updated the user" + examples: + - "admin@email.com" + "last_session_at": + anyOf: + - type: "string" + format: "date-time" + - type: "null" + title: "Last Session At" + description: "The timestamp of the user's last session" + examples: + - "2025-01-01T12:00:00Z" + type: "object" + required: + - "email" + - "role_id" + - "id" + - "last_updated" + title: "UserResponse" + description: "Information about a user." + "UserUpdateRequest": + properties: + "email": + type: "string" + title: "Email" + description: "Email address of the user" + examples: + - "user@email.com" + "first_name": + anyOf: + - type: "string" + - type: "null" + title: "First Name" + description: "First name of the user" + examples: + - "Jane" + "last_name": + anyOf: + - type: "string" + - type: "null" + title: "Last Name" + description: "Last name of the user" + examples: + - "Smith" + "role_id": + type: "integer" + title: "Role Id" + description: "ID of the role assigned to the user" + examples: + - 1 + "last_updated_comments": + anyOf: + - type: "string" + - type: "null" + title: "Last Updated Comments" + description: "Comments for the most recent edit to the user." + examples: + - "Updated to change which role was assigned" + type: "object" + required: + - "email" + - "role_id" + title: "UserUpdateRequest" + description: "Request model to update an existing user." "ValidationError": properties: "loc": diff --git a/pyproject.toml b/pyproject.toml index 3683241b..067c4ab9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "syllable-sdk" -version = "0.35.4" +version = "0.35.5" description = "Python Client SDK Generated by Speakeasy." authors = [{ name = "Syllable" },] readme = "README-PYPI.md" diff --git a/src/syllable_sdk/_version.py b/src/syllable_sdk/_version.py index 3172146c..22eccac7 100644 --- a/src/syllable_sdk/_version.py +++ b/src/syllable_sdk/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "syllable-sdk" -__version__: str = "0.35.4" +__version__: str = "0.35.5" __openapi_doc_version__: str = "0.0.2" __gen_version__: str = "2.618.0" -__user_agent__: str = "speakeasy-sdk/python 0.35.4 2.618.0 0.0.2 syllable-sdk" +__user_agent__: str = "speakeasy-sdk/python 0.35.5 2.618.0 0.0.2 syllable-sdk" try: if __package__ is not None: diff --git a/src/syllable_sdk/models/__init__.py b/src/syllable_sdk/models/__init__.py index 5110667c..dec4fd4a 100644 --- a/src/syllable_sdk/models/__init__.py +++ b/src/syllable_sdk/models/__init__.py @@ -497,6 +497,10 @@ ListResponseToolResponse, ListResponseToolResponseTypedDict, ) + from .listresponse_userresponse_ import ( + ListResponseUserResponse, + ListResponseUserResponseTypedDict, + ) from .orderbydirection import OrderByDirection from .outbound_batch_addop import ( OutboundBatchAddRequest, @@ -747,6 +751,16 @@ TwilioNumberUpdateResponseTypedDict, ) from .twiliophonenumber import TwilioPhoneNumber, TwilioPhoneNumberTypedDict + from .usercreaterequest import UserCreateRequest, UserCreateRequestTypedDict + from .userdeleterequest import UserDeleteRequest, UserDeleteRequestTypedDict + from .userproperties import UserProperties + from .userresponse import UserResponse, UserResponseTypedDict + from .users_get_by_emailop import ( + UsersGetByEmailRequest, + UsersGetByEmailRequestTypedDict, + ) + from .users_listop import UsersListRequest, UsersListRequestTypedDict + from .userupdaterequest import UserUpdateRequest, UserUpdateRequestTypedDict from .validationerror import ( Loc, LocTypedDict, @@ -1092,6 +1106,8 @@ "ListResponseSessionTypedDict", "ListResponseToolResponse", "ListResponseToolResponseTypedDict", + "ListResponseUserResponse", + "ListResponseUserResponseTypedDict", "Loc", "LocTypedDict", "Metadata", @@ -1296,6 +1312,19 @@ "TwilioPhoneNumber", "TwilioPhoneNumberTypedDict", "Type", + "UserCreateRequest", + "UserCreateRequestTypedDict", + "UserDeleteRequest", + "UserDeleteRequestTypedDict", + "UserProperties", + "UserResponse", + "UserResponseTypedDict", + "UserUpdateRequest", + "UserUpdateRequestTypedDict", + "UsersGetByEmailRequest", + "UsersGetByEmailRequestTypedDict", + "UsersListRequest", + "UsersListRequestTypedDict", "ValidationError", "ValidationErrorTypedDict", "VoiceSampleCreateRequest", @@ -1628,6 +1657,8 @@ "ListResponseSessionLabelTypedDict": ".listresponse_sessionlabel_", "ListResponseToolResponse": ".listresponse_toolresponse_", "ListResponseToolResponseTypedDict": ".listresponse_toolresponse_", + "ListResponseUserResponse": ".listresponse_userresponse_", + "ListResponseUserResponseTypedDict": ".listresponse_userresponse_", "OrderByDirection": ".orderbydirection", "OutboundBatchAddRequest": ".outbound_batch_addop", "OutboundBatchAddRequestTypedDict": ".outbound_batch_addop", @@ -1831,6 +1862,19 @@ "TwilioNumberUpdateResponseTypedDict": ".twilionumberupdateresponse", "TwilioPhoneNumber": ".twiliophonenumber", "TwilioPhoneNumberTypedDict": ".twiliophonenumber", + "UserCreateRequest": ".usercreaterequest", + "UserCreateRequestTypedDict": ".usercreaterequest", + "UserDeleteRequest": ".userdeleterequest", + "UserDeleteRequestTypedDict": ".userdeleterequest", + "UserProperties": ".userproperties", + "UserResponse": ".userresponse", + "UserResponseTypedDict": ".userresponse", + "UsersGetByEmailRequest": ".users_get_by_emailop", + "UsersGetByEmailRequestTypedDict": ".users_get_by_emailop", + "UsersListRequest": ".users_listop", + "UsersListRequestTypedDict": ".users_listop", + "UserUpdateRequest": ".userupdaterequest", + "UserUpdateRequestTypedDict": ".userupdaterequest", "Loc": ".validationerror", "LocTypedDict": ".validationerror", "ValidationError": ".validationerror", diff --git a/src/syllable_sdk/models/listresponse_userresponse_.py b/src/syllable_sdk/models/listresponse_userresponse_.py new file mode 100644 index 00000000..a88fede0 --- /dev/null +++ b/src/syllable_sdk/models/listresponse_userresponse_.py @@ -0,0 +1,74 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .userresponse import UserResponse, UserResponseTypedDict +from pydantic import model_serializer +from syllable_sdk.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from typing import List +from typing_extensions import NotRequired, TypedDict + + +class ListResponseUserResponseTypedDict(TypedDict): + items: List[UserResponseTypedDict] + r"""List of items returned from the query""" + page: int + r"""The page number of the results (0-based)""" + page_size: int + r"""The number of items returned per page""" + total_pages: NotRequired[Nullable[int]] + r"""The total number of pages of results given the indicated page size""" + total_count: NotRequired[Nullable[int]] + r"""The total number of items returned from the query""" + + +class ListResponseUserResponse(BaseModel): + items: List[UserResponse] + r"""List of items returned from the query""" + + page: int + r"""The page number of the results (0-based)""" + + page_size: int + r"""The number of items returned per page""" + + total_pages: OptionalNullable[int] = UNSET + r"""The total number of pages of results given the indicated page size""" + + total_count: OptionalNullable[int] = UNSET + r"""The total number of items returned from the query""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = ["total_pages", "total_count"] + nullable_fields = ["total_pages", "total_count"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/syllable_sdk/models/usercreaterequest.py b/src/syllable_sdk/models/usercreaterequest.py new file mode 100644 index 00000000..c5eac7d6 --- /dev/null +++ b/src/syllable_sdk/models/usercreaterequest.py @@ -0,0 +1,71 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from pydantic import model_serializer +from syllable_sdk.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from typing_extensions import NotRequired, TypedDict + + +class UserCreateRequestTypedDict(TypedDict): + r"""Request model to create a user.""" + + email: str + r"""Email address of the user""" + role_id: int + r"""ID of the role assigned to the user""" + first_name: NotRequired[Nullable[str]] + r"""First name of the user""" + last_name: NotRequired[Nullable[str]] + r"""Last name of the user""" + + +class UserCreateRequest(BaseModel): + r"""Request model to create a user.""" + + email: str + r"""Email address of the user""" + + role_id: int + r"""ID of the role assigned to the user""" + + first_name: OptionalNullable[str] = UNSET + r"""First name of the user""" + + last_name: OptionalNullable[str] = UNSET + r"""Last name of the user""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = ["first_name", "last_name"] + nullable_fields = ["first_name", "last_name"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/syllable_sdk/models/userdeleterequest.py b/src/syllable_sdk/models/userdeleterequest.py new file mode 100644 index 00000000..6c40dd9f --- /dev/null +++ b/src/syllable_sdk/models/userdeleterequest.py @@ -0,0 +1,24 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from syllable_sdk.types import BaseModel +from typing_extensions import TypedDict + + +class UserDeleteRequestTypedDict(TypedDict): + r"""Request model to delete a user.""" + + email: str + r"""The email address of the user to delete""" + reason: str + r"""The reason for deleting the user""" + + +class UserDeleteRequest(BaseModel): + r"""Request model to delete a user.""" + + email: str + r"""The email address of the user to delete""" + + reason: str + r"""The reason for deleting the user""" diff --git a/src/syllable_sdk/models/userproperties.py b/src/syllable_sdk/models/userproperties.py new file mode 100644 index 00000000..ac9f7d53 --- /dev/null +++ b/src/syllable_sdk/models/userproperties.py @@ -0,0 +1,13 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum + + +class UserProperties(str, Enum): + r"""Names of user fields supported for filtering/sorting on list endpoint.""" + + EMAIL = "email" + FIRST_NAME = "first_name" + LAST_NAME = "last_name" + ROLE_ID = "role_id" diff --git a/src/syllable_sdk/models/userresponse.py b/src/syllable_sdk/models/userresponse.py new file mode 100644 index 00000000..77616ff8 --- /dev/null +++ b/src/syllable_sdk/models/userresponse.py @@ -0,0 +1,109 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from datetime import datetime +from pydantic import model_serializer +from syllable_sdk.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from typing_extensions import NotRequired, TypedDict + + +class UserResponseTypedDict(TypedDict): + r"""Information about a user.""" + + email: str + r"""Email address of the user""" + role_id: int + r"""ID of the role assigned to the user""" + id: int + r"""Internal ID of the user""" + last_updated: datetime + r"""The timestamp of the most recent update to the user""" + first_name: NotRequired[Nullable[str]] + r"""First name of the user""" + last_name: NotRequired[Nullable[str]] + r"""Last name of the user""" + last_updated_comments: NotRequired[Nullable[str]] + r"""Comments for the most recent edit to the user.""" + last_updated_by: NotRequired[Nullable[str]] + r"""The email address of the user who last updated the user""" + last_session_at: NotRequired[Nullable[datetime]] + r"""The timestamp of the user's last session""" + + +class UserResponse(BaseModel): + r"""Information about a user.""" + + email: str + r"""Email address of the user""" + + role_id: int + r"""ID of the role assigned to the user""" + + id: int + r"""Internal ID of the user""" + + last_updated: datetime + r"""The timestamp of the most recent update to the user""" + + first_name: OptionalNullable[str] = UNSET + r"""First name of the user""" + + last_name: OptionalNullable[str] = UNSET + r"""Last name of the user""" + + last_updated_comments: OptionalNullable[str] = UNSET + r"""Comments for the most recent edit to the user.""" + + last_updated_by: OptionalNullable[str] = UNSET + r"""The email address of the user who last updated the user""" + + last_session_at: OptionalNullable[datetime] = UNSET + r"""The timestamp of the user's last session""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = [ + "first_name", + "last_name", + "last_updated_comments", + "last_updated_by", + "last_session_at", + ] + nullable_fields = [ + "first_name", + "last_name", + "last_updated_comments", + "last_updated_by", + "last_session_at", + ] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/syllable_sdk/models/users_get_by_emailop.py b/src/syllable_sdk/models/users_get_by_emailop.py new file mode 100644 index 00000000..4b7f9b9f --- /dev/null +++ b/src/syllable_sdk/models/users_get_by_emailop.py @@ -0,0 +1,16 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from syllable_sdk.types import BaseModel +from syllable_sdk.utils import FieldMetadata, PathParamMetadata +from typing_extensions import Annotated, TypedDict + + +class UsersGetByEmailRequestTypedDict(TypedDict): + user_email: str + + +class UsersGetByEmailRequest(BaseModel): + user_email: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] diff --git a/src/syllable_sdk/models/users_listop.py b/src/syllable_sdk/models/users_listop.py new file mode 100644 index 00000000..6cb73735 --- /dev/null +++ b/src/syllable_sdk/models/users_listop.py @@ -0,0 +1,140 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .orderbydirection import OrderByDirection +from .userproperties import UserProperties +from pydantic import model_serializer +from syllable_sdk.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from syllable_sdk.utils import FieldMetadata, QueryParamMetadata +from typing import List, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class UsersListRequestTypedDict(TypedDict): + page: NotRequired[Nullable[int]] + r"""The page number from which to start (0-based)""" + limit: NotRequired[int] + r"""The maximum number of items to return""" + search_fields: NotRequired[List[UserProperties]] + r"""String names of fields to search. Correspond by index to search field values""" + search_field_values: NotRequired[List[str]] + r"""Values of fields to search. Correspond by index to search fields. Unless field name contains \"list\", an individual search field value cannot be a list""" + order_by: NotRequired[Nullable[UserProperties]] + r"""The field whose value should be used to order the results""" + order_by_direction: NotRequired[Nullable[OrderByDirection]] + r"""The direction in which to order the results""" + fields: NotRequired[Nullable[List[UserProperties]]] + r"""The fields to include in the response""" + start_datetime: NotRequired[Nullable[str]] + r"""The start datetime for filtering results""" + end_datetime: NotRequired[Nullable[str]] + r"""The end datetime for filtering results""" + + +class UsersListRequest(BaseModel): + page: Annotated[ + OptionalNullable[int], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = UNSET + r"""The page number from which to start (0-based)""" + + limit: Annotated[ + Optional[int], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = 25 + r"""The maximum number of items to return""" + + search_fields: Annotated[ + Optional[List[UserProperties]], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""String names of fields to search. Correspond by index to search field values""" + + search_field_values: Annotated[ + Optional[List[str]], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Values of fields to search. Correspond by index to search fields. Unless field name contains \"list\", an individual search field value cannot be a list""" + + order_by: Annotated[ + OptionalNullable[UserProperties], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = UNSET + r"""The field whose value should be used to order the results""" + + order_by_direction: Annotated[ + OptionalNullable[OrderByDirection], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = UNSET + r"""The direction in which to order the results""" + + fields: Annotated[ + OptionalNullable[List[UserProperties]], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = UNSET + r"""The fields to include in the response""" + + start_datetime: Annotated[ + OptionalNullable[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = UNSET + r"""The start datetime for filtering results""" + + end_datetime: Annotated[ + OptionalNullable[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = UNSET + r"""The end datetime for filtering results""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = [ + "page", + "limit", + "search_fields", + "search_field_values", + "order_by", + "order_by_direction", + "fields", + "start_datetime", + "end_datetime", + ] + nullable_fields = [ + "page", + "order_by", + "order_by_direction", + "fields", + "start_datetime", + "end_datetime", + ] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/syllable_sdk/models/userupdaterequest.py b/src/syllable_sdk/models/userupdaterequest.py new file mode 100644 index 00000000..dbf7fe1f --- /dev/null +++ b/src/syllable_sdk/models/userupdaterequest.py @@ -0,0 +1,76 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from pydantic import model_serializer +from syllable_sdk.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from typing_extensions import NotRequired, TypedDict + + +class UserUpdateRequestTypedDict(TypedDict): + r"""Request model to update an existing user.""" + + email: str + r"""Email address of the user""" + role_id: int + r"""ID of the role assigned to the user""" + first_name: NotRequired[Nullable[str]] + r"""First name of the user""" + last_name: NotRequired[Nullable[str]] + r"""Last name of the user""" + last_updated_comments: NotRequired[Nullable[str]] + r"""Comments for the most recent edit to the user.""" + + +class UserUpdateRequest(BaseModel): + r"""Request model to update an existing user.""" + + email: str + r"""Email address of the user""" + + role_id: int + r"""ID of the role assigned to the user""" + + first_name: OptionalNullable[str] = UNSET + r"""First name of the user""" + + last_name: OptionalNullable[str] = UNSET + r"""Last name of the user""" + + last_updated_comments: OptionalNullable[str] = UNSET + r"""Comments for the most recent edit to the user.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = ["first_name", "last_name", "last_updated_comments"] + nullable_fields = ["first_name", "last_name", "last_updated_comments"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/syllable_sdk/users.py b/src/syllable_sdk/users.py index 8249572e..0e49724f 100644 --- a/src/syllable_sdk/users.py +++ b/src/syllable_sdk/users.py @@ -3,12 +3,1078 @@ from .basesdk import BaseSDK from syllable_sdk import models, utils from syllable_sdk._hooks import HookContext -from syllable_sdk.types import OptionalNullable, UNSET +from syllable_sdk.types import BaseModel, OptionalNullable, UNSET from syllable_sdk.utils import get_security_from_env -from typing import Any, Mapping, Optional +from typing import Any, List, Mapping, Optional, Union, cast class Users(BaseSDK): + def list( + self, + *, + page: OptionalNullable[int] = UNSET, + limit: Optional[int] = 25, + search_fields: Optional[List[models.UserProperties]] = None, + search_field_values: Optional[List[str]] = None, + order_by: OptionalNullable[models.UserProperties] = UNSET, + order_by_direction: OptionalNullable[models.OrderByDirection] = UNSET, + fields: OptionalNullable[List[models.UserProperties]] = UNSET, + start_datetime: OptionalNullable[str] = UNSET, + end_datetime: OptionalNullable[str] = UNSET, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.ListResponseUserResponse: + r"""List Users + + List the existing users. + + :param page: The page number from which to start (0-based) + :param limit: The maximum number of items to return + :param search_fields: String names of fields to search. Correspond by index to search field values + :param search_field_values: Values of fields to search. Correspond by index to search fields. Unless field name contains \"list\", an individual search field value cannot be a list + :param order_by: The field whose value should be used to order the results + :param order_by_direction: The direction in which to order the results + :param fields: The fields to include in the response + :param start_datetime: The start datetime for filtering results + :param end_datetime: The end datetime for filtering results + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.UsersListRequest( + page=page, + limit=limit, + search_fields=search_fields, + search_field_values=search_field_values, + order_by=order_by, + order_by_direction=order_by_direction, + fields=fields, + start_datetime=start_datetime, + end_datetime=end_datetime, + ) + + req = self._build_request( + method="GET", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_list", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.ListResponseUserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + async def list_async( + self, + *, + page: OptionalNullable[int] = UNSET, + limit: Optional[int] = 25, + search_fields: Optional[List[models.UserProperties]] = None, + search_field_values: Optional[List[str]] = None, + order_by: OptionalNullable[models.UserProperties] = UNSET, + order_by_direction: OptionalNullable[models.OrderByDirection] = UNSET, + fields: OptionalNullable[List[models.UserProperties]] = UNSET, + start_datetime: OptionalNullable[str] = UNSET, + end_datetime: OptionalNullable[str] = UNSET, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.ListResponseUserResponse: + r"""List Users + + List the existing users. + + :param page: The page number from which to start (0-based) + :param limit: The maximum number of items to return + :param search_fields: String names of fields to search. Correspond by index to search field values + :param search_field_values: Values of fields to search. Correspond by index to search fields. Unless field name contains \"list\", an individual search field value cannot be a list + :param order_by: The field whose value should be used to order the results + :param order_by_direction: The direction in which to order the results + :param fields: The fields to include in the response + :param start_datetime: The start datetime for filtering results + :param end_datetime: The end datetime for filtering results + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.UsersListRequest( + page=page, + limit=limit, + search_fields=search_fields, + search_field_values=search_field_values, + order_by=order_by, + order_by_direction=order_by_direction, + fields=fields, + start_datetime=start_datetime, + end_datetime=end_datetime, + ) + + req = self._build_request_async( + method="GET", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_list", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.ListResponseUserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + def create( + self, + *, + request: Union[models.UserCreateRequest, models.UserCreateRequestTypedDict], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.UserResponse: + r"""Create User + + Create a new user. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.UserCreateRequest) + request = cast(models.UserCreateRequest, request) + + req = self._build_request( + method="POST", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.UserCreateRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_create", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.UserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + async def create_async( + self, + *, + request: Union[models.UserCreateRequest, models.UserCreateRequestTypedDict], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.UserResponse: + r"""Create User + + Create a new user. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.UserCreateRequest) + request = cast(models.UserCreateRequest, request) + + req = self._build_request_async( + method="POST", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.UserCreateRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_create", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.UserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + def update( + self, + *, + request: Union[models.UserUpdateRequest, models.UserUpdateRequestTypedDict], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.UserResponse: + r"""Update User + + Update an existing user. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.UserUpdateRequest) + request = cast(models.UserUpdateRequest, request) + + req = self._build_request( + method="PUT", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.UserUpdateRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_update", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.UserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + async def update_async( + self, + *, + request: Union[models.UserUpdateRequest, models.UserUpdateRequestTypedDict], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.UserResponse: + r"""Update User + + Update an existing user. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.UserUpdateRequest) + request = cast(models.UserUpdateRequest, request) + + req = self._build_request_async( + method="PUT", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.UserUpdateRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_update", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.UserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + def delete( + self, + *, + request: Union[models.UserDeleteRequest, models.UserDeleteRequestTypedDict], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> Any: + r"""Delete User + + Delete a user. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.UserDeleteRequest) + request = cast(models.UserDeleteRequest, request) + + req = self._build_request( + method="DELETE", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.UserDeleteRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_delete", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, Any) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + async def delete_async( + self, + *, + request: Union[models.UserDeleteRequest, models.UserDeleteRequestTypedDict], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> Any: + r"""Delete User + + Delete a user. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.UserDeleteRequest) + request = cast(models.UserDeleteRequest, request) + + req = self._build_request_async( + method="DELETE", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.UserDeleteRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_delete", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, Any) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + def users_get_by_email( + self, + *, + user_email: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.UserResponse: + r"""Get User + + Fetch a given user. + + :param user_email: + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.UsersGetByEmailRequest( + user_email=user_email, + ) + + req = self._build_request( + method="GET", + path="/api/v1/users/{user_email}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_get_by_email", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.UserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + async def users_get_by_email_async( + self, + *, + user_email: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.UserResponse: + r"""Get User + + Fetch a given user. + + :param user_email: + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.UsersGetByEmailRequest( + user_email=user_email, + ) + + req = self._build_request_async( + method="GET", + path="/api/v1/users/{user_email}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_get_by_email", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.UserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + def users_delete_account( self, *, @@ -19,6 +1085,9 @@ def users_delete_account( ) -> Any: r"""Request Removal Of This Account + Request removal of the account of the user calling this endpoint. Intended for removing trial + accounts. + :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -104,6 +1173,9 @@ async def users_delete_account_async( ) -> Any: r"""Request Removal Of This Account + Request removal of the account of the user calling this endpoint. Intended for removing trial + accounts. + :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds diff --git a/src/syllable_sdk/v1.py b/src/syllable_sdk/v1.py index 7189c281..566b08ad 100644 --- a/src/syllable_sdk/v1.py +++ b/src/syllable_sdk/v1.py @@ -3,12 +3,1078 @@ from .basesdk import BaseSDK from syllable_sdk import models, utils from syllable_sdk._hooks import HookContext -from syllable_sdk.types import OptionalNullable, UNSET +from syllable_sdk.types import BaseModel, OptionalNullable, UNSET from syllable_sdk.utils import get_security_from_env -from typing import Any, Mapping, Optional +from typing import Any, List, Mapping, Optional, Union, cast class V1(BaseSDK): + def list( + self, + *, + page: OptionalNullable[int] = UNSET, + limit: Optional[int] = 25, + search_fields: Optional[List[models.UserProperties]] = None, + search_field_values: Optional[List[str]] = None, + order_by: OptionalNullable[models.UserProperties] = UNSET, + order_by_direction: OptionalNullable[models.OrderByDirection] = UNSET, + fields: OptionalNullable[List[models.UserProperties]] = UNSET, + start_datetime: OptionalNullable[str] = UNSET, + end_datetime: OptionalNullable[str] = UNSET, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.ListResponseUserResponse: + r"""List Users + + List the existing users. + + :param page: The page number from which to start (0-based) + :param limit: The maximum number of items to return + :param search_fields: String names of fields to search. Correspond by index to search field values + :param search_field_values: Values of fields to search. Correspond by index to search fields. Unless field name contains \"list\", an individual search field value cannot be a list + :param order_by: The field whose value should be used to order the results + :param order_by_direction: The direction in which to order the results + :param fields: The fields to include in the response + :param start_datetime: The start datetime for filtering results + :param end_datetime: The end datetime for filtering results + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.UsersListRequest( + page=page, + limit=limit, + search_fields=search_fields, + search_field_values=search_field_values, + order_by=order_by, + order_by_direction=order_by_direction, + fields=fields, + start_datetime=start_datetime, + end_datetime=end_datetime, + ) + + req = self._build_request( + method="GET", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_list", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.ListResponseUserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + async def list_async( + self, + *, + page: OptionalNullable[int] = UNSET, + limit: Optional[int] = 25, + search_fields: Optional[List[models.UserProperties]] = None, + search_field_values: Optional[List[str]] = None, + order_by: OptionalNullable[models.UserProperties] = UNSET, + order_by_direction: OptionalNullable[models.OrderByDirection] = UNSET, + fields: OptionalNullable[List[models.UserProperties]] = UNSET, + start_datetime: OptionalNullable[str] = UNSET, + end_datetime: OptionalNullable[str] = UNSET, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.ListResponseUserResponse: + r"""List Users + + List the existing users. + + :param page: The page number from which to start (0-based) + :param limit: The maximum number of items to return + :param search_fields: String names of fields to search. Correspond by index to search field values + :param search_field_values: Values of fields to search. Correspond by index to search fields. Unless field name contains \"list\", an individual search field value cannot be a list + :param order_by: The field whose value should be used to order the results + :param order_by_direction: The direction in which to order the results + :param fields: The fields to include in the response + :param start_datetime: The start datetime for filtering results + :param end_datetime: The end datetime for filtering results + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.UsersListRequest( + page=page, + limit=limit, + search_fields=search_fields, + search_field_values=search_field_values, + order_by=order_by, + order_by_direction=order_by_direction, + fields=fields, + start_datetime=start_datetime, + end_datetime=end_datetime, + ) + + req = self._build_request_async( + method="GET", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_list", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.ListResponseUserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + def create( + self, + *, + request: Union[models.UserCreateRequest, models.UserCreateRequestTypedDict], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.UserResponse: + r"""Create User + + Create a new user. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.UserCreateRequest) + request = cast(models.UserCreateRequest, request) + + req = self._build_request( + method="POST", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.UserCreateRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_create", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.UserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + async def create_async( + self, + *, + request: Union[models.UserCreateRequest, models.UserCreateRequestTypedDict], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.UserResponse: + r"""Create User + + Create a new user. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.UserCreateRequest) + request = cast(models.UserCreateRequest, request) + + req = self._build_request_async( + method="POST", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.UserCreateRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_create", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.UserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + def update( + self, + *, + request: Union[models.UserUpdateRequest, models.UserUpdateRequestTypedDict], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.UserResponse: + r"""Update User + + Update an existing user. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.UserUpdateRequest) + request = cast(models.UserUpdateRequest, request) + + req = self._build_request( + method="PUT", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.UserUpdateRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_update", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.UserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + async def update_async( + self, + *, + request: Union[models.UserUpdateRequest, models.UserUpdateRequestTypedDict], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.UserResponse: + r"""Update User + + Update an existing user. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.UserUpdateRequest) + request = cast(models.UserUpdateRequest, request) + + req = self._build_request_async( + method="PUT", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.UserUpdateRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_update", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.UserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + def delete( + self, + *, + request: Union[models.UserDeleteRequest, models.UserDeleteRequestTypedDict], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> Any: + r"""Delete User + + Delete a user. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.UserDeleteRequest) + request = cast(models.UserDeleteRequest, request) + + req = self._build_request( + method="DELETE", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.UserDeleteRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_delete", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, Any) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + async def delete_async( + self, + *, + request: Union[models.UserDeleteRequest, models.UserDeleteRequestTypedDict], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> Any: + r"""Delete User + + Delete a user. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.UserDeleteRequest) + request = cast(models.UserDeleteRequest, request) + + req = self._build_request_async( + method="DELETE", + path="/api/v1/users/", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.UserDeleteRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_delete", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, Any) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + def users_get_by_email( + self, + *, + user_email: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.UserResponse: + r"""Get User + + Fetch a given user. + + :param user_email: + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.UsersGetByEmailRequest( + user_email=user_email, + ) + + req = self._build_request( + method="GET", + path="/api/v1/users/{user_email}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_get_by_email", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.UserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + async def users_get_by_email_async( + self, + *, + user_email: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.UserResponse: + r"""Get User + + Fetch a given user. + + :param user_email: + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.UsersGetByEmailRequest( + user_email=user_email, + ) + + req = self._build_request_async( + method="GET", + path="/api/v1/users/{user_email}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="users_get_by_email", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return utils.unmarshal_json(http_res.text, models.UserResponse) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.HTTPValidationErrorData + ) + raise models.HTTPValidationError(data=response_data) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + def users_delete_account( self, *, @@ -19,6 +1085,9 @@ def users_delete_account( ) -> Any: r"""Request Removal Of This Account + Request removal of the account of the user calling this endpoint. Intended for removing trial + accounts. + :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -104,6 +1173,9 @@ async def users_delete_account_async( ) -> Any: r"""Request Removal Of This Account + Request removal of the account of the user calling this endpoint. Intended for removing trial + accounts. + :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds