From 6ef1b5d885bafcd85e23eb9f715227698d31e1ac Mon Sep 17 00:00:00 2001 From: cloudpdf-sdk-bot Date: Thu, 20 Aug 2026 21:05:55 +0000 Subject: [PATCH] chore: generate CloudPDF Python SDK 3.0.0a6 --- .fern/metadata.json | 4 +- cloudpdf-generation.json | 8 +- pyproject.toml | 2 +- reference.md | 132 ++++++++++ src/cloudpdf/__init__.py | 75 ++++++ src/cloudpdf/core/client_wrapper.py | 4 +- src/cloudpdf/documents/__init__.py | 36 ++- src/cloudpdf/documents/client.py | 155 +++++++++++ src/cloudpdf/documents/raw_client.py | 240 ++++++++++++++++++ src/cloudpdf/documents/types/__init__.py | 32 ++- ...ocuments_import_from_request_dedup_mode.py | 5 + .../documents_import_from_request_expected.py | 24 ++ .../documents_import_from_request_mode.py | 5 + .../documents_import_from_request_source.py | 48 ++++ ...s_import_from_request_source_connection.py | 25 ++ ...ocuments_import_from_request_source_url.py | 19 ++ src/cloudpdf/errors/__init__.py | 3 + src/cloudpdf/errors/bad_gateway_error.py | 11 + src/cloudpdf/types/__init__.py | 52 ++++ .../types/documents_import_from200response.py | 22 ++ ...cuments_import_from200response_document.py | 53 ++++ ...s_import_from200response_document_state.py | 7 + ...rom200response_document_thumbnail_state.py | 7 + .../documents_import_from200response_tag.py | 5 + .../types/documents_import_from202response.py | 22 ++ ...cuments_import_from202response_document.py | 53 ++++ ...s_import_from202response_document_state.py | 7 + ...rom202response_document_thumbnail_state.py | 7 + .../documents_import_from202response_tag.py | 5 + .../types/documents_import_from400response.py | 20 ++ .../documents_import_from400response_error.py | 20 ++ .../types/documents_import_from403response.py | 20 ++ .../documents_import_from403response_error.py | 20 ++ .../types/documents_import_from502response.py | 20 ++ .../documents_import_from502response_error.py | 20 ++ 35 files changed, 1176 insertions(+), 12 deletions(-) create mode 100644 src/cloudpdf/documents/types/documents_import_from_request_dedup_mode.py create mode 100644 src/cloudpdf/documents/types/documents_import_from_request_expected.py create mode 100644 src/cloudpdf/documents/types/documents_import_from_request_mode.py create mode 100644 src/cloudpdf/documents/types/documents_import_from_request_source.py create mode 100644 src/cloudpdf/documents/types/documents_import_from_request_source_connection.py create mode 100644 src/cloudpdf/documents/types/documents_import_from_request_source_url.py create mode 100644 src/cloudpdf/errors/bad_gateway_error.py create mode 100644 src/cloudpdf/types/documents_import_from200response.py create mode 100644 src/cloudpdf/types/documents_import_from200response_document.py create mode 100644 src/cloudpdf/types/documents_import_from200response_document_state.py create mode 100644 src/cloudpdf/types/documents_import_from200response_document_thumbnail_state.py create mode 100644 src/cloudpdf/types/documents_import_from200response_tag.py create mode 100644 src/cloudpdf/types/documents_import_from202response.py create mode 100644 src/cloudpdf/types/documents_import_from202response_document.py create mode 100644 src/cloudpdf/types/documents_import_from202response_document_state.py create mode 100644 src/cloudpdf/types/documents_import_from202response_document_thumbnail_state.py create mode 100644 src/cloudpdf/types/documents_import_from202response_tag.py create mode 100644 src/cloudpdf/types/documents_import_from400response.py create mode 100644 src/cloudpdf/types/documents_import_from400response_error.py create mode 100644 src/cloudpdf/types/documents_import_from403response.py create mode 100644 src/cloudpdf/types/documents_import_from403response_error.py create mode 100644 src/cloudpdf/types/documents_import_from502response.py create mode 100644 src/cloudpdf/types/documents_import_from502response_error.py diff --git a/.fern/metadata.json b/.fern/metadata.json index 61665a7..3588711 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -7,9 +7,9 @@ "client_class_name": "CloudPDFClient", "environment_class_name": "CloudPDFEnvironment" }, - "originGitCommit": "81e6a2097d2997ef713a3013668e5eae0e748575", + "originGitCommit": "32635f40577b214f6a6b3189a2271425c3a574fd", "originGitCommitIsDirty": false, "invokedBy": "ci", - "requestedVersion": "3.0.0a5", + "requestedVersion": "3.0.0a6", "ciProvider": "github" } \ No newline at end of file diff --git a/cloudpdf-generation.json b/cloudpdf-generation.json index fdf024d..5129077 100644 --- a/cloudpdf-generation.json +++ b/cloudpdf-generation.json @@ -1,12 +1,12 @@ { "language": "python", - "canonicalVersion": "3.0.0-next.5", - "sdkVersion": "3.0.0a5", + "canonicalVersion": "3.0.0-next.6", + "sdkVersion": "3.0.0a6", "source": { "repository": "embedpdf/embed-pdf-viewer", "openapi": "cloudpdf/contract/openapi.json", - "openapiSha256": "e86b3f1766a77c28cb782a6513b5a86998668cd4e688e5b5ac27342e58637cd7", - "gitCommit": "81e6a2097d2997ef713a3013668e5eae0e748575", + "openapiSha256": "b3e236a932673e27e05825352e1bc3675369d7505040bf7d7760e542aae8d38d", + "gitCommit": "32635f40577b214f6a6b3189a2271425c3a574fd", "gitCommitIsDirty": false }, "fern": { diff --git a/pyproject.toml b/pyproject.toml index 9814a2e..7e16fc0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ dynamic = ["version"] [tool.poetry] name = "cloudpdf" -version = "3.0.0a5" +version = "3.0.0a6" description = "The official Python SDK for the CloudPDF API." readme = "README.md" authors = ["CloudPDF "] diff --git a/reference.md b/reference.md index 3e84ff3..8aa1755 100644 --- a/reference.md +++ b/reference.md @@ -1983,6 +1983,138 @@ client.documents.upload_proxy( + + + + +
client.documents.import_from(...) -> DocumentsImportFrom200Response +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Default mode is synchronous and bounded: the response returns only after the transfer verified and committed (or failed). mode=async (connection sources only) answers 202 immediately and an in-process worker performs the transfer with leased, fenced retries; poll the document until ready/failed. The deployment import policy gates scheme, network range, and size; sources must declare a length. CloudPDF copies and owns the bytes — the source is never referenced in place. A 502 marks a retryable upstream failure: retry with the same idempotencyKey to resume the same document. URL sources are capabilities and never echoed back. Connection sources name operator-registered storage (bucket/prefix scope, allowed credential classes, and tenant bindings are deployment configuration); `revision` is provider-interpreted (S3 VersionId, GCS generation, Azure version id). +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from cloudpdf import CloudPDFClient +from cloudpdf.documents import DocumentsImportFromRequestSource_Url + +client = CloudPDFClient( + token="", + base_url="https://yourhost.com/path/to/api", +) + +client.documents.import_from( + tenant_id="tenantId", + source=DocumentsImportFromRequestSource_Url( + url="url", + ), +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**tenant_id:** `str` + +
+
+ +
+
+ +**source:** `DocumentsImportFromRequestSource` + +
+
+ +
+
+ +**expected:** `typing.Optional[DocumentsImportFromRequestExpected]` + +
+
+ +
+
+ +**metadata:** `typing.Optional[typing.Dict[str, typing.Any]]` + +
+
+ +
+
+ +**idempotency_key:** `typing.Optional[str]` + +
+
+ +
+
+ +**dedup_mode:** `typing.Optional[DocumentsImportFromRequestDedupMode]` + +
+
+ +
+
+ +**doc_id:** `typing.Optional[str]` + +
+
+ +
+
+ +**mode:** `typing.Optional[DocumentsImportFromRequestMode]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
diff --git a/src/cloudpdf/__init__.py b/src/cloudpdf/__init__.py index e82ea86..422f2ab 100644 --- a/src/cloudpdf/__init__.py +++ b/src/cloudpdf/__init__.py @@ -2089,6 +2089,22 @@ DocumentsGet403ResponseError, DocumentsGet404Response, DocumentsGet404ResponseError, + DocumentsImportFrom200Response, + DocumentsImportFrom200ResponseDocument, + DocumentsImportFrom200ResponseDocumentState, + DocumentsImportFrom200ResponseDocumentThumbnailState, + DocumentsImportFrom200ResponseTag, + DocumentsImportFrom202Response, + DocumentsImportFrom202ResponseDocument, + DocumentsImportFrom202ResponseDocumentState, + DocumentsImportFrom202ResponseDocumentThumbnailState, + DocumentsImportFrom202ResponseTag, + DocumentsImportFrom400Response, + DocumentsImportFrom400ResponseError, + DocumentsImportFrom403Response, + DocumentsImportFrom403ResponseError, + DocumentsImportFrom502Response, + DocumentsImportFrom502ResponseError, DocumentsInit200Response, DocumentsInit200ResponseCreated, DocumentsInit200ResponseCreatedDocument, @@ -2218,6 +2234,7 @@ TokensRevokeResponseError, ) from .errors import ( + BadGatewayError, BadRequestError, ConflictError, ForbiddenError, @@ -2229,6 +2246,14 @@ from ._default_clients import DefaultAioHttpClient, DefaultAsyncHttpxClient from .client import AsyncCloudPDFClient, CloudPDFClient from .documents import ( + DocumentsImportFromRequestDedupMode, + DocumentsImportFromRequestExpected, + DocumentsImportFromRequestMode, + DocumentsImportFromRequestSource, + DocumentsImportFromRequestSourceConnection, + DocumentsImportFromRequestSourceUrl, + DocumentsImportFromRequestSource_Connection, + DocumentsImportFromRequestSource_Url, DocumentsInitRequestDedupMode, DocumentsInitRequestUploadPreference, ListDocumentsRequestState, @@ -2238,6 +2263,7 @@ "AdminErrorPayload": ".types", "AdminErrorPayloadError": ".types", "AsyncCloudPDFClient": ".client", + "BadGatewayError": ".errors", "BadRequestError": ".errors", "CloudPDFClient": ".client", "ConflictError": ".errors", @@ -4323,6 +4349,30 @@ "DocumentsGet403ResponseError": ".types", "DocumentsGet404Response": ".types", "DocumentsGet404ResponseError": ".types", + "DocumentsImportFrom200Response": ".types", + "DocumentsImportFrom200ResponseDocument": ".types", + "DocumentsImportFrom200ResponseDocumentState": ".types", + "DocumentsImportFrom200ResponseDocumentThumbnailState": ".types", + "DocumentsImportFrom200ResponseTag": ".types", + "DocumentsImportFrom202Response": ".types", + "DocumentsImportFrom202ResponseDocument": ".types", + "DocumentsImportFrom202ResponseDocumentState": ".types", + "DocumentsImportFrom202ResponseDocumentThumbnailState": ".types", + "DocumentsImportFrom202ResponseTag": ".types", + "DocumentsImportFrom400Response": ".types", + "DocumentsImportFrom400ResponseError": ".types", + "DocumentsImportFrom403Response": ".types", + "DocumentsImportFrom403ResponseError": ".types", + "DocumentsImportFrom502Response": ".types", + "DocumentsImportFrom502ResponseError": ".types", + "DocumentsImportFromRequestDedupMode": ".documents", + "DocumentsImportFromRequestExpected": ".documents", + "DocumentsImportFromRequestMode": ".documents", + "DocumentsImportFromRequestSource": ".documents", + "DocumentsImportFromRequestSourceConnection": ".documents", + "DocumentsImportFromRequestSourceUrl": ".documents", + "DocumentsImportFromRequestSource_Connection": ".documents", + "DocumentsImportFromRequestSource_Url": ".documents", "DocumentsInit200Response": ".types", "DocumentsInit200ResponseCreated": ".types", "DocumentsInit200ResponseCreatedDocument": ".types", @@ -4492,6 +4542,7 @@ def __dir__(): "AdminErrorPayload", "AdminErrorPayloadError", "AsyncCloudPDFClient", + "BadGatewayError", "BadRequestError", "CloudPDFClient", "ConflictError", @@ -6577,6 +6628,30 @@ def __dir__(): "DocumentsGet403ResponseError", "DocumentsGet404Response", "DocumentsGet404ResponseError", + "DocumentsImportFrom200Response", + "DocumentsImportFrom200ResponseDocument", + "DocumentsImportFrom200ResponseDocumentState", + "DocumentsImportFrom200ResponseDocumentThumbnailState", + "DocumentsImportFrom200ResponseTag", + "DocumentsImportFrom202Response", + "DocumentsImportFrom202ResponseDocument", + "DocumentsImportFrom202ResponseDocumentState", + "DocumentsImportFrom202ResponseDocumentThumbnailState", + "DocumentsImportFrom202ResponseTag", + "DocumentsImportFrom400Response", + "DocumentsImportFrom400ResponseError", + "DocumentsImportFrom403Response", + "DocumentsImportFrom403ResponseError", + "DocumentsImportFrom502Response", + "DocumentsImportFrom502ResponseError", + "DocumentsImportFromRequestDedupMode", + "DocumentsImportFromRequestExpected", + "DocumentsImportFromRequestMode", + "DocumentsImportFromRequestSource", + "DocumentsImportFromRequestSourceConnection", + "DocumentsImportFromRequestSourceUrl", + "DocumentsImportFromRequestSource_Connection", + "DocumentsImportFromRequestSource_Url", "DocumentsInit200Response", "DocumentsInit200ResponseCreated", "DocumentsInit200ResponseCreatedDocument", diff --git a/src/cloudpdf/core/client_wrapper.py b/src/cloudpdf/core/client_wrapper.py index cc48743..84bc498 100644 --- a/src/cloudpdf/core/client_wrapper.py +++ b/src/cloudpdf/core/client_wrapper.py @@ -33,12 +33,12 @@ def get_headers(self) -> typing.Dict[str, str]: import platform headers: typing.Dict[str, str] = { - "User-Agent": "cloudpdf/3.0.0a5", + "User-Agent": "cloudpdf/3.0.0a6", "X-Fern-Language": "Python", "X-Fern-Runtime": f"python/{platform.python_version()}", "X-Fern-Platform": f"{platform.system().lower()}/{platform.release()}", "X-Fern-SDK-Name": "cloudpdf", - "X-Fern-SDK-Version": "3.0.0a5", + "X-Fern-SDK-Version": "3.0.0a6", **(self.get_custom_headers() or {}), } token = self._get_token() diff --git a/src/cloudpdf/documents/__init__.py b/src/cloudpdf/documents/__init__.py index cb363e5..9a7a16f 100644 --- a/src/cloudpdf/documents/__init__.py +++ b/src/cloudpdf/documents/__init__.py @@ -6,8 +6,28 @@ from importlib import import_module if typing.TYPE_CHECKING: - from .types import DocumentsInitRequestDedupMode, DocumentsInitRequestUploadPreference, ListDocumentsRequestState + from .types import ( + DocumentsImportFromRequestDedupMode, + DocumentsImportFromRequestExpected, + DocumentsImportFromRequestMode, + DocumentsImportFromRequestSource, + DocumentsImportFromRequestSourceConnection, + DocumentsImportFromRequestSourceUrl, + DocumentsImportFromRequestSource_Connection, + DocumentsImportFromRequestSource_Url, + DocumentsInitRequestDedupMode, + DocumentsInitRequestUploadPreference, + ListDocumentsRequestState, + ) _dynamic_imports: typing.Dict[str, str] = { + "DocumentsImportFromRequestDedupMode": ".types", + "DocumentsImportFromRequestExpected": ".types", + "DocumentsImportFromRequestMode": ".types", + "DocumentsImportFromRequestSource": ".types", + "DocumentsImportFromRequestSourceConnection": ".types", + "DocumentsImportFromRequestSourceUrl": ".types", + "DocumentsImportFromRequestSource_Connection": ".types", + "DocumentsImportFromRequestSource_Url": ".types", "DocumentsInitRequestDedupMode": ".types", "DocumentsInitRequestUploadPreference": ".types", "ListDocumentsRequestState": ".types", @@ -35,4 +55,16 @@ def __dir__(): return sorted(lazy_attrs) -__all__ = ["DocumentsInitRequestDedupMode", "DocumentsInitRequestUploadPreference", "ListDocumentsRequestState"] +__all__ = [ + "DocumentsImportFromRequestDedupMode", + "DocumentsImportFromRequestExpected", + "DocumentsImportFromRequestMode", + "DocumentsImportFromRequestSource", + "DocumentsImportFromRequestSourceConnection", + "DocumentsImportFromRequestSourceUrl", + "DocumentsImportFromRequestSource_Connection", + "DocumentsImportFromRequestSource_Url", + "DocumentsInitRequestDedupMode", + "DocumentsInitRequestUploadPreference", + "ListDocumentsRequestState", +] diff --git a/src/cloudpdf/documents/client.py b/src/cloudpdf/documents/client.py index 8ea1bed..f2768de 100644 --- a/src/cloudpdf/documents/client.py +++ b/src/cloudpdf/documents/client.py @@ -7,10 +7,15 @@ from ..core.request_options import RequestOptions from ..types.documents_commit200response import DocumentsCommit200Response from ..types.documents_get200response import DocumentsGet200Response +from ..types.documents_import_from200response import DocumentsImportFrom200Response from ..types.documents_init200response import DocumentsInit200Response from ..types.documents_list200response import DocumentsList200Response from ..types.documents_upload_proxy200response import DocumentsUploadProxy200Response from .raw_client import AsyncRawDocumentsClient, RawDocumentsClient +from .types.documents_import_from_request_dedup_mode import DocumentsImportFromRequestDedupMode +from .types.documents_import_from_request_expected import DocumentsImportFromRequestExpected +from .types.documents_import_from_request_mode import DocumentsImportFromRequestMode +from .types.documents_import_from_request_source import DocumentsImportFromRequestSource from .types.documents_init_request_dedup_mode import DocumentsInitRequestDedupMode from .types.documents_init_request_upload_preference import DocumentsInitRequestUploadPreference from .types.list_documents_request_state import ListDocumentsRequestState @@ -288,6 +293,77 @@ def upload_proxy( _response = self._raw_client.upload_proxy(tenant_id, id, file=file, request_options=request_options) return _response.data + def import_from( + self, + tenant_id: str, + *, + source: DocumentsImportFromRequestSource, + expected: typing.Optional[DocumentsImportFromRequestExpected] = OMIT, + metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, + idempotency_key: typing.Optional[str] = OMIT, + dedup_mode: typing.Optional[DocumentsImportFromRequestDedupMode] = OMIT, + doc_id: typing.Optional[str] = OMIT, + mode: typing.Optional[DocumentsImportFromRequestMode] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> DocumentsImportFrom200Response: + """ + Default mode is synchronous and bounded: the response returns only after the transfer verified and committed (or failed). mode=async (connection sources only) answers 202 immediately and an in-process worker performs the transfer with leased, fenced retries; poll the document until ready/failed. The deployment import policy gates scheme, network range, and size; sources must declare a length. CloudPDF copies and owns the bytes — the source is never referenced in place. A 502 marks a retryable upstream failure: retry with the same idempotencyKey to resume the same document. URL sources are capabilities and never echoed back. Connection sources name operator-registered storage (bucket/prefix scope, allowed credential classes, and tenant bindings are deployment configuration); `revision` is provider-interpreted (S3 VersionId, GCS generation, Azure version id). + + Parameters + ---------- + tenant_id : str + + source : DocumentsImportFromRequestSource + + expected : typing.Optional[DocumentsImportFromRequestExpected] + + metadata : typing.Optional[typing.Dict[str, typing.Any]] + + idempotency_key : typing.Optional[str] + + dedup_mode : typing.Optional[DocumentsImportFromRequestDedupMode] + + doc_id : typing.Optional[str] + + mode : typing.Optional[DocumentsImportFromRequestMode] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DocumentsImportFrom200Response + OK + + Examples + -------- + from cloudpdf import CloudPDFClient + from cloudpdf.documents import DocumentsImportFromRequestSource_Url + + client = CloudPDFClient( + token="YOUR_TOKEN", + base_url="https://yourhost.com/path/to/api", + ) + client.documents.import_from( + tenant_id="tenantId", + source=DocumentsImportFromRequestSource_Url( + url="url", + ), + ) + """ + _response = self._raw_client.import_from( + tenant_id, + source=source, + expected=expected, + metadata=metadata, + idempotency_key=idempotency_key, + dedup_mode=dedup_mode, + doc_id=doc_id, + mode=mode, + request_options=request_options, + ) + return _response.data + def init( self, tenant_id: str, @@ -687,6 +763,85 @@ async def main() -> None: _response = await self._raw_client.upload_proxy(tenant_id, id, file=file, request_options=request_options) return _response.data + async def import_from( + self, + tenant_id: str, + *, + source: DocumentsImportFromRequestSource, + expected: typing.Optional[DocumentsImportFromRequestExpected] = OMIT, + metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, + idempotency_key: typing.Optional[str] = OMIT, + dedup_mode: typing.Optional[DocumentsImportFromRequestDedupMode] = OMIT, + doc_id: typing.Optional[str] = OMIT, + mode: typing.Optional[DocumentsImportFromRequestMode] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> DocumentsImportFrom200Response: + """ + Default mode is synchronous and bounded: the response returns only after the transfer verified and committed (or failed). mode=async (connection sources only) answers 202 immediately and an in-process worker performs the transfer with leased, fenced retries; poll the document until ready/failed. The deployment import policy gates scheme, network range, and size; sources must declare a length. CloudPDF copies and owns the bytes — the source is never referenced in place. A 502 marks a retryable upstream failure: retry with the same idempotencyKey to resume the same document. URL sources are capabilities and never echoed back. Connection sources name operator-registered storage (bucket/prefix scope, allowed credential classes, and tenant bindings are deployment configuration); `revision` is provider-interpreted (S3 VersionId, GCS generation, Azure version id). + + Parameters + ---------- + tenant_id : str + + source : DocumentsImportFromRequestSource + + expected : typing.Optional[DocumentsImportFromRequestExpected] + + metadata : typing.Optional[typing.Dict[str, typing.Any]] + + idempotency_key : typing.Optional[str] + + dedup_mode : typing.Optional[DocumentsImportFromRequestDedupMode] + + doc_id : typing.Optional[str] + + mode : typing.Optional[DocumentsImportFromRequestMode] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DocumentsImportFrom200Response + OK + + Examples + -------- + import asyncio + + from cloudpdf import AsyncCloudPDFClient + from cloudpdf.documents import DocumentsImportFromRequestSource_Url + + client = AsyncCloudPDFClient( + token="YOUR_TOKEN", + base_url="https://yourhost.com/path/to/api", + ) + + + async def main() -> None: + await client.documents.import_from( + tenant_id="tenantId", + source=DocumentsImportFromRequestSource_Url( + url="url", + ), + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.import_from( + tenant_id, + source=source, + expected=expected, + metadata=metadata, + idempotency_key=idempotency_key, + dedup_mode=dedup_mode, + doc_id=doc_id, + mode=mode, + request_options=request_options, + ) + return _response.data + async def init( self, tenant_id: str, diff --git a/src/cloudpdf/documents/raw_client.py b/src/cloudpdf/documents/raw_client.py index 95c33b0..23b6668 100644 --- a/src/cloudpdf/documents/raw_client.py +++ b/src/cloudpdf/documents/raw_client.py @@ -12,16 +12,24 @@ from ..core.parse_error import ParsingError from ..core.pydantic_utilities import parse_obj_as from ..core.request_options import RequestOptions +from ..core.serialization import convert_and_respect_annotation_metadata +from ..errors.bad_gateway_error import BadGatewayError from ..errors.bad_request_error import BadRequestError from ..errors.conflict_error import ConflictError from ..errors.forbidden_error import ForbiddenError from ..errors.not_found_error import NotFoundError from ..types.documents_commit200response import DocumentsCommit200Response from ..types.documents_get200response import DocumentsGet200Response +from ..types.documents_import_from200response import DocumentsImportFrom200Response +from ..types.documents_import_from502response import DocumentsImportFrom502Response from ..types.documents_init200response import DocumentsInit200Response from ..types.documents_list200response import DocumentsList200Response from ..types.documents_upload_proxy200response import DocumentsUploadProxy200Response from ..types.documents_upload_proxy409response import DocumentsUploadProxy409Response +from .types.documents_import_from_request_dedup_mode import DocumentsImportFromRequestDedupMode +from .types.documents_import_from_request_expected import DocumentsImportFromRequestExpected +from .types.documents_import_from_request_mode import DocumentsImportFromRequestMode +from .types.documents_import_from_request_source import DocumentsImportFromRequestSource from .types.documents_init_request_dedup_mode import DocumentsInitRequestDedupMode from .types.documents_init_request_upload_preference import DocumentsInitRequestUploadPreference from .types.list_documents_request_state import ListDocumentsRequestState @@ -502,6 +510,122 @@ def upload_proxy( ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + def import_from( + self, + tenant_id: str, + *, + source: DocumentsImportFromRequestSource, + expected: typing.Optional[DocumentsImportFromRequestExpected] = OMIT, + metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, + idempotency_key: typing.Optional[str] = OMIT, + dedup_mode: typing.Optional[DocumentsImportFromRequestDedupMode] = OMIT, + doc_id: typing.Optional[str] = OMIT, + mode: typing.Optional[DocumentsImportFromRequestMode] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[DocumentsImportFrom200Response]: + """ + Default mode is synchronous and bounded: the response returns only after the transfer verified and committed (or failed). mode=async (connection sources only) answers 202 immediately and an in-process worker performs the transfer with leased, fenced retries; poll the document until ready/failed. The deployment import policy gates scheme, network range, and size; sources must declare a length. CloudPDF copies and owns the bytes — the source is never referenced in place. A 502 marks a retryable upstream failure: retry with the same idempotencyKey to resume the same document. URL sources are capabilities and never echoed back. Connection sources name operator-registered storage (bucket/prefix scope, allowed credential classes, and tenant bindings are deployment configuration); `revision` is provider-interpreted (S3 VersionId, GCS generation, Azure version id). + + Parameters + ---------- + tenant_id : str + + source : DocumentsImportFromRequestSource + + expected : typing.Optional[DocumentsImportFromRequestExpected] + + metadata : typing.Optional[typing.Dict[str, typing.Any]] + + idempotency_key : typing.Optional[str] + + dedup_mode : typing.Optional[DocumentsImportFromRequestDedupMode] + + doc_id : typing.Optional[str] + + mode : typing.Optional[DocumentsImportFromRequestMode] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[DocumentsImportFrom200Response] + OK + """ + _response = self._client_wrapper.httpx_client.request( + f"v1/tenants/{encode_path_param(tenant_id)}/documents/import", + method="POST", + json={ + "source": convert_and_respect_annotation_metadata( + object_=source, annotation=DocumentsImportFromRequestSource, direction="write" + ), + "expected": convert_and_respect_annotation_metadata( + object_=expected, annotation=DocumentsImportFromRequestExpected, direction="write" + ), + "metadata": metadata, + "idempotencyKey": idempotency_key, + "dedupMode": dedup_mode, + "docId": doc_id, + "mode": mode, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + DocumentsImportFrom200Response, + parse_obj_as( + type_=DocumentsImportFrom200Response, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + parse_obj_as( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + parse_obj_as( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 502: + raise BadGatewayError( + headers=dict(_response.headers), + body=typing.cast( + DocumentsImportFrom502Response, + parse_obj_as( + type_=DocumentsImportFrom502Response, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + def init( self, tenant_id: str, @@ -1068,6 +1192,122 @@ async def upload_proxy( ) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + async def import_from( + self, + tenant_id: str, + *, + source: DocumentsImportFromRequestSource, + expected: typing.Optional[DocumentsImportFromRequestExpected] = OMIT, + metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, + idempotency_key: typing.Optional[str] = OMIT, + dedup_mode: typing.Optional[DocumentsImportFromRequestDedupMode] = OMIT, + doc_id: typing.Optional[str] = OMIT, + mode: typing.Optional[DocumentsImportFromRequestMode] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[DocumentsImportFrom200Response]: + """ + Default mode is synchronous and bounded: the response returns only after the transfer verified and committed (or failed). mode=async (connection sources only) answers 202 immediately and an in-process worker performs the transfer with leased, fenced retries; poll the document until ready/failed. The deployment import policy gates scheme, network range, and size; sources must declare a length. CloudPDF copies and owns the bytes — the source is never referenced in place. A 502 marks a retryable upstream failure: retry with the same idempotencyKey to resume the same document. URL sources are capabilities and never echoed back. Connection sources name operator-registered storage (bucket/prefix scope, allowed credential classes, and tenant bindings are deployment configuration); `revision` is provider-interpreted (S3 VersionId, GCS generation, Azure version id). + + Parameters + ---------- + tenant_id : str + + source : DocumentsImportFromRequestSource + + expected : typing.Optional[DocumentsImportFromRequestExpected] + + metadata : typing.Optional[typing.Dict[str, typing.Any]] + + idempotency_key : typing.Optional[str] + + dedup_mode : typing.Optional[DocumentsImportFromRequestDedupMode] + + doc_id : typing.Optional[str] + + mode : typing.Optional[DocumentsImportFromRequestMode] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[DocumentsImportFrom200Response] + OK + """ + _response = await self._client_wrapper.httpx_client.request( + f"v1/tenants/{encode_path_param(tenant_id)}/documents/import", + method="POST", + json={ + "source": convert_and_respect_annotation_metadata( + object_=source, annotation=DocumentsImportFromRequestSource, direction="write" + ), + "expected": convert_and_respect_annotation_metadata( + object_=expected, annotation=DocumentsImportFromRequestExpected, direction="write" + ), + "metadata": metadata, + "idempotencyKey": idempotency_key, + "dedupMode": dedup_mode, + "docId": doc_id, + "mode": mode, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + DocumentsImportFrom200Response, + parse_obj_as( + type_=DocumentsImportFrom200Response, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + parse_obj_as( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + parse_obj_as( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 502: + raise BadGatewayError( + headers=dict(_response.headers), + body=typing.cast( + DocumentsImportFrom502Response, + parse_obj_as( + type_=DocumentsImportFrom502Response, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e + ) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + async def init( self, tenant_id: str, diff --git a/src/cloudpdf/documents/types/__init__.py b/src/cloudpdf/documents/types/__init__.py index 013d304..6bec9de 100644 --- a/src/cloudpdf/documents/types/__init__.py +++ b/src/cloudpdf/documents/types/__init__.py @@ -6,10 +6,28 @@ from importlib import import_module if typing.TYPE_CHECKING: + from .documents_import_from_request_dedup_mode import DocumentsImportFromRequestDedupMode + from .documents_import_from_request_expected import DocumentsImportFromRequestExpected + from .documents_import_from_request_mode import DocumentsImportFromRequestMode + from .documents_import_from_request_source import ( + DocumentsImportFromRequestSource, + DocumentsImportFromRequestSource_Connection, + DocumentsImportFromRequestSource_Url, + ) + from .documents_import_from_request_source_connection import DocumentsImportFromRequestSourceConnection + from .documents_import_from_request_source_url import DocumentsImportFromRequestSourceUrl from .documents_init_request_dedup_mode import DocumentsInitRequestDedupMode from .documents_init_request_upload_preference import DocumentsInitRequestUploadPreference from .list_documents_request_state import ListDocumentsRequestState _dynamic_imports: typing.Dict[str, str] = { + "DocumentsImportFromRequestDedupMode": ".documents_import_from_request_dedup_mode", + "DocumentsImportFromRequestExpected": ".documents_import_from_request_expected", + "DocumentsImportFromRequestMode": ".documents_import_from_request_mode", + "DocumentsImportFromRequestSource": ".documents_import_from_request_source", + "DocumentsImportFromRequestSourceConnection": ".documents_import_from_request_source_connection", + "DocumentsImportFromRequestSourceUrl": ".documents_import_from_request_source_url", + "DocumentsImportFromRequestSource_Connection": ".documents_import_from_request_source", + "DocumentsImportFromRequestSource_Url": ".documents_import_from_request_source", "DocumentsInitRequestDedupMode": ".documents_init_request_dedup_mode", "DocumentsInitRequestUploadPreference": ".documents_init_request_upload_preference", "ListDocumentsRequestState": ".list_documents_request_state", @@ -37,4 +55,16 @@ def __dir__(): return sorted(lazy_attrs) -__all__ = ["DocumentsInitRequestDedupMode", "DocumentsInitRequestUploadPreference", "ListDocumentsRequestState"] +__all__ = [ + "DocumentsImportFromRequestDedupMode", + "DocumentsImportFromRequestExpected", + "DocumentsImportFromRequestMode", + "DocumentsImportFromRequestSource", + "DocumentsImportFromRequestSourceConnection", + "DocumentsImportFromRequestSourceUrl", + "DocumentsImportFromRequestSource_Connection", + "DocumentsImportFromRequestSource_Url", + "DocumentsInitRequestDedupMode", + "DocumentsInitRequestUploadPreference", + "ListDocumentsRequestState", +] diff --git a/src/cloudpdf/documents/types/documents_import_from_request_dedup_mode.py b/src/cloudpdf/documents/types/documents_import_from_request_dedup_mode.py new file mode 100644 index 0000000..f34bb00 --- /dev/null +++ b/src/cloudpdf/documents/types/documents_import_from_request_dedup_mode.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +DocumentsImportFromRequestDedupMode = typing.Union[typing.Literal["always-create", "reuse-existing"], typing.Any] diff --git a/src/cloudpdf/documents/types/documents_import_from_request_expected.py b/src/cloudpdf/documents/types/documents_import_from_request_expected.py new file mode 100644 index 0000000..e2b96b4 --- /dev/null +++ b/src/cloudpdf/documents/types/documents_import_from_request_expected.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +import typing_extensions +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...core.serialization import FieldMetadata + + +class DocumentsImportFromRequestExpected(UniversalBaseModel): + size_bytes: typing_extensions.Annotated[ + typing.Optional[int], FieldMetadata(alias="sizeBytes"), pydantic.Field(alias="sizeBytes") + ] = None + sha256: typing.Optional[str] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/cloudpdf/documents/types/documents_import_from_request_mode.py b/src/cloudpdf/documents/types/documents_import_from_request_mode.py new file mode 100644 index 0000000..c762853 --- /dev/null +++ b/src/cloudpdf/documents/types/documents_import_from_request_mode.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +DocumentsImportFromRequestMode = typing.Union[typing.Literal["sync", "async"], typing.Any] diff --git a/src/cloudpdf/documents/types/documents_import_from_request_source.py b/src/cloudpdf/documents/types/documents_import_from_request_source.py new file mode 100644 index 0000000..088686b --- /dev/null +++ b/src/cloudpdf/documents/types/documents_import_from_request_source.py @@ -0,0 +1,48 @@ +# This file was auto-generated by Fern from our API Definition. + +from __future__ import annotations + +import typing + +import pydantic +import typing_extensions +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...core.serialization import FieldMetadata + + +class DocumentsImportFromRequestSource_Url(UniversalBaseModel): + kind: typing.Literal["url"] = "url" + url: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +class DocumentsImportFromRequestSource_Connection(UniversalBaseModel): + kind: typing.Literal["connection"] = "connection" + connection_id: typing_extensions.Annotated[ + str, FieldMetadata(alias="connectionId"), pydantic.Field(alias="connectionId") + ] + key: str + revision: typing.Optional[str] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow + + +DocumentsImportFromRequestSource = typing_extensions.Annotated[ + typing.Union[DocumentsImportFromRequestSource_Url, DocumentsImportFromRequestSource_Connection], + pydantic.Field(discriminator="kind"), +] diff --git a/src/cloudpdf/documents/types/documents_import_from_request_source_connection.py b/src/cloudpdf/documents/types/documents_import_from_request_source_connection.py new file mode 100644 index 0000000..0967c03 --- /dev/null +++ b/src/cloudpdf/documents/types/documents_import_from_request_source_connection.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +import typing_extensions +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ...core.serialization import FieldMetadata + + +class DocumentsImportFromRequestSourceConnection(UniversalBaseModel): + connection_id: typing_extensions.Annotated[ + str, FieldMetadata(alias="connectionId"), pydantic.Field(alias="connectionId") + ] + key: str + revision: typing.Optional[str] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/cloudpdf/documents/types/documents_import_from_request_source_url.py b/src/cloudpdf/documents/types/documents_import_from_request_source_url.py new file mode 100644 index 0000000..1fcab13 --- /dev/null +++ b/src/cloudpdf/documents/types/documents_import_from_request_source_url.py @@ -0,0 +1,19 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class DocumentsImportFromRequestSourceUrl(UniversalBaseModel): + url: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/cloudpdf/errors/__init__.py b/src/cloudpdf/errors/__init__.py index f1ffc3d..669eecb 100644 --- a/src/cloudpdf/errors/__init__.py +++ b/src/cloudpdf/errors/__init__.py @@ -6,6 +6,7 @@ from importlib import import_module if typing.TYPE_CHECKING: + from .bad_gateway_error import BadGatewayError from .bad_request_error import BadRequestError from .conflict_error import ConflictError from .forbidden_error import ForbiddenError @@ -13,6 +14,7 @@ from .not_found_error import NotFoundError from .unprocessable_entity_error import UnprocessableEntityError _dynamic_imports: typing.Dict[str, str] = { + "BadGatewayError": ".bad_gateway_error", "BadRequestError": ".bad_request_error", "ConflictError": ".conflict_error", "ForbiddenError": ".forbidden_error", @@ -44,6 +46,7 @@ def __dir__(): __all__ = [ + "BadGatewayError", "BadRequestError", "ConflictError", "ForbiddenError", diff --git a/src/cloudpdf/errors/bad_gateway_error.py b/src/cloudpdf/errors/bad_gateway_error.py new file mode 100644 index 0000000..9b63c9a --- /dev/null +++ b/src/cloudpdf/errors/bad_gateway_error.py @@ -0,0 +1,11 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ..core.api_error import ApiError +from ..types.documents_import_from502response import DocumentsImportFrom502Response + + +class BadGatewayError(ApiError): + def __init__(self, body: DocumentsImportFrom502Response, headers: typing.Optional[typing.Dict[str, str]] = None): + super().__init__(status_code=502, headers=headers, body=body) diff --git a/src/cloudpdf/types/__init__.py b/src/cloudpdf/types/__init__.py index 76dbc86..8d5bcfc 100644 --- a/src/cloudpdf/types/__init__.py +++ b/src/cloudpdf/types/__init__.py @@ -5254,6 +5254,26 @@ from .documents_get403response_error import DocumentsGet403ResponseError from .documents_get404response import DocumentsGet404Response from .documents_get404response_error import DocumentsGet404ResponseError + from .documents_import_from200response import DocumentsImportFrom200Response + from .documents_import_from200response_document import DocumentsImportFrom200ResponseDocument + from .documents_import_from200response_document_state import DocumentsImportFrom200ResponseDocumentState + from .documents_import_from200response_document_thumbnail_state import ( + DocumentsImportFrom200ResponseDocumentThumbnailState, + ) + from .documents_import_from200response_tag import DocumentsImportFrom200ResponseTag + from .documents_import_from202response import DocumentsImportFrom202Response + from .documents_import_from202response_document import DocumentsImportFrom202ResponseDocument + from .documents_import_from202response_document_state import DocumentsImportFrom202ResponseDocumentState + from .documents_import_from202response_document_thumbnail_state import ( + DocumentsImportFrom202ResponseDocumentThumbnailState, + ) + from .documents_import_from202response_tag import DocumentsImportFrom202ResponseTag + from .documents_import_from400response import DocumentsImportFrom400Response + from .documents_import_from400response_error import DocumentsImportFrom400ResponseError + from .documents_import_from403response import DocumentsImportFrom403Response + from .documents_import_from403response_error import DocumentsImportFrom403ResponseError + from .documents_import_from502response import DocumentsImportFrom502Response + from .documents_import_from502response_error import DocumentsImportFrom502ResponseError from .documents_init200response import ( DocumentsInit200Response, DocumentsInit200Response_Created, @@ -7484,6 +7504,22 @@ "DocumentsGet403ResponseError": ".documents_get403response_error", "DocumentsGet404Response": ".documents_get404response", "DocumentsGet404ResponseError": ".documents_get404response_error", + "DocumentsImportFrom200Response": ".documents_import_from200response", + "DocumentsImportFrom200ResponseDocument": ".documents_import_from200response_document", + "DocumentsImportFrom200ResponseDocumentState": ".documents_import_from200response_document_state", + "DocumentsImportFrom200ResponseDocumentThumbnailState": ".documents_import_from200response_document_thumbnail_state", + "DocumentsImportFrom200ResponseTag": ".documents_import_from200response_tag", + "DocumentsImportFrom202Response": ".documents_import_from202response", + "DocumentsImportFrom202ResponseDocument": ".documents_import_from202response_document", + "DocumentsImportFrom202ResponseDocumentState": ".documents_import_from202response_document_state", + "DocumentsImportFrom202ResponseDocumentThumbnailState": ".documents_import_from202response_document_thumbnail_state", + "DocumentsImportFrom202ResponseTag": ".documents_import_from202response_tag", + "DocumentsImportFrom400Response": ".documents_import_from400response", + "DocumentsImportFrom400ResponseError": ".documents_import_from400response_error", + "DocumentsImportFrom403Response": ".documents_import_from403response", + "DocumentsImportFrom403ResponseError": ".documents_import_from403response_error", + "DocumentsImportFrom502Response": ".documents_import_from502response", + "DocumentsImportFrom502ResponseError": ".documents_import_from502response_error", "DocumentsInit200Response": ".documents_init200response", "DocumentsInit200ResponseCreated": ".documents_init200response_created", "DocumentsInit200ResponseCreatedDocument": ".documents_init200response_created_document", @@ -9718,6 +9754,22 @@ def __dir__(): "DocumentsGet403ResponseError", "DocumentsGet404Response", "DocumentsGet404ResponseError", + "DocumentsImportFrom200Response", + "DocumentsImportFrom200ResponseDocument", + "DocumentsImportFrom200ResponseDocumentState", + "DocumentsImportFrom200ResponseDocumentThumbnailState", + "DocumentsImportFrom200ResponseTag", + "DocumentsImportFrom202Response", + "DocumentsImportFrom202ResponseDocument", + "DocumentsImportFrom202ResponseDocumentState", + "DocumentsImportFrom202ResponseDocumentThumbnailState", + "DocumentsImportFrom202ResponseTag", + "DocumentsImportFrom400Response", + "DocumentsImportFrom400ResponseError", + "DocumentsImportFrom403Response", + "DocumentsImportFrom403ResponseError", + "DocumentsImportFrom502Response", + "DocumentsImportFrom502ResponseError", "DocumentsInit200Response", "DocumentsInit200ResponseCreated", "DocumentsInit200ResponseCreatedDocument", diff --git a/src/cloudpdf/types/documents_import_from200response.py b/src/cloudpdf/types/documents_import_from200response.py new file mode 100644 index 0000000..d7000c3 --- /dev/null +++ b/src/cloudpdf/types/documents_import_from200response.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .documents_import_from200response_document import DocumentsImportFrom200ResponseDocument +from .documents_import_from200response_tag import DocumentsImportFrom200ResponseTag + + +class DocumentsImportFrom200Response(UniversalBaseModel): + tag: DocumentsImportFrom200ResponseTag + document: DocumentsImportFrom200ResponseDocument + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/cloudpdf/types/documents_import_from200response_document.py b/src/cloudpdf/types/documents_import_from200response_document.py new file mode 100644 index 0000000..2b6a725 --- /dev/null +++ b/src/cloudpdf/types/documents_import_from200response_document.py @@ -0,0 +1,53 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +import typing_extensions +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ..core.serialization import FieldMetadata +from .documents_import_from200response_document_state import DocumentsImportFrom200ResponseDocumentState +from .documents_import_from200response_document_thumbnail_state import ( + DocumentsImportFrom200ResponseDocumentThumbnailState, +) + + +class DocumentsImportFrom200ResponseDocument(UniversalBaseModel): + id: str + tenant_id: typing_extensions.Annotated[str, FieldMetadata(alias="tenantId"), pydantic.Field(alias="tenantId")] + state: DocumentsImportFrom200ResponseDocumentState + base_sha: typing_extensions.Annotated[ + typing.Optional[str], FieldMetadata(alias="baseSha"), pydantic.Field(alias="baseSha") + ] = None + storage_size_bytes: typing_extensions.Annotated[ + typing.Optional[float], FieldMetadata(alias="storageSizeBytes"), pydantic.Field(alias="storageSizeBytes") + ] = None + metadata: typing.Optional[typing.Dict[str, typing.Any]] = None + idempotency_key: typing_extensions.Annotated[ + typing.Optional[str], FieldMetadata(alias="idempotencyKey"), pydantic.Field(alias="idempotencyKey") + ] = None + failure_reason: typing_extensions.Annotated[ + typing.Optional[str], FieldMetadata(alias="failureReason"), pydantic.Field(alias="failureReason") + ] = None + thumbnail_state: typing_extensions.Annotated[ + typing.Optional[DocumentsImportFrom200ResponseDocumentThumbnailState], + FieldMetadata(alias="thumbnailState"), + pydantic.Field(alias="thumbnailState"), + ] = None + thumbnail_url: typing_extensions.Annotated[ + typing.Optional[str], FieldMetadata(alias="thumbnailUrl"), pydantic.Field(alias="thumbnailUrl") + ] = None + created_at: typing_extensions.Annotated[float, FieldMetadata(alias="createdAt"), pydantic.Field(alias="createdAt")] + updated_at: typing_extensions.Annotated[float, FieldMetadata(alias="updatedAt"), pydantic.Field(alias="updatedAt")] + created_by: typing_extensions.Annotated[ + typing.Optional[str], FieldMetadata(alias="createdBy"), pydantic.Field(alias="createdBy") + ] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/cloudpdf/types/documents_import_from200response_document_state.py b/src/cloudpdf/types/documents_import_from200response_document_state.py new file mode 100644 index 0000000..414d92c --- /dev/null +++ b/src/cloudpdf/types/documents_import_from200response_document_state.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +DocumentsImportFrom200ResponseDocumentState = typing.Union[ + typing.Literal["pending", "ready", "failed", "deleting"], typing.Any +] diff --git a/src/cloudpdf/types/documents_import_from200response_document_thumbnail_state.py b/src/cloudpdf/types/documents_import_from200response_document_thumbnail_state.py new file mode 100644 index 0000000..89c97e8 --- /dev/null +++ b/src/cloudpdf/types/documents_import_from200response_document_thumbnail_state.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +DocumentsImportFrom200ResponseDocumentThumbnailState = typing.Union[ + typing.Literal["pending", "ready", "locked", "failed"], typing.Any +] diff --git a/src/cloudpdf/types/documents_import_from200response_tag.py b/src/cloudpdf/types/documents_import_from200response_tag.py new file mode 100644 index 0000000..1cdf7c7 --- /dev/null +++ b/src/cloudpdf/types/documents_import_from200response_tag.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +DocumentsImportFrom200ResponseTag = typing.Union[typing.Literal["imported", "deduped", "accepted"], typing.Any] diff --git a/src/cloudpdf/types/documents_import_from202response.py b/src/cloudpdf/types/documents_import_from202response.py new file mode 100644 index 0000000..1c8b637 --- /dev/null +++ b/src/cloudpdf/types/documents_import_from202response.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .documents_import_from202response_document import DocumentsImportFrom202ResponseDocument +from .documents_import_from202response_tag import DocumentsImportFrom202ResponseTag + + +class DocumentsImportFrom202Response(UniversalBaseModel): + tag: DocumentsImportFrom202ResponseTag + document: DocumentsImportFrom202ResponseDocument + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/cloudpdf/types/documents_import_from202response_document.py b/src/cloudpdf/types/documents_import_from202response_document.py new file mode 100644 index 0000000..7142127 --- /dev/null +++ b/src/cloudpdf/types/documents_import_from202response_document.py @@ -0,0 +1,53 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +import typing_extensions +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ..core.serialization import FieldMetadata +from .documents_import_from202response_document_state import DocumentsImportFrom202ResponseDocumentState +from .documents_import_from202response_document_thumbnail_state import ( + DocumentsImportFrom202ResponseDocumentThumbnailState, +) + + +class DocumentsImportFrom202ResponseDocument(UniversalBaseModel): + id: str + tenant_id: typing_extensions.Annotated[str, FieldMetadata(alias="tenantId"), pydantic.Field(alias="tenantId")] + state: DocumentsImportFrom202ResponseDocumentState + base_sha: typing_extensions.Annotated[ + typing.Optional[str], FieldMetadata(alias="baseSha"), pydantic.Field(alias="baseSha") + ] = None + storage_size_bytes: typing_extensions.Annotated[ + typing.Optional[float], FieldMetadata(alias="storageSizeBytes"), pydantic.Field(alias="storageSizeBytes") + ] = None + metadata: typing.Optional[typing.Dict[str, typing.Any]] = None + idempotency_key: typing_extensions.Annotated[ + typing.Optional[str], FieldMetadata(alias="idempotencyKey"), pydantic.Field(alias="idempotencyKey") + ] = None + failure_reason: typing_extensions.Annotated[ + typing.Optional[str], FieldMetadata(alias="failureReason"), pydantic.Field(alias="failureReason") + ] = None + thumbnail_state: typing_extensions.Annotated[ + typing.Optional[DocumentsImportFrom202ResponseDocumentThumbnailState], + FieldMetadata(alias="thumbnailState"), + pydantic.Field(alias="thumbnailState"), + ] = None + thumbnail_url: typing_extensions.Annotated[ + typing.Optional[str], FieldMetadata(alias="thumbnailUrl"), pydantic.Field(alias="thumbnailUrl") + ] = None + created_at: typing_extensions.Annotated[float, FieldMetadata(alias="createdAt"), pydantic.Field(alias="createdAt")] + updated_at: typing_extensions.Annotated[float, FieldMetadata(alias="updatedAt"), pydantic.Field(alias="updatedAt")] + created_by: typing_extensions.Annotated[ + typing.Optional[str], FieldMetadata(alias="createdBy"), pydantic.Field(alias="createdBy") + ] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/cloudpdf/types/documents_import_from202response_document_state.py b/src/cloudpdf/types/documents_import_from202response_document_state.py new file mode 100644 index 0000000..5fd95b9 --- /dev/null +++ b/src/cloudpdf/types/documents_import_from202response_document_state.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +DocumentsImportFrom202ResponseDocumentState = typing.Union[ + typing.Literal["pending", "ready", "failed", "deleting"], typing.Any +] diff --git a/src/cloudpdf/types/documents_import_from202response_document_thumbnail_state.py b/src/cloudpdf/types/documents_import_from202response_document_thumbnail_state.py new file mode 100644 index 0000000..ebc4415 --- /dev/null +++ b/src/cloudpdf/types/documents_import_from202response_document_thumbnail_state.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +DocumentsImportFrom202ResponseDocumentThumbnailState = typing.Union[ + typing.Literal["pending", "ready", "locked", "failed"], typing.Any +] diff --git a/src/cloudpdf/types/documents_import_from202response_tag.py b/src/cloudpdf/types/documents_import_from202response_tag.py new file mode 100644 index 0000000..c838159 --- /dev/null +++ b/src/cloudpdf/types/documents_import_from202response_tag.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +DocumentsImportFrom202ResponseTag = typing.Union[typing.Literal["imported", "deduped", "accepted"], typing.Any] diff --git a/src/cloudpdf/types/documents_import_from400response.py b/src/cloudpdf/types/documents_import_from400response.py new file mode 100644 index 0000000..36ad9c9 --- /dev/null +++ b/src/cloudpdf/types/documents_import_from400response.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .documents_import_from400response_error import DocumentsImportFrom400ResponseError + + +class DocumentsImportFrom400Response(UniversalBaseModel): + error: DocumentsImportFrom400ResponseError + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/cloudpdf/types/documents_import_from400response_error.py b/src/cloudpdf/types/documents_import_from400response_error.py new file mode 100644 index 0000000..9f49bd9 --- /dev/null +++ b/src/cloudpdf/types/documents_import_from400response_error.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class DocumentsImportFrom400ResponseError(UniversalBaseModel): + code: str + message: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/cloudpdf/types/documents_import_from403response.py b/src/cloudpdf/types/documents_import_from403response.py new file mode 100644 index 0000000..a3ce8d0 --- /dev/null +++ b/src/cloudpdf/types/documents_import_from403response.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .documents_import_from403response_error import DocumentsImportFrom403ResponseError + + +class DocumentsImportFrom403Response(UniversalBaseModel): + error: DocumentsImportFrom403ResponseError + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/cloudpdf/types/documents_import_from403response_error.py b/src/cloudpdf/types/documents_import_from403response_error.py new file mode 100644 index 0000000..e486df2 --- /dev/null +++ b/src/cloudpdf/types/documents_import_from403response_error.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class DocumentsImportFrom403ResponseError(UniversalBaseModel): + code: str + message: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/cloudpdf/types/documents_import_from502response.py b/src/cloudpdf/types/documents_import_from502response.py new file mode 100644 index 0000000..1b24647 --- /dev/null +++ b/src/cloudpdf/types/documents_import_from502response.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .documents_import_from502response_error import DocumentsImportFrom502ResponseError + + +class DocumentsImportFrom502Response(UniversalBaseModel): + error: DocumentsImportFrom502ResponseError + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/cloudpdf/types/documents_import_from502response_error.py b/src/cloudpdf/types/documents_import_from502response_error.py new file mode 100644 index 0000000..654e2ef --- /dev/null +++ b/src/cloudpdf/types/documents_import_from502response_error.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class DocumentsImportFrom502ResponseError(UniversalBaseModel): + code: str + message: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow