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/README.md b/README.md index 2ff91f4..9372872 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,14 @@ 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`. + > **v1.0.0** — The SDK delegates to OpenAPI-generated types and transports > (`roe._generated`); ergonomic wrappers on `client.agents` and diff --git a/openapi/openapi.yml b/openapi/openapi.yml index e0e8a83..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,7 +578,8 @@ paths: application/json: schema: $ref: '#/components/schemas/AgentVersionCreateRequest' - required: true + security: + - apiKeyAuth: [] responses: '201': content: @@ -552,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: @@ -603,6 +668,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -614,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 @@ -658,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 @@ -710,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 @@ -757,6 +836,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '204': description: Agent version deleted successfully. @@ -764,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 @@ -802,6 +889,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -821,7 +910,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,33 +937,28 @@ 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: 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 @@ -882,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: @@ -898,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 @@ -923,6 +1082,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -951,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 @@ -1001,6 +1155,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] deprecated: true responses: '204': @@ -1009,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: @@ -1042,6 +1198,8 @@ paths: tags: - agents - sdk + security: + - apiKeyAuth: [] deprecated: true responses: '200': @@ -1054,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 @@ -1096,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: @@ -1112,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: @@ -1134,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 @@ -1177,8 +1344,10 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AgentJobStatusManyRequestRequest' + $ref: '#/components/schemas/AgentJobStatusManyRequest' required: true + security: + - apiKeyAuth: [] responses: '200': content: @@ -1192,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 @@ -1227,6 +1406,8 @@ paths: tags: - discovery - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -1234,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 @@ -1261,7 +1457,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AgentExecutionRequestRequest' + $ref: '#/components/schemas/AgentExecutionRequest' + security: + - apiKeyAuth: [] responses: '200': content: @@ -1275,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 @@ -1323,7 +1565,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AgentExecutionRequestRequest' + $ref: '#/components/schemas/AgentExecutionRequest' + security: + - apiKeyAuth: [] responses: '200': content: @@ -1338,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 @@ -1414,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: @@ -1436,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 @@ -1515,7 +1807,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AgentExecutionRequestRequest' + $ref: '#/components/schemas/AgentExecutionRequest' + security: + - apiKeyAuth: [] responses: '200': content: @@ -1529,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 @@ -1583,7 +1921,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AgentExecutionRequestRequest' + $ref: '#/components/schemas/AgentExecutionRequest' + security: + - apiKeyAuth: [] responses: '200': content: @@ -1598,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' + $ref: '#/components/schemas/ErrorDetailResponse' examples: - Example: - value: - error: Agent not found - description: Agent not found - '402': - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - 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 @@ -1657,6 +2019,8 @@ paths: tags: - discovery - sdk + security: + - apiKeyAuth: [] responses: '200': content: @@ -1664,17 +2028,23 @@ paths: schema: $ref: '#/components/schemas/AgentEngineTypeList' description: '' - /v1/policies/: + /v1/connections/: get: - operationId: policies_list - description: List all policies and create a new policy + operationId: connections_list + description: 'Public API: GET/POST /api/v1/connections/ - List/create connections.' parameters: - - name: ordering - required: false - in: query - description: Which field to use when ordering the results. + - 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 @@ -1687,49 +2057,111 @@ paths: description: Number of results to return per page. schema: type: integer - - name: search - required: false - in: query - description: A search term. - schema: - type: string - - name: organization_id - in: query - required: false + - in: query + name: search 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. + description: Search connections by name, description, or ID (case-insensitive) tags: - - policies + - connections - sdk + security: + - apiKeyAuth: [] responses: '200': content: application/json: schema: - $ref: '#/components/schemas/PaginatedPolicyList' + $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: policies_create - description: List all policies and create a new policy + operationId: connections_create + description: 'Public API: GET/POST /api/v1/connections/ - List/create connections.' tags: - - policies + - connections - sdk requestBody: content: application/json: schema: - $ref: '#/components/schemas/CreatePolicyRequest' + $ref: '#/components/schemas/CreateConnectionRequest' required: true + security: + - apiKeyAuth: [] responses: '201': content: application/json: schema: - $ref: '#/components/schemas/CreatePolicy' + $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}). + '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 @@ -1739,10 +2171,11 @@ paths: 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/policies/{id}/: + /v1/connections/{id}/: get: - operationId: policies_retrieve - description: Retrieve, update, or delete a single policy by ID + operationId: connections_retrieve + description: 'Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage + connection.' parameters: - in: path name: id @@ -1759,18 +2192,27 @@ paths: description: Organization ID. This is required for access control. It can be provided via query or request body depending on the endpoint. tags: - - policies + - connections - sdk + security: + - apiKeyAuth: [] responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Policy' + $ref: '#/components/schemas/Connection' description: '' + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + description: Connection not found. put: - operationId: policies_update - description: Retrieve, update, or delete a single policy by ID + operationId: connections_update + description: 'Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage + connection.' parameters: - in: path name: id @@ -1787,24 +2229,71 @@ paths: description: Organization ID. This is required for access control. It can be provided via query or request body depending on the endpoint. tags: - - policies + - connections - sdk requestBody: content: application/json: schema: - $ref: '#/components/schemas/UpdatePolicyRequest' - required: true + $ref: '#/components/schemas/UpdateConnectionRequest' + security: + - apiKeyAuth: [] responses: '200': content: application/json: schema: - $ref: '#/components/schemas/UpdatePolicy' + $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: policies_partial_update - description: Retrieve, update, or delete a single policy by ID + operationId: connections_partial_update + description: 'Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage + connection.' parameters: - in: path name: id @@ -1821,23 +2310,71 @@ paths: description: Organization ID. This is required for access control. It can be provided via query or request body depending on the endpoint. tags: - - policies + - connections - sdk requestBody: content: application/json: schema: - $ref: '#/components/schemas/PatchedUpdatePolicyRequest' + $ref: '#/components/schemas/PatchedUpdateConnectionRequest' + security: + - apiKeyAuth: [] responses: '200': content: application/json: schema: - $ref: '#/components/schemas/UpdatePolicy' + $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: policies_destroy - description: Retrieve, update, or delete a single policy by ID + operationId: connections_destroy + description: 'Public API: GET/PATCH/DELETE /api/v1/connections/{id}/ - Manage + connection.' parameters: - in: path name: id @@ -1854,11 +2391,459 @@ paths: description: Organization ID. This is required for access control. It can be provided via query or request body depending on the endpoint. tags: - - policies + - 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 + 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 + security: + - apiKeyAuth: [] + 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': + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorDetailResponse' + 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 + security: + - apiKeyAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TestConnection' + description: '' + '400': + content: + application/json: + schema: + 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 + description: 'Public API: GET /api/v1/connectors/ - List all connector types.' + tags: + - connectors + - sdk + security: + - apiKeyAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/ConnectorListResponse' + description: '' + /v1/connectors/{connector_type}/: + get: + operationId: connectors_retrieve_by_type + 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 + security: + - apiKeyAuth: [] + responses: + '200': + content: + application/json: + 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 + description: List all policies and create a new policy + parameters: + - name: ordering + required: false + in: query + description: Which field to use when ordering the results. + schema: + type: string + - 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 + - name: search + required: false + in: query + description: A search term. + schema: + type: string + - 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: + - policies + - sdk + security: + - apiKeyAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedPolicyList' + description: '' + post: + operationId: policies_create + description: List all policies and create a new policy + tags: + - policies + - sdk + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreatePolicyRequest' + required: true + security: + - apiKeyAuth: [] + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/CreatePolicy' + 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 + 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/policies/{id}/: + get: + operationId: policies_retrieve + description: Retrieve, update, or delete a single policy by ID + 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: + - policies + - sdk + security: + - apiKeyAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Policy' + 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 + 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: + - policies + - sdk + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdatePolicyRequest' + required: true + security: + - apiKeyAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/UpdatePolicy' + 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 + 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: + - policies + - sdk + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedUpdatePolicyRequest' + security: + - apiKeyAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/UpdatePolicy' + 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: + - 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: + - policies + - sdk + security: + - apiKeyAuth: [] + responses: + '204': + 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 @@ -1894,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 @@ -1929,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 @@ -1944,35 +2961,282 @@ paths: Used for nested URL pattern: /policies/{policy_id}/versions/{version_id}/ parameters: - in: path - name: policy_id - schema: - type: string - format: uuid - required: true - - in: path - name: version_id + name: policy_id + schema: + type: string + format: uuid + required: true + - in: path + name: version_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: + - policies + - sdk + security: + - apiKeyAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/PolicyVersion' + 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 + description: List Roe tables in the authenticated organization with column information. + summary: List Roe tables + tags: + - tables + - sdk + security: + - apiKeyAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TableListResponse' + description: '' + /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 + security: + - apiKeyAuth: [] + responses: + '204': + description: No response body + '400': + content: + application/json: + schema: + 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: + 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 + security: + - apiKeyAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TableDescribeResponse' + description: '' + '400': + content: + application/json: + schema: + 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: + 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 + security: + - apiKeyAuth: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TablePreviewResponse' + 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: 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: + 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/TableQueryRequest' + required: true + security: + - apiKeyAuth: [] + responses: + '202': + content: + application/json: + 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 + 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 - - 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: - - policies + - tables - sdk + security: + - apiKeyAuth: [] responses: '200': content: application/json: schema: - $ref: '#/components/schemas/PolicyVersion' + $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 @@ -1989,6 +3253,8 @@ paths: schema: $ref: '#/components/schemas/TableUploadRequest' required: true + security: + - apiKeyAuth: [] responses: '201': content: @@ -2000,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: @@ -2060,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: @@ -2095,6 +3401,7 @@ components: - key AgentJobDeleteDataResponse: type: object + description: Response payload of purge_agent_job_data (delete-data and :purgeData). properties: status: type: string @@ -2116,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: @@ -2198,7 +3509,7 @@ components: - output_tokens - result - status - AgentJobResultManyRequestRequest: + AgentJobResultManyRequest: type: object description: Serializer for bulk agent job results request. properties: @@ -2248,7 +3559,7 @@ components: - inputs - output_tokens - outputs - AgentJobStatus: + AgentJobSingleStatus: type: object properties: status: @@ -2256,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: @@ -2277,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 @@ -2371,10 +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. - required: - - engine_config - - input_definitions - AgentVersionUpdateRequestRequest: + AgentVersionUpdateRequest: type: object properties: version_name: @@ -2385,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) @@ -2430,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 @@ -2454,52 +3852,290 @@ components: - tags BaseAgentCreateRequest: type: object - description: Serializer for creating base agents with proper JSON field handling + description: Serializer for creating base agents with proper JSON field handling + properties: + name: + type: string + minLength: 1 + description: Name of the base agent. + engine_class_id: + type: string + minLength: 1 + description: Engine class ID for the agent. + organization_id: + type: string + format: uuid + 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 + description: Name of the first version. + description: + type: string + minLength: 1 + description: Description of the first version. + input_definitions: + description: Input definitions for the first version. + engine_config: + description: Engine configuration for the first version. + required: + - engine_class_id + - name + BaseAgentUpdateRequest: + type: object + description: Serializer for updating BaseAgent + properties: + name: + type: string + minLength: 1 + description: New name for the agent. Must not be empty if provided. + disable_cache: + type: boolean + description: Whether to disable job cache fetching for this agent. + 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: |- + 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 + ConnectionDeleteErrorResponse: + type: object + properties: + error: + type: string + required: + - error + 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 + 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 + - custom_mcp + 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 + * `custom_mcp` - CUSTOM_MCP + 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 - description: Name of the base agent. - engine_class_id: + maxLength: 250 + description: type: string - minLength: 1 - description: Engine class ID for the agent. + config: + type: object + additionalProperties: {} + auth_config: + type: object + additionalProperties: {} organization_id: - type: string + type: + - string + - 'null' format: uuid - description: Organization ID where the agent belongs. - version_name: - type: string - minLength: 1 - description: Name of the first version. - description: - type: string - minLength: 1 - description: Description of the first version. - input_definitions: - description: Input definitions for the first version. - engine_config: - description: Engine configuration for the first version. required: - - engine_class_id - - engine_config - - input_definitions + - config + - connector_type - name - - organization_id - BaseAgentUpdateRequest: - type: object - description: Serializer for updating BaseAgent - properties: - name: - type: string - minLength: 1 - description: New name for the agent. Must not be empty if provided. - disable_cache: - type: boolean - description: Whether to disable job cache fetching for this agent. - cache_failed_jobs: - type: boolean - description: Whether to cache failed jobs for this agent. CreatePolicy: type: object description: Serializer for creating a new policy with initial version @@ -2594,15 +4230,68 @@ components: description: ID of the version this was derived from required: - content - ErrorResponse: + 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 + 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 + ErrorDetailResponse: + type: object + description: 'DRF default error body: NotFound, PermissionDenied, Http404, etc.' + properties: + detail: + type: string + description: Human-readable error detail + required: + - detail + MessageResponse: + type: object + description: 'Simple success acknowledgement body: `{"message": ...}`.' properties: message: type: string - description: Error message required: - message - PaginatedAgentJobResultItemList: + PaginatedBaseAgentList: type: object required: - count @@ -2624,8 +4313,8 @@ components: results: type: array items: - $ref: '#/components/schemas/AgentJobResultItem' - PaginatedBaseAgentList: + $ref: '#/components/schemas/BaseAgent' + PaginatedConnectionListList: type: object required: - count @@ -2647,7 +4336,7 @@ components: results: type: array items: - $ref: '#/components/schemas/BaseAgent' + $ref: '#/components/schemas/ConnectionList' PaginatedPolicyList: type: object required: @@ -2694,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 @@ -2708,17 +4408,35 @@ components: cache_failed_jobs: type: boolean description: Whether to cache failed jobs for this agent. - PatchedPatchedAgentVersionUpdateRequestRequest: + 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: - version_name: + name: type: string minLength: 1 - description: New version name for the agent version. + maxLength: 250 description: type: string - minLength: 1 - description: New description for the agent version. + config: + type: object + additionalProperties: {} + auth_config: + type: object + additionalProperties: {} PatchedUpdatePolicyRequest: type: object description: Serializer for updating policy metadata (name, description) @@ -2767,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: |- @@ -2799,7 +4531,9 @@ components: - $ref: '#/components/schemas/PolicyVersionCreatedBy' readOnly: true base_version_id: - type: string + type: + - string + - 'null' format: uuid readOnly: true required: @@ -2830,6 +4564,30 @@ 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 + - error + type: string + description: |- + * `active` - Active + * `error` - Error SupportedLLMModel: type: object description: Serializer for tenant-agnostic supported LLM metadata. @@ -2892,6 +4650,193 @@ 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 + TableQueryRequest: + 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: + $ref: '#/components/schemas/TableQueryStatusEnum' + 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 + 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. + properties: + table_query_id: + type: string + format: uuid + status: + $ref: '#/components/schemas/TableQueryStatusEnum' + 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 +4853,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 +4882,65 @@ 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 + UpdateConnectionRequest: + 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: {} UpdatePolicy: type: object description: Serializer for updating policy metadata (name, description) @@ -2985,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: @@ -3009,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/pyproject.toml b/pyproject.toml index b482122..a71a86a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "roe-ai" -version = "1.0.803" +version = "1.1.0" authors = [ { name = "Roe", email = "founders@roe-ai.com" }, ] 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 " 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 1356ebc..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 @@ -20,7 +21,7 @@ def _get_kwargs( agent_id: UUID, *, - body: AgentVersionCreateRequest, + body: AgentVersionCreateRequest | Unset = UNSET, organization_id: UUID | Unset = UNSET, ) -> dict[str, Any]: @@ -46,7 +47,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" @@ -56,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()) @@ -65,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()) @@ -91,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, @@ -103,11 +106,11 @@ def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Res def sync_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentVersionCreateRequest, + 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. @@ -115,14 +118,14 @@ 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. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentVersion | ErrorResponse] + Response[AgentVersion | AgentsVersionsCreateResponse400 | ErrorDetailResponse] """ @@ -142,11 +145,11 @@ def sync_detailed( def sync( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentVersionCreateRequest, + 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. @@ -154,14 +157,14 @@ 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. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - AgentVersion | ErrorResponse + AgentVersion | AgentsVersionsCreateResponse400 | ErrorDetailResponse """ @@ -176,11 +179,11 @@ def sync( async def asyncio_detailed( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentVersionCreateRequest, + 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. @@ -188,14 +191,14 @@ 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. httpx.TimeoutException: If the request takes longer than Client.timeout. Returns: - Response[AgentVersion | ErrorResponse] + Response[AgentVersion | AgentsVersionsCreateResponse400 | ErrorDetailResponse] """ @@ -215,11 +218,11 @@ async def asyncio_detailed( async def asyncio( agent_id: UUID, *, - client: AuthenticatedClient | Client, - body: AgentVersionCreateRequest, + 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. @@ -227,14 +230,14 @@ 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. 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/__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..2f42f2f --- /dev/null +++ b/src/roe/_generated/api/connections/connections_create.py @@ -0,0 +1,250 @@ +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.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 ...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 | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse | None: + if response.status_code == 201: + response_201 = Connection.from_dict(response.json()) + + + + return response_201 + + if response.status_code == 400: + 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: + 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 | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse]: + 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, + body: CreateConnectionRequest, + organization_id: UUID | Unset = UNSET, + +) -> Response[Connection | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse]: + """ 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 | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse] + """ + + + 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, + body: CreateConnectionRequest, + organization_id: UUID | Unset = UNSET, + +) -> Connection | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse | 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 | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse + """ + + + return sync_detailed( + client=client, +body=body, +organization_id=organization_id, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: CreateConnectionRequest, + organization_id: UUID | Unset = UNSET, + +) -> Response[Connection | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse]: + """ 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 | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse] + """ + + + 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, + body: CreateConnectionRequest, + organization_id: UUID | Unset = UNSET, + +) -> Connection | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse | 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 | ConnectionsCreateResponse400Type1 | ConnectionsCreateResponse400Type2 | list[str] | DuplicateConnectionResponse + """ + + + 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..9f99685 --- /dev/null +++ b/src/roe/_generated/api/connections/connections_destroy.py @@ -0,0 +1,216 @@ +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_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 + + + +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 | ConnectionDeleteErrorResponse | ErrorDetailResponse | None: + if response.status_code == 204: + 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) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[Any | ConnectionDeleteErrorResponse | ErrorDetailResponse]: + 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, + organization_id: UUID | Unset = UNSET, + +) -> Response[Any | ConnectionDeleteErrorResponse | ErrorDetailResponse]: + """ 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 | ConnectionDeleteErrorResponse | ErrorDetailResponse] + """ + + + 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, + 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, + organization_id: UUID | Unset = UNSET, + +) -> Response[Any | ConnectionDeleteErrorResponse | ErrorDetailResponse]: + """ 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 | ConnectionDeleteErrorResponse | ErrorDetailResponse] + """ + + + 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, + 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 new file mode 100644 index 0000000..989274a --- /dev/null +++ b/src/roe/_generated/api/connections/connections_list.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.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 +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) -> ConnectionsListResponse400 | ErrorDetailResponse | PaginatedConnectionListList | None: + if response.status_code == 200: + response_200 = PaginatedConnectionListList.from_dict(response.json()) + + + + 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[ConnectionsListResponse400 | ErrorDetailResponse | 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, + connector_type: str | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + page: int | Unset = UNSET, + page_size: int | Unset = UNSET, + search: str | Unset = UNSET, + +) -> Response[ConnectionsListResponse400 | ErrorDetailResponse | 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[ConnectionsListResponse400 | ErrorDetailResponse | 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, + connector_type: str | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + page: int | Unset = UNSET, + page_size: int | Unset = UNSET, + search: str | Unset = UNSET, + +) -> ConnectionsListResponse400 | ErrorDetailResponse | 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: + ConnectionsListResponse400 | ErrorDetailResponse | 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, + connector_type: str | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + page: int | Unset = UNSET, + page_size: int | Unset = UNSET, + search: str | Unset = UNSET, + +) -> Response[ConnectionsListResponse400 | ErrorDetailResponse | 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[ConnectionsListResponse400 | ErrorDetailResponse | 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, + connector_type: str | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + page: int | Unset = UNSET, + page_size: int | Unset = UNSET, + search: str | Unset = UNSET, + +) -> ConnectionsListResponse400 | ErrorDetailResponse | 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: + ConnectionsListResponse400 | ErrorDetailResponse | 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..6409b47 --- /dev/null +++ b/src/roe/_generated/api/connections/connections_partial_update.py @@ -0,0 +1,317 @@ +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.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 ...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) -> Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse | None: + if response.status_code == 200: + 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[Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse]: + 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, + body: PatchedUpdateConnectionRequest | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> Response[Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse]: + """ 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[Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse] + """ + + + 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, + body: PatchedUpdateConnectionRequest | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse | 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: + Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse + """ + + + return sync_detailed( + id=id, +client=client, +body=body, +organization_id=organization_id, + + ).parsed + +async def asyncio_detailed( + id: UUID, + *, + client: AuthenticatedClient, + body: PatchedUpdateConnectionRequest | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> Response[Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse]: + """ 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[Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse] + """ + + + 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, + body: PatchedUpdateConnectionRequest | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse | 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: + Connection | ConnectionsPartialUpdateResponse400Type1 | ConnectionsPartialUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse + """ + + + 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..dbb7c6f --- /dev/null +++ b/src/roe/_generated/api/connections/connections_retrieve.py @@ -0,0 +1,205 @@ +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.error_detail_response import ErrorDetailResponse +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 | ErrorDetailResponse | None: + if response.status_code == 200: + response_200 = Connection.from_dict(response.json()) + + + + 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 | ErrorDetailResponse]: + 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, + organization_id: UUID | Unset = UNSET, + +) -> Response[Connection | ErrorDetailResponse]: + """ 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 | ErrorDetailResponse] + """ + + + 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, + organization_id: UUID | Unset = UNSET, + +) -> Connection | 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: + Connection | ErrorDetailResponse + """ + + + return sync_detailed( + id=id, +client=client, +organization_id=organization_id, + + ).parsed + +async def asyncio_detailed( + id: UUID, + *, + client: AuthenticatedClient, + organization_id: UUID | Unset = UNSET, + +) -> Response[Connection | ErrorDetailResponse]: + """ 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 | ErrorDetailResponse] + """ + + + 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, + organization_id: UUID | Unset = UNSET, + +) -> Connection | 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: + Connection | ErrorDetailResponse + """ + + + 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..b1f8bb9 --- /dev/null +++ b/src/roe/_generated/api/connections/connections_test_create.py @@ -0,0 +1,212 @@ +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_detail_response import ErrorDetailResponse +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) -> ErrorDetailResponse | 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 = 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[ErrorDetailResponse | 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, + organization_id: UUID | Unset = UNSET, + +) -> Response[ErrorDetailResponse | 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[ErrorDetailResponse | 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, + organization_id: UUID | Unset = UNSET, + +) -> ErrorDetailResponse | 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: + ErrorDetailResponse | TestConnection + """ + + + return sync_detailed( + id=id, +client=client, +organization_id=organization_id, + + ).parsed + +async def asyncio_detailed( + id: UUID, + *, + client: AuthenticatedClient, + organization_id: UUID | Unset = UNSET, + +) -> Response[ErrorDetailResponse | 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[ErrorDetailResponse | 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, + organization_id: UUID | Unset = UNSET, + +) -> ErrorDetailResponse | 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: + ErrorDetailResponse | 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..5bb0634 --- /dev/null +++ b/src/roe/_generated/api/connections/connections_test_credentials_create.py @@ -0,0 +1,209 @@ +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.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 + + + +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) -> ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | TestConnection | None: + if response.status_code == 200: + response_200 = TestConnection.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 400: + 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: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response(*, client: AuthenticatedClient | Client, response: httpx.Response) -> Response[ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | 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, + body: TestConnectionCredentialsRequest, + +) -> Response[ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | 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[ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | TestConnection] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: TestConnectionCredentialsRequest, + +) -> ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | 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: + ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | TestConnection + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: TestConnectionCredentialsRequest, + +) -> Response[ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | 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[ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | 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, + body: TestConnectionCredentialsRequest, + +) -> ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | 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: + ConnectionsTestCredentialsCreateResponse400Type0 | ConnectionsTestCredentialsCreateResponse400Type1 | 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..f4d8b52 --- /dev/null +++ b/src/roe/_generated/api/connections/connections_update.py @@ -0,0 +1,317 @@ +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.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 + + + +def _get_kwargs( + id: UUID, + *, + body: UpdateConnectionRequest | 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": "put", + "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) -> Connection | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse | None: + if response.status_code == 200: + response_200 = Connection.from_dict(response.json()) + + + + 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 | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse]: + 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, + body: UpdateConnectionRequest | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> 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 (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 | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse] + """ + + + 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, + body: UpdateConnectionRequest | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> 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 (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 | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse + """ + + + return sync_detailed( + id=id, +client=client, +body=body, +organization_id=organization_id, + + ).parsed + +async def asyncio_detailed( + id: UUID, + *, + client: AuthenticatedClient, + body: UpdateConnectionRequest | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> 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 (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 | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse] + """ + + + 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, + body: UpdateConnectionRequest | Unset = UNSET, + organization_id: UUID | Unset = UNSET, + +) -> 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 (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 | ConnectionsUpdateResponse400Type1 | ConnectionsUpdateResponse400Type2 | list[str] | DuplicateConnectionResponse | ErrorDetailResponse + """ + + + 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..e224e05 --- /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, + +) -> 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, + +) -> 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, + +) -> 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, + +) -> 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_by_type.py b/src/roe/_generated/api/connectors/connectors_retrieve_by_type.py new file mode 100644 index 0000000..733634a --- /dev/null +++ b/src/roe/_generated/api/connectors/connectors_retrieve_by_type.py @@ -0,0 +1,179 @@ +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 ...models.error_detail_response import ErrorDetailResponse +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 | ErrorDetailResponse | None: + if response.status_code == 200: + response_200 = ConnectorMetadata.from_dict(response.json()) + + + + 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 | ErrorDetailResponse]: + 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, + +) -> Response[ConnectorMetadata | ErrorDetailResponse]: + """ 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 | ErrorDetailResponse] + """ + + + 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, + +) -> ConnectorMetadata | ErrorDetailResponse | 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 | ErrorDetailResponse + """ + + + return sync_detailed( + connector_type=connector_type, +client=client, + + ).parsed + +async def asyncio_detailed( + connector_type: str, + *, + client: AuthenticatedClient, + +) -> Response[ConnectorMetadata | ErrorDetailResponse]: + """ 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 | ErrorDetailResponse] + """ + + + 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, + +) -> ConnectorMetadata | ErrorDetailResponse | 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 | ErrorDetailResponse + """ + + + return (await asyncio_detailed( + connector_type=connector_type, +client=client, + + )).parsed 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 new file mode 100644 index 0000000..d2983fd --- /dev/null +++ b/src/roe/_generated/api/tables/tables_describe_retrieve.py @@ -0,0 +1,200 @@ +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_detail_response import ErrorDetailResponse +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) -> ErrorDetailResponse | TableDescribeResponse | list[str] | None: + if response.status_code == 200: + response_200 = TableDescribeResponse.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 400: + response_400 = cast(list[str], 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[ErrorDetailResponse | TableDescribeResponse | list[str]]: + 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, + +) -> Response[ErrorDetailResponse | TableDescribeResponse | list[str]]: + """ 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[ErrorDetailResponse | TableDescribeResponse | list[str]] + """ + + + 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, + +) -> ErrorDetailResponse | TableDescribeResponse | list[str] | 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: + ErrorDetailResponse | TableDescribeResponse | list[str] + """ + + + return sync_detailed( + table_name=table_name, +client=client, + + ).parsed + +async def asyncio_detailed( + table_name: str, + *, + client: AuthenticatedClient, + +) -> Response[ErrorDetailResponse | TableDescribeResponse | list[str]]: + """ 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[ErrorDetailResponse | TableDescribeResponse | list[str]] + """ + + + 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, + +) -> ErrorDetailResponse | TableDescribeResponse | list[str] | 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: + ErrorDetailResponse | TableDescribeResponse | list[str] + """ + + + 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..c696722 --- /dev/null +++ b/src/roe/_generated/api/tables/tables_destroy.py @@ -0,0 +1,192 @@ +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_detail_response import ErrorDetailResponse +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 | ErrorDetailResponse | list[str] | None: + if response.status_code == 204: + response_204 = cast(Any, None) + return response_204 + + if response.status_code == 400: + response_400 = cast(list[str], 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[Any | ErrorDetailResponse | list[str]]: + 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, + +) -> Response[Any | ErrorDetailResponse | list[str]]: + """ 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 | ErrorDetailResponse | list[str]] + """ + + + 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, + +) -> Any | ErrorDetailResponse | list[str] | 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 | ErrorDetailResponse | list[str] + """ + + + return sync_detailed( + table_name=table_name, +client=client, + + ).parsed + +async def asyncio_detailed( + table_name: str, + *, + client: AuthenticatedClient, + +) -> Response[Any | ErrorDetailResponse | list[str]]: + """ 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 | ErrorDetailResponse | list[str]] + """ + + + 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, + +) -> Any | ErrorDetailResponse | list[str] | 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 | ErrorDetailResponse | list[str] + """ + + + 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..82a2a1e --- /dev/null +++ b/src/roe/_generated/api/tables/tables_list.py @@ -0,0 +1,158 @@ +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_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) -> TableListResponse | None: + if response.status_code == 200: + response_200 = TableListResponse.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[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, + +) -> Response[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[TableListResponse] + """ + + + kwargs = _get_kwargs( + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + +) -> 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: + TableListResponse + """ + + + return sync_detailed( + client=client, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + +) -> Response[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[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, + +) -> 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: + 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..0ba6c10 --- /dev/null +++ b/src/roe/_generated/api/tables/tables_preview_retrieve.py @@ -0,0 +1,247 @@ +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_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 + + + +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) -> ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2 | None: + if response.status_code == 200: + response_200 = TablePreviewResponse.from_dict(response.json()) + + + + return response_200 + + if response.status_code == 400: + 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 = 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[ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2]: + 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, + limit: int | Unset = 3, + +) -> 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 + 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[ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2] + """ + + + 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, + limit: int | Unset = 3, + +) -> 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 + 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: + ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2 + """ + + + return sync_detailed( + table_name=table_name, +client=client, +limit=limit, + + ).parsed + +async def asyncio_detailed( + table_name: str, + *, + client: AuthenticatedClient, + limit: int | Unset = 3, + +) -> 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 + 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[ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2] + """ + + + 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, + limit: int | Unset = 3, + +) -> 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 + 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: + ErrorDetailResponse | TablePreviewResponse | list[str] | TablesPreviewRetrieveResponse400Type1 | TablesPreviewRetrieveResponse400Type2 + """ + + + 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..474f45e --- /dev/null +++ b/src/roe/_generated/api/tables/tables_query_create.py @@ -0,0 +1,195 @@ +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 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: TableQueryRequest, + +) -> 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 | TablesQueryCreateResponse400 | None: + if response.status_code == 202: + response_202 = TableQuerySubmitResponse.from_dict(response.json()) + + + + 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 | TablesQueryCreateResponse400]: + 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, + body: TableQueryRequest, + +) -> Response[TableQuerySubmitResponse | TablesQueryCreateResponse400]: + """ Run a read-only Roe table query + + Run a read-only SQL query over public Roe tables. + + Args: + 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 | TablesQueryCreateResponse400] + """ + + + kwargs = _get_kwargs( + body=body, + + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + +def sync( + *, + client: AuthenticatedClient, + body: TableQueryRequest, + +) -> TableQuerySubmitResponse | TablesQueryCreateResponse400 | None: + """ Run a read-only Roe table query + + Run a read-only SQL query over public Roe tables. + + Args: + 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 | TablesQueryCreateResponse400 + """ + + + return sync_detailed( + client=client, +body=body, + + ).parsed + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: TableQueryRequest, + +) -> Response[TableQuerySubmitResponse | TablesQueryCreateResponse400]: + """ Run a read-only Roe table query + + Run a read-only SQL query over public Roe tables. + + Args: + 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 | TablesQueryCreateResponse400] + """ + + + 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, + body: TableQueryRequest, + +) -> TableQuerySubmitResponse | TablesQueryCreateResponse400 | None: + """ Run a read-only Roe table query + + Run a read-only SQL query over public Roe tables. + + Args: + 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 | TablesQueryCreateResponse400 + """ + + + 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..2ae4563 --- /dev/null +++ b/src/roe/_generated/api/tables/tables_query_result_retrieve.py @@ -0,0 +1,195 @@ +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_detail_response import ErrorDetailResponse +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) -> ErrorDetailResponse | TableQueryResultResponse | None: + if response.status_code == 200: + response_200 = TableQueryResultResponse.from_dict(response.json()) + + + + 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[ErrorDetailResponse | 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, + +) -> Response[ErrorDetailResponse | 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[ErrorDetailResponse | 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, + +) -> ErrorDetailResponse | 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: + ErrorDetailResponse | TableQueryResultResponse + """ + + + return sync_detailed( + table_query_id=table_query_id, +client=client, + + ).parsed + +async def asyncio_detailed( + table_query_id: UUID, + *, + client: AuthenticatedClient, + +) -> Response[ErrorDetailResponse | 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[ErrorDetailResponse | 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, + +) -> ErrorDetailResponse | 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: + ErrorDetailResponse | TableQueryResultResponse + """ + + + return (await asyncio_detailed( + table_query_id=table_query_id, +client=client, + + )).parsed 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 87132f6..64f8a46 100644 --- a/src/roe/_generated/models/__init__.py +++ b/src/roe/_generated/models/__init__.py @@ -3,85 +3,249 @@ 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 .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 +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 .error_response import ErrorResponse -from .paginated_agent_job_result_item_list import PaginatedAgentJobResultItemList +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_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 +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 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_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", + "ConnectionsCreateResponse400Type1", + "ConnectionsCreateResponse400Type2", + "ConnectionsListResponse400", + "ConnectionsPartialUpdateResponse400Type1", + "ConnectionsPartialUpdateResponse400Type2", + "ConnectionsTestCredentialsCreateResponse400Type0", + "ConnectionsTestCredentialsCreateResponse400Type1", + "ConnectionsUpdateResponse400Type1", + "ConnectionsUpdateResponse400Type2", + "ConnectorListResponse", + "ConnectorMetadata", + "ConnectorTypeEnum", + "CreateConnectionRequest", + "CreateConnectionRequestAuthConfig", + "CreateConnectionRequestConfig", "CreatePolicy", "CreatePolicyRequest", "CreatePolicyVersion", "CreatePolicyVersionRequest", - "ErrorResponse", - "PaginatedAgentJobResultItemList", + "DependentAgentInfo", + "DiscoverySupportedModelsListResponse400", + "DuplicateConnectionExisting", + "DuplicateConnectionResponse", + "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", + "Table", + "TableColumn", + "TableDescribeResponse", + "TableListResponse", + "TablePreviewResponse", + "TablePreviewResponseRowsItem", + "TableQueryRequest", + "TableQueryResultResponse", + "TableQueryResultResponseColumnsItem", + "TableQueryResultResponseRowsItem", + "TableQueryStatusEnum", + "TableQuerySubmitResponse", + "TablesPreviewRetrieveResponse400Type1", + "TablesPreviewRetrieveResponse400Type2", + "TablesQueryCreateResponse400", "TableUploadRequest", "TableUploadResponse", + "TestConnection", + "TestConnectionCredentialsRequest", + "TestConnectionCredentialsRequestAuthConfig", + "TestConnectionCredentialsRequestConfig", + "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/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/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/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/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/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/agents_run_async_many_response_200.py b/src/roe/_generated/models/connection_auth_config.py similarity index 79% rename from src/roe/_generated/models/agents_run_async_many_response_200.py rename to src/roe/_generated/models/connection_auth_config.py index 7ee263b..637d93c 100644 --- a/src/roe/_generated/models/agents_run_async_many_response_200.py +++ b/src/roe/_generated/models/connection_auth_config.py @@ -14,14 +14,13 @@ -T = TypeVar("T", bound="AgentsRunAsyncManyResponse200") +T = TypeVar("T", bound="ConnectionAuthConfig") @_attrs_define -class AgentsRunAsyncManyResponse200: - """ Unspecified response body - +class ConnectionAuthConfig: + """ """ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -42,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) - agents_run_async_many_response_200 = cls( + connection_auth_config = cls( ) - agents_run_async_many_response_200.additional_properties = d - return agents_run_async_many_response_200 + connection_auth_config.additional_properties = d + return connection_auth_config @property def additional_keys(self) -> list[str]: diff --git a/src/roe/_generated/models/connection_delete_error_response.py b/src/roe/_generated/models/connection_delete_error_response.py new file mode 100644 index 0000000..0d1a12e --- /dev/null +++ b/src/roe/_generated/models/connection_delete_error_response.py @@ -0,0 +1,76 @@ +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="ConnectionDeleteErrorResponse") + + + +@_attrs_define +class ConnectionDeleteErrorResponse: + """ + 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") + + connection_delete_error_response = cls( + error=error, + ) + + + connection_delete_error_response.additional_properties = d + return connection_delete_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/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/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_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..d1e2a52 --- /dev/null +++ b/src/roe/_generated/models/connector_type_enum.py @@ -0,0 +1,22 @@ +from enum import Enum + +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" + 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..bfc68c5 --- /dev/null +++ b/src/roe/_generated/models/create_connection_request.py @@ -0,0 +1,187 @@ +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 + * `custom_mcp` - CUSTOM_MCP + 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/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/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/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_connection_list_list.py similarity index 83% rename from src/roe/_generated/models/paginated_agent_job_result_item_list.py rename to src/roe/_generated/models/paginated_connection_list_list.py index e6fc3de..0f0b8f9 100644 --- a/src/roe/_generated/models/paginated_agent_job_result_item_list.py +++ b/src/roe/_generated/models/paginated_connection_list_list.py @@ -12,28 +12,28 @@ from typing import cast if TYPE_CHECKING: - from ..models.agent_job_result_item import AgentJobResultItem + from ..models.connection_list import ConnectionList -T = TypeVar("T", bound="PaginatedAgentJobResultItemList") +T = TypeVar("T", bound="PaginatedConnectionListList") @_attrs_define -class PaginatedAgentJobResultItemList: +class PaginatedConnectionListList: """ Attributes: count (int): Example: 123. - results (list[AgentJobResultItem]): + 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[AgentJobResultItem] + results: list[ConnectionList] next_: None | str | Unset = UNSET previous: None | str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) @@ -43,7 +43,7 @@ class PaginatedAgentJobResultItemList: def to_dict(self) -> dict[str, Any]: - from ..models.agent_job_result_item import AgentJobResultItem + from ..models.connection_list import ConnectionList count = self.count results = [] @@ -83,14 +83,14 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: - from ..models.agent_job_result_item import AgentJobResultItem + 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 = AgentJobResultItem.from_dict(results_item_data) + results_item = ConnectionList.from_dict(results_item_data) @@ -117,7 +117,7 @@ def _parse_previous(data: object) -> None | str | Unset: previous = _parse_previous(d.pop("previous", UNSET)) - paginated_agent_job_result_item_list = cls( + paginated_connection_list_list = cls( count=count, results=results, next_=next_, @@ -125,8 +125,8 @@ def _parse_previous(data: object) -> None | str | Unset: ) - paginated_agent_job_result_item_list.additional_properties = d - return paginated_agent_job_result_item_list + paginated_connection_list_list.additional_properties = d + return paginated_connection_list_list @property def additional_keys(self) -> list[str]: 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/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/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/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.py b/src/roe/_generated/models/table_query_request.py new file mode 100644 index 0000000..575973d --- /dev/null +++ b/src/roe/_generated/models/table_query_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="TableQueryRequest") + + + +@_attrs_define +class TableQueryRequest: + """ 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 = cls( + sql=sql, + limit=limit, + ) + + + table_query_request.additional_properties = d + return table_query_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..283c531 --- /dev/null +++ b/src/roe/_generated/models/table_query_result_response.py @@ -0,0 +1,211 @@ +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.table_query_status_enum import TableQueryStatusEnum +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 (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 + 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: TableQueryStatusEnum + 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.value + + 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 = TableQueryStatusEnum(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_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 new file mode 100644 index 0000000..8696e92 --- /dev/null +++ b/src/roe/_generated/models/table_query_submit_response.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 ..models.table_query_status_enum import TableQueryStatusEnum +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 (TableQueryStatusEnum): * `PENDING` - PENDING + * `STARTED` - STARTED + * `RETRY` - RETRY + * `SUCCESS` - SUCCESS + * `FAILURE` - FAILURE + * `REVOKED` - REVOKED + created_at (datetime.datetime): + """ + + table_query_id: UUID + status: TableQueryStatusEnum + 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.value + + 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 = TableQueryStatusEnum(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/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.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..116f8d4 --- /dev/null +++ b/src/roe/_generated/models/test_connection_credentials_request.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 ..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 + * `custom_mcp` - CUSTOM_MCP + 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_request.py b/src/roe/_generated/models/update_connection_request.py new file mode 100644 index 0000000..7e7544f --- /dev/null +++ b/src/roe/_generated/models/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.update_connection_request_auth_config import UpdateConnectionRequestAuthConfig + from ..models.update_connection_request_config import UpdateConnectionRequestConfig + + + + + +T = TypeVar("T", bound="UpdateConnectionRequest") + + + +@_attrs_define +class UpdateConnectionRequest: + """ 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 (UpdateConnectionRequestConfig | Unset): + auth_config (UpdateConnectionRequestAuthConfig | Unset): + """ + + name: str | Unset = UNSET + description: str | Unset = UNSET + config: UpdateConnectionRequestConfig | Unset = UNSET + auth_config: UpdateConnectionRequestAuthConfig | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + + + + + def to_dict(self) -> dict[str, Any]: + from ..models.update_connection_request_auth_config import UpdateConnectionRequestAuthConfig + from ..models.update_connection_request_config import UpdateConnectionRequestConfig + 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_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: UpdateConnectionRequestConfig | Unset + if isinstance(_config, Unset): + config = UNSET + else: + config = UpdateConnectionRequestConfig.from_dict(_config) + + + + + _auth_config = d.pop("auth_config", UNSET) + auth_config: UpdateConnectionRequestAuthConfig | Unset + if isinstance(_auth_config, Unset): + auth_config = UNSET + else: + auth_config = UpdateConnectionRequestAuthConfig.from_dict(_auth_config) + + + + + update_connection_request = cls( + name=name, + description=description, + config=config, + auth_config=auth_config, + ) + + + update_connection_request.additional_properties = d + return 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/update_connection_request_auth_config.py b/src/roe/_generated/models/update_connection_request_auth_config.py new file mode 100644 index 0000000..4fb0d27 --- /dev/null +++ b/src/roe/_generated/models/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="UpdateConnectionRequestAuthConfig") + + + +@_attrs_define +class UpdateConnectionRequestAuthConfig: + """ + """ + + 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_request_auth_config = cls( + ) + + + update_connection_request_auth_config.additional_properties = d + return 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/update_connection_request_config.py b/src/roe/_generated/models/update_connection_request_config.py new file mode 100644 index 0000000..8a9428d --- /dev/null +++ b/src/roe/_generated/models/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="UpdateConnectionRequestConfig") + + + +@_attrs_define +class UpdateConnectionRequestConfig: + """ + """ + + 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_request_config = cls( + ) + + + update_connection_request_config.additional_properties = d + return 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/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..77b1878 100644 --- a/src/roe/api/agents.py +++ b/src/roe/api/agents.py @@ -46,23 +46,24 @@ ) 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_single_status import AgentJobSingleStatus 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 +73,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 +84,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 +187,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, ) @@ -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( @@ -257,7 +258,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 +283,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 +509,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..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: @@ -269,7 +270,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 +293,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 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" diff --git a/uv.lock b/uv.lock index 5ce05b3..3bb092b 100644 --- a/uv.lock +++ b/uv.lock @@ -454,7 +454,7 @@ wheels = [ [[package]] name = "roe-ai" -version = "1.0.803" +version = "1.1.0" source = { editable = "." } dependencies = [ { name = "attrs" },