From a78352b8daf9fa0186caa427189c1a5e28d7e5ac Mon Sep 17 00:00:00 2001 From: junkai-roe-ai <193960677+junkai-roe-ai@users.noreply.github.com> Date: Wed, 10 Jun 2026 18:30:51 +0000 Subject: [PATCH 1/6] Release v1.0.804 --- .roe-main-release-version | 1 + openapi/openapi.yml | 1074 ++++++++++++++++- pyproject.toml | 2 +- .../api/agents/agents_versions_create.py | 22 +- .../_generated/api/connections/__init__.py | 1 + .../api/connections/connections_create.py | 224 ++++ .../api/connections/connections_destroy.py | 135 +++ .../api/connections/connections_list.py | 244 ++++ .../connections/connections_partial_update.py | 267 ++++ .../api/connections/connections_retrieve.py | 197 +++ .../connections/connections_test_create.py | 208 ++++ .../connections_test_credentials_create.py | 190 +++ .../api/connections/connections_update.py | 229 ++++ src/roe/_generated/api/connectors/__init__.py | 1 + .../api/connectors/connectors_retrieve.py | 150 +++ .../api/connectors/connectors_retrieve_2.py | 171 +++ .../api/tables/tables_describe_retrieve.py | 199 +++ .../_generated/api/tables/tables_destroy.py | 191 +++ src/roe/_generated/api/tables/tables_list.py | 166 +++ .../api/tables/tables_preview_retrieve.py | 217 ++++ .../api/tables/tables_query_create.py | 187 +++ .../tables/tables_query_result_retrieve.py | 180 +++ src/roe/_generated/models/__init__.py | 70 ++ .../models/agent_version_create_request.py | 34 +- .../models/base_agent_create_request.py | 53 +- src/roe/_generated/models/connection.py | 215 ++++ .../models/connection_auth_config.py | 65 + src/roe/_generated/models/connection_list.py | 198 +++ .../_generated/models/connection_request.py | 141 +++ .../models/connector_list_response.py | 94 ++ .../_generated/models/connector_metadata.py | 149 +++ .../_generated/models/connector_type_enum.py | 21 + .../models/create_connection_request.py | 186 +++ .../create_connection_request_auth_config.py | 65 + .../create_connection_request_config.py | 65 + .../models/duplicate_connection_existing.py | 89 ++ .../models/duplicate_connection_response.py | 94 ++ .../models/paginated_connection_list_list.py | 145 +++ .../patched_update_connection_request.py | 146 +++ ...d_update_connection_request_auth_config.py | 65 + ...atched_update_connection_request_config.py | 65 + src/roe/_generated/models/status_enum.py | 8 + src/roe/_generated/models/table.py | 103 ++ src/roe/_generated/models/table_column.py | 85 ++ .../models/table_describe_response.py | 148 +++ .../_generated/models/table_list_response.py | 103 ++ .../models/table_preview_response.py | 135 +++ .../table_preview_response_rows_item.py | 65 + .../models/table_query_request_request.py | 87 ++ .../models/table_query_result_response.py | 202 ++++ ...able_query_result_response_columns_item.py | 65 + .../table_query_result_response_rows_item.py | 65 + .../models/table_query_submit_response.py | 103 ++ .../_generated/models/table_upload_request.py | 3 +- src/roe/_generated/models/test_connection.py | 99 ++ .../test_connection_credentials_request.py | 134 ++ ...nection_credentials_request_auth_config.py | 65 + ...t_connection_credentials_request_config.py | 65 + .../_generated/models/update_connection.py | 146 +++ .../models/update_connection_auth_config.py | 65 + .../models/update_connection_config.py | 65 + uv.lock | 2 +- 62 files changed, 7950 insertions(+), 79 deletions(-) create mode 100644 .roe-main-release-version create mode 100644 src/roe/_generated/api/connections/__init__.py create mode 100644 src/roe/_generated/api/connections/connections_create.py create mode 100644 src/roe/_generated/api/connections/connections_destroy.py create mode 100644 src/roe/_generated/api/connections/connections_list.py create mode 100644 src/roe/_generated/api/connections/connections_partial_update.py create mode 100644 src/roe/_generated/api/connections/connections_retrieve.py create mode 100644 src/roe/_generated/api/connections/connections_test_create.py create mode 100644 src/roe/_generated/api/connections/connections_test_credentials_create.py create mode 100644 src/roe/_generated/api/connections/connections_update.py create mode 100644 src/roe/_generated/api/connectors/__init__.py create mode 100644 src/roe/_generated/api/connectors/connectors_retrieve.py create mode 100644 src/roe/_generated/api/connectors/connectors_retrieve_2.py create mode 100644 src/roe/_generated/api/tables/tables_describe_retrieve.py create mode 100644 src/roe/_generated/api/tables/tables_destroy.py create mode 100644 src/roe/_generated/api/tables/tables_list.py create mode 100644 src/roe/_generated/api/tables/tables_preview_retrieve.py create mode 100644 src/roe/_generated/api/tables/tables_query_create.py create mode 100644 src/roe/_generated/api/tables/tables_query_result_retrieve.py create mode 100644 src/roe/_generated/models/connection.py create mode 100644 src/roe/_generated/models/connection_auth_config.py create mode 100644 src/roe/_generated/models/connection_list.py create mode 100644 src/roe/_generated/models/connection_request.py create mode 100644 src/roe/_generated/models/connector_list_response.py create mode 100644 src/roe/_generated/models/connector_metadata.py create mode 100644 src/roe/_generated/models/connector_type_enum.py create mode 100644 src/roe/_generated/models/create_connection_request.py create mode 100644 src/roe/_generated/models/create_connection_request_auth_config.py create mode 100644 src/roe/_generated/models/create_connection_request_config.py create mode 100644 src/roe/_generated/models/duplicate_connection_existing.py create mode 100644 src/roe/_generated/models/duplicate_connection_response.py create mode 100644 src/roe/_generated/models/paginated_connection_list_list.py create mode 100644 src/roe/_generated/models/patched_update_connection_request.py create mode 100644 src/roe/_generated/models/patched_update_connection_request_auth_config.py create mode 100644 src/roe/_generated/models/patched_update_connection_request_config.py create mode 100644 src/roe/_generated/models/status_enum.py create mode 100644 src/roe/_generated/models/table.py create mode 100644 src/roe/_generated/models/table_column.py create mode 100644 src/roe/_generated/models/table_describe_response.py create mode 100644 src/roe/_generated/models/table_list_response.py create mode 100644 src/roe/_generated/models/table_preview_response.py create mode 100644 src/roe/_generated/models/table_preview_response_rows_item.py create mode 100644 src/roe/_generated/models/table_query_request_request.py create mode 100644 src/roe/_generated/models/table_query_result_response.py create mode 100644 src/roe/_generated/models/table_query_result_response_columns_item.py create mode 100644 src/roe/_generated/models/table_query_result_response_rows_item.py create mode 100644 src/roe/_generated/models/table_query_submit_response.py create mode 100644 src/roe/_generated/models/test_connection.py create mode 100644 src/roe/_generated/models/test_connection_credentials_request.py create mode 100644 src/roe/_generated/models/test_connection_credentials_request_auth_config.py create mode 100644 src/roe/_generated/models/test_connection_credentials_request_config.py create mode 100644 src/roe/_generated/models/update_connection.py create mode 100644 src/roe/_generated/models/update_connection_auth_config.py create mode 100644 src/roe/_generated/models/update_connection_config.py diff --git a/.roe-main-release-version b/.roe-main-release-version new file mode 100644 index 0000000..a9038d5 --- /dev/null +++ b/.roe-main-release-version @@ -0,0 +1 @@ +1-0-83 diff --git a/openapi/openapi.yml b/openapi/openapi.yml index e0e8a83..43e7511 100644 --- a/openapi/openapi.yml +++ b/openapi/openapi.yml @@ -523,7 +523,6 @@ paths: application/json: schema: $ref: '#/components/schemas/AgentVersionCreateRequest' - required: true responses: '201': content: @@ -821,7 +820,7 @@ paths: last_name: Doe created_at: '2024-01-15T10:30:00Z' description: Current version of the agent - engine_class_id: TextExtractionEngine + engine_class_id: MultimodalExtractionEngine input_definitions: - key: text data_type: text/plain @@ -848,10 +847,10 @@ paths: disable_cache: false cache_failed_jobs: false organization: f3268066-4185-4353-8e0d-8089c759610c - engine_class_id: TextExtractionEngine + engine_class_id: MultimodalExtractionEngine current_version_id: 456e7890-e89b-12d3-a456-426614174001 - engine_name: Text Insights - engine_name: Text Insights + engine_name: Multimodal Extraction + engine_name: Multimodal Extraction description: Successfully retrieved current agent version details. '403': content: @@ -1664,6 +1663,313 @@ paths: schema: $ref: '#/components/schemas/AgentEngineTypeList' description: '' + /v1/connections/: + get: + operationId: connections_list + description: 'Public API: GET/POST /api/v1/connections/ - List/create connections.' + parameters: + - in: query + name: connector_type + schema: + type: string + description: Filter by connector type (e.g., 'snowflake', 'postgres') + - in: query + name: organization_id + schema: + type: string + format: uuid + description: Organization ID to list connections from. Required for JWT auth; + inferred from API key when using an Organization API Key. + - name: page + required: false + in: query + description: A page number within the paginated result set. + schema: + type: integer + - name: page_size + required: false + in: query + description: Number of results to return per page. + schema: + type: integer + - in: query + name: search + schema: + type: string + description: Search connections by name, description, or ID (case-insensitive) + tags: + - connections + - sdk + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedConnectionListList' + description: '' + post: + operationId: connections_create + description: 'Public API: GET/POST /api/v1/connections/ - List/create connections.' + tags: + - connections + - sdk + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateConnectionRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/Connection' + description: '' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + description: Name collision in this organization. + '409': + content: + application/json: + schema: + $ref: '#/components/schemas/DuplicateConnectionResponse' + description: A strict-identity duplicate of this connection already exists + in this organization (same connector_type, config, and auth credentials). + parameters: + - name: organization_id + in: query + required: false + schema: + type: string + format: uuid + description: Organization ID. This is required for access control. It can + be provided via query or request body depending on the endpoint. + /v1/connections/{id}/: + get: + operationId: connections_retrieve + description: 'Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage + connection.' + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - name: organization_id + in: query + required: false + schema: + type: string + format: uuid + description: Organization ID. This is required for access control. It can + be provided via query or request body depending on the endpoint. + tags: + - connections + - sdk + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Connection' + description: '' + put: + operationId: connections_update + description: 'Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage + connection.' + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - name: organization_id + in: query + required: false + schema: + type: string + format: uuid + description: Organization ID. This is required for access control. It can + be provided via query or request body depending on the endpoint. + tags: + - connections + - sdk + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ConnectionRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Connection' + description: '' + patch: + operationId: connections_partial_update + description: 'Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage + connection.' + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - name: organization_id + in: query + required: false + schema: + type: string + format: uuid + description: Organization ID. This is required for access control. It can + be provided via query or request body depending on the endpoint. + tags: + - connections + - sdk + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedUpdateConnectionRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateConnection' + description: '' + delete: + operationId: connections_destroy + description: 'Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage + connection.' + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - name: organization_id + in: query + required: false + schema: + type: string + format: uuid + description: Organization ID. This is required for access control. It can + be provided via query or request body depending on the endpoint. + tags: + - connections + - sdk + responses: + '204': + description: No response body + /v1/connections/{id}/test/: + post: + operationId: connections_test_create + description: 'Public API: POST /api/v1/connections/{id}/test/ - Test connection.' + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + - name: organization_id + in: query + required: false + schema: + type: string + format: uuid + description: Organization ID. This is required for access control. It can + be provided via query or request body depending on the endpoint. + tags: + - connections + - sdk + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TestConnection' + description: '' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/TestConnection' + description: Connection test failed. + '404': + description: Connection not found. + /v1/connections/test-credentials/: + post: + operationId: connections_test_credentials_create + description: Test credentials without storing them. + tags: + - connections + - sdk + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TestConnectionCredentialsRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TestConnection' + description: '' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/TestConnection' + description: Missing connector_type or credential validation failed. + /v1/connectors/: + get: + operationId: connectors_retrieve + description: 'Public API: GET /api/v1/connectors/ - List all connector types.' + tags: + - connectors + - sdk + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ConnectorListResponse' + description: '' + /v1/connectors/{connector_type}/: + get: + operationId: connectors_retrieve_2 + description: 'Public API: GET /api/v1/connectors/{connector_type}/ - Get connector + details.' + parameters: + - in: path + name: connector_type + schema: + type: string + required: true + tags: + - connectors + - sdk + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ConnectorMetadata' + description: '' /v1/policies/: get: operationId: policies_list @@ -1973,28 +2279,20 @@ paths: schema: $ref: '#/components/schemas/PolicyVersion' description: '' - /v1/tables/upload/: - post: - operationId: upload_table - description: Create a Roe table in the authenticated organization from an uploaded - CSV file. Organization API keys are scoped to one organization; if organization_id - is supplied, it must match that organization. - summary: Upload a CSV as a Roe table + /v1/tables/: + get: + operationId: tables_list + description: List Roe tables in the authenticated organization with column information. + summary: List Roe tables tags: - tables - sdk - requestBody: - content: - multipart/form-data: - schema: - $ref: '#/components/schemas/TableUploadRequest' - required: true responses: - '201': + '200': content: application/json: schema: - $ref: '#/components/schemas/TableUploadResponse' + $ref: '#/components/schemas/TableListResponse' description: '' '400': content: @@ -2002,7 +2300,175 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' description: Bad request - /v1/users/current_user/: + /v1/tables/{table_name}/: + delete: + operationId: tables_destroy + description: Permanently drop one Roe table from the authenticated organization + and remove table-link metadata that references it. + summary: Delete a Roe table + parameters: + - in: path + name: table_name + schema: + type: string + required: true + tags: + - tables + - sdk + responses: + '204': + description: No response body + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + description: Bad request + '404': + description: Table not found + /v1/tables/{table_name}/describe/: + get: + operationId: tables_describe_retrieve + description: Return table metadata only for one Roe table in the authenticated + organization, including columns and cheap ClickHouse metadata such as row + count and the latest metadata-modification timestamp when available. + summary: Describe a Roe table + parameters: + - in: path + name: table_name + schema: + type: string + required: true + tags: + - tables + - sdk + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TableDescribeResponse' + description: '' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + description: Bad request + '404': + description: Table not found + /v1/tables/{table_name}/preview/: + get: + operationId: tables_preview_retrieve + description: Return column metadata plus a bounded sample of rows from one Roe + table in the authenticated organization. + summary: Preview a Roe table + parameters: + - in: query + name: limit + schema: + type: integer + maximum: 50 + minimum: 0 + default: 3 + description: Maximum number of sample rows to return. Use 0 to return only + table and column metadata without reading sample rows. + - in: path + name: table_name + schema: + type: string + required: true + tags: + - tables + - sdk + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TablePreviewResponse' + description: '' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + description: Bad request + '404': + description: Table not found + /v1/tables/query/: + post: + operationId: tables_query_create + description: Run a read-only SQL query over public Roe tables. + summary: Run a read-only Roe table query + tags: + - tables + - sdk + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TableQueryRequestRequest' + required: true + responses: + '202': + content: + application/json: + schema: + $ref: '#/components/schemas/TableQuerySubmitResponse' + description: '' + /v1/tables/query/{table_query_id}/result/: + get: + operationId: tables_query_result_retrieve + description: Poll or fetch one public Roe table query result. + summary: Get a Roe table query result + parameters: + - in: path + name: table_query_id + schema: + type: string + format: uuid + required: true + tags: + - tables + - sdk + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TableQueryResultResponse' + description: '' + /v1/tables/upload/: + post: + operationId: upload_table + description: Create a Roe table in the authenticated organization from an uploaded + CSV file. Organization API keys are scoped to one organization; if organization_id + is supplied, it must match that organization. + summary: Upload a CSV as a Roe table + tags: + - tables + - sdk + requestBody: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/TableUploadRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/TableUploadResponse' + description: '' + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + description: Bad request + /v1/users/current_user/: get: operationId: users_current_user_retrieve tags: @@ -2371,9 +2837,6 @@ components: description: List of input definitions for this agent version. engine_config: description: Engine configuration as a dictionary of string key-value pairs. - required: - - engine_config - - input_definitions AgentVersionUpdateRequestRequest: type: object properties: @@ -2467,7 +2930,8 @@ components: organization_id: type: string format: uuid - description: Organization ID where the agent belongs. + description: Optional. Ignored by the API — the organization is derived + from the authenticated API key/token. Accepted for backwards compatibility. version_name: type: string minLength: 1 @@ -2482,10 +2946,7 @@ components: description: Engine configuration for the first version. required: - engine_class_id - - engine_config - - input_definitions - name - - organization_id BaseAgentUpdateRequest: type: object description: Serializer for updating BaseAgent @@ -2500,6 +2961,245 @@ components: cache_failed_jobs: type: boolean description: Whether to cache failed jobs for this agent. + Connection: + type: object + description: |- + Serializer for Connection model. + Returns: + - config: Non-sensitive config from DB + - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) + properties: + id: + type: string + format: uuid + readOnly: true + user: + type: + - integer + - 'null' + readOnly: true + organization: + type: string + format: uuid + connector_type: + type: string + maxLength: 50 + connector_display_name: + type: string + description: Get the display name for the connector type. + readOnly: true + name: + type: string + maxLength: 250 + description: + type: string + config: {} + auth_config: + type: object + additionalProperties: {} + readOnly: true + status: + $ref: '#/components/schemas/StatusEnum' + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + required: + - auth_config + - connector_display_name + - connector_type + - created_at + - id + - name + - organization + - updated_at + - user + ConnectionList: + type: object + description: |- + Lightweight serializer for listing connections. + Only returns metadata, no auth_config (avoids Secrets Manager calls). + properties: + id: + type: string + format: uuid + readOnly: true + user: + type: + - integer + - 'null' + readOnly: true + organization: + type: string + format: uuid + connector_type: + type: string + maxLength: 50 + connector_display_name: + type: string + description: Get the display name for the connector type. + readOnly: true + name: + type: string + maxLength: 250 + description: + type: string + config: {} + status: + $ref: '#/components/schemas/StatusEnum' + created_at: + type: string + format: date-time + readOnly: true + updated_at: + type: string + format: date-time + readOnly: true + required: + - connector_display_name + - connector_type + - created_at + - id + - name + - organization + - updated_at + - user + ConnectionRequest: + type: object + description: |- + Serializer for Connection model. + Returns: + - config: Non-sensitive config from DB + - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) + properties: + organization: + type: string + format: uuid + connector_type: + type: string + minLength: 1 + maxLength: 50 + name: + type: string + minLength: 1 + maxLength: 250 + description: + type: string + config: {} + status: + $ref: '#/components/schemas/StatusEnum' + required: + - connector_type + - name + - organization + ConnectorListResponse: + type: object + properties: + connectors: + type: array + items: + $ref: '#/components/schemas/ConnectorMetadata' + required: + - connectors + ConnectorMetadata: + type: object + description: Serializer for connector metadata. + properties: + id: + type: string + display_name: + type: string + description: + type: string + icon: + type: string + category: + type: string + config_schema: {} + auth_schema: {} + supports_delivery: + type: boolean + delivery_config_schema: + oneOf: + - {} + - type: 'null' + required: + - auth_schema + - category + - config_schema + - delivery_config_schema + - description + - display_name + - icon + - id + - supports_delivery + ConnectorTypeEnum: + enum: + - snowflake + - s3 + - sharepoint + - zendesk + - google_drive + - salesforce + - web_application + - custom_api + - lexis_nexis + - sardine + - intercom + - stripe + - plaid + - checkout_com + - socure + type: string + description: |- + * `snowflake` - SNOWFLAKE + * `s3` - S3 + * `sharepoint` - SHAREPOINT + * `zendesk` - ZENDESK + * `google_drive` - GOOGLE_DRIVE + * `salesforce` - SALESFORCE + * `web_application` - WEB_APPLICATION + * `custom_api` - CUSTOM_API + * `lexis_nexis` - LEXIS_NEXIS + * `sardine` - SARDINE + * `intercom` - INTERCOM + * `stripe` - STRIPE + * `plaid` - PLAID + * `checkout_com` - CHECKOUT_COM + * `socure` - SOCURE + CreateConnectionRequest: + type: object + description: |- + Serializer for creating connections. + Accepts full config, splits into config (DB) and auth (Secrets Manager). + properties: + connector_type: + $ref: '#/components/schemas/ConnectorTypeEnum' + name: + type: string + minLength: 1 + maxLength: 250 + description: + type: string + config: + type: object + additionalProperties: {} + auth_config: + type: object + additionalProperties: {} + organization_id: + type: + - string + - 'null' + format: uuid + required: + - config + - connector_type + - name CreatePolicy: type: object description: Serializer for creating a new policy with initial version @@ -2594,6 +3294,31 @@ components: description: ID of the version this was derived from required: - content + DuplicateConnectionExisting: + type: object + description: Identifying summary of the existing connection that triggered a + 409. + properties: + id: + type: string + format: uuid + name: + type: string + required: + - id + - name + DuplicateConnectionResponse: + type: object + description: Body of the 409 response when create/update hits a strict-identity + duplicate. + properties: + error: + type: string + existing_connection: + $ref: '#/components/schemas/DuplicateConnectionExisting' + required: + - error + - existing_connection ErrorResponse: type: object properties: @@ -2648,6 +3373,29 @@ components: type: array items: $ref: '#/components/schemas/BaseAgent' + PaginatedConnectionListList: + type: object + required: + - count + - results + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?page=4 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?page=2 + results: + type: array + items: + $ref: '#/components/schemas/ConnectionList' PaginatedPolicyList: type: object required: @@ -2719,6 +3467,35 @@ components: type: string minLength: 1 description: New description for the agent version. + PatchedUpdateConnectionRequest: + type: object + description: |- + Serializer for updating connections. + + Cross-state Pydantic validation (config + auth) lives in the view's + ``update()`` method now -- see ``connections.views. + ConnectionRetrieveUpdateDestroyView.update``. That path is the single + source of truth for canonical validation + write, mirrors the create + path's ``service.create_connection_with_secrets``, AND correctly + handles the SM-fetch-failure case for the unchanged-auth branch + (returns 502 / opportunistic backfill instead of silently corrupting + the fingerprint by hashing ``{}``). Re-running the same validation + here would (a) double the work, (b) bypass the SM-failure semantics, + and (c) leak Pydantic field/value details through DRF's generic 400 + handler. The serializer only does shape checks. + properties: + name: + type: string + minLength: 1 + maxLength: 250 + description: + type: string + config: + type: object + additionalProperties: {} + auth_config: + type: object + additionalProperties: {} PatchedUpdatePolicyRequest: type: object description: Serializer for updating policy metadata (name, description) @@ -2830,6 +3607,14 @@ components: - display_name - email - id + StatusEnum: + enum: + - active + - error + type: string + description: |- + * `active` - Active + * `error` - Error SupportedLLMModel: type: object description: Serializer for tenant-agnostic supported LLM metadata. @@ -2892,6 +3677,177 @@ components: - models - tenant_scope - total_count + Table: + type: object + description: Serializer for table information. + properties: + name: + type: string + description: Name of the table + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + description: List of columns in the table + required: + - columns + - name + TableColumn: + type: object + description: Serializer for table column information. + properties: + name: + type: string + description: Name of the column + type: + type: string + description: Type of the column (e.g., String, UInt64) + required: + - name + - type + TableDescribeResponse: + type: object + description: Response payload for describing a public Roe table. + properties: + table_name: + type: string + description: Name of the table + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + description: List of columns in the table + row_count: + type: + - integer + - 'null' + description: Total row count if ClickHouse can determine it from metadata + without scanning the table + updated_at: + type: + - string + - 'null' + format: date-time + description: Latest ClickHouse table metadata modification timestamp if + available + required: + - columns + - row_count + - table_name + - updated_at + TableListResponse: + type: object + description: Response payload for listing public Roe tables. + properties: + results: + type: array + items: + $ref: '#/components/schemas/Table' + total: + type: integer + description: Total number of tables returned + required: + - results + - total + TablePreviewResponse: + type: object + description: Response payload for previewing a public Roe table. + properties: + table_name: + type: string + description: Name of the table + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + description: List of columns in the table + rows: + type: array + items: + type: object + additionalProperties: {} + description: Sample rows keyed by column name + row_count: + type: integer + description: Number of sample rows returned + required: + - columns + - row_count + - rows + - table_name + TableQueryRequestRequest: + type: object + description: Request payload for running a public Roe table query. + properties: + sql: + type: string + minLength: 1 + description: Single read-only ClickHouse SELECT or WITH ... SELECT query. + maxLength: 65536 + limit: + type: integer + maximum: 1000 + minimum: 1 + default: 1000 + description: Maximum rows returned. Defaults to 1000; maximum 1000. + required: + - sql + TableQueryResultResponse: + type: object + description: Response payload for polling or fetching a public Roe table query. + properties: + table_query_id: + type: string + format: uuid + status: + type: string + error: + type: + - string + - 'null' + columns: + type: array + items: + type: object + additionalProperties: {} + rows: + type: array + items: + type: object + additionalProperties: {} + description: Rows keyed by column name. When truncated is true, an oversized + cell may be returned as a shortened string even if the original ClickHouse + value was a nested object or array. + row_count: + type: integer + truncated: + type: boolean + description: True when the result hit the row limit, backend result byte + cap, or an individual huge cell was shortened. In truncated responses, + any oversized cell may be represented as a string regardless of its original + ClickHouse type. + execution_time_ms: + type: number + format: double + required: + - status + - table_query_id + TableQuerySubmitResponse: + type: object + description: Response payload for submitting a public Roe table query. + properties: + table_query_id: + type: string + format: uuid + status: + type: string + created_at: + type: string + format: date-time + required: + - created_at + - status + - table_query_id TableUploadRequest: type: object description: Serializer for public CSV table uploads. @@ -2908,7 +3864,9 @@ components: with_headers: type: boolean default: true - description: Whether the first row of the CSV contains column headers + description: If true, the first CSV row contains column headers and is not + inserted as data; if false, every row is inserted as data and columns + are named column_1, column_2, etc. organization_id: type: - string @@ -2935,6 +3893,64 @@ components: required: - organization_id - table_name + TestConnection: + type: object + description: Serializer for connection test response. + properties: + success: + type: boolean + message: + type: string + tested_at: + type: string + format: date-time + required: + - message + - success + - tested_at + TestConnectionCredentialsRequest: + type: object + description: Serializer for testing connector credentials without saving a connection. + properties: + connector_type: + $ref: '#/components/schemas/ConnectorTypeEnum' + config: + type: object + additionalProperties: {} + auth_config: + type: object + additionalProperties: {} + required: + - config + - connector_type + UpdateConnection: + type: object + description: |- + Serializer for updating connections. + + Cross-state Pydantic validation (config + auth) lives in the view's + ``update()`` method now -- see ``connections.views. + ConnectionRetrieveUpdateDestroyView.update``. That path is the single + source of truth for canonical validation + write, mirrors the create + path's ``service.create_connection_with_secrets``, AND correctly + handles the SM-fetch-failure case for the unchanged-auth branch + (returns 502 / opportunistic backfill instead of silently corrupting + the fingerprint by hashing ``{}``). Re-running the same validation + here would (a) double the work, (b) bypass the SM-failure semantics, + and (c) leak Pydantic field/value details through DRF's generic 400 + handler. The serializer only does shape checks. + properties: + name: + type: string + maxLength: 250 + description: + type: string + config: + type: object + additionalProperties: {} + auth_config: + type: object + additionalProperties: {} UpdatePolicy: type: object description: Serializer for updating policy metadata (name, description) diff --git a/pyproject.toml b/pyproject.toml index b482122..84184c2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "roe-ai" -version = "1.0.803" +version = "1.0.804" authors = [ { name = "Roe", email = "founders@roe-ai.com" }, ] diff --git a/src/roe/_generated/api/agents/agents_versions_create.py b/src/roe/_generated/api/agents/agents_versions_create.py index 1356ebc..6dedf5e 100644 --- a/src/roe/_generated/api/agents/agents_versions_create.py +++ b/src/roe/_generated/api/agents/agents_versions_create.py @@ -20,7 +20,7 @@ def _get_kwargs( agent_id: UUID, *, - body: AgentVersionCreateRequest, + body: AgentVersionCreateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, ) -> dict[str, Any]: @@ -46,7 +46,9 @@ def _get_kwargs( "params": params, } - _kwargs["json"] = body.to_dict() + + if not isinstance(body, Unset): + _kwargs["json"] = body.to_dict() headers["Content-Type"] = "application/json" @@ -104,7 +106,7 @@ def sync_detailed( agent_id: UUID, *, client: AuthenticatedClient | Client, - body: AgentVersionCreateRequest, + body: AgentVersionCreateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, ) -> Response[AgentVersion | ErrorResponse]: @@ -115,7 +117,7 @@ def sync_detailed( Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentVersionCreateRequest): Serializer for creating new agent versions + body (AgentVersionCreateRequest | Unset): Serializer for creating new agent versions Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -143,7 +145,7 @@ def sync( agent_id: UUID, *, client: AuthenticatedClient | Client, - body: AgentVersionCreateRequest, + body: AgentVersionCreateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, ) -> AgentVersion | ErrorResponse | None: @@ -154,7 +156,7 @@ def sync( Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentVersionCreateRequest): Serializer for creating new agent versions + body (AgentVersionCreateRequest | Unset): Serializer for creating new agent versions Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -177,7 +179,7 @@ async def asyncio_detailed( agent_id: UUID, *, client: AuthenticatedClient | Client, - body: AgentVersionCreateRequest, + body: AgentVersionCreateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, ) -> Response[AgentVersion | ErrorResponse]: @@ -188,7 +190,7 @@ async def asyncio_detailed( Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentVersionCreateRequest): Serializer for creating new agent versions + body (AgentVersionCreateRequest | Unset): Serializer for creating new agent versions Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -216,7 +218,7 @@ async def asyncio( agent_id: UUID, *, client: AuthenticatedClient | Client, - body: AgentVersionCreateRequest, + body: AgentVersionCreateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, ) -> AgentVersion | ErrorResponse | None: @@ -227,7 +229,7 @@ async def asyncio( Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentVersionCreateRequest): Serializer for creating new agent versions + body (AgentVersionCreateRequest | Unset): Serializer for creating new agent versions Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. diff --git a/src/roe/_generated/api/connections/__init__.py b/src/roe/_generated/api/connections/__init__.py new file mode 100644 index 0000000..c9921b5 --- /dev/null +++ b/src/roe/_generated/api/connections/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/src/roe/_generated/api/connections/connections_create.py b/src/roe/_generated/api/connections/connections_create.py new file mode 100644 index 0000000..340fd9d --- /dev/null +++ b/src/roe/_generated/api/connections/connections_create.py @@ -0,0 +1,224 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.connection import Connection +from ...models.create_connection_request import CreateConnectionRequest +from ...models.duplicate_connection_response import DuplicateConnectionResponse +from ...models.error_response import ErrorResponse +from ...types import UNSET, Unset +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + *, + body: CreateConnectionRequest, + organization_id: UUID | Unset = UNSET, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + params: dict[str, Any] = {} + + json_organization_id: str | Unset = UNSET + if not isinstance(organization_id, Unset): + json_organization_id = str(organization_id) + params["organization_id"] = json_organization_id + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/connections/", + "params": params, + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Connection | DuplicateConnectionResponse | ErrorResponse | None: + if response.status_code == 201: + response_201 = Connection.from_dict(response.json()) + + + + return response_201 + + if response.status_code == 400: + response_400 = ErrorResponse.from_dict(response.json()) + + + + return response_400 + + if response.status_code == 409: + response_409 = DuplicateConnectionResponse.from_dict(response.json()) + + + + return response_409 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Connection | DuplicateConnectionResponse | ErrorResponse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient | Client, + body: CreateConnectionRequest, + organization_id: UUID | Unset = UNSET, + +) -> Response[Connection | DuplicateConnectionResponse | ErrorResponse]: + """ Public API: GET/POST /api/v1/connections/ - List/create connections. + + Args: + organization_id (UUID | Unset): + body (CreateConnectionRequest): Serializer for creating connections. + Accepts full config, splits into config (DB) and auth (Secrets Manager). + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Connection | DuplicateConnectionResponse | ErrorResponse] + """ + + + kwargs = _get_kwargs( + body=body, +organization_id=organization_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient | Client, + body: CreateConnectionRequest, + organization_id: UUID | Unset = UNSET, + +) -> Connection | DuplicateConnectionResponse | ErrorResponse | None: + """ Public API: GET/POST /api/v1/connections/ - List/create connections. + + Args: + organization_id (UUID | Unset): + body (CreateConnectionRequest): Serializer for creating connections. + Accepts full config, splits into config (DB) and auth (Secrets Manager). + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Connection | DuplicateConnectionResponse | ErrorResponse + """ + + + return sync_detailed( + client=client, +body=body, +organization_id=organization_id, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient | Client, + body: CreateConnectionRequest, + organization_id: UUID | Unset = UNSET, + +) -> Response[Connection | DuplicateConnectionResponse | ErrorResponse]: + """ Public API: GET/POST /api/v1/connections/ - List/create connections. + + Args: + organization_id (UUID | Unset): + body (CreateConnectionRequest): Serializer for creating connections. + Accepts full config, splits into config (DB) and auth (Secrets Manager). + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Connection | DuplicateConnectionResponse | ErrorResponse] + """ + + + kwargs = _get_kwargs( + body=body, +organization_id=organization_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient | Client, + body: CreateConnectionRequest, + organization_id: UUID | Unset = UNSET, + +) -> Connection | DuplicateConnectionResponse | ErrorResponse | None: + """ Public API: GET/POST /api/v1/connections/ - List/create connections. + + Args: + organization_id (UUID | Unset): + body (CreateConnectionRequest): Serializer for creating connections. + Accepts full config, splits into config (DB) and auth (Secrets Manager). + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Connection | DuplicateConnectionResponse | ErrorResponse + """ + + + return (await asyncio_detailed( + client=client, +body=body, +organization_id=organization_id, + + )).parsed diff --git a/src/roe/_generated/api/connections/connections_destroy.py b/src/roe/_generated/api/connections/connections_destroy.py new file mode 100644 index 0000000..4a0ff23 --- /dev/null +++ b/src/roe/_generated/api/connections/connections_destroy.py @@ -0,0 +1,135 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...types import UNSET, Unset +from uuid import UUID + + + +def _get_kwargs( + id: UUID, + *, + organization_id: UUID | Unset = UNSET, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + json_organization_id: str | Unset = UNSET + if not isinstance(organization_id, Unset): + json_organization_id = str(organization_id) + params["organization_id"] = json_organization_id + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/v1/connections/{id}/".format(id=quote(str(id), safe=""),), + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: + if response.status_code == 204: + return None + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: UUID, + *, + client: AuthenticatedClient | Client, + organization_id: UUID | Unset = UNSET, + +) -> Response[Any]: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any] + """ + + + kwargs = _get_kwargs( + id=id, +organization_id=organization_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +async def asyncio_detailed( + id: UUID, + *, + client: AuthenticatedClient | Client, + organization_id: UUID | Unset = UNSET, + +) -> Response[Any]: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any] + """ + + + kwargs = _get_kwargs( + id=id, +organization_id=organization_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + diff --git a/src/roe/_generated/api/connections/connections_list.py b/src/roe/_generated/api/connections/connections_list.py new file mode 100644 index 0000000..ed3040a --- /dev/null +++ b/src/roe/_generated/api/connections/connections_list.py @@ -0,0 +1,244 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.paginated_connection_list_list import PaginatedConnectionListList +from ...types import UNSET, Unset +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + *, + connector_type: str | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + page: int | Unset = UNSET, + page_size: int | Unset = UNSET, + search: str | Unset = UNSET, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + params["connector_type"] = connector_type + + json_organization_id: str | Unset = UNSET + if not isinstance(organization_id, Unset): + json_organization_id = str(organization_id) + params["organization_id"] = json_organization_id + + params["page"] = page + + params["page_size"] = page_size + + params["search"] = search + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/connections/", + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> PaginatedConnectionListList | None: + if response.status_code == 200: + response_200 = PaginatedConnectionListList.from_dict(response.json()) + + + + return response_200 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[PaginatedConnectionListList]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient | Client, + connector_type: str | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + page: int | Unset = UNSET, + page_size: int | Unset = UNSET, + search: str | Unset = UNSET, + +) -> Response[PaginatedConnectionListList]: + """ Public API: GET/POST /api/v1/connections/ - List/create connections. + + Args: + connector_type (str | Unset): + organization_id (UUID | Unset): + page (int | Unset): + page_size (int | Unset): + search (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[PaginatedConnectionListList] + """ + + + kwargs = _get_kwargs( + connector_type=connector_type, +organization_id=organization_id, +page=page, +page_size=page_size, +search=search, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient | Client, + connector_type: str | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + page: int | Unset = UNSET, + page_size: int | Unset = UNSET, + search: str | Unset = UNSET, + +) -> PaginatedConnectionListList | None: + """ Public API: GET/POST /api/v1/connections/ - List/create connections. + + Args: + connector_type (str | Unset): + organization_id (UUID | Unset): + page (int | Unset): + page_size (int | Unset): + search (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + PaginatedConnectionListList + """ + + + return sync_detailed( + client=client, +connector_type=connector_type, +organization_id=organization_id, +page=page, +page_size=page_size, +search=search, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient | Client, + connector_type: str | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + page: int | Unset = UNSET, + page_size: int | Unset = UNSET, + search: str | Unset = UNSET, + +) -> Response[PaginatedConnectionListList]: + """ Public API: GET/POST /api/v1/connections/ - List/create connections. + + Args: + connector_type (str | Unset): + organization_id (UUID | Unset): + page (int | Unset): + page_size (int | Unset): + search (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[PaginatedConnectionListList] + """ + + + kwargs = _get_kwargs( + connector_type=connector_type, +organization_id=organization_id, +page=page, +page_size=page_size, +search=search, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient | Client, + connector_type: str | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + page: int | Unset = UNSET, + page_size: int | Unset = UNSET, + search: str | Unset = UNSET, + +) -> PaginatedConnectionListList | None: + """ Public API: GET/POST /api/v1/connections/ - List/create connections. + + Args: + connector_type (str | Unset): + organization_id (UUID | Unset): + page (int | Unset): + page_size (int | Unset): + search (str | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + PaginatedConnectionListList + """ + + + return (await asyncio_detailed( + client=client, +connector_type=connector_type, +organization_id=organization_id, +page=page, +page_size=page_size, +search=search, + + )).parsed diff --git a/src/roe/_generated/api/connections/connections_partial_update.py b/src/roe/_generated/api/connections/connections_partial_update.py new file mode 100644 index 0000000..4091675 --- /dev/null +++ b/src/roe/_generated/api/connections/connections_partial_update.py @@ -0,0 +1,267 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.patched_update_connection_request import PatchedUpdateConnectionRequest +from ...models.update_connection import UpdateConnection +from ...types import UNSET, Unset +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + id: UUID, + *, + body: PatchedUpdateConnectionRequest | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + params: dict[str, Any] = {} + + json_organization_id: str | Unset = UNSET + if not isinstance(organization_id, Unset): + json_organization_id = str(organization_id) + params["organization_id"] = json_organization_id + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/v1/connections/{id}/".format(id=quote(str(id), safe=""),), + "params": params, + } + + + if not isinstance(body, Unset): + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> UpdateConnection | None: + if response.status_code == 200: + response_200 = UpdateConnection.from_dict(response.json()) + + + + return response_200 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[UpdateConnection]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: UUID, + *, + client: AuthenticatedClient | Client, + body: PatchedUpdateConnectionRequest | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> Response[UpdateConnection]: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + body (PatchedUpdateConnectionRequest | Unset): Serializer for updating connections. + + Cross-state Pydantic validation (config + auth) lives in the view's + ``update()`` method now -- see ``connections.views. + ConnectionRetrieveUpdateDestroyView.update``. That path is the single + source of truth for canonical validation + write, mirrors the create + path's ``service.create_connection_with_secrets``, AND correctly + handles the SM-fetch-failure case for the unchanged-auth branch + (returns 502 / opportunistic backfill instead of silently corrupting + the fingerprint by hashing ``{}``). Re-running the same validation + here would (a) double the work, (b) bypass the SM-failure semantics, + and (c) leak Pydantic field/value details through DRF's generic 400 + handler. The serializer only does shape checks. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[UpdateConnection] + """ + + + kwargs = _get_kwargs( + id=id, +body=body, +organization_id=organization_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + id: UUID, + *, + client: AuthenticatedClient | Client, + body: PatchedUpdateConnectionRequest | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> UpdateConnection | None: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + body (PatchedUpdateConnectionRequest | Unset): Serializer for updating connections. + + Cross-state Pydantic validation (config + auth) lives in the view's + ``update()`` method now -- see ``connections.views. + ConnectionRetrieveUpdateDestroyView.update``. That path is the single + source of truth for canonical validation + write, mirrors the create + path's ``service.create_connection_with_secrets``, AND correctly + handles the SM-fetch-failure case for the unchanged-auth branch + (returns 502 / opportunistic backfill instead of silently corrupting + the fingerprint by hashing ``{}``). Re-running the same validation + here would (a) double the work, (b) bypass the SM-failure semantics, + and (c) leak Pydantic field/value details through DRF's generic 400 + handler. The serializer only does shape checks. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + UpdateConnection + """ + + + return sync_detailed( + id=id, +client=client, +body=body, +organization_id=organization_id, + + ).parsed + +async def asyncio_detailed( + id: UUID, + *, + client: AuthenticatedClient | Client, + body: PatchedUpdateConnectionRequest | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> Response[UpdateConnection]: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + body (PatchedUpdateConnectionRequest | Unset): Serializer for updating connections. + + Cross-state Pydantic validation (config + auth) lives in the view's + ``update()`` method now -- see ``connections.views. + ConnectionRetrieveUpdateDestroyView.update``. That path is the single + source of truth for canonical validation + write, mirrors the create + path's ``service.create_connection_with_secrets``, AND correctly + handles the SM-fetch-failure case for the unchanged-auth branch + (returns 502 / opportunistic backfill instead of silently corrupting + the fingerprint by hashing ``{}``). Re-running the same validation + here would (a) double the work, (b) bypass the SM-failure semantics, + and (c) leak Pydantic field/value details through DRF's generic 400 + handler. The serializer only does shape checks. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[UpdateConnection] + """ + + + kwargs = _get_kwargs( + id=id, +body=body, +organization_id=organization_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + id: UUID, + *, + client: AuthenticatedClient | Client, + body: PatchedUpdateConnectionRequest | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> UpdateConnection | None: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + body (PatchedUpdateConnectionRequest | Unset): Serializer for updating connections. + + Cross-state Pydantic validation (config + auth) lives in the view's + ``update()`` method now -- see ``connections.views. + ConnectionRetrieveUpdateDestroyView.update``. That path is the single + source of truth for canonical validation + write, mirrors the create + path's ``service.create_connection_with_secrets``, AND correctly + handles the SM-fetch-failure case for the unchanged-auth branch + (returns 502 / opportunistic backfill instead of silently corrupting + the fingerprint by hashing ``{}``). Re-running the same validation + here would (a) double the work, (b) bypass the SM-failure semantics, + and (c) leak Pydantic field/value details through DRF's generic 400 + handler. The serializer only does shape checks. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + UpdateConnection + """ + + + return (await asyncio_detailed( + id=id, +client=client, +body=body, +organization_id=organization_id, + + )).parsed diff --git a/src/roe/_generated/api/connections/connections_retrieve.py b/src/roe/_generated/api/connections/connections_retrieve.py new file mode 100644 index 0000000..ae4ded1 --- /dev/null +++ b/src/roe/_generated/api/connections/connections_retrieve.py @@ -0,0 +1,197 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.connection import Connection +from ...types import UNSET, Unset +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + id: UUID, + *, + organization_id: UUID | Unset = UNSET, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + json_organization_id: str | Unset = UNSET + if not isinstance(organization_id, Unset): + json_organization_id = str(organization_id) + params["organization_id"] = json_organization_id + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/connections/{id}/".format(id=quote(str(id), safe=""),), + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Connection | None: + if response.status_code == 200: + response_200 = Connection.from_dict(response.json()) + + + + return response_200 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Connection]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: UUID, + *, + client: AuthenticatedClient | Client, + organization_id: UUID | Unset = UNSET, + +) -> Response[Connection]: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Connection] + """ + + + kwargs = _get_kwargs( + id=id, +organization_id=organization_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + id: UUID, + *, + client: AuthenticatedClient | Client, + organization_id: UUID | Unset = UNSET, + +) -> Connection | None: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Connection + """ + + + return sync_detailed( + id=id, +client=client, +organization_id=organization_id, + + ).parsed + +async def asyncio_detailed( + id: UUID, + *, + client: AuthenticatedClient | Client, + organization_id: UUID | Unset = UNSET, + +) -> Response[Connection]: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Connection] + """ + + + kwargs = _get_kwargs( + id=id, +organization_id=organization_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + id: UUID, + *, + client: AuthenticatedClient | Client, + organization_id: UUID | Unset = UNSET, + +) -> Connection | None: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Connection + """ + + + return (await asyncio_detailed( + id=id, +client=client, +organization_id=organization_id, + + )).parsed diff --git a/src/roe/_generated/api/connections/connections_test_create.py b/src/roe/_generated/api/connections/connections_test_create.py new file mode 100644 index 0000000..df3e243 --- /dev/null +++ b/src/roe/_generated/api/connections/connections_test_create.py @@ -0,0 +1,208 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.test_connection import TestConnection +from ...types import UNSET, Unset +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + id: UUID, + *, + organization_id: UUID | Unset = UNSET, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + json_organization_id: str | Unset = UNSET + if not isinstance(organization_id, Unset): + json_organization_id = str(organization_id) + params["organization_id"] = json_organization_id + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/connections/{id}/test/".format(id=quote(str(id), safe=""),), + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | TestConnection | None: + if response.status_code == 200: + response_200 = TestConnection.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 400: + response_400 = TestConnection.from_dict(response.json()) + + + + return response_400 + + if response.status_code == 404: + response_404 = cast(Any, None) + return response_404 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | TestConnection]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: UUID, + *, + client: AuthenticatedClient | Client, + organization_id: UUID | Unset = UNSET, + +) -> Response[Any | TestConnection]: + """ Public API: POST /api/v1/connections/{id}/test/ - Test connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | TestConnection] + """ + + + kwargs = _get_kwargs( + id=id, +organization_id=organization_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + id: UUID, + *, + client: AuthenticatedClient | Client, + organization_id: UUID | Unset = UNSET, + +) -> Any | TestConnection | None: + """ Public API: POST /api/v1/connections/{id}/test/ - Test connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | TestConnection + """ + + + return sync_detailed( + id=id, +client=client, +organization_id=organization_id, + + ).parsed + +async def asyncio_detailed( + id: UUID, + *, + client: AuthenticatedClient | Client, + organization_id: UUID | Unset = UNSET, + +) -> Response[Any | TestConnection]: + """ Public API: POST /api/v1/connections/{id}/test/ - Test connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | TestConnection] + """ + + + kwargs = _get_kwargs( + id=id, +organization_id=organization_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + id: UUID, + *, + client: AuthenticatedClient | Client, + organization_id: UUID | Unset = UNSET, + +) -> Any | TestConnection | None: + """ Public API: POST /api/v1/connections/{id}/test/ - Test connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | TestConnection + """ + + + return (await asyncio_detailed( + id=id, +client=client, +organization_id=organization_id, + + )).parsed diff --git a/src/roe/_generated/api/connections/connections_test_credentials_create.py b/src/roe/_generated/api/connections/connections_test_credentials_create.py new file mode 100644 index 0000000..705d6e0 --- /dev/null +++ b/src/roe/_generated/api/connections/connections_test_credentials_create.py @@ -0,0 +1,190 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.test_connection import TestConnection +from ...models.test_connection_credentials_request import TestConnectionCredentialsRequest +from typing import cast + + + +def _get_kwargs( + *, + body: TestConnectionCredentialsRequest, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/connections/test-credentials/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> TestConnection | None: + if response.status_code == 200: + response_200 = TestConnection.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 400: + response_400 = TestConnection.from_dict(response.json()) + + + + return response_400 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[TestConnection]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient | Client, + body: TestConnectionCredentialsRequest, + +) -> Response[TestConnection]: + """ Test credentials without storing them. + + Args: + body (TestConnectionCredentialsRequest): Serializer for testing connector credentials + without saving a connection. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[TestConnection] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient | Client, + body: TestConnectionCredentialsRequest, + +) -> TestConnection | None: + """ Test credentials without storing them. + + Args: + body (TestConnectionCredentialsRequest): Serializer for testing connector credentials + without saving a connection. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + TestConnection + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient | Client, + body: TestConnectionCredentialsRequest, + +) -> Response[TestConnection]: + """ Test credentials without storing them. + + Args: + body (TestConnectionCredentialsRequest): Serializer for testing connector credentials + without saving a connection. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[TestConnection] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient | Client, + body: TestConnectionCredentialsRequest, + +) -> TestConnection | None: + """ Test credentials without storing them. + + Args: + body (TestConnectionCredentialsRequest): Serializer for testing connector credentials + without saving a connection. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + TestConnection + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/src/roe/_generated/api/connections/connections_update.py b/src/roe/_generated/api/connections/connections_update.py new file mode 100644 index 0000000..7566747 --- /dev/null +++ b/src/roe/_generated/api/connections/connections_update.py @@ -0,0 +1,229 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.connection import Connection +from ...models.connection_request import ConnectionRequest +from ...types import UNSET, Unset +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + id: UUID, + *, + body: ConnectionRequest, + organization_id: UUID | Unset = UNSET, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + params: dict[str, Any] = {} + + json_organization_id: str | Unset = UNSET + if not isinstance(organization_id, Unset): + json_organization_id = str(organization_id) + params["organization_id"] = json_organization_id + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "put", + "url": "/v1/connections/{id}/".format(id=quote(str(id), safe=""),), + "params": params, + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Connection | None: + if response.status_code == 200: + response_200 = Connection.from_dict(response.json()) + + + + return response_200 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Connection]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id: UUID, + *, + client: AuthenticatedClient | Client, + body: ConnectionRequest, + organization_id: UUID | Unset = UNSET, + +) -> Response[Connection]: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + body (ConnectionRequest): Serializer for Connection model. + Returns: + - config: Non-sensitive config from DB + - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Connection] + """ + + + kwargs = _get_kwargs( + id=id, +body=body, +organization_id=organization_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + id: UUID, + *, + client: AuthenticatedClient | Client, + body: ConnectionRequest, + organization_id: UUID | Unset = UNSET, + +) -> Connection | None: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + body (ConnectionRequest): Serializer for Connection model. + Returns: + - config: Non-sensitive config from DB + - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Connection + """ + + + return sync_detailed( + id=id, +client=client, +body=body, +organization_id=organization_id, + + ).parsed + +async def asyncio_detailed( + id: UUID, + *, + client: AuthenticatedClient | Client, + body: ConnectionRequest, + organization_id: UUID | Unset = UNSET, + +) -> Response[Connection]: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + body (ConnectionRequest): Serializer for Connection model. + Returns: + - config: Non-sensitive config from DB + - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Connection] + """ + + + kwargs = _get_kwargs( + id=id, +body=body, +organization_id=organization_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + id: UUID, + *, + client: AuthenticatedClient | Client, + body: ConnectionRequest, + organization_id: UUID | Unset = UNSET, + +) -> Connection | None: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + body (ConnectionRequest): Serializer for Connection model. + Returns: + - config: Non-sensitive config from DB + - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Connection + """ + + + return (await asyncio_detailed( + id=id, +client=client, +body=body, +organization_id=organization_id, + + )).parsed diff --git a/src/roe/_generated/api/connectors/__init__.py b/src/roe/_generated/api/connectors/__init__.py new file mode 100644 index 0000000..c9921b5 --- /dev/null +++ b/src/roe/_generated/api/connectors/__init__.py @@ -0,0 +1 @@ +""" Contains endpoint functions for accessing the API """ diff --git a/src/roe/_generated/api/connectors/connectors_retrieve.py b/src/roe/_generated/api/connectors/connectors_retrieve.py new file mode 100644 index 0000000..6efa420 --- /dev/null +++ b/src/roe/_generated/api/connectors/connectors_retrieve.py @@ -0,0 +1,150 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.connector_list_response import ConnectorListResponse +from typing import cast + + + +def _get_kwargs( + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/connectors/", + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ConnectorListResponse | None: + if response.status_code == 200: + response_200 = ConnectorListResponse.from_dict(response.json()) + + + + return response_200 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ConnectorListResponse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient | Client, + +) -> Response[ConnectorListResponse]: + """ Public API: GET /api/v1/connectors/ - List all connector types. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ConnectorListResponse] + """ + + + kwargs = _get_kwargs( + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient | Client, + +) -> ConnectorListResponse | None: + """ Public API: GET /api/v1/connectors/ - List all connector types. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ConnectorListResponse + """ + + + return sync_detailed( + client=client, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient | Client, + +) -> Response[ConnectorListResponse]: + """ Public API: GET /api/v1/connectors/ - List all connector types. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ConnectorListResponse] + """ + + + kwargs = _get_kwargs( + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient | Client, + +) -> ConnectorListResponse | None: + """ Public API: GET /api/v1/connectors/ - List all connector types. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ConnectorListResponse + """ + + + return (await asyncio_detailed( + client=client, + + )).parsed diff --git a/src/roe/_generated/api/connectors/connectors_retrieve_2.py b/src/roe/_generated/api/connectors/connectors_retrieve_2.py new file mode 100644 index 0000000..873b446 --- /dev/null +++ b/src/roe/_generated/api/connectors/connectors_retrieve_2.py @@ -0,0 +1,171 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.connector_metadata import ConnectorMetadata +from typing import cast + + + +def _get_kwargs( + connector_type: str, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/connectors/{connector_type}/".format(connector_type=quote(str(connector_type), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ConnectorMetadata | None: + if response.status_code == 200: + response_200 = ConnectorMetadata.from_dict(response.json()) + + + + return response_200 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ConnectorMetadata]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + connector_type: str, + *, + client: AuthenticatedClient | Client, + +) -> Response[ConnectorMetadata]: + """ Public API: GET /api/v1/connectors/{connector_type}/ - Get connector details. + + Args: + connector_type (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ConnectorMetadata] + """ + + + kwargs = _get_kwargs( + connector_type=connector_type, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + connector_type: str, + *, + client: AuthenticatedClient | Client, + +) -> ConnectorMetadata | None: + """ Public API: GET /api/v1/connectors/{connector_type}/ - Get connector details. + + Args: + connector_type (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ConnectorMetadata + """ + + + return sync_detailed( + connector_type=connector_type, +client=client, + + ).parsed + +async def asyncio_detailed( + connector_type: str, + *, + client: AuthenticatedClient | Client, + +) -> Response[ConnectorMetadata]: + """ Public API: GET /api/v1/connectors/{connector_type}/ - Get connector details. + + Args: + connector_type (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ConnectorMetadata] + """ + + + kwargs = _get_kwargs( + connector_type=connector_type, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + connector_type: str, + *, + client: AuthenticatedClient | Client, + +) -> ConnectorMetadata | None: + """ Public API: GET /api/v1/connectors/{connector_type}/ - Get connector details. + + Args: + connector_type (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ConnectorMetadata + """ + + + return (await asyncio_detailed( + connector_type=connector_type, +client=client, + + )).parsed diff --git a/src/roe/_generated/api/tables/tables_describe_retrieve.py b/src/roe/_generated/api/tables/tables_describe_retrieve.py new file mode 100644 index 0000000..7a6ee80 --- /dev/null +++ b/src/roe/_generated/api/tables/tables_describe_retrieve.py @@ -0,0 +1,199 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.error_response import ErrorResponse +from ...models.table_describe_response import TableDescribeResponse +from typing import cast + + + +def _get_kwargs( + table_name: str, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/tables/{table_name}/describe/".format(table_name=quote(str(table_name), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorResponse | TableDescribeResponse | None: + if response.status_code == 200: + response_200 = TableDescribeResponse.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 400: + response_400 = ErrorResponse.from_dict(response.json()) + + + + return response_400 + + if response.status_code == 404: + response_404 = cast(Any, None) + return response_404 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorResponse | TableDescribeResponse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + table_name: str, + *, + client: AuthenticatedClient | Client, + +) -> Response[Any | ErrorResponse | TableDescribeResponse]: + """ Describe a Roe table + + Return table metadata only for one Roe table in the authenticated organization, including columns + and cheap ClickHouse metadata such as row count and the latest metadata-modification timestamp when + available. + + Args: + table_name (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | ErrorResponse | TableDescribeResponse] + """ + + + kwargs = _get_kwargs( + table_name=table_name, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + table_name: str, + *, + client: AuthenticatedClient | Client, + +) -> Any | ErrorResponse | TableDescribeResponse | None: + """ Describe a Roe table + + Return table metadata only for one Roe table in the authenticated organization, including columns + and cheap ClickHouse metadata such as row count and the latest metadata-modification timestamp when + available. + + Args: + table_name (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | ErrorResponse | TableDescribeResponse + """ + + + return sync_detailed( + table_name=table_name, +client=client, + + ).parsed + +async def asyncio_detailed( + table_name: str, + *, + client: AuthenticatedClient | Client, + +) -> Response[Any | ErrorResponse | TableDescribeResponse]: + """ Describe a Roe table + + Return table metadata only for one Roe table in the authenticated organization, including columns + and cheap ClickHouse metadata such as row count and the latest metadata-modification timestamp when + available. + + Args: + table_name (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | ErrorResponse | TableDescribeResponse] + """ + + + kwargs = _get_kwargs( + table_name=table_name, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + table_name: str, + *, + client: AuthenticatedClient | Client, + +) -> Any | ErrorResponse | TableDescribeResponse | None: + """ Describe a Roe table + + Return table metadata only for one Roe table in the authenticated organization, including columns + and cheap ClickHouse metadata such as row count and the latest metadata-modification timestamp when + available. + + Args: + table_name (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | ErrorResponse | TableDescribeResponse + """ + + + return (await asyncio_detailed( + table_name=table_name, +client=client, + + )).parsed diff --git a/src/roe/_generated/api/tables/tables_destroy.py b/src/roe/_generated/api/tables/tables_destroy.py new file mode 100644 index 0000000..12351cc --- /dev/null +++ b/src/roe/_generated/api/tables/tables_destroy.py @@ -0,0 +1,191 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.error_response import ErrorResponse +from typing import cast + + + +def _get_kwargs( + table_name: str, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/v1/tables/{table_name}/".format(table_name=quote(str(table_name), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorResponse | None: + if response.status_code == 204: + response_204 = cast(Any, None) + return response_204 + + if response.status_code == 400: + response_400 = ErrorResponse.from_dict(response.json()) + + + + return response_400 + + if response.status_code == 404: + response_404 = cast(Any, None) + return response_404 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorResponse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + table_name: str, + *, + client: AuthenticatedClient | Client, + +) -> Response[Any | ErrorResponse]: + """ Delete a Roe table + + Permanently drop one Roe table from the authenticated organization and remove table-link metadata + that references it. + + Args: + table_name (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | ErrorResponse] + """ + + + kwargs = _get_kwargs( + table_name=table_name, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + table_name: str, + *, + client: AuthenticatedClient | Client, + +) -> Any | ErrorResponse | None: + """ Delete a Roe table + + Permanently drop one Roe table from the authenticated organization and remove table-link metadata + that references it. + + Args: + table_name (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | ErrorResponse + """ + + + return sync_detailed( + table_name=table_name, +client=client, + + ).parsed + +async def asyncio_detailed( + table_name: str, + *, + client: AuthenticatedClient | Client, + +) -> Response[Any | ErrorResponse]: + """ Delete a Roe table + + Permanently drop one Roe table from the authenticated organization and remove table-link metadata + that references it. + + Args: + table_name (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | ErrorResponse] + """ + + + kwargs = _get_kwargs( + table_name=table_name, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + table_name: str, + *, + client: AuthenticatedClient | Client, + +) -> Any | ErrorResponse | None: + """ Delete a Roe table + + Permanently drop one Roe table from the authenticated organization and remove table-link metadata + that references it. + + Args: + table_name (str): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | ErrorResponse + """ + + + return (await asyncio_detailed( + table_name=table_name, +client=client, + + )).parsed diff --git a/src/roe/_generated/api/tables/tables_list.py b/src/roe/_generated/api/tables/tables_list.py new file mode 100644 index 0000000..52f03b9 --- /dev/null +++ b/src/roe/_generated/api/tables/tables_list.py @@ -0,0 +1,166 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.error_response import ErrorResponse +from ...models.table_list_response import TableListResponse +from typing import cast + + + +def _get_kwargs( + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/tables/", + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorResponse | TableListResponse | None: + if response.status_code == 200: + response_200 = TableListResponse.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 400: + response_400 = ErrorResponse.from_dict(response.json()) + + + + return response_400 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorResponse | TableListResponse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient | Client, + +) -> Response[ErrorResponse | TableListResponse]: + """ List Roe tables + + List Roe tables in the authenticated organization with column information. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ErrorResponse | TableListResponse] + """ + + + kwargs = _get_kwargs( + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient | Client, + +) -> ErrorResponse | TableListResponse | None: + """ List Roe tables + + List Roe tables in the authenticated organization with column information. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ErrorResponse | TableListResponse + """ + + + return sync_detailed( + client=client, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient | Client, + +) -> Response[ErrorResponse | TableListResponse]: + """ List Roe tables + + List Roe tables in the authenticated organization with column information. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ErrorResponse | TableListResponse] + """ + + + kwargs = _get_kwargs( + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient | Client, + +) -> ErrorResponse | TableListResponse | None: + """ List Roe tables + + List Roe tables in the authenticated organization with column information. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ErrorResponse | TableListResponse + """ + + + return (await asyncio_detailed( + client=client, + + )).parsed diff --git a/src/roe/_generated/api/tables/tables_preview_retrieve.py b/src/roe/_generated/api/tables/tables_preview_retrieve.py new file mode 100644 index 0000000..9461b39 --- /dev/null +++ b/src/roe/_generated/api/tables/tables_preview_retrieve.py @@ -0,0 +1,217 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.error_response import ErrorResponse +from ...models.table_preview_response import TablePreviewResponse +from ...types import UNSET, Unset +from typing import cast + + + +def _get_kwargs( + table_name: str, + *, + limit: int | Unset = 3, + +) -> dict[str, Any]: + + + + + params: dict[str, Any] = {} + + params["limit"] = limit + + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/tables/{table_name}/preview/".format(table_name=quote(str(table_name), safe=""),), + "params": params, + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorResponse | TablePreviewResponse | None: + if response.status_code == 200: + response_200 = TablePreviewResponse.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 400: + response_400 = ErrorResponse.from_dict(response.json()) + + + + return response_400 + + if response.status_code == 404: + response_404 = cast(Any, None) + return response_404 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorResponse | TablePreviewResponse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + table_name: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = 3, + +) -> Response[Any | ErrorResponse | TablePreviewResponse]: + """ Preview a Roe table + + Return column metadata plus a bounded sample of rows from one Roe table in the authenticated + organization. + + Args: + table_name (str): + limit (int | Unset): Default: 3. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | ErrorResponse | TablePreviewResponse] + """ + + + kwargs = _get_kwargs( + table_name=table_name, +limit=limit, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + table_name: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = 3, + +) -> Any | ErrorResponse | TablePreviewResponse | None: + """ Preview a Roe table + + Return column metadata plus a bounded sample of rows from one Roe table in the authenticated + organization. + + Args: + table_name (str): + limit (int | Unset): Default: 3. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | ErrorResponse | TablePreviewResponse + """ + + + return sync_detailed( + table_name=table_name, +client=client, +limit=limit, + + ).parsed + +async def asyncio_detailed( + table_name: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = 3, + +) -> Response[Any | ErrorResponse | TablePreviewResponse]: + """ Preview a Roe table + + Return column metadata plus a bounded sample of rows from one Roe table in the authenticated + organization. + + Args: + table_name (str): + limit (int | Unset): Default: 3. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | ErrorResponse | TablePreviewResponse] + """ + + + kwargs = _get_kwargs( + table_name=table_name, +limit=limit, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + table_name: str, + *, + client: AuthenticatedClient | Client, + limit: int | Unset = 3, + +) -> Any | ErrorResponse | TablePreviewResponse | None: + """ Preview a Roe table + + Return column metadata plus a bounded sample of rows from one Roe table in the authenticated + organization. + + Args: + table_name (str): + limit (int | Unset): Default: 3. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | ErrorResponse | TablePreviewResponse + """ + + + return (await asyncio_detailed( + table_name=table_name, +client=client, +limit=limit, + + )).parsed diff --git a/src/roe/_generated/api/tables/tables_query_create.py b/src/roe/_generated/api/tables/tables_query_create.py new file mode 100644 index 0000000..4ef5003 --- /dev/null +++ b/src/roe/_generated/api/tables/tables_query_create.py @@ -0,0 +1,187 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.table_query_request_request import TableQueryRequestRequest +from ...models.table_query_submit_response import TableQuerySubmitResponse +from typing import cast + + + +def _get_kwargs( + *, + body: TableQueryRequestRequest, + +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + + + + + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/tables/query/", + } + + _kwargs["json"] = body.to_dict() + + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> TableQuerySubmitResponse | None: + if response.status_code == 202: + response_202 = TableQuerySubmitResponse.from_dict(response.json()) + + + + return response_202 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[TableQuerySubmitResponse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient | Client, + body: TableQueryRequestRequest, + +) -> Response[TableQuerySubmitResponse]: + """ Run a read-only Roe table query + + Run a read-only SQL query over public Roe tables. + + Args: + body (TableQueryRequestRequest): Request payload for running a public Roe table query. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[TableQuerySubmitResponse] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient | Client, + body: TableQueryRequestRequest, + +) -> TableQuerySubmitResponse | None: + """ Run a read-only Roe table query + + Run a read-only SQL query over public Roe tables. + + Args: + body (TableQueryRequestRequest): Request payload for running a public Roe table query. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + TableQuerySubmitResponse + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient | Client, + body: TableQueryRequestRequest, + +) -> Response[TableQuerySubmitResponse]: + """ Run a read-only Roe table query + + Run a read-only SQL query over public Roe tables. + + Args: + body (TableQueryRequestRequest): Request payload for running a public Roe table query. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[TableQuerySubmitResponse] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + *, + client: AuthenticatedClient | Client, + body: TableQueryRequestRequest, + +) -> TableQuerySubmitResponse | None: + """ Run a read-only Roe table query + + Run a read-only SQL query over public Roe tables. + + Args: + body (TableQueryRequestRequest): Request payload for running a public Roe table query. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + TableQuerySubmitResponse + """ + + + return (await asyncio_detailed( + client=client, +body=body, + + )).parsed diff --git a/src/roe/_generated/api/tables/tables_query_result_retrieve.py b/src/roe/_generated/api/tables/tables_query_result_retrieve.py new file mode 100644 index 0000000..b7bc858 --- /dev/null +++ b/src/roe/_generated/api/tables/tables_query_result_retrieve.py @@ -0,0 +1,180 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...types import Response, UNSET +from ... import errors + +from ...models.table_query_result_response import TableQueryResultResponse +from typing import cast +from uuid import UUID + + + +def _get_kwargs( + table_query_id: UUID, + +) -> dict[str, Any]: + + + + + + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/v1/tables/query/{table_query_id}/result/".format(table_query_id=quote(str(table_query_id), safe=""),), + } + + + return _kwargs + + + +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> TableQueryResultResponse | None: + if response.status_code == 200: + response_200 = TableQueryResultResponse.from_dict(response.json()) + + + + return response_200 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[TableQueryResultResponse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + table_query_id: UUID, + *, + client: AuthenticatedClient | Client, + +) -> Response[TableQueryResultResponse]: + """ Get a Roe table query result + + Poll or fetch one public Roe table query result. + + Args: + table_query_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[TableQueryResultResponse] + """ + + + kwargs = _get_kwargs( + table_query_id=table_query_id, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + table_query_id: UUID, + *, + client: AuthenticatedClient | Client, + +) -> TableQueryResultResponse | None: + """ Get a Roe table query result + + Poll or fetch one public Roe table query result. + + Args: + table_query_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + TableQueryResultResponse + """ + + + return sync_detailed( + table_query_id=table_query_id, +client=client, + + ).parsed + +async def asyncio_detailed( + table_query_id: UUID, + *, + client: AuthenticatedClient | Client, + +) -> Response[TableQueryResultResponse]: + """ Get a Roe table query result + + Poll or fetch one public Roe table query result. + + Args: + table_query_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[TableQueryResultResponse] + """ + + + kwargs = _get_kwargs( + table_query_id=table_query_id, + + ) + + response = await client.get_async_httpx_client().request( + **kwargs + ) + + return _build_response(client=client, response=response) + +async def asyncio( + table_query_id: UUID, + *, + client: AuthenticatedClient | Client, + +) -> TableQueryResultResponse | None: + """ Get a Roe table query result + + Poll or fetch one public Roe table query result. + + Args: + table_query_id (UUID): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + TableQueryResultResponse + """ + + + return (await asyncio_detailed( + table_query_id=table_query_id, +client=client, + + )).parsed diff --git a/src/roe/_generated/models/__init__.py b/src/roe/_generated/models/__init__.py index 87132f6..5990899 100644 --- a/src/roe/_generated/models/__init__.py +++ b/src/roe/_generated/models/__init__.py @@ -19,25 +19,60 @@ from .base_agent import BaseAgent from .base_agent_create_request import BaseAgentCreateRequest from .base_agent_update_request import BaseAgentUpdateRequest +from .connection import Connection +from .connection_auth_config import ConnectionAuthConfig +from .connection_list import ConnectionList +from .connection_request import ConnectionRequest +from .connector_list_response import ConnectorListResponse +from .connector_metadata import ConnectorMetadata +from .connector_type_enum import ConnectorTypeEnum +from .create_connection_request import CreateConnectionRequest +from .create_connection_request_auth_config import CreateConnectionRequestAuthConfig +from .create_connection_request_config import CreateConnectionRequestConfig from .create_policy import CreatePolicy from .create_policy_request import CreatePolicyRequest from .create_policy_version import CreatePolicyVersion from .create_policy_version_request import CreatePolicyVersionRequest +from .duplicate_connection_existing import DuplicateConnectionExisting +from .duplicate_connection_response import DuplicateConnectionResponse from .error_response import ErrorResponse from .paginated_agent_job_result_item_list import PaginatedAgentJobResultItemList from .paginated_base_agent_list import PaginatedBaseAgentList +from .paginated_connection_list_list import PaginatedConnectionListList from .paginated_policy_list import PaginatedPolicyList from .paginated_policy_version_list import PaginatedPolicyVersionList from .patched_base_agent_update_request import PatchedBaseAgentUpdateRequest from .patched_patched_agent_version_update_request_request import PatchedPatchedAgentVersionUpdateRequestRequest +from .patched_update_connection_request import PatchedUpdateConnectionRequest +from .patched_update_connection_request_auth_config import PatchedUpdateConnectionRequestAuthConfig +from .patched_update_connection_request_config import PatchedUpdateConnectionRequestConfig from .patched_update_policy_request import PatchedUpdatePolicyRequest from .policy import Policy from .policy_version import PolicyVersion from .policy_version_created_by import PolicyVersionCreatedBy +from .status_enum import StatusEnum from .supported_llm_model import SupportedLLMModel from .supported_llm_model_list import SupportedLLMModelList +from .table import Table +from .table_column import TableColumn +from .table_describe_response import TableDescribeResponse +from .table_list_response import TableListResponse +from .table_preview_response import TablePreviewResponse +from .table_preview_response_rows_item import TablePreviewResponseRowsItem +from .table_query_request_request import TableQueryRequestRequest +from .table_query_result_response import TableQueryResultResponse +from .table_query_result_response_columns_item import TableQueryResultResponseColumnsItem +from .table_query_result_response_rows_item import TableQueryResultResponseRowsItem +from .table_query_submit_response import TableQuerySubmitResponse from .table_upload_request import TableUploadRequest from .table_upload_response import TableUploadResponse +from .test_connection import TestConnection +from .test_connection_credentials_request import TestConnectionCredentialsRequest +from .test_connection_credentials_request_auth_config import TestConnectionCredentialsRequestAuthConfig +from .test_connection_credentials_request_config import TestConnectionCredentialsRequestConfig +from .update_connection import UpdateConnection +from .update_connection_auth_config import UpdateConnectionAuthConfig +from .update_connection_config import UpdateConnectionConfig from .update_policy import UpdatePolicy from .update_policy_request import UpdatePolicyRequest from .user_info import UserInfo @@ -62,25 +97,60 @@ "BaseAgent", "BaseAgentCreateRequest", "BaseAgentUpdateRequest", + "Connection", + "ConnectionAuthConfig", + "ConnectionList", + "ConnectionRequest", + "ConnectorListResponse", + "ConnectorMetadata", + "ConnectorTypeEnum", + "CreateConnectionRequest", + "CreateConnectionRequestAuthConfig", + "CreateConnectionRequestConfig", "CreatePolicy", "CreatePolicyRequest", "CreatePolicyVersion", "CreatePolicyVersionRequest", + "DuplicateConnectionExisting", + "DuplicateConnectionResponse", "ErrorResponse", "PaginatedAgentJobResultItemList", "PaginatedBaseAgentList", + "PaginatedConnectionListList", "PaginatedPolicyList", "PaginatedPolicyVersionList", "PatchedBaseAgentUpdateRequest", "PatchedPatchedAgentVersionUpdateRequestRequest", + "PatchedUpdateConnectionRequest", + "PatchedUpdateConnectionRequestAuthConfig", + "PatchedUpdateConnectionRequestConfig", "PatchedUpdatePolicyRequest", "Policy", "PolicyVersion", "PolicyVersionCreatedBy", + "StatusEnum", "SupportedLLMModel", "SupportedLLMModelList", + "Table", + "TableColumn", + "TableDescribeResponse", + "TableListResponse", + "TablePreviewResponse", + "TablePreviewResponseRowsItem", + "TableQueryRequestRequest", + "TableQueryResultResponse", + "TableQueryResultResponseColumnsItem", + "TableQueryResultResponseRowsItem", + "TableQuerySubmitResponse", "TableUploadRequest", "TableUploadResponse", + "TestConnection", + "TestConnectionCredentialsRequest", + "TestConnectionCredentialsRequestAuthConfig", + "TestConnectionCredentialsRequestConfig", + "UpdateConnection", + "UpdateConnectionAuthConfig", + "UpdateConnectionConfig", "UpdatePolicy", "UpdatePolicyRequest", "UserInfo", diff --git a/src/roe/_generated/models/agent_version_create_request.py b/src/roe/_generated/models/agent_version_create_request.py index 5c2aa82..68d63ad 100644 --- a/src/roe/_generated/models/agent_version_create_request.py +++ b/src/roe/_generated/models/agent_version_create_request.py @@ -25,16 +25,16 @@ class AgentVersionCreateRequest: """ Serializer for creating new agent versions Attributes: - input_definitions (Any): List of input definitions for this agent version. - engine_config (Any): Engine configuration as a dictionary of string key-value pairs. version_name (str | Unset): Version name for the agent version. Defaults to 'unnamed version' if not provided. description (None | str | Unset): Description for the agent version. + input_definitions (Any | Unset): List of input definitions for this agent version. + engine_config (Any | Unset): Engine configuration as a dictionary of string key-value pairs. """ - input_definitions: Any - engine_config: Any version_name: str | Unset = UNSET description: None | str | Unset = UNSET + input_definitions: Any | Unset = UNSET + engine_config: Any | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -42,10 +42,6 @@ class AgentVersionCreateRequest: def to_dict(self) -> dict[str, Any]: - input_definitions = self.input_definitions - - engine_config = self.engine_config - version_name = self.version_name description: None | str | Unset @@ -54,17 +50,23 @@ def to_dict(self) -> dict[str, Any]: else: description = self.description + input_definitions = self.input_definitions + + engine_config = self.engine_config + field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update({ - "input_definitions": input_definitions, - "engine_config": engine_config, }) if version_name is not UNSET: field_dict["version_name"] = version_name if description is not UNSET: field_dict["description"] = description + if input_definitions is not UNSET: + field_dict["input_definitions"] = input_definitions + if engine_config is not UNSET: + field_dict["engine_config"] = engine_config return field_dict @@ -73,10 +75,6 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) - input_definitions = d.pop("input_definitions") - - engine_config = d.pop("engine_config") - version_name = d.pop("version_name", UNSET) def _parse_description(data: object) -> None | str | Unset: @@ -89,11 +87,15 @@ def _parse_description(data: object) -> None | str | Unset: description = _parse_description(d.pop("description", UNSET)) + input_definitions = d.pop("input_definitions", UNSET) + + engine_config = d.pop("engine_config", UNSET) + agent_version_create_request = cls( - input_definitions=input_definitions, - engine_config=engine_config, version_name=version_name, description=description, + input_definitions=input_definitions, + engine_config=engine_config, ) diff --git a/src/roe/_generated/models/base_agent_create_request.py b/src/roe/_generated/models/base_agent_create_request.py index 49d607d..bf3bfbb 100644 --- a/src/roe/_generated/models/base_agent_create_request.py +++ b/src/roe/_generated/models/base_agent_create_request.py @@ -27,20 +27,21 @@ class BaseAgentCreateRequest: Attributes: name (str): Name of the base agent. engine_class_id (str): Engine class ID for the agent. - organization_id (UUID): Organization ID where the agent belongs. - input_definitions (Any): Input definitions for the first version. - engine_config (Any): Engine configuration for the first version. + organization_id (UUID | Unset): Optional. Ignored by the API — the organization is derived from the + authenticated API key/token. Accepted for backwards compatibility. version_name (str | Unset): Name of the first version. description (str | Unset): Description of the first version. + input_definitions (Any | Unset): Input definitions for the first version. + engine_config (Any | Unset): Engine configuration for the first version. """ name: str engine_class_id: str - organization_id: UUID - input_definitions: Any - engine_config: Any + organization_id: UUID | Unset = UNSET version_name: str | Unset = UNSET description: str | Unset = UNSET + input_definitions: Any | Unset = UNSET + engine_config: Any | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -52,30 +53,35 @@ def to_dict(self) -> dict[str, Any]: engine_class_id = self.engine_class_id - organization_id = str(self.organization_id) - - input_definitions = self.input_definitions - - engine_config = self.engine_config + organization_id: str | Unset = UNSET + if not isinstance(self.organization_id, Unset): + organization_id = str(self.organization_id) version_name = self.version_name description = self.description + input_definitions = self.input_definitions + + engine_config = self.engine_config + field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update({ "name": name, "engine_class_id": engine_class_id, - "organization_id": organization_id, - "input_definitions": input_definitions, - "engine_config": engine_config, }) + if organization_id is not UNSET: + field_dict["organization_id"] = organization_id if version_name is not UNSET: field_dict["version_name"] = version_name if description is not UNSET: field_dict["description"] = description + if input_definitions is not UNSET: + field_dict["input_definitions"] = input_definitions + if engine_config is not UNSET: + field_dict["engine_config"] = engine_config return field_dict @@ -88,27 +94,32 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: engine_class_id = d.pop("engine_class_id") - organization_id = UUID(d.pop("organization_id")) + _organization_id = d.pop("organization_id", UNSET) + organization_id: UUID | Unset + if isinstance(_organization_id, Unset): + organization_id = UNSET + else: + organization_id = UUID(_organization_id) - input_definitions = d.pop("input_definitions") - - engine_config = d.pop("engine_config") - version_name = d.pop("version_name", UNSET) description = d.pop("description", UNSET) + input_definitions = d.pop("input_definitions", UNSET) + + engine_config = d.pop("engine_config", UNSET) + base_agent_create_request = cls( name=name, engine_class_id=engine_class_id, organization_id=organization_id, - input_definitions=input_definitions, - engine_config=engine_config, version_name=version_name, description=description, + input_definitions=input_definitions, + engine_config=engine_config, ) diff --git a/src/roe/_generated/models/connection.py b/src/roe/_generated/models/connection.py new file mode 100644 index 0000000..e48384c --- /dev/null +++ b/src/roe/_generated/models/connection.py @@ -0,0 +1,215 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.status_enum import StatusEnum +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + +if TYPE_CHECKING: + from ..models.connection_auth_config import ConnectionAuthConfig + + + + + +T = TypeVar("T", bound="Connection") + + + +@_attrs_define +class Connection: + """ Serializer for Connection model. + Returns: + - config: Non-sensitive config from DB + - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) + + Attributes: + id (UUID): + user (int | None): + organization (UUID): + connector_type (str): + connector_display_name (str): Get the display name for the connector type. + name (str): + auth_config (ConnectionAuthConfig): + created_at (datetime.datetime): + updated_at (datetime.datetime): + description (str | Unset): + config (Any | Unset): + status (StatusEnum | Unset): * `active` - Active + * `error` - Error + """ + + id: UUID + user: int | None + organization: UUID + connector_type: str + connector_display_name: str + name: str + auth_config: ConnectionAuthConfig + created_at: datetime.datetime + updated_at: datetime.datetime + description: str | Unset = UNSET + config: Any | Unset = UNSET + status: StatusEnum | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.connection_auth_config import ConnectionAuthConfig + id = str(self.id) + + user: int | None + user = self.user + + organization = str(self.organization) + + connector_type = self.connector_type + + connector_display_name = self.connector_display_name + + name = self.name + + auth_config = self.auth_config.to_dict() + + created_at = self.created_at.isoformat() + + updated_at = self.updated_at.isoformat() + + description = self.description + + config = self.config + + status: str | Unset = UNSET + if not isinstance(self.status, Unset): + status = self.status.value + + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "id": id, + "user": user, + "organization": organization, + "connector_type": connector_type, + "connector_display_name": connector_display_name, + "name": name, + "auth_config": auth_config, + "created_at": created_at, + "updated_at": updated_at, + }) + if description is not UNSET: + field_dict["description"] = description + if config is not UNSET: + field_dict["config"] = config + if status is not UNSET: + field_dict["status"] = status + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.connection_auth_config import ConnectionAuthConfig + d = dict(src_dict) + id = UUID(d.pop("id")) + + + + + def _parse_user(data: object) -> int | None: + if data is None: + return data + return cast(int | None, data) + + user = _parse_user(d.pop("user")) + + + organization = UUID(d.pop("organization")) + + + + + connector_type = d.pop("connector_type") + + connector_display_name = d.pop("connector_display_name") + + name = d.pop("name") + + auth_config = ConnectionAuthConfig.from_dict(d.pop("auth_config")) + + + + + created_at = isoparse(d.pop("created_at")) + + + + + updated_at = isoparse(d.pop("updated_at")) + + + + + description = d.pop("description", UNSET) + + config = d.pop("config", UNSET) + + _status = d.pop("status", UNSET) + status: StatusEnum | Unset + if isinstance(_status, Unset): + status = UNSET + else: + status = StatusEnum(_status) + + + + + connection = cls( + id=id, + user=user, + organization=organization, + connector_type=connector_type, + connector_display_name=connector_display_name, + name=name, + auth_config=auth_config, + created_at=created_at, + updated_at=updated_at, + description=description, + config=config, + status=status, + ) + + + connection.additional_properties = d + return connection + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connection_auth_config.py b/src/roe/_generated/models/connection_auth_config.py new file mode 100644 index 0000000..637d93c --- /dev/null +++ b/src/roe/_generated/models/connection_auth_config.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="ConnectionAuthConfig") + + + +@_attrs_define +class ConnectionAuthConfig: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + connection_auth_config = cls( + ) + + + connection_auth_config.additional_properties = d + return connection_auth_config + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connection_list.py b/src/roe/_generated/models/connection_list.py new file mode 100644 index 0000000..74f4bd3 --- /dev/null +++ b/src/roe/_generated/models/connection_list.py @@ -0,0 +1,198 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.status_enum import StatusEnum +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="ConnectionList") + + + +@_attrs_define +class ConnectionList: + """ Lightweight serializer for listing connections. + Only returns metadata, no auth_config (avoids Secrets Manager calls). + + Attributes: + id (UUID): + user (int | None): + organization (UUID): + connector_type (str): + connector_display_name (str): Get the display name for the connector type. + name (str): + created_at (datetime.datetime): + updated_at (datetime.datetime): + description (str | Unset): + config (Any | Unset): + status (StatusEnum | Unset): * `active` - Active + * `error` - Error + """ + + id: UUID + user: int | None + organization: UUID + connector_type: str + connector_display_name: str + name: str + created_at: datetime.datetime + updated_at: datetime.datetime + description: str | Unset = UNSET + config: Any | Unset = UNSET + status: StatusEnum | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + id = str(self.id) + + user: int | None + user = self.user + + organization = str(self.organization) + + connector_type = self.connector_type + + connector_display_name = self.connector_display_name + + name = self.name + + created_at = self.created_at.isoformat() + + updated_at = self.updated_at.isoformat() + + description = self.description + + config = self.config + + status: str | Unset = UNSET + if not isinstance(self.status, Unset): + status = self.status.value + + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "id": id, + "user": user, + "organization": organization, + "connector_type": connector_type, + "connector_display_name": connector_display_name, + "name": name, + "created_at": created_at, + "updated_at": updated_at, + }) + if description is not UNSET: + field_dict["description"] = description + if config is not UNSET: + field_dict["config"] = config + if status is not UNSET: + field_dict["status"] = status + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + id = UUID(d.pop("id")) + + + + + def _parse_user(data: object) -> int | None: + if data is None: + return data + return cast(int | None, data) + + user = _parse_user(d.pop("user")) + + + organization = UUID(d.pop("organization")) + + + + + connector_type = d.pop("connector_type") + + connector_display_name = d.pop("connector_display_name") + + name = d.pop("name") + + created_at = isoparse(d.pop("created_at")) + + + + + updated_at = isoparse(d.pop("updated_at")) + + + + + description = d.pop("description", UNSET) + + config = d.pop("config", UNSET) + + _status = d.pop("status", UNSET) + status: StatusEnum | Unset + if isinstance(_status, Unset): + status = UNSET + else: + status = StatusEnum(_status) + + + + + connection_list = cls( + id=id, + user=user, + organization=organization, + connector_type=connector_type, + connector_display_name=connector_display_name, + name=name, + created_at=created_at, + updated_at=updated_at, + description=description, + config=config, + status=status, + ) + + + connection_list.additional_properties = d + return connection_list + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connection_request.py b/src/roe/_generated/models/connection_request.py new file mode 100644 index 0000000..4c7578e --- /dev/null +++ b/src/roe/_generated/models/connection_request.py @@ -0,0 +1,141 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.status_enum import StatusEnum +from ..types import UNSET, Unset +from uuid import UUID + + + + + + +T = TypeVar("T", bound="ConnectionRequest") + + + +@_attrs_define +class ConnectionRequest: + """ Serializer for Connection model. + Returns: + - config: Non-sensitive config from DB + - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) + + Attributes: + organization (UUID): + connector_type (str): + name (str): + description (str | Unset): + config (Any | Unset): + status (StatusEnum | Unset): * `active` - Active + * `error` - Error + """ + + organization: UUID + connector_type: str + name: str + description: str | Unset = UNSET + config: Any | Unset = UNSET + status: StatusEnum | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + organization = str(self.organization) + + connector_type = self.connector_type + + name = self.name + + description = self.description + + config = self.config + + status: str | Unset = UNSET + if not isinstance(self.status, Unset): + status = self.status.value + + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "organization": organization, + "connector_type": connector_type, + "name": name, + }) + if description is not UNSET: + field_dict["description"] = description + if config is not UNSET: + field_dict["config"] = config + if status is not UNSET: + field_dict["status"] = status + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + organization = UUID(d.pop("organization")) + + + + + connector_type = d.pop("connector_type") + + name = d.pop("name") + + description = d.pop("description", UNSET) + + config = d.pop("config", UNSET) + + _status = d.pop("status", UNSET) + status: StatusEnum | Unset + if isinstance(_status, Unset): + status = UNSET + else: + status = StatusEnum(_status) + + + + + connection_request = cls( + organization=organization, + connector_type=connector_type, + name=name, + description=description, + config=config, + status=status, + ) + + + connection_request.additional_properties = d + return connection_request + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connector_list_response.py b/src/roe/_generated/models/connector_list_response.py new file mode 100644 index 0000000..91cfbcb --- /dev/null +++ b/src/roe/_generated/models/connector_list_response.py @@ -0,0 +1,94 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.connector_metadata import ConnectorMetadata + + + + + +T = TypeVar("T", bound="ConnectorListResponse") + + + +@_attrs_define +class ConnectorListResponse: + """ + Attributes: + connectors (list[ConnectorMetadata]): + """ + + connectors: list[ConnectorMetadata] + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.connector_metadata import ConnectorMetadata + connectors = [] + for connectors_item_data in self.connectors: + connectors_item = connectors_item_data.to_dict() + connectors.append(connectors_item) + + + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "connectors": connectors, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.connector_metadata import ConnectorMetadata + d = dict(src_dict) + connectors = [] + _connectors = d.pop("connectors") + for connectors_item_data in (_connectors): + connectors_item = ConnectorMetadata.from_dict(connectors_item_data) + + + + connectors.append(connectors_item) + + + connector_list_response = cls( + connectors=connectors, + ) + + + connector_list_response.additional_properties = d + return connector_list_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connector_metadata.py b/src/roe/_generated/models/connector_metadata.py new file mode 100644 index 0000000..1492f8f --- /dev/null +++ b/src/roe/_generated/models/connector_metadata.py @@ -0,0 +1,149 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="ConnectorMetadata") + + + +@_attrs_define +class ConnectorMetadata: + """ Serializer for connector metadata. + + Attributes: + id (str): + display_name (str): + description (str): + icon (str): + category (str): + config_schema (Any): + auth_schema (Any): + supports_delivery (bool): + delivery_config_schema (Any | None): + """ + + id: str + display_name: str + description: str + icon: str + category: str + config_schema: Any + auth_schema: Any + supports_delivery: bool + delivery_config_schema: Any | None + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + id = self.id + + display_name = self.display_name + + description = self.description + + icon = self.icon + + category = self.category + + config_schema = self.config_schema + + auth_schema = self.auth_schema + + supports_delivery = self.supports_delivery + + delivery_config_schema: Any | None + delivery_config_schema = self.delivery_config_schema + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "id": id, + "display_name": display_name, + "description": description, + "icon": icon, + "category": category, + "config_schema": config_schema, + "auth_schema": auth_schema, + "supports_delivery": supports_delivery, + "delivery_config_schema": delivery_config_schema, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + id = d.pop("id") + + display_name = d.pop("display_name") + + description = d.pop("description") + + icon = d.pop("icon") + + category = d.pop("category") + + config_schema = d.pop("config_schema") + + auth_schema = d.pop("auth_schema") + + supports_delivery = d.pop("supports_delivery") + + def _parse_delivery_config_schema(data: object) -> Any | None: + if data is None: + return data + return cast(Any | None, data) + + delivery_config_schema = _parse_delivery_config_schema(d.pop("delivery_config_schema")) + + + connector_metadata = cls( + id=id, + display_name=display_name, + description=description, + icon=icon, + category=category, + config_schema=config_schema, + auth_schema=auth_schema, + supports_delivery=supports_delivery, + delivery_config_schema=delivery_config_schema, + ) + + + connector_metadata.additional_properties = d + return connector_metadata + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connector_type_enum.py b/src/roe/_generated/models/connector_type_enum.py new file mode 100644 index 0000000..b2c4110 --- /dev/null +++ b/src/roe/_generated/models/connector_type_enum.py @@ -0,0 +1,21 @@ +from enum import Enum + +class ConnectorTypeEnum(str, Enum): + CHECKOUT_COM = "checkout_com" + CUSTOM_API = "custom_api" + GOOGLE_DRIVE = "google_drive" + INTERCOM = "intercom" + LEXIS_NEXIS = "lexis_nexis" + PLAID = "plaid" + S3 = "s3" + SALESFORCE = "salesforce" + SARDINE = "sardine" + SHAREPOINT = "sharepoint" + SNOWFLAKE = "snowflake" + SOCURE = "socure" + STRIPE = "stripe" + WEB_APPLICATION = "web_application" + ZENDESK = "zendesk" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/roe/_generated/models/create_connection_request.py b/src/roe/_generated/models/create_connection_request.py new file mode 100644 index 0000000..95c1899 --- /dev/null +++ b/src/roe/_generated/models/create_connection_request.py @@ -0,0 +1,186 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.connector_type_enum import ConnectorTypeEnum +from ..types import UNSET, Unset +from typing import cast +from uuid import UUID + +if TYPE_CHECKING: + from ..models.create_connection_request_auth_config import CreateConnectionRequestAuthConfig + from ..models.create_connection_request_config import CreateConnectionRequestConfig + + + + + +T = TypeVar("T", bound="CreateConnectionRequest") + + + +@_attrs_define +class CreateConnectionRequest: + """ Serializer for creating connections. + Accepts full config, splits into config (DB) and auth (Secrets Manager). + + Attributes: + connector_type (ConnectorTypeEnum): * `snowflake` - SNOWFLAKE + * `s3` - S3 + * `sharepoint` - SHAREPOINT + * `zendesk` - ZENDESK + * `google_drive` - GOOGLE_DRIVE + * `salesforce` - SALESFORCE + * `web_application` - WEB_APPLICATION + * `custom_api` - CUSTOM_API + * `lexis_nexis` - LEXIS_NEXIS + * `sardine` - SARDINE + * `intercom` - INTERCOM + * `stripe` - STRIPE + * `plaid` - PLAID + * `checkout_com` - CHECKOUT_COM + * `socure` - SOCURE + name (str): + config (CreateConnectionRequestConfig): + description (str | Unset): + auth_config (CreateConnectionRequestAuthConfig | Unset): + organization_id (None | Unset | UUID): + """ + + connector_type: ConnectorTypeEnum + name: str + config: CreateConnectionRequestConfig + description: str | Unset = UNSET + auth_config: CreateConnectionRequestAuthConfig | Unset = UNSET + organization_id: None | Unset | UUID = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.create_connection_request_auth_config import CreateConnectionRequestAuthConfig + from ..models.create_connection_request_config import CreateConnectionRequestConfig + connector_type = self.connector_type.value + + name = self.name + + config = self.config.to_dict() + + description = self.description + + auth_config: dict[str, Any] | Unset = UNSET + if not isinstance(self.auth_config, Unset): + auth_config = self.auth_config.to_dict() + + organization_id: None | str | Unset + if isinstance(self.organization_id, Unset): + organization_id = UNSET + elif isinstance(self.organization_id, UUID): + organization_id = str(self.organization_id) + else: + organization_id = self.organization_id + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "connector_type": connector_type, + "name": name, + "config": config, + }) + if description is not UNSET: + field_dict["description"] = description + if auth_config is not UNSET: + field_dict["auth_config"] = auth_config + if organization_id is not UNSET: + field_dict["organization_id"] = organization_id + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.create_connection_request_auth_config import CreateConnectionRequestAuthConfig + from ..models.create_connection_request_config import CreateConnectionRequestConfig + d = dict(src_dict) + connector_type = ConnectorTypeEnum(d.pop("connector_type")) + + + + + name = d.pop("name") + + config = CreateConnectionRequestConfig.from_dict(d.pop("config")) + + + + + description = d.pop("description", UNSET) + + _auth_config = d.pop("auth_config", UNSET) + auth_config: CreateConnectionRequestAuthConfig | Unset + if isinstance(_auth_config, Unset): + auth_config = UNSET + else: + auth_config = CreateConnectionRequestAuthConfig.from_dict(_auth_config) + + + + + def _parse_organization_id(data: object) -> None | Unset | UUID: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, str): + raise TypeError() + organization_id_type_0 = UUID(data) + + + + return organization_id_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(None | Unset | UUID, data) + + organization_id = _parse_organization_id(d.pop("organization_id", UNSET)) + + + create_connection_request = cls( + connector_type=connector_type, + name=name, + config=config, + description=description, + auth_config=auth_config, + organization_id=organization_id, + ) + + + create_connection_request.additional_properties = d + return create_connection_request + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/create_connection_request_auth_config.py b/src/roe/_generated/models/create_connection_request_auth_config.py new file mode 100644 index 0000000..ac93e0c --- /dev/null +++ b/src/roe/_generated/models/create_connection_request_auth_config.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="CreateConnectionRequestAuthConfig") + + + +@_attrs_define +class CreateConnectionRequestAuthConfig: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + create_connection_request_auth_config = cls( + ) + + + create_connection_request_auth_config.additional_properties = d + return create_connection_request_auth_config + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/create_connection_request_config.py b/src/roe/_generated/models/create_connection_request_config.py new file mode 100644 index 0000000..a29b30e --- /dev/null +++ b/src/roe/_generated/models/create_connection_request_config.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="CreateConnectionRequestConfig") + + + +@_attrs_define +class CreateConnectionRequestConfig: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + create_connection_request_config = cls( + ) + + + create_connection_request_config.additional_properties = d + return create_connection_request_config + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/duplicate_connection_existing.py b/src/roe/_generated/models/duplicate_connection_existing.py new file mode 100644 index 0000000..4c9c254 --- /dev/null +++ b/src/roe/_generated/models/duplicate_connection_existing.py @@ -0,0 +1,89 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from uuid import UUID + + + + + + +T = TypeVar("T", bound="DuplicateConnectionExisting") + + + +@_attrs_define +class DuplicateConnectionExisting: + """ Identifying summary of the existing connection that triggered a 409. + + Attributes: + id (UUID): + name (str): + """ + + id: UUID + name: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + id = str(self.id) + + name = self.name + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "id": id, + "name": name, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + id = UUID(d.pop("id")) + + + + + name = d.pop("name") + + duplicate_connection_existing = cls( + id=id, + name=name, + ) + + + duplicate_connection_existing.additional_properties = d + return duplicate_connection_existing + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/duplicate_connection_response.py b/src/roe/_generated/models/duplicate_connection_response.py new file mode 100644 index 0000000..96afdb9 --- /dev/null +++ b/src/roe/_generated/models/duplicate_connection_response.py @@ -0,0 +1,94 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.duplicate_connection_existing import DuplicateConnectionExisting + + + + + +T = TypeVar("T", bound="DuplicateConnectionResponse") + + + +@_attrs_define +class DuplicateConnectionResponse: + """ Body of the 409 response when create/update hits a strict-identity duplicate. + + Attributes: + error (str): + existing_connection (DuplicateConnectionExisting): Identifying summary of the existing connection that triggered + a 409. + """ + + error: str + existing_connection: DuplicateConnectionExisting + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.duplicate_connection_existing import DuplicateConnectionExisting + error = self.error + + existing_connection = self.existing_connection.to_dict() + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + "existing_connection": existing_connection, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.duplicate_connection_existing import DuplicateConnectionExisting + d = dict(src_dict) + error = d.pop("error") + + existing_connection = DuplicateConnectionExisting.from_dict(d.pop("existing_connection")) + + + + + duplicate_connection_response = cls( + error=error, + existing_connection=existing_connection, + ) + + + duplicate_connection_response.additional_properties = d + return duplicate_connection_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/paginated_connection_list_list.py b/src/roe/_generated/models/paginated_connection_list_list.py new file mode 100644 index 0000000..0f0b8f9 --- /dev/null +++ b/src/roe/_generated/models/paginated_connection_list_list.py @@ -0,0 +1,145 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + +if TYPE_CHECKING: + from ..models.connection_list import ConnectionList + + + + + +T = TypeVar("T", bound="PaginatedConnectionListList") + + + +@_attrs_define +class PaginatedConnectionListList: + """ + Attributes: + count (int): Example: 123. + results (list[ConnectionList]): + next_ (None | str | Unset): Example: http://api.example.org/accounts/?page=4. + previous (None | str | Unset): Example: http://api.example.org/accounts/?page=2. + """ + + count: int + results: list[ConnectionList] + next_: None | str | Unset = UNSET + previous: None | str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.connection_list import ConnectionList + count = self.count + + results = [] + for results_item_data in self.results: + results_item = results_item_data.to_dict() + results.append(results_item) + + + + next_: None | str | Unset + if isinstance(self.next_, Unset): + next_ = UNSET + else: + next_ = self.next_ + + previous: None | str | Unset + if isinstance(self.previous, Unset): + previous = UNSET + else: + previous = self.previous + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "count": count, + "results": results, + }) + if next_ is not UNSET: + field_dict["next"] = next_ + if previous is not UNSET: + field_dict["previous"] = previous + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.connection_list import ConnectionList + d = dict(src_dict) + count = d.pop("count") + + results = [] + _results = d.pop("results") + for results_item_data in (_results): + results_item = ConnectionList.from_dict(results_item_data) + + + + results.append(results_item) + + + def _parse_next_(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + next_ = _parse_next_(d.pop("next", UNSET)) + + + def _parse_previous(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + previous = _parse_previous(d.pop("previous", UNSET)) + + + paginated_connection_list_list = cls( + count=count, + results=results, + next_=next_, + previous=previous, + ) + + + paginated_connection_list_list.additional_properties = d + return paginated_connection_list_list + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/patched_update_connection_request.py b/src/roe/_generated/models/patched_update_connection_request.py new file mode 100644 index 0000000..1e8e870 --- /dev/null +++ b/src/roe/_generated/models/patched_update_connection_request.py @@ -0,0 +1,146 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + +if TYPE_CHECKING: + from ..models.patched_update_connection_request_auth_config import PatchedUpdateConnectionRequestAuthConfig + from ..models.patched_update_connection_request_config import PatchedUpdateConnectionRequestConfig + + + + + +T = TypeVar("T", bound="PatchedUpdateConnectionRequest") + + + +@_attrs_define +class PatchedUpdateConnectionRequest: + """ Serializer for updating connections. + + Cross-state Pydantic validation (config + auth) lives in the view's + ``update()`` method now -- see ``connections.views. + ConnectionRetrieveUpdateDestroyView.update``. That path is the single + source of truth for canonical validation + write, mirrors the create + path's ``service.create_connection_with_secrets``, AND correctly + handles the SM-fetch-failure case for the unchanged-auth branch + (returns 502 / opportunistic backfill instead of silently corrupting + the fingerprint by hashing ``{}``). Re-running the same validation + here would (a) double the work, (b) bypass the SM-failure semantics, + and (c) leak Pydantic field/value details through DRF's generic 400 + handler. The serializer only does shape checks. + + Attributes: + name (str | Unset): + description (str | Unset): + config (PatchedUpdateConnectionRequestConfig | Unset): + auth_config (PatchedUpdateConnectionRequestAuthConfig | Unset): + """ + + name: str | Unset = UNSET + description: str | Unset = UNSET + config: PatchedUpdateConnectionRequestConfig | Unset = UNSET + auth_config: PatchedUpdateConnectionRequestAuthConfig | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.patched_update_connection_request_auth_config import PatchedUpdateConnectionRequestAuthConfig + from ..models.patched_update_connection_request_config import PatchedUpdateConnectionRequestConfig + name = self.name + + description = self.description + + config: dict[str, Any] | Unset = UNSET + if not isinstance(self.config, Unset): + config = self.config.to_dict() + + auth_config: dict[str, Any] | Unset = UNSET + if not isinstance(self.auth_config, Unset): + auth_config = self.auth_config.to_dict() + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if name is not UNSET: + field_dict["name"] = name + if description is not UNSET: + field_dict["description"] = description + if config is not UNSET: + field_dict["config"] = config + if auth_config is not UNSET: + field_dict["auth_config"] = auth_config + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.patched_update_connection_request_auth_config import PatchedUpdateConnectionRequestAuthConfig + from ..models.patched_update_connection_request_config import PatchedUpdateConnectionRequestConfig + d = dict(src_dict) + name = d.pop("name", UNSET) + + description = d.pop("description", UNSET) + + _config = d.pop("config", UNSET) + config: PatchedUpdateConnectionRequestConfig | Unset + if isinstance(_config, Unset): + config = UNSET + else: + config = PatchedUpdateConnectionRequestConfig.from_dict(_config) + + + + + _auth_config = d.pop("auth_config", UNSET) + auth_config: PatchedUpdateConnectionRequestAuthConfig | Unset + if isinstance(_auth_config, Unset): + auth_config = UNSET + else: + auth_config = PatchedUpdateConnectionRequestAuthConfig.from_dict(_auth_config) + + + + + patched_update_connection_request = cls( + name=name, + description=description, + config=config, + auth_config=auth_config, + ) + + + patched_update_connection_request.additional_properties = d + return patched_update_connection_request + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/patched_update_connection_request_auth_config.py b/src/roe/_generated/models/patched_update_connection_request_auth_config.py new file mode 100644 index 0000000..02fcca4 --- /dev/null +++ b/src/roe/_generated/models/patched_update_connection_request_auth_config.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="PatchedUpdateConnectionRequestAuthConfig") + + + +@_attrs_define +class PatchedUpdateConnectionRequestAuthConfig: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + patched_update_connection_request_auth_config = cls( + ) + + + patched_update_connection_request_auth_config.additional_properties = d + return patched_update_connection_request_auth_config + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/patched_update_connection_request_config.py b/src/roe/_generated/models/patched_update_connection_request_config.py new file mode 100644 index 0000000..825d9d8 --- /dev/null +++ b/src/roe/_generated/models/patched_update_connection_request_config.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="PatchedUpdateConnectionRequestConfig") + + + +@_attrs_define +class PatchedUpdateConnectionRequestConfig: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + patched_update_connection_request_config = cls( + ) + + + patched_update_connection_request_config.additional_properties = d + return patched_update_connection_request_config + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/status_enum.py b/src/roe/_generated/models/status_enum.py new file mode 100644 index 0000000..52577af --- /dev/null +++ b/src/roe/_generated/models/status_enum.py @@ -0,0 +1,8 @@ +from enum import Enum + +class StatusEnum(str, Enum): + ACTIVE = "active" + ERROR = "error" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/roe/_generated/models/table.py b/src/roe/_generated/models/table.py new file mode 100644 index 0000000..b23b11a --- /dev/null +++ b/src/roe/_generated/models/table.py @@ -0,0 +1,103 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.table_column import TableColumn + + + + + +T = TypeVar("T", bound="Table") + + + +@_attrs_define +class Table: + """ Serializer for table information. + + Attributes: + name (str): Name of the table + columns (list[TableColumn]): List of columns in the table + """ + + name: str + columns: list[TableColumn] + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.table_column import TableColumn + name = self.name + + columns = [] + for columns_item_data in self.columns: + columns_item = columns_item_data.to_dict() + columns.append(columns_item) + + + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "name": name, + "columns": columns, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.table_column import TableColumn + d = dict(src_dict) + name = d.pop("name") + + columns = [] + _columns = d.pop("columns") + for columns_item_data in (_columns): + columns_item = TableColumn.from_dict(columns_item_data) + + + + columns.append(columns_item) + + + table = cls( + name=name, + columns=columns, + ) + + + table.additional_properties = d + return table + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/table_column.py b/src/roe/_generated/models/table_column.py new file mode 100644 index 0000000..2e0ddb1 --- /dev/null +++ b/src/roe/_generated/models/table_column.py @@ -0,0 +1,85 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="TableColumn") + + + +@_attrs_define +class TableColumn: + """ Serializer for table column information. + + Attributes: + name (str): Name of the column + type_ (str): Type of the column (e.g., String, UInt64) + """ + + name: str + type_: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + name = self.name + + type_ = self.type_ + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "name": name, + "type": type_, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + type_ = d.pop("type") + + table_column = cls( + name=name, + type_=type_, + ) + + + table_column.additional_properties = d + return table_column + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/table_describe_response.py b/src/roe/_generated/models/table_describe_response.py new file mode 100644 index 0000000..1135a6e --- /dev/null +++ b/src/roe/_generated/models/table_describe_response.py @@ -0,0 +1,148 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from dateutil.parser import isoparse +from typing import cast +import datetime + +if TYPE_CHECKING: + from ..models.table_column import TableColumn + + + + + +T = TypeVar("T", bound="TableDescribeResponse") + + + +@_attrs_define +class TableDescribeResponse: + """ Response payload for describing a public Roe table. + + Attributes: + table_name (str): Name of the table + columns (list[TableColumn]): List of columns in the table + row_count (int | None): Total row count if ClickHouse can determine it from metadata without scanning the table + updated_at (datetime.datetime | None): Latest ClickHouse table metadata modification timestamp if available + """ + + table_name: str + columns: list[TableColumn] + row_count: int | None + updated_at: datetime.datetime | None + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.table_column import TableColumn + table_name = self.table_name + + columns = [] + for columns_item_data in self.columns: + columns_item = columns_item_data.to_dict() + columns.append(columns_item) + + + + row_count: int | None + row_count = self.row_count + + updated_at: None | str + if isinstance(self.updated_at, datetime.datetime): + updated_at = self.updated_at.isoformat() + else: + updated_at = self.updated_at + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "table_name": table_name, + "columns": columns, + "row_count": row_count, + "updated_at": updated_at, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.table_column import TableColumn + d = dict(src_dict) + table_name = d.pop("table_name") + + columns = [] + _columns = d.pop("columns") + for columns_item_data in (_columns): + columns_item = TableColumn.from_dict(columns_item_data) + + + + columns.append(columns_item) + + + def _parse_row_count(data: object) -> int | None: + if data is None: + return data + return cast(int | None, data) + + row_count = _parse_row_count(d.pop("row_count")) + + + def _parse_updated_at(data: object) -> datetime.datetime | None: + if data is None: + return data + try: + if not isinstance(data, str): + raise TypeError() + updated_at_type_0 = isoparse(data) + + + + return updated_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.datetime | None, data) + + updated_at = _parse_updated_at(d.pop("updated_at")) + + + table_describe_response = cls( + table_name=table_name, + columns=columns, + row_count=row_count, + updated_at=updated_at, + ) + + + table_describe_response.additional_properties = d + return table_describe_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/table_list_response.py b/src/roe/_generated/models/table_list_response.py new file mode 100644 index 0000000..b911d80 --- /dev/null +++ b/src/roe/_generated/models/table_list_response.py @@ -0,0 +1,103 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.table import Table + + + + + +T = TypeVar("T", bound="TableListResponse") + + + +@_attrs_define +class TableListResponse: + """ Response payload for listing public Roe tables. + + Attributes: + results (list[Table]): + total (int): Total number of tables returned + """ + + results: list[Table] + total: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.table import Table + results = [] + for results_item_data in self.results: + results_item = results_item_data.to_dict() + results.append(results_item) + + + + total = self.total + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "results": results, + "total": total, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.table import Table + d = dict(src_dict) + results = [] + _results = d.pop("results") + for results_item_data in (_results): + results_item = Table.from_dict(results_item_data) + + + + results.append(results_item) + + + total = d.pop("total") + + table_list_response = cls( + results=results, + total=total, + ) + + + table_list_response.additional_properties = d + return table_list_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/table_preview_response.py b/src/roe/_generated/models/table_preview_response.py new file mode 100644 index 0000000..32f8044 --- /dev/null +++ b/src/roe/_generated/models/table_preview_response.py @@ -0,0 +1,135 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.table_column import TableColumn + from ..models.table_preview_response_rows_item import TablePreviewResponseRowsItem + + + + + +T = TypeVar("T", bound="TablePreviewResponse") + + + +@_attrs_define +class TablePreviewResponse: + """ Response payload for previewing a public Roe table. + + Attributes: + table_name (str): Name of the table + columns (list[TableColumn]): List of columns in the table + rows (list[TablePreviewResponseRowsItem]): Sample rows keyed by column name + row_count (int): Number of sample rows returned + """ + + table_name: str + columns: list[TableColumn] + rows: list[TablePreviewResponseRowsItem] + row_count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.table_column import TableColumn + from ..models.table_preview_response_rows_item import TablePreviewResponseRowsItem + table_name = self.table_name + + columns = [] + for columns_item_data in self.columns: + columns_item = columns_item_data.to_dict() + columns.append(columns_item) + + + + rows = [] + for rows_item_data in self.rows: + rows_item = rows_item_data.to_dict() + rows.append(rows_item) + + + + row_count = self.row_count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "table_name": table_name, + "columns": columns, + "rows": rows, + "row_count": row_count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.table_column import TableColumn + from ..models.table_preview_response_rows_item import TablePreviewResponseRowsItem + d = dict(src_dict) + table_name = d.pop("table_name") + + columns = [] + _columns = d.pop("columns") + for columns_item_data in (_columns): + columns_item = TableColumn.from_dict(columns_item_data) + + + + columns.append(columns_item) + + + rows = [] + _rows = d.pop("rows") + for rows_item_data in (_rows): + rows_item = TablePreviewResponseRowsItem.from_dict(rows_item_data) + + + + rows.append(rows_item) + + + row_count = d.pop("row_count") + + table_preview_response = cls( + table_name=table_name, + columns=columns, + rows=rows, + row_count=row_count, + ) + + + table_preview_response.additional_properties = d + return table_preview_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/table_preview_response_rows_item.py b/src/roe/_generated/models/table_preview_response_rows_item.py new file mode 100644 index 0000000..3f9a6f0 --- /dev/null +++ b/src/roe/_generated/models/table_preview_response_rows_item.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="TablePreviewResponseRowsItem") + + + +@_attrs_define +class TablePreviewResponseRowsItem: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + table_preview_response_rows_item = cls( + ) + + + table_preview_response_rows_item.additional_properties = d + return table_preview_response_rows_item + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/table_query_request_request.py b/src/roe/_generated/models/table_query_request_request.py new file mode 100644 index 0000000..f97ee60 --- /dev/null +++ b/src/roe/_generated/models/table_query_request_request.py @@ -0,0 +1,87 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset + + + + + + +T = TypeVar("T", bound="TableQueryRequestRequest") + + + +@_attrs_define +class TableQueryRequestRequest: + """ Request payload for running a public Roe table query. + + Attributes: + sql (str): Single read-only ClickHouse SELECT or WITH ... SELECT query. + limit (int | Unset): Maximum rows returned. Defaults to 1000; maximum 1000. Default: 1000. + """ + + sql: str + limit: int | Unset = 1000 + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + sql = self.sql + + limit = self.limit + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "sql": sql, + }) + if limit is not UNSET: + field_dict["limit"] = limit + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + sql = d.pop("sql") + + limit = d.pop("limit", UNSET) + + table_query_request_request = cls( + sql=sql, + limit=limit, + ) + + + table_query_request_request.additional_properties = d + return table_query_request_request + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/table_query_result_response.py b/src/roe/_generated/models/table_query_result_response.py new file mode 100644 index 0000000..3958399 --- /dev/null +++ b/src/roe/_generated/models/table_query_result_response.py @@ -0,0 +1,202 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast +from uuid import UUID + +if TYPE_CHECKING: + from ..models.table_query_result_response_columns_item import TableQueryResultResponseColumnsItem + from ..models.table_query_result_response_rows_item import TableQueryResultResponseRowsItem + + + + + +T = TypeVar("T", bound="TableQueryResultResponse") + + + +@_attrs_define +class TableQueryResultResponse: + """ Response payload for polling or fetching a public Roe table query. + + Attributes: + table_query_id (UUID): + status (str): + error (None | str | Unset): + columns (list[TableQueryResultResponseColumnsItem] | Unset): + rows (list[TableQueryResultResponseRowsItem] | Unset): Rows keyed by column name. When truncated is true, an + oversized cell may be returned as a shortened string even if the original ClickHouse value was a nested object + or array. + row_count (int | Unset): + truncated (bool | Unset): True when the result hit the row limit, backend result byte cap, or an individual huge + cell was shortened. In truncated responses, any oversized cell may be represented as a string regardless of its + original ClickHouse type. + execution_time_ms (float | Unset): + """ + + table_query_id: UUID + status: str + error: None | str | Unset = UNSET + columns: list[TableQueryResultResponseColumnsItem] | Unset = UNSET + rows: list[TableQueryResultResponseRowsItem] | Unset = UNSET + row_count: int | Unset = UNSET + truncated: bool | Unset = UNSET + execution_time_ms: float | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.table_query_result_response_columns_item import TableQueryResultResponseColumnsItem + from ..models.table_query_result_response_rows_item import TableQueryResultResponseRowsItem + table_query_id = str(self.table_query_id) + + status = self.status + + error: None | str | Unset + if isinstance(self.error, Unset): + error = UNSET + else: + error = self.error + + columns: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.columns, Unset): + columns = [] + for columns_item_data in self.columns: + columns_item = columns_item_data.to_dict() + columns.append(columns_item) + + + + rows: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.rows, Unset): + rows = [] + for rows_item_data in self.rows: + rows_item = rows_item_data.to_dict() + rows.append(rows_item) + + + + row_count = self.row_count + + truncated = self.truncated + + execution_time_ms = self.execution_time_ms + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "table_query_id": table_query_id, + "status": status, + }) + if error is not UNSET: + field_dict["error"] = error + if columns is not UNSET: + field_dict["columns"] = columns + if rows is not UNSET: + field_dict["rows"] = rows + if row_count is not UNSET: + field_dict["row_count"] = row_count + if truncated is not UNSET: + field_dict["truncated"] = truncated + if execution_time_ms is not UNSET: + field_dict["execution_time_ms"] = execution_time_ms + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.table_query_result_response_columns_item import TableQueryResultResponseColumnsItem + from ..models.table_query_result_response_rows_item import TableQueryResultResponseRowsItem + d = dict(src_dict) + table_query_id = UUID(d.pop("table_query_id")) + + + + + status = d.pop("status") + + def _parse_error(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) + + error = _parse_error(d.pop("error", UNSET)) + + + _columns = d.pop("columns", UNSET) + columns: list[TableQueryResultResponseColumnsItem] | Unset = UNSET + if _columns is not UNSET: + columns = [] + for columns_item_data in _columns: + columns_item = TableQueryResultResponseColumnsItem.from_dict(columns_item_data) + + + + columns.append(columns_item) + + + _rows = d.pop("rows", UNSET) + rows: list[TableQueryResultResponseRowsItem] | Unset = UNSET + if _rows is not UNSET: + rows = [] + for rows_item_data in _rows: + rows_item = TableQueryResultResponseRowsItem.from_dict(rows_item_data) + + + + rows.append(rows_item) + + + row_count = d.pop("row_count", UNSET) + + truncated = d.pop("truncated", UNSET) + + execution_time_ms = d.pop("execution_time_ms", UNSET) + + table_query_result_response = cls( + table_query_id=table_query_id, + status=status, + error=error, + columns=columns, + rows=rows, + row_count=row_count, + truncated=truncated, + execution_time_ms=execution_time_ms, + ) + + + table_query_result_response.additional_properties = d + return table_query_result_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/table_query_result_response_columns_item.py b/src/roe/_generated/models/table_query_result_response_columns_item.py new file mode 100644 index 0000000..399ea12 --- /dev/null +++ b/src/roe/_generated/models/table_query_result_response_columns_item.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="TableQueryResultResponseColumnsItem") + + + +@_attrs_define +class TableQueryResultResponseColumnsItem: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + table_query_result_response_columns_item = cls( + ) + + + table_query_result_response_columns_item.additional_properties = d + return table_query_result_response_columns_item + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/table_query_result_response_rows_item.py b/src/roe/_generated/models/table_query_result_response_rows_item.py new file mode 100644 index 0000000..274a796 --- /dev/null +++ b/src/roe/_generated/models/table_query_result_response_rows_item.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="TableQueryResultResponseRowsItem") + + + +@_attrs_define +class TableQueryResultResponseRowsItem: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + table_query_result_response_rows_item = cls( + ) + + + table_query_result_response_rows_item.additional_properties = d + return table_query_result_response_rows_item + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/table_query_submit_response.py b/src/roe/_generated/models/table_query_submit_response.py new file mode 100644 index 0000000..39596c3 --- /dev/null +++ b/src/roe/_generated/models/table_query_submit_response.py @@ -0,0 +1,103 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="TableQuerySubmitResponse") + + + +@_attrs_define +class TableQuerySubmitResponse: + """ Response payload for submitting a public Roe table query. + + Attributes: + table_query_id (UUID): + status (str): + created_at (datetime.datetime): + """ + + table_query_id: UUID + status: str + created_at: datetime.datetime + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + table_query_id = str(self.table_query_id) + + status = self.status + + created_at = self.created_at.isoformat() + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "table_query_id": table_query_id, + "status": status, + "created_at": created_at, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + table_query_id = UUID(d.pop("table_query_id")) + + + + + status = d.pop("status") + + created_at = isoparse(d.pop("created_at")) + + + + + table_query_submit_response = cls( + table_query_id=table_query_id, + status=status, + created_at=created_at, + ) + + + table_query_submit_response.additional_properties = d + return table_query_submit_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/table_upload_request.py b/src/roe/_generated/models/table_upload_request.py index 7c715ee..56574da 100644 --- a/src/roe/_generated/models/table_upload_request.py +++ b/src/roe/_generated/models/table_upload_request.py @@ -32,7 +32,8 @@ class TableUploadRequest: Attributes: table_name (str): Name of the Roe table to create from the uploaded CSV file (File): CSV file to upload - with_headers (bool | Unset): Whether the first row of the CSV contains column headers Default: True. + with_headers (bool | Unset): If true, the first CSV row contains column headers and is not inserted as data; if + false, every row is inserted as data and columns are named column_1, column_2, etc. Default: True. organization_id (None | Unset | UUID): Optional organization ID. Organization API keys are already scoped to one organization; if supplied, this must match that organization. """ diff --git a/src/roe/_generated/models/test_connection.py b/src/roe/_generated/models/test_connection.py new file mode 100644 index 0000000..703e01c --- /dev/null +++ b/src/roe/_generated/models/test_connection.py @@ -0,0 +1,99 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from dateutil.parser import isoparse +from typing import cast +import datetime + + + + + + +T = TypeVar("T", bound="TestConnection") + + + +@_attrs_define +class TestConnection: + """ Serializer for connection test response. + + Attributes: + success (bool): + message (str): + tested_at (datetime.datetime): + """ + + success: bool + message: str + tested_at: datetime.datetime + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + success = self.success + + message = self.message + + tested_at = self.tested_at.isoformat() + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "success": success, + "message": message, + "tested_at": tested_at, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + success = d.pop("success") + + message = d.pop("message") + + tested_at = isoparse(d.pop("tested_at")) + + + + + test_connection = cls( + success=success, + message=message, + tested_at=tested_at, + ) + + + test_connection.additional_properties = d + return test_connection + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/test_connection_credentials_request.py b/src/roe/_generated/models/test_connection_credentials_request.py new file mode 100644 index 0000000..c5ebcc1 --- /dev/null +++ b/src/roe/_generated/models/test_connection_credentials_request.py @@ -0,0 +1,134 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.connector_type_enum import ConnectorTypeEnum +from ..types import UNSET, Unset +from typing import cast + +if TYPE_CHECKING: + from ..models.test_connection_credentials_request_auth_config import TestConnectionCredentialsRequestAuthConfig + from ..models.test_connection_credentials_request_config import TestConnectionCredentialsRequestConfig + + + + + +T = TypeVar("T", bound="TestConnectionCredentialsRequest") + + + +@_attrs_define +class TestConnectionCredentialsRequest: + """ Serializer for testing connector credentials without saving a connection. + + Attributes: + connector_type (ConnectorTypeEnum): * `snowflake` - SNOWFLAKE + * `s3` - S3 + * `sharepoint` - SHAREPOINT + * `zendesk` - ZENDESK + * `google_drive` - GOOGLE_DRIVE + * `salesforce` - SALESFORCE + * `web_application` - WEB_APPLICATION + * `custom_api` - CUSTOM_API + * `lexis_nexis` - LEXIS_NEXIS + * `sardine` - SARDINE + * `intercom` - INTERCOM + * `stripe` - STRIPE + * `plaid` - PLAID + * `checkout_com` - CHECKOUT_COM + * `socure` - SOCURE + config (TestConnectionCredentialsRequestConfig): + auth_config (TestConnectionCredentialsRequestAuthConfig | Unset): + """ + + connector_type: ConnectorTypeEnum + config: TestConnectionCredentialsRequestConfig + auth_config: TestConnectionCredentialsRequestAuthConfig | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.test_connection_credentials_request_auth_config import TestConnectionCredentialsRequestAuthConfig + from ..models.test_connection_credentials_request_config import TestConnectionCredentialsRequestConfig + connector_type = self.connector_type.value + + config = self.config.to_dict() + + auth_config: dict[str, Any] | Unset = UNSET + if not isinstance(self.auth_config, Unset): + auth_config = self.auth_config.to_dict() + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "connector_type": connector_type, + "config": config, + }) + if auth_config is not UNSET: + field_dict["auth_config"] = auth_config + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.test_connection_credentials_request_auth_config import TestConnectionCredentialsRequestAuthConfig + from ..models.test_connection_credentials_request_config import TestConnectionCredentialsRequestConfig + d = dict(src_dict) + connector_type = ConnectorTypeEnum(d.pop("connector_type")) + + + + + config = TestConnectionCredentialsRequestConfig.from_dict(d.pop("config")) + + + + + _auth_config = d.pop("auth_config", UNSET) + auth_config: TestConnectionCredentialsRequestAuthConfig | Unset + if isinstance(_auth_config, Unset): + auth_config = UNSET + else: + auth_config = TestConnectionCredentialsRequestAuthConfig.from_dict(_auth_config) + + + + + test_connection_credentials_request = cls( + connector_type=connector_type, + config=config, + auth_config=auth_config, + ) + + + test_connection_credentials_request.additional_properties = d + return test_connection_credentials_request + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/test_connection_credentials_request_auth_config.py b/src/roe/_generated/models/test_connection_credentials_request_auth_config.py new file mode 100644 index 0000000..052a344 --- /dev/null +++ b/src/roe/_generated/models/test_connection_credentials_request_auth_config.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="TestConnectionCredentialsRequestAuthConfig") + + + +@_attrs_define +class TestConnectionCredentialsRequestAuthConfig: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + test_connection_credentials_request_auth_config = cls( + ) + + + test_connection_credentials_request_auth_config.additional_properties = d + return test_connection_credentials_request_auth_config + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/test_connection_credentials_request_config.py b/src/roe/_generated/models/test_connection_credentials_request_config.py new file mode 100644 index 0000000..dcb4c00 --- /dev/null +++ b/src/roe/_generated/models/test_connection_credentials_request_config.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="TestConnectionCredentialsRequestConfig") + + + +@_attrs_define +class TestConnectionCredentialsRequestConfig: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + test_connection_credentials_request_config = cls( + ) + + + test_connection_credentials_request_config.additional_properties = d + return test_connection_credentials_request_config + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/update_connection.py b/src/roe/_generated/models/update_connection.py new file mode 100644 index 0000000..2ed6dc6 --- /dev/null +++ b/src/roe/_generated/models/update_connection.py @@ -0,0 +1,146 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + +if TYPE_CHECKING: + from ..models.update_connection_auth_config import UpdateConnectionAuthConfig + from ..models.update_connection_config import UpdateConnectionConfig + + + + + +T = TypeVar("T", bound="UpdateConnection") + + + +@_attrs_define +class UpdateConnection: + """ Serializer for updating connections. + + Cross-state Pydantic validation (config + auth) lives in the view's + ``update()`` method now -- see ``connections.views. + ConnectionRetrieveUpdateDestroyView.update``. That path is the single + source of truth for canonical validation + write, mirrors the create + path's ``service.create_connection_with_secrets``, AND correctly + handles the SM-fetch-failure case for the unchanged-auth branch + (returns 502 / opportunistic backfill instead of silently corrupting + the fingerprint by hashing ``{}``). Re-running the same validation + here would (a) double the work, (b) bypass the SM-failure semantics, + and (c) leak Pydantic field/value details through DRF's generic 400 + handler. The serializer only does shape checks. + + Attributes: + name (str | Unset): + description (str | Unset): + config (UpdateConnectionConfig | Unset): + auth_config (UpdateConnectionAuthConfig | Unset): + """ + + name: str | Unset = UNSET + description: str | Unset = UNSET + config: UpdateConnectionConfig | Unset = UNSET + auth_config: UpdateConnectionAuthConfig | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.update_connection_auth_config import UpdateConnectionAuthConfig + from ..models.update_connection_config import UpdateConnectionConfig + name = self.name + + description = self.description + + config: dict[str, Any] | Unset = UNSET + if not isinstance(self.config, Unset): + config = self.config.to_dict() + + auth_config: dict[str, Any] | Unset = UNSET + if not isinstance(self.auth_config, Unset): + auth_config = self.auth_config.to_dict() + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if name is not UNSET: + field_dict["name"] = name + if description is not UNSET: + field_dict["description"] = description + if config is not UNSET: + field_dict["config"] = config + if auth_config is not UNSET: + field_dict["auth_config"] = auth_config + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.update_connection_auth_config import UpdateConnectionAuthConfig + from ..models.update_connection_config import UpdateConnectionConfig + d = dict(src_dict) + name = d.pop("name", UNSET) + + description = d.pop("description", UNSET) + + _config = d.pop("config", UNSET) + config: UpdateConnectionConfig | Unset + if isinstance(_config, Unset): + config = UNSET + else: + config = UpdateConnectionConfig.from_dict(_config) + + + + + _auth_config = d.pop("auth_config", UNSET) + auth_config: UpdateConnectionAuthConfig | Unset + if isinstance(_auth_config, Unset): + auth_config = UNSET + else: + auth_config = UpdateConnectionAuthConfig.from_dict(_auth_config) + + + + + update_connection = cls( + name=name, + description=description, + config=config, + auth_config=auth_config, + ) + + + update_connection.additional_properties = d + return update_connection + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/update_connection_auth_config.py b/src/roe/_generated/models/update_connection_auth_config.py new file mode 100644 index 0000000..b9314ad --- /dev/null +++ b/src/roe/_generated/models/update_connection_auth_config.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="UpdateConnectionAuthConfig") + + + +@_attrs_define +class UpdateConnectionAuthConfig: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + update_connection_auth_config = cls( + ) + + + update_connection_auth_config.additional_properties = d + return update_connection_auth_config + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/update_connection_config.py b/src/roe/_generated/models/update_connection_config.py new file mode 100644 index 0000000..8c50fe6 --- /dev/null +++ b/src/roe/_generated/models/update_connection_config.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="UpdateConnectionConfig") + + + +@_attrs_define +class UpdateConnectionConfig: + """ + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + update_connection_config = cls( + ) + + + update_connection_config.additional_properties = d + return update_connection_config + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/uv.lock b/uv.lock index 5ce05b3..d54c440 100644 --- a/uv.lock +++ b/uv.lock @@ -454,7 +454,7 @@ wheels = [ [[package]] name = "roe-ai" -version = "1.0.803" +version = "1.0.804" source = { editable = "." } dependencies = [ { name = "attrs" }, From 94b1c7b10c60f3d9878b644b246888ed3243ffca Mon Sep 17 00:00:00 2001 From: Jaden Fix Date: Thu, 11 Jun 2026 12:00:15 -0700 Subject: [PATCH 2/6] Regenerate SDK from roe-main schema --- openapi/openapi.yml | 1669 +++++++++++++---- .../_generated/api/agents/agents_create.py | 35 +- .../_generated/api/agents/agents_destroy.py | 37 +- .../api/agents/agents_duplicate_create.py | 34 +- .../agents/agents_jobs_cancel_all_create.py | 34 +- .../api/agents/agents_jobs_cancel_create.py | 34 +- .../agents/agents_jobs_delete_data_create.py | 44 +- .../agents/agents_jobs_references_retrieve.py | 189 +- .../api/agents/agents_jobs_result_retrieve.py | 39 +- .../api/agents/agents_jobs_results_create.py | 64 +- .../api/agents/agents_jobs_status_retrieve.py | 38 +- .../api/agents/agents_jobs_statuses_create.py | 55 +- src/roe/_generated/api/agents/agents_list.py | 37 +- .../api/agents/agents_partial_update.py | 37 +- .../_generated/api/agents/agents_retrieve.py | 34 +- src/roe/_generated/api/agents/agents_run.py | 103 +- .../api/agents/agents_run_async_create.py | 98 +- .../api/agents/agents_run_async_many.py | 123 +- .../api/agents/agents_run_version.py | 103 +- .../agents_run_versions_async_create.py | 98 +- .../_generated/api/agents/agents_update.py | 37 +- .../api/agents/agents_versions_create.py | 37 +- .../agents_versions_current_retrieve.py | 34 +- .../api/agents/agents_versions_destroy.py | 42 +- .../api/agents/agents_versions_list.py | 34 +- .../agents/agents_versions_partial_update.py | 60 +- .../api/agents/agents_versions_retrieve.py | 34 +- .../api/agents/agents_versions_update.py | 60 +- .../api/connections/connections_create.py | 58 +- .../api/connections/connections_destroy.py | 99 +- .../api/connections/connections_list.py | 51 +- .../connections/connections_partial_update.py | 82 +- .../api/connections/connections_retrieve.py | 36 +- .../connections/connections_test_create.py | 34 +- .../connections_test_credentials_create.py | 49 +- .../api/connections/connections_update.py | 162 +- .../api/connectors/connectors_retrieve.py | 8 +- ...ve_2.py => connectors_retrieve_by_type.py} | 36 +- .../discovery_agent_engine_types_list.py | 8 +- .../discovery_supported_models_list.py | 36 +- .../api/policies/policies_create.py | 36 +- .../api/policies/policies_destroy.py | 92 +- .../_generated/api/policies/policies_list.py | 8 +- .../api/policies/policies_partial_update.py | 44 +- .../api/policies/policies_retrieve.py | 36 +- .../api/policies/policies_update.py | 44 +- .../api/policies/policies_versions_create.py | 44 +- .../api/policies/policies_versions_list.py | 36 +- .../policies/policies_versions_retrieve.py | 36 +- .../api/tables/tables_describe_retrieve.py | 39 +- .../_generated/api/tables/tables_destroy.py | 39 +- src/roe/_generated/api/tables/tables_list.py | 36 +- .../api/tables/tables_preview_retrieve.py | 64 +- .../api/tables/tables_query_create.py | 56 +- .../tables/tables_query_result_retrieve.py | 43 +- src/roe/_generated/api/tables/upload_table.py | 58 +- .../api/users/users_current_user_retrieve.py | 70 +- src/roe/_generated/models/__init__.py | 150 +- .../models/agent_execution_request.py | 112 ++ ...agent_execution_request_metadata_type_0.py | 68 + .../models/agent_execution_request_request.py | 89 - .../models/agent_job_delete_data_response.py | 32 +- ...st.py => agent_job_result_many_request.py} | 10 +- .../models/agent_job_single_status.py | 94 + src/roe/_generated/models/agent_job_status.py | 131 +- ...st.py => agent_job_status_many_request.py} | 10 +- ...est.py => agent_run_async_many_request.py} | 22 +- src/roe/_generated/models/agent_tag.py | 145 ++ ...est.py => agent_version_update_request.py} | 10 +- .../models/agents_create_response_400.py | 93 + ...references_retrieve_response_400_type_1.py | 93 + ...references_retrieve_response_400_type_2.py | 77 + ...agents_jobs_results_create_response_400.py | 93 + ...gents_jobs_statuses_create_response_400.py | 93 + .../models/agents_list_response_400.py | 93 + .../agents_partial_update_response_400.py | 93 + ...ts_run_async_create_response_400_type_1.py | 93 + ...ts_run_async_create_response_400_type_2.py | 77 + ...ents_run_async_many_response_400_type_1.py | 93 + ...ents_run_async_many_response_400_type_2.py | 77 + .../models/agents_run_response_400_type_1.py | 93 + .../models/agents_run_response_400_type_2.py | 77 + .../agents_run_version_response_400_type_1.py | 93 + .../agents_run_version_response_400_type_2.py | 77 + ...rsions_async_create_response_400_type_1.py | 93 + ...rsions_async_create_response_400_type_2.py | 77 + .../models/agents_update_response_400.py | 93 + .../agents_versions_create_response_400.py | 93 + .../_generated/models/api_error_response.py | 77 + src/roe/_generated/models/base_agent.py | 52 +- src/roe/_generated/models/color_enum.py | 14 + ...py => connection_delete_error_response.py} | 26 +- .../_generated/models/connection_request.py | 141 -- .../connections_create_response_400_type_1.py | 93 + .../connections_create_response_400_type_2.py | 77 + .../models/connections_list_response_400.py | 93 + ...ions_partial_update_response_400_type_1.py | 93 + ...ions_partial_update_response_400_type_2.py | 77 + ..._credentials_create_response_400_type_0.py | 99 + ..._credentials_create_response_400_type_1.py | 77 + .../connections_update_response_400_type_1.py | 93 + .../connections_update_response_400_type_2.py | 77 + .../_generated/models/connector_type_enum.py | 1 + .../models/create_connection_request.py | 1 + .../_generated/models/dependent_agent_info.py | 108 ++ ...very_supported_models_list_response_400.py | 93 + .../models/error_detail_response.py | 77 + ...{error_response.py => message_response.py} | 15 +- .../paginated_agent_job_result_item_list.py | 145 -- ...> patched_agent_version_update_request.py} | 10 +- .../models/policies_create_response_400.py | 93 + .../policies_partial_update_response_400.py | 93 + .../models/policies_update_response_400.py | 93 + .../policies_versions_create_response_400.py | 93 + .../models/policy_delete_conflict.py | 103 + src/roe/_generated/models/policy_version.py | 25 +- .../models/qdrant_cleanup_error_response.py | 89 + ...uest_request.py => table_query_request.py} | 10 +- .../models/table_query_result_response.py | 17 +- .../models/table_query_status_enum.py | 12 + .../models/table_query_submit_response.py | 17 +- ...es_preview_retrieve_response_400_type_1.py | 93 + ...es_preview_retrieve_response_400_type_2.py | 77 + .../tables_query_create_response_400.py | 93 + .../test_connection_credentials_request.py | 1 + ...ection.py => update_connection_request.py} | 38 +- ... update_connection_request_auth_config.py} | 10 +- ...py => update_connection_request_config.py} | 10 +- .../upload_table_response_400_type_1.py | 93 + .../upload_table_response_400_type_2.py | 77 + src/roe/_generated/models/user.py | 177 ++ src/roe/api/agents.py | 34 +- src/roe/models/job.py | 6 + src/roe/utils/_dynamic_call.py | 2 +- 134 files changed, 8213 insertions(+), 1909 deletions(-) rename src/roe/_generated/api/connectors/{connectors_retrieve_2.py => connectors_retrieve_by_type.py} (79%) create mode 100644 src/roe/_generated/models/agent_execution_request.py create mode 100644 src/roe/_generated/models/agent_execution_request_metadata_type_0.py delete mode 100644 src/roe/_generated/models/agent_execution_request_request.py rename src/roe/_generated/models/{agent_job_result_many_request_request.py => agent_job_result_many_request.py} (87%) create mode 100644 src/roe/_generated/models/agent_job_single_status.py rename src/roe/_generated/models/{agent_job_status_many_request_request.py => agent_job_status_many_request.py} (87%) rename src/roe/_generated/models/{agent_run_async_many_request_request.py => agent_run_async_many_request.py} (68%) create mode 100644 src/roe/_generated/models/agent_tag.py rename src/roe/_generated/models/{patched_patched_agent_version_update_request_request.py => agent_version_update_request.py} (84%) create mode 100644 src/roe/_generated/models/agents_create_response_400.py create mode 100644 src/roe/_generated/models/agents_jobs_references_retrieve_response_400_type_1.py create mode 100644 src/roe/_generated/models/agents_jobs_references_retrieve_response_400_type_2.py create mode 100644 src/roe/_generated/models/agents_jobs_results_create_response_400.py create mode 100644 src/roe/_generated/models/agents_jobs_statuses_create_response_400.py create mode 100644 src/roe/_generated/models/agents_list_response_400.py create mode 100644 src/roe/_generated/models/agents_partial_update_response_400.py create mode 100644 src/roe/_generated/models/agents_run_async_create_response_400_type_1.py create mode 100644 src/roe/_generated/models/agents_run_async_create_response_400_type_2.py create mode 100644 src/roe/_generated/models/agents_run_async_many_response_400_type_1.py create mode 100644 src/roe/_generated/models/agents_run_async_many_response_400_type_2.py create mode 100644 src/roe/_generated/models/agents_run_response_400_type_1.py create mode 100644 src/roe/_generated/models/agents_run_response_400_type_2.py create mode 100644 src/roe/_generated/models/agents_run_version_response_400_type_1.py create mode 100644 src/roe/_generated/models/agents_run_version_response_400_type_2.py create mode 100644 src/roe/_generated/models/agents_run_versions_async_create_response_400_type_1.py create mode 100644 src/roe/_generated/models/agents_run_versions_async_create_response_400_type_2.py create mode 100644 src/roe/_generated/models/agents_update_response_400.py create mode 100644 src/roe/_generated/models/agents_versions_create_response_400.py create mode 100644 src/roe/_generated/models/api_error_response.py create mode 100644 src/roe/_generated/models/color_enum.py rename src/roe/_generated/models/{agents_run_async_many_response_200.py => connection_delete_error_response.py} (71%) delete mode 100644 src/roe/_generated/models/connection_request.py create mode 100644 src/roe/_generated/models/connections_create_response_400_type_1.py create mode 100644 src/roe/_generated/models/connections_create_response_400_type_2.py create mode 100644 src/roe/_generated/models/connections_list_response_400.py create mode 100644 src/roe/_generated/models/connections_partial_update_response_400_type_1.py create mode 100644 src/roe/_generated/models/connections_partial_update_response_400_type_2.py create mode 100644 src/roe/_generated/models/connections_test_credentials_create_response_400_type_0.py create mode 100644 src/roe/_generated/models/connections_test_credentials_create_response_400_type_1.py create mode 100644 src/roe/_generated/models/connections_update_response_400_type_1.py create mode 100644 src/roe/_generated/models/connections_update_response_400_type_2.py create mode 100644 src/roe/_generated/models/dependent_agent_info.py create mode 100644 src/roe/_generated/models/discovery_supported_models_list_response_400.py create mode 100644 src/roe/_generated/models/error_detail_response.py rename src/roe/_generated/models/{error_response.py => message_response.py} (83%) delete mode 100644 src/roe/_generated/models/paginated_agent_job_result_item_list.py rename src/roe/_generated/models/{agent_version_update_request_request.py => patched_agent_version_update_request.py} (88%) create mode 100644 src/roe/_generated/models/policies_create_response_400.py create mode 100644 src/roe/_generated/models/policies_partial_update_response_400.py create mode 100644 src/roe/_generated/models/policies_update_response_400.py create mode 100644 src/roe/_generated/models/policies_versions_create_response_400.py create mode 100644 src/roe/_generated/models/policy_delete_conflict.py create mode 100644 src/roe/_generated/models/qdrant_cleanup_error_response.py rename src/roe/_generated/models/{table_query_request_request.py => table_query_request.py} (88%) create mode 100644 src/roe/_generated/models/table_query_status_enum.py create mode 100644 src/roe/_generated/models/tables_preview_retrieve_response_400_type_1.py create mode 100644 src/roe/_generated/models/tables_preview_retrieve_response_400_type_2.py create mode 100644 src/roe/_generated/models/tables_query_create_response_400.py rename src/roe/_generated/models/{update_connection.py => update_connection_request.py} (72%) rename src/roe/_generated/models/{update_connection_auth_config.py => update_connection_request_auth_config.py} (81%) rename src/roe/_generated/models/{update_connection_config.py => update_connection_request_config.py} (82%) create mode 100644 src/roe/_generated/models/upload_table_response_400_type_1.py create mode 100644 src/roe/_generated/models/upload_table_response_400_type_2.py create mode 100644 src/roe/_generated/models/user.py diff --git a/openapi/openapi.yml b/openapi/openapi.yml index 43e7511..e518517 100644 --- a/openapi/openapi.yml +++ b/openapi/openapi.yml @@ -68,6 +68,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -79,20 +81,30 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: organization_id query parameter is required. + type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list of + error messages (DRF serializers) or a single message (e.g. organization_id + validation).' + description: organization_id is missing/invalid or a filter parameter is + invalid. '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Access to the Agents feature is forbidden or organization access denied. '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Organization not found. post: operationId: agents_create @@ -107,6 +119,8 @@ paths: schema: $ref: '#/components/schemas/BaseAgentCreateRequest' required: true + security: + - apiKeyAuth: [] responses: '201': content: @@ -118,13 +132,22 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list of + error messages (DRF serializers) or a single message (e.g. organization_id + validation).' description: Invalid request data. '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Access to the Agents feature is forbidden. parameters: - name: organization_id @@ -159,6 +182,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -189,14 +214,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Access to the Agents feature is forbidden or permission to access this agent denied. '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent not found. put: operationId: agents_update @@ -226,6 +251,8 @@ paths: application/json: schema: $ref: '#/components/schemas/BaseAgentUpdateRequest' + security: + - apiKeyAuth: [] responses: '200': content: @@ -237,20 +264,29 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Invalid name provided. + type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list of + error messages (DRF serializers) or a single message (e.g. organization_id + validation).' + description: Invalid update payload (e.g. blank name). '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Access to the Agents feature is forbidden or permission to access this agent denied. '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent not found. patch: operationId: agents_partial_update @@ -280,6 +316,8 @@ paths: application/json: schema: $ref: '#/components/schemas/PatchedBaseAgentUpdateRequest' + security: + - apiKeyAuth: [] responses: '200': content: @@ -291,20 +329,29 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Invalid name provided. + type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list of + error messages (DRF serializers) or a single message (e.g. organization_id + validation).' + description: Invalid update payload (e.g. blank name). '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Access to the Agents feature is forbidden or permission to access this agent denied. '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent not found. delete: operationId: agents_destroy @@ -329,6 +376,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '204': description: Base agent deleted successfully. @@ -336,21 +385,21 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Permission to delete this base agent denied or access to Agents feature is forbidden. '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Base agent ID doesn't exist. '500': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Failed to delete base agent or some Qdrant collections. + $ref: '#/components/schemas/QdrantCleanupErrorResponse' + description: Base agent deleted but Qdrant collection cleanup failed. /v1/agents/{agent_id}/duplicate/: post: operationId: agents_duplicate_create @@ -375,6 +424,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '201': content: @@ -386,14 +437,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Access to the Agents feature is forbidden or permission to access this agent denied. '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent not found. /v1/agents/{agent_id}/jobs/cancel-all/: post: @@ -418,6 +469,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] deprecated: true responses: '204': @@ -426,13 +479,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Access forbidden '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent not found /v1/agents/{agent_id}/versions/: get: @@ -458,6 +511,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -486,14 +541,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Access to the Agents feature is forbidden or permission to access this agent denied. '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent not found. post: operationId: agents_versions_create @@ -523,6 +578,8 @@ paths: application/json: schema: $ref: '#/components/schemas/AgentVersionCreateRequest' + security: + - apiKeyAuth: [] responses: '201': content: @@ -551,20 +608,29 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list of + error messages (DRF serializers) or a single message (e.g. organization_id + validation).' description: Invalid request data. '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Access to the Agents feature is forbidden or permission to access this agent denied. '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent not found. /v1/agents/{agent_id}/versions/{agent_version_id}/: get: @@ -602,6 +668,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -613,14 +681,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Permission to access this agent denied or access to Agents feature is forbidden. '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent version not found. put: operationId: agents_versions_update @@ -657,22 +725,28 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AgentVersionUpdateRequestRequest' + $ref: '#/components/schemas/AgentVersionUpdateRequest' + security: + - apiKeyAuth: [] responses: '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MessageResponse' description: Agent version updated successfully. '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Permission to access this agent denied or access to Agents feature is forbidden. '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent version not found. patch: operationId: agents_versions_partial_update @@ -709,22 +783,28 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedPatchedAgentVersionUpdateRequestRequest' + $ref: '#/components/schemas/PatchedAgentVersionUpdateRequest' + security: + - apiKeyAuth: [] responses: '200': + content: + application/json: + schema: + $ref: '#/components/schemas/MessageResponse' description: Agent version updated successfully. '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Permission to access this agent denied or access to Agents feature is forbidden. '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent version not found. delete: operationId: agents_versions_destroy @@ -756,6 +836,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '204': description: Agent version deleted successfully. @@ -763,15 +845,21 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Permission to delete this agent version denied or access to Agents feature is forbidden. '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent version not found. + '500': + content: + application/json: + schema: + $ref: '#/components/schemas/QdrantCleanupErrorResponse' + description: Agent version deleted but Qdrant collection cleanup failed. /v1/agents/{agent_id}/versions/current/: get: operationId: agents_versions_current_retrieve @@ -801,6 +889,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -856,24 +946,19 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Permission to access this agent denied or access to Agents feature is forbidden. '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent not found. /v1/agents/jobs/{agent_job_id}/references/{resource_id}/: get: operationId: agents_jobs_references_retrieve - description: |- - Token-authenticated proxy view for serving web resource references from S3. - - Uses Organization API Key authentication (for external API consumers). - - URL: /api/v1/agents/jobs/{agent_job_id}/references/{resource_id}/ + description: Serve a reference file associated with an agent job. parameters: - in: path name: agent_job_id @@ -881,6 +966,11 @@ paths: type: string format: uuid required: true + - in: query + name: download + schema: + type: boolean + description: Set true to receive a Content-Disposition attachment header. - in: path name: resource_id schema: @@ -897,9 +987,79 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '200': - description: No response body + content: + application/octet-stream: + schema: + type: string + format: binary + description: File bytes. The actual Content-Type matches the stored file + (image, html, video, ...). + '206': + content: + application/octet-stream: + schema: + type: string + format: binary + description: Partial content for Range requests. + '400': + content: + application/json: + schema: + oneOf: + - type: array + items: + type: string + description: 'DRF ValidationError raised with a message string: + the body is a bare JSON array of error messages.' + - type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list + of error messages (DRF serializers) or a single message (e.g. + organization_id validation).' + - type: object + properties: + error: + type: string + required: + - error + description: Hand-built application error body. + description: Bad request. The body is a bare array of messages, a + field-error map, or an {error} object depending on which validation + failed. + description: Invalid resource_id (bare array) or invalid S3 request ({error}). + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Access denied to resource. + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Agent job or resource not found. + '416': + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorResponse' + description: Range not satisfiable. + '500': + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorResponse' + description: Error retrieving the resource from storage. /v1/agents/jobs/{agent_job_id}/result/: get: operationId: agents_jobs_result_retrieve @@ -922,6 +1082,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -950,33 +1112,26 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' examples: Example: value: - error: You don't have access to agents feature + detail: You do not have permission to perform this action. description: Access to the Agents feature is forbidden or permission to access this agent job denied '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' examples: Example: value: - error: Agent job not found + detail: Not found. description: Agent job not found '500': - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - examples: - Example: - value: - error: Failed to get agent job result data - description: Internal server error + description: Internal server error (agent job result data unavailable). + No structured response body. /v1/agents/jobs/{job_id}/cancel/: post: operationId: agents_jobs_cancel_create @@ -1000,6 +1155,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] deprecated: true responses: '204': @@ -1008,13 +1165,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Access forbidden '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent job not found /v1/agents/jobs/{job_id}/delete-data/: post: @@ -1041,6 +1198,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] deprecated: true responses: '200': @@ -1053,26 +1212,20 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ApiErrorResponse' description: Bad request - job not in final state '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Access forbidden '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent job not found - '500': - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: Failed to delete data /v1/agents/jobs/{job_id}/status/: get: operationId: agents_jobs_status_retrieve @@ -1095,12 +1248,14 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '200': content: application/json: schema: - $ref: '#/components/schemas/AgentJobStatus' + $ref: '#/components/schemas/AgentJobSingleStatus' examples: Example: value: @@ -1111,14 +1266,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Access to the Agents feature is forbidden or permission to access this agent job denied '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Agent job not found /v1/agents/jobs/results/: post: @@ -1133,26 +1288,39 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AgentJobResultManyRequestRequest' + $ref: '#/components/schemas/AgentJobResultManyRequest' required: true + security: + - apiKeyAuth: [] responses: '200': content: application/json: schema: - $ref: '#/components/schemas/PaginatedAgentJobResultItemList' + type: array + items: + $ref: '#/components/schemas/AgentJobResultItem' description: List of agent job results with outputs and metadata '400': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list of + error messages (DRF serializers) or a single message (e.g. organization_id + validation).' description: Invalid request data '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' description: Access forbidden to one or more agent jobs parameters: - name: organization_id @@ -1176,8 +1344,10 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AgentJobStatusManyRequestRequest' + $ref: '#/components/schemas/AgentJobStatusManyRequest' required: true + security: + - apiKeyAuth: [] responses: '200': content: @@ -1191,14 +1361,24 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list of + error messages (DRF serializers) or a single message (e.g. organization_id + validation).' description: Invalid request data '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Access forbidden to one or more agent jobs + $ref: '#/components/schemas/ErrorDetailResponse' + description: Access to the Agents feature is forbidden or organization access + denied parameters: - name: organization_id in: query @@ -1226,6 +1406,8 @@ paths: tags: - discovery - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -1233,6 +1415,21 @@ paths: schema: $ref: '#/components/schemas/SupportedLLMModelList' description: '' + '400': + content: + application/json: + schema: + type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list of + error messages (DRF serializers) or a single message (e.g. organization_id + validation).' + description: Invalid capability filter value /v1/agents/run/{agent_id}/: post: operationId: agents_run @@ -1260,7 +1457,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AgentExecutionRequestRequest' + $ref: '#/components/schemas/AgentExecutionRequest' + security: + - apiKeyAuth: [] responses: '200': content: @@ -1274,27 +1473,71 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Bad request - invalid input data - '402': - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: Insufficient credits + oneOf: + - type: array + items: + type: string + description: 'DRF ValidationError raised with a message string: + the body is a bare JSON array of error messages.' + - type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list + of error messages (DRF serializers) or a single message (e.g. + organization_id validation).' + - type: object + properties: + error: + type: string + required: + - error + description: Hand-built application error body. + description: Bad request. The body is a bare array of messages, a + field-error map, or an {error} object depending on which validation + failed. + examples: + FieldValidationError: + value: + metadata: + - Invalid JSON string. + summary: Field validation error + ValidationError: + value: + - Missing input key document + summary: Validation error + description: Invalid request data or agent input validation error '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Access to the Agents feature is forbidden or permission to - access this agent denied + $ref: '#/components/schemas/ErrorDetailResponse' + examples: + Forbidden: + value: + detail: Insufficient credits to start a new job + description: Access to the Agents feature is forbidden, permission to access + this agent denied, or insufficient credits '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' + examples: + NotFound: + value: + detail: Not found. + summary: Not found description: Agent not found + '500': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Internal error while running the agent /v1/agents/run/{agent_id}/async/: post: operationId: agents_run_async_create @@ -1322,7 +1565,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AgentExecutionRequestRequest' + $ref: '#/components/schemas/AgentExecutionRequest' + security: + - apiKeyAuth: [] responses: '200': content: @@ -1337,59 +1582,84 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + oneOf: + - type: array + items: + type: string + description: 'DRF ValidationError raised with a message string: + the body is a bare JSON array of error messages.' + - type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list + of error messages (DRF serializers) or a single message (e.g. + organization_id validation).' + - type: object + properties: + error: + type: string + required: + - error + description: Hand-built application error body. + description: Bad request. The body is a bare array of messages, a + field-error map, or an {error} object depending on which validation + failed. examples: - Example: + FieldValidationError: + value: + metadata: + - Invalid JSON string. + summary: Field validation error + ValidationError: value: - error: Invalid agent input data + - Missing input key document + summary: Validation error description: Invalid request data or agent input validation error '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' examples: - Example: + Forbidden: value: - error: You don't have access to agents feature - description: Access to the Agents feature is forbidden or permission to - access this agent denied + detail: Insufficient credits to start a new job + description: Access to the Agents feature is forbidden, permission to access + this agent denied, or insufficient credits '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' examples: - Example: + NotFound: value: - error: Agent not found + detail: Not found. + summary: Not found description: Agent not found - '402': - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - examples: - Example: - value: - error: Insufficient credits - status_code: 402 - description: Insufficient credits '500': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' examples: - Example: + InternalError: value: - error: Internal server error - description: Internal server error + detail: An internal error occurred while processing your request. + summary: Internal error + description: Internal error while scheduling the job /v1/agents/run/{agent_id}/async/many/: post: operationId: agents_run_async_many - description: Execute an agent with multiple inputs asynchronously and return - job IDs for tracking results. + description: 'Execute an agent with multiple inputs asynchronously and return + job IDs for tracking results. Job `metadata` is not supported on this endpoint: + any `metadata` key — top-level or inside an `inputs` item — is silently ignored + and the jobs are created with empty metadata. Use the single-run endpoints + to attach metadata to a job.' summary: Run agent asynchronously with multiple inputs parameters: - in: path @@ -1413,16 +1683,19 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AgentRunAsyncManyRequestRequest' + $ref: '#/components/schemas/AgentRunAsyncManyRequest' required: true + security: + - apiKeyAuth: [] responses: '200': content: application/json: schema: - type: object - additionalProperties: {} - description: Unspecified response body + type: array + items: + type: string + format: uuid examples: SuccessResponse: value: @@ -1435,51 +1708,71 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + oneOf: + - type: array + items: + type: string + description: 'DRF ValidationError raised with a message string: + the body is a bare JSON array of error messages.' + - type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list + of error messages (DRF serializers) or a single message (e.g. + organization_id validation).' + - type: object + properties: + error: + type: string + required: + - error + description: Hand-built application error body. + description: Bad request. The body is a bare array of messages, a + field-error map, or an {error} object depending on which validation + failed. examples: + FieldValidationError: + value: + inputs: + - This field is required. + summary: Field validation error ValidationError: value: - error: At least one agent input is required. + - Worksheet query has been cancelled and cannot be executed summary: Validation error - TooManyInputs: - value: - error: Too many inputs. Maximum 1000 inputs allowed. - summary: Too many inputs description: Invalid request data or agent input validation error '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' examples: Forbidden: value: - error: You don't have access to agents feature - description: Access to the Agents feature is forbidden or permission to - access this agent denied + detail: Insufficient credits to start a new job + description: Access to the Agents feature is forbidden, permission to access + this agent denied, or insufficient credits '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' examples: NotFound: value: - error: Agent not found + detail: Not found. summary: Not found description: Agent not found - '402': + '500': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - examples: - InsufficientCredits: - value: - error: Insufficient credits - status_code: 402 - summary: Insufficient credits - description: Insufficient credits + $ref: '#/components/schemas/ErrorDetailResponse' + description: Internal error while scheduling jobs /v1/agents/run/{agent_id}/versions/{agent_version_id}/: post: operationId: agents_run_version @@ -1514,7 +1807,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AgentExecutionRequestRequest' + $ref: '#/components/schemas/AgentExecutionRequest' + security: + - apiKeyAuth: [] responses: '200': content: @@ -1528,27 +1823,71 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Bad request - invalid input data - '402': + oneOf: + - type: array + items: + type: string + description: 'DRF ValidationError raised with a message string: + the body is a bare JSON array of error messages.' + - type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list + of error messages (DRF serializers) or a single message (e.g. + organization_id validation).' + - type: object + properties: + error: + type: string + required: + - error + description: Hand-built application error body. + description: Bad request. The body is a bare array of messages, a + field-error map, or an {error} object depending on which validation + failed. + examples: + FieldValidationError: + value: + metadata: + - Invalid JSON string. + summary: Field validation error + ValidationError: + value: + - Missing input key document + summary: Validation error + description: Invalid request data or agent input validation error + '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Insufficient credits - '403': + $ref: '#/components/schemas/ErrorDetailResponse' + examples: + Forbidden: + value: + detail: Insufficient credits to start a new job + description: Access to the Agents feature is forbidden, permission to access + this agent denied, or insufficient credits + '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Access to the Agents feature is forbidden or permission to - access this agent denied - '404': + $ref: '#/components/schemas/ErrorDetailResponse' + examples: + NotFound: + value: + detail: Not found. + summary: Not found + description: Agent version not found + '500': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Agent not found + $ref: '#/components/schemas/ErrorDetailResponse' + description: Internal error while running the agent /v1/agents/run/{agent_id}/versions/{agent_version_id}/async/: post: operationId: agents_run_versions_async_create @@ -1582,7 +1921,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AgentExecutionRequestRequest' + $ref: '#/components/schemas/AgentExecutionRequest' + security: + - apiKeyAuth: [] responses: '200': content: @@ -1597,54 +1938,76 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + oneOf: + - type: array + items: + type: string + description: 'DRF ValidationError raised with a message string: + the body is a bare JSON array of error messages.' + - type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list + of error messages (DRF serializers) or a single message (e.g. + organization_id validation).' + - type: object + properties: + error: + type: string + required: + - error + description: Hand-built application error body. + description: Bad request. The body is a bare array of messages, a + field-error map, or an {error} object depending on which validation + failed. examples: - Example: + FieldValidationError: + value: + metadata: + - Invalid JSON string. + summary: Field validation error + ValidationError: value: - error: Invalid agent input data + - Missing input key document + summary: Validation error description: Invalid request data or agent input validation error '403': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' examples: - Example: + Forbidden: value: - error: You don't have access to agents feature - description: Access to the Agents feature is forbidden or permission to - access this agent denied + detail: Insufficient credits to start a new job + description: Access to the Agents feature is forbidden, permission to access + this agent denied, or insufficient credits '404': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - examples: - Example: - value: - error: Agent not found - description: Agent not found - '402': - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' examples: - Example: + NotFound: value: - error: Insufficient credits - status_code: 402 - description: Insufficient credits + detail: Not found. + summary: Not found + description: Agent version not found '500': content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' + $ref: '#/components/schemas/ErrorDetailResponse' examples: - Example: + InternalError: value: - error: Internal server error - description: Internal server error + detail: An internal error occurred while processing your request. + summary: Internal error + description: Internal error while scheduling the job /v1/agents/types/: get: operationId: discovery_agent_engine_types_list @@ -1656,6 +2019,8 @@ paths: tags: - discovery - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -1700,6 +2065,8 @@ paths: tags: - connections - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -1707,6 +2074,34 @@ paths: schema: $ref: '#/components/schemas/PaginatedConnectionListList' description: '' + '400': + content: + application/json: + schema: + type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list of + error messages (DRF serializers) or a single message (e.g. organization_id + validation).' + description: organization_id missing or not a valid UUID (field->message + map; JWT auth only). + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Caller does not have access to this organization. + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Organization not found. post: operationId: connections_create description: 'Public API: GET/POST /api/v1/connections/ - List/create connections.' @@ -1719,6 +2114,8 @@ paths: schema: $ref: '#/components/schemas/CreateConnectionRequest' required: true + security: + - apiKeyAuth: [] responses: '201': content: @@ -1730,8 +2127,34 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Name collision in this organization. + oneOf: + - type: array + items: + type: string + description: 'DRF ValidationError raised with a message string: + the body is a bare JSON array of error messages.' + - type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list + of error messages (DRF serializers) or a single message (e.g. + organization_id validation).' + - type: object + properties: + error: + type: string + required: + - error + description: Hand-built application error body. + description: Bad request. The body is a bare array of messages, a + field-error map, or an {error} object depending on which validation + failed. + description: Validation failure (bare array of messages), serializer field + errors (map), or a name collision ({error}). '409': content: application/json: @@ -1771,6 +2194,8 @@ paths: tags: - connections - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -1778,6 +2203,12 @@ paths: schema: $ref: '#/components/schemas/Connection' description: '' + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Connection not found. put: operationId: connections_update description: 'Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage @@ -1804,8 +2235,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ConnectionRequest' - required: true + $ref: '#/components/schemas/UpdateConnectionRequest' + security: + - apiKeyAuth: [] responses: '200': content: @@ -1813,6 +2245,51 @@ paths: schema: $ref: '#/components/schemas/Connection' description: '' + '400': + content: + application/json: + schema: + oneOf: + - type: array + items: + type: string + description: 'DRF ValidationError raised with a message string: + the body is a bare JSON array of error messages.' + - type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list + of error messages (DRF serializers) or a single message (e.g. + organization_id validation).' + - type: object + properties: + error: + type: string + required: + - error + description: Hand-built application error body. + description: Bad request. The body is a bare array of messages, a + field-error map, or an {error} object depending on which validation + failed. + description: Validation failure (bare array of messages), serializer field + errors (map), or a name collision ({error}). + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Connection not found. + '409': + content: + application/json: + schema: + $ref: '#/components/schemas/DuplicateConnectionResponse' + description: A strict-identity duplicate of this connection already exists + in this organization. patch: operationId: connections_partial_update description: 'Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage @@ -1840,13 +2317,60 @@ paths: application/json: schema: $ref: '#/components/schemas/PatchedUpdateConnectionRequest' + security: + - apiKeyAuth: [] responses: '200': content: application/json: schema: - $ref: '#/components/schemas/UpdateConnection' + $ref: '#/components/schemas/Connection' description: '' + '400': + content: + application/json: + schema: + oneOf: + - type: array + items: + type: string + description: 'DRF ValidationError raised with a message string: + the body is a bare JSON array of error messages.' + - type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list + of error messages (DRF serializers) or a single message (e.g. + organization_id validation).' + - type: object + properties: + error: + type: string + required: + - error + description: Hand-built application error body. + description: Bad request. The body is a bare array of messages, a + field-error map, or an {error} object depending on which validation + failed. + description: Validation failure (bare array of messages), serializer field + errors (map), or a name collision ({error}). + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Connection not found. + '409': + content: + application/json: + schema: + $ref: '#/components/schemas/DuplicateConnectionResponse' + description: A strict-identity duplicate of this connection already exists + in this organization. delete: operationId: connections_destroy description: 'Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage @@ -1869,9 +2393,29 @@ paths: tags: - connections - sdk + security: + - apiKeyAuth: [] responses: '204': - description: No response body + description: Connection deleted successfully. + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/ConnectionDeleteErrorResponse' + description: Unable to delete this connection. + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Connection not found. + '500': + content: + application/json: + schema: + $ref: '#/components/schemas/ConnectionDeleteErrorResponse' + description: Failed to delete connection credentials. /v1/connections/{id}/test/: post: operationId: connections_test_create @@ -1894,6 +2438,8 @@ paths: tags: - connections - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -1908,6 +2454,10 @@ paths: $ref: '#/components/schemas/TestConnection' description: Connection test failed. '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' description: Connection not found. /v1/connections/test-credentials/: post: @@ -1922,6 +2472,8 @@ paths: schema: $ref: '#/components/schemas/TestConnectionCredentialsRequest' required: true + security: + - apiKeyAuth: [] responses: '200': content: @@ -1933,8 +2485,33 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/TestConnection' - description: Missing connector_type or credential validation failed. + oneOf: + - type: object + description: Credential validation or connection test failed (TestConnection + result with success=false). + properties: + success: + type: boolean + message: + type: string + tested_at: + type: string + format: date-time + required: + - success + - message + - tested_at + - type: object + description: connector_type missing from the request body. + properties: + error: + type: string + required: + - error + description: 'Bad request: either the credential test failed (TestConnection + body with success=false) or connector_type was missing ({error}).' + description: Credential validation or connection test failed (TestConnection + body with success=false), or connector_type was missing ({error}). /v1/connectors/: get: operationId: connectors_retrieve @@ -1942,6 +2519,8 @@ paths: tags: - connectors - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -1951,7 +2530,7 @@ paths: description: '' /v1/connectors/{connector_type}/: get: - operationId: connectors_retrieve_2 + operationId: connectors_retrieve_by_type description: 'Public API: GET /api/v1/connectors/{connector_type}/ - Get connector details.' parameters: @@ -1963,6 +2542,8 @@ paths: tags: - connectors - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -1970,6 +2551,17 @@ paths: schema: $ref: '#/components/schemas/ConnectorMetadata' description: '' + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + examples: + NotFound: + value: + detail: 'Unknown connector: foo. Available: slack, gmail' + summary: Not found + description: Connector type not found /v1/policies/: get: operationId: policies_list @@ -2010,6 +2602,8 @@ paths: tags: - policies - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -2029,13 +2623,30 @@ paths: schema: $ref: '#/components/schemas/CreatePolicyRequest' required: true + security: + - apiKeyAuth: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/CreatePolicy' - description: '' + description: Policy created successfully. + '400': + content: + application/json: + schema: + type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list of + error messages (DRF serializers) or a single message (e.g. organization_id + validation).' + description: Invalid request data. parameters: - name: organization_id in: query @@ -2067,13 +2678,21 @@ paths: tags: - policies - sdk + security: + - apiKeyAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/Policy' - description: '' + description: Successfully retrieved policy. + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Policy not found. put: operationId: policies_update description: Retrieve, update, or delete a single policy by ID @@ -2101,13 +2720,36 @@ paths: schema: $ref: '#/components/schemas/UpdatePolicyRequest' required: true + security: + - apiKeyAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/UpdatePolicy' - description: '' + description: Policy updated successfully. + '400': + content: + application/json: + schema: + type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list of + error messages (DRF serializers) or a single message (e.g. organization_id + validation).' + description: Invalid request data. + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Policy not found. patch: operationId: policies_partial_update description: Retrieve, update, or delete a single policy by ID @@ -2134,14 +2776,37 @@ paths: application/json: schema: $ref: '#/components/schemas/PatchedUpdatePolicyRequest' + security: + - apiKeyAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/UpdatePolicy' - description: '' - delete: + description: Policy updated successfully. + '400': + content: + application/json: + schema: + type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list of + error messages (DRF serializers) or a single message (e.g. organization_id + validation).' + description: Invalid request data. + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Policy not found. + delete: operationId: policies_destroy description: Retrieve, update, or delete a single policy by ID parameters: @@ -2162,9 +2827,23 @@ paths: tags: - policies - sdk + security: + - apiKeyAuth: [] responses: '204': - description: No response body + description: Policy deleted successfully. + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Policy not found. + '409': + content: + application/json: + schema: + $ref: '#/components/schemas/PolicyDeleteConflict' + description: Policy is in use by agents and cannot be deleted. /v1/policies/{policy_id}/versions/: get: operationId: policies_versions_list @@ -2200,13 +2879,21 @@ paths: tags: - policies - sdk + security: + - apiKeyAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedPolicyVersionList' - description: '' + description: Successfully retrieved list of policy versions. + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Policy not found. post: operationId: policies_versions_create description: Create a new policy version or list all versions of a specific @@ -2235,13 +2922,37 @@ paths: schema: $ref: '#/components/schemas/CreatePolicyVersionRequest' required: true + security: + - apiKeyAuth: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/CreatePolicyVersion' - description: '' + description: Policy version created successfully. + '400': + content: + application/json: + schema: + type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list of + error messages (DRF serializers) or a single message (e.g. organization_id + validation).' + description: Invalid request data (e.g. base_version_id does not belong + to this policy). + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Policy not found. /v1/policies/{policy_id}/versions/{version_id}/: get: operationId: policies_versions_retrieve @@ -2272,13 +2983,21 @@ paths: tags: - policies - sdk + security: + - apiKeyAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PolicyVersion' - description: '' + description: Successfully retrieved policy version. + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Policy or policy version not found. /v1/tables/: get: operationId: tables_list @@ -2287,6 +3006,8 @@ paths: tags: - tables - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -2294,12 +3015,6 @@ paths: schema: $ref: '#/components/schemas/TableListResponse' description: '' - '400': - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: Bad request /v1/tables/{table_name}/: delete: operationId: tables_destroy @@ -2315,6 +3030,8 @@ paths: tags: - tables - sdk + security: + - apiKeyAuth: [] responses: '204': description: No response body @@ -2322,9 +3039,17 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Bad request + type: array + items: + type: string + description: 'DRF ValidationError raised with a message string: the + body is a bare JSON array of error messages.' + description: Invalid table name (bare array of messages). '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' description: Table not found /v1/tables/{table_name}/describe/: get: @@ -2342,6 +3067,8 @@ paths: tags: - tables - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -2353,9 +3080,17 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Bad request + type: array + items: + type: string + description: 'DRF ValidationError raised with a message string: the + body is a bare JSON array of error messages.' + description: Invalid table name (bare array of messages). '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' description: Table not found /v1/tables/{table_name}/preview/: get: @@ -2381,6 +3116,8 @@ paths: tags: - tables - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -2392,9 +3129,39 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Bad request + oneOf: + - type: array + items: + type: string + description: 'DRF ValidationError raised with a message string: + the body is a bare JSON array of error messages.' + - type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list + of error messages (DRF serializers) or a single message (e.g. + organization_id validation).' + - type: object + properties: + error: + type: string + required: + - error + description: Hand-built application error body. + description: Bad request. The body is a bare array of messages, a + field-error map, or an {error} object depending on which validation + failed. + description: Invalid table name (bare array of messages) or invalid limit + query param (field error map). '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' description: Table not found /v1/tables/query/: post: @@ -2408,8 +3175,10 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/TableQueryRequestRequest' + $ref: '#/components/schemas/TableQueryRequest' required: true + security: + - apiKeyAuth: [] responses: '202': content: @@ -2417,6 +3186,21 @@ paths: schema: $ref: '#/components/schemas/TableQuerySubmitResponse' description: '' + '400': + content: + application/json: + schema: + type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list of + error messages (DRF serializers) or a single message (e.g. organization_id + validation).' + description: Invalid request body (field error map). /v1/tables/query/{table_query_id}/result/: get: operationId: tables_query_result_retrieve @@ -2432,6 +3216,8 @@ paths: tags: - tables - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -2439,6 +3225,18 @@ paths: schema: $ref: '#/components/schemas/TableQueryResultResponse' description: '' + '403': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: No access to this query's organization. + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Table query or its results not found. /v1/tables/upload/: post: operationId: upload_table @@ -2455,6 +3253,8 @@ paths: schema: $ref: '#/components/schemas/TableUploadRequest' required: true + security: + - apiKeyAuth: [] responses: '201': content: @@ -2466,17 +3266,51 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ErrorResponse' - description: Bad request + oneOf: + - type: array + items: + type: string + description: 'DRF ValidationError raised with a message string: + the body is a bare JSON array of error messages.' + - type: object + additionalProperties: + oneOf: + - type: array + items: + type: string + - type: string + description: 'Validation failure: a map of field name to a list + of error messages (DRF serializers) or a single message (e.g. + organization_id validation).' + - type: object + properties: + error: + type: string + required: + - error + description: Hand-built application error body. + description: Bad request. The body is a bare array of messages, a + field-error map, or an {error} object depending on which validation + failed. + description: Serializer field errors (map), or import-time validation failures + such as a duplicate/invalid table name or an empty CSV (bare array of + messages). /v1/users/current_user/: get: operationId: users_current_user_retrieve + summary: Get the current user tags: - users - sdk + security: + - apiKeyAuth: [] responses: '200': - description: No response body + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: '' components: schemas: AgentDatum: @@ -2526,17 +3360,23 @@ components: - engine_types - engines - total_count - AgentExecutionRequestRequest: + AgentExecutionRequest: type: object - description: Serializer for agent execution requests with dynamic input fields. + description: Agent execution request. In addition to `metadata`, every key of + the agent's input definitions is accepted as a property (text value or file + upload). properties: metadata: - description: Optional metadata as JSON object or JSON string - agent_input_key_example: - type: string - minLength: 1 - description: Agent input keys are dynamic based on agent configuration. - Can be text or file. + type: + - object + - 'null' + additionalProperties: true + description: Optional metadata stored as-is on the created agent job. A + JSON-encoded object string is also accepted; null is treated the same + as omitting the field (empty metadata). Only honored by the single-run + endpoints — when this object is an item of the run-async-many `inputs` + list, `metadata` is ignored. + additionalProperties: true AgentInputDefinition: type: object properties: @@ -2561,6 +3401,7 @@ components: - key AgentJobDeleteDataResponse: type: object + description: Response payload of purge_agent_job_data (delete-data and :purgeData). properties: status: type: string @@ -2582,14 +3423,18 @@ components: type: integer description: Number of workflow artifacts that failed to delete errors: - type: array - items: {} - description: List of errors encountered during deletion + type: + - array + - 'null' + items: + type: string + description: List of errors encountered during deletion; null when none required: - artifacts_deleted_count - artifacts_failed_count - blob_sanitized - deleted_count + - errors - failed_count - status AgentJobResultItem: @@ -2664,7 +3509,7 @@ components: - output_tokens - result - status - AgentJobResultManyRequestRequest: + AgentJobResultManyRequest: type: object description: Serializer for bulk agent job results request. properties: @@ -2714,7 +3559,7 @@ components: - inputs - output_tokens - outputs - AgentJobStatus: + AgentJobSingleStatus: type: object properties: status: @@ -2722,15 +3567,58 @@ components: description: 'Status code. 0: PENDING, 1: STARTED, 2: RETRY, 3: SUCCESS, 4: FAILURE, 5: CANCELLED, 6: CACHED' timestamp: - type: integer - description: Unix timestamp in seconds + type: number + format: double + description: Unix timestamp in seconds (fractional) error_message: type: string description: Error message if status is RETRY or FAILURE required: - status - timestamp - AgentJobStatusManyRequestRequest: + AgentJobStatus: + type: object + description: Serializer for individual agent job status response. + properties: + id: + type: string + format: uuid + description: Agent job ID + status: + type: + - integer + - 'null' + description: Current status code (0=PENDING, 1=STARTED, 2=RETRY, 3=SUCCESS, + 4=FAILURE, 5=CANCELLED, 6=CACHED) + created_at: + type: + - string + - 'null' + format: date-time + description: When the job was created + last_updated_at: + type: + - string + - 'null' + format: date-time + description: When the job was last updated + timestamp: + type: + - number + - 'null' + format: double + description: Unix timestamp in seconds from the latest status event + error_message: + type: + - string + - 'null' + description: Error message if status is FAILURE or RETRY + required: + - created_at + - id + - last_updated_at + - status + AgentJobStatusManyRequest: type: object description: Serializer for bulk agent job status request. properties: @@ -2743,17 +3631,50 @@ components: minItems: 1 required: - job_ids - AgentRunAsyncManyRequestRequest: + AgentRunAsyncManyRequest: type: object description: Serializer for agent async many execution requests. properties: inputs: type: array items: - $ref: '#/components/schemas/AgentExecutionRequestRequest' + $ref: '#/components/schemas/AgentExecutionRequest' description: List of agent execution requests to process required: - inputs + AgentTag: + type: object + description: Serializer for AgentTag model + properties: + id: + type: string + format: uuid + readOnly: true + name: + type: string + maxLength: 50 + color: + $ref: '#/components/schemas/ColorEnum' + created_at: + type: string + format: date-time + readOnly: true + creator: + type: + - integer + - 'null' + readOnly: true + usage_count: + type: integer + description: Count of agents using this tag + readOnly: true + required: + - color + - created_at + - creator + - id + - name + - usage_count AgentVersion: type: object description: Serializer for Agent (version) model @@ -2837,7 +3758,7 @@ components: description: List of input definitions for this agent version. engine_config: description: Engine configuration as a dictionary of string key-value pairs. - AgentVersionUpdateRequestRequest: + AgentVersionUpdateRequest: type: object properties: version_name: @@ -2848,6 +3769,15 @@ components: type: string minLength: 1 description: New description for the agent version. + ApiErrorResponse: + type: object + description: 'Hand-built application error body: `Response({"error": ...}, 4xx/5xx)`.' + properties: + error: + type: string + description: Application error message + required: + - error BaseAgent: type: object description: Serializer for BaseAgent (agent config) @@ -2893,14 +3823,19 @@ components: description: Job count from annotation, or None when not fetched (use /agents/job-stats/). readOnly: true most_recent_job: - type: string + type: + - string + - 'null' + format: date-time readOnly: true engine_name: type: string description: Engine Display Name readOnly: true tags: - type: string + type: array + items: + $ref: '#/components/schemas/AgentTag' readOnly: true required: - cache_failed_jobs @@ -2961,6 +3896,26 @@ components: cache_failed_jobs: type: boolean description: Whether to cache failed jobs for this agent. + ColorEnum: + enum: + - blue + - green + - purple + - orange + - red + - yellow + - gray + - pink + type: string + description: |- + * `blue` - Blue + * `green` - Green + * `purple` - Purple + * `orange` - Orange + * `red` - Red + * `yellow` - Yellow + * `gray` - Gray + * `pink` - Pink Connection: type: object description: |- @@ -3018,6 +3973,13 @@ components: - organization - updated_at - user + ConnectionDeleteErrorResponse: + type: object + properties: + error: + type: string + required: + - error ConnectionList: type: object description: |- @@ -3068,34 +4030,6 @@ components: - organization - updated_at - user - ConnectionRequest: - type: object - description: |- - Serializer for Connection model. - Returns: - - config: Non-sensitive config from DB - - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) - properties: - organization: - type: string - format: uuid - connector_type: - type: string - minLength: 1 - maxLength: 50 - name: - type: string - minLength: 1 - maxLength: 250 - description: - type: string - config: {} - status: - $ref: '#/components/schemas/StatusEnum' - required: - - connector_type - - name - - organization ConnectorListResponse: type: object properties: @@ -3154,6 +4088,7 @@ components: - plaid - checkout_com - socure + - custom_mcp type: string description: |- * `snowflake` - SNOWFLAKE @@ -3171,6 +4106,7 @@ components: * `plaid` - PLAID * `checkout_com` - CHECKOUT_COM * `socure` - SOCURE + * `custom_mcp` - CUSTOM_MCP CreateConnectionRequest: type: object description: |- @@ -3294,6 +4230,25 @@ components: description: ID of the version this was derived from required: - content + DependentAgentInfo: + type: object + description: An agent version that references a policy (see get_agents_using_policy). + properties: + base_agent_id: + type: string + format: uuid + agent_name: + type: string + version_id: + type: string + format: uuid + version_name: + type: string + required: + - agent_name + - base_agent_id + - version_id + - version_name DuplicateConnectionExisting: type: object description: Identifying summary of the existing connection that triggered a @@ -3319,37 +4274,23 @@ components: required: - error - existing_connection - ErrorResponse: + ErrorDetailResponse: type: object + description: 'DRF default error body: NotFound, PermissionDenied, Http404, etc.' properties: - message: + detail: type: string - description: Error message + description: Human-readable error detail required: - - message - PaginatedAgentJobResultItemList: + - detail + MessageResponse: type: object - required: - - count - - results + description: 'Simple success acknowledgement body: `{"message": ...}`.' properties: - count: - type: integer - example: 123 - next: - type: string - nullable: true - format: uri - example: http://api.example.org/accounts/?page=4 - previous: + message: type: string - nullable: true - format: uri - example: http://api.example.org/accounts/?page=2 - results: - type: array - items: - $ref: '#/components/schemas/AgentJobResultItem' + required: + - message PaginatedBaseAgentList: type: object required: @@ -3442,6 +4383,17 @@ components: type: array items: $ref: '#/components/schemas/PolicyVersion' + PatchedAgentVersionUpdateRequest: + type: object + properties: + version_name: + type: string + minLength: 1 + description: New version name for the agent version. + description: + type: string + minLength: 1 + description: New description for the agent version. PatchedBaseAgentUpdateRequest: type: object description: Serializer for updating BaseAgent @@ -3456,17 +4408,6 @@ components: cache_failed_jobs: type: boolean description: Whether to cache failed jobs for this agent. - PatchedPatchedAgentVersionUpdateRequestRequest: - type: object - properties: - version_name: - type: string - minLength: 1 - description: New version name for the agent version. - description: - type: string - minLength: 1 - description: New description for the agent version. PatchedUpdateConnectionRequest: type: object description: |- @@ -3544,6 +4485,20 @@ components: - name - organization_id - updated_at + PolicyDeleteConflict: + type: object + description: 409 body when a policy cannot be deleted because agents reference + it. + properties: + error: + type: string + dependent_agents: + type: array + items: + $ref: '#/components/schemas/DependentAgentInfo' + required: + - dependent_agents + - error PolicyVersion: type: object description: |- @@ -3576,7 +4531,9 @@ components: - $ref: '#/components/schemas/PolicyVersionCreatedBy' readOnly: true base_version_id: - type: string + type: + - string + - 'null' format: uuid readOnly: true required: @@ -3607,6 +4564,22 @@ components: - display_name - email - id + QdrantCleanupErrorResponse: + type: object + description: 500 body when deleting an agent/version fails Qdrant collection + cleanup. + properties: + detail: + type: string + description: Human-readable error detail + failed_collections: + type: array + items: + type: string + description: Qdrant collections that could not be deleted + required: + - detail + - failed_collections StatusEnum: enum: - active @@ -3775,7 +4748,7 @@ components: - row_count - rows - table_name - TableQueryRequestRequest: + TableQueryRequest: type: object description: Request payload for running a public Roe table query. properties: @@ -3800,7 +4773,7 @@ components: type: string format: uuid status: - type: string + $ref: '#/components/schemas/TableQueryStatusEnum' error: type: - string @@ -3832,6 +4805,22 @@ components: required: - status - table_query_id + TableQueryStatusEnum: + enum: + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILURE + - REVOKED + type: string + description: |- + * `PENDING` - PENDING + * `STARTED` - STARTED + * `RETRY` - RETRY + * `SUCCESS` - SUCCESS + * `FAILURE` - FAILURE + * `REVOKED` - REVOKED TableQuerySubmitResponse: type: object description: Response payload for submitting a public Roe table query. @@ -3840,7 +4829,7 @@ components: type: string format: uuid status: - type: string + $ref: '#/components/schemas/TableQueryStatusEnum' created_at: type: string format: date-time @@ -3923,7 +4912,7 @@ components: required: - config - connector_type - UpdateConnection: + UpdateConnectionRequest: type: object description: |- Serializer for updating connections. @@ -3942,6 +4931,7 @@ components: properties: name: type: string + minLength: 1 maxLength: 250 description: type: string @@ -4001,6 +4991,51 @@ components: type: string required: - name + User: + type: object + properties: + id: + type: integer + readOnly: true + email: + type: string + format: email + first_name: + type: string + last_name: + type: string + display_name: + type: string + readOnly: true + is_staff: + type: boolean + default: false + is_superuser: + type: boolean + default: false + is_active: + type: boolean + default: true + date_joined: + type: string + format: date-time + readOnly: true + is_first_login: + type: boolean + default: true + is_email_verified: + type: boolean + default: false + is_mfa_enabled: + type: boolean + default: true + required: + - date_joined + - display_name + - email + - first_name + - id + - last_name UserInfo: type: object properties: @@ -4025,6 +5060,12 @@ components: - display_name - email - id + securitySchemes: + apiKeyAuth: + type: http + scheme: bearer + description: Organization API key passed as a Bearer token. This is the scheme + used by the public SDK surface. servers: - url: https://api.roe-ai.com description: Production API diff --git a/src/roe/_generated/api/agents/agents_create.py b/src/roe/_generated/api/agents/agents_create.py index fc94bb3..1e2c5de 100644 --- a/src/roe/_generated/api/agents/agents_create.py +++ b/src/roe/_generated/api/agents/agents_create.py @@ -8,9 +8,10 @@ from ...types import Response, UNSET from ... import errors +from ...models.agents_create_response_400 import AgentsCreateResponse400 from ...models.base_agent import BaseAgent from ...models.base_agent_create_request import BaseAgentCreateRequest -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -55,7 +56,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> BaseAgent | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentsCreateResponse400 | BaseAgent | ErrorDetailResponse | None: if response.status_code == 201: response_201 = BaseAgent.from_dict(response.json()) @@ -64,14 +65,14 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_201 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + response_400 = AgentsCreateResponse400.from_dict(response.json()) return response_400 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) @@ -83,7 +84,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[BaseAgent | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentsCreateResponse400 | BaseAgent | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -94,11 +95,11 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: BaseAgentCreateRequest, organization_id: UUID | Unset = UNSET, -) -> Response[BaseAgent | ErrorResponse]: +) -> Response[AgentsCreateResponse400 | BaseAgent | ErrorDetailResponse]: """ Create a new base agent. Create a new base agent. @@ -113,7 +114,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[BaseAgent | ErrorResponse] + Response[AgentsCreateResponse400 | BaseAgent | ErrorDetailResponse] """ @@ -131,11 +132,11 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: BaseAgentCreateRequest, organization_id: UUID | Unset = UNSET, -) -> BaseAgent | ErrorResponse | None: +) -> AgentsCreateResponse400 | BaseAgent | ErrorDetailResponse | None: """ Create a new base agent. Create a new base agent. @@ -150,7 +151,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - BaseAgent | ErrorResponse + AgentsCreateResponse400 | BaseAgent | ErrorDetailResponse """ @@ -163,11 +164,11 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: BaseAgentCreateRequest, organization_id: UUID | Unset = UNSET, -) -> Response[BaseAgent | ErrorResponse]: +) -> Response[AgentsCreateResponse400 | BaseAgent | ErrorDetailResponse]: """ Create a new base agent. Create a new base agent. @@ -182,7 +183,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[BaseAgent | ErrorResponse] + Response[AgentsCreateResponse400 | BaseAgent | ErrorDetailResponse] """ @@ -200,11 +201,11 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: BaseAgentCreateRequest, organization_id: UUID | Unset = UNSET, -) -> BaseAgent | ErrorResponse | None: +) -> AgentsCreateResponse400 | BaseAgent | ErrorDetailResponse | None: """ Create a new base agent. Create a new base agent. @@ -219,7 +220,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - BaseAgent | ErrorResponse + AgentsCreateResponse400 | BaseAgent | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/agents/agents_destroy.py b/src/roe/_generated/api/agents/agents_destroy.py index 2dd5ef5..f96e11d 100644 --- a/src/roe/_generated/api/agents/agents_destroy.py +++ b/src/roe/_generated/api/agents/agents_destroy.py @@ -8,7 +8,8 @@ from ...types import Response, UNSET from ... import errors -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse +from ...models.qdrant_cleanup_error_response import QdrantCleanupErrorResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -47,27 +48,27 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorDetailResponse | QdrantCleanupErrorResponse | None: if response.status_code == 204: response_204 = cast(Any, None) return response_204 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) return response_404 if response.status_code == 500: - response_500 = ErrorResponse.from_dict(response.json()) + response_500 = QdrantCleanupErrorResponse.from_dict(response.json()) @@ -79,7 +80,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorDetailResponse | QdrantCleanupErrorResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -91,10 +92,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Any | ErrorResponse]: +) -> Response[Any | ErrorDetailResponse | QdrantCleanupErrorResponse]: """ Delete a base agent. Delete a specific base agent. @@ -108,7 +109,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse] + Response[Any | ErrorDetailResponse | QdrantCleanupErrorResponse] """ @@ -127,10 +128,10 @@ def sync_detailed( def sync( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Any | ErrorResponse | None: +) -> Any | ErrorDetailResponse | QdrantCleanupErrorResponse | None: """ Delete a base agent. Delete a specific base agent. @@ -144,7 +145,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse + Any | ErrorDetailResponse | QdrantCleanupErrorResponse """ @@ -158,10 +159,10 @@ def sync( async def asyncio_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Any | ErrorResponse]: +) -> Response[Any | ErrorDetailResponse | QdrantCleanupErrorResponse]: """ Delete a base agent. Delete a specific base agent. @@ -175,7 +176,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse] + Response[Any | ErrorDetailResponse | QdrantCleanupErrorResponse] """ @@ -194,10 +195,10 @@ async def asyncio_detailed( async def asyncio( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Any | ErrorResponse | None: +) -> Any | ErrorDetailResponse | QdrantCleanupErrorResponse | None: """ Delete a base agent. Delete a specific base agent. @@ -211,7 +212,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse + Any | ErrorDetailResponse | QdrantCleanupErrorResponse """ diff --git a/src/roe/_generated/api/agents/agents_duplicate_create.py b/src/roe/_generated/api/agents/agents_duplicate_create.py index 5c03646..2e63b46 100644 --- a/src/roe/_generated/api/agents/agents_duplicate_create.py +++ b/src/roe/_generated/api/agents/agents_duplicate_create.py @@ -9,7 +9,7 @@ from ... import errors from ...models.agent_version import AgentVersion -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -48,7 +48,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentVersion | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentVersion | ErrorDetailResponse | None: if response.status_code == 201: response_201 = AgentVersion.from_dict(response.json()) @@ -57,14 +57,14 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_201 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) @@ -76,7 +76,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentVersion | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentVersion | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -88,10 +88,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[AgentVersion | ErrorResponse]: +) -> Response[AgentVersion | ErrorDetailResponse]: """ Duplicate an agent. Create a new agent with the same attributes as the current version of the specified agent. @@ -105,7 +105,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentVersion | ErrorResponse] + Response[AgentVersion | ErrorDetailResponse] """ @@ -124,10 +124,10 @@ def sync_detailed( def sync( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> AgentVersion | ErrorResponse | None: +) -> AgentVersion | ErrorDetailResponse | None: """ Duplicate an agent. Create a new agent with the same attributes as the current version of the specified agent. @@ -141,7 +141,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentVersion | ErrorResponse + AgentVersion | ErrorDetailResponse """ @@ -155,10 +155,10 @@ def sync( async def asyncio_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[AgentVersion | ErrorResponse]: +) -> Response[AgentVersion | ErrorDetailResponse]: """ Duplicate an agent. Create a new agent with the same attributes as the current version of the specified agent. @@ -172,7 +172,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentVersion | ErrorResponse] + Response[AgentVersion | ErrorDetailResponse] """ @@ -191,10 +191,10 @@ async def asyncio_detailed( async def asyncio( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> AgentVersion | ErrorResponse | None: +) -> AgentVersion | ErrorDetailResponse | None: """ Duplicate an agent. Create a new agent with the same attributes as the current version of the specified agent. @@ -208,7 +208,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentVersion | ErrorResponse + AgentVersion | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/agents/agents_jobs_cancel_all_create.py b/src/roe/_generated/api/agents/agents_jobs_cancel_all_create.py index d7c57ab..8ab885d 100644 --- a/src/roe/_generated/api/agents/agents_jobs_cancel_all_create.py +++ b/src/roe/_generated/api/agents/agents_jobs_cancel_all_create.py @@ -8,7 +8,7 @@ from ...types import Response, UNSET from ... import errors -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -47,20 +47,20 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorDetailResponse | None: if response.status_code == 204: response_204 = cast(Any, None) return response_204 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) @@ -72,7 +72,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -84,10 +84,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Any | ErrorResponse]: +) -> Response[Any | ErrorDetailResponse]: """ Cancel all agent jobs Cancel all running jobs for a given agent. @@ -101,7 +101,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse] + Response[Any | ErrorDetailResponse] """ @@ -120,10 +120,10 @@ def sync_detailed( def sync( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Any | ErrorResponse | None: +) -> Any | ErrorDetailResponse | None: """ Cancel all agent jobs Cancel all running jobs for a given agent. @@ -137,7 +137,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse + Any | ErrorDetailResponse """ @@ -151,10 +151,10 @@ def sync( async def asyncio_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Any | ErrorResponse]: +) -> Response[Any | ErrorDetailResponse]: """ Cancel all agent jobs Cancel all running jobs for a given agent. @@ -168,7 +168,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse] + Response[Any | ErrorDetailResponse] """ @@ -187,10 +187,10 @@ async def asyncio_detailed( async def asyncio( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Any | ErrorResponse | None: +) -> Any | ErrorDetailResponse | None: """ Cancel all agent jobs Cancel all running jobs for a given agent. @@ -204,7 +204,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse + Any | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/agents/agents_jobs_cancel_create.py b/src/roe/_generated/api/agents/agents_jobs_cancel_create.py index a9a20c1..32c6e3c 100644 --- a/src/roe/_generated/api/agents/agents_jobs_cancel_create.py +++ b/src/roe/_generated/api/agents/agents_jobs_cancel_create.py @@ -8,7 +8,7 @@ from ...types import Response, UNSET from ... import errors -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -47,20 +47,20 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorDetailResponse | None: if response.status_code == 204: response_204 = cast(Any, None) return response_204 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) @@ -72,7 +72,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -84,10 +84,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Any | ErrorResponse]: +) -> Response[Any | ErrorDetailResponse]: """ Cancel an agent job Cancel a running agent job by its ID. @@ -101,7 +101,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse] + Response[Any | ErrorDetailResponse] """ @@ -120,10 +120,10 @@ def sync_detailed( def sync( job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Any | ErrorResponse | None: +) -> Any | ErrorDetailResponse | None: """ Cancel an agent job Cancel a running agent job by its ID. @@ -137,7 +137,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse + Any | ErrorDetailResponse """ @@ -151,10 +151,10 @@ def sync( async def asyncio_detailed( job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Any | ErrorResponse]: +) -> Response[Any | ErrorDetailResponse]: """ Cancel an agent job Cancel a running agent job by its ID. @@ -168,7 +168,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse] + Response[Any | ErrorDetailResponse] """ @@ -187,10 +187,10 @@ async def asyncio_detailed( async def asyncio( job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Any | ErrorResponse | None: +) -> Any | ErrorDetailResponse | None: """ Cancel an agent job Cancel a running agent job by its ID. @@ -204,7 +204,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse + Any | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/agents/agents_jobs_delete_data_create.py b/src/roe/_generated/api/agents/agents_jobs_delete_data_create.py index 3b932a7..b9c02a7 100644 --- a/src/roe/_generated/api/agents/agents_jobs_delete_data_create.py +++ b/src/roe/_generated/api/agents/agents_jobs_delete_data_create.py @@ -9,7 +9,8 @@ from ... import errors from ...models.agent_job_delete_data_response import AgentJobDeleteDataResponse -from ...models.error_response import ErrorResponse +from ...models.api_error_response import ApiErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -48,7 +49,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentJobDeleteDataResponse | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentJobDeleteDataResponse | ApiErrorResponse | ErrorDetailResponse | None: if response.status_code == 200: response_200 = AgentJobDeleteDataResponse.from_dict(response.json()) @@ -57,40 +58,33 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + response_400 = ApiErrorResponse.from_dict(response.json()) return response_400 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) return response_404 - if response.status_code == 500: - response_500 = ErrorResponse.from_dict(response.json()) - - - - return response_500 - if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentJobDeleteDataResponse | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentJobDeleteDataResponse | ApiErrorResponse | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -102,10 +96,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[AgentJobDeleteDataResponse | ErrorResponse]: +) -> Response[AgentJobDeleteDataResponse | ApiErrorResponse | ErrorDetailResponse]: """ Delete agent job data Delete uploaded inputs from S3, sanitize stored blob data (outputs, steps, logs, trace), and delete @@ -120,7 +114,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentJobDeleteDataResponse | ErrorResponse] + Response[AgentJobDeleteDataResponse | ApiErrorResponse | ErrorDetailResponse] """ @@ -139,10 +133,10 @@ def sync_detailed( def sync( job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> AgentJobDeleteDataResponse | ErrorResponse | None: +) -> AgentJobDeleteDataResponse | ApiErrorResponse | ErrorDetailResponse | None: """ Delete agent job data Delete uploaded inputs from S3, sanitize stored blob data (outputs, steps, logs, trace), and delete @@ -157,7 +151,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentJobDeleteDataResponse | ErrorResponse + AgentJobDeleteDataResponse | ApiErrorResponse | ErrorDetailResponse """ @@ -171,10 +165,10 @@ def sync( async def asyncio_detailed( job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[AgentJobDeleteDataResponse | ErrorResponse]: +) -> Response[AgentJobDeleteDataResponse | ApiErrorResponse | ErrorDetailResponse]: """ Delete agent job data Delete uploaded inputs from S3, sanitize stored blob data (outputs, steps, logs, trace), and delete @@ -189,7 +183,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentJobDeleteDataResponse | ErrorResponse] + Response[AgentJobDeleteDataResponse | ApiErrorResponse | ErrorDetailResponse] """ @@ -208,10 +202,10 @@ async def asyncio_detailed( async def asyncio( job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> AgentJobDeleteDataResponse | ErrorResponse | None: +) -> AgentJobDeleteDataResponse | ApiErrorResponse | ErrorDetailResponse | None: """ Delete agent job data Delete uploaded inputs from S3, sanitize stored blob data (outputs, steps, logs, trace), and delete @@ -226,7 +220,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentJobDeleteDataResponse | ErrorResponse + AgentJobDeleteDataResponse | ApiErrorResponse | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/agents/agents_jobs_references_retrieve.py b/src/roe/_generated/api/agents/agents_jobs_references_retrieve.py index 909ea54..4a8aaf5 100644 --- a/src/roe/_generated/api/agents/agents_jobs_references_retrieve.py +++ b/src/roe/_generated/api/agents/agents_jobs_references_retrieve.py @@ -8,7 +8,14 @@ from ...types import Response, UNSET from ... import errors +from ...models.agents_jobs_references_retrieve_response_400_type_1 import AgentsJobsReferencesRetrieveResponse400Type1 +from ...models.agents_jobs_references_retrieve_response_400_type_2 import AgentsJobsReferencesRetrieveResponse400Type2 +from ...models.api_error_response import ApiErrorResponse +from ...models.error_detail_response import ErrorDetailResponse +from ...types import File, FileTypes from ...types import UNSET, Unset +from io import BytesIO +from typing import cast from uuid import UUID @@ -17,6 +24,7 @@ def _get_kwargs( agent_job_id: UUID, resource_id: str, *, + download: bool | Unset = UNSET, organization_id: UUID | Unset = UNSET, ) -> dict[str, Any]: @@ -26,6 +34,8 @@ def _get_kwargs( params: dict[str, Any] = {} + params["download"] = download + json_organization_id: str | Unset = UNSET if not isinstance(organization_id, Unset): json_organization_id = str(organization_id) @@ -46,9 +56,84 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentsJobsReferencesRetrieveResponse400Type1 | AgentsJobsReferencesRetrieveResponse400Type2 | list[str] | ApiErrorResponse | ErrorDetailResponse | File | None: if response.status_code == 200: - return None + response_200 = File( + payload = BytesIO(response.content) + ) + + + + return response_200 + + if response.status_code == 206: + response_206 = File( + payload = BytesIO(response.content) + ) + + + + return response_206 + + if response.status_code == 400: + def _parse_response_400(data: object) -> AgentsJobsReferencesRetrieveResponse400Type1 | AgentsJobsReferencesRetrieveResponse400Type2 | list[str]: + try: + if not isinstance(data, list): + raise TypeError() + response_400_type_0 = cast(list[str], data) + + return response_400_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + try: + if not isinstance(data, dict): + raise TypeError() + response_400_type_1 = AgentsJobsReferencesRetrieveResponse400Type1.from_dict(data) + + + + return response_400_type_1 + except (TypeError, ValueError, AttributeError, KeyError): + pass + if not isinstance(data, dict): + raise TypeError() + response_400_type_2 = AgentsJobsReferencesRetrieveResponse400Type2.from_dict(data) + + + + return response_400_type_2 + + response_400 = _parse_response_400(response.json()) + + return response_400 + + if response.status_code == 403: + response_403 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_403 + + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + + if response.status_code == 416: + response_416 = ApiErrorResponse.from_dict(response.json()) + + + + return response_416 + + if response.status_code == 500: + response_500 = ApiErrorResponse.from_dict(response.json()) + + + + return response_500 if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) @@ -56,7 +141,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentsJobsReferencesRetrieveResponse400Type1 | AgentsJobsReferencesRetrieveResponse400Type2 | list[str] | ApiErrorResponse | ErrorDetailResponse | File]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -69,19 +154,17 @@ def sync_detailed( agent_job_id: UUID, resource_id: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, + download: bool | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[Any]: - """ Token-authenticated proxy view for serving web resource references from S3. - - Uses Organization API Key authentication (for external API consumers). - - URL: /api/v1/agents/jobs/{agent_job_id}/references/{resource_id}/ +) -> Response[AgentsJobsReferencesRetrieveResponse400Type1 | AgentsJobsReferencesRetrieveResponse400Type2 | list[str] | ApiErrorResponse | ErrorDetailResponse | File]: + """ Serve a reference file associated with an agent job. Args: agent_job_id (UUID): resource_id (str): + download (bool | Unset): organization_id (UUID | Unset): Raises: @@ -89,13 +172,14 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any] + Response[AgentsJobsReferencesRetrieveResponse400Type1 | AgentsJobsReferencesRetrieveResponse400Type2 | list[str] | ApiErrorResponse | ErrorDetailResponse | File] """ kwargs = _get_kwargs( agent_job_id=agent_job_id, resource_id=resource_id, +download=download, organization_id=organization_id, ) @@ -106,24 +190,56 @@ def sync_detailed( return _build_response(client=client, response=response) - -async def asyncio_detailed( +def sync( agent_job_id: UUID, resource_id: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, + download: bool | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[Any]: - """ Token-authenticated proxy view for serving web resource references from S3. +) -> AgentsJobsReferencesRetrieveResponse400Type1 | AgentsJobsReferencesRetrieveResponse400Type2 | list[str] | ApiErrorResponse | ErrorDetailResponse | File | None: + """ Serve a reference file associated with an agent job. - Uses Organization API Key authentication (for external API consumers). + Args: + agent_job_id (UUID): + resource_id (str): + download (bool | Unset): + organization_id (UUID | Unset): - URL: /api/v1/agents/jobs/{agent_job_id}/references/{resource_id}/ + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AgentsJobsReferencesRetrieveResponse400Type1 | AgentsJobsReferencesRetrieveResponse400Type2 | list[str] | ApiErrorResponse | ErrorDetailResponse | File + """ + + + return sync_detailed( + agent_job_id=agent_job_id, +resource_id=resource_id, +client=client, +download=download, +organization_id=organization_id, + + ).parsed + +async def asyncio_detailed( + agent_job_id: UUID, + resource_id: str, + *, + client: AuthenticatedClient, + download: bool | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> Response[AgentsJobsReferencesRetrieveResponse400Type1 | AgentsJobsReferencesRetrieveResponse400Type2 | list[str] | ApiErrorResponse | ErrorDetailResponse | File]: + """ Serve a reference file associated with an agent job. Args: agent_job_id (UUID): resource_id (str): + download (bool | Unset): organization_id (UUID | Unset): Raises: @@ -131,13 +247,14 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any] + Response[AgentsJobsReferencesRetrieveResponse400Type1 | AgentsJobsReferencesRetrieveResponse400Type2 | list[str] | ApiErrorResponse | ErrorDetailResponse | File] """ kwargs = _get_kwargs( agent_job_id=agent_job_id, resource_id=resource_id, +download=download, organization_id=organization_id, ) @@ -148,3 +265,37 @@ async def asyncio_detailed( return _build_response(client=client, response=response) +async def asyncio( + agent_job_id: UUID, + resource_id: str, + *, + client: AuthenticatedClient, + download: bool | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> AgentsJobsReferencesRetrieveResponse400Type1 | AgentsJobsReferencesRetrieveResponse400Type2 | list[str] | ApiErrorResponse | ErrorDetailResponse | File | None: + """ Serve a reference file associated with an agent job. + + Args: + agent_job_id (UUID): + resource_id (str): + download (bool | Unset): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AgentsJobsReferencesRetrieveResponse400Type1 | AgentsJobsReferencesRetrieveResponse400Type2 | list[str] | ApiErrorResponse | ErrorDetailResponse | File + """ + + + return (await asyncio_detailed( + agent_job_id=agent_job_id, +resource_id=resource_id, +client=client, +download=download, +organization_id=organization_id, + + )).parsed diff --git a/src/roe/_generated/api/agents/agents_jobs_result_retrieve.py b/src/roe/_generated/api/agents/agents_jobs_result_retrieve.py index 852f1fd..9c8b831 100644 --- a/src/roe/_generated/api/agents/agents_jobs_result_retrieve.py +++ b/src/roe/_generated/api/agents/agents_jobs_result_retrieve.py @@ -9,7 +9,7 @@ from ... import errors from ...models.agent_job_result_response import AgentJobResultResponse -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -48,7 +48,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentJobResultResponse | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentJobResultResponse | Any | ErrorDetailResponse | None: if response.status_code == 200: response_200 = AgentJobResultResponse.from_dict(response.json()) @@ -57,24 +57,21 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) return response_404 if response.status_code == 500: - response_500 = ErrorResponse.from_dict(response.json()) - - - + response_500 = cast(Any, None) return response_500 if client.raise_on_unexpected_status: @@ -83,7 +80,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentJobResultResponse | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentJobResultResponse | Any | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -95,10 +92,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( agent_job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[AgentJobResultResponse | ErrorResponse]: +) -> Response[AgentJobResultResponse | Any | ErrorDetailResponse]: """ Get agent job result data. Args: @@ -110,7 +107,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentJobResultResponse | ErrorResponse] + Response[AgentJobResultResponse | Any | ErrorDetailResponse] """ @@ -129,10 +126,10 @@ def sync_detailed( def sync( agent_job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> AgentJobResultResponse | ErrorResponse | None: +) -> AgentJobResultResponse | Any | ErrorDetailResponse | None: """ Get agent job result data. Args: @@ -144,7 +141,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentJobResultResponse | ErrorResponse + AgentJobResultResponse | Any | ErrorDetailResponse """ @@ -158,10 +155,10 @@ def sync( async def asyncio_detailed( agent_job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[AgentJobResultResponse | ErrorResponse]: +) -> Response[AgentJobResultResponse | Any | ErrorDetailResponse]: """ Get agent job result data. Args: @@ -173,7 +170,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentJobResultResponse | ErrorResponse] + Response[AgentJobResultResponse | Any | ErrorDetailResponse] """ @@ -192,10 +189,10 @@ async def asyncio_detailed( async def asyncio( agent_job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> AgentJobResultResponse | ErrorResponse | None: +) -> AgentJobResultResponse | Any | ErrorDetailResponse | None: """ Get agent job result data. Args: @@ -207,7 +204,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentJobResultResponse | ErrorResponse + AgentJobResultResponse | Any | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/agents/agents_jobs_results_create.py b/src/roe/_generated/api/agents/agents_jobs_results_create.py index e85cfb2..d6bc323 100644 --- a/src/roe/_generated/api/agents/agents_jobs_results_create.py +++ b/src/roe/_generated/api/agents/agents_jobs_results_create.py @@ -8,9 +8,10 @@ from ...types import Response, UNSET from ... import errors -from ...models.agent_job_result_many_request_request import AgentJobResultManyRequestRequest -from ...models.error_response import ErrorResponse -from ...models.paginated_agent_job_result_item_list import PaginatedAgentJobResultItemList +from ...models.agent_job_result_item import AgentJobResultItem +from ...models.agent_job_result_many_request import AgentJobResultManyRequest +from ...models.agents_jobs_results_create_response_400 import AgentsJobsResultsCreateResponse400 +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -19,7 +20,7 @@ def _get_kwargs( *, - body: AgentJobResultManyRequestRequest, + body: AgentJobResultManyRequest, organization_id: UUID | Unset = UNSET, ) -> dict[str, Any]: @@ -55,23 +56,28 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorResponse | PaginatedAgentJobResultItemList | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentsJobsResultsCreateResponse400 | ErrorDetailResponse | list[AgentJobResultItem] | None: if response.status_code == 200: - response_200 = PaginatedAgentJobResultItemList.from_dict(response.json()) + response_200 = [] + _response_200 = response.json() + for response_200_item_data in (_response_200): + response_200_item = AgentJobResultItem.from_dict(response_200_item_data) + response_200.append(response_200_item) + return response_200 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + response_400 = AgentsJobsResultsCreateResponse400.from_dict(response.json()) return response_400 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) @@ -83,7 +89,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorResponse | PaginatedAgentJobResultItemList]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentsJobsResultsCreateResponse400 | ErrorDetailResponse | list[AgentJobResultItem]]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -94,25 +100,25 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, - body: AgentJobResultManyRequestRequest, + client: AuthenticatedClient, + body: AgentJobResultManyRequest, organization_id: UUID | Unset = UNSET, -) -> Response[ErrorResponse | PaginatedAgentJobResultItemList]: +) -> Response[AgentsJobsResultsCreateResponse400 | ErrorDetailResponse | list[AgentJobResultItem]]: """ Get results for multiple agent jobs Retrieve the detailed results for multiple agent jobs by providing a list of job IDs Args: organization_id (UUID | Unset): - body (AgentJobResultManyRequestRequest): Serializer for bulk agent job results request. + body (AgentJobResultManyRequest): Serializer for bulk agent job results request. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | PaginatedAgentJobResultItemList] + Response[AgentsJobsResultsCreateResponse400 | ErrorDetailResponse | list[AgentJobResultItem]] """ @@ -130,25 +136,25 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, - body: AgentJobResultManyRequestRequest, + client: AuthenticatedClient, + body: AgentJobResultManyRequest, organization_id: UUID | Unset = UNSET, -) -> ErrorResponse | PaginatedAgentJobResultItemList | None: +) -> AgentsJobsResultsCreateResponse400 | ErrorDetailResponse | list[AgentJobResultItem] | None: """ Get results for multiple agent jobs Retrieve the detailed results for multiple agent jobs by providing a list of job IDs Args: organization_id (UUID | Unset): - body (AgentJobResultManyRequestRequest): Serializer for bulk agent job results request. + body (AgentJobResultManyRequest): Serializer for bulk agent job results request. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | PaginatedAgentJobResultItemList + AgentsJobsResultsCreateResponse400 | ErrorDetailResponse | list[AgentJobResultItem] """ @@ -161,25 +167,25 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, - body: AgentJobResultManyRequestRequest, + client: AuthenticatedClient, + body: AgentJobResultManyRequest, organization_id: UUID | Unset = UNSET, -) -> Response[ErrorResponse | PaginatedAgentJobResultItemList]: +) -> Response[AgentsJobsResultsCreateResponse400 | ErrorDetailResponse | list[AgentJobResultItem]]: """ Get results for multiple agent jobs Retrieve the detailed results for multiple agent jobs by providing a list of job IDs Args: organization_id (UUID | Unset): - body (AgentJobResultManyRequestRequest): Serializer for bulk agent job results request. + body (AgentJobResultManyRequest): Serializer for bulk agent job results request. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | PaginatedAgentJobResultItemList] + Response[AgentsJobsResultsCreateResponse400 | ErrorDetailResponse | list[AgentJobResultItem]] """ @@ -197,25 +203,25 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, - body: AgentJobResultManyRequestRequest, + client: AuthenticatedClient, + body: AgentJobResultManyRequest, organization_id: UUID | Unset = UNSET, -) -> ErrorResponse | PaginatedAgentJobResultItemList | None: +) -> AgentsJobsResultsCreateResponse400 | ErrorDetailResponse | list[AgentJobResultItem] | None: """ Get results for multiple agent jobs Retrieve the detailed results for multiple agent jobs by providing a list of job IDs Args: organization_id (UUID | Unset): - body (AgentJobResultManyRequestRequest): Serializer for bulk agent job results request. + body (AgentJobResultManyRequest): Serializer for bulk agent job results request. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | PaginatedAgentJobResultItemList + AgentsJobsResultsCreateResponse400 | ErrorDetailResponse | list[AgentJobResultItem] """ diff --git a/src/roe/_generated/api/agents/agents_jobs_status_retrieve.py b/src/roe/_generated/api/agents/agents_jobs_status_retrieve.py index dfe4825..89db39c 100644 --- a/src/roe/_generated/api/agents/agents_jobs_status_retrieve.py +++ b/src/roe/_generated/api/agents/agents_jobs_status_retrieve.py @@ -8,8 +8,8 @@ from ...types import Response, UNSET from ... import errors -from ...models.agent_job_status import AgentJobStatus -from ...models.error_response import ErrorResponse +from ...models.agent_job_single_status import AgentJobSingleStatus +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -48,23 +48,23 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentJobStatus | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentJobSingleStatus | ErrorDetailResponse | None: if response.status_code == 200: - response_200 = AgentJobStatus.from_dict(response.json()) + response_200 = AgentJobSingleStatus.from_dict(response.json()) return response_200 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) @@ -76,7 +76,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentJobStatus | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentJobSingleStatus | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -88,10 +88,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[AgentJobStatus | ErrorResponse]: +) -> Response[AgentJobSingleStatus | ErrorDetailResponse]: """ Get agent job status. Args: @@ -103,7 +103,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentJobStatus | ErrorResponse] + Response[AgentJobSingleStatus | ErrorDetailResponse] """ @@ -122,10 +122,10 @@ def sync_detailed( def sync( job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> AgentJobStatus | ErrorResponse | None: +) -> AgentJobSingleStatus | ErrorDetailResponse | None: """ Get agent job status. Args: @@ -137,7 +137,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentJobStatus | ErrorResponse + AgentJobSingleStatus | ErrorDetailResponse """ @@ -151,10 +151,10 @@ def sync( async def asyncio_detailed( job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[AgentJobStatus | ErrorResponse]: +) -> Response[AgentJobSingleStatus | ErrorDetailResponse]: """ Get agent job status. Args: @@ -166,7 +166,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentJobStatus | ErrorResponse] + Response[AgentJobSingleStatus | ErrorDetailResponse] """ @@ -185,10 +185,10 @@ async def asyncio_detailed( async def asyncio( job_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> AgentJobStatus | ErrorResponse | None: +) -> AgentJobSingleStatus | ErrorDetailResponse | None: """ Get agent job status. Args: @@ -200,7 +200,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentJobStatus | ErrorResponse + AgentJobSingleStatus | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/agents/agents_jobs_statuses_create.py b/src/roe/_generated/api/agents/agents_jobs_statuses_create.py index 2abb735..fc4e73d 100644 --- a/src/roe/_generated/api/agents/agents_jobs_statuses_create.py +++ b/src/roe/_generated/api/agents/agents_jobs_statuses_create.py @@ -9,8 +9,9 @@ from ... import errors from ...models.agent_job_status import AgentJobStatus -from ...models.agent_job_status_many_request_request import AgentJobStatusManyRequestRequest -from ...models.error_response import ErrorResponse +from ...models.agent_job_status_many_request import AgentJobStatusManyRequest +from ...models.agents_jobs_statuses_create_response_400 import AgentsJobsStatusesCreateResponse400 +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -19,7 +20,7 @@ def _get_kwargs( *, - body: AgentJobStatusManyRequestRequest, + body: AgentJobStatusManyRequest, organization_id: UUID | Unset = UNSET, ) -> dict[str, Any]: @@ -55,7 +56,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorResponse | list[AgentJobStatus] | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentsJobsStatusesCreateResponse400 | ErrorDetailResponse | list[AgentJobStatus] | None: if response.status_code == 200: response_200 = [] _response_200 = response.json() @@ -69,14 +70,14 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + response_400 = AgentsJobsStatusesCreateResponse400.from_dict(response.json()) return response_400 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) @@ -88,7 +89,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorResponse | list[AgentJobStatus]]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentsJobsStatusesCreateResponse400 | ErrorDetailResponse | list[AgentJobStatus]]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -99,25 +100,25 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, - body: AgentJobStatusManyRequestRequest, + client: AuthenticatedClient, + body: AgentJobStatusManyRequest, organization_id: UUID | Unset = UNSET, -) -> Response[ErrorResponse | list[AgentJobStatus]]: +) -> Response[AgentsJobsStatusesCreateResponse400 | ErrorDetailResponse | list[AgentJobStatus]]: """ Get status for multiple agent jobs Retrieve the current status for multiple agent jobs by providing a list of job IDs Args: organization_id (UUID | Unset): - body (AgentJobStatusManyRequestRequest): Serializer for bulk agent job status request. + body (AgentJobStatusManyRequest): Serializer for bulk agent job status request. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | list[AgentJobStatus]] + Response[AgentsJobsStatusesCreateResponse400 | ErrorDetailResponse | list[AgentJobStatus]] """ @@ -135,25 +136,25 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, - body: AgentJobStatusManyRequestRequest, + client: AuthenticatedClient, + body: AgentJobStatusManyRequest, organization_id: UUID | Unset = UNSET, -) -> ErrorResponse | list[AgentJobStatus] | None: +) -> AgentsJobsStatusesCreateResponse400 | ErrorDetailResponse | list[AgentJobStatus] | None: """ Get status for multiple agent jobs Retrieve the current status for multiple agent jobs by providing a list of job IDs Args: organization_id (UUID | Unset): - body (AgentJobStatusManyRequestRequest): Serializer for bulk agent job status request. + body (AgentJobStatusManyRequest): Serializer for bulk agent job status request. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | list[AgentJobStatus] + AgentsJobsStatusesCreateResponse400 | ErrorDetailResponse | list[AgentJobStatus] """ @@ -166,25 +167,25 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, - body: AgentJobStatusManyRequestRequest, + client: AuthenticatedClient, + body: AgentJobStatusManyRequest, organization_id: UUID | Unset = UNSET, -) -> Response[ErrorResponse | list[AgentJobStatus]]: +) -> Response[AgentsJobsStatusesCreateResponse400 | ErrorDetailResponse | list[AgentJobStatus]]: """ Get status for multiple agent jobs Retrieve the current status for multiple agent jobs by providing a list of job IDs Args: organization_id (UUID | Unset): - body (AgentJobStatusManyRequestRequest): Serializer for bulk agent job status request. + body (AgentJobStatusManyRequest): Serializer for bulk agent job status request. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | list[AgentJobStatus]] + Response[AgentsJobsStatusesCreateResponse400 | ErrorDetailResponse | list[AgentJobStatus]] """ @@ -202,25 +203,25 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, - body: AgentJobStatusManyRequestRequest, + client: AuthenticatedClient, + body: AgentJobStatusManyRequest, organization_id: UUID | Unset = UNSET, -) -> ErrorResponse | list[AgentJobStatus] | None: +) -> AgentsJobsStatusesCreateResponse400 | ErrorDetailResponse | list[AgentJobStatus] | None: """ Get status for multiple agent jobs Retrieve the current status for multiple agent jobs by providing a list of job IDs Args: organization_id (UUID | Unset): - body (AgentJobStatusManyRequestRequest): Serializer for bulk agent job status request. + body (AgentJobStatusManyRequest): Serializer for bulk agent job status request. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | list[AgentJobStatus] + AgentsJobsStatusesCreateResponse400 | ErrorDetailResponse | list[AgentJobStatus] """ diff --git a/src/roe/_generated/api/agents/agents_list.py b/src/roe/_generated/api/agents/agents_list.py index b2afbb5..5576f99 100644 --- a/src/roe/_generated/api/agents/agents_list.py +++ b/src/roe/_generated/api/agents/agents_list.py @@ -8,7 +8,8 @@ from ...types import Response, UNSET from ... import errors -from ...models.error_response import ErrorResponse +from ...models.agents_list_response_400 import AgentsListResponse400 +from ...models.error_detail_response import ErrorDetailResponse from ...models.paginated_base_agent_list import PaginatedBaseAgentList from ...types import UNSET, Unset from typing import cast @@ -74,7 +75,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorResponse | PaginatedBaseAgentList | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentsListResponse400 | ErrorDetailResponse | PaginatedBaseAgentList | None: if response.status_code == 200: response_200 = PaginatedBaseAgentList.from_dict(response.json()) @@ -83,21 +84,21 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + response_400 = AgentsListResponse400.from_dict(response.json()) return response_400 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) @@ -109,7 +110,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorResponse | PaginatedBaseAgentList]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentsListResponse400 | ErrorDetailResponse | PaginatedBaseAgentList]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -120,7 +121,7 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, engine_class_id: str | Unset = UNSET, exclude_engine_class_id: str | Unset = UNSET, include_job_stats: bool | Unset = UNSET, @@ -131,7 +132,7 @@ def sync_detailed( search: str | Unset = UNSET, tags: list[str] | Unset = UNSET, -) -> Response[ErrorResponse | PaginatedBaseAgentList]: +) -> Response[AgentsListResponse400 | ErrorDetailResponse | PaginatedBaseAgentList]: """ List agents or create a new agent. Retrieve a list of agents or create a new agent. @@ -152,7 +153,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | PaginatedBaseAgentList] + Response[AgentsListResponse400 | ErrorDetailResponse | PaginatedBaseAgentList] """ @@ -177,7 +178,7 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, engine_class_id: str | Unset = UNSET, exclude_engine_class_id: str | Unset = UNSET, include_job_stats: bool | Unset = UNSET, @@ -188,7 +189,7 @@ def sync( search: str | Unset = UNSET, tags: list[str] | Unset = UNSET, -) -> ErrorResponse | PaginatedBaseAgentList | None: +) -> AgentsListResponse400 | ErrorDetailResponse | PaginatedBaseAgentList | None: """ List agents or create a new agent. Retrieve a list of agents or create a new agent. @@ -209,7 +210,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | PaginatedBaseAgentList + AgentsListResponse400 | ErrorDetailResponse | PaginatedBaseAgentList """ @@ -229,7 +230,7 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, engine_class_id: str | Unset = UNSET, exclude_engine_class_id: str | Unset = UNSET, include_job_stats: bool | Unset = UNSET, @@ -240,7 +241,7 @@ async def asyncio_detailed( search: str | Unset = UNSET, tags: list[str] | Unset = UNSET, -) -> Response[ErrorResponse | PaginatedBaseAgentList]: +) -> Response[AgentsListResponse400 | ErrorDetailResponse | PaginatedBaseAgentList]: """ List agents or create a new agent. Retrieve a list of agents or create a new agent. @@ -261,7 +262,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | PaginatedBaseAgentList] + Response[AgentsListResponse400 | ErrorDetailResponse | PaginatedBaseAgentList] """ @@ -286,7 +287,7 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, engine_class_id: str | Unset = UNSET, exclude_engine_class_id: str | Unset = UNSET, include_job_stats: bool | Unset = UNSET, @@ -297,7 +298,7 @@ async def asyncio( search: str | Unset = UNSET, tags: list[str] | Unset = UNSET, -) -> ErrorResponse | PaginatedBaseAgentList | None: +) -> AgentsListResponse400 | ErrorDetailResponse | PaginatedBaseAgentList | None: """ List agents or create a new agent. Retrieve a list of agents or create a new agent. @@ -318,7 +319,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | PaginatedBaseAgentList + AgentsListResponse400 | ErrorDetailResponse | PaginatedBaseAgentList """ diff --git a/src/roe/_generated/api/agents/agents_partial_update.py b/src/roe/_generated/api/agents/agents_partial_update.py index 13eda1f..939e056 100644 --- a/src/roe/_generated/api/agents/agents_partial_update.py +++ b/src/roe/_generated/api/agents/agents_partial_update.py @@ -8,8 +8,9 @@ from ...types import Response, UNSET from ... import errors +from ...models.agents_partial_update_response_400 import AgentsPartialUpdateResponse400 from ...models.base_agent import BaseAgent -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...models.patched_base_agent_update_request import PatchedBaseAgentUpdateRequest from ...types import UNSET, Unset from typing import cast @@ -58,7 +59,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> BaseAgent | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentsPartialUpdateResponse400 | BaseAgent | ErrorDetailResponse | None: if response.status_code == 200: response_200 = BaseAgent.from_dict(response.json()) @@ -67,21 +68,21 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + response_400 = AgentsPartialUpdateResponse400.from_dict(response.json()) return response_400 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) @@ -93,7 +94,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[BaseAgent | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentsPartialUpdateResponse400 | BaseAgent | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -105,11 +106,11 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: PatchedBaseAgentUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[BaseAgent | ErrorResponse]: +) -> Response[AgentsPartialUpdateResponse400 | BaseAgent | ErrorDetailResponse]: """ Partially update an agent. Partially update details of a specific base agent. @@ -124,7 +125,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[BaseAgent | ErrorResponse] + Response[AgentsPartialUpdateResponse400 | BaseAgent | ErrorDetailResponse] """ @@ -144,11 +145,11 @@ def sync_detailed( def sync( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: PatchedBaseAgentUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> BaseAgent | ErrorResponse | None: +) -> AgentsPartialUpdateResponse400 | BaseAgent | ErrorDetailResponse | None: """ Partially update an agent. Partially update details of a specific base agent. @@ -163,7 +164,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - BaseAgent | ErrorResponse + AgentsPartialUpdateResponse400 | BaseAgent | ErrorDetailResponse """ @@ -178,11 +179,11 @@ def sync( async def asyncio_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: PatchedBaseAgentUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[BaseAgent | ErrorResponse]: +) -> Response[AgentsPartialUpdateResponse400 | BaseAgent | ErrorDetailResponse]: """ Partially update an agent. Partially update details of a specific base agent. @@ -197,7 +198,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[BaseAgent | ErrorResponse] + Response[AgentsPartialUpdateResponse400 | BaseAgent | ErrorDetailResponse] """ @@ -217,11 +218,11 @@ async def asyncio_detailed( async def asyncio( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: PatchedBaseAgentUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> BaseAgent | ErrorResponse | None: +) -> AgentsPartialUpdateResponse400 | BaseAgent | ErrorDetailResponse | None: """ Partially update an agent. Partially update details of a specific base agent. @@ -236,7 +237,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - BaseAgent | ErrorResponse + AgentsPartialUpdateResponse400 | BaseAgent | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/agents/agents_retrieve.py b/src/roe/_generated/api/agents/agents_retrieve.py index f217f37..6fb7550 100644 --- a/src/roe/_generated/api/agents/agents_retrieve.py +++ b/src/roe/_generated/api/agents/agents_retrieve.py @@ -9,7 +9,7 @@ from ... import errors from ...models.base_agent import BaseAgent -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -48,7 +48,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> BaseAgent | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> BaseAgent | ErrorDetailResponse | None: if response.status_code == 200: response_200 = BaseAgent.from_dict(response.json()) @@ -57,14 +57,14 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) @@ -76,7 +76,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[BaseAgent | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[BaseAgent | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -88,10 +88,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[BaseAgent | ErrorResponse]: +) -> Response[BaseAgent | ErrorDetailResponse]: """ Retrieve an agent. Retrieve details of a specific base agent. @@ -105,7 +105,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[BaseAgent | ErrorResponse] + Response[BaseAgent | ErrorDetailResponse] """ @@ -124,10 +124,10 @@ def sync_detailed( def sync( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> BaseAgent | ErrorResponse | None: +) -> BaseAgent | ErrorDetailResponse | None: """ Retrieve an agent. Retrieve details of a specific base agent. @@ -141,7 +141,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - BaseAgent | ErrorResponse + BaseAgent | ErrorDetailResponse """ @@ -155,10 +155,10 @@ def sync( async def asyncio_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[BaseAgent | ErrorResponse]: +) -> Response[BaseAgent | ErrorDetailResponse]: """ Retrieve an agent. Retrieve details of a specific base agent. @@ -172,7 +172,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[BaseAgent | ErrorResponse] + Response[BaseAgent | ErrorDetailResponse] """ @@ -191,10 +191,10 @@ async def asyncio_detailed( async def asyncio( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> BaseAgent | ErrorResponse | None: +) -> BaseAgent | ErrorDetailResponse | None: """ Retrieve an agent. Retrieve details of a specific base agent. @@ -208,7 +208,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - BaseAgent | ErrorResponse + BaseAgent | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/agents/agents_run.py b/src/roe/_generated/api/agents/agents_run.py index 6095cff..65ecc58 100644 --- a/src/roe/_generated/api/agents/agents_run.py +++ b/src/roe/_generated/api/agents/agents_run.py @@ -9,8 +9,10 @@ from ... import errors from ...models.agent_datum import AgentDatum -from ...models.agent_execution_request_request import AgentExecutionRequestRequest -from ...models.error_response import ErrorResponse +from ...models.agent_execution_request import AgentExecutionRequest +from ...models.agents_run_response_400_type_1 import AgentsRunResponse400Type1 +from ...models.agents_run_response_400_type_2 import AgentsRunResponse400Type2 +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -20,7 +22,7 @@ def _get_kwargs( agent_id: UUID, *, - body: AgentExecutionRequestRequest | Unset = UNSET, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, ) -> dict[str, Any]: @@ -58,7 +60,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorResponse | list[AgentDatum] | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentsRunResponse400Type1 | AgentsRunResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum] | None: if response.status_code == 200: response_200 = [] _response_200 = response.json() @@ -72,40 +74,65 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + def _parse_response_400(data: object) -> AgentsRunResponse400Type1 | AgentsRunResponse400Type2 | list[str]: + try: + if not isinstance(data, list): + raise TypeError() + response_400_type_0 = cast(list[str], data) + return response_400_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + try: + if not isinstance(data, dict): + raise TypeError() + response_400_type_1 = AgentsRunResponse400Type1.from_dict(data) - return response_400 - if response.status_code == 402: - response_402 = ErrorResponse.from_dict(response.json()) + return response_400_type_1 + except (TypeError, ValueError, AttributeError, KeyError): + pass + if not isinstance(data, dict): + raise TypeError() + response_400_type_2 = AgentsRunResponse400Type2.from_dict(data) + + return response_400_type_2 - return response_402 + response_400 = _parse_response_400(response.json()) + + return response_400 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) return response_404 + if response.status_code == 500: + response_500 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_500 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorResponse | list[AgentDatum]]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentsRunResponse400Type1 | AgentsRunResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum]]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -117,11 +144,11 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[ErrorResponse | list[AgentDatum]]: +) -> Response[AgentsRunResponse400Type1 | AgentsRunResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum]]: """ Run agent synchronously Execute an agent with provided inputs and return results immediately. @@ -129,15 +156,16 @@ def sync_detailed( Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | list[AgentDatum]] + Response[AgentsRunResponse400Type1 | AgentsRunResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum]] """ @@ -157,11 +185,11 @@ def sync_detailed( def sync( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> ErrorResponse | list[AgentDatum] | None: +) -> AgentsRunResponse400Type1 | AgentsRunResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum] | None: """ Run agent synchronously Execute an agent with provided inputs and return results immediately. @@ -169,15 +197,16 @@ def sync( Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | list[AgentDatum] + AgentsRunResponse400Type1 | AgentsRunResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum] """ @@ -192,11 +221,11 @@ def sync( async def asyncio_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[ErrorResponse | list[AgentDatum]]: +) -> Response[AgentsRunResponse400Type1 | AgentsRunResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum]]: """ Run agent synchronously Execute an agent with provided inputs and return results immediately. @@ -204,15 +233,16 @@ async def asyncio_detailed( Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | list[AgentDatum]] + Response[AgentsRunResponse400Type1 | AgentsRunResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum]] """ @@ -232,11 +262,11 @@ async def asyncio_detailed( async def asyncio( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> ErrorResponse | list[AgentDatum] | None: +) -> AgentsRunResponse400Type1 | AgentsRunResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum] | None: """ Run agent synchronously Execute an agent with provided inputs and return results immediately. @@ -244,15 +274,16 @@ async def asyncio( Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | list[AgentDatum] + AgentsRunResponse400Type1 | AgentsRunResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum] """ diff --git a/src/roe/_generated/api/agents/agents_run_async_create.py b/src/roe/_generated/api/agents/agents_run_async_create.py index 3a13845..bd35b7c 100644 --- a/src/roe/_generated/api/agents/agents_run_async_create.py +++ b/src/roe/_generated/api/agents/agents_run_async_create.py @@ -8,8 +8,10 @@ from ...types import Response, UNSET from ... import errors -from ...models.agent_execution_request_request import AgentExecutionRequestRequest -from ...models.error_response import ErrorResponse +from ...models.agent_execution_request import AgentExecutionRequest +from ...models.agents_run_async_create_response_400_type_1 import AgentsRunAsyncCreateResponse400Type1 +from ...models.agents_run_async_create_response_400_type_2 import AgentsRunAsyncCreateResponse400Type2 +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -19,7 +21,7 @@ def _get_kwargs( agent_id: UUID, *, - body: AgentExecutionRequestRequest | Unset = UNSET, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, ) -> dict[str, Any]: @@ -57,41 +59,59 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorResponse | str | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentsRunAsyncCreateResponse400Type1 | AgentsRunAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str | None: if response.status_code == 200: response_200 = cast(str, response.json()) return response_200 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + def _parse_response_400(data: object) -> AgentsRunAsyncCreateResponse400Type1 | AgentsRunAsyncCreateResponse400Type2 | list[str]: + try: + if not isinstance(data, list): + raise TypeError() + response_400_type_0 = cast(list[str], data) + return response_400_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + try: + if not isinstance(data, dict): + raise TypeError() + response_400_type_1 = AgentsRunAsyncCreateResponse400Type1.from_dict(data) - return response_400 - if response.status_code == 402: - response_402 = ErrorResponse.from_dict(response.json()) + return response_400_type_1 + except (TypeError, ValueError, AttributeError, KeyError): + pass + if not isinstance(data, dict): + raise TypeError() + response_400_type_2 = AgentsRunAsyncCreateResponse400Type2.from_dict(data) + + return response_400_type_2 - return response_402 + response_400 = _parse_response_400(response.json()) + + return response_400 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) return response_404 if response.status_code == 500: - response_500 = ErrorResponse.from_dict(response.json()) + response_500 = ErrorDetailResponse.from_dict(response.json()) @@ -103,7 +123,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorResponse | str]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentsRunAsyncCreateResponse400Type1 | AgentsRunAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -115,25 +135,26 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[ErrorResponse | str]: +) -> Response[AgentsRunAsyncCreateResponse400Type1 | AgentsRunAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str]: """ Run agent asynchronously. Returns agent job id which can be used to check status and get results. Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | str] + Response[AgentsRunAsyncCreateResponse400Type1 | AgentsRunAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str] """ @@ -153,25 +174,26 @@ def sync_detailed( def sync( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> ErrorResponse | str | None: +) -> AgentsRunAsyncCreateResponse400Type1 | AgentsRunAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str | None: """ Run agent asynchronously. Returns agent job id which can be used to check status and get results. Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | str + AgentsRunAsyncCreateResponse400Type1 | AgentsRunAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str """ @@ -186,25 +208,26 @@ def sync( async def asyncio_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[ErrorResponse | str]: +) -> Response[AgentsRunAsyncCreateResponse400Type1 | AgentsRunAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str]: """ Run agent asynchronously. Returns agent job id which can be used to check status and get results. Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | str] + Response[AgentsRunAsyncCreateResponse400Type1 | AgentsRunAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str] """ @@ -224,25 +247,26 @@ async def asyncio_detailed( async def asyncio( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> ErrorResponse | str | None: +) -> AgentsRunAsyncCreateResponse400Type1 | AgentsRunAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str | None: """ Run agent asynchronously. Returns agent job id which can be used to check status and get results. Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | str + AgentsRunAsyncCreateResponse400Type1 | AgentsRunAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str """ diff --git a/src/roe/_generated/api/agents/agents_run_async_many.py b/src/roe/_generated/api/agents/agents_run_async_many.py index e600b6c..1936818 100644 --- a/src/roe/_generated/api/agents/agents_run_async_many.py +++ b/src/roe/_generated/api/agents/agents_run_async_many.py @@ -8,9 +8,10 @@ from ...types import Response, UNSET from ... import errors -from ...models.agent_run_async_many_request_request import AgentRunAsyncManyRequestRequest -from ...models.agents_run_async_many_response_200 import AgentsRunAsyncManyResponse200 -from ...models.error_response import ErrorResponse +from ...models.agent_run_async_many_request import AgentRunAsyncManyRequest +from ...models.agents_run_async_many_response_400_type_1 import AgentsRunAsyncManyResponse400Type1 +from ...models.agents_run_async_many_response_400_type_2 import AgentsRunAsyncManyResponse400Type2 +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -20,7 +21,7 @@ def _get_kwargs( agent_id: UUID, *, - body: AgentRunAsyncManyRequestRequest, + body: AgentRunAsyncManyRequest, organization_id: UUID | Unset = UNSET, ) -> dict[str, Any]: @@ -56,49 +57,79 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentsRunAsyncManyResponse200 | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentsRunAsyncManyResponse400Type1 | AgentsRunAsyncManyResponse400Type2 | list[str] | ErrorDetailResponse | list[UUID] | None: if response.status_code == 200: - response_200 = AgentsRunAsyncManyResponse200.from_dict(response.json()) + response_200 = [] + _response_200 = response.json() + for response_200_item_data in (_response_200): + response_200_item = UUID(response_200_item_data) + response_200.append(response_200_item) + return response_200 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + def _parse_response_400(data: object) -> AgentsRunAsyncManyResponse400Type1 | AgentsRunAsyncManyResponse400Type2 | list[str]: + try: + if not isinstance(data, list): + raise TypeError() + response_400_type_0 = cast(list[str], data) + return response_400_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + try: + if not isinstance(data, dict): + raise TypeError() + response_400_type_1 = AgentsRunAsyncManyResponse400Type1.from_dict(data) - return response_400 - if response.status_code == 402: - response_402 = ErrorResponse.from_dict(response.json()) + return response_400_type_1 + except (TypeError, ValueError, AttributeError, KeyError): + pass + if not isinstance(data, dict): + raise TypeError() + response_400_type_2 = AgentsRunAsyncManyResponse400Type2.from_dict(data) + + return response_400_type_2 - return response_402 + response_400 = _parse_response_400(response.json()) + + return response_400 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) return response_404 + if response.status_code == 500: + response_500 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_500 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentsRunAsyncManyResponse200 | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentsRunAsyncManyResponse400Type1 | AgentsRunAsyncManyResponse400Type2 | list[str] | ErrorDetailResponse | list[UUID]]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -110,27 +141,29 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentRunAsyncManyRequestRequest, + client: AuthenticatedClient, + body: AgentRunAsyncManyRequest, organization_id: UUID | Unset = UNSET, -) -> Response[AgentsRunAsyncManyResponse200 | ErrorResponse]: +) -> Response[AgentsRunAsyncManyResponse400Type1 | AgentsRunAsyncManyResponse400Type2 | list[str] | ErrorDetailResponse | list[UUID]]: """ Run agent asynchronously with multiple inputs - Execute an agent with multiple inputs asynchronously and return job IDs for tracking results. + Execute an agent with multiple inputs asynchronously and return job IDs for tracking results. Job + `metadata` is not supported on this endpoint: any `metadata` key — top-level or inside an `inputs` + item — is silently ignored and the jobs are created with empty metadata. Use the single-run + endpoints to attach metadata to a job. Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentRunAsyncManyRequestRequest): Serializer for agent async many execution - requests. + body (AgentRunAsyncManyRequest): Serializer for agent async many execution requests. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentsRunAsyncManyResponse200 | ErrorResponse] + Response[AgentsRunAsyncManyResponse400Type1 | AgentsRunAsyncManyResponse400Type2 | list[str] | ErrorDetailResponse | list[UUID]] """ @@ -150,27 +183,29 @@ def sync_detailed( def sync( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentRunAsyncManyRequestRequest, + client: AuthenticatedClient, + body: AgentRunAsyncManyRequest, organization_id: UUID | Unset = UNSET, -) -> AgentsRunAsyncManyResponse200 | ErrorResponse | None: +) -> AgentsRunAsyncManyResponse400Type1 | AgentsRunAsyncManyResponse400Type2 | list[str] | ErrorDetailResponse | list[UUID] | None: """ Run agent asynchronously with multiple inputs - Execute an agent with multiple inputs asynchronously and return job IDs for tracking results. + Execute an agent with multiple inputs asynchronously and return job IDs for tracking results. Job + `metadata` is not supported on this endpoint: any `metadata` key — top-level or inside an `inputs` + item — is silently ignored and the jobs are created with empty metadata. Use the single-run + endpoints to attach metadata to a job. Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentRunAsyncManyRequestRequest): Serializer for agent async many execution - requests. + body (AgentRunAsyncManyRequest): Serializer for agent async many execution requests. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentsRunAsyncManyResponse200 | ErrorResponse + AgentsRunAsyncManyResponse400Type1 | AgentsRunAsyncManyResponse400Type2 | list[str] | ErrorDetailResponse | list[UUID] """ @@ -185,27 +220,29 @@ def sync( async def asyncio_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentRunAsyncManyRequestRequest, + client: AuthenticatedClient, + body: AgentRunAsyncManyRequest, organization_id: UUID | Unset = UNSET, -) -> Response[AgentsRunAsyncManyResponse200 | ErrorResponse]: +) -> Response[AgentsRunAsyncManyResponse400Type1 | AgentsRunAsyncManyResponse400Type2 | list[str] | ErrorDetailResponse | list[UUID]]: """ Run agent asynchronously with multiple inputs - Execute an agent with multiple inputs asynchronously and return job IDs for tracking results. + Execute an agent with multiple inputs asynchronously and return job IDs for tracking results. Job + `metadata` is not supported on this endpoint: any `metadata` key — top-level or inside an `inputs` + item — is silently ignored and the jobs are created with empty metadata. Use the single-run + endpoints to attach metadata to a job. Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentRunAsyncManyRequestRequest): Serializer for agent async many execution - requests. + body (AgentRunAsyncManyRequest): Serializer for agent async many execution requests. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentsRunAsyncManyResponse200 | ErrorResponse] + Response[AgentsRunAsyncManyResponse400Type1 | AgentsRunAsyncManyResponse400Type2 | list[str] | ErrorDetailResponse | list[UUID]] """ @@ -225,27 +262,29 @@ async def asyncio_detailed( async def asyncio( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentRunAsyncManyRequestRequest, + client: AuthenticatedClient, + body: AgentRunAsyncManyRequest, organization_id: UUID | Unset = UNSET, -) -> AgentsRunAsyncManyResponse200 | ErrorResponse | None: +) -> AgentsRunAsyncManyResponse400Type1 | AgentsRunAsyncManyResponse400Type2 | list[str] | ErrorDetailResponse | list[UUID] | None: """ Run agent asynchronously with multiple inputs - Execute an agent with multiple inputs asynchronously and return job IDs for tracking results. + Execute an agent with multiple inputs asynchronously and return job IDs for tracking results. Job + `metadata` is not supported on this endpoint: any `metadata` key — top-level or inside an `inputs` + item — is silently ignored and the jobs are created with empty metadata. Use the single-run + endpoints to attach metadata to a job. Args: agent_id (UUID): organization_id (UUID | Unset): - body (AgentRunAsyncManyRequestRequest): Serializer for agent async many execution - requests. + body (AgentRunAsyncManyRequest): Serializer for agent async many execution requests. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentsRunAsyncManyResponse200 | ErrorResponse + AgentsRunAsyncManyResponse400Type1 | AgentsRunAsyncManyResponse400Type2 | list[str] | ErrorDetailResponse | list[UUID] """ diff --git a/src/roe/_generated/api/agents/agents_run_version.py b/src/roe/_generated/api/agents/agents_run_version.py index 36dea3b..efa09ce 100644 --- a/src/roe/_generated/api/agents/agents_run_version.py +++ b/src/roe/_generated/api/agents/agents_run_version.py @@ -9,8 +9,10 @@ from ... import errors from ...models.agent_datum import AgentDatum -from ...models.agent_execution_request_request import AgentExecutionRequestRequest -from ...models.error_response import ErrorResponse +from ...models.agent_execution_request import AgentExecutionRequest +from ...models.agents_run_version_response_400_type_1 import AgentsRunVersionResponse400Type1 +from ...models.agents_run_version_response_400_type_2 import AgentsRunVersionResponse400Type2 +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -21,7 +23,7 @@ def _get_kwargs( agent_id: UUID, agent_version_id: UUID, *, - body: AgentExecutionRequestRequest | Unset = UNSET, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, ) -> dict[str, Any]: @@ -59,7 +61,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorResponse | list[AgentDatum] | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentsRunVersionResponse400Type1 | AgentsRunVersionResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum] | None: if response.status_code == 200: response_200 = [] _response_200 = response.json() @@ -73,40 +75,65 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + def _parse_response_400(data: object) -> AgentsRunVersionResponse400Type1 | AgentsRunVersionResponse400Type2 | list[str]: + try: + if not isinstance(data, list): + raise TypeError() + response_400_type_0 = cast(list[str], data) + return response_400_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + try: + if not isinstance(data, dict): + raise TypeError() + response_400_type_1 = AgentsRunVersionResponse400Type1.from_dict(data) - return response_400 - if response.status_code == 402: - response_402 = ErrorResponse.from_dict(response.json()) + return response_400_type_1 + except (TypeError, ValueError, AttributeError, KeyError): + pass + if not isinstance(data, dict): + raise TypeError() + response_400_type_2 = AgentsRunVersionResponse400Type2.from_dict(data) + + return response_400_type_2 - return response_402 + response_400 = _parse_response_400(response.json()) + + return response_400 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) return response_404 + if response.status_code == 500: + response_500 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_500 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorResponse | list[AgentDatum]]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentsRunVersionResponse400Type1 | AgentsRunVersionResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum]]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -119,11 +146,11 @@ def sync_detailed( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[ErrorResponse | list[AgentDatum]]: +) -> Response[AgentsRunVersionResponse400Type1 | AgentsRunVersionResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum]]: """ Run agent version synchronously Execute a specific agent version with provided inputs and return results immediately. @@ -132,15 +159,16 @@ def sync_detailed( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | list[AgentDatum]] + Response[AgentsRunVersionResponse400Type1 | AgentsRunVersionResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum]] """ @@ -162,11 +190,11 @@ def sync( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> ErrorResponse | list[AgentDatum] | None: +) -> AgentsRunVersionResponse400Type1 | AgentsRunVersionResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum] | None: """ Run agent version synchronously Execute a specific agent version with provided inputs and return results immediately. @@ -175,15 +203,16 @@ def sync( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | list[AgentDatum] + AgentsRunVersionResponse400Type1 | AgentsRunVersionResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum] """ @@ -200,11 +229,11 @@ async def asyncio_detailed( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[ErrorResponse | list[AgentDatum]]: +) -> Response[AgentsRunVersionResponse400Type1 | AgentsRunVersionResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum]]: """ Run agent version synchronously Execute a specific agent version with provided inputs and return results immediately. @@ -213,15 +242,16 @@ async def asyncio_detailed( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | list[AgentDatum]] + Response[AgentsRunVersionResponse400Type1 | AgentsRunVersionResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum]] """ @@ -243,11 +273,11 @@ async def asyncio( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> ErrorResponse | list[AgentDatum] | None: +) -> AgentsRunVersionResponse400Type1 | AgentsRunVersionResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum] | None: """ Run agent version synchronously Execute a specific agent version with provided inputs and return results immediately. @@ -256,15 +286,16 @@ async def asyncio( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | list[AgentDatum] + AgentsRunVersionResponse400Type1 | AgentsRunVersionResponse400Type2 | list[str] | ErrorDetailResponse | list[AgentDatum] """ diff --git a/src/roe/_generated/api/agents/agents_run_versions_async_create.py b/src/roe/_generated/api/agents/agents_run_versions_async_create.py index 9e3760c..fae66ad 100644 --- a/src/roe/_generated/api/agents/agents_run_versions_async_create.py +++ b/src/roe/_generated/api/agents/agents_run_versions_async_create.py @@ -8,8 +8,10 @@ from ...types import Response, UNSET from ... import errors -from ...models.agent_execution_request_request import AgentExecutionRequestRequest -from ...models.error_response import ErrorResponse +from ...models.agent_execution_request import AgentExecutionRequest +from ...models.agents_run_versions_async_create_response_400_type_1 import AgentsRunVersionsAsyncCreateResponse400Type1 +from ...models.agents_run_versions_async_create_response_400_type_2 import AgentsRunVersionsAsyncCreateResponse400Type2 +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -20,7 +22,7 @@ def _get_kwargs( agent_id: UUID, agent_version_id: UUID, *, - body: AgentExecutionRequestRequest | Unset = UNSET, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, ) -> dict[str, Any]: @@ -58,41 +60,59 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorResponse | str | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentsRunVersionsAsyncCreateResponse400Type1 | AgentsRunVersionsAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str | None: if response.status_code == 200: response_200 = cast(str, response.json()) return response_200 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + def _parse_response_400(data: object) -> AgentsRunVersionsAsyncCreateResponse400Type1 | AgentsRunVersionsAsyncCreateResponse400Type2 | list[str]: + try: + if not isinstance(data, list): + raise TypeError() + response_400_type_0 = cast(list[str], data) + return response_400_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + try: + if not isinstance(data, dict): + raise TypeError() + response_400_type_1 = AgentsRunVersionsAsyncCreateResponse400Type1.from_dict(data) - return response_400 - if response.status_code == 402: - response_402 = ErrorResponse.from_dict(response.json()) + return response_400_type_1 + except (TypeError, ValueError, AttributeError, KeyError): + pass + if not isinstance(data, dict): + raise TypeError() + response_400_type_2 = AgentsRunVersionsAsyncCreateResponse400Type2.from_dict(data) + + return response_400_type_2 - return response_402 + response_400 = _parse_response_400(response.json()) + + return response_400 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) return response_404 if response.status_code == 500: - response_500 = ErrorResponse.from_dict(response.json()) + response_500 = ErrorDetailResponse.from_dict(response.json()) @@ -104,7 +124,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorResponse | str]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentsRunVersionsAsyncCreateResponse400Type1 | AgentsRunVersionsAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -117,11 +137,11 @@ def sync_detailed( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[ErrorResponse | str]: +) -> Response[AgentsRunVersionsAsyncCreateResponse400Type1 | AgentsRunVersionsAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str]: """ Run agent version asynchronously. Returns agent job id which can be used to check status and get results. @@ -129,15 +149,16 @@ def sync_detailed( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | str] + Response[AgentsRunVersionsAsyncCreateResponse400Type1 | AgentsRunVersionsAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str] """ @@ -159,11 +180,11 @@ def sync( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> ErrorResponse | str | None: +) -> AgentsRunVersionsAsyncCreateResponse400Type1 | AgentsRunVersionsAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str | None: """ Run agent version asynchronously. Returns agent job id which can be used to check status and get results. @@ -171,15 +192,16 @@ def sync( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | str + AgentsRunVersionsAsyncCreateResponse400Type1 | AgentsRunVersionsAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str """ @@ -196,11 +218,11 @@ async def asyncio_detailed( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[ErrorResponse | str]: +) -> Response[AgentsRunVersionsAsyncCreateResponse400Type1 | AgentsRunVersionsAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str]: """ Run agent version asynchronously. Returns agent job id which can be used to check status and get results. @@ -208,15 +230,16 @@ async def asyncio_detailed( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | str] + Response[AgentsRunVersionsAsyncCreateResponse400Type1 | AgentsRunVersionsAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str] """ @@ -238,11 +261,11 @@ async def asyncio( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentExecutionRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentExecutionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> ErrorResponse | str | None: +) -> AgentsRunVersionsAsyncCreateResponse400Type1 | AgentsRunVersionsAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str | None: """ Run agent version asynchronously. Returns agent job id which can be used to check status and get results. @@ -250,15 +273,16 @@ async def asyncio( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (AgentExecutionRequestRequest | Unset): Serializer for agent execution requests with - dynamic input fields. + body (AgentExecutionRequest | Unset): Agent execution request. In addition to `metadata`, + every key of the agent's input definitions is accepted as a property (text value or file + upload). Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | str + AgentsRunVersionsAsyncCreateResponse400Type1 | AgentsRunVersionsAsyncCreateResponse400Type2 | list[str] | ErrorDetailResponse | str """ diff --git a/src/roe/_generated/api/agents/agents_update.py b/src/roe/_generated/api/agents/agents_update.py index d80226f..7f92a6f 100644 --- a/src/roe/_generated/api/agents/agents_update.py +++ b/src/roe/_generated/api/agents/agents_update.py @@ -8,9 +8,10 @@ from ...types import Response, UNSET from ... import errors +from ...models.agents_update_response_400 import AgentsUpdateResponse400 from ...models.base_agent import BaseAgent from ...models.base_agent_update_request import BaseAgentUpdateRequest -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -58,7 +59,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> BaseAgent | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentsUpdateResponse400 | BaseAgent | ErrorDetailResponse | None: if response.status_code == 200: response_200 = BaseAgent.from_dict(response.json()) @@ -67,21 +68,21 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + response_400 = AgentsUpdateResponse400.from_dict(response.json()) return response_400 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) @@ -93,7 +94,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[BaseAgent | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentsUpdateResponse400 | BaseAgent | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -105,11 +106,11 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: BaseAgentUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[BaseAgent | ErrorResponse]: +) -> Response[AgentsUpdateResponse400 | BaseAgent | ErrorDetailResponse]: """ Update a base agent. Update a base agent's settings. @@ -124,7 +125,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[BaseAgent | ErrorResponse] + Response[AgentsUpdateResponse400 | BaseAgent | ErrorDetailResponse] """ @@ -144,11 +145,11 @@ def sync_detailed( def sync( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: BaseAgentUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> BaseAgent | ErrorResponse | None: +) -> AgentsUpdateResponse400 | BaseAgent | ErrorDetailResponse | None: """ Update a base agent. Update a base agent's settings. @@ -163,7 +164,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - BaseAgent | ErrorResponse + AgentsUpdateResponse400 | BaseAgent | ErrorDetailResponse """ @@ -178,11 +179,11 @@ def sync( async def asyncio_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: BaseAgentUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[BaseAgent | ErrorResponse]: +) -> Response[AgentsUpdateResponse400 | BaseAgent | ErrorDetailResponse]: """ Update a base agent. Update a base agent's settings. @@ -197,7 +198,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[BaseAgent | ErrorResponse] + Response[AgentsUpdateResponse400 | BaseAgent | ErrorDetailResponse] """ @@ -217,11 +218,11 @@ async def asyncio_detailed( async def asyncio( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: BaseAgentUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> BaseAgent | ErrorResponse | None: +) -> AgentsUpdateResponse400 | BaseAgent | ErrorDetailResponse | None: """ Update a base agent. Update a base agent's settings. @@ -236,7 +237,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - BaseAgent | ErrorResponse + AgentsUpdateResponse400 | BaseAgent | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/agents/agents_versions_create.py b/src/roe/_generated/api/agents/agents_versions_create.py index 6dedf5e..09988f0 100644 --- a/src/roe/_generated/api/agents/agents_versions_create.py +++ b/src/roe/_generated/api/agents/agents_versions_create.py @@ -10,7 +10,8 @@ from ...models.agent_version import AgentVersion from ...models.agent_version_create_request import AgentVersionCreateRequest -from ...models.error_response import ErrorResponse +from ...models.agents_versions_create_response_400 import AgentsVersionsCreateResponse400 +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -58,7 +59,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentVersion | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentVersion | AgentsVersionsCreateResponse400 | ErrorDetailResponse | None: if response.status_code == 201: response_201 = AgentVersion.from_dict(response.json()) @@ -67,21 +68,21 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_201 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + response_400 = AgentsVersionsCreateResponse400.from_dict(response.json()) return response_400 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) @@ -93,7 +94,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentVersion | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentVersion | AgentsVersionsCreateResponse400 | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -105,11 +106,11 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: AgentVersionCreateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[AgentVersion | ErrorResponse]: +) -> Response[AgentVersion | AgentsVersionsCreateResponse400 | ErrorDetailResponse]: """ Create a new agent version. Create a new version of an existing agent. @@ -124,7 +125,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentVersion | ErrorResponse] + Response[AgentVersion | AgentsVersionsCreateResponse400 | ErrorDetailResponse] """ @@ -144,11 +145,11 @@ def sync_detailed( def sync( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: AgentVersionCreateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> AgentVersion | ErrorResponse | None: +) -> AgentVersion | AgentsVersionsCreateResponse400 | ErrorDetailResponse | None: """ Create a new agent version. Create a new version of an existing agent. @@ -163,7 +164,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentVersion | ErrorResponse + AgentVersion | AgentsVersionsCreateResponse400 | ErrorDetailResponse """ @@ -178,11 +179,11 @@ def sync( async def asyncio_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: AgentVersionCreateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[AgentVersion | ErrorResponse]: +) -> Response[AgentVersion | AgentsVersionsCreateResponse400 | ErrorDetailResponse]: """ Create a new agent version. Create a new version of an existing agent. @@ -197,7 +198,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentVersion | ErrorResponse] + Response[AgentVersion | AgentsVersionsCreateResponse400 | ErrorDetailResponse] """ @@ -217,11 +218,11 @@ async def asyncio_detailed( async def asyncio( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: AgentVersionCreateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> AgentVersion | ErrorResponse | None: +) -> AgentVersion | AgentsVersionsCreateResponse400 | ErrorDetailResponse | None: """ Create a new agent version. Create a new version of an existing agent. @@ -236,7 +237,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentVersion | ErrorResponse + AgentVersion | AgentsVersionsCreateResponse400 | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/agents/agents_versions_current_retrieve.py b/src/roe/_generated/api/agents/agents_versions_current_retrieve.py index 5aa96e0..5ceb1eb 100644 --- a/src/roe/_generated/api/agents/agents_versions_current_retrieve.py +++ b/src/roe/_generated/api/agents/agents_versions_current_retrieve.py @@ -9,7 +9,7 @@ from ... import errors from ...models.agent_version import AgentVersion -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -51,7 +51,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentVersion | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentVersion | ErrorDetailResponse | None: if response.status_code == 200: response_200 = AgentVersion.from_dict(response.json()) @@ -60,14 +60,14 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) @@ -79,7 +79,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentVersion | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentVersion | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -91,11 +91,11 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, get_supports_eval: bool | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[AgentVersion | ErrorResponse]: +) -> Response[AgentVersion | ErrorDetailResponse]: """ Retrieve the current version of an agent. Retrieve details of the current version of a specific agent. @@ -110,7 +110,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentVersion | ErrorResponse] + Response[AgentVersion | ErrorDetailResponse] """ @@ -130,11 +130,11 @@ def sync_detailed( def sync( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, get_supports_eval: bool | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> AgentVersion | ErrorResponse | None: +) -> AgentVersion | ErrorDetailResponse | None: """ Retrieve the current version of an agent. Retrieve details of the current version of a specific agent. @@ -149,7 +149,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentVersion | ErrorResponse + AgentVersion | ErrorDetailResponse """ @@ -164,11 +164,11 @@ def sync( async def asyncio_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, get_supports_eval: bool | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[AgentVersion | ErrorResponse]: +) -> Response[AgentVersion | ErrorDetailResponse]: """ Retrieve the current version of an agent. Retrieve details of the current version of a specific agent. @@ -183,7 +183,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentVersion | ErrorResponse] + Response[AgentVersion | ErrorDetailResponse] """ @@ -203,11 +203,11 @@ async def asyncio_detailed( async def asyncio( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, get_supports_eval: bool | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> AgentVersion | ErrorResponse | None: +) -> AgentVersion | ErrorDetailResponse | None: """ Retrieve the current version of an agent. Retrieve details of the current version of a specific agent. @@ -222,7 +222,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentVersion | ErrorResponse + AgentVersion | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/agents/agents_versions_destroy.py b/src/roe/_generated/api/agents/agents_versions_destroy.py index c1c4f96..abb284e 100644 --- a/src/roe/_generated/api/agents/agents_versions_destroy.py +++ b/src/roe/_generated/api/agents/agents_versions_destroy.py @@ -8,7 +8,8 @@ from ...types import Response, UNSET from ... import errors -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse +from ...models.qdrant_cleanup_error_response import QdrantCleanupErrorResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -48,32 +49,39 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorDetailResponse | QdrantCleanupErrorResponse | None: if response.status_code == 204: response_204 = cast(Any, None) return response_204 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) return response_404 + if response.status_code == 500: + response_500 = QdrantCleanupErrorResponse.from_dict(response.json()) + + + + return response_500 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorDetailResponse | QdrantCleanupErrorResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -86,10 +94,10 @@ def sync_detailed( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Any | ErrorResponse]: +) -> Response[Any | ErrorDetailResponse | QdrantCleanupErrorResponse]: """ Delete an agent version. Delete a specific agent version. @@ -104,7 +112,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse] + Response[Any | ErrorDetailResponse | QdrantCleanupErrorResponse] """ @@ -125,10 +133,10 @@ def sync( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Any | ErrorResponse | None: +) -> Any | ErrorDetailResponse | QdrantCleanupErrorResponse | None: """ Delete an agent version. Delete a specific agent version. @@ -143,7 +151,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse + Any | ErrorDetailResponse | QdrantCleanupErrorResponse """ @@ -159,10 +167,10 @@ async def asyncio_detailed( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Any | ErrorResponse]: +) -> Response[Any | ErrorDetailResponse | QdrantCleanupErrorResponse]: """ Delete an agent version. Delete a specific agent version. @@ -177,7 +185,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse] + Response[Any | ErrorDetailResponse | QdrantCleanupErrorResponse] """ @@ -198,10 +206,10 @@ async def asyncio( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Any | ErrorResponse | None: +) -> Any | ErrorDetailResponse | QdrantCleanupErrorResponse | None: """ Delete an agent version. Delete a specific agent version. @@ -216,7 +224,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse + Any | ErrorDetailResponse | QdrantCleanupErrorResponse """ diff --git a/src/roe/_generated/api/agents/agents_versions_list.py b/src/roe/_generated/api/agents/agents_versions_list.py index 5942a0e..d99903a 100644 --- a/src/roe/_generated/api/agents/agents_versions_list.py +++ b/src/roe/_generated/api/agents/agents_versions_list.py @@ -9,7 +9,7 @@ from ... import errors from ...models.agent_version import AgentVersion -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -48,7 +48,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorResponse | list[AgentVersion] | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorDetailResponse | list[AgentVersion] | None: if response.status_code == 200: response_200 = [] _response_200 = response.json() @@ -62,14 +62,14 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) @@ -81,7 +81,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorResponse | list[AgentVersion]]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorDetailResponse | list[AgentVersion]]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -93,10 +93,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[ErrorResponse | list[AgentVersion]]: +) -> Response[ErrorDetailResponse | list[AgentVersion]]: """ List agent versions. Retrieve a list of versions for a specific agent. @@ -110,7 +110,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | list[AgentVersion]] + Response[ErrorDetailResponse | list[AgentVersion]] """ @@ -129,10 +129,10 @@ def sync_detailed( def sync( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> ErrorResponse | list[AgentVersion] | None: +) -> ErrorDetailResponse | list[AgentVersion] | None: """ List agent versions. Retrieve a list of versions for a specific agent. @@ -146,7 +146,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | list[AgentVersion] + ErrorDetailResponse | list[AgentVersion] """ @@ -160,10 +160,10 @@ def sync( async def asyncio_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[ErrorResponse | list[AgentVersion]]: +) -> Response[ErrorDetailResponse | list[AgentVersion]]: """ List agent versions. Retrieve a list of versions for a specific agent. @@ -177,7 +177,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | list[AgentVersion]] + Response[ErrorDetailResponse | list[AgentVersion]] """ @@ -196,10 +196,10 @@ async def asyncio_detailed( async def asyncio( agent_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> ErrorResponse | list[AgentVersion] | None: +) -> ErrorDetailResponse | list[AgentVersion] | None: """ List agent versions. Retrieve a list of versions for a specific agent. @@ -213,7 +213,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | list[AgentVersion] + ErrorDetailResponse | list[AgentVersion] """ diff --git a/src/roe/_generated/api/agents/agents_versions_partial_update.py b/src/roe/_generated/api/agents/agents_versions_partial_update.py index c4092a1..5c3053f 100644 --- a/src/roe/_generated/api/agents/agents_versions_partial_update.py +++ b/src/roe/_generated/api/agents/agents_versions_partial_update.py @@ -8,8 +8,9 @@ from ...types import Response, UNSET from ... import errors -from ...models.error_response import ErrorResponse -from ...models.patched_patched_agent_version_update_request_request import PatchedPatchedAgentVersionUpdateRequestRequest +from ...models.error_detail_response import ErrorDetailResponse +from ...models.message_response import MessageResponse +from ...models.patched_agent_version_update_request import PatchedAgentVersionUpdateRequest from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -20,7 +21,7 @@ def _get_kwargs( agent_id: UUID, agent_version_id: UUID, *, - body: PatchedPatchedAgentVersionUpdateRequestRequest | Unset = UNSET, + body: PatchedAgentVersionUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, ) -> dict[str, Any]: @@ -58,20 +59,23 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorDetailResponse | MessageResponse | None: if response.status_code == 200: - response_200 = cast(Any, None) + response_200 = MessageResponse.from_dict(response.json()) + + + return response_200 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) @@ -83,7 +87,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorDetailResponse | MessageResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -96,11 +100,11 @@ def sync_detailed( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: PatchedPatchedAgentVersionUpdateRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: PatchedAgentVersionUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[Any | ErrorResponse]: +) -> Response[ErrorDetailResponse | MessageResponse]: """ Partially update an agent version. Partially update details of a specific agent version (only version name and description). @@ -109,14 +113,14 @@ def sync_detailed( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (PatchedPatchedAgentVersionUpdateRequestRequest | Unset): + body (PatchedAgentVersionUpdateRequest | Unset): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse] + Response[ErrorDetailResponse | MessageResponse] """ @@ -138,11 +142,11 @@ def sync( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: PatchedPatchedAgentVersionUpdateRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: PatchedAgentVersionUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Any | ErrorResponse | None: +) -> ErrorDetailResponse | MessageResponse | None: """ Partially update an agent version. Partially update details of a specific agent version (only version name and description). @@ -151,14 +155,14 @@ def sync( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (PatchedPatchedAgentVersionUpdateRequestRequest | Unset): + body (PatchedAgentVersionUpdateRequest | Unset): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse + ErrorDetailResponse | MessageResponse """ @@ -175,11 +179,11 @@ async def asyncio_detailed( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: PatchedPatchedAgentVersionUpdateRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: PatchedAgentVersionUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[Any | ErrorResponse]: +) -> Response[ErrorDetailResponse | MessageResponse]: """ Partially update an agent version. Partially update details of a specific agent version (only version name and description). @@ -188,14 +192,14 @@ async def asyncio_detailed( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (PatchedPatchedAgentVersionUpdateRequestRequest | Unset): + body (PatchedAgentVersionUpdateRequest | Unset): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse] + Response[ErrorDetailResponse | MessageResponse] """ @@ -217,11 +221,11 @@ async def asyncio( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: PatchedPatchedAgentVersionUpdateRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: PatchedAgentVersionUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Any | ErrorResponse | None: +) -> ErrorDetailResponse | MessageResponse | None: """ Partially update an agent version. Partially update details of a specific agent version (only version name and description). @@ -230,14 +234,14 @@ async def asyncio( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (PatchedPatchedAgentVersionUpdateRequestRequest | Unset): + body (PatchedAgentVersionUpdateRequest | Unset): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse + ErrorDetailResponse | MessageResponse """ diff --git a/src/roe/_generated/api/agents/agents_versions_retrieve.py b/src/roe/_generated/api/agents/agents_versions_retrieve.py index 9df359d..d6bcd89 100644 --- a/src/roe/_generated/api/agents/agents_versions_retrieve.py +++ b/src/roe/_generated/api/agents/agents_versions_retrieve.py @@ -9,7 +9,7 @@ from ... import errors from ...models.agent_version import AgentVersion -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -52,7 +52,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentVersion | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> AgentVersion | ErrorDetailResponse | None: if response.status_code == 200: response_200 = AgentVersion.from_dict(response.json()) @@ -61,14 +61,14 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) @@ -80,7 +80,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentVersion | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[AgentVersion | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -93,11 +93,11 @@ def sync_detailed( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, get_supports_eval: bool | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[AgentVersion | ErrorResponse]: +) -> Response[AgentVersion | ErrorDetailResponse]: """ Retrieve an agent version. Retrieve details of a specific agent version. @@ -113,7 +113,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentVersion | ErrorResponse] + Response[AgentVersion | ErrorDetailResponse] """ @@ -135,11 +135,11 @@ def sync( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, get_supports_eval: bool | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> AgentVersion | ErrorResponse | None: +) -> AgentVersion | ErrorDetailResponse | None: """ Retrieve an agent version. Retrieve details of a specific agent version. @@ -155,7 +155,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentVersion | ErrorResponse + AgentVersion | ErrorDetailResponse """ @@ -172,11 +172,11 @@ async def asyncio_detailed( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, get_supports_eval: bool | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[AgentVersion | ErrorResponse]: +) -> Response[AgentVersion | ErrorDetailResponse]: """ Retrieve an agent version. Retrieve details of a specific agent version. @@ -192,7 +192,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentVersion | ErrorResponse] + Response[AgentVersion | ErrorDetailResponse] """ @@ -214,11 +214,11 @@ async def asyncio( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, get_supports_eval: bool | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> AgentVersion | ErrorResponse | None: +) -> AgentVersion | ErrorDetailResponse | None: """ Retrieve an agent version. Retrieve details of a specific agent version. @@ -234,7 +234,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentVersion | ErrorResponse + AgentVersion | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/agents/agents_versions_update.py b/src/roe/_generated/api/agents/agents_versions_update.py index 55ff8a0..b143d61 100644 --- a/src/roe/_generated/api/agents/agents_versions_update.py +++ b/src/roe/_generated/api/agents/agents_versions_update.py @@ -8,8 +8,9 @@ from ...types import Response, UNSET from ... import errors -from ...models.agent_version_update_request_request import AgentVersionUpdateRequestRequest -from ...models.error_response import ErrorResponse +from ...models.agent_version_update_request import AgentVersionUpdateRequest +from ...models.error_detail_response import ErrorDetailResponse +from ...models.message_response import MessageResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -20,7 +21,7 @@ def _get_kwargs( agent_id: UUID, agent_version_id: UUID, *, - body: AgentVersionUpdateRequestRequest | Unset = UNSET, + body: AgentVersionUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, ) -> dict[str, Any]: @@ -58,20 +59,23 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorDetailResponse | MessageResponse | None: if response.status_code == 200: - response_200 = cast(Any, None) + response_200 = MessageResponse.from_dict(response.json()) + + + return response_200 if response.status_code == 403: - response_403 = ErrorResponse.from_dict(response.json()) + response_403 = ErrorDetailResponse.from_dict(response.json()) return response_403 if response.status_code == 404: - response_404 = ErrorResponse.from_dict(response.json()) + response_404 = ErrorDetailResponse.from_dict(response.json()) @@ -83,7 +87,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorDetailResponse | MessageResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -96,11 +100,11 @@ def sync_detailed( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentVersionUpdateRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentVersionUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[Any | ErrorResponse]: +) -> Response[ErrorDetailResponse | MessageResponse]: """ Update an agent version. Update details of a specific agent version (only version name and description). @@ -109,14 +113,14 @@ def sync_detailed( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (AgentVersionUpdateRequestRequest | Unset): + body (AgentVersionUpdateRequest | Unset): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse] + Response[ErrorDetailResponse | MessageResponse] """ @@ -138,11 +142,11 @@ def sync( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentVersionUpdateRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentVersionUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Any | ErrorResponse | None: +) -> ErrorDetailResponse | MessageResponse | None: """ Update an agent version. Update details of a specific agent version (only version name and description). @@ -151,14 +155,14 @@ def sync( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (AgentVersionUpdateRequestRequest | Unset): + body (AgentVersionUpdateRequest | Unset): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse + ErrorDetailResponse | MessageResponse """ @@ -175,11 +179,11 @@ async def asyncio_detailed( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentVersionUpdateRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentVersionUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[Any | ErrorResponse]: +) -> Response[ErrorDetailResponse | MessageResponse]: """ Update an agent version. Update details of a specific agent version (only version name and description). @@ -188,14 +192,14 @@ async def asyncio_detailed( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (AgentVersionUpdateRequestRequest | Unset): + body (AgentVersionUpdateRequest | Unset): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse] + Response[ErrorDetailResponse | MessageResponse] """ @@ -217,11 +221,11 @@ async def asyncio( agent_id: UUID, agent_version_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentVersionUpdateRequestRequest | Unset = UNSET, + client: AuthenticatedClient, + body: AgentVersionUpdateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Any | ErrorResponse | None: +) -> ErrorDetailResponse | MessageResponse | None: """ Update an agent version. Update details of a specific agent version (only version name and description). @@ -230,14 +234,14 @@ async def asyncio( agent_id (UUID): agent_version_id (UUID): organization_id (UUID | Unset): - body (AgentVersionUpdateRequestRequest | Unset): + body (AgentVersionUpdateRequest | Unset): Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse + ErrorDetailResponse | MessageResponse """ diff --git a/src/roe/_generated/api/connections/connections_create.py b/src/roe/_generated/api/connections/connections_create.py index 340fd9d..2f42f2f 100644 --- a/src/roe/_generated/api/connections/connections_create.py +++ b/src/roe/_generated/api/connections/connections_create.py @@ -9,9 +9,10 @@ from ... import errors from ...models.connection import Connection +from ...models.connections_create_response_400_type_1 import ConnectionsCreateResponse400Type1 +from ...models.connections_create_response_400_type_2 import ConnectionsCreateResponse400Type2 from ...models.create_connection_request import CreateConnectionRequest from ...models.duplicate_connection_response import DuplicateConnectionResponse -from ...models.error_response import ErrorResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -56,7 +57,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Connection | DuplicateConnectionResponse | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Connection | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse | None: if response.status_code == 201: response_201 = Connection.from_dict(response.json()) @@ -65,10 +66,35 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_201 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + def _parse_response_400(data: object) -> ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str]: + try: + if not isinstance(data, list): + raise TypeError() + response_400_type_0 = cast(list[str], data) + return response_400_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + try: + if not isinstance(data, dict): + raise TypeError() + response_400_type_1 = ConnectionsCreateResponse400Type1.from_dict(data) + + return response_400_type_1 + except (TypeError, ValueError, AttributeError, KeyError): + pass + if not isinstance(data, dict): + raise TypeError() + response_400_type_2 = ConnectionsCreateResponse400Type2.from_dict(data) + + + + return response_400_type_2 + + response_400 = _parse_response_400(response.json()) + return response_400 if response.status_code == 409: @@ -84,7 +110,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Connection | DuplicateConnectionResponse | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Connection | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -95,11 +121,11 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: CreateConnectionRequest, organization_id: UUID | Unset = UNSET, -) -> Response[Connection | DuplicateConnectionResponse | ErrorResponse]: +) -> Response[Connection | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse]: """ Public API: GET/POST /api/v1/connections/ - List/create connections. Args: @@ -112,7 +138,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Connection | DuplicateConnectionResponse | ErrorResponse] + Response[Connection | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse] """ @@ -130,11 +156,11 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: CreateConnectionRequest, organization_id: UUID | Unset = UNSET, -) -> Connection | DuplicateConnectionResponse | ErrorResponse | None: +) -> Connection | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse | None: """ Public API: GET/POST /api/v1/connections/ - List/create connections. Args: @@ -147,7 +173,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Connection | DuplicateConnectionResponse | ErrorResponse + Connection | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse """ @@ -160,11 +186,11 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: CreateConnectionRequest, organization_id: UUID | Unset = UNSET, -) -> Response[Connection | DuplicateConnectionResponse | ErrorResponse]: +) -> Response[Connection | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse]: """ Public API: GET/POST /api/v1/connections/ - List/create connections. Args: @@ -177,7 +203,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Connection | DuplicateConnectionResponse | ErrorResponse] + Response[Connection | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse] """ @@ -195,11 +221,11 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: CreateConnectionRequest, organization_id: UUID | Unset = UNSET, -) -> Connection | DuplicateConnectionResponse | ErrorResponse | None: +) -> Connection | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse | None: """ Public API: GET/POST /api/v1/connections/ - List/create connections. Args: @@ -212,7 +238,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Connection | DuplicateConnectionResponse | ErrorResponse + Connection | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse """ diff --git a/src/roe/_generated/api/connections/connections_destroy.py b/src/roe/_generated/api/connections/connections_destroy.py index 4a0ff23..9f99685 100644 --- a/src/roe/_generated/api/connections/connections_destroy.py +++ b/src/roe/_generated/api/connections/connections_destroy.py @@ -8,7 +8,10 @@ from ...types import Response, UNSET from ... import errors +from ...models.connection_delete_error_response import ConnectionDeleteErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset +from typing import cast from uuid import UUID @@ -45,9 +48,31 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ConnectionDeleteErrorResponse | ErrorDetailResponse | None: if response.status_code == 204: - return None + response_204 = cast(Any, None) + return response_204 + + if response.status_code == 400: + response_400 = ConnectionDeleteErrorResponse.from_dict(response.json()) + + + + return response_400 + + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + + if response.status_code == 500: + response_500 = ConnectionDeleteErrorResponse.from_dict(response.json()) + + + + return response_500 if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) @@ -55,7 +80,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ConnectionDeleteErrorResponse | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -67,10 +92,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Any]: +) -> Response[Any | ConnectionDeleteErrorResponse | ErrorDetailResponse]: """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. Args: @@ -82,7 +107,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any] + Response[Any | ConnectionDeleteErrorResponse | ErrorDetailResponse] """ @@ -98,14 +123,42 @@ def sync_detailed( return _build_response(client=client, response=response) +def sync( + id: UUID, + *, + client: AuthenticatedClient, + organization_id: UUID | Unset = UNSET, + +) -> Any | ConnectionDeleteErrorResponse | ErrorDetailResponse | None: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | ConnectionDeleteErrorResponse | ErrorDetailResponse + """ + + + return sync_detailed( + id=id, +client=client, +organization_id=organization_id, + + ).parsed async def asyncio_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Any]: +) -> Response[Any | ConnectionDeleteErrorResponse | ErrorDetailResponse]: """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. Args: @@ -117,7 +170,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any] + Response[Any | ConnectionDeleteErrorResponse | ErrorDetailResponse] """ @@ -133,3 +186,31 @@ async def asyncio_detailed( return _build_response(client=client, response=response) +async def asyncio( + id: UUID, + *, + client: AuthenticatedClient, + organization_id: UUID | Unset = UNSET, + +) -> Any | ConnectionDeleteErrorResponse | ErrorDetailResponse | None: + """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. + + Args: + id (UUID): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | ConnectionDeleteErrorResponse | ErrorDetailResponse + """ + + + return (await asyncio_detailed( + id=id, +client=client, +organization_id=organization_id, + + )).parsed diff --git a/src/roe/_generated/api/connections/connections_list.py b/src/roe/_generated/api/connections/connections_list.py index ed3040a..989274a 100644 --- a/src/roe/_generated/api/connections/connections_list.py +++ b/src/roe/_generated/api/connections/connections_list.py @@ -8,6 +8,8 @@ from ...types import Response, UNSET from ... import errors +from ...models.connections_list_response_400 import ConnectionsListResponse400 +from ...models.error_detail_response import ErrorDetailResponse from ...models.paginated_connection_list_list import PaginatedConnectionListList from ...types import UNSET, Unset from typing import cast @@ -58,7 +60,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> PaginatedConnectionListList | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ConnectionsListResponse400 | ErrorDetailResponse | PaginatedConnectionListList | None: if response.status_code == 200: response_200 = PaginatedConnectionListList.from_dict(response.json()) @@ -66,13 +68,34 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 + if response.status_code == 400: + response_400 = ConnectionsListResponse400.from_dict(response.json()) + + + + return response_400 + + if response.status_code == 403: + response_403 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_403 + + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[PaginatedConnectionListList]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ConnectionsListResponse400 | ErrorDetailResponse | PaginatedConnectionListList]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -83,14 +106,14 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, connector_type: str | Unset = UNSET, organization_id: UUID | Unset = UNSET, page: int | Unset = UNSET, page_size: int | Unset = UNSET, search: str | Unset = UNSET, -) -> Response[PaginatedConnectionListList]: +) -> Response[ConnectionsListResponse400 | ErrorDetailResponse | PaginatedConnectionListList]: """ Public API: GET/POST /api/v1/connections/ - List/create connections. Args: @@ -105,7 +128,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[PaginatedConnectionListList] + Response[ConnectionsListResponse400 | ErrorDetailResponse | PaginatedConnectionListList] """ @@ -126,14 +149,14 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, connector_type: str | Unset = UNSET, organization_id: UUID | Unset = UNSET, page: int | Unset = UNSET, page_size: int | Unset = UNSET, search: str | Unset = UNSET, -) -> PaginatedConnectionListList | None: +) -> ConnectionsListResponse400 | ErrorDetailResponse | PaginatedConnectionListList | None: """ Public API: GET/POST /api/v1/connections/ - List/create connections. Args: @@ -148,7 +171,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - PaginatedConnectionListList + ConnectionsListResponse400 | ErrorDetailResponse | PaginatedConnectionListList """ @@ -164,14 +187,14 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, connector_type: str | Unset = UNSET, organization_id: UUID | Unset = UNSET, page: int | Unset = UNSET, page_size: int | Unset = UNSET, search: str | Unset = UNSET, -) -> Response[PaginatedConnectionListList]: +) -> Response[ConnectionsListResponse400 | ErrorDetailResponse | PaginatedConnectionListList]: """ Public API: GET/POST /api/v1/connections/ - List/create connections. Args: @@ -186,7 +209,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[PaginatedConnectionListList] + Response[ConnectionsListResponse400 | ErrorDetailResponse | PaginatedConnectionListList] """ @@ -207,14 +230,14 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, connector_type: str | Unset = UNSET, organization_id: UUID | Unset = UNSET, page: int | Unset = UNSET, page_size: int | Unset = UNSET, search: str | Unset = UNSET, -) -> PaginatedConnectionListList | None: +) -> ConnectionsListResponse400 | ErrorDetailResponse | PaginatedConnectionListList | None: """ Public API: GET/POST /api/v1/connections/ - List/create connections. Args: @@ -229,7 +252,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - PaginatedConnectionListList + ConnectionsListResponse400 | ErrorDetailResponse | PaginatedConnectionListList """ diff --git a/src/roe/_generated/api/connections/connections_partial_update.py b/src/roe/_generated/api/connections/connections_partial_update.py index 4091675..6409b47 100644 --- a/src/roe/_generated/api/connections/connections_partial_update.py +++ b/src/roe/_generated/api/connections/connections_partial_update.py @@ -8,8 +8,12 @@ from ...types import Response, UNSET from ... import errors +from ...models.connection import Connection +from ...models.connections_partial_update_response_400_type_1 import ConnectionsPartialUpdateResponse400Type1 +from ...models.connections_partial_update_response_400_type_2 import ConnectionsPartialUpdateResponse400Type2 +from ...models.duplicate_connection_response import DuplicateConnectionResponse +from ...models.error_detail_response import ErrorDetailResponse from ...models.patched_update_connection_request import PatchedUpdateConnectionRequest -from ...models.update_connection import UpdateConnection from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -57,21 +61,67 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> UpdateConnection | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse | None: if response.status_code == 200: - response_200 = UpdateConnection.from_dict(response.json()) + response_200 = Connection.from_dict(response.json()) return response_200 + if response.status_code == 400: + def _parse_response_400(data: object) -> ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str]: + try: + if not isinstance(data, list): + raise TypeError() + response_400_type_0 = cast(list[str], data) + + return response_400_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + try: + if not isinstance(data, dict): + raise TypeError() + response_400_type_1 = ConnectionsPartialUpdateResponse400Type1.from_dict(data) + + + + return response_400_type_1 + except (TypeError, ValueError, AttributeError, KeyError): + pass + if not isinstance(data, dict): + raise TypeError() + response_400_type_2 = ConnectionsPartialUpdateResponse400Type2.from_dict(data) + + + + return response_400_type_2 + + response_400 = _parse_response_400(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + + if response.status_code == 409: + response_409 = DuplicateConnectionResponse.from_dict(response.json()) + + + + return response_409 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[UpdateConnection]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -83,11 +133,11 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: PatchedUpdateConnectionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[UpdateConnection]: +) -> Response[Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse]: """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. Args: @@ -112,7 +162,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[UpdateConnection] + Response[Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse] """ @@ -132,11 +182,11 @@ def sync_detailed( def sync( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: PatchedUpdateConnectionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> UpdateConnection | None: +) -> Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse | None: """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. Args: @@ -161,7 +211,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - UpdateConnection + Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse """ @@ -176,11 +226,11 @@ def sync( async def asyncio_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: PatchedUpdateConnectionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[UpdateConnection]: +) -> Response[Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse]: """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. Args: @@ -205,7 +255,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[UpdateConnection] + Response[Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse] """ @@ -225,11 +275,11 @@ async def asyncio_detailed( async def asyncio( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: PatchedUpdateConnectionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> UpdateConnection | None: +) -> Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse | None: """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. Args: @@ -254,7 +304,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - UpdateConnection + Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/connections/connections_retrieve.py b/src/roe/_generated/api/connections/connections_retrieve.py index ae4ded1..dbb7c6f 100644 --- a/src/roe/_generated/api/connections/connections_retrieve.py +++ b/src/roe/_generated/api/connections/connections_retrieve.py @@ -9,6 +9,7 @@ from ... import errors from ...models.connection import Connection +from ...models.error_detail_response import ErrorDetailResponse from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -47,7 +48,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Connection | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Connection | ErrorDetailResponse | None: if response.status_code == 200: response_200 = Connection.from_dict(response.json()) @@ -55,13 +56,20 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Connection]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Connection | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -73,10 +81,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Connection]: +) -> Response[Connection | ErrorDetailResponse]: """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. Args: @@ -88,7 +96,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Connection] + Response[Connection | ErrorDetailResponse] """ @@ -107,10 +115,10 @@ def sync_detailed( def sync( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Connection | None: +) -> Connection | ErrorDetailResponse | None: """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. Args: @@ -122,7 +130,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Connection + Connection | ErrorDetailResponse """ @@ -136,10 +144,10 @@ def sync( async def asyncio_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Connection]: +) -> Response[Connection | ErrorDetailResponse]: """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. Args: @@ -151,7 +159,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Connection] + Response[Connection | ErrorDetailResponse] """ @@ -170,10 +178,10 @@ async def asyncio_detailed( async def asyncio( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Connection | None: +) -> Connection | ErrorDetailResponse | None: """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. Args: @@ -185,7 +193,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Connection + Connection | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/connections/connections_test_create.py b/src/roe/_generated/api/connections/connections_test_create.py index df3e243..b1f8bb9 100644 --- a/src/roe/_generated/api/connections/connections_test_create.py +++ b/src/roe/_generated/api/connections/connections_test_create.py @@ -8,6 +8,7 @@ from ...types import Response, UNSET from ... import errors +from ...models.error_detail_response import ErrorDetailResponse from ...models.test_connection import TestConnection from ...types import UNSET, Unset from typing import cast @@ -47,7 +48,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | TestConnection | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorDetailResponse | TestConnection | None: if response.status_code == 200: response_200 = TestConnection.from_dict(response.json()) @@ -63,7 +64,10 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_400 if response.status_code == 404: - response_404 = cast(Any, None) + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + return response_404 if client.raise_on_unexpected_status: @@ -72,7 +76,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | TestConnection]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorDetailResponse | TestConnection]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -84,10 +88,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Any | TestConnection]: +) -> Response[ErrorDetailResponse | TestConnection]: """ Public API: POST /api/v1/connections/{id}/test/ - Test connection. Args: @@ -99,7 +103,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | TestConnection] + Response[ErrorDetailResponse | TestConnection] """ @@ -118,10 +122,10 @@ def sync_detailed( def sync( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Any | TestConnection | None: +) -> ErrorDetailResponse | TestConnection | None: """ Public API: POST /api/v1/connections/{id}/test/ - Test connection. Args: @@ -133,7 +137,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | TestConnection + ErrorDetailResponse | TestConnection """ @@ -147,10 +151,10 @@ def sync( async def asyncio_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Any | TestConnection]: +) -> Response[ErrorDetailResponse | TestConnection]: """ Public API: POST /api/v1/connections/{id}/test/ - Test connection. Args: @@ -162,7 +166,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | TestConnection] + Response[ErrorDetailResponse | TestConnection] """ @@ -181,10 +185,10 @@ async def asyncio_detailed( async def asyncio( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Any | TestConnection | None: +) -> ErrorDetailResponse | TestConnection | None: """ Public API: POST /api/v1/connections/{id}/test/ - Test connection. Args: @@ -196,7 +200,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | TestConnection + ErrorDetailResponse | TestConnection """ diff --git a/src/roe/_generated/api/connections/connections_test_credentials_create.py b/src/roe/_generated/api/connections/connections_test_credentials_create.py index 705d6e0..5bb0634 100644 --- a/src/roe/_generated/api/connections/connections_test_credentials_create.py +++ b/src/roe/_generated/api/connections/connections_test_credentials_create.py @@ -8,6 +8,8 @@ from ...types import Response, UNSET from ... import errors +from ...models.connections_test_credentials_create_response_400_type_0 import ConnectionsTestCredentialsCreateResponse400Type0 +from ...models.connections_test_credentials_create_response_400_type_1 import ConnectionsTestCredentialsCreateResponse400Type1 from ...models.test_connection import TestConnection from ...models.test_connection_credentials_request import TestConnectionCredentialsRequest from typing import cast @@ -41,7 +43,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> TestConnection | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | TestConnection | None: if response.status_code == 200: response_200 = TestConnection.from_dict(response.json()) @@ -50,10 +52,27 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 400: - response_400 = TestConnection.from_dict(response.json()) + def _parse_response_400(data: object) -> ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1: + try: + if not isinstance(data, dict): + raise TypeError() + response_400_type_0 = ConnectionsTestCredentialsCreateResponse400Type0.from_dict(data) + return response_400_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + if not isinstance(data, dict): + raise TypeError() + response_400_type_1 = ConnectionsTestCredentialsCreateResponse400Type1.from_dict(data) + + + + return response_400_type_1 + + response_400 = _parse_response_400(response.json()) + return response_400 if client.raise_on_unexpected_status: @@ -62,7 +81,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[TestConnection]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | TestConnection]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -73,10 +92,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: TestConnectionCredentialsRequest, -) -> Response[TestConnection]: +) -> Response[ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | TestConnection]: """ Test credentials without storing them. Args: @@ -88,7 +107,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[TestConnection] + Response[ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | TestConnection] """ @@ -105,10 +124,10 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: TestConnectionCredentialsRequest, -) -> TestConnection | None: +) -> ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | TestConnection | None: """ Test credentials without storing them. Args: @@ -120,7 +139,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - TestConnection + ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | TestConnection """ @@ -132,10 +151,10 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: TestConnectionCredentialsRequest, -) -> Response[TestConnection]: +) -> Response[ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | TestConnection]: """ Test credentials without storing them. Args: @@ -147,7 +166,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[TestConnection] + Response[ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | TestConnection] """ @@ -164,10 +183,10 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: TestConnectionCredentialsRequest, -) -> TestConnection | None: +) -> ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | TestConnection | None: """ Test credentials without storing them. Args: @@ -179,7 +198,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - TestConnection + ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | TestConnection """ diff --git a/src/roe/_generated/api/connections/connections_update.py b/src/roe/_generated/api/connections/connections_update.py index 7566747..f4d8b52 100644 --- a/src/roe/_generated/api/connections/connections_update.py +++ b/src/roe/_generated/api/connections/connections_update.py @@ -9,7 +9,11 @@ from ... import errors from ...models.connection import Connection -from ...models.connection_request import ConnectionRequest +from ...models.connections_update_response_400_type_1 import ConnectionsUpdateResponse400Type1 +from ...models.connections_update_response_400_type_2 import ConnectionsUpdateResponse400Type2 +from ...models.duplicate_connection_response import DuplicateConnectionResponse +from ...models.error_detail_response import ErrorDetailResponse +from ...models.update_connection_request import UpdateConnectionRequest from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -19,7 +23,7 @@ def _get_kwargs( id: UUID, *, - body: ConnectionRequest, + body: UpdateConnectionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, ) -> dict[str, Any]: @@ -45,7 +49,9 @@ def _get_kwargs( "params": params, } - _kwargs["json"] = body.to_dict() + + if not isinstance(body, Unset): + _kwargs["json"] = body.to_dict() headers["Content-Type"] = "application/json" @@ -55,7 +61,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Connection | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Connection | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse | None: if response.status_code == 200: response_200 = Connection.from_dict(response.json()) @@ -63,13 +69,59 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 + if response.status_code == 400: + def _parse_response_400(data: object) -> ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str]: + try: + if not isinstance(data, list): + raise TypeError() + response_400_type_0 = cast(list[str], data) + + return response_400_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + try: + if not isinstance(data, dict): + raise TypeError() + response_400_type_1 = ConnectionsUpdateResponse400Type1.from_dict(data) + + + + return response_400_type_1 + except (TypeError, ValueError, AttributeError, KeyError): + pass + if not isinstance(data, dict): + raise TypeError() + response_400_type_2 = ConnectionsUpdateResponse400Type2.from_dict(data) + + + + return response_400_type_2 + + response_400 = _parse_response_400(response.json()) + + return response_400 + + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + + if response.status_code == 409: + response_409 = DuplicateConnectionResponse.from_dict(response.json()) + + + + return response_409 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Connection]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Connection | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -81,27 +133,36 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( id: UUID, *, - client: AuthenticatedClient | Client, - body: ConnectionRequest, + client: AuthenticatedClient, + body: UpdateConnectionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[Connection]: +) -> Response[Connection | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse]: """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. Args: id (UUID): organization_id (UUID | Unset): - body (ConnectionRequest): Serializer for Connection model. - Returns: - - config: Non-sensitive config from DB - - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) + body (UpdateConnectionRequest | Unset): Serializer for updating connections. + + Cross-state Pydantic validation (config + auth) lives in the view's + ``update()`` method now -- see ``connections.views. + ConnectionRetrieveUpdateDestroyView.update``. That path is the single + source of truth for canonical validation + write, mirrors the create + path's ``service.create_connection_with_secrets``, AND correctly + handles the SM-fetch-failure case for the unchanged-auth branch + (returns 502 / opportunistic backfill instead of silently corrupting + the fingerprint by hashing ``{}``). Re-running the same validation + here would (a) double the work, (b) bypass the SM-failure semantics, + and (c) leak Pydantic field/value details through DRF's generic 400 + handler. The serializer only does shape checks. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Connection] + Response[Connection | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse] """ @@ -121,27 +182,36 @@ def sync_detailed( def sync( id: UUID, *, - client: AuthenticatedClient | Client, - body: ConnectionRequest, + client: AuthenticatedClient, + body: UpdateConnectionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Connection | None: +) -> Connection | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse | None: """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. Args: id (UUID): organization_id (UUID | Unset): - body (ConnectionRequest): Serializer for Connection model. - Returns: - - config: Non-sensitive config from DB - - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) + body (UpdateConnectionRequest | Unset): Serializer for updating connections. + + Cross-state Pydantic validation (config + auth) lives in the view's + ``update()`` method now -- see ``connections.views. + ConnectionRetrieveUpdateDestroyView.update``. That path is the single + source of truth for canonical validation + write, mirrors the create + path's ``service.create_connection_with_secrets``, AND correctly + handles the SM-fetch-failure case for the unchanged-auth branch + (returns 502 / opportunistic backfill instead of silently corrupting + the fingerprint by hashing ``{}``). Re-running the same validation + here would (a) double the work, (b) bypass the SM-failure semantics, + and (c) leak Pydantic field/value details through DRF's generic 400 + handler. The serializer only does shape checks. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Connection + Connection | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse """ @@ -156,27 +226,36 @@ def sync( async def asyncio_detailed( id: UUID, *, - client: AuthenticatedClient | Client, - body: ConnectionRequest, + client: AuthenticatedClient, + body: UpdateConnectionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[Connection]: +) -> Response[Connection | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse]: """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. Args: id (UUID): organization_id (UUID | Unset): - body (ConnectionRequest): Serializer for Connection model. - Returns: - - config: Non-sensitive config from DB - - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) + body (UpdateConnectionRequest | Unset): Serializer for updating connections. + + Cross-state Pydantic validation (config + auth) lives in the view's + ``update()`` method now -- see ``connections.views. + ConnectionRetrieveUpdateDestroyView.update``. That path is the single + source of truth for canonical validation + write, mirrors the create + path's ``service.create_connection_with_secrets``, AND correctly + handles the SM-fetch-failure case for the unchanged-auth branch + (returns 502 / opportunistic backfill instead of silently corrupting + the fingerprint by hashing ``{}``). Re-running the same validation + here would (a) double the work, (b) bypass the SM-failure semantics, + and (c) leak Pydantic field/value details through DRF's generic 400 + handler. The serializer only does shape checks. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Connection] + Response[Connection | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse] """ @@ -196,27 +275,36 @@ async def asyncio_detailed( async def asyncio( id: UUID, *, - client: AuthenticatedClient | Client, - body: ConnectionRequest, + client: AuthenticatedClient, + body: UpdateConnectionRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Connection | None: +) -> Connection | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse | None: """ Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage connection. Args: id (UUID): organization_id (UUID | Unset): - body (ConnectionRequest): Serializer for Connection model. - Returns: - - config: Non-sensitive config from DB - - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) + body (UpdateConnectionRequest | Unset): Serializer for updating connections. + + Cross-state Pydantic validation (config + auth) lives in the view's + ``update()`` method now -- see ``connections.views. + ConnectionRetrieveUpdateDestroyView.update``. That path is the single + source of truth for canonical validation + write, mirrors the create + path's ``service.create_connection_with_secrets``, AND correctly + handles the SM-fetch-failure case for the unchanged-auth branch + (returns 502 / opportunistic backfill instead of silently corrupting + the fingerprint by hashing ``{}``). Re-running the same validation + here would (a) double the work, (b) bypass the SM-failure semantics, + and (c) leak Pydantic field/value details through DRF's generic 400 + handler. The serializer only does shape checks. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Connection + Connection | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/connectors/connectors_retrieve.py b/src/roe/_generated/api/connectors/connectors_retrieve.py index 6efa420..e224e05 100644 --- a/src/roe/_generated/api/connectors/connectors_retrieve.py +++ b/src/roe/_generated/api/connectors/connectors_retrieve.py @@ -57,7 +57,7 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, ) -> Response[ConnectorListResponse]: """ Public API: GET /api/v1/connectors/ - List all connector types. @@ -83,7 +83,7 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, ) -> ConnectorListResponse | None: """ Public API: GET /api/v1/connectors/ - List all connector types. @@ -104,7 +104,7 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, ) -> Response[ConnectorListResponse]: """ Public API: GET /api/v1/connectors/ - List all connector types. @@ -130,7 +130,7 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, ) -> ConnectorListResponse | None: """ Public API: GET /api/v1/connectors/ - List all connector types. diff --git a/src/roe/_generated/api/connectors/connectors_retrieve_2.py b/src/roe/_generated/api/connectors/connectors_retrieve_by_type.py similarity index 79% rename from src/roe/_generated/api/connectors/connectors_retrieve_2.py rename to src/roe/_generated/api/connectors/connectors_retrieve_by_type.py index 873b446..733634a 100644 --- a/src/roe/_generated/api/connectors/connectors_retrieve_2.py +++ b/src/roe/_generated/api/connectors/connectors_retrieve_by_type.py @@ -9,6 +9,7 @@ from ... import errors from ...models.connector_metadata import ConnectorMetadata +from ...models.error_detail_response import ErrorDetailResponse from typing import cast @@ -33,7 +34,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ConnectorMetadata | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ConnectorMetadata | ErrorDetailResponse | None: if response.status_code == 200: response_200 = ConnectorMetadata.from_dict(response.json()) @@ -41,13 +42,20 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ConnectorMetadata]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ConnectorMetadata | ErrorDetailResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -59,9 +67,9 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( connector_type: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> Response[ConnectorMetadata]: +) -> Response[ConnectorMetadata | ErrorDetailResponse]: """ Public API: GET /api/v1/connectors/{connector_type}/ - Get connector details. Args: @@ -72,7 +80,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ConnectorMetadata] + Response[ConnectorMetadata | ErrorDetailResponse] """ @@ -90,9 +98,9 @@ def sync_detailed( def sync( connector_type: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> ConnectorMetadata | None: +) -> ConnectorMetadata | ErrorDetailResponse | None: """ Public API: GET /api/v1/connectors/{connector_type}/ - Get connector details. Args: @@ -103,7 +111,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ConnectorMetadata + ConnectorMetadata | ErrorDetailResponse """ @@ -116,9 +124,9 @@ def sync( async def asyncio_detailed( connector_type: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> Response[ConnectorMetadata]: +) -> Response[ConnectorMetadata | ErrorDetailResponse]: """ Public API: GET /api/v1/connectors/{connector_type}/ - Get connector details. Args: @@ -129,7 +137,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ConnectorMetadata] + Response[ConnectorMetadata | ErrorDetailResponse] """ @@ -147,9 +155,9 @@ async def asyncio_detailed( async def asyncio( connector_type: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> ConnectorMetadata | None: +) -> ConnectorMetadata | ErrorDetailResponse | None: """ Public API: GET /api/v1/connectors/{connector_type}/ - Get connector details. Args: @@ -160,7 +168,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ConnectorMetadata + ConnectorMetadata | ErrorDetailResponse """ diff --git a/src/roe/_generated/api/discovery/discovery_agent_engine_types_list.py b/src/roe/_generated/api/discovery/discovery_agent_engine_types_list.py index df4e940..95f2fb0 100644 --- a/src/roe/_generated/api/discovery/discovery_agent_engine_types_list.py +++ b/src/roe/_generated/api/discovery/discovery_agent_engine_types_list.py @@ -57,7 +57,7 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, ) -> Response[AgentEngineTypeList]: """ List supported agent engine types @@ -87,7 +87,7 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, ) -> AgentEngineTypeList | None: """ List supported agent engine types @@ -112,7 +112,7 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, ) -> Response[AgentEngineTypeList]: """ List supported agent engine types @@ -142,7 +142,7 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, ) -> AgentEngineTypeList | None: """ List supported agent engine types diff --git a/src/roe/_generated/api/discovery/discovery_supported_models_list.py b/src/roe/_generated/api/discovery/discovery_supported_models_list.py index d06799e..0757230 100644 --- a/src/roe/_generated/api/discovery/discovery_supported_models_list.py +++ b/src/roe/_generated/api/discovery/discovery_supported_models_list.py @@ -8,6 +8,7 @@ from ...types import Response, UNSET from ... import errors +from ...models.discovery_supported_models_list_response_400 import DiscoverySupportedModelsListResponse400 from ...models.supported_llm_model_list import SupportedLLMModelList from ...types import UNSET, Unset from typing import cast @@ -42,7 +43,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> SupportedLLMModelList | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> DiscoverySupportedModelsListResponse400 | SupportedLLMModelList | None: if response.status_code == 200: response_200 = SupportedLLMModelList.from_dict(response.json()) @@ -50,13 +51,20 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 + if response.status_code == 400: + response_400 = DiscoverySupportedModelsListResponse400.from_dict(response.json()) + + + + return response_400 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[SupportedLLMModelList]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[DiscoverySupportedModelsListResponse400 | SupportedLLMModelList]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -67,10 +75,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, capability: str | Unset = UNSET, -) -> Response[SupportedLLMModelList]: +) -> Response[DiscoverySupportedModelsListResponse400 | SupportedLLMModelList]: """ List supported model IDs Returns non-deprecated text-capable model IDs accepted in engine_config.model, with capability and @@ -85,7 +93,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[SupportedLLMModelList] + Response[DiscoverySupportedModelsListResponse400 | SupportedLLMModelList] """ @@ -102,10 +110,10 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, capability: str | Unset = UNSET, -) -> SupportedLLMModelList | None: +) -> DiscoverySupportedModelsListResponse400 | SupportedLLMModelList | None: """ List supported model IDs Returns non-deprecated text-capable model IDs accepted in engine_config.model, with capability and @@ -120,7 +128,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - SupportedLLMModelList + DiscoverySupportedModelsListResponse400 | SupportedLLMModelList """ @@ -132,10 +140,10 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, capability: str | Unset = UNSET, -) -> Response[SupportedLLMModelList]: +) -> Response[DiscoverySupportedModelsListResponse400 | SupportedLLMModelList]: """ List supported model IDs Returns non-deprecated text-capable model IDs accepted in engine_config.model, with capability and @@ -150,7 +158,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[SupportedLLMModelList] + Response[DiscoverySupportedModelsListResponse400 | SupportedLLMModelList] """ @@ -167,10 +175,10 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, capability: str | Unset = UNSET, -) -> SupportedLLMModelList | None: +) -> DiscoverySupportedModelsListResponse400 | SupportedLLMModelList | None: """ List supported model IDs Returns non-deprecated text-capable model IDs accepted in engine_config.model, with capability and @@ -185,7 +193,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - SupportedLLMModelList + DiscoverySupportedModelsListResponse400 | SupportedLLMModelList """ diff --git a/src/roe/_generated/api/policies/policies_create.py b/src/roe/_generated/api/policies/policies_create.py index 6774334..f622217 100644 --- a/src/roe/_generated/api/policies/policies_create.py +++ b/src/roe/_generated/api/policies/policies_create.py @@ -10,6 +10,7 @@ from ...models.create_policy import CreatePolicy from ...models.create_policy_request import CreatePolicyRequest +from ...models.policies_create_response_400 import PoliciesCreateResponse400 from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -54,7 +55,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> CreatePolicy | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> CreatePolicy | PoliciesCreateResponse400 | None: if response.status_code == 201: response_201 = CreatePolicy.from_dict(response.json()) @@ -62,13 +63,20 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_201 + if response.status_code == 400: + response_400 = PoliciesCreateResponse400.from_dict(response.json()) + + + + return response_400 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[CreatePolicy]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[CreatePolicy | PoliciesCreateResponse400]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,11 +87,11 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: CreatePolicyRequest, organization_id: UUID | Unset = UNSET, -) -> Response[CreatePolicy]: +) -> Response[CreatePolicy | PoliciesCreateResponse400]: """ List all policies and create a new policy Args: @@ -95,7 +103,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[CreatePolicy] + Response[CreatePolicy | PoliciesCreateResponse400] """ @@ -113,11 +121,11 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: CreatePolicyRequest, organization_id: UUID | Unset = UNSET, -) -> CreatePolicy | None: +) -> CreatePolicy | PoliciesCreateResponse400 | None: """ List all policies and create a new policy Args: @@ -129,7 +137,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - CreatePolicy + CreatePolicy | PoliciesCreateResponse400 """ @@ -142,11 +150,11 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: CreatePolicyRequest, organization_id: UUID | Unset = UNSET, -) -> Response[CreatePolicy]: +) -> Response[CreatePolicy | PoliciesCreateResponse400]: """ List all policies and create a new policy Args: @@ -158,7 +166,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[CreatePolicy] + Response[CreatePolicy | PoliciesCreateResponse400] """ @@ -176,11 +184,11 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: CreatePolicyRequest, organization_id: UUID | Unset = UNSET, -) -> CreatePolicy | None: +) -> CreatePolicy | PoliciesCreateResponse400 | None: """ List all policies and create a new policy Args: @@ -192,7 +200,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - CreatePolicy + CreatePolicy | PoliciesCreateResponse400 """ diff --git a/src/roe/_generated/api/policies/policies_destroy.py b/src/roe/_generated/api/policies/policies_destroy.py index a0b79a9..2da7e4a 100644 --- a/src/roe/_generated/api/policies/policies_destroy.py +++ b/src/roe/_generated/api/policies/policies_destroy.py @@ -8,7 +8,10 @@ from ...types import Response, UNSET from ... import errors +from ...models.error_detail_response import ErrorDetailResponse +from ...models.policy_delete_conflict import PolicyDeleteConflict from ...types import UNSET, Unset +from typing import cast from uuid import UUID @@ -45,9 +48,24 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorDetailResponse | PolicyDeleteConflict | None: if response.status_code == 204: - return None + response_204 = cast(Any, None) + return response_204 + + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + + if response.status_code == 409: + response_409 = PolicyDeleteConflict.from_dict(response.json()) + + + + return response_409 if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) @@ -55,7 +73,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorDetailResponse | PolicyDeleteConflict]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -67,10 +85,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Any]: +) -> Response[Any | ErrorDetailResponse | PolicyDeleteConflict]: """ Retrieve, update, or delete a single policy by ID Args: @@ -82,7 +100,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any] + Response[Any | ErrorDetailResponse | PolicyDeleteConflict] """ @@ -98,14 +116,42 @@ def sync_detailed( return _build_response(client=client, response=response) +def sync( + id: UUID, + *, + client: AuthenticatedClient, + organization_id: UUID | Unset = UNSET, + +) -> Any | ErrorDetailResponse | PolicyDeleteConflict | None: + """ Retrieve, update, or delete a single policy by ID + + Args: + id (UUID): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | ErrorDetailResponse | PolicyDeleteConflict + """ + + + return sync_detailed( + id=id, +client=client, +organization_id=organization_id, + + ).parsed async def asyncio_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Any]: +) -> Response[Any | ErrorDetailResponse | PolicyDeleteConflict]: """ Retrieve, update, or delete a single policy by ID Args: @@ -117,7 +163,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any] + Response[Any | ErrorDetailResponse | PolicyDeleteConflict] """ @@ -133,3 +179,31 @@ async def asyncio_detailed( return _build_response(client=client, response=response) +async def asyncio( + id: UUID, + *, + client: AuthenticatedClient, + organization_id: UUID | Unset = UNSET, + +) -> Any | ErrorDetailResponse | PolicyDeleteConflict | None: + """ Retrieve, update, or delete a single policy by ID + + Args: + id (UUID): + organization_id (UUID | Unset): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | ErrorDetailResponse | PolicyDeleteConflict + """ + + + return (await asyncio_detailed( + id=id, +client=client, +organization_id=organization_id, + + )).parsed diff --git a/src/roe/_generated/api/policies/policies_list.py b/src/roe/_generated/api/policies/policies_list.py index c095671..1d32c7d 100644 --- a/src/roe/_generated/api/policies/policies_list.py +++ b/src/roe/_generated/api/policies/policies_list.py @@ -83,7 +83,7 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, ordering: str | Unset = UNSET, page: int | Unset = UNSET, page_size: int | Unset = UNSET, @@ -126,7 +126,7 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, ordering: str | Unset = UNSET, page: int | Unset = UNSET, page_size: int | Unset = UNSET, @@ -164,7 +164,7 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, ordering: str | Unset = UNSET, page: int | Unset = UNSET, page_size: int | Unset = UNSET, @@ -207,7 +207,7 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, ordering: str | Unset = UNSET, page: int | Unset = UNSET, page_size: int | Unset = UNSET, diff --git a/src/roe/_generated/api/policies/policies_partial_update.py b/src/roe/_generated/api/policies/policies_partial_update.py index 3f13876..4f4425d 100644 --- a/src/roe/_generated/api/policies/policies_partial_update.py +++ b/src/roe/_generated/api/policies/policies_partial_update.py @@ -8,7 +8,9 @@ from ...types import Response, UNSET from ... import errors +from ...models.error_detail_response import ErrorDetailResponse from ...models.patched_update_policy_request import PatchedUpdatePolicyRequest +from ...models.policies_partial_update_response_400 import PoliciesPartialUpdateResponse400 from ...models.update_policy import UpdatePolicy from ...types import UNSET, Unset from typing import cast @@ -57,7 +59,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> UpdatePolicy | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorDetailResponse | PoliciesPartialUpdateResponse400 | UpdatePolicy | None: if response.status_code == 200: response_200 = UpdatePolicy.from_dict(response.json()) @@ -65,13 +67,27 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 + if response.status_code == 400: + response_400 = PoliciesPartialUpdateResponse400.from_dict(response.json()) + + + + return response_400 + + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[UpdatePolicy]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorDetailResponse | PoliciesPartialUpdateResponse400 | UpdatePolicy]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -83,11 +99,11 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: PatchedUpdatePolicyRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[UpdatePolicy]: +) -> Response[ErrorDetailResponse | PoliciesPartialUpdateResponse400 | UpdatePolicy]: """ Retrieve, update, or delete a single policy by ID Args: @@ -101,7 +117,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[UpdatePolicy] + Response[ErrorDetailResponse | PoliciesPartialUpdateResponse400 | UpdatePolicy] """ @@ -121,11 +137,11 @@ def sync_detailed( def sync( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: PatchedUpdatePolicyRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> UpdatePolicy | None: +) -> ErrorDetailResponse | PoliciesPartialUpdateResponse400 | UpdatePolicy | None: """ Retrieve, update, or delete a single policy by ID Args: @@ -139,7 +155,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - UpdatePolicy + ErrorDetailResponse | PoliciesPartialUpdateResponse400 | UpdatePolicy """ @@ -154,11 +170,11 @@ def sync( async def asyncio_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: PatchedUpdatePolicyRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[UpdatePolicy]: +) -> Response[ErrorDetailResponse | PoliciesPartialUpdateResponse400 | UpdatePolicy]: """ Retrieve, update, or delete a single policy by ID Args: @@ -172,7 +188,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[UpdatePolicy] + Response[ErrorDetailResponse | PoliciesPartialUpdateResponse400 | UpdatePolicy] """ @@ -192,11 +208,11 @@ async def asyncio_detailed( async def asyncio( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: PatchedUpdatePolicyRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> UpdatePolicy | None: +) -> ErrorDetailResponse | PoliciesPartialUpdateResponse400 | UpdatePolicy | None: """ Retrieve, update, or delete a single policy by ID Args: @@ -210,7 +226,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - UpdatePolicy + ErrorDetailResponse | PoliciesPartialUpdateResponse400 | UpdatePolicy """ diff --git a/src/roe/_generated/api/policies/policies_retrieve.py b/src/roe/_generated/api/policies/policies_retrieve.py index 1133b7e..2d5cde0 100644 --- a/src/roe/_generated/api/policies/policies_retrieve.py +++ b/src/roe/_generated/api/policies/policies_retrieve.py @@ -8,6 +8,7 @@ from ...types import Response, UNSET from ... import errors +from ...models.error_detail_response import ErrorDetailResponse from ...models.policy import Policy from ...types import UNSET, Unset from typing import cast @@ -47,7 +48,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Policy | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorDetailResponse | Policy | None: if response.status_code == 200: response_200 = Policy.from_dict(response.json()) @@ -55,13 +56,20 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Policy]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorDetailResponse | Policy]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -73,10 +81,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Policy]: +) -> Response[ErrorDetailResponse | Policy]: """ Retrieve, update, or delete a single policy by ID Args: @@ -88,7 +96,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Policy] + Response[ErrorDetailResponse | Policy] """ @@ -107,10 +115,10 @@ def sync_detailed( def sync( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Policy | None: +) -> ErrorDetailResponse | Policy | None: """ Retrieve, update, or delete a single policy by ID Args: @@ -122,7 +130,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Policy + ErrorDetailResponse | Policy """ @@ -136,10 +144,10 @@ def sync( async def asyncio_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[Policy]: +) -> Response[ErrorDetailResponse | Policy]: """ Retrieve, update, or delete a single policy by ID Args: @@ -151,7 +159,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Policy] + Response[ErrorDetailResponse | Policy] """ @@ -170,10 +178,10 @@ async def asyncio_detailed( async def asyncio( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Policy | None: +) -> ErrorDetailResponse | Policy | None: """ Retrieve, update, or delete a single policy by ID Args: @@ -185,7 +193,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Policy + ErrorDetailResponse | Policy """ diff --git a/src/roe/_generated/api/policies/policies_update.py b/src/roe/_generated/api/policies/policies_update.py index af1985f..7d3c162 100644 --- a/src/roe/_generated/api/policies/policies_update.py +++ b/src/roe/_generated/api/policies/policies_update.py @@ -8,6 +8,8 @@ from ...types import Response, UNSET from ... import errors +from ...models.error_detail_response import ErrorDetailResponse +from ...models.policies_update_response_400 import PoliciesUpdateResponse400 from ...models.update_policy import UpdatePolicy from ...models.update_policy_request import UpdatePolicyRequest from ...types import UNSET, Unset @@ -55,7 +57,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> UpdatePolicy | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorDetailResponse | PoliciesUpdateResponse400 | UpdatePolicy | None: if response.status_code == 200: response_200 = UpdatePolicy.from_dict(response.json()) @@ -63,13 +65,27 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 + if response.status_code == 400: + response_400 = PoliciesUpdateResponse400.from_dict(response.json()) + + + + return response_400 + + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[UpdatePolicy]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorDetailResponse | PoliciesUpdateResponse400 | UpdatePolicy]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -81,11 +97,11 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: UpdatePolicyRequest, organization_id: UUID | Unset = UNSET, -) -> Response[UpdatePolicy]: +) -> Response[ErrorDetailResponse | PoliciesUpdateResponse400 | UpdatePolicy]: """ Retrieve, update, or delete a single policy by ID Args: @@ -98,7 +114,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[UpdatePolicy] + Response[ErrorDetailResponse | PoliciesUpdateResponse400 | UpdatePolicy] """ @@ -118,11 +134,11 @@ def sync_detailed( def sync( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: UpdatePolicyRequest, organization_id: UUID | Unset = UNSET, -) -> UpdatePolicy | None: +) -> ErrorDetailResponse | PoliciesUpdateResponse400 | UpdatePolicy | None: """ Retrieve, update, or delete a single policy by ID Args: @@ -135,7 +151,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - UpdatePolicy + ErrorDetailResponse | PoliciesUpdateResponse400 | UpdatePolicy """ @@ -150,11 +166,11 @@ def sync( async def asyncio_detailed( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: UpdatePolicyRequest, organization_id: UUID | Unset = UNSET, -) -> Response[UpdatePolicy]: +) -> Response[ErrorDetailResponse | PoliciesUpdateResponse400 | UpdatePolicy]: """ Retrieve, update, or delete a single policy by ID Args: @@ -167,7 +183,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[UpdatePolicy] + Response[ErrorDetailResponse | PoliciesUpdateResponse400 | UpdatePolicy] """ @@ -187,11 +203,11 @@ async def asyncio_detailed( async def asyncio( id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: UpdatePolicyRequest, organization_id: UUID | Unset = UNSET, -) -> UpdatePolicy | None: +) -> ErrorDetailResponse | PoliciesUpdateResponse400 | UpdatePolicy | None: """ Retrieve, update, or delete a single policy by ID Args: @@ -204,7 +220,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - UpdatePolicy + ErrorDetailResponse | PoliciesUpdateResponse400 | UpdatePolicy """ diff --git a/src/roe/_generated/api/policies/policies_versions_create.py b/src/roe/_generated/api/policies/policies_versions_create.py index d6176b2..760c38c 100644 --- a/src/roe/_generated/api/policies/policies_versions_create.py +++ b/src/roe/_generated/api/policies/policies_versions_create.py @@ -10,6 +10,8 @@ from ...models.create_policy_version import CreatePolicyVersion from ...models.create_policy_version_request import CreatePolicyVersionRequest +from ...models.error_detail_response import ErrorDetailResponse +from ...models.policies_versions_create_response_400 import PoliciesVersionsCreateResponse400 from ...types import UNSET, Unset from typing import cast from uuid import UUID @@ -55,7 +57,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> CreatePolicyVersion | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> CreatePolicyVersion | ErrorDetailResponse | PoliciesVersionsCreateResponse400 | None: if response.status_code == 201: response_201 = CreatePolicyVersion.from_dict(response.json()) @@ -63,13 +65,27 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_201 + if response.status_code == 400: + response_400 = PoliciesVersionsCreateResponse400.from_dict(response.json()) + + + + return response_400 + + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[CreatePolicyVersion]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[CreatePolicyVersion | ErrorDetailResponse | PoliciesVersionsCreateResponse400]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -81,11 +97,11 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( policy_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: CreatePolicyVersionRequest, organization_id: UUID | Unset = UNSET, -) -> Response[CreatePolicyVersion]: +) -> Response[CreatePolicyVersion | ErrorDetailResponse | PoliciesVersionsCreateResponse400]: """ Create a new policy version or list all versions of a specific policy Args: @@ -98,7 +114,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[CreatePolicyVersion] + Response[CreatePolicyVersion | ErrorDetailResponse | PoliciesVersionsCreateResponse400] """ @@ -118,11 +134,11 @@ def sync_detailed( def sync( policy_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: CreatePolicyVersionRequest, organization_id: UUID | Unset = UNSET, -) -> CreatePolicyVersion | None: +) -> CreatePolicyVersion | ErrorDetailResponse | PoliciesVersionsCreateResponse400 | None: """ Create a new policy version or list all versions of a specific policy Args: @@ -135,7 +151,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - CreatePolicyVersion + CreatePolicyVersion | ErrorDetailResponse | PoliciesVersionsCreateResponse400 """ @@ -150,11 +166,11 @@ def sync( async def asyncio_detailed( policy_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: CreatePolicyVersionRequest, organization_id: UUID | Unset = UNSET, -) -> Response[CreatePolicyVersion]: +) -> Response[CreatePolicyVersion | ErrorDetailResponse | PoliciesVersionsCreateResponse400]: """ Create a new policy version or list all versions of a specific policy Args: @@ -167,7 +183,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[CreatePolicyVersion] + Response[CreatePolicyVersion | ErrorDetailResponse | PoliciesVersionsCreateResponse400] """ @@ -187,11 +203,11 @@ async def asyncio_detailed( async def asyncio( policy_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: CreatePolicyVersionRequest, organization_id: UUID | Unset = UNSET, -) -> CreatePolicyVersion | None: +) -> CreatePolicyVersion | ErrorDetailResponse | PoliciesVersionsCreateResponse400 | None: """ Create a new policy version or list all versions of a specific policy Args: @@ -204,7 +220,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - CreatePolicyVersion + CreatePolicyVersion | ErrorDetailResponse | PoliciesVersionsCreateResponse400 """ diff --git a/src/roe/_generated/api/policies/policies_versions_list.py b/src/roe/_generated/api/policies/policies_versions_list.py index 4922d2e..6bf9055 100644 --- a/src/roe/_generated/api/policies/policies_versions_list.py +++ b/src/roe/_generated/api/policies/policies_versions_list.py @@ -8,6 +8,7 @@ from ...types import Response, UNSET from ... import errors +from ...models.error_detail_response import ErrorDetailResponse from ...models.paginated_policy_version_list import PaginatedPolicyVersionList from ...types import UNSET, Unset from typing import cast @@ -53,7 +54,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> PaginatedPolicyVersionList | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorDetailResponse | PaginatedPolicyVersionList | None: if response.status_code == 200: response_200 = PaginatedPolicyVersionList.from_dict(response.json()) @@ -61,13 +62,20 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[PaginatedPolicyVersionList]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorDetailResponse | PaginatedPolicyVersionList]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -79,12 +87,12 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( policy_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, page: int | Unset = UNSET, page_size: int | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[PaginatedPolicyVersionList]: +) -> Response[ErrorDetailResponse | PaginatedPolicyVersionList]: """ Create a new policy version or list all versions of a specific policy Args: @@ -98,7 +106,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[PaginatedPolicyVersionList] + Response[ErrorDetailResponse | PaginatedPolicyVersionList] """ @@ -119,12 +127,12 @@ def sync_detailed( def sync( policy_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, page: int | Unset = UNSET, page_size: int | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> PaginatedPolicyVersionList | None: +) -> ErrorDetailResponse | PaginatedPolicyVersionList | None: """ Create a new policy version or list all versions of a specific policy Args: @@ -138,7 +146,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - PaginatedPolicyVersionList + ErrorDetailResponse | PaginatedPolicyVersionList """ @@ -154,12 +162,12 @@ def sync( async def asyncio_detailed( policy_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, page: int | Unset = UNSET, page_size: int | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> Response[PaginatedPolicyVersionList]: +) -> Response[ErrorDetailResponse | PaginatedPolicyVersionList]: """ Create a new policy version or list all versions of a specific policy Args: @@ -173,7 +181,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[PaginatedPolicyVersionList] + Response[ErrorDetailResponse | PaginatedPolicyVersionList] """ @@ -194,12 +202,12 @@ async def asyncio_detailed( async def asyncio( policy_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, page: int | Unset = UNSET, page_size: int | Unset = UNSET, organization_id: UUID | Unset = UNSET, -) -> PaginatedPolicyVersionList | None: +) -> ErrorDetailResponse | PaginatedPolicyVersionList | None: """ Create a new policy version or list all versions of a specific policy Args: @@ -213,7 +221,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - PaginatedPolicyVersionList + ErrorDetailResponse | PaginatedPolicyVersionList """ diff --git a/src/roe/_generated/api/policies/policies_versions_retrieve.py b/src/roe/_generated/api/policies/policies_versions_retrieve.py index c9f72e6..55929e3 100644 --- a/src/roe/_generated/api/policies/policies_versions_retrieve.py +++ b/src/roe/_generated/api/policies/policies_versions_retrieve.py @@ -8,6 +8,7 @@ from ...types import Response, UNSET from ... import errors +from ...models.error_detail_response import ErrorDetailResponse from ...models.policy_version import PolicyVersion from ...types import UNSET, Unset from typing import cast @@ -48,7 +49,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> PolicyVersion | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorDetailResponse | PolicyVersion | None: if response.status_code == 200: response_200 = PolicyVersion.from_dict(response.json()) @@ -56,13 +57,20 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[PolicyVersion]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorDetailResponse | PolicyVersion]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -75,10 +83,10 @@ def sync_detailed( policy_id: UUID, version_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[PolicyVersion]: +) -> Response[ErrorDetailResponse | PolicyVersion]: """ Get a specific policy version by policy_id and version_id. Used for nested URL pattern: /policies/{policy_id}/versions/{version_id}/ @@ -92,7 +100,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[PolicyVersion] + Response[ErrorDetailResponse | PolicyVersion] """ @@ -113,10 +121,10 @@ def sync( policy_id: UUID, version_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> PolicyVersion | None: +) -> ErrorDetailResponse | PolicyVersion | None: """ Get a specific policy version by policy_id and version_id. Used for nested URL pattern: /policies/{policy_id}/versions/{version_id}/ @@ -130,7 +138,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - PolicyVersion + ErrorDetailResponse | PolicyVersion """ @@ -146,10 +154,10 @@ async def asyncio_detailed( policy_id: UUID, version_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> Response[PolicyVersion]: +) -> Response[ErrorDetailResponse | PolicyVersion]: """ Get a specific policy version by policy_id and version_id. Used for nested URL pattern: /policies/{policy_id}/versions/{version_id}/ @@ -163,7 +171,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[PolicyVersion] + Response[ErrorDetailResponse | PolicyVersion] """ @@ -184,10 +192,10 @@ async def asyncio( policy_id: UUID, version_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, organization_id: UUID | Unset = UNSET, -) -> PolicyVersion | None: +) -> ErrorDetailResponse | PolicyVersion | None: """ Get a specific policy version by policy_id and version_id. Used for nested URL pattern: /policies/{policy_id}/versions/{version_id}/ @@ -201,7 +209,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - PolicyVersion + ErrorDetailResponse | PolicyVersion """ diff --git a/src/roe/_generated/api/tables/tables_describe_retrieve.py b/src/roe/_generated/api/tables/tables_describe_retrieve.py index 7a6ee80..d2983fd 100644 --- a/src/roe/_generated/api/tables/tables_describe_retrieve.py +++ b/src/roe/_generated/api/tables/tables_describe_retrieve.py @@ -8,7 +8,7 @@ from ...types import Response, UNSET from ... import errors -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...models.table_describe_response import TableDescribeResponse from typing import cast @@ -34,7 +34,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorResponse | TableDescribeResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorDetailResponse | TableDescribeResponse | list[str] | None: if response.status_code == 200: response_200 = TableDescribeResponse.from_dict(response.json()) @@ -43,14 +43,15 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) - - + response_400 = cast(list[str], response.json()) return response_400 if response.status_code == 404: - response_404 = cast(Any, None) + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + return response_404 if client.raise_on_unexpected_status: @@ -59,7 +60,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorResponse | TableDescribeResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorDetailResponse | TableDescribeResponse | list[str]]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -71,9 +72,9 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( table_name: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> Response[Any | ErrorResponse | TableDescribeResponse]: +) -> Response[ErrorDetailResponse | TableDescribeResponse | list[str]]: """ Describe a Roe table Return table metadata only for one Roe table in the authenticated organization, including columns @@ -88,7 +89,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse | TableDescribeResponse] + Response[ErrorDetailResponse | TableDescribeResponse | list[str]] """ @@ -106,9 +107,9 @@ def sync_detailed( def sync( table_name: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> Any | ErrorResponse | TableDescribeResponse | None: +) -> ErrorDetailResponse | TableDescribeResponse | list[str] | None: """ Describe a Roe table Return table metadata only for one Roe table in the authenticated organization, including columns @@ -123,7 +124,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse | TableDescribeResponse + ErrorDetailResponse | TableDescribeResponse | list[str] """ @@ -136,9 +137,9 @@ def sync( async def asyncio_detailed( table_name: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> Response[Any | ErrorResponse | TableDescribeResponse]: +) -> Response[ErrorDetailResponse | TableDescribeResponse | list[str]]: """ Describe a Roe table Return table metadata only for one Roe table in the authenticated organization, including columns @@ -153,7 +154,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse | TableDescribeResponse] + Response[ErrorDetailResponse | TableDescribeResponse | list[str]] """ @@ -171,9 +172,9 @@ async def asyncio_detailed( async def asyncio( table_name: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> Any | ErrorResponse | TableDescribeResponse | None: +) -> ErrorDetailResponse | TableDescribeResponse | list[str] | None: """ Describe a Roe table Return table metadata only for one Roe table in the authenticated organization, including columns @@ -188,7 +189,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse | TableDescribeResponse + ErrorDetailResponse | TableDescribeResponse | list[str] """ diff --git a/src/roe/_generated/api/tables/tables_destroy.py b/src/roe/_generated/api/tables/tables_destroy.py index 12351cc..c696722 100644 --- a/src/roe/_generated/api/tables/tables_destroy.py +++ b/src/roe/_generated/api/tables/tables_destroy.py @@ -8,7 +8,7 @@ from ...types import Response, UNSET from ... import errors -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from typing import cast @@ -33,20 +33,21 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorDetailResponse | list[str] | None: if response.status_code == 204: response_204 = cast(Any, None) return response_204 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) - - + response_400 = cast(list[str], response.json()) return response_400 if response.status_code == 404: - response_404 = cast(Any, None) + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + return response_404 if client.raise_on_unexpected_status: @@ -55,7 +56,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorDetailResponse | list[str]]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -67,9 +68,9 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( table_name: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> Response[Any | ErrorResponse]: +) -> Response[Any | ErrorDetailResponse | list[str]]: """ Delete a Roe table Permanently drop one Roe table from the authenticated organization and remove table-link metadata @@ -83,7 +84,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse] + Response[Any | ErrorDetailResponse | list[str]] """ @@ -101,9 +102,9 @@ def sync_detailed( def sync( table_name: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> Any | ErrorResponse | None: +) -> Any | ErrorDetailResponse | list[str] | None: """ Delete a Roe table Permanently drop one Roe table from the authenticated organization and remove table-link metadata @@ -117,7 +118,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse + Any | ErrorDetailResponse | list[str] """ @@ -130,9 +131,9 @@ def sync( async def asyncio_detailed( table_name: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> Response[Any | ErrorResponse]: +) -> Response[Any | ErrorDetailResponse | list[str]]: """ Delete a Roe table Permanently drop one Roe table from the authenticated organization and remove table-link metadata @@ -146,7 +147,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse] + Response[Any | ErrorDetailResponse | list[str]] """ @@ -164,9 +165,9 @@ async def asyncio_detailed( async def asyncio( table_name: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> Any | ErrorResponse | None: +) -> Any | ErrorDetailResponse | list[str] | None: """ Delete a Roe table Permanently drop one Roe table from the authenticated organization and remove table-link metadata @@ -180,7 +181,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse + Any | ErrorDetailResponse | list[str] """ diff --git a/src/roe/_generated/api/tables/tables_list.py b/src/roe/_generated/api/tables/tables_list.py index 52f03b9..82a2a1e 100644 --- a/src/roe/_generated/api/tables/tables_list.py +++ b/src/roe/_generated/api/tables/tables_list.py @@ -8,7 +8,6 @@ from ...types import Response, UNSET from ... import errors -from ...models.error_response import ErrorResponse from ...models.table_list_response import TableListResponse from typing import cast @@ -33,7 +32,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorResponse | TableListResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> TableListResponse | None: if response.status_code == 200: response_200 = TableListResponse.from_dict(response.json()) @@ -41,20 +40,13 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 - if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) - - - - return response_400 - if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorResponse | TableListResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[TableListResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -65,9 +57,9 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> Response[ErrorResponse | TableListResponse]: +) -> Response[TableListResponse]: """ List Roe tables List Roe tables in the authenticated organization with column information. @@ -77,7 +69,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | TableListResponse] + Response[TableListResponse] """ @@ -93,9 +85,9 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> ErrorResponse | TableListResponse | None: +) -> TableListResponse | None: """ List Roe tables List Roe tables in the authenticated organization with column information. @@ -105,7 +97,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | TableListResponse + TableListResponse """ @@ -116,9 +108,9 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> Response[ErrorResponse | TableListResponse]: +) -> Response[TableListResponse]: """ List Roe tables List Roe tables in the authenticated organization with column information. @@ -128,7 +120,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | TableListResponse] + Response[TableListResponse] """ @@ -144,9 +136,9 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> ErrorResponse | TableListResponse | None: +) -> TableListResponse | None: """ List Roe tables List Roe tables in the authenticated organization with column information. @@ -156,7 +148,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | TableListResponse + TableListResponse """ diff --git a/src/roe/_generated/api/tables/tables_preview_retrieve.py b/src/roe/_generated/api/tables/tables_preview_retrieve.py index 9461b39..0ba6c10 100644 --- a/src/roe/_generated/api/tables/tables_preview_retrieve.py +++ b/src/roe/_generated/api/tables/tables_preview_retrieve.py @@ -8,8 +8,10 @@ from ...types import Response, UNSET from ... import errors -from ...models.error_response import ErrorResponse +from ...models.error_detail_response import ErrorDetailResponse from ...models.table_preview_response import TablePreviewResponse +from ...models.tables_preview_retrieve_response_400_type_1 import TablesPreviewRetrieveResponse400Type1 +from ...models.tables_preview_retrieve_response_400_type_2 import TablesPreviewRetrieveResponse400Type2 from ...types import UNSET, Unset from typing import cast @@ -44,7 +46,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | ErrorResponse | TablePreviewResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2 | None: if response.status_code == 200: response_200 = TablePreviewResponse.from_dict(response.json()) @@ -53,14 +55,42 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + def _parse_response_400(data: object) -> list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2: + try: + if not isinstance(data, list): + raise TypeError() + response_400_type_0 = cast(list[str], data) + return response_400_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + try: + if not isinstance(data, dict): + raise TypeError() + response_400_type_1 = TablesPreviewRetrieveResponse400Type1.from_dict(data) + + return response_400_type_1 + except (TypeError, ValueError, AttributeError, KeyError): + pass + if not isinstance(data, dict): + raise TypeError() + response_400_type_2 = TablesPreviewRetrieveResponse400Type2.from_dict(data) + + + + return response_400_type_2 + + response_400 = _parse_response_400(response.json()) + return response_400 if response.status_code == 404: - response_404 = cast(Any, None) + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + return response_404 if client.raise_on_unexpected_status: @@ -69,7 +99,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ErrorResponse | TablePreviewResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -81,10 +111,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( table_name: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, limit: int | Unset = 3, -) -> Response[Any | ErrorResponse | TablePreviewResponse]: +) -> Response[ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2]: """ Preview a Roe table Return column metadata plus a bounded sample of rows from one Roe table in the authenticated @@ -99,7 +129,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse | TablePreviewResponse] + Response[ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2] """ @@ -118,10 +148,10 @@ def sync_detailed( def sync( table_name: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, limit: int | Unset = 3, -) -> Any | ErrorResponse | TablePreviewResponse | None: +) -> ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2 | None: """ Preview a Roe table Return column metadata plus a bounded sample of rows from one Roe table in the authenticated @@ -136,7 +166,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse | TablePreviewResponse + ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2 """ @@ -150,10 +180,10 @@ def sync( async def asyncio_detailed( table_name: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, limit: int | Unset = 3, -) -> Response[Any | ErrorResponse | TablePreviewResponse]: +) -> Response[ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2]: """ Preview a Roe table Return column metadata plus a bounded sample of rows from one Roe table in the authenticated @@ -168,7 +198,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any | ErrorResponse | TablePreviewResponse] + Response[ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2] """ @@ -187,10 +217,10 @@ async def asyncio_detailed( async def asyncio( table_name: str, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, limit: int | Unset = 3, -) -> Any | ErrorResponse | TablePreviewResponse | None: +) -> ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2 | None: """ Preview a Roe table Return column metadata plus a bounded sample of rows from one Roe table in the authenticated @@ -205,7 +235,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Any | ErrorResponse | TablePreviewResponse + ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2 """ diff --git a/src/roe/_generated/api/tables/tables_query_create.py b/src/roe/_generated/api/tables/tables_query_create.py index 4ef5003..474f45e 100644 --- a/src/roe/_generated/api/tables/tables_query_create.py +++ b/src/roe/_generated/api/tables/tables_query_create.py @@ -8,15 +8,16 @@ from ...types import Response, UNSET from ... import errors -from ...models.table_query_request_request import TableQueryRequestRequest +from ...models.table_query_request import TableQueryRequest from ...models.table_query_submit_response import TableQuerySubmitResponse +from ...models.tables_query_create_response_400 import TablesQueryCreateResponse400 from typing import cast def _get_kwargs( *, - body: TableQueryRequestRequest, + body: TableQueryRequest, ) -> dict[str, Any]: headers: dict[str, Any] = {} @@ -41,7 +42,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> TableQuerySubmitResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> TableQuerySubmitResponse | TablesQueryCreateResponse400 | None: if response.status_code == 202: response_202 = TableQuerySubmitResponse.from_dict(response.json()) @@ -49,13 +50,20 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_202 + if response.status_code == 400: + response_400 = TablesQueryCreateResponse400.from_dict(response.json()) + + + + return response_400 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[TableQuerySubmitResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[TableQuerySubmitResponse | TablesQueryCreateResponse400]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -66,23 +74,23 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, - body: TableQueryRequestRequest, + client: AuthenticatedClient, + body: TableQueryRequest, -) -> Response[TableQuerySubmitResponse]: +) -> Response[TableQuerySubmitResponse | TablesQueryCreateResponse400]: """ Run a read-only Roe table query Run a read-only SQL query over public Roe tables. Args: - body (TableQueryRequestRequest): Request payload for running a public Roe table query. + body (TableQueryRequest): Request payload for running a public Roe table query. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[TableQuerySubmitResponse] + Response[TableQuerySubmitResponse | TablesQueryCreateResponse400] """ @@ -99,23 +107,23 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, - body: TableQueryRequestRequest, + client: AuthenticatedClient, + body: TableQueryRequest, -) -> TableQuerySubmitResponse | None: +) -> TableQuerySubmitResponse | TablesQueryCreateResponse400 | None: """ Run a read-only Roe table query Run a read-only SQL query over public Roe tables. Args: - body (TableQueryRequestRequest): Request payload for running a public Roe table query. + body (TableQueryRequest): Request payload for running a public Roe table query. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - TableQuerySubmitResponse + TableQuerySubmitResponse | TablesQueryCreateResponse400 """ @@ -127,23 +135,23 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, - body: TableQueryRequestRequest, + client: AuthenticatedClient, + body: TableQueryRequest, -) -> Response[TableQuerySubmitResponse]: +) -> Response[TableQuerySubmitResponse | TablesQueryCreateResponse400]: """ Run a read-only Roe table query Run a read-only SQL query over public Roe tables. Args: - body (TableQueryRequestRequest): Request payload for running a public Roe table query. + body (TableQueryRequest): Request payload for running a public Roe table query. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[TableQuerySubmitResponse] + Response[TableQuerySubmitResponse | TablesQueryCreateResponse400] """ @@ -160,23 +168,23 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, - body: TableQueryRequestRequest, + client: AuthenticatedClient, + body: TableQueryRequest, -) -> TableQuerySubmitResponse | None: +) -> TableQuerySubmitResponse | TablesQueryCreateResponse400 | None: """ Run a read-only Roe table query Run a read-only SQL query over public Roe tables. Args: - body (TableQueryRequestRequest): Request payload for running a public Roe table query. + body (TableQueryRequest): Request payload for running a public Roe table query. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - TableQuerySubmitResponse + TableQuerySubmitResponse | TablesQueryCreateResponse400 """ diff --git a/src/roe/_generated/api/tables/tables_query_result_retrieve.py b/src/roe/_generated/api/tables/tables_query_result_retrieve.py index b7bc858..2ae4563 100644 --- a/src/roe/_generated/api/tables/tables_query_result_retrieve.py +++ b/src/roe/_generated/api/tables/tables_query_result_retrieve.py @@ -8,6 +8,7 @@ from ...types import Response, UNSET from ... import errors +from ...models.error_detail_response import ErrorDetailResponse from ...models.table_query_result_response import TableQueryResultResponse from typing import cast from uuid import UUID @@ -34,7 +35,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> TableQueryResultResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorDetailResponse | TableQueryResultResponse | None: if response.status_code == 200: response_200 = TableQueryResultResponse.from_dict(response.json()) @@ -42,13 +43,27 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_200 + if response.status_code == 403: + response_403 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_403 + + if response.status_code == 404: + response_404 = ErrorDetailResponse.from_dict(response.json()) + + + + return response_404 + if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) else: return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[TableQueryResultResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorDetailResponse | TableQueryResultResponse]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -60,9 +75,9 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( table_query_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> Response[TableQueryResultResponse]: +) -> Response[ErrorDetailResponse | TableQueryResultResponse]: """ Get a Roe table query result Poll or fetch one public Roe table query result. @@ -75,7 +90,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[TableQueryResultResponse] + Response[ErrorDetailResponse | TableQueryResultResponse] """ @@ -93,9 +108,9 @@ def sync_detailed( def sync( table_query_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> TableQueryResultResponse | None: +) -> ErrorDetailResponse | TableQueryResultResponse | None: """ Get a Roe table query result Poll or fetch one public Roe table query result. @@ -108,7 +123,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - TableQueryResultResponse + ErrorDetailResponse | TableQueryResultResponse """ @@ -121,9 +136,9 @@ def sync( async def asyncio_detailed( table_query_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> Response[TableQueryResultResponse]: +) -> Response[ErrorDetailResponse | TableQueryResultResponse]: """ Get a Roe table query result Poll or fetch one public Roe table query result. @@ -136,7 +151,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[TableQueryResultResponse] + Response[ErrorDetailResponse | TableQueryResultResponse] """ @@ -154,9 +169,9 @@ async def asyncio_detailed( async def asyncio( table_query_id: UUID, *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, -) -> TableQueryResultResponse | None: +) -> ErrorDetailResponse | TableQueryResultResponse | None: """ Get a Roe table query result Poll or fetch one public Roe table query result. @@ -169,7 +184,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - TableQueryResultResponse + ErrorDetailResponse | TableQueryResultResponse """ diff --git a/src/roe/_generated/api/tables/upload_table.py b/src/roe/_generated/api/tables/upload_table.py index f265427..fa9689b 100644 --- a/src/roe/_generated/api/tables/upload_table.py +++ b/src/roe/_generated/api/tables/upload_table.py @@ -8,9 +8,10 @@ from ...types import Response, UNSET from ... import errors -from ...models.error_response import ErrorResponse from ...models.table_upload_request import TableUploadRequest from ...models.table_upload_response import TableUploadResponse +from ...models.upload_table_response_400_type_1 import UploadTableResponse400Type1 +from ...models.upload_table_response_400_type_2 import UploadTableResponse400Type2 from typing import cast @@ -41,7 +42,7 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> ErrorResponse | TableUploadResponse | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> TableUploadResponse | list[str] | UploadTableResponse400Type1 | UploadTableResponse400Type2 | None: if response.status_code == 201: response_201 = TableUploadResponse.from_dict(response.json()) @@ -50,10 +51,35 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return response_201 if response.status_code == 400: - response_400 = ErrorResponse.from_dict(response.json()) + def _parse_response_400(data: object) -> list[str] | UploadTableResponse400Type1 | UploadTableResponse400Type2: + try: + if not isinstance(data, list): + raise TypeError() + response_400_type_0 = cast(list[str], data) + return response_400_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + try: + if not isinstance(data, dict): + raise TypeError() + response_400_type_1 = UploadTableResponse400Type1.from_dict(data) + + return response_400_type_1 + except (TypeError, ValueError, AttributeError, KeyError): + pass + if not isinstance(data, dict): + raise TypeError() + response_400_type_2 = UploadTableResponse400Type2.from_dict(data) + + + + return response_400_type_2 + + response_400 = _parse_response_400(response.json()) + return response_400 if client.raise_on_unexpected_status: @@ -62,7 +88,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ErrorResponse | TableUploadResponse]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[TableUploadResponse | list[str] | UploadTableResponse400Type1 | UploadTableResponse400Type2]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -73,10 +99,10 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: TableUploadRequest, -) -> Response[ErrorResponse | TableUploadResponse]: +) -> Response[TableUploadResponse | list[str] | UploadTableResponse400Type1 | UploadTableResponse400Type2]: """ Upload a CSV as a Roe table Create a Roe table in the authenticated organization from an uploaded CSV file. Organization API @@ -91,7 +117,7 @@ def sync_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | TableUploadResponse] + Response[TableUploadResponse | list[str] | UploadTableResponse400Type1 | UploadTableResponse400Type2] """ @@ -108,10 +134,10 @@ def sync_detailed( def sync( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: TableUploadRequest, -) -> ErrorResponse | TableUploadResponse | None: +) -> TableUploadResponse | list[str] | UploadTableResponse400Type1 | UploadTableResponse400Type2 | None: """ Upload a CSV as a Roe table Create a Roe table in the authenticated organization from an uploaded CSV file. Organization API @@ -126,7 +152,7 @@ def sync( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | TableUploadResponse + TableUploadResponse | list[str] | UploadTableResponse400Type1 | UploadTableResponse400Type2 """ @@ -138,10 +164,10 @@ def sync( async def asyncio_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: TableUploadRequest, -) -> Response[ErrorResponse | TableUploadResponse]: +) -> Response[TableUploadResponse | list[str] | UploadTableResponse400Type1 | UploadTableResponse400Type2]: """ Upload a CSV as a Roe table Create a Roe table in the authenticated organization from an uploaded CSV file. Organization API @@ -156,7 +182,7 @@ async def asyncio_detailed( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[ErrorResponse | TableUploadResponse] + Response[TableUploadResponse | list[str] | UploadTableResponse400Type1 | UploadTableResponse400Type2] """ @@ -173,10 +199,10 @@ async def asyncio_detailed( async def asyncio( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, body: TableUploadRequest, -) -> ErrorResponse | TableUploadResponse | None: +) -> TableUploadResponse | list[str] | UploadTableResponse400Type1 | UploadTableResponse400Type2 | None: """ Upload a CSV as a Roe table Create a Roe table in the authenticated organization from an uploaded CSV file. Organization API @@ -191,7 +217,7 @@ async def asyncio( httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - ErrorResponse | TableUploadResponse + TableUploadResponse | list[str] | UploadTableResponse400Type1 | UploadTableResponse400Type2 """ diff --git a/src/roe/_generated/api/users/users_current_user_retrieve.py b/src/roe/_generated/api/users/users_current_user_retrieve.py index 1d856f4..6a6f895 100644 --- a/src/roe/_generated/api/users/users_current_user_retrieve.py +++ b/src/roe/_generated/api/users/users_current_user_retrieve.py @@ -8,6 +8,8 @@ from ...types import Response, UNSET from ... import errors +from ...models.user import User +from typing import cast @@ -30,9 +32,13 @@ def _get_kwargs( -def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Any | None: +def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> User | None: if response.status_code == 200: - return None + response_200 = User.from_dict(response.json()) + + + + return response_200 if client.raise_on_unexpected_status: raise errors.UnexpectedStatus(response.status_code, response.content) @@ -40,7 +46,7 @@ def _parse_response(*, client: AuthenticatedClient | Client, response: httpx.Res return None -def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any]: +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[User]: return Response( status_code=HTTPStatus(response.status_code), content=response.content, @@ -51,16 +57,17 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, + +) -> Response[User]: + """ Get the current user -) -> Response[Any]: - """ Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any] + Response[User] """ @@ -74,19 +81,40 @@ def sync_detailed( return _build_response(client=client, response=response) +def sync( + *, + client: AuthenticatedClient, + +) -> User | None: + """ Get the current user + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + User + """ + + + return sync_detailed( + client=client, + + ).parsed async def asyncio_detailed( *, - client: AuthenticatedClient | Client, + client: AuthenticatedClient, + +) -> Response[User]: + """ Get the current user -) -> Response[Any]: - """ Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[Any] + Response[User] """ @@ -100,3 +128,23 @@ async def asyncio_detailed( return _build_response(client=client, response=response) +async def asyncio( + *, + client: AuthenticatedClient, + +) -> User | None: + """ Get the current user + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + User + """ + + + return (await asyncio_detailed( + client=client, + + )).parsed diff --git a/src/roe/_generated/models/__init__.py b/src/roe/_generated/models/__init__.py index 5990899..64f8a46 100644 --- a/src/roe/_generated/models/__init__.py +++ b/src/roe/_generated/models/__init__.py @@ -3,26 +3,58 @@ from .agent_datum import AgentDatum from .agent_engine_type_list import AgentEngineTypeList from .agent_engine_type_list_engines_item import AgentEngineTypeListEnginesItem -from .agent_execution_request_request import AgentExecutionRequestRequest +from .agent_execution_request import AgentExecutionRequest +from .agent_execution_request_metadata_type_0 import AgentExecutionRequestMetadataType0 from .agent_input_definition import AgentInputDefinition from .agent_job_delete_data_response import AgentJobDeleteDataResponse from .agent_job_result_item import AgentJobResultItem -from .agent_job_result_many_request_request import AgentJobResultManyRequestRequest +from .agent_job_result_many_request import AgentJobResultManyRequest from .agent_job_result_response import AgentJobResultResponse +from .agent_job_single_status import AgentJobSingleStatus from .agent_job_status import AgentJobStatus -from .agent_job_status_many_request_request import AgentJobStatusManyRequestRequest -from .agent_run_async_many_request_request import AgentRunAsyncManyRequestRequest +from .agent_job_status_many_request import AgentJobStatusManyRequest +from .agent_run_async_many_request import AgentRunAsyncManyRequest +from .agent_tag import AgentTag from .agent_version import AgentVersion from .agent_version_create_request import AgentVersionCreateRequest -from .agent_version_update_request_request import AgentVersionUpdateRequestRequest -from .agents_run_async_many_response_200 import AgentsRunAsyncManyResponse200 +from .agent_version_update_request import AgentVersionUpdateRequest +from .agents_create_response_400 import AgentsCreateResponse400 +from .agents_jobs_references_retrieve_response_400_type_1 import AgentsJobsReferencesRetrieveResponse400Type1 +from .agents_jobs_references_retrieve_response_400_type_2 import AgentsJobsReferencesRetrieveResponse400Type2 +from .agents_jobs_results_create_response_400 import AgentsJobsResultsCreateResponse400 +from .agents_jobs_statuses_create_response_400 import AgentsJobsStatusesCreateResponse400 +from .agents_list_response_400 import AgentsListResponse400 +from .agents_partial_update_response_400 import AgentsPartialUpdateResponse400 +from .agents_run_async_create_response_400_type_1 import AgentsRunAsyncCreateResponse400Type1 +from .agents_run_async_create_response_400_type_2 import AgentsRunAsyncCreateResponse400Type2 +from .agents_run_async_many_response_400_type_1 import AgentsRunAsyncManyResponse400Type1 +from .agents_run_async_many_response_400_type_2 import AgentsRunAsyncManyResponse400Type2 +from .agents_run_response_400_type_1 import AgentsRunResponse400Type1 +from .agents_run_response_400_type_2 import AgentsRunResponse400Type2 +from .agents_run_version_response_400_type_1 import AgentsRunVersionResponse400Type1 +from .agents_run_version_response_400_type_2 import AgentsRunVersionResponse400Type2 +from .agents_run_versions_async_create_response_400_type_1 import AgentsRunVersionsAsyncCreateResponse400Type1 +from .agents_run_versions_async_create_response_400_type_2 import AgentsRunVersionsAsyncCreateResponse400Type2 +from .agents_update_response_400 import AgentsUpdateResponse400 +from .agents_versions_create_response_400 import AgentsVersionsCreateResponse400 +from .api_error_response import ApiErrorResponse from .base_agent import BaseAgent from .base_agent_create_request import BaseAgentCreateRequest from .base_agent_update_request import BaseAgentUpdateRequest +from .color_enum import ColorEnum from .connection import Connection from .connection_auth_config import ConnectionAuthConfig +from .connection_delete_error_response import ConnectionDeleteErrorResponse from .connection_list import ConnectionList -from .connection_request import ConnectionRequest +from .connections_create_response_400_type_1 import ConnectionsCreateResponse400Type1 +from .connections_create_response_400_type_2 import ConnectionsCreateResponse400Type2 +from .connections_list_response_400 import ConnectionsListResponse400 +from .connections_partial_update_response_400_type_1 import ConnectionsPartialUpdateResponse400Type1 +from .connections_partial_update_response_400_type_2 import ConnectionsPartialUpdateResponse400Type2 +from .connections_test_credentials_create_response_400_type_0 import ConnectionsTestCredentialsCreateResponse400Type0 +from .connections_test_credentials_create_response_400_type_1 import ConnectionsTestCredentialsCreateResponse400Type1 +from .connections_update_response_400_type_1 import ConnectionsUpdateResponse400Type1 +from .connections_update_response_400_type_2 import ConnectionsUpdateResponse400Type2 from .connector_list_response import ConnectorListResponse from .connector_metadata import ConnectorMetadata from .connector_type_enum import ConnectorTypeEnum @@ -33,23 +65,31 @@ from .create_policy_request import CreatePolicyRequest from .create_policy_version import CreatePolicyVersion from .create_policy_version_request import CreatePolicyVersionRequest +from .dependent_agent_info import DependentAgentInfo +from .discovery_supported_models_list_response_400 import DiscoverySupportedModelsListResponse400 from .duplicate_connection_existing import DuplicateConnectionExisting from .duplicate_connection_response import DuplicateConnectionResponse -from .error_response import ErrorResponse -from .paginated_agent_job_result_item_list import PaginatedAgentJobResultItemList +from .error_detail_response import ErrorDetailResponse +from .message_response import MessageResponse from .paginated_base_agent_list import PaginatedBaseAgentList from .paginated_connection_list_list import PaginatedConnectionListList from .paginated_policy_list import PaginatedPolicyList from .paginated_policy_version_list import PaginatedPolicyVersionList +from .patched_agent_version_update_request import PatchedAgentVersionUpdateRequest from .patched_base_agent_update_request import PatchedBaseAgentUpdateRequest -from .patched_patched_agent_version_update_request_request import PatchedPatchedAgentVersionUpdateRequestRequest from .patched_update_connection_request import PatchedUpdateConnectionRequest from .patched_update_connection_request_auth_config import PatchedUpdateConnectionRequestAuthConfig from .patched_update_connection_request_config import PatchedUpdateConnectionRequestConfig from .patched_update_policy_request import PatchedUpdatePolicyRequest +from .policies_create_response_400 import PoliciesCreateResponse400 +from .policies_partial_update_response_400 import PoliciesPartialUpdateResponse400 +from .policies_update_response_400 import PoliciesUpdateResponse400 +from .policies_versions_create_response_400 import PoliciesVersionsCreateResponse400 from .policy import Policy +from .policy_delete_conflict import PolicyDeleteConflict from .policy_version import PolicyVersion from .policy_version_created_by import PolicyVersionCreatedBy +from .qdrant_cleanup_error_response import QdrantCleanupErrorResponse from .status_enum import StatusEnum from .supported_llm_model import SupportedLLMModel from .supported_llm_model_list import SupportedLLMModelList @@ -59,48 +99,87 @@ from .table_list_response import TableListResponse from .table_preview_response import TablePreviewResponse from .table_preview_response_rows_item import TablePreviewResponseRowsItem -from .table_query_request_request import TableQueryRequestRequest +from .table_query_request import TableQueryRequest from .table_query_result_response import TableQueryResultResponse from .table_query_result_response_columns_item import TableQueryResultResponseColumnsItem from .table_query_result_response_rows_item import TableQueryResultResponseRowsItem +from .table_query_status_enum import TableQueryStatusEnum from .table_query_submit_response import TableQuerySubmitResponse from .table_upload_request import TableUploadRequest from .table_upload_response import TableUploadResponse +from .tables_preview_retrieve_response_400_type_1 import TablesPreviewRetrieveResponse400Type1 +from .tables_preview_retrieve_response_400_type_2 import TablesPreviewRetrieveResponse400Type2 +from .tables_query_create_response_400 import TablesQueryCreateResponse400 from .test_connection import TestConnection from .test_connection_credentials_request import TestConnectionCredentialsRequest from .test_connection_credentials_request_auth_config import TestConnectionCredentialsRequestAuthConfig from .test_connection_credentials_request_config import TestConnectionCredentialsRequestConfig -from .update_connection import UpdateConnection -from .update_connection_auth_config import UpdateConnectionAuthConfig -from .update_connection_config import UpdateConnectionConfig +from .update_connection_request import UpdateConnectionRequest +from .update_connection_request_auth_config import UpdateConnectionRequestAuthConfig +from .update_connection_request_config import UpdateConnectionRequestConfig from .update_policy import UpdatePolicy from .update_policy_request import UpdatePolicyRequest +from .upload_table_response_400_type_1 import UploadTableResponse400Type1 +from .upload_table_response_400_type_2 import UploadTableResponse400Type2 +from .user import User from .user_info import UserInfo __all__ = ( "AgentDatum", "AgentEngineTypeList", "AgentEngineTypeListEnginesItem", - "AgentExecutionRequestRequest", + "AgentExecutionRequest", + "AgentExecutionRequestMetadataType0", "AgentInputDefinition", "AgentJobDeleteDataResponse", "AgentJobResultItem", - "AgentJobResultManyRequestRequest", + "AgentJobResultManyRequest", "AgentJobResultResponse", + "AgentJobSingleStatus", "AgentJobStatus", - "AgentJobStatusManyRequestRequest", - "AgentRunAsyncManyRequestRequest", - "AgentsRunAsyncManyResponse200", + "AgentJobStatusManyRequest", + "AgentRunAsyncManyRequest", + "AgentsCreateResponse400", + "AgentsJobsReferencesRetrieveResponse400Type1", + "AgentsJobsReferencesRetrieveResponse400Type2", + "AgentsJobsResultsCreateResponse400", + "AgentsJobsStatusesCreateResponse400", + "AgentsListResponse400", + "AgentsPartialUpdateResponse400", + "AgentsRunAsyncCreateResponse400Type1", + "AgentsRunAsyncCreateResponse400Type2", + "AgentsRunAsyncManyResponse400Type1", + "AgentsRunAsyncManyResponse400Type2", + "AgentsRunResponse400Type1", + "AgentsRunResponse400Type2", + "AgentsRunVersionResponse400Type1", + "AgentsRunVersionResponse400Type2", + "AgentsRunVersionsAsyncCreateResponse400Type1", + "AgentsRunVersionsAsyncCreateResponse400Type2", + "AgentsUpdateResponse400", + "AgentsVersionsCreateResponse400", + "AgentTag", "AgentVersion", "AgentVersionCreateRequest", - "AgentVersionUpdateRequestRequest", + "AgentVersionUpdateRequest", + "ApiErrorResponse", "BaseAgent", "BaseAgentCreateRequest", "BaseAgentUpdateRequest", + "ColorEnum", "Connection", "ConnectionAuthConfig", + "ConnectionDeleteErrorResponse", "ConnectionList", - "ConnectionRequest", + "ConnectionsCreateResponse400Type1", + "ConnectionsCreateResponse400Type2", + "ConnectionsListResponse400", + "ConnectionsPartialUpdateResponse400Type1", + "ConnectionsPartialUpdateResponse400Type2", + "ConnectionsTestCredentialsCreateResponse400Type0", + "ConnectionsTestCredentialsCreateResponse400Type1", + "ConnectionsUpdateResponse400Type1", + "ConnectionsUpdateResponse400Type2", "ConnectorListResponse", "ConnectorMetadata", "ConnectorTypeEnum", @@ -111,23 +190,31 @@ "CreatePolicyRequest", "CreatePolicyVersion", "CreatePolicyVersionRequest", + "DependentAgentInfo", + "DiscoverySupportedModelsListResponse400", "DuplicateConnectionExisting", "DuplicateConnectionResponse", - "ErrorResponse", - "PaginatedAgentJobResultItemList", + "ErrorDetailResponse", + "MessageResponse", "PaginatedBaseAgentList", "PaginatedConnectionListList", "PaginatedPolicyList", "PaginatedPolicyVersionList", + "PatchedAgentVersionUpdateRequest", "PatchedBaseAgentUpdateRequest", - "PatchedPatchedAgentVersionUpdateRequestRequest", "PatchedUpdateConnectionRequest", "PatchedUpdateConnectionRequestAuthConfig", "PatchedUpdateConnectionRequestConfig", "PatchedUpdatePolicyRequest", + "PoliciesCreateResponse400", + "PoliciesPartialUpdateResponse400", + "PoliciesUpdateResponse400", + "PoliciesVersionsCreateResponse400", "Policy", + "PolicyDeleteConflict", "PolicyVersion", "PolicyVersionCreatedBy", + "QdrantCleanupErrorResponse", "StatusEnum", "SupportedLLMModel", "SupportedLLMModelList", @@ -137,21 +224,28 @@ "TableListResponse", "TablePreviewResponse", "TablePreviewResponseRowsItem", - "TableQueryRequestRequest", + "TableQueryRequest", "TableQueryResultResponse", "TableQueryResultResponseColumnsItem", "TableQueryResultResponseRowsItem", + "TableQueryStatusEnum", "TableQuerySubmitResponse", + "TablesPreviewRetrieveResponse400Type1", + "TablesPreviewRetrieveResponse400Type2", + "TablesQueryCreateResponse400", "TableUploadRequest", "TableUploadResponse", "TestConnection", "TestConnectionCredentialsRequest", "TestConnectionCredentialsRequestAuthConfig", "TestConnectionCredentialsRequestConfig", - "UpdateConnection", - "UpdateConnectionAuthConfig", - "UpdateConnectionConfig", + "UpdateConnectionRequest", + "UpdateConnectionRequestAuthConfig", + "UpdateConnectionRequestConfig", "UpdatePolicy", "UpdatePolicyRequest", + "UploadTableResponse400Type1", + "UploadTableResponse400Type2", + "User", "UserInfo", ) diff --git a/src/roe/_generated/models/agent_execution_request.py b/src/roe/_generated/models/agent_execution_request.py new file mode 100644 index 0000000..7d84ff0 --- /dev/null +++ b/src/roe/_generated/models/agent_execution_request.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from typing import cast + +if TYPE_CHECKING: + from ..models.agent_execution_request_metadata_type_0 import AgentExecutionRequestMetadataType0 + + + + + +T = TypeVar("T", bound="AgentExecutionRequest") + + + +@_attrs_define +class AgentExecutionRequest: + """ Agent execution request. In addition to `metadata`, every key of the agent's input definitions is accepted as a + property (text value or file upload). + + Attributes: + metadata (AgentExecutionRequestMetadataType0 | None | Unset): Optional metadata stored as-is on the created + agent job. A JSON-encoded object string is also accepted; null is treated the same as omitting the field (empty + metadata). Only honored by the single-run endpoints — when this object is an item of the run-async-many `inputs` + list, `metadata` is ignored. + """ + + metadata: AgentExecutionRequestMetadataType0 | None | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.agent_execution_request_metadata_type_0 import AgentExecutionRequestMetadataType0 + metadata: dict[str, Any] | None | Unset + if isinstance(self.metadata, Unset): + metadata = UNSET + elif isinstance(self.metadata, AgentExecutionRequestMetadataType0): + metadata = self.metadata.to_dict() + else: + metadata = self.metadata + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + }) + if metadata is not UNSET: + field_dict["metadata"] = metadata + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.agent_execution_request_metadata_type_0 import AgentExecutionRequestMetadataType0 + d = dict(src_dict) + def _parse_metadata(data: object) -> AgentExecutionRequestMetadataType0 | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + try: + if not isinstance(data, dict): + raise TypeError() + metadata_type_0 = AgentExecutionRequestMetadataType0.from_dict(data) + + + + return metadata_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(AgentExecutionRequestMetadataType0 | None | Unset, data) + + metadata = _parse_metadata(d.pop("metadata", UNSET)) + + + agent_execution_request = cls( + metadata=metadata, + ) + + + agent_execution_request.additional_properties = d + return agent_execution_request + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agent_execution_request_metadata_type_0.py b/src/roe/_generated/models/agent_execution_request_metadata_type_0.py new file mode 100644 index 0000000..6d5b6ed --- /dev/null +++ b/src/roe/_generated/models/agent_execution_request_metadata_type_0.py @@ -0,0 +1,68 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="AgentExecutionRequestMetadataType0") + + + +@_attrs_define +class AgentExecutionRequestMetadataType0: + """ Optional metadata stored as-is on the created agent job. A JSON-encoded object string is also accepted; null is + treated the same as omitting the field (empty metadata). Only honored by the single-run endpoints — when this object + is an item of the run-async-many `inputs` list, `metadata` is ignored. + + """ + + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + agent_execution_request_metadata_type_0 = cls( + ) + + + agent_execution_request_metadata_type_0.additional_properties = d + return agent_execution_request_metadata_type_0 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agent_execution_request_request.py b/src/roe/_generated/models/agent_execution_request_request.py deleted file mode 100644 index 3a51020..0000000 --- a/src/roe/_generated/models/agent_execution_request_request.py +++ /dev/null @@ -1,89 +0,0 @@ -from __future__ import annotations - -from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator - -from attrs import define as _attrs_define -from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..types import UNSET, Unset - - - - - - -T = TypeVar("T", bound="AgentExecutionRequestRequest") - - - -@_attrs_define -class AgentExecutionRequestRequest: - """ Serializer for agent execution requests with dynamic input fields. - - Attributes: - metadata (Any | Unset): Optional metadata as JSON object or JSON string - agent_input_key_example (str | Unset): Agent input keys are dynamic based on agent configuration. Can be text or - file. - """ - - metadata: Any | Unset = UNSET - agent_input_key_example: str | Unset = UNSET - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - - - def to_dict(self) -> dict[str, Any]: - metadata = self.metadata - - agent_input_key_example = self.agent_input_key_example - - - field_dict: dict[str, Any] = {} - field_dict.update(self.additional_properties) - field_dict.update({ - }) - if metadata is not UNSET: - field_dict["metadata"] = metadata - if agent_input_key_example is not UNSET: - field_dict["agent_input_key_example"] = agent_input_key_example - - return field_dict - - - - @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: - d = dict(src_dict) - metadata = d.pop("metadata", UNSET) - - agent_input_key_example = d.pop("agent_input_key_example", UNSET) - - agent_execution_request_request = cls( - metadata=metadata, - agent_input_key_example=agent_input_key_example, - ) - - - agent_execution_request_request.additional_properties = d - return agent_execution_request_request - - @property - def additional_keys(self) -> list[str]: - return list(self.additional_properties.keys()) - - def __getitem__(self, key: str) -> Any: - return self.additional_properties[key] - - def __setitem__(self, key: str, value: Any) -> None: - self.additional_properties[key] = value - - def __delitem__(self, key: str) -> None: - del self.additional_properties[key] - - def __contains__(self, key: str) -> bool: - return key in self.additional_properties diff --git a/src/roe/_generated/models/agent_job_delete_data_response.py b/src/roe/_generated/models/agent_job_delete_data_response.py index c3219f4..34c5834 100644 --- a/src/roe/_generated/models/agent_job_delete_data_response.py +++ b/src/roe/_generated/models/agent_job_delete_data_response.py @@ -8,7 +8,6 @@ from ..types import UNSET, Unset -from ..types import UNSET, Unset from typing import cast @@ -22,7 +21,8 @@ @_attrs_define class AgentJobDeleteDataResponse: - """ + """ Response payload of purge_agent_job_data (delete-data and :purgeData). + Attributes: status (str): Overall status: 'success' or 'partial_success' deleted_count (int): Number of input files successfully deleted @@ -30,7 +30,7 @@ class AgentJobDeleteDataResponse: blob_sanitized (bool): Whether blob data (outputs, steps, logs, trace) was successfully sanitized artifacts_deleted_count (int): Number of workflow artifacts successfully deleted artifacts_failed_count (int): Number of workflow artifacts that failed to delete - errors (list[Any] | Unset): List of errors encountered during deletion + errors (list[str] | None): List of errors encountered during deletion; null when none """ status: str @@ -39,7 +39,7 @@ class AgentJobDeleteDataResponse: blob_sanitized: bool artifacts_deleted_count: int artifacts_failed_count: int - errors: list[Any] | Unset = UNSET + errors: list[str] | None additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -59,11 +59,13 @@ def to_dict(self) -> dict[str, Any]: artifacts_failed_count = self.artifacts_failed_count - errors: list[Any] | Unset = UNSET - if not isinstance(self.errors, Unset): + errors: list[str] | None + if isinstance(self.errors, list): errors = self.errors + else: + errors = self.errors field_dict: dict[str, Any] = {} @@ -75,9 +77,8 @@ def to_dict(self) -> dict[str, Any]: "blob_sanitized": blob_sanitized, "artifacts_deleted_count": artifacts_deleted_count, "artifacts_failed_count": artifacts_failed_count, + "errors": errors, }) - if errors is not UNSET: - field_dict["errors"] = errors return field_dict @@ -98,7 +99,20 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: artifacts_failed_count = d.pop("artifacts_failed_count") - errors = cast(list[Any], d.pop("errors", UNSET)) + def _parse_errors(data: object) -> list[str] | None: + if data is None: + return data + try: + if not isinstance(data, list): + raise TypeError() + errors_type_0 = cast(list[str], data) + + return errors_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | None, data) + + errors = _parse_errors(d.pop("errors")) agent_job_delete_data_response = cls( diff --git a/src/roe/_generated/models/agent_job_result_many_request_request.py b/src/roe/_generated/models/agent_job_result_many_request.py similarity index 87% rename from src/roe/_generated/models/agent_job_result_many_request_request.py rename to src/roe/_generated/models/agent_job_result_many_request.py index 87b6479..e53ad63 100644 --- a/src/roe/_generated/models/agent_job_result_many_request_request.py +++ b/src/roe/_generated/models/agent_job_result_many_request.py @@ -16,12 +16,12 @@ -T = TypeVar("T", bound="AgentJobResultManyRequestRequest") +T = TypeVar("T", bound="AgentJobResultManyRequest") @_attrs_define -class AgentJobResultManyRequestRequest: +class AgentJobResultManyRequest: """ Serializer for bulk agent job results request. Attributes: @@ -67,13 +67,13 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: job_ids.append(job_ids_item) - agent_job_result_many_request_request = cls( + agent_job_result_many_request = cls( job_ids=job_ids, ) - agent_job_result_many_request_request.additional_properties = d - return agent_job_result_many_request_request + agent_job_result_many_request.additional_properties = d + return agent_job_result_many_request @property def additional_keys(self) -> list[str]: diff --git a/src/roe/_generated/models/agent_job_single_status.py b/src/roe/_generated/models/agent_job_single_status.py new file mode 100644 index 0000000..1e886d2 --- /dev/null +++ b/src/roe/_generated/models/agent_job_single_status.py @@ -0,0 +1,94 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset + + + + + + +T = TypeVar("T", bound="AgentJobSingleStatus") + + + +@_attrs_define +class AgentJobSingleStatus: + """ + Attributes: + status (int): Status code. 0: PENDING, 1: STARTED, 2: RETRY, 3: SUCCESS, 4: FAILURE, 5: CANCELLED, 6: CACHED + timestamp (float): Unix timestamp in seconds (fractional) + error_message (str | Unset): Error message if status is RETRY or FAILURE + """ + + status: int + timestamp: float + error_message: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + status = self.status + + timestamp = self.timestamp + + error_message = self.error_message + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "status": status, + "timestamp": timestamp, + }) + if error_message is not UNSET: + field_dict["error_message"] = error_message + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + status = d.pop("status") + + timestamp = d.pop("timestamp") + + error_message = d.pop("error_message", UNSET) + + agent_job_single_status = cls( + status=status, + timestamp=timestamp, + error_message=error_message, + ) + + + agent_job_single_status.additional_properties = d + return agent_job_single_status + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agent_job_status.py b/src/roe/_generated/models/agent_job_status.py index 09e1771..25d021a 100644 --- a/src/roe/_generated/models/agent_job_status.py +++ b/src/roe/_generated/models/agent_job_status.py @@ -9,6 +9,10 @@ from ..types import UNSET, Unset from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime @@ -21,16 +25,24 @@ @_attrs_define class AgentJobStatus: - """ + """ Serializer for individual agent job status response. + Attributes: - status (int): Status code. 0: PENDING, 1: STARTED, 2: RETRY, 3: SUCCESS, 4: FAILURE, 5: CANCELLED, 6: CACHED - timestamp (int): Unix timestamp in seconds - error_message (str | Unset): Error message if status is RETRY or FAILURE + id (UUID): Agent job ID + status (int | None): Current status code (0=PENDING, 1=STARTED, 2=RETRY, 3=SUCCESS, 4=FAILURE, 5=CANCELLED, + 6=CACHED) + created_at (datetime.datetime | None): When the job was created + last_updated_at (datetime.datetime | None): When the job was last updated + timestamp (float | None | Unset): Unix timestamp in seconds from the latest status event + error_message (None | str | Unset): Error message if status is FAILURE or RETRY """ - status: int - timestamp: int - error_message: str | Unset = UNSET + id: UUID + status: int | None + created_at: datetime.datetime | None + last_updated_at: datetime.datetime | None + timestamp: float | None | Unset = UNSET + error_message: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -38,19 +50,46 @@ class AgentJobStatus: def to_dict(self) -> dict[str, Any]: + id = str(self.id) + + status: int | None status = self.status - timestamp = self.timestamp + created_at: None | str + if isinstance(self.created_at, datetime.datetime): + created_at = self.created_at.isoformat() + else: + created_at = self.created_at + + last_updated_at: None | str + if isinstance(self.last_updated_at, datetime.datetime): + last_updated_at = self.last_updated_at.isoformat() + else: + last_updated_at = self.last_updated_at + + timestamp: float | None | Unset + if isinstance(self.timestamp, Unset): + timestamp = UNSET + else: + timestamp = self.timestamp - error_message = self.error_message + error_message: None | str | Unset + if isinstance(self.error_message, Unset): + error_message = UNSET + else: + error_message = self.error_message field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update({ + "id": id, "status": status, - "timestamp": timestamp, + "created_at": created_at, + "last_updated_at": last_updated_at, }) + if timestamp is not UNSET: + field_dict["timestamp"] = timestamp if error_message is not UNSET: field_dict["error_message"] = error_message @@ -61,14 +100,80 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) - status = d.pop("status") + id = UUID(d.pop("id")) + + + + + def _parse_status(data: object) -> int | None: + if data is None: + return data + return cast(int | None, data) + + status = _parse_status(d.pop("status")) + + + def _parse_created_at(data: object) -> datetime.datetime | None: + if data is None: + return data + try: + if not isinstance(data, str): + raise TypeError() + created_at_type_0 = isoparse(data) + + + + return created_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.datetime | None, data) + + created_at = _parse_created_at(d.pop("created_at")) + + + def _parse_last_updated_at(data: object) -> datetime.datetime | None: + if data is None: + return data + try: + if not isinstance(data, str): + raise TypeError() + last_updated_at_type_0 = isoparse(data) + + + + return last_updated_at_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.datetime | None, data) + + last_updated_at = _parse_last_updated_at(d.pop("last_updated_at")) + + + def _parse_timestamp(data: object) -> float | None | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(float | None | Unset, data) + + timestamp = _parse_timestamp(d.pop("timestamp", UNSET)) + + + def _parse_error_message(data: object) -> None | str | Unset: + if data is None: + return data + if isinstance(data, Unset): + return data + return cast(None | str | Unset, data) - timestamp = d.pop("timestamp") + error_message = _parse_error_message(d.pop("error_message", UNSET)) - error_message = d.pop("error_message", UNSET) agent_job_status = cls( + id=id, status=status, + created_at=created_at, + last_updated_at=last_updated_at, timestamp=timestamp, error_message=error_message, ) diff --git a/src/roe/_generated/models/agent_job_status_many_request_request.py b/src/roe/_generated/models/agent_job_status_many_request.py similarity index 87% rename from src/roe/_generated/models/agent_job_status_many_request_request.py rename to src/roe/_generated/models/agent_job_status_many_request.py index 798a226..8630d5f 100644 --- a/src/roe/_generated/models/agent_job_status_many_request_request.py +++ b/src/roe/_generated/models/agent_job_status_many_request.py @@ -16,12 +16,12 @@ -T = TypeVar("T", bound="AgentJobStatusManyRequestRequest") +T = TypeVar("T", bound="AgentJobStatusManyRequest") @_attrs_define -class AgentJobStatusManyRequestRequest: +class AgentJobStatusManyRequest: """ Serializer for bulk agent job status request. Attributes: @@ -67,13 +67,13 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: job_ids.append(job_ids_item) - agent_job_status_many_request_request = cls( + agent_job_status_many_request = cls( job_ids=job_ids, ) - agent_job_status_many_request_request.additional_properties = d - return agent_job_status_many_request_request + agent_job_status_many_request.additional_properties = d + return agent_job_status_many_request @property def additional_keys(self) -> list[str]: diff --git a/src/roe/_generated/models/agent_run_async_many_request_request.py b/src/roe/_generated/models/agent_run_async_many_request.py similarity index 68% rename from src/roe/_generated/models/agent_run_async_many_request_request.py rename to src/roe/_generated/models/agent_run_async_many_request.py index 8708b97..4594435 100644 --- a/src/roe/_generated/models/agent_run_async_many_request_request.py +++ b/src/roe/_generated/models/agent_run_async_many_request.py @@ -11,25 +11,25 @@ from typing import cast if TYPE_CHECKING: - from ..models.agent_execution_request_request import AgentExecutionRequestRequest + from ..models.agent_execution_request import AgentExecutionRequest -T = TypeVar("T", bound="AgentRunAsyncManyRequestRequest") +T = TypeVar("T", bound="AgentRunAsyncManyRequest") @_attrs_define -class AgentRunAsyncManyRequestRequest: +class AgentRunAsyncManyRequest: """ Serializer for agent async many execution requests. Attributes: - inputs (list[AgentExecutionRequestRequest]): List of agent execution requests to process + inputs (list[AgentExecutionRequest]): List of agent execution requests to process """ - inputs: list[AgentExecutionRequestRequest] + inputs: list[AgentExecutionRequest] additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -37,7 +37,7 @@ class AgentRunAsyncManyRequestRequest: def to_dict(self) -> dict[str, Any]: - from ..models.agent_execution_request_request import AgentExecutionRequestRequest + from ..models.agent_execution_request import AgentExecutionRequest inputs = [] for inputs_item_data in self.inputs: inputs_item = inputs_item_data.to_dict() @@ -58,25 +58,25 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: - from ..models.agent_execution_request_request import AgentExecutionRequestRequest + from ..models.agent_execution_request import AgentExecutionRequest d = dict(src_dict) inputs = [] _inputs = d.pop("inputs") for inputs_item_data in (_inputs): - inputs_item = AgentExecutionRequestRequest.from_dict(inputs_item_data) + inputs_item = AgentExecutionRequest.from_dict(inputs_item_data) inputs.append(inputs_item) - agent_run_async_many_request_request = cls( + agent_run_async_many_request = cls( inputs=inputs, ) - agent_run_async_many_request_request.additional_properties = d - return agent_run_async_many_request_request + agent_run_async_many_request.additional_properties = d + return agent_run_async_many_request @property def additional_keys(self) -> list[str]: diff --git a/src/roe/_generated/models/agent_tag.py b/src/roe/_generated/models/agent_tag.py new file mode 100644 index 0000000..c9b6e0a --- /dev/null +++ b/src/roe/_generated/models/agent_tag.py @@ -0,0 +1,145 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..models.color_enum import ColorEnum +from dateutil.parser import isoparse +from typing import cast +from uuid import UUID +import datetime + + + + + + +T = TypeVar("T", bound="AgentTag") + + + +@_attrs_define +class AgentTag: + """ Serializer for AgentTag model + + Attributes: + id (UUID): + name (str): + color (ColorEnum): * `blue` - Blue + * `green` - Green + * `purple` - Purple + * `orange` - Orange + * `red` - Red + * `yellow` - Yellow + * `gray` - Gray + * `pink` - Pink + created_at (datetime.datetime): + creator (int | None): + usage_count (int): Count of agents using this tag + """ + + id: UUID + name: str + color: ColorEnum + created_at: datetime.datetime + creator: int | None + usage_count: int + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + id = str(self.id) + + name = self.name + + color = self.color.value + + created_at = self.created_at.isoformat() + + creator: int | None + creator = self.creator + + usage_count = self.usage_count + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "id": id, + "name": name, + "color": color, + "created_at": created_at, + "creator": creator, + "usage_count": usage_count, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + id = UUID(d.pop("id")) + + + + + name = d.pop("name") + + color = ColorEnum(d.pop("color")) + + + + + created_at = isoparse(d.pop("created_at")) + + + + + def _parse_creator(data: object) -> int | None: + if data is None: + return data + return cast(int | None, data) + + creator = _parse_creator(d.pop("creator")) + + + usage_count = d.pop("usage_count") + + agent_tag = cls( + id=id, + name=name, + color=color, + created_at=created_at, + creator=creator, + usage_count=usage_count, + ) + + + agent_tag.additional_properties = d + return agent_tag + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/patched_patched_agent_version_update_request_request.py b/src/roe/_generated/models/agent_version_update_request.py similarity index 84% rename from src/roe/_generated/models/patched_patched_agent_version_update_request_request.py rename to src/roe/_generated/models/agent_version_update_request.py index 614b9d7..7a0eb8b 100644 --- a/src/roe/_generated/models/patched_patched_agent_version_update_request_request.py +++ b/src/roe/_generated/models/agent_version_update_request.py @@ -15,12 +15,12 @@ -T = TypeVar("T", bound="PatchedPatchedAgentVersionUpdateRequestRequest") +T = TypeVar("T", bound="AgentVersionUpdateRequest") @_attrs_define -class PatchedPatchedAgentVersionUpdateRequestRequest: +class AgentVersionUpdateRequest: """ Attributes: version_name (str | Unset): New version name for the agent version. @@ -61,14 +61,14 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: description = d.pop("description", UNSET) - patched_patched_agent_version_update_request_request = cls( + agent_version_update_request = cls( version_name=version_name, description=description, ) - patched_patched_agent_version_update_request_request.additional_properties = d - return patched_patched_agent_version_update_request_request + agent_version_update_request.additional_properties = d + return agent_version_update_request @property def additional_keys(self) -> list[str]: diff --git a/src/roe/_generated/models/agents_create_response_400.py b/src/roe/_generated/models/agents_create_response_400.py new file mode 100644 index 0000000..c9700b5 --- /dev/null +++ b/src/roe/_generated/models/agents_create_response_400.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="AgentsCreateResponse400") + + + +@_attrs_define +class AgentsCreateResponse400: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + agents_create_response_400 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + agents_create_response_400.additional_properties = additional_properties + return agents_create_response_400 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_jobs_references_retrieve_response_400_type_1.py b/src/roe/_generated/models/agents_jobs_references_retrieve_response_400_type_1.py new file mode 100644 index 0000000..f25cfa8 --- /dev/null +++ b/src/roe/_generated/models/agents_jobs_references_retrieve_response_400_type_1.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="AgentsJobsReferencesRetrieveResponse400Type1") + + + +@_attrs_define +class AgentsJobsReferencesRetrieveResponse400Type1: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + agents_jobs_references_retrieve_response_400_type_1 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + agents_jobs_references_retrieve_response_400_type_1.additional_properties = additional_properties + return agents_jobs_references_retrieve_response_400_type_1 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_jobs_references_retrieve_response_400_type_2.py b/src/roe/_generated/models/agents_jobs_references_retrieve_response_400_type_2.py new file mode 100644 index 0000000..8564f03 --- /dev/null +++ b/src/roe/_generated/models/agents_jobs_references_retrieve_response_400_type_2.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="AgentsJobsReferencesRetrieveResponse400Type2") + + + +@_attrs_define +class AgentsJobsReferencesRetrieveResponse400Type2: + """ Hand-built application error body. + + Attributes: + error (str): + """ + + error: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + error = self.error + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + error = d.pop("error") + + agents_jobs_references_retrieve_response_400_type_2 = cls( + error=error, + ) + + + agents_jobs_references_retrieve_response_400_type_2.additional_properties = d + return agents_jobs_references_retrieve_response_400_type_2 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_jobs_results_create_response_400.py b/src/roe/_generated/models/agents_jobs_results_create_response_400.py new file mode 100644 index 0000000..9f29014 --- /dev/null +++ b/src/roe/_generated/models/agents_jobs_results_create_response_400.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="AgentsJobsResultsCreateResponse400") + + + +@_attrs_define +class AgentsJobsResultsCreateResponse400: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + agents_jobs_results_create_response_400 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + agents_jobs_results_create_response_400.additional_properties = additional_properties + return agents_jobs_results_create_response_400 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_jobs_statuses_create_response_400.py b/src/roe/_generated/models/agents_jobs_statuses_create_response_400.py new file mode 100644 index 0000000..f4fc833 --- /dev/null +++ b/src/roe/_generated/models/agents_jobs_statuses_create_response_400.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="AgentsJobsStatusesCreateResponse400") + + + +@_attrs_define +class AgentsJobsStatusesCreateResponse400: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + agents_jobs_statuses_create_response_400 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + agents_jobs_statuses_create_response_400.additional_properties = additional_properties + return agents_jobs_statuses_create_response_400 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_list_response_400.py b/src/roe/_generated/models/agents_list_response_400.py new file mode 100644 index 0000000..41ea9e3 --- /dev/null +++ b/src/roe/_generated/models/agents_list_response_400.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="AgentsListResponse400") + + + +@_attrs_define +class AgentsListResponse400: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + agents_list_response_400 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + agents_list_response_400.additional_properties = additional_properties + return agents_list_response_400 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_partial_update_response_400.py b/src/roe/_generated/models/agents_partial_update_response_400.py new file mode 100644 index 0000000..62faa45 --- /dev/null +++ b/src/roe/_generated/models/agents_partial_update_response_400.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="AgentsPartialUpdateResponse400") + + + +@_attrs_define +class AgentsPartialUpdateResponse400: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + agents_partial_update_response_400 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + agents_partial_update_response_400.additional_properties = additional_properties + return agents_partial_update_response_400 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_run_async_create_response_400_type_1.py b/src/roe/_generated/models/agents_run_async_create_response_400_type_1.py new file mode 100644 index 0000000..bcb0c21 --- /dev/null +++ b/src/roe/_generated/models/agents_run_async_create_response_400_type_1.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="AgentsRunAsyncCreateResponse400Type1") + + + +@_attrs_define +class AgentsRunAsyncCreateResponse400Type1: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + agents_run_async_create_response_400_type_1 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + agents_run_async_create_response_400_type_1.additional_properties = additional_properties + return agents_run_async_create_response_400_type_1 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_run_async_create_response_400_type_2.py b/src/roe/_generated/models/agents_run_async_create_response_400_type_2.py new file mode 100644 index 0000000..2a4ef98 --- /dev/null +++ b/src/roe/_generated/models/agents_run_async_create_response_400_type_2.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="AgentsRunAsyncCreateResponse400Type2") + + + +@_attrs_define +class AgentsRunAsyncCreateResponse400Type2: + """ Hand-built application error body. + + Attributes: + error (str): + """ + + error: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + error = self.error + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + error = d.pop("error") + + agents_run_async_create_response_400_type_2 = cls( + error=error, + ) + + + agents_run_async_create_response_400_type_2.additional_properties = d + return agents_run_async_create_response_400_type_2 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_run_async_many_response_400_type_1.py b/src/roe/_generated/models/agents_run_async_many_response_400_type_1.py new file mode 100644 index 0000000..92468b1 --- /dev/null +++ b/src/roe/_generated/models/agents_run_async_many_response_400_type_1.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="AgentsRunAsyncManyResponse400Type1") + + + +@_attrs_define +class AgentsRunAsyncManyResponse400Type1: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + agents_run_async_many_response_400_type_1 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + agents_run_async_many_response_400_type_1.additional_properties = additional_properties + return agents_run_async_many_response_400_type_1 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_run_async_many_response_400_type_2.py b/src/roe/_generated/models/agents_run_async_many_response_400_type_2.py new file mode 100644 index 0000000..70bf15d --- /dev/null +++ b/src/roe/_generated/models/agents_run_async_many_response_400_type_2.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="AgentsRunAsyncManyResponse400Type2") + + + +@_attrs_define +class AgentsRunAsyncManyResponse400Type2: + """ Hand-built application error body. + + Attributes: + error (str): + """ + + error: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + error = self.error + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + error = d.pop("error") + + agents_run_async_many_response_400_type_2 = cls( + error=error, + ) + + + agents_run_async_many_response_400_type_2.additional_properties = d + return agents_run_async_many_response_400_type_2 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_run_response_400_type_1.py b/src/roe/_generated/models/agents_run_response_400_type_1.py new file mode 100644 index 0000000..1d17039 --- /dev/null +++ b/src/roe/_generated/models/agents_run_response_400_type_1.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="AgentsRunResponse400Type1") + + + +@_attrs_define +class AgentsRunResponse400Type1: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + agents_run_response_400_type_1 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + agents_run_response_400_type_1.additional_properties = additional_properties + return agents_run_response_400_type_1 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_run_response_400_type_2.py b/src/roe/_generated/models/agents_run_response_400_type_2.py new file mode 100644 index 0000000..e8998a7 --- /dev/null +++ b/src/roe/_generated/models/agents_run_response_400_type_2.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="AgentsRunResponse400Type2") + + + +@_attrs_define +class AgentsRunResponse400Type2: + """ Hand-built application error body. + + Attributes: + error (str): + """ + + error: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + error = self.error + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + error = d.pop("error") + + agents_run_response_400_type_2 = cls( + error=error, + ) + + + agents_run_response_400_type_2.additional_properties = d + return agents_run_response_400_type_2 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_run_version_response_400_type_1.py b/src/roe/_generated/models/agents_run_version_response_400_type_1.py new file mode 100644 index 0000000..d3d81bb --- /dev/null +++ b/src/roe/_generated/models/agents_run_version_response_400_type_1.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="AgentsRunVersionResponse400Type1") + + + +@_attrs_define +class AgentsRunVersionResponse400Type1: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + agents_run_version_response_400_type_1 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + agents_run_version_response_400_type_1.additional_properties = additional_properties + return agents_run_version_response_400_type_1 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_run_version_response_400_type_2.py b/src/roe/_generated/models/agents_run_version_response_400_type_2.py new file mode 100644 index 0000000..1895454 --- /dev/null +++ b/src/roe/_generated/models/agents_run_version_response_400_type_2.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="AgentsRunVersionResponse400Type2") + + + +@_attrs_define +class AgentsRunVersionResponse400Type2: + """ Hand-built application error body. + + Attributes: + error (str): + """ + + error: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + error = self.error + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + error = d.pop("error") + + agents_run_version_response_400_type_2 = cls( + error=error, + ) + + + agents_run_version_response_400_type_2.additional_properties = d + return agents_run_version_response_400_type_2 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_run_versions_async_create_response_400_type_1.py b/src/roe/_generated/models/agents_run_versions_async_create_response_400_type_1.py new file mode 100644 index 0000000..a59337d --- /dev/null +++ b/src/roe/_generated/models/agents_run_versions_async_create_response_400_type_1.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="AgentsRunVersionsAsyncCreateResponse400Type1") + + + +@_attrs_define +class AgentsRunVersionsAsyncCreateResponse400Type1: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + agents_run_versions_async_create_response_400_type_1 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + agents_run_versions_async_create_response_400_type_1.additional_properties = additional_properties + return agents_run_versions_async_create_response_400_type_1 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_run_versions_async_create_response_400_type_2.py b/src/roe/_generated/models/agents_run_versions_async_create_response_400_type_2.py new file mode 100644 index 0000000..97300c6 --- /dev/null +++ b/src/roe/_generated/models/agents_run_versions_async_create_response_400_type_2.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="AgentsRunVersionsAsyncCreateResponse400Type2") + + + +@_attrs_define +class AgentsRunVersionsAsyncCreateResponse400Type2: + """ Hand-built application error body. + + Attributes: + error (str): + """ + + error: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + error = self.error + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + error = d.pop("error") + + agents_run_versions_async_create_response_400_type_2 = cls( + error=error, + ) + + + agents_run_versions_async_create_response_400_type_2.additional_properties = d + return agents_run_versions_async_create_response_400_type_2 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_update_response_400.py b/src/roe/_generated/models/agents_update_response_400.py new file mode 100644 index 0000000..54cc05a --- /dev/null +++ b/src/roe/_generated/models/agents_update_response_400.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="AgentsUpdateResponse400") + + + +@_attrs_define +class AgentsUpdateResponse400: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + agents_update_response_400 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + agents_update_response_400.additional_properties = additional_properties + return agents_update_response_400 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/agents_versions_create_response_400.py b/src/roe/_generated/models/agents_versions_create_response_400.py new file mode 100644 index 0000000..cdd3e46 --- /dev/null +++ b/src/roe/_generated/models/agents_versions_create_response_400.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="AgentsVersionsCreateResponse400") + + + +@_attrs_define +class AgentsVersionsCreateResponse400: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + agents_versions_create_response_400 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + agents_versions_create_response_400.additional_properties = additional_properties + return agents_versions_create_response_400 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/api_error_response.py b/src/roe/_generated/models/api_error_response.py new file mode 100644 index 0000000..c1bcc4b --- /dev/null +++ b/src/roe/_generated/models/api_error_response.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="ApiErrorResponse") + + + +@_attrs_define +class ApiErrorResponse: + """ Hand-built application error body: `Response({"error": ...}, 4xx/5xx)`. + + Attributes: + error (str): Application error message + """ + + error: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + error = self.error + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + error = d.pop("error") + + api_error_response = cls( + error=error, + ) + + + api_error_response.additional_properties = d + return api_error_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/base_agent.py b/src/roe/_generated/models/base_agent.py index f30d3b1..b563b3e 100644 --- a/src/roe/_generated/models/base_agent.py +++ b/src/roe/_generated/models/base_agent.py @@ -15,6 +15,7 @@ import datetime if TYPE_CHECKING: + from ..models.agent_tag import AgentTag from ..models.user_info import UserInfo @@ -39,9 +40,9 @@ class BaseAgent: engine_class_id (str): current_version_id (UUID): UUID of the current agent version. job_count (int | None): Job count from annotation, or None when not fetched (use /agents/job-stats/). - most_recent_job (str): + most_recent_job (datetime.datetime | None): engine_name (str): Engine Display Name - tags (str): + tags (list[AgentTag]): creator (None | Unset | UserInfo): """ @@ -54,9 +55,9 @@ class BaseAgent: engine_class_id: str current_version_id: UUID job_count: int | None - most_recent_job: str + most_recent_job: datetime.datetime | None engine_name: str - tags: str + tags: list[AgentTag] creator: None | Unset | UserInfo = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -65,6 +66,7 @@ class BaseAgent: def to_dict(self) -> dict[str, Any]: + from ..models.agent_tag import AgentTag from ..models.user_info import UserInfo id = str(self.id) @@ -85,11 +87,20 @@ def to_dict(self) -> dict[str, Any]: job_count: int | None job_count = self.job_count - most_recent_job = self.most_recent_job + most_recent_job: None | str + if isinstance(self.most_recent_job, datetime.datetime): + most_recent_job = self.most_recent_job.isoformat() + else: + most_recent_job = self.most_recent_job engine_name = self.engine_name - tags = self.tags + tags = [] + for tags_item_data in self.tags: + tags_item = tags_item_data.to_dict() + tags.append(tags_item) + + creator: dict[str, Any] | None | Unset if isinstance(self.creator, Unset): @@ -125,6 +136,7 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.agent_tag import AgentTag from ..models.user_info import UserInfo d = dict(src_dict) id = UUID(d.pop("id")) @@ -163,11 +175,35 @@ def _parse_job_count(data: object) -> int | None: job_count = _parse_job_count(d.pop("job_count")) - most_recent_job = d.pop("most_recent_job") + def _parse_most_recent_job(data: object) -> datetime.datetime | None: + if data is None: + return data + try: + if not isinstance(data, str): + raise TypeError() + most_recent_job_type_0 = isoparse(data) + + + + return most_recent_job_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(datetime.datetime | None, data) + + most_recent_job = _parse_most_recent_job(d.pop("most_recent_job")) + engine_name = d.pop("engine_name") - tags = d.pop("tags") + tags = [] + _tags = d.pop("tags") + for tags_item_data in (_tags): + tags_item = AgentTag.from_dict(tags_item_data) + + + + tags.append(tags_item) + def _parse_creator(data: object) -> None | Unset | UserInfo: if data is None: diff --git a/src/roe/_generated/models/color_enum.py b/src/roe/_generated/models/color_enum.py new file mode 100644 index 0000000..6af68ec --- /dev/null +++ b/src/roe/_generated/models/color_enum.py @@ -0,0 +1,14 @@ +from enum import Enum + +class ColorEnum(str, Enum): + BLUE = "blue" + GRAY = "gray" + GREEN = "green" + ORANGE = "orange" + PINK = "pink" + PURPLE = "purple" + RED = "red" + YELLOW = "yellow" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/roe/_generated/models/agents_run_async_many_response_200.py b/src/roe/_generated/models/connection_delete_error_response.py similarity index 71% rename from src/roe/_generated/models/agents_run_async_many_response_200.py rename to src/roe/_generated/models/connection_delete_error_response.py index 7ee263b..0d1a12e 100644 --- a/src/roe/_generated/models/agents_run_async_many_response_200.py +++ b/src/roe/_generated/models/connection_delete_error_response.py @@ -14,16 +14,18 @@ -T = TypeVar("T", bound="AgentsRunAsyncManyResponse200") +T = TypeVar("T", bound="ConnectionDeleteErrorResponse") @_attrs_define -class AgentsRunAsyncManyResponse200: - """ Unspecified response body - +class ConnectionDeleteErrorResponse: + """ + Attributes: + error (str): """ + error: str additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -31,9 +33,14 @@ class AgentsRunAsyncManyResponse200: def to_dict(self) -> dict[str, Any]: - + error = self.error + + field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + }) return field_dict @@ -42,12 +49,15 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) - agents_run_async_many_response_200 = cls( + error = d.pop("error") + + connection_delete_error_response = cls( + error=error, ) - agents_run_async_many_response_200.additional_properties = d - return agents_run_async_many_response_200 + connection_delete_error_response.additional_properties = d + return connection_delete_error_response @property def additional_keys(self) -> list[str]: diff --git a/src/roe/_generated/models/connection_request.py b/src/roe/_generated/models/connection_request.py deleted file mode 100644 index 4c7578e..0000000 --- a/src/roe/_generated/models/connection_request.py +++ /dev/null @@ -1,141 +0,0 @@ -from __future__ import annotations - -from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator - -from attrs import define as _attrs_define -from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..models.status_enum import StatusEnum -from ..types import UNSET, Unset -from uuid import UUID - - - - - - -T = TypeVar("T", bound="ConnectionRequest") - - - -@_attrs_define -class ConnectionRequest: - """ Serializer for Connection model. - Returns: - - config: Non-sensitive config from DB - - auth_config: Actual auth credentials from Secrets Manager (not the internal reference) - - Attributes: - organization (UUID): - connector_type (str): - name (str): - description (str | Unset): - config (Any | Unset): - status (StatusEnum | Unset): * `active` - Active - * `error` - Error - """ - - organization: UUID - connector_type: str - name: str - description: str | Unset = UNSET - config: Any | Unset = UNSET - status: StatusEnum | Unset = UNSET - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - - - def to_dict(self) -> dict[str, Any]: - organization = str(self.organization) - - connector_type = self.connector_type - - name = self.name - - description = self.description - - config = self.config - - status: str | Unset = UNSET - if not isinstance(self.status, Unset): - status = self.status.value - - - - field_dict: dict[str, Any] = {} - field_dict.update(self.additional_properties) - field_dict.update({ - "organization": organization, - "connector_type": connector_type, - "name": name, - }) - if description is not UNSET: - field_dict["description"] = description - if config is not UNSET: - field_dict["config"] = config - if status is not UNSET: - field_dict["status"] = status - - return field_dict - - - - @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: - d = dict(src_dict) - organization = UUID(d.pop("organization")) - - - - - connector_type = d.pop("connector_type") - - name = d.pop("name") - - description = d.pop("description", UNSET) - - config = d.pop("config", UNSET) - - _status = d.pop("status", UNSET) - status: StatusEnum | Unset - if isinstance(_status, Unset): - status = UNSET - else: - status = StatusEnum(_status) - - - - - connection_request = cls( - organization=organization, - connector_type=connector_type, - name=name, - description=description, - config=config, - status=status, - ) - - - connection_request.additional_properties = d - return connection_request - - @property - def additional_keys(self) -> list[str]: - return list(self.additional_properties.keys()) - - def __getitem__(self, key: str) -> Any: - return self.additional_properties[key] - - def __setitem__(self, key: str, value: Any) -> None: - self.additional_properties[key] = value - - def __delitem__(self, key: str) -> None: - del self.additional_properties[key] - - def __contains__(self, key: str) -> bool: - return key in self.additional_properties diff --git a/src/roe/_generated/models/connections_create_response_400_type_1.py b/src/roe/_generated/models/connections_create_response_400_type_1.py new file mode 100644 index 0000000..f1961ee --- /dev/null +++ b/src/roe/_generated/models/connections_create_response_400_type_1.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="ConnectionsCreateResponse400Type1") + + + +@_attrs_define +class ConnectionsCreateResponse400Type1: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + connections_create_response_400_type_1 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + connections_create_response_400_type_1.additional_properties = additional_properties + return connections_create_response_400_type_1 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connections_create_response_400_type_2.py b/src/roe/_generated/models/connections_create_response_400_type_2.py new file mode 100644 index 0000000..df7ebe1 --- /dev/null +++ b/src/roe/_generated/models/connections_create_response_400_type_2.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="ConnectionsCreateResponse400Type2") + + + +@_attrs_define +class ConnectionsCreateResponse400Type2: + """ Hand-built application error body. + + Attributes: + error (str): + """ + + error: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + error = self.error + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + error = d.pop("error") + + connections_create_response_400_type_2 = cls( + error=error, + ) + + + connections_create_response_400_type_2.additional_properties = d + return connections_create_response_400_type_2 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connections_list_response_400.py b/src/roe/_generated/models/connections_list_response_400.py new file mode 100644 index 0000000..5b98940 --- /dev/null +++ b/src/roe/_generated/models/connections_list_response_400.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="ConnectionsListResponse400") + + + +@_attrs_define +class ConnectionsListResponse400: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + connections_list_response_400 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + connections_list_response_400.additional_properties = additional_properties + return connections_list_response_400 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connections_partial_update_response_400_type_1.py b/src/roe/_generated/models/connections_partial_update_response_400_type_1.py new file mode 100644 index 0000000..d2fc900 --- /dev/null +++ b/src/roe/_generated/models/connections_partial_update_response_400_type_1.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="ConnectionsPartialUpdateResponse400Type1") + + + +@_attrs_define +class ConnectionsPartialUpdateResponse400Type1: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + connections_partial_update_response_400_type_1 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + connections_partial_update_response_400_type_1.additional_properties = additional_properties + return connections_partial_update_response_400_type_1 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connections_partial_update_response_400_type_2.py b/src/roe/_generated/models/connections_partial_update_response_400_type_2.py new file mode 100644 index 0000000..5fcd9df --- /dev/null +++ b/src/roe/_generated/models/connections_partial_update_response_400_type_2.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="ConnectionsPartialUpdateResponse400Type2") + + + +@_attrs_define +class ConnectionsPartialUpdateResponse400Type2: + """ Hand-built application error body. + + Attributes: + error (str): + """ + + error: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + error = self.error + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + error = d.pop("error") + + connections_partial_update_response_400_type_2 = cls( + error=error, + ) + + + connections_partial_update_response_400_type_2.additional_properties = d + return connections_partial_update_response_400_type_2 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connections_test_credentials_create_response_400_type_0.py b/src/roe/_generated/models/connections_test_credentials_create_response_400_type_0.py new file mode 100644 index 0000000..cd2f74a --- /dev/null +++ b/src/roe/_generated/models/connections_test_credentials_create_response_400_type_0.py @@ -0,0 +1,99 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from dateutil.parser import isoparse +from typing import cast +import datetime + + + + + + +T = TypeVar("T", bound="ConnectionsTestCredentialsCreateResponse400Type0") + + + +@_attrs_define +class ConnectionsTestCredentialsCreateResponse400Type0: + """ Credential validation or connection test failed (TestConnection result with success=false). + + Attributes: + success (bool): + message (str): + tested_at (datetime.datetime): + """ + + success: bool + message: str + tested_at: datetime.datetime + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + success = self.success + + message = self.message + + tested_at = self.tested_at.isoformat() + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "success": success, + "message": message, + "tested_at": tested_at, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + success = d.pop("success") + + message = d.pop("message") + + tested_at = isoparse(d.pop("tested_at")) + + + + + connections_test_credentials_create_response_400_type_0 = cls( + success=success, + message=message, + tested_at=tested_at, + ) + + + connections_test_credentials_create_response_400_type_0.additional_properties = d + return connections_test_credentials_create_response_400_type_0 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connections_test_credentials_create_response_400_type_1.py b/src/roe/_generated/models/connections_test_credentials_create_response_400_type_1.py new file mode 100644 index 0000000..9a237fb --- /dev/null +++ b/src/roe/_generated/models/connections_test_credentials_create_response_400_type_1.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="ConnectionsTestCredentialsCreateResponse400Type1") + + + +@_attrs_define +class ConnectionsTestCredentialsCreateResponse400Type1: + """ connector_type missing from the request body. + + Attributes: + error (str): + """ + + error: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + error = self.error + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + error = d.pop("error") + + connections_test_credentials_create_response_400_type_1 = cls( + error=error, + ) + + + connections_test_credentials_create_response_400_type_1.additional_properties = d + return connections_test_credentials_create_response_400_type_1 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connections_update_response_400_type_1.py b/src/roe/_generated/models/connections_update_response_400_type_1.py new file mode 100644 index 0000000..4cc1f21 --- /dev/null +++ b/src/roe/_generated/models/connections_update_response_400_type_1.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="ConnectionsUpdateResponse400Type1") + + + +@_attrs_define +class ConnectionsUpdateResponse400Type1: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + connections_update_response_400_type_1 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + connections_update_response_400_type_1.additional_properties = additional_properties + return connections_update_response_400_type_1 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connections_update_response_400_type_2.py b/src/roe/_generated/models/connections_update_response_400_type_2.py new file mode 100644 index 0000000..c3122c4 --- /dev/null +++ b/src/roe/_generated/models/connections_update_response_400_type_2.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="ConnectionsUpdateResponse400Type2") + + + +@_attrs_define +class ConnectionsUpdateResponse400Type2: + """ Hand-built application error body. + + Attributes: + error (str): + """ + + error: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + error = self.error + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + error = d.pop("error") + + connections_update_response_400_type_2 = cls( + error=error, + ) + + + connections_update_response_400_type_2.additional_properties = d + return connections_update_response_400_type_2 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/connector_type_enum.py b/src/roe/_generated/models/connector_type_enum.py index b2c4110..d1e2a52 100644 --- a/src/roe/_generated/models/connector_type_enum.py +++ b/src/roe/_generated/models/connector_type_enum.py @@ -3,6 +3,7 @@ class ConnectorTypeEnum(str, Enum): CHECKOUT_COM = "checkout_com" CUSTOM_API = "custom_api" + CUSTOM_MCP = "custom_mcp" GOOGLE_DRIVE = "google_drive" INTERCOM = "intercom" LEXIS_NEXIS = "lexis_nexis" diff --git a/src/roe/_generated/models/create_connection_request.py b/src/roe/_generated/models/create_connection_request.py index 95c1899..bfc68c5 100644 --- a/src/roe/_generated/models/create_connection_request.py +++ b/src/roe/_generated/models/create_connection_request.py @@ -46,6 +46,7 @@ class CreateConnectionRequest: * `plaid` - PLAID * `checkout_com` - CHECKOUT_COM * `socure` - SOCURE + * `custom_mcp` - CUSTOM_MCP name (str): config (CreateConnectionRequestConfig): description (str | Unset): diff --git a/src/roe/_generated/models/dependent_agent_info.py b/src/roe/_generated/models/dependent_agent_info.py new file mode 100644 index 0000000..f056e3d --- /dev/null +++ b/src/roe/_generated/models/dependent_agent_info.py @@ -0,0 +1,108 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from uuid import UUID + + + + + + +T = TypeVar("T", bound="DependentAgentInfo") + + + +@_attrs_define +class DependentAgentInfo: + """ An agent version that references a policy (see get_agents_using_policy). + + Attributes: + base_agent_id (UUID): + agent_name (str): + version_id (UUID): + version_name (str): + """ + + base_agent_id: UUID + agent_name: str + version_id: UUID + version_name: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + base_agent_id = str(self.base_agent_id) + + agent_name = self.agent_name + + version_id = str(self.version_id) + + version_name = self.version_name + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "base_agent_id": base_agent_id, + "agent_name": agent_name, + "version_id": version_id, + "version_name": version_name, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + base_agent_id = UUID(d.pop("base_agent_id")) + + + + + agent_name = d.pop("agent_name") + + version_id = UUID(d.pop("version_id")) + + + + + version_name = d.pop("version_name") + + dependent_agent_info = cls( + base_agent_id=base_agent_id, + agent_name=agent_name, + version_id=version_id, + version_name=version_name, + ) + + + dependent_agent_info.additional_properties = d + return dependent_agent_info + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/discovery_supported_models_list_response_400.py b/src/roe/_generated/models/discovery_supported_models_list_response_400.py new file mode 100644 index 0000000..f84fece --- /dev/null +++ b/src/roe/_generated/models/discovery_supported_models_list_response_400.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="DiscoverySupportedModelsListResponse400") + + + +@_attrs_define +class DiscoverySupportedModelsListResponse400: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + discovery_supported_models_list_response_400 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + discovery_supported_models_list_response_400.additional_properties = additional_properties + return discovery_supported_models_list_response_400 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/error_detail_response.py b/src/roe/_generated/models/error_detail_response.py new file mode 100644 index 0000000..8c6b489 --- /dev/null +++ b/src/roe/_generated/models/error_detail_response.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="ErrorDetailResponse") + + + +@_attrs_define +class ErrorDetailResponse: + """ DRF default error body: NotFound, PermissionDenied, Http404, etc. + + Attributes: + detail (str): Human-readable error detail + """ + + detail: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + detail = self.detail + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "detail": detail, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + detail = d.pop("detail") + + error_detail_response = cls( + detail=detail, + ) + + + error_detail_response.additional_properties = d + return error_detail_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/error_response.py b/src/roe/_generated/models/message_response.py similarity index 83% rename from src/roe/_generated/models/error_response.py rename to src/roe/_generated/models/message_response.py index 8cde6de..0683e3d 100644 --- a/src/roe/_generated/models/error_response.py +++ b/src/roe/_generated/models/message_response.py @@ -14,15 +14,16 @@ -T = TypeVar("T", bound="ErrorResponse") +T = TypeVar("T", bound="MessageResponse") @_attrs_define -class ErrorResponse: - """ +class MessageResponse: + """ Simple success acknowledgement body: `{"message": ...}`. + Attributes: - message (str): Error message + message (str): """ message: str @@ -51,13 +52,13 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) message = d.pop("message") - error_response = cls( + message_response = cls( message=message, ) - error_response.additional_properties = d - return error_response + message_response.additional_properties = d + return message_response @property def additional_keys(self) -> list[str]: diff --git a/src/roe/_generated/models/paginated_agent_job_result_item_list.py b/src/roe/_generated/models/paginated_agent_job_result_item_list.py deleted file mode 100644 index e6fc3de..0000000 --- a/src/roe/_generated/models/paginated_agent_job_result_item_list.py +++ /dev/null @@ -1,145 +0,0 @@ -from __future__ import annotations - -from collections.abc import Mapping -from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator - -from attrs import define as _attrs_define -from attrs import field as _attrs_field - -from ..types import UNSET, Unset - -from ..types import UNSET, Unset -from typing import cast - -if TYPE_CHECKING: - from ..models.agent_job_result_item import AgentJobResultItem - - - - - -T = TypeVar("T", bound="PaginatedAgentJobResultItemList") - - - -@_attrs_define -class PaginatedAgentJobResultItemList: - """ - Attributes: - count (int): Example: 123. - results (list[AgentJobResultItem]): - next_ (None | str | Unset): Example: http://api.example.org/accounts/?page=4. - previous (None | str | Unset): Example: http://api.example.org/accounts/?page=2. - """ - - count: int - results: list[AgentJobResultItem] - next_: None | str | Unset = UNSET - previous: None | str | Unset = UNSET - additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) - - - - - - def to_dict(self) -> dict[str, Any]: - from ..models.agent_job_result_item import AgentJobResultItem - count = self.count - - results = [] - for results_item_data in self.results: - results_item = results_item_data.to_dict() - results.append(results_item) - - - - next_: None | str | Unset - if isinstance(self.next_, Unset): - next_ = UNSET - else: - next_ = self.next_ - - previous: None | str | Unset - if isinstance(self.previous, Unset): - previous = UNSET - else: - previous = self.previous - - - field_dict: dict[str, Any] = {} - field_dict.update(self.additional_properties) - field_dict.update({ - "count": count, - "results": results, - }) - if next_ is not UNSET: - field_dict["next"] = next_ - if previous is not UNSET: - field_dict["previous"] = previous - - return field_dict - - - - @classmethod - def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: - from ..models.agent_job_result_item import AgentJobResultItem - d = dict(src_dict) - count = d.pop("count") - - results = [] - _results = d.pop("results") - for results_item_data in (_results): - results_item = AgentJobResultItem.from_dict(results_item_data) - - - - results.append(results_item) - - - def _parse_next_(data: object) -> None | str | Unset: - if data is None: - return data - if isinstance(data, Unset): - return data - return cast(None | str | Unset, data) - - next_ = _parse_next_(d.pop("next", UNSET)) - - - def _parse_previous(data: object) -> None | str | Unset: - if data is None: - return data - if isinstance(data, Unset): - return data - return cast(None | str | Unset, data) - - previous = _parse_previous(d.pop("previous", UNSET)) - - - paginated_agent_job_result_item_list = cls( - count=count, - results=results, - next_=next_, - previous=previous, - ) - - - paginated_agent_job_result_item_list.additional_properties = d - return paginated_agent_job_result_item_list - - @property - def additional_keys(self) -> list[str]: - return list(self.additional_properties.keys()) - - def __getitem__(self, key: str) -> Any: - return self.additional_properties[key] - - def __setitem__(self, key: str, value: Any) -> None: - self.additional_properties[key] = value - - def __delitem__(self, key: str) -> None: - del self.additional_properties[key] - - def __contains__(self, key: str) -> bool: - return key in self.additional_properties diff --git a/src/roe/_generated/models/agent_version_update_request_request.py b/src/roe/_generated/models/patched_agent_version_update_request.py similarity index 88% rename from src/roe/_generated/models/agent_version_update_request_request.py rename to src/roe/_generated/models/patched_agent_version_update_request.py index f8d23bb..77fedc7 100644 --- a/src/roe/_generated/models/agent_version_update_request_request.py +++ b/src/roe/_generated/models/patched_agent_version_update_request.py @@ -15,12 +15,12 @@ -T = TypeVar("T", bound="AgentVersionUpdateRequestRequest") +T = TypeVar("T", bound="PatchedAgentVersionUpdateRequest") @_attrs_define -class AgentVersionUpdateRequestRequest: +class PatchedAgentVersionUpdateRequest: """ Attributes: version_name (str | Unset): New version name for the agent version. @@ -61,14 +61,14 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: description = d.pop("description", UNSET) - agent_version_update_request_request = cls( + patched_agent_version_update_request = cls( version_name=version_name, description=description, ) - agent_version_update_request_request.additional_properties = d - return agent_version_update_request_request + patched_agent_version_update_request.additional_properties = d + return patched_agent_version_update_request @property def additional_keys(self) -> list[str]: diff --git a/src/roe/_generated/models/policies_create_response_400.py b/src/roe/_generated/models/policies_create_response_400.py new file mode 100644 index 0000000..c7938ce --- /dev/null +++ b/src/roe/_generated/models/policies_create_response_400.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="PoliciesCreateResponse400") + + + +@_attrs_define +class PoliciesCreateResponse400: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + policies_create_response_400 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + policies_create_response_400.additional_properties = additional_properties + return policies_create_response_400 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/policies_partial_update_response_400.py b/src/roe/_generated/models/policies_partial_update_response_400.py new file mode 100644 index 0000000..d822531 --- /dev/null +++ b/src/roe/_generated/models/policies_partial_update_response_400.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="PoliciesPartialUpdateResponse400") + + + +@_attrs_define +class PoliciesPartialUpdateResponse400: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + policies_partial_update_response_400 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + policies_partial_update_response_400.additional_properties = additional_properties + return policies_partial_update_response_400 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/policies_update_response_400.py b/src/roe/_generated/models/policies_update_response_400.py new file mode 100644 index 0000000..5697585 --- /dev/null +++ b/src/roe/_generated/models/policies_update_response_400.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="PoliciesUpdateResponse400") + + + +@_attrs_define +class PoliciesUpdateResponse400: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + policies_update_response_400 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + policies_update_response_400.additional_properties = additional_properties + return policies_update_response_400 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/policies_versions_create_response_400.py b/src/roe/_generated/models/policies_versions_create_response_400.py new file mode 100644 index 0000000..0d3d626 --- /dev/null +++ b/src/roe/_generated/models/policies_versions_create_response_400.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="PoliciesVersionsCreateResponse400") + + + +@_attrs_define +class PoliciesVersionsCreateResponse400: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + policies_versions_create_response_400 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + policies_versions_create_response_400.additional_properties = additional_properties + return policies_versions_create_response_400 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/policy_delete_conflict.py b/src/roe/_generated/models/policy_delete_conflict.py new file mode 100644 index 0000000..e0d88cc --- /dev/null +++ b/src/roe/_generated/models/policy_delete_conflict.py @@ -0,0 +1,103 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + +if TYPE_CHECKING: + from ..models.dependent_agent_info import DependentAgentInfo + + + + + +T = TypeVar("T", bound="PolicyDeleteConflict") + + + +@_attrs_define +class PolicyDeleteConflict: + """ 409 body when a policy cannot be deleted because agents reference it. + + Attributes: + error (str): + dependent_agents (list[DependentAgentInfo]): + """ + + error: str + dependent_agents: list[DependentAgentInfo] + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.dependent_agent_info import DependentAgentInfo + error = self.error + + dependent_agents = [] + for dependent_agents_item_data in self.dependent_agents: + dependent_agents_item = dependent_agents_item_data.to_dict() + dependent_agents.append(dependent_agents_item) + + + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + "dependent_agents": dependent_agents, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.dependent_agent_info import DependentAgentInfo + d = dict(src_dict) + error = d.pop("error") + + dependent_agents = [] + _dependent_agents = d.pop("dependent_agents") + for dependent_agents_item_data in (_dependent_agents): + dependent_agents_item = DependentAgentInfo.from_dict(dependent_agents_item_data) + + + + dependent_agents.append(dependent_agents_item) + + + policy_delete_conflict = cls( + error=error, + dependent_agents=dependent_agents, + ) + + + policy_delete_conflict.additional_properties = d + return policy_delete_conflict + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/policy_version.py b/src/roe/_generated/models/policy_version.py index e8a339d..2a77e2e 100644 --- a/src/roe/_generated/models/policy_version.py +++ b/src/roe/_generated/models/policy_version.py @@ -41,7 +41,7 @@ class PolicyVersion: updated_at (datetime.datetime): policy (Policy): Policy serializer created_by (PolicyVersionCreatedBy): Minimal user serializer for audit metadata on policy versions. - base_version_id (UUID): + base_version_id (None | UUID): """ id: UUID @@ -51,7 +51,7 @@ class PolicyVersion: updated_at: datetime.datetime policy: Policy created_by: PolicyVersionCreatedBy - base_version_id: UUID + base_version_id: None | UUID additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -75,7 +75,11 @@ def to_dict(self) -> dict[str, Any]: created_by = self.created_by.to_dict() - base_version_id = str(self.base_version_id) + base_version_id: None | str + if isinstance(self.base_version_id, UUID): + base_version_id = str(self.base_version_id) + else: + base_version_id = self.base_version_id field_dict: dict[str, Any] = {} @@ -129,10 +133,23 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: - base_version_id = UUID(d.pop("base_version_id")) + def _parse_base_version_id(data: object) -> None | UUID: + if data is None: + return data + try: + if not isinstance(data, str): + raise TypeError() + base_version_id_type_0 = UUID(data) + return base_version_id_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(None | UUID, data) + + base_version_id = _parse_base_version_id(d.pop("base_version_id")) + policy_version = cls( id=id, diff --git a/src/roe/_generated/models/qdrant_cleanup_error_response.py b/src/roe/_generated/models/qdrant_cleanup_error_response.py new file mode 100644 index 0000000..2fe6777 --- /dev/null +++ b/src/roe/_generated/models/qdrant_cleanup_error_response.py @@ -0,0 +1,89 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="QdrantCleanupErrorResponse") + + + +@_attrs_define +class QdrantCleanupErrorResponse: + """ 500 body when deleting an agent/version fails Qdrant collection cleanup. + + Attributes: + detail (str): Human-readable error detail + failed_collections (list[str]): Qdrant collections that could not be deleted + """ + + detail: str + failed_collections: list[str] + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + detail = self.detail + + failed_collections = self.failed_collections + + + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "detail": detail, + "failed_collections": failed_collections, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + detail = d.pop("detail") + + failed_collections = cast(list[str], d.pop("failed_collections")) + + + qdrant_cleanup_error_response = cls( + detail=detail, + failed_collections=failed_collections, + ) + + + qdrant_cleanup_error_response.additional_properties = d + return qdrant_cleanup_error_response + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/table_query_request_request.py b/src/roe/_generated/models/table_query_request.py similarity index 88% rename from src/roe/_generated/models/table_query_request_request.py rename to src/roe/_generated/models/table_query_request.py index f97ee60..575973d 100644 --- a/src/roe/_generated/models/table_query_request_request.py +++ b/src/roe/_generated/models/table_query_request.py @@ -15,12 +15,12 @@ -T = TypeVar("T", bound="TableQueryRequestRequest") +T = TypeVar("T", bound="TableQueryRequest") @_attrs_define -class TableQueryRequestRequest: +class TableQueryRequest: """ Request payload for running a public Roe table query. Attributes: @@ -61,14 +61,14 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: limit = d.pop("limit", UNSET) - table_query_request_request = cls( + table_query_request = cls( sql=sql, limit=limit, ) - table_query_request_request.additional_properties = d - return table_query_request_request + table_query_request.additional_properties = d + return table_query_request @property def additional_keys(self) -> list[str]: diff --git a/src/roe/_generated/models/table_query_result_response.py b/src/roe/_generated/models/table_query_result_response.py index 3958399..283c531 100644 --- a/src/roe/_generated/models/table_query_result_response.py +++ b/src/roe/_generated/models/table_query_result_response.py @@ -8,6 +8,7 @@ from ..types import UNSET, Unset +from ..models.table_query_status_enum import TableQueryStatusEnum from ..types import UNSET, Unset from typing import cast from uuid import UUID @@ -30,7 +31,12 @@ class TableQueryResultResponse: Attributes: table_query_id (UUID): - status (str): + status (TableQueryStatusEnum): * `PENDING` - PENDING + * `STARTED` - STARTED + * `RETRY` - RETRY + * `SUCCESS` - SUCCESS + * `FAILURE` - FAILURE + * `REVOKED` - REVOKED error (None | str | Unset): columns (list[TableQueryResultResponseColumnsItem] | Unset): rows (list[TableQueryResultResponseRowsItem] | Unset): Rows keyed by column name. When truncated is true, an @@ -44,7 +50,7 @@ class TableQueryResultResponse: """ table_query_id: UUID - status: str + status: TableQueryStatusEnum error: None | str | Unset = UNSET columns: list[TableQueryResultResponseColumnsItem] | Unset = UNSET rows: list[TableQueryResultResponseRowsItem] | Unset = UNSET @@ -62,7 +68,7 @@ def to_dict(self) -> dict[str, Any]: from ..models.table_query_result_response_rows_item import TableQueryResultResponseRowsItem table_query_id = str(self.table_query_id) - status = self.status + status = self.status.value error: None | str | Unset if isinstance(self.error, Unset): @@ -128,7 +134,10 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: - status = d.pop("status") + status = TableQueryStatusEnum(d.pop("status")) + + + def _parse_error(data: object) -> None | str | Unset: if data is None: diff --git a/src/roe/_generated/models/table_query_status_enum.py b/src/roe/_generated/models/table_query_status_enum.py new file mode 100644 index 0000000..d9a377b --- /dev/null +++ b/src/roe/_generated/models/table_query_status_enum.py @@ -0,0 +1,12 @@ +from enum import Enum + +class TableQueryStatusEnum(str, Enum): + FAILURE = "FAILURE" + PENDING = "PENDING" + RETRY = "RETRY" + REVOKED = "REVOKED" + STARTED = "STARTED" + SUCCESS = "SUCCESS" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/roe/_generated/models/table_query_submit_response.py b/src/roe/_generated/models/table_query_submit_response.py index 39596c3..8696e92 100644 --- a/src/roe/_generated/models/table_query_submit_response.py +++ b/src/roe/_generated/models/table_query_submit_response.py @@ -8,6 +8,7 @@ from ..types import UNSET, Unset +from ..models.table_query_status_enum import TableQueryStatusEnum from dateutil.parser import isoparse from typing import cast from uuid import UUID @@ -28,12 +29,17 @@ class TableQuerySubmitResponse: Attributes: table_query_id (UUID): - status (str): + status (TableQueryStatusEnum): * `PENDING` - PENDING + * `STARTED` - STARTED + * `RETRY` - RETRY + * `SUCCESS` - SUCCESS + * `FAILURE` - FAILURE + * `REVOKED` - REVOKED created_at (datetime.datetime): """ table_query_id: UUID - status: str + status: TableQueryStatusEnum created_at: datetime.datetime additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -44,7 +50,7 @@ class TableQuerySubmitResponse: def to_dict(self) -> dict[str, Any]: table_query_id = str(self.table_query_id) - status = self.status + status = self.status.value created_at = self.created_at.isoformat() @@ -69,7 +75,10 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: - status = d.pop("status") + status = TableQueryStatusEnum(d.pop("status")) + + + created_at = isoparse(d.pop("created_at")) diff --git a/src/roe/_generated/models/tables_preview_retrieve_response_400_type_1.py b/src/roe/_generated/models/tables_preview_retrieve_response_400_type_1.py new file mode 100644 index 0000000..5aee720 --- /dev/null +++ b/src/roe/_generated/models/tables_preview_retrieve_response_400_type_1.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="TablesPreviewRetrieveResponse400Type1") + + + +@_attrs_define +class TablesPreviewRetrieveResponse400Type1: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + tables_preview_retrieve_response_400_type_1 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + tables_preview_retrieve_response_400_type_1.additional_properties = additional_properties + return tables_preview_retrieve_response_400_type_1 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/tables_preview_retrieve_response_400_type_2.py b/src/roe/_generated/models/tables_preview_retrieve_response_400_type_2.py new file mode 100644 index 0000000..782ccbe --- /dev/null +++ b/src/roe/_generated/models/tables_preview_retrieve_response_400_type_2.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="TablesPreviewRetrieveResponse400Type2") + + + +@_attrs_define +class TablesPreviewRetrieveResponse400Type2: + """ Hand-built application error body. + + Attributes: + error (str): + """ + + error: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + error = self.error + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + error = d.pop("error") + + tables_preview_retrieve_response_400_type_2 = cls( + error=error, + ) + + + tables_preview_retrieve_response_400_type_2.additional_properties = d + return tables_preview_retrieve_response_400_type_2 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/tables_query_create_response_400.py b/src/roe/_generated/models/tables_query_create_response_400.py new file mode 100644 index 0000000..02624c9 --- /dev/null +++ b/src/roe/_generated/models/tables_query_create_response_400.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="TablesQueryCreateResponse400") + + + +@_attrs_define +class TablesQueryCreateResponse400: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + tables_query_create_response_400 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + tables_query_create_response_400.additional_properties = additional_properties + return tables_query_create_response_400 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/test_connection_credentials_request.py b/src/roe/_generated/models/test_connection_credentials_request.py index c5ebcc1..116f8d4 100644 --- a/src/roe/_generated/models/test_connection_credentials_request.py +++ b/src/roe/_generated/models/test_connection_credentials_request.py @@ -44,6 +44,7 @@ class TestConnectionCredentialsRequest: * `plaid` - PLAID * `checkout_com` - CHECKOUT_COM * `socure` - SOCURE + * `custom_mcp` - CUSTOM_MCP config (TestConnectionCredentialsRequestConfig): auth_config (TestConnectionCredentialsRequestAuthConfig | Unset): """ diff --git a/src/roe/_generated/models/update_connection.py b/src/roe/_generated/models/update_connection_request.py similarity index 72% rename from src/roe/_generated/models/update_connection.py rename to src/roe/_generated/models/update_connection_request.py index 2ed6dc6..7e7544f 100644 --- a/src/roe/_generated/models/update_connection.py +++ b/src/roe/_generated/models/update_connection_request.py @@ -12,19 +12,19 @@ from typing import cast if TYPE_CHECKING: - from ..models.update_connection_auth_config import UpdateConnectionAuthConfig - from ..models.update_connection_config import UpdateConnectionConfig + from ..models.update_connection_request_auth_config import UpdateConnectionRequestAuthConfig + from ..models.update_connection_request_config import UpdateConnectionRequestConfig -T = TypeVar("T", bound="UpdateConnection") +T = TypeVar("T", bound="UpdateConnectionRequest") @_attrs_define -class UpdateConnection: +class UpdateConnectionRequest: """ Serializer for updating connections. Cross-state Pydantic validation (config + auth) lives in the view's @@ -42,14 +42,14 @@ class UpdateConnection: Attributes: name (str | Unset): description (str | Unset): - config (UpdateConnectionConfig | Unset): - auth_config (UpdateConnectionAuthConfig | Unset): + config (UpdateConnectionRequestConfig | Unset): + auth_config (UpdateConnectionRequestAuthConfig | Unset): """ name: str | Unset = UNSET description: str | Unset = UNSET - config: UpdateConnectionConfig | Unset = UNSET - auth_config: UpdateConnectionAuthConfig | Unset = UNSET + config: UpdateConnectionRequestConfig | Unset = UNSET + auth_config: UpdateConnectionRequestAuthConfig | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -57,8 +57,8 @@ class UpdateConnection: def to_dict(self) -> dict[str, Any]: - from ..models.update_connection_auth_config import UpdateConnectionAuthConfig - from ..models.update_connection_config import UpdateConnectionConfig + from ..models.update_connection_request_auth_config import UpdateConnectionRequestAuthConfig + from ..models.update_connection_request_config import UpdateConnectionRequestConfig name = self.name description = self.description @@ -91,34 +91,34 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: - from ..models.update_connection_auth_config import UpdateConnectionAuthConfig - from ..models.update_connection_config import UpdateConnectionConfig + from ..models.update_connection_request_auth_config import UpdateConnectionRequestAuthConfig + from ..models.update_connection_request_config import UpdateConnectionRequestConfig d = dict(src_dict) name = d.pop("name", UNSET) description = d.pop("description", UNSET) _config = d.pop("config", UNSET) - config: UpdateConnectionConfig | Unset + config: UpdateConnectionRequestConfig | Unset if isinstance(_config, Unset): config = UNSET else: - config = UpdateConnectionConfig.from_dict(_config) + config = UpdateConnectionRequestConfig.from_dict(_config) _auth_config = d.pop("auth_config", UNSET) - auth_config: UpdateConnectionAuthConfig | Unset + auth_config: UpdateConnectionRequestAuthConfig | Unset if isinstance(_auth_config, Unset): auth_config = UNSET else: - auth_config = UpdateConnectionAuthConfig.from_dict(_auth_config) + auth_config = UpdateConnectionRequestAuthConfig.from_dict(_auth_config) - update_connection = cls( + update_connection_request = cls( name=name, description=description, config=config, @@ -126,8 +126,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: ) - update_connection.additional_properties = d - return update_connection + update_connection_request.additional_properties = d + return update_connection_request @property def additional_keys(self) -> list[str]: diff --git a/src/roe/_generated/models/update_connection_auth_config.py b/src/roe/_generated/models/update_connection_request_auth_config.py similarity index 81% rename from src/roe/_generated/models/update_connection_auth_config.py rename to src/roe/_generated/models/update_connection_request_auth_config.py index b9314ad..4fb0d27 100644 --- a/src/roe/_generated/models/update_connection_auth_config.py +++ b/src/roe/_generated/models/update_connection_request_auth_config.py @@ -14,12 +14,12 @@ -T = TypeVar("T", bound="UpdateConnectionAuthConfig") +T = TypeVar("T", bound="UpdateConnectionRequestAuthConfig") @_attrs_define -class UpdateConnectionAuthConfig: +class UpdateConnectionRequestAuthConfig: """ """ @@ -41,12 +41,12 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) - update_connection_auth_config = cls( + update_connection_request_auth_config = cls( ) - update_connection_auth_config.additional_properties = d - return update_connection_auth_config + update_connection_request_auth_config.additional_properties = d + return update_connection_request_auth_config @property def additional_keys(self) -> list[str]: diff --git a/src/roe/_generated/models/update_connection_config.py b/src/roe/_generated/models/update_connection_request_config.py similarity index 82% rename from src/roe/_generated/models/update_connection_config.py rename to src/roe/_generated/models/update_connection_request_config.py index 8c50fe6..8a9428d 100644 --- a/src/roe/_generated/models/update_connection_config.py +++ b/src/roe/_generated/models/update_connection_request_config.py @@ -14,12 +14,12 @@ -T = TypeVar("T", bound="UpdateConnectionConfig") +T = TypeVar("T", bound="UpdateConnectionRequestConfig") @_attrs_define -class UpdateConnectionConfig: +class UpdateConnectionRequestConfig: """ """ @@ -41,12 +41,12 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: d = dict(src_dict) - update_connection_config = cls( + update_connection_request_config = cls( ) - update_connection_config.additional_properties = d - return update_connection_config + update_connection_request_config.additional_properties = d + return update_connection_request_config @property def additional_keys(self) -> list[str]: diff --git a/src/roe/_generated/models/upload_table_response_400_type_1.py b/src/roe/_generated/models/upload_table_response_400_type_1.py new file mode 100644 index 0000000..a19101c --- /dev/null +++ b/src/roe/_generated/models/upload_table_response_400_type_1.py @@ -0,0 +1,93 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from typing import cast + + + + + + +T = TypeVar("T", bound="UploadTableResponse400Type1") + + + +@_attrs_define +class UploadTableResponse400Type1: + """ Validation failure: a map of field name to a list of error messages (DRF serializers) or a single message (e.g. + organization_id validation). + + """ + + additional_properties: dict[str, list[str] | str] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + + field_dict: dict[str, Any] = {} + for prop_name, prop in self.additional_properties.items(): + + if isinstance(prop, list): + field_dict[prop_name] = prop + + + else: + field_dict[prop_name] = prop + + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + upload_table_response_400_type_1 = cls( + ) + + + additional_properties = {} + for prop_name, prop_dict in d.items(): + def _parse_additional_property(data: object) -> list[str] | str: + try: + if not isinstance(data, list): + raise TypeError() + additional_property_type_0 = cast(list[str], data) + + return additional_property_type_0 + except (TypeError, ValueError, AttributeError, KeyError): + pass + return cast(list[str] | str, data) + + additional_property = _parse_additional_property(prop_dict) + + additional_properties[prop_name] = additional_property + + upload_table_response_400_type_1.additional_properties = additional_properties + return upload_table_response_400_type_1 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> list[str] | str: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: list[str] | str) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/upload_table_response_400_type_2.py b/src/roe/_generated/models/upload_table_response_400_type_2.py new file mode 100644 index 0000000..3d6083b --- /dev/null +++ b/src/roe/_generated/models/upload_table_response_400_type_2.py @@ -0,0 +1,77 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + + + + + + + +T = TypeVar("T", bound="UploadTableResponse400Type2") + + + +@_attrs_define +class UploadTableResponse400Type2: + """ Hand-built application error body. + + Attributes: + error (str): + """ + + error: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + error = self.error + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "error": error, + }) + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + error = d.pop("error") + + upload_table_response_400_type_2 = cls( + error=error, + ) + + + upload_table_response_400_type_2.additional_properties = d + return upload_table_response_400_type_2 + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/_generated/models/user.py b/src/roe/_generated/models/user.py new file mode 100644 index 0000000..bf8ceb9 --- /dev/null +++ b/src/roe/_generated/models/user.py @@ -0,0 +1,177 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +from ..types import UNSET, Unset +from dateutil.parser import isoparse +from typing import cast +import datetime + + + + + + +T = TypeVar("T", bound="User") + + + +@_attrs_define +class User: + """ + Attributes: + id (int): + email (str): + first_name (str): + last_name (str): + display_name (str): + date_joined (datetime.datetime): + is_staff (bool | Unset): Default: False. + is_superuser (bool | Unset): Default: False. + is_active (bool | Unset): Default: True. + is_first_login (bool | Unset): Default: True. + is_email_verified (bool | Unset): Default: False. + is_mfa_enabled (bool | Unset): Default: True. + """ + + id: int + email: str + first_name: str + last_name: str + display_name: str + date_joined: datetime.datetime + is_staff: bool | Unset = False + is_superuser: bool | Unset = False + is_active: bool | Unset = True + is_first_login: bool | Unset = True + is_email_verified: bool | Unset = False + is_mfa_enabled: bool | Unset = True + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + id = self.id + + email = self.email + + first_name = self.first_name + + last_name = self.last_name + + display_name = self.display_name + + date_joined = self.date_joined.isoformat() + + is_staff = self.is_staff + + is_superuser = self.is_superuser + + is_active = self.is_active + + is_first_login = self.is_first_login + + is_email_verified = self.is_email_verified + + is_mfa_enabled = self.is_mfa_enabled + + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({ + "id": id, + "email": email, + "first_name": first_name, + "last_name": last_name, + "display_name": display_name, + "date_joined": date_joined, + }) + if is_staff is not UNSET: + field_dict["is_staff"] = is_staff + if is_superuser is not UNSET: + field_dict["is_superuser"] = is_superuser + if is_active is not UNSET: + field_dict["is_active"] = is_active + if is_first_login is not UNSET: + field_dict["is_first_login"] = is_first_login + if is_email_verified is not UNSET: + field_dict["is_email_verified"] = is_email_verified + if is_mfa_enabled is not UNSET: + field_dict["is_mfa_enabled"] = is_mfa_enabled + + return field_dict + + + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + id = d.pop("id") + + email = d.pop("email") + + first_name = d.pop("first_name") + + last_name = d.pop("last_name") + + display_name = d.pop("display_name") + + date_joined = isoparse(d.pop("date_joined")) + + + + + is_staff = d.pop("is_staff", UNSET) + + is_superuser = d.pop("is_superuser", UNSET) + + is_active = d.pop("is_active", UNSET) + + is_first_login = d.pop("is_first_login", UNSET) + + is_email_verified = d.pop("is_email_verified", UNSET) + + is_mfa_enabled = d.pop("is_mfa_enabled", UNSET) + + user = cls( + id=id, + email=email, + first_name=first_name, + last_name=last_name, + display_name=display_name, + date_joined=date_joined, + is_staff=is_staff, + is_superuser=is_superuser, + is_active=is_active, + is_first_login=is_first_login, + is_email_verified=is_email_verified, + is_mfa_enabled=is_mfa_enabled, + ) + + + user.additional_properties = d + return user + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/src/roe/api/agents.py b/src/roe/api/agents.py index 122803c..457ba90 100644 --- a/src/roe/api/agents.py +++ b/src/roe/api/agents.py @@ -46,23 +46,23 @@ ) from roe._generated.client import AuthenticatedClient from roe._generated.models.agent_datum import AgentDatum -from roe._generated.models.agent_execution_request_request import ( - AgentExecutionRequestRequest, +from roe._generated.models.agent_execution_request import ( + AgentExecutionRequest, ) from roe._generated.models.agent_job_delete_data_response import ( AgentJobDeleteDataResponse, ) -from roe._generated.models.agent_job_result_many_request_request import ( - AgentJobResultManyRequestRequest, +from roe._generated.models.agent_job_result_many_request import ( + AgentJobResultManyRequest, ) from roe._generated.models.agent_job_result_item import AgentJobResultItem from roe._generated.models.agent_job_result_response import AgentJobResultResponse from roe._generated.models.agent_job_status import AgentJobStatus -from roe._generated.models.agent_job_status_many_request_request import ( - AgentJobStatusManyRequestRequest, +from roe._generated.models.agent_job_status_many_request import ( + AgentJobStatusManyRequest, ) -from roe._generated.models.agent_run_async_many_request_request import ( - AgentRunAsyncManyRequestRequest, +from roe._generated.models.agent_run_async_many_request import ( + AgentRunAsyncManyRequest, ) from roe._generated.models.agent_version import AgentVersion from roe._generated.models.agent_version_create_request import AgentVersionCreateRequest @@ -72,8 +72,8 @@ from roe._generated.models.patched_base_agent_update_request import ( PatchedBaseAgentUpdateRequest, ) -from roe._generated.models.patched_patched_agent_version_update_request_request import ( - PatchedPatchedAgentVersionUpdateRequestRequest, +from roe._generated.models.patched_agent_version_update_request import ( + PatchedAgentVersionUpdateRequest, ) from roe._generated.types import UNSET from roe.config import RoeConfig @@ -83,14 +83,14 @@ from roe.utils.generated_request import request_json, request_raw -def _build_aer(inputs: dict[str, Any]) -> AgentExecutionRequestRequest: - """Pack a free-form ``inputs`` dict into an ``AgentExecutionRequestRequest``. +def _build_aer(inputs: dict[str, Any]) -> AgentExecutionRequest: + """Pack a free-form ``inputs`` dict into an ``AgentExecutionRequest``. Used for the JSON-only batch endpoint. The model's fixed fields are ignored; everything goes through ``additional_properties`` so the ``to_dict()`` serializer emits a flat ``{key: value}`` shape. """ - body = AgentExecutionRequestRequest() + body = AgentExecutionRequest() for key, value in inputs.items(): body.additional_properties[key] = value return body @@ -186,7 +186,7 @@ def update( description: str | None = None, ) -> None: """Update an agent version via PATCH (partial update).""" - body = PatchedPatchedAgentVersionUpdateRequestRequest( + body = PatchedAgentVersionUpdateRequest( version_name=version_name if version_name is not None else UNSET, description=description if description is not None else UNSET, ) @@ -257,7 +257,7 @@ def retrieve_status_many(self, job_ids: list[str]) -> list[AgentJobStatus]: if not is_first_chunk: time.sleep(self._agents_api.config.batch_chunk_delay) is_first_chunk = False - body = AgentJobStatusManyRequestRequest( + body = AgentJobStatusManyRequest( job_ids=[UUID(str(job_id)) for job_id in chunk] ) resp = request_json( @@ -282,7 +282,7 @@ def retrieve_result_many( if not is_first_chunk: time.sleep(self._agents_api.config.batch_chunk_delay) is_first_chunk = False - body = AgentJobResultManyRequestRequest( + body = AgentJobResultManyRequest( job_ids=[UUID(str(job_id)) for job_id in chunk] ) response = request_raw( @@ -508,7 +508,7 @@ def run_many( if not is_first_chunk: time.sleep(self.config.batch_chunk_delay) is_first_chunk = False - body = AgentRunAsyncManyRequestRequest( + body = AgentRunAsyncManyRequest( inputs=[_build_aer(item) for item in chunk] ) if metadata is not None: diff --git a/src/roe/models/job.py b/src/roe/models/job.py index 58d61ce..d034c64 100644 --- a/src/roe/models/job.py +++ b/src/roe/models/job.py @@ -269,7 +269,10 @@ def retrieve_status(self) -> dict[str, AgentJobStatus]: cached = self._job_statuses.get(job_id) if cached is not None and cached["status"] in _TERMINAL_STATUSES: status_map[job_id] = AgentJobStatus( + id=UUID(str(job_id)), status=cached["status"], + created_at=None, + last_updated_at=None, timestamp=cached.get("timestamp", 0), error_message=cached["error_message"] if cached["error_message"] is not None @@ -289,7 +292,10 @@ def retrieve_status(self) -> dict[str, AgentJobStatus]: continue err = self._extract_error_message(status_item) status_map[job_id] = AgentJobStatus( + id=UUID(str(job_id)), status=stat_code, + created_at=None, + last_updated_at=None, timestamp=self._extract_timestamp(status_item), error_message=err if err is not None else _UNSET_SENTINEL(), ) diff --git a/src/roe/utils/_dynamic_call.py b/src/roe/utils/_dynamic_call.py index 5c54050..0f08891 100644 --- a/src/roe/utils/_dynamic_call.py +++ b/src/roe/utils/_dynamic_call.py @@ -1,6 +1,6 @@ """Multipart-bypass helper for the dynamic-input agent run endpoints. -`openapi-python-client`'s generated `AgentExecutionRequestRequest.to_multipart()` +`openapi-python-client`'s generated `AgentExecutionRequest.to_multipart()` encodes every dynamic input as `(None, str(prop).encode(), "text/plain")` — which silently sends a file's `repr` instead of its bytes. To send real multipart with the right MIME types we bypass the model and call the generated From 0d3046dd18e883380cf7ba8b071f37a99fc3a0a5 Mon Sep 17 00:00:00 2001 From: Jaden Fix Date: Thu, 11 Jun 2026 12:29:03 -0700 Subject: [PATCH 3/6] Bump SDK version to 1.1.0 --- pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 84184c2..a71a86a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "roe-ai" -version = "1.0.804" +version = "1.1.0" authors = [ { name = "Roe", email = "founders@roe-ai.com" }, ] diff --git a/uv.lock b/uv.lock index d54c440..3bb092b 100644 --- a/uv.lock +++ b/uv.lock @@ -454,7 +454,7 @@ wheels = [ [[package]] name = "roe-ai" -version = "1.0.804" +version = "1.1.0" source = { editable = "." } dependencies = [ { name = "attrs" }, From c195f5be290ff66758011640f4b571bfe198b836 Mon Sep 17 00:00:00 2001 From: Jaden Fix Date: Thu, 11 Jun 2026 14:20:31 -0700 Subject: [PATCH 4/6] Fix retrieve_status crash: parse AgentJobSingleStatus, not AgentJobStatus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The v1.1.0 regen repurposed AgentJobStatus into the batch-item shape with a required "id" field, but GET /v1/agents/jobs/{job_id}/status/ returns AgentJobSingleStatus ({status, timestamp, error_message?}) with no id. The hand-written wrapper still parsed with AgentJobStatus, so every retrieve_status() call — including Job.wait()/poll loops — crashed with KeyError: 'id'. Verified live against the local stack (56/56 SDK ops pass). Co-Authored-By: Claude Fable 5 --- src/roe/api/agents.py | 5 +++-- src/roe/models/job.py | 5 +++-- tests/unit/test_agents_wrapper_transport.py | 22 +++++++++++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/roe/api/agents.py b/src/roe/api/agents.py index 457ba90..77b1878 100644 --- a/src/roe/api/agents.py +++ b/src/roe/api/agents.py @@ -57,6 +57,7 @@ ) from roe._generated.models.agent_job_result_item import AgentJobResultItem from roe._generated.models.agent_job_result_response import AgentJobResultResponse +from roe._generated.models.agent_job_single_status import AgentJobSingleStatus from roe._generated.models.agent_job_status import AgentJobStatus from roe._generated.models.agent_job_status_many_request import ( AgentJobStatusManyRequest, @@ -230,14 +231,14 @@ def _iter_chunks(items, chunk_size: int): for i in range(0, len(items), chunk_size): yield items[i : i + chunk_size] - def retrieve_status(self, job_id: str) -> AgentJobStatus: + def retrieve_status(self, job_id: str) -> AgentJobSingleStatus: response = request_raw( self._raw, agents_jobs_status_retrieve, UUID(str(job_id)), organization_id=self._org_id, ) - return AgentJobStatus.from_dict(response.json()) + return AgentJobSingleStatus.from_dict(response.json()) def retrieve_result(self, job_id: str) -> AgentJobResultResponse: response = request_raw( diff --git a/src/roe/models/job.py b/src/roe/models/job.py index d034c64..ccbf228 100644 --- a/src/roe/models/job.py +++ b/src/roe/models/job.py @@ -14,6 +14,7 @@ from roe._generated.models.agent_job_result_item import AgentJobResultItem from roe._generated.models.agent_job_result_response import AgentJobResultResponse +from roe._generated.models.agent_job_single_status import AgentJobSingleStatus from roe._generated.models.agent_job_status import AgentJobStatus from roe.exceptions import NotFoundError, RoeAPIException @@ -136,8 +137,8 @@ def wait( time.sleep(interval) - def retrieve_status(self) -> AgentJobStatus: - """Generated ``AgentJobStatus`` for the job.""" + def retrieve_status(self) -> AgentJobSingleStatus: + """Generated ``AgentJobSingleStatus`` for the job.""" return self.agents_api.jobs.retrieve_status(self._job_id) def retrieve_result(self) -> AgentJobResultResponse: diff --git a/tests/unit/test_agents_wrapper_transport.py b/tests/unit/test_agents_wrapper_transport.py index 1034c5e..180fe63 100644 --- a/tests/unit/test_agents_wrapper_transport.py +++ b/tests/unit/test_agents_wrapper_transport.py @@ -54,3 +54,25 @@ def test_run_passes_idempotency_key_through_dynamic_wrapper(): assert kwargs["headers"]["Idempotency-Key"] == "idem-123" assert kwargs["headers"]["x-roe-skip-retry"] == "1" assert job.id == JOB_ID + + +def test_retrieve_status_parses_single_status_shape_without_id(): + # GET /v1/agents/jobs/{job_id}/status/ returns AgentJobSingleStatus + # ({status, timestamp, error_message?}) with no "id" field — parsing it + # with the batch AgentJobStatus model raises KeyError("id"). + api, _ = _api( + httpx.Response( + 200, + json={ + "status": 4, + "timestamp": 1781211849.964229, + "error_message": "boom", + }, + ) + ) + + status = api.jobs.retrieve_status(JOB_ID) + + assert status.status == 4 + assert status.timestamp == pytest.approx(1781211849.964229) + assert status.error_message == "boom" From 851a30ea4c74092eeeab8079fbb4065f07dcc83a Mon Sep 17 00:00:00 2001 From: Jaden Fix Date: Fri, 12 Jun 2026 10:04:57 -0700 Subject: [PATCH 5/6] docs: update release sync banner --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2ff91f4..541f3c5 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,10 @@ A Python SDK for the [Roe](https://www.roe-ai.com/) API. -> **v1.0.802** — Version synchronization across the public SDKs: roe-ai -> (Python), roe-typescript, and roe-golang. The public SDK packages now -> share a single 1.0.x patch counter, driven by the SDK OpenAPI spec. +> **v1.1.0** - Schema synchronization across the public SDKs: roe-ai +> (Python), roe-typescript, and roe-golang. This release is generated from +> SDK OpenAPI marker `1-0-83`, and all public package metadata is bumped to +> 1.1.0. > Python friendly wrappers are generated from `openapi/wrappers.yml`; > current generated facades include `client.discovery` and `client.tables`. From 08fe78fa8f5d26762bf3a62c9a79c4a37357449e Mon Sep 17 00:00:00 2001 From: Jaden Fix Date: Fri, 12 Jun 2026 10:06:43 -0700 Subject: [PATCH 6/6] chore: auto-sync README release banner --- README.md | 2 + scripts/generate_wrappers.py | 77 ++++++++++++++++++++++++++++++++---- 2 files changed, 72 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 541f3c5..9372872 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,14 @@ A Python SDK for the [Roe](https://www.roe-ai.com/) API. + > **v1.1.0** - Schema synchronization across the public SDKs: roe-ai > (Python), roe-typescript, and roe-golang. This release is generated from > SDK OpenAPI marker `1-0-83`, and all public package metadata is bumped to > 1.1.0. > Python friendly wrappers are generated from `openapi/wrappers.yml`; > current generated facades include `client.discovery` and `client.tables`. + > **v1.0.0** — The SDK delegates to OpenAPI-generated types and transports > (`roe._generated`); ergonomic wrappers on `client.agents` and diff --git a/scripts/generate_wrappers.py b/scripts/generate_wrappers.py index d779b88..76a6999 100644 --- a/scripts/generate_wrappers.py +++ b/scripts/generate_wrappers.py @@ -7,6 +7,11 @@ from ruamel.yaml import YAML +try: + import tomllib +except ModuleNotFoundError: # pragma: no cover - Python < 3.11 codegen envs + import tomli as tomllib + ROOT_DIR = Path(__file__).resolve().parents[1] CONTRACT_PATH = ROOT_DIR / "openapi" / "wrappers.yml" @@ -14,6 +19,8 @@ README_PATH = ROOT_DIR / "README.md" API_DIR = ROOT_DIR / "src" / "roe" / "api" REGISTRY_PATH = API_DIR / "_generated_registry.py" +README_BANNER_START = "" +README_BANNER_END = "" README_BLOCK_START = "" README_BLOCK_END = "" @@ -52,19 +59,74 @@ def _load_readme_block() -> str: return block.strip() -def _sync_readme_block() -> None: - block = _load_readme_block() - readme = README_PATH.read_text(encoding="utf-8") - replacement = f"{README_BLOCK_START}\n{block}\n{README_BLOCK_END}" +def _replace_marked_block( + readme: str, + *, + start_marker: str, + end_marker: str, + replacement: str, +) -> str: + block = f"{start_marker}\n{replacement.strip()}\n{end_marker}" pattern = re.compile( - rf"{re.escape(README_BLOCK_START)}.*?{re.escape(README_BLOCK_END)}", + rf"{re.escape(start_marker)}.*?{re.escape(end_marker)}", re.DOTALL, ) - updated, count = pattern.subn(replacement, readme, count=1) + updated, count = pattern.subn(block, readme, count=1) if count != 1: raise ValueError( - f"{README_PATH} must contain {README_BLOCK_START} and {README_BLOCK_END}" + f"{README_PATH} must contain {start_marker} and {end_marker}" ) + return updated + + +def _load_project_version() -> str: + data = tomllib.loads((ROOT_DIR / "pyproject.toml").read_text(encoding="utf-8")) + version = data.get("project", {}).get("version") + if not isinstance(version, str) or not version: + raise ValueError("pyproject.toml must contain project.version") + return version + + +def _load_release_marker() -> str: + marker = (ROOT_DIR / ".roe-main-release-version").read_text(encoding="utf-8").strip() + if not marker: + raise ValueError(".roe-main-release-version must not be empty") + return marker + + +def _render_release_banner() -> str: + version = _load_project_version() + marker = _load_release_marker() + return ( + f"> **v{version}** - Schema synchronization across the public SDKs: roe-ai\n" + f"> (Python), roe-typescript, and roe-golang. This release is generated from\n" + f"> SDK OpenAPI marker `{marker}`, and all public package metadata is bumped to\n" + f"> {version}.\n" + "> Python friendly wrappers are generated from `openapi/wrappers.yml`;\n" + "> current generated facades include `client.discovery` and `client.tables`." + ) + + +def _sync_readme_release_banner() -> None: + readme = README_PATH.read_text(encoding="utf-8") + updated = _replace_marked_block( + readme, + start_marker=README_BANNER_START, + end_marker=README_BANNER_END, + replacement=_render_release_banner(), + ) + README_PATH.write_text(updated, encoding="utf-8") + + +def _sync_readme_block() -> None: + block = _load_readme_block() + readme = README_PATH.read_text(encoding="utf-8") + updated = _replace_marked_block( + readme, + start_marker=README_BLOCK_START, + end_marker=README_BLOCK_END, + replacement=block, + ) README_PATH.write_text(updated, encoding="utf-8") @@ -358,6 +420,7 @@ def main() -> None: target.write_text(_render_api_module(api_name, spec)) REGISTRY_PATH.write_text(_render_registry(apis)) + _sync_readme_release_banner() _sync_readme_block() print( f"Generated {len(apis)} friendly API wrapper modules from "