Skip to content

Commit 2bfa20a

Browse files
feat(client): support file upload requests
1 parent be94ae0 commit 2bfa20a

12 files changed

Lines changed: 53 additions & 60 deletions

File tree

api.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6346,7 +6346,7 @@ from cloudflare.types.zero_trust.dlp.datasets import NewVersion
63466346
Methods:
63476347

63486348
- <code title="post /accounts/{account_id}/dlp/datasets/{dataset_id}/upload">client.zero_trust.dlp.datasets.upload.<a href="./src/cloudflare/resources/zero_trust/dlp/datasets/upload.py">create</a>(dataset_id, \*, account_id) -> <a href="./src/cloudflare/types/zero_trust/dlp/datasets/new_version.py">Optional[NewVersion]</a></code>
6349-
- <code title="post /accounts/{account_id}/dlp/datasets/{dataset_id}/upload/{version}">client.zero_trust.dlp.datasets.upload.<a href="./src/cloudflare/resources/zero_trust/dlp/datasets/upload.py">edit</a>(version, \*, account_id, dataset_id, \*\*<a href="src/cloudflare/types/zero_trust/dlp/datasets/upload_edit_params.py">params</a>) -> <a href="./src/cloudflare/types/zero_trust/dlp/dataset.py">Optional[Dataset]</a></code>
6349+
- <code title="post /accounts/{account_id}/dlp/datasets/{dataset_id}/upload/{version}">client.zero_trust.dlp.datasets.upload.<a href="./src/cloudflare/resources/zero_trust/dlp/datasets/upload.py">edit</a>(version, body, \*, account_id, dataset_id, \*\*<a href="src/cloudflare/types/zero_trust/dlp/datasets/upload_edit_params.py">params</a>) -> <a href="./src/cloudflare/types/zero_trust/dlp/dataset.py">Optional[Dataset]</a></code>
63506350

63516351
#### Versions
63526352

@@ -6370,7 +6370,7 @@ from cloudflare.types.zero_trust.dlp.datasets.versions import EntryCreateRespons
63706370

63716371
Methods:
63726372

6373-
- <code title="post /accounts/{account_id}/dlp/datasets/{dataset_id}/versions/{version}/entries/{entry_id}">client.zero_trust.dlp.datasets.versions.entries.<a href="./src/cloudflare/resources/zero_trust/dlp/datasets/versions/entries.py">create</a>(entry_id, \*, account_id, dataset_id, version, \*\*<a href="src/cloudflare/types/zero_trust/dlp/datasets/versions/entry_create_params.py">params</a>) -> <a href="./src/cloudflare/types/zero_trust/dlp/datasets/versions/entry_create_response.py">Optional[EntryCreateResponse]</a></code>
6373+
- <code title="post /accounts/{account_id}/dlp/datasets/{dataset_id}/versions/{version}/entries/{entry_id}">client.zero_trust.dlp.datasets.versions.entries.<a href="./src/cloudflare/resources/zero_trust/dlp/datasets/versions/entries.py">create</a>(entry_id, body, \*, account_id, dataset_id, version, \*\*<a href="src/cloudflare/types/zero_trust/dlp/datasets/versions/entry_create_params.py">params</a>) -> <a href="./src/cloudflare/types/zero_trust/dlp/datasets/versions/entry_create_response.py">Optional[EntryCreateResponse]</a></code>
63746374

63756375
### Patterns
63766376

@@ -7114,7 +7114,7 @@ from cloudflare.types.radar.ai import ToMarkdownCreateResponse
71147114

71157115
Methods:
71167116

7117-
- <code title="post /accounts/{account_id}/ai/tomarkdown">client.radar.ai.to_markdown.<a href="./src/cloudflare/resources/radar/ai/to_markdown.py">create</a>(\*, account_id, \*\*<a href="src/cloudflare/types/radar/ai/to_markdown_create_params.py">params</a>) -> <a href="./src/cloudflare/types/radar/ai/to_markdown_create_response.py">SyncSinglePage[ToMarkdownCreateResponse]</a></code>
7117+
- <code title="post /accounts/{account_id}/ai/tomarkdown">client.radar.ai.to_markdown.<a href="./src/cloudflare/resources/radar/ai/to_markdown.py">create</a>(body, \*, account_id, \*\*<a href="src/cloudflare/types/radar/ai/to_markdown_create_params.py">params</a>) -> <a href="./src/cloudflare/types/radar/ai/to_markdown_create_response.py">SyncSinglePage[ToMarkdownCreateResponse]</a></code>
71187118

71197119
### Inference
71207120

src/cloudflare/_base_client.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,10 @@ def _build_request(
556556
is_body_allowed = options.method.lower() != "get"
557557

558558
if is_body_allowed:
559-
kwargs["json"] = json_data if is_given(json_data) else None
559+
if isinstance(json_data, bytes):
560+
kwargs["content"] = json_data
561+
else:
562+
kwargs["json"] = json_data if is_given(json_data) else None
560563
kwargs["files"] = files
561564
else:
562565
headers.pop("Content-Type", None)

src/cloudflare/_files.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,12 @@ def _transform_file(file: FileTypes) -> HttpxFileTypes:
6969
return file
7070

7171
if is_tuple_t(file):
72-
return (file[0], _read_file_content(file[1]), *file[2:])
72+
return (file[0], read_file_content(file[1]), *file[2:])
7373

7474
raise TypeError(f"Expected file types input to be a FileContent type or to be a tuple")
7575

7676

77-
def _read_file_content(file: FileContent) -> HttpxFileContent:
77+
def read_file_content(file: FileContent) -> HttpxFileContent:
7878
if isinstance(file, os.PathLike):
7979
return pathlib.Path(file).read_bytes()
8080
return file
@@ -111,12 +111,12 @@ async def _async_transform_file(file: FileTypes) -> HttpxFileTypes:
111111
return file
112112

113113
if is_tuple_t(file):
114-
return (file[0], await _async_read_file_content(file[1]), *file[2:])
114+
return (file[0], await async_read_file_content(file[1]), *file[2:])
115115

116116
raise TypeError(f"Expected file types input to be a FileContent type or to be a tuple")
117117

118118

119-
async def _async_read_file_content(file: FileContent) -> HttpxFileContent:
119+
async def async_read_file_content(file: FileContent) -> HttpxFileContent:
120120
if isinstance(file, os.PathLike):
121121
return await anyio.Path(file).read_bytes()
122122

src/cloudflare/resources/radar/ai/to_markdown.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ def with_streaming_response(self) -> ToMarkdownResourceWithStreamingResponse:
4444

4545
def create(
4646
self,
47+
body: FileTypes | NotGiven = NOT_GIVEN,
4748
*,
4849
account_id: str,
49-
body: FileTypes | NotGiven = NOT_GIVEN,
5050
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
5151
# The extra values given here take precedence over values defined on the client or passed to this method.
5252
extra_headers: Headers | None = None,
@@ -102,9 +102,9 @@ def with_streaming_response(self) -> AsyncToMarkdownResourceWithStreamingRespons
102102

103103
def create(
104104
self,
105+
body: FileTypes | NotGiven = NOT_GIVEN,
105106
*,
106107
account_id: str,
107-
body: FileTypes | NotGiven = NOT_GIVEN,
108108
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
109109
# The extra values given here take precedence over values defined on the client or passed to this method.
110110
extra_headers: Headers | None = None,

src/cloudflare/resources/zero_trust/dlp/datasets/upload.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
import httpx
88

9-
from ....._types import NOT_GIVEN, Body, Query, Headers, NotGiven, FileTypes
10-
from ....._utils import maybe_transform, async_maybe_transform
9+
from ....._files import read_file_content, async_read_file_content
10+
from ....._types import NOT_GIVEN, Body, Query, Headers, NotGiven, FileContent
1111
from ....._compat import cached_property
1212
from ....._resource import SyncAPIResource, AsyncAPIResource
1313
from ....._response import (
@@ -19,7 +19,6 @@
1919
from ....._wrappers import ResultWrapper
2020
from ....._base_client import make_request_options
2121
from .....types.zero_trust.dlp.dataset import Dataset
22-
from .....types.zero_trust.dlp.datasets import upload_edit_params
2322
from .....types.zero_trust.dlp.datasets.new_version import NewVersion
2423

2524
__all__ = ["UploadResource", "AsyncUploadResource"]
@@ -88,10 +87,10 @@ def create(
8887
def edit(
8988
self,
9089
version: int,
90+
body: FileContent,
9191
*,
9292
account_id: str,
9393
dataset_id: str,
94-
body: FileTypes,
9594
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
9695
# The extra values given here take precedence over values defined on the client or passed to this method.
9796
extra_headers: Headers | None = None,
@@ -119,9 +118,10 @@ def edit(
119118
raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}")
120119
if not dataset_id:
121120
raise ValueError(f"Expected a non-empty value for `dataset_id` but received {dataset_id!r}")
121+
extra_headers = {"Content-Type": "application/octet-stream", **(extra_headers or {})}
122122
return self._post(
123123
f"/accounts/{account_id}/dlp/datasets/{dataset_id}/upload/{version}",
124-
body=maybe_transform(body, upload_edit_params.UploadEditParams),
124+
body=read_file_content(body),
125125
options=make_request_options(
126126
extra_headers=extra_headers,
127127
extra_query=extra_query,
@@ -196,10 +196,10 @@ async def create(
196196
async def edit(
197197
self,
198198
version: int,
199+
body: FileContent,
199200
*,
200201
account_id: str,
201202
dataset_id: str,
202-
body: FileTypes,
203203
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
204204
# The extra values given here take precedence over values defined on the client or passed to this method.
205205
extra_headers: Headers | None = None,
@@ -227,9 +227,10 @@ async def edit(
227227
raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}")
228228
if not dataset_id:
229229
raise ValueError(f"Expected a non-empty value for `dataset_id` but received {dataset_id!r}")
230+
extra_headers = {"Content-Type": "application/octet-stream", **(extra_headers or {})}
230231
return await self._post(
231232
f"/accounts/{account_id}/dlp/datasets/{dataset_id}/upload/{version}",
232-
body=await async_maybe_transform(body, upload_edit_params.UploadEditParams),
233+
body=await async_read_file_content(body),
233234
options=make_request_options(
234235
extra_headers=extra_headers,
235236
extra_query=extra_query,

src/cloudflare/resources/zero_trust/dlp/datasets/versions/entries.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
import httpx
88

9-
from ......_types import NOT_GIVEN, Body, Query, Headers, NotGiven, FileTypes
10-
from ......_utils import maybe_transform, async_maybe_transform
9+
from ......_files import read_file_content, async_read_file_content
10+
from ......_types import NOT_GIVEN, Body, Query, Headers, NotGiven, FileContent
1111
from ......_compat import cached_property
1212
from ......_resource import SyncAPIResource, AsyncAPIResource
1313
from ......_response import (
@@ -18,7 +18,6 @@
1818
)
1919
from ......_wrappers import ResultWrapper
2020
from ......_base_client import make_request_options
21-
from ......types.zero_trust.dlp.datasets.versions import entry_create_params
2221
from ......types.zero_trust.dlp.datasets.versions.entry_create_response import EntryCreateResponse
2322

2423
__all__ = ["EntriesResource", "AsyncEntriesResource"]
@@ -47,11 +46,11 @@ def with_streaming_response(self) -> EntriesResourceWithStreamingResponse:
4746
def create(
4847
self,
4948
entry_id: str,
49+
body: FileContent,
5050
*,
5151
account_id: str,
5252
dataset_id: str,
5353
version: int,
54-
body: FileTypes,
5554
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
5655
# The extra values given here take precedence over values defined on the client or passed to this method.
5756
extra_headers: Headers | None = None,
@@ -79,9 +78,10 @@ def create(
7978
raise ValueError(f"Expected a non-empty value for `dataset_id` but received {dataset_id!r}")
8079
if not entry_id:
8180
raise ValueError(f"Expected a non-empty value for `entry_id` but received {entry_id!r}")
81+
extra_headers = {"Content-Type": "application/octet-stream", **(extra_headers or {})}
8282
return self._post(
8383
f"/accounts/{account_id}/dlp/datasets/{dataset_id}/versions/{version}/entries/{entry_id}",
84-
body=maybe_transform(body, entry_create_params.EntryCreateParams),
84+
body=read_file_content(body),
8585
options=make_request_options(
8686
extra_headers=extra_headers,
8787
extra_query=extra_query,
@@ -116,11 +116,11 @@ def with_streaming_response(self) -> AsyncEntriesResourceWithStreamingResponse:
116116
async def create(
117117
self,
118118
entry_id: str,
119+
body: FileContent,
119120
*,
120121
account_id: str,
121122
dataset_id: str,
122123
version: int,
123-
body: FileTypes,
124124
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
125125
# The extra values given here take precedence over values defined on the client or passed to this method.
126126
extra_headers: Headers | None = None,
@@ -148,9 +148,10 @@ async def create(
148148
raise ValueError(f"Expected a non-empty value for `dataset_id` but received {dataset_id!r}")
149149
if not entry_id:
150150
raise ValueError(f"Expected a non-empty value for `entry_id` but received {entry_id!r}")
151+
extra_headers = {"Content-Type": "application/octet-stream", **(extra_headers or {})}
151152
return await self._post(
152153
f"/accounts/{account_id}/dlp/datasets/{dataset_id}/versions/{version}/entries/{entry_id}",
153-
body=await async_maybe_transform(body, entry_create_params.EntryCreateParams),
154+
body=await async_read_file_content(body),
154155
options=make_request_options(
155156
extra_headers=extra_headers,
156157
extra_query=extra_query,

src/cloudflare/types/radar/ai/to_markdown_create_params.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,8 @@
44

55
from typing_extensions import Required, TypedDict
66

7-
from ...._types import FileTypes
8-
97
__all__ = ["ToMarkdownCreateParams"]
108

119

1210
class ToMarkdownCreateParams(TypedDict, total=False):
1311
account_id: Required[str]
14-
15-
body: FileTypes

src/cloudflare/types/zero_trust/dlp/datasets/upload_edit_params.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,10 @@
44

55
from typing_extensions import Required, TypedDict
66

7-
from ....._types import FileTypes
8-
97
__all__ = ["UploadEditParams"]
108

119

1210
class UploadEditParams(TypedDict, total=False):
1311
account_id: Required[str]
1412

1513
dataset_id: Required[str]
16-
17-
body: Required[FileTypes]

src/cloudflare/types/zero_trust/dlp/datasets/versions/entry_create_params.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
from typing_extensions import Required, TypedDict
66

7-
from ......_types import FileTypes
8-
97
__all__ = ["EntryCreateParams"]
108

119

@@ -15,5 +13,3 @@ class EntryCreateParams(TypedDict, total=False):
1513
dataset_id: Required[str]
1614

1715
version: Required[int]
18-
19-
body: Required[FileTypes]

tests/api_resources/radar/ai/test_to_markdown.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ def test_method_create(self, client: Cloudflare) -> None:
3030
@parametrize
3131
def test_method_create_with_all_params(self, client: Cloudflare) -> None:
3232
to_markdown = client.radar.ai.to_markdown.create(
33-
account_id="023e105f4ecef8ad9ca31a8372d0c353",
3433
body=b"raw file contents",
34+
account_id="023e105f4ecef8ad9ca31a8372d0c353",
3535
)
3636
assert_matches_type(SyncSinglePage[ToMarkdownCreateResponse], to_markdown, path=["response"])
3737

@@ -87,8 +87,8 @@ async def test_method_create(self, async_client: AsyncCloudflare) -> None:
8787
@parametrize
8888
async def test_method_create_with_all_params(self, async_client: AsyncCloudflare) -> None:
8989
to_markdown = await async_client.radar.ai.to_markdown.create(
90-
account_id="023e105f4ecef8ad9ca31a8372d0c353",
9190
body=b"raw file contents",
91+
account_id="023e105f4ecef8ad9ca31a8372d0c353",
9292
)
9393
assert_matches_type(AsyncSinglePage[ToMarkdownCreateResponse], to_markdown, path=["response"])
9494

0 commit comments

Comments
 (0)