google-genai 1.33.0__py3-none-any.whl → 1.53.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- google/genai/_api_client.py +361 -208
- google/genai/_common.py +260 -69
- google/genai/_extra_utils.py +142 -12
- google/genai/_live_converters.py +691 -2746
- google/genai/_local_tokenizer_loader.py +0 -9
- google/genai/_operations_converters.py +186 -99
- google/genai/_replay_api_client.py +48 -51
- google/genai/_tokens_converters.py +169 -489
- google/genai/_transformers.py +193 -90
- google/genai/batches.py +1014 -1307
- google/genai/caches.py +458 -1107
- google/genai/client.py +101 -0
- google/genai/documents.py +532 -0
- google/genai/errors.py +58 -4
- google/genai/file_search_stores.py +1296 -0
- google/genai/files.py +108 -358
- google/genai/live.py +90 -32
- google/genai/live_music.py +24 -27
- google/genai/local_tokenizer.py +36 -3
- google/genai/models.py +2308 -3375
- google/genai/operations.py +129 -21
- google/genai/pagers.py +7 -1
- google/genai/tokens.py +2 -12
- google/genai/tunings.py +770 -436
- google/genai/types.py +4341 -1218
- google/genai/version.py +1 -1
- {google_genai-1.33.0.dist-info → google_genai-1.53.0.dist-info}/METADATA +359 -201
- google_genai-1.53.0.dist-info/RECORD +41 -0
- google_genai-1.33.0.dist-info/RECORD +0 -39
- {google_genai-1.33.0.dist-info → google_genai-1.53.0.dist-info}/WHEEL +0 -0
- {google_genai-1.33.0.dist-info → google_genai-1.53.0.dist-info}/licenses/LICENSE +0 -0
- {google_genai-1.33.0.dist-info → google_genai-1.53.0.dist-info}/top_level.txt +0 -0
google/genai/files.py
CHANGED
|
@@ -18,13 +18,13 @@
|
|
|
18
18
|
import io
|
|
19
19
|
import json
|
|
20
20
|
import logging
|
|
21
|
-
import mimetypes
|
|
22
21
|
import os
|
|
23
22
|
from typing import Any, Optional, Union
|
|
24
23
|
from urllib.parse import urlencode
|
|
25
24
|
|
|
26
25
|
from . import _api_module
|
|
27
26
|
from . import _common
|
|
27
|
+
from . import _extra_utils
|
|
28
28
|
from . import _transformers as t
|
|
29
29
|
from . import types
|
|
30
30
|
from ._common import get_value_by_path as getv
|
|
@@ -35,128 +35,53 @@ from .pagers import AsyncPager, Pager
|
|
|
35
35
|
logger = logging.getLogger('google_genai.files')
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
def
|
|
38
|
+
def _CreateFileParameters_to_mldev(
|
|
39
39
|
from_object: Union[dict[str, Any], object],
|
|
40
40
|
parent_object: Optional[dict[str, Any]] = None,
|
|
41
41
|
) -> dict[str, Any]:
|
|
42
42
|
to_object: dict[str, Any] = {}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
setv(
|
|
46
|
-
parent_object, ['_query', 'pageSize'], getv(from_object, ['page_size'])
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
if getv(from_object, ['page_token']) is not None:
|
|
50
|
-
setv(
|
|
51
|
-
parent_object,
|
|
52
|
-
['_query', 'pageToken'],
|
|
53
|
-
getv(from_object, ['page_token']),
|
|
54
|
-
)
|
|
43
|
+
if getv(from_object, ['file']) is not None:
|
|
44
|
+
setv(to_object, ['file'], getv(from_object, ['file']))
|
|
55
45
|
|
|
56
46
|
return to_object
|
|
57
47
|
|
|
58
48
|
|
|
59
|
-
def
|
|
49
|
+
def _CreateFileResponse_from_mldev(
|
|
60
50
|
from_object: Union[dict[str, Any], object],
|
|
61
51
|
parent_object: Optional[dict[str, Any]] = None,
|
|
62
52
|
) -> dict[str, Any]:
|
|
63
53
|
to_object: dict[str, Any] = {}
|
|
64
|
-
if getv(from_object, ['
|
|
54
|
+
if getv(from_object, ['sdkHttpResponse']) is not None:
|
|
65
55
|
setv(
|
|
66
|
-
to_object,
|
|
67
|
-
['config'],
|
|
68
|
-
_ListFilesConfig_to_mldev(getv(from_object, ['config']), to_object),
|
|
56
|
+
to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
|
|
69
57
|
)
|
|
70
58
|
|
|
71
59
|
return to_object
|
|
72
60
|
|
|
73
61
|
|
|
74
|
-
def
|
|
75
|
-
from_object: Union[dict[str, Any], object],
|
|
76
|
-
parent_object: Optional[dict[str, Any]] = None,
|
|
77
|
-
) -> dict[str, Any]:
|
|
78
|
-
to_object: dict[str, Any] = {}
|
|
79
|
-
if getv(from_object, ['details']) is not None:
|
|
80
|
-
setv(to_object, ['details'], getv(from_object, ['details']))
|
|
81
|
-
|
|
82
|
-
if getv(from_object, ['message']) is not None:
|
|
83
|
-
setv(to_object, ['message'], getv(from_object, ['message']))
|
|
84
|
-
|
|
85
|
-
if getv(from_object, ['code']) is not None:
|
|
86
|
-
setv(to_object, ['code'], getv(from_object, ['code']))
|
|
87
|
-
|
|
88
|
-
return to_object
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
def _File_to_mldev(
|
|
62
|
+
def _DeleteFileParameters_to_mldev(
|
|
92
63
|
from_object: Union[dict[str, Any], object],
|
|
93
64
|
parent_object: Optional[dict[str, Any]] = None,
|
|
94
65
|
) -> dict[str, Any]:
|
|
95
66
|
to_object: dict[str, Any] = {}
|
|
96
67
|
if getv(from_object, ['name']) is not None:
|
|
97
|
-
setv(to_object, ['name'], getv(from_object, ['name']))
|
|
98
|
-
|
|
99
|
-
if getv(from_object, ['display_name']) is not None:
|
|
100
|
-
setv(to_object, ['displayName'], getv(from_object, ['display_name']))
|
|
101
|
-
|
|
102
|
-
if getv(from_object, ['mime_type']) is not None:
|
|
103
|
-
setv(to_object, ['mimeType'], getv(from_object, ['mime_type']))
|
|
104
|
-
|
|
105
|
-
if getv(from_object, ['size_bytes']) is not None:
|
|
106
|
-
setv(to_object, ['sizeBytes'], getv(from_object, ['size_bytes']))
|
|
107
|
-
|
|
108
|
-
if getv(from_object, ['create_time']) is not None:
|
|
109
|
-
setv(to_object, ['createTime'], getv(from_object, ['create_time']))
|
|
110
|
-
|
|
111
|
-
if getv(from_object, ['expiration_time']) is not None:
|
|
112
|
-
setv(to_object, ['expirationTime'], getv(from_object, ['expiration_time']))
|
|
113
|
-
|
|
114
|
-
if getv(from_object, ['update_time']) is not None:
|
|
115
|
-
setv(to_object, ['updateTime'], getv(from_object, ['update_time']))
|
|
116
|
-
|
|
117
|
-
if getv(from_object, ['sha256_hash']) is not None:
|
|
118
|
-
setv(to_object, ['sha256Hash'], getv(from_object, ['sha256_hash']))
|
|
119
|
-
|
|
120
|
-
if getv(from_object, ['uri']) is not None:
|
|
121
|
-
setv(to_object, ['uri'], getv(from_object, ['uri']))
|
|
122
|
-
|
|
123
|
-
if getv(from_object, ['download_uri']) is not None:
|
|
124
|
-
setv(to_object, ['downloadUri'], getv(from_object, ['download_uri']))
|
|
125
|
-
|
|
126
|
-
if getv(from_object, ['state']) is not None:
|
|
127
|
-
setv(to_object, ['state'], getv(from_object, ['state']))
|
|
128
|
-
|
|
129
|
-
if getv(from_object, ['source']) is not None:
|
|
130
|
-
setv(to_object, ['source'], getv(from_object, ['source']))
|
|
131
|
-
|
|
132
|
-
if getv(from_object, ['video_metadata']) is not None:
|
|
133
|
-
setv(to_object, ['videoMetadata'], getv(from_object, ['video_metadata']))
|
|
134
|
-
|
|
135
|
-
if getv(from_object, ['error']) is not None:
|
|
136
68
|
setv(
|
|
137
|
-
to_object,
|
|
138
|
-
['error'],
|
|
139
|
-
_FileStatus_to_mldev(getv(from_object, ['error']), to_object),
|
|
69
|
+
to_object, ['_url', 'file'], t.t_file_name(getv(from_object, ['name']))
|
|
140
70
|
)
|
|
141
71
|
|
|
142
72
|
return to_object
|
|
143
73
|
|
|
144
74
|
|
|
145
|
-
def
|
|
75
|
+
def _DeleteFileResponse_from_mldev(
|
|
146
76
|
from_object: Union[dict[str, Any], object],
|
|
147
77
|
parent_object: Optional[dict[str, Any]] = None,
|
|
148
78
|
) -> dict[str, Any]:
|
|
149
79
|
to_object: dict[str, Any] = {}
|
|
150
|
-
if getv(from_object, ['
|
|
80
|
+
if getv(from_object, ['sdkHttpResponse']) is not None:
|
|
151
81
|
setv(
|
|
152
|
-
to_object,
|
|
153
|
-
['file'],
|
|
154
|
-
_File_to_mldev(getv(from_object, ['file']), to_object),
|
|
82
|
+
to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
|
|
155
83
|
)
|
|
156
84
|
|
|
157
|
-
if getv(from_object, ['config']) is not None:
|
|
158
|
-
setv(to_object, ['config'], getv(from_object, ['config']))
|
|
159
|
-
|
|
160
85
|
return to_object
|
|
161
86
|
|
|
162
87
|
|
|
@@ -170,95 +95,37 @@ def _GetFileParameters_to_mldev(
|
|
|
170
95
|
to_object, ['_url', 'file'], t.t_file_name(getv(from_object, ['name']))
|
|
171
96
|
)
|
|
172
97
|
|
|
173
|
-
if getv(from_object, ['config']) is not None:
|
|
174
|
-
setv(to_object, ['config'], getv(from_object, ['config']))
|
|
175
|
-
|
|
176
98
|
return to_object
|
|
177
99
|
|
|
178
100
|
|
|
179
|
-
def
|
|
101
|
+
def _ListFilesConfig_to_mldev(
|
|
180
102
|
from_object: Union[dict[str, Any], object],
|
|
181
103
|
parent_object: Optional[dict[str, Any]] = None,
|
|
182
104
|
) -> dict[str, Any]:
|
|
183
105
|
to_object: dict[str, Any] = {}
|
|
184
|
-
|
|
106
|
+
|
|
107
|
+
if getv(from_object, ['page_size']) is not None:
|
|
185
108
|
setv(
|
|
186
|
-
|
|
109
|
+
parent_object, ['_query', 'pageSize'], getv(from_object, ['page_size'])
|
|
187
110
|
)
|
|
188
111
|
|
|
189
|
-
if getv(from_object, ['
|
|
190
|
-
setv(
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
def _FileStatus_from_mldev(
|
|
196
|
-
from_object: Union[dict[str, Any], object],
|
|
197
|
-
parent_object: Optional[dict[str, Any]] = None,
|
|
198
|
-
) -> dict[str, Any]:
|
|
199
|
-
to_object: dict[str, Any] = {}
|
|
200
|
-
if getv(from_object, ['details']) is not None:
|
|
201
|
-
setv(to_object, ['details'], getv(from_object, ['details']))
|
|
202
|
-
|
|
203
|
-
if getv(from_object, ['message']) is not None:
|
|
204
|
-
setv(to_object, ['message'], getv(from_object, ['message']))
|
|
205
|
-
|
|
206
|
-
if getv(from_object, ['code']) is not None:
|
|
207
|
-
setv(to_object, ['code'], getv(from_object, ['code']))
|
|
112
|
+
if getv(from_object, ['page_token']) is not None:
|
|
113
|
+
setv(
|
|
114
|
+
parent_object,
|
|
115
|
+
['_query', 'pageToken'],
|
|
116
|
+
getv(from_object, ['page_token']),
|
|
117
|
+
)
|
|
208
118
|
|
|
209
119
|
return to_object
|
|
210
120
|
|
|
211
121
|
|
|
212
|
-
def
|
|
122
|
+
def _ListFilesParameters_to_mldev(
|
|
213
123
|
from_object: Union[dict[str, Any], object],
|
|
214
124
|
parent_object: Optional[dict[str, Any]] = None,
|
|
215
125
|
) -> dict[str, Any]:
|
|
216
126
|
to_object: dict[str, Any] = {}
|
|
217
|
-
if getv(from_object, ['
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
if getv(from_object, ['displayName']) is not None:
|
|
221
|
-
setv(to_object, ['display_name'], getv(from_object, ['displayName']))
|
|
222
|
-
|
|
223
|
-
if getv(from_object, ['mimeType']) is not None:
|
|
224
|
-
setv(to_object, ['mime_type'], getv(from_object, ['mimeType']))
|
|
225
|
-
|
|
226
|
-
if getv(from_object, ['sizeBytes']) is not None:
|
|
227
|
-
setv(to_object, ['size_bytes'], getv(from_object, ['sizeBytes']))
|
|
228
|
-
|
|
229
|
-
if getv(from_object, ['createTime']) is not None:
|
|
230
|
-
setv(to_object, ['create_time'], getv(from_object, ['createTime']))
|
|
231
|
-
|
|
232
|
-
if getv(from_object, ['expirationTime']) is not None:
|
|
233
|
-
setv(to_object, ['expiration_time'], getv(from_object, ['expirationTime']))
|
|
234
|
-
|
|
235
|
-
if getv(from_object, ['updateTime']) is not None:
|
|
236
|
-
setv(to_object, ['update_time'], getv(from_object, ['updateTime']))
|
|
237
|
-
|
|
238
|
-
if getv(from_object, ['sha256Hash']) is not None:
|
|
239
|
-
setv(to_object, ['sha256_hash'], getv(from_object, ['sha256Hash']))
|
|
240
|
-
|
|
241
|
-
if getv(from_object, ['uri']) is not None:
|
|
242
|
-
setv(to_object, ['uri'], getv(from_object, ['uri']))
|
|
243
|
-
|
|
244
|
-
if getv(from_object, ['downloadUri']) is not None:
|
|
245
|
-
setv(to_object, ['download_uri'], getv(from_object, ['downloadUri']))
|
|
246
|
-
|
|
247
|
-
if getv(from_object, ['state']) is not None:
|
|
248
|
-
setv(to_object, ['state'], getv(from_object, ['state']))
|
|
249
|
-
|
|
250
|
-
if getv(from_object, ['source']) is not None:
|
|
251
|
-
setv(to_object, ['source'], getv(from_object, ['source']))
|
|
252
|
-
|
|
253
|
-
if getv(from_object, ['videoMetadata']) is not None:
|
|
254
|
-
setv(to_object, ['video_metadata'], getv(from_object, ['videoMetadata']))
|
|
255
|
-
|
|
256
|
-
if getv(from_object, ['error']) is not None:
|
|
257
|
-
setv(
|
|
258
|
-
to_object,
|
|
259
|
-
['error'],
|
|
260
|
-
_FileStatus_from_mldev(getv(from_object, ['error']), to_object),
|
|
261
|
-
)
|
|
127
|
+
if getv(from_object, ['config']) is not None:
|
|
128
|
+
_ListFilesConfig_to_mldev(getv(from_object, ['config']), to_object)
|
|
262
129
|
|
|
263
130
|
return to_object
|
|
264
131
|
|
|
@@ -277,40 +144,7 @@ def _ListFilesResponse_from_mldev(
|
|
|
277
144
|
setv(to_object, ['next_page_token'], getv(from_object, ['nextPageToken']))
|
|
278
145
|
|
|
279
146
|
if getv(from_object, ['files']) is not None:
|
|
280
|
-
setv(
|
|
281
|
-
to_object,
|
|
282
|
-
['files'],
|
|
283
|
-
[
|
|
284
|
-
_File_from_mldev(item, to_object)
|
|
285
|
-
for item in getv(from_object, ['files'])
|
|
286
|
-
],
|
|
287
|
-
)
|
|
288
|
-
|
|
289
|
-
return to_object
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
def _CreateFileResponse_from_mldev(
|
|
293
|
-
from_object: Union[dict[str, Any], object],
|
|
294
|
-
parent_object: Optional[dict[str, Any]] = None,
|
|
295
|
-
) -> dict[str, Any]:
|
|
296
|
-
to_object: dict[str, Any] = {}
|
|
297
|
-
if getv(from_object, ['sdkHttpResponse']) is not None:
|
|
298
|
-
setv(
|
|
299
|
-
to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
|
|
300
|
-
)
|
|
301
|
-
|
|
302
|
-
return to_object
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
def _DeleteFileResponse_from_mldev(
|
|
306
|
-
from_object: Union[dict[str, Any], object],
|
|
307
|
-
parent_object: Optional[dict[str, Any]] = None,
|
|
308
|
-
) -> dict[str, Any]:
|
|
309
|
-
to_object: dict[str, Any] = {}
|
|
310
|
-
if getv(from_object, ['sdkHttpResponse']) is not None:
|
|
311
|
-
setv(
|
|
312
|
-
to_object, ['sdk_http_response'], getv(from_object, ['sdkHttpResponse'])
|
|
313
|
-
)
|
|
147
|
+
setv(to_object, ['files'], [item for item in getv(from_object, ['files'])])
|
|
314
148
|
|
|
315
149
|
return to_object
|
|
316
150
|
|
|
@@ -320,23 +154,6 @@ class Files(_api_module.BaseModule):
|
|
|
320
154
|
def _list(
|
|
321
155
|
self, *, config: Optional[types.ListFilesConfigOrDict] = None
|
|
322
156
|
) -> types.ListFilesResponse:
|
|
323
|
-
"""Lists all files from the service.
|
|
324
|
-
|
|
325
|
-
Args:
|
|
326
|
-
config (ListFilesConfig): Optional, configuration for the list method.
|
|
327
|
-
|
|
328
|
-
Returns:
|
|
329
|
-
ListFilesResponse: The response for the list method.
|
|
330
|
-
|
|
331
|
-
Usage:
|
|
332
|
-
|
|
333
|
-
.. code-block:: python
|
|
334
|
-
|
|
335
|
-
pager = client.files.list(config={'page_size': 10})
|
|
336
|
-
for file in pager.page:
|
|
337
|
-
print(file.name)
|
|
338
|
-
"""
|
|
339
|
-
|
|
340
157
|
parameter_model = types._ListFilesParameters(
|
|
341
158
|
config=config,
|
|
342
159
|
)
|
|
@@ -372,7 +189,7 @@ class Files(_api_module.BaseModule):
|
|
|
372
189
|
|
|
373
190
|
response = self._api_client.request('get', path, request_dict, http_options)
|
|
374
191
|
|
|
375
|
-
response_dict =
|
|
192
|
+
response_dict = {} if not response.body else json.loads(response.body)
|
|
376
193
|
|
|
377
194
|
if not self._api_client.vertexai:
|
|
378
195
|
response_dict = _ListFilesResponse_from_mldev(response_dict)
|
|
@@ -437,7 +254,7 @@ class Files(_api_module.BaseModule):
|
|
|
437
254
|
self._api_client._verify_response(return_value)
|
|
438
255
|
return return_value
|
|
439
256
|
|
|
440
|
-
response_dict =
|
|
257
|
+
response_dict = {} if not response.body else json.loads(response.body)
|
|
441
258
|
|
|
442
259
|
if not self._api_client.vertexai:
|
|
443
260
|
response_dict = _CreateFileResponse_from_mldev(response_dict)
|
|
@@ -505,10 +322,7 @@ class Files(_api_module.BaseModule):
|
|
|
505
322
|
|
|
506
323
|
response = self._api_client.request('get', path, request_dict, http_options)
|
|
507
324
|
|
|
508
|
-
response_dict =
|
|
509
|
-
|
|
510
|
-
if not self._api_client.vertexai:
|
|
511
|
-
response_dict = _File_from_mldev(response_dict)
|
|
325
|
+
response_dict = {} if not response.body else json.loads(response.body)
|
|
512
326
|
|
|
513
327
|
return_value = types.File._from_response(
|
|
514
328
|
response=response_dict, kwargs=parameter_model.model_dump()
|
|
@@ -574,7 +388,7 @@ class Files(_api_module.BaseModule):
|
|
|
574
388
|
'delete', path, request_dict, http_options
|
|
575
389
|
)
|
|
576
390
|
|
|
577
|
-
response_dict =
|
|
391
|
+
response_dict = {} if not response.body else json.loads(response.body)
|
|
578
392
|
|
|
579
393
|
if not self._api_client.vertexai:
|
|
580
394
|
response_dict = _DeleteFileResponse_from_mldev(response_dict)
|
|
@@ -588,6 +402,34 @@ class Files(_api_module.BaseModule):
|
|
|
588
402
|
self._api_client._verify_response(return_value)
|
|
589
403
|
return return_value
|
|
590
404
|
|
|
405
|
+
def list(
|
|
406
|
+
self, *, config: Optional[types.ListFilesConfigOrDict] = None
|
|
407
|
+
) -> Pager[types.File]:
|
|
408
|
+
"""Lists all files from the service.
|
|
409
|
+
|
|
410
|
+
Args:
|
|
411
|
+
config (ListFilesConfig): Optional, configuration for the list method.
|
|
412
|
+
|
|
413
|
+
Returns:
|
|
414
|
+
A Pager object that contains one page of files. When iterating over
|
|
415
|
+
the pager, it automatically fetches the next page if there are more.
|
|
416
|
+
|
|
417
|
+
Usage:
|
|
418
|
+
|
|
419
|
+
.. code-block:: python
|
|
420
|
+
|
|
421
|
+
for file in client.files.list(config={'page_size': 10}):
|
|
422
|
+
print(file.name)
|
|
423
|
+
"""
|
|
424
|
+
|
|
425
|
+
list_request = self._list
|
|
426
|
+
return Pager(
|
|
427
|
+
'files',
|
|
428
|
+
list_request,
|
|
429
|
+
self._list(config=config),
|
|
430
|
+
config,
|
|
431
|
+
)
|
|
432
|
+
|
|
591
433
|
def upload(
|
|
592
434
|
self,
|
|
593
435
|
*,
|
|
@@ -624,54 +466,13 @@ class Files(_api_module.BaseModule):
|
|
|
624
466
|
if file_obj.name is not None and not file_obj.name.startswith('files/'):
|
|
625
467
|
file_obj.name = f'files/{file_obj.name}'
|
|
626
468
|
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
if 'b' not in file.mode:
|
|
635
|
-
raise ValueError('The file must be opened in binary mode.')
|
|
636
|
-
offset = file.tell()
|
|
637
|
-
file.seek(0, os.SEEK_END)
|
|
638
|
-
file_obj.size_bytes = file.tell() - offset
|
|
639
|
-
file.seek(offset, os.SEEK_SET)
|
|
640
|
-
else:
|
|
641
|
-
fs_path = os.fspath(file)
|
|
642
|
-
if not fs_path or not os.path.isfile(fs_path):
|
|
643
|
-
raise FileNotFoundError(f'{file} is not a valid file path.')
|
|
644
|
-
file_obj.size_bytes = os.path.getsize(fs_path)
|
|
645
|
-
if file_obj.mime_type is None:
|
|
646
|
-
file_obj.mime_type, _ = mimetypes.guess_type(fs_path)
|
|
647
|
-
if file_obj.mime_type is None:
|
|
648
|
-
raise ValueError(
|
|
649
|
-
'Unknown mime type: Could not determine the mimetype for your'
|
|
650
|
-
' file\n please set the `mime_type` argument'
|
|
651
|
-
)
|
|
652
|
-
|
|
653
|
-
http_options: types.HttpOptions
|
|
654
|
-
if config_model and config_model.http_options:
|
|
655
|
-
http_options = config_model.http_options
|
|
656
|
-
http_options.api_version = ''
|
|
657
|
-
http_options.headers = {
|
|
658
|
-
'Content-Type': 'application/json',
|
|
659
|
-
'X-Goog-Upload-Protocol': 'resumable',
|
|
660
|
-
'X-Goog-Upload-Command': 'start',
|
|
661
|
-
'X-Goog-Upload-Header-Content-Length': f'{file_obj.size_bytes}',
|
|
662
|
-
'X-Goog-Upload-Header-Content-Type': f'{file_obj.mime_type}',
|
|
663
|
-
}
|
|
664
|
-
else:
|
|
665
|
-
http_options = types.HttpOptions(
|
|
666
|
-
api_version='',
|
|
667
|
-
headers={
|
|
668
|
-
'Content-Type': 'application/json',
|
|
669
|
-
'X-Goog-Upload-Protocol': 'resumable',
|
|
670
|
-
'X-Goog-Upload-Command': 'start',
|
|
671
|
-
'X-Goog-Upload-Header-Content-Length': f'{file_obj.size_bytes}',
|
|
672
|
-
'X-Goog-Upload-Header-Content-Type': f'{file_obj.mime_type}',
|
|
673
|
-
},
|
|
674
|
-
)
|
|
469
|
+
http_options, size_bytes, mime_type = _extra_utils.prepare_resumable_upload(
|
|
470
|
+
file,
|
|
471
|
+
user_http_options=config_model.http_options,
|
|
472
|
+
user_mime_type=config_model.mime_type,
|
|
473
|
+
)
|
|
474
|
+
file_obj.size_bytes = size_bytes
|
|
475
|
+
file_obj.mime_type = mime_type
|
|
675
476
|
response = self._create(
|
|
676
477
|
file=file_obj,
|
|
677
478
|
config=types.CreateFileConfig(
|
|
@@ -695,25 +496,16 @@ class Files(_api_module.BaseModule):
|
|
|
695
496
|
file, upload_url, file_obj.size_bytes, http_options=http_options
|
|
696
497
|
)
|
|
697
498
|
else:
|
|
499
|
+
fs_path = os.fspath(file)
|
|
698
500
|
return_file = self._api_client.upload_file(
|
|
699
501
|
fs_path, upload_url, file_obj.size_bytes, http_options=http_options
|
|
700
502
|
)
|
|
701
503
|
|
|
702
504
|
return types.File._from_response(
|
|
703
|
-
response=
|
|
505
|
+
response=return_file.json['file'],
|
|
704
506
|
kwargs=config_model.model_dump() if config else {},
|
|
705
507
|
)
|
|
706
508
|
|
|
707
|
-
def list(
|
|
708
|
-
self, *, config: Optional[types.ListFilesConfigOrDict] = None
|
|
709
|
-
) -> Pager[types.File]:
|
|
710
|
-
return Pager(
|
|
711
|
-
'files',
|
|
712
|
-
self._list,
|
|
713
|
-
self._list(config=config),
|
|
714
|
-
config,
|
|
715
|
-
)
|
|
716
|
-
|
|
717
509
|
def download(
|
|
718
510
|
self,
|
|
719
511
|
*,
|
|
@@ -801,23 +593,6 @@ class AsyncFiles(_api_module.BaseModule):
|
|
|
801
593
|
async def _list(
|
|
802
594
|
self, *, config: Optional[types.ListFilesConfigOrDict] = None
|
|
803
595
|
) -> types.ListFilesResponse:
|
|
804
|
-
"""Lists all files from the service.
|
|
805
|
-
|
|
806
|
-
Args:
|
|
807
|
-
config (ListFilesConfig): Optional, configuration for the list method.
|
|
808
|
-
|
|
809
|
-
Returns:
|
|
810
|
-
ListFilesResponse: The response for the list method.
|
|
811
|
-
|
|
812
|
-
Usage:
|
|
813
|
-
|
|
814
|
-
.. code-block:: python
|
|
815
|
-
|
|
816
|
-
pager = await client.aio.files.list(config={'page_size': 10})
|
|
817
|
-
for file in pager.page:
|
|
818
|
-
print(file.name)
|
|
819
|
-
"""
|
|
820
|
-
|
|
821
596
|
parameter_model = types._ListFilesParameters(
|
|
822
597
|
config=config,
|
|
823
598
|
)
|
|
@@ -855,7 +630,7 @@ class AsyncFiles(_api_module.BaseModule):
|
|
|
855
630
|
'get', path, request_dict, http_options
|
|
856
631
|
)
|
|
857
632
|
|
|
858
|
-
response_dict =
|
|
633
|
+
response_dict = {} if not response.body else json.loads(response.body)
|
|
859
634
|
|
|
860
635
|
if not self._api_client.vertexai:
|
|
861
636
|
response_dict = _ListFilesResponse_from_mldev(response_dict)
|
|
@@ -920,7 +695,7 @@ class AsyncFiles(_api_module.BaseModule):
|
|
|
920
695
|
self._api_client._verify_response(return_value)
|
|
921
696
|
return return_value
|
|
922
697
|
|
|
923
|
-
response_dict =
|
|
698
|
+
response_dict = {} if not response.body else json.loads(response.body)
|
|
924
699
|
|
|
925
700
|
if not self._api_client.vertexai:
|
|
926
701
|
response_dict = _CreateFileResponse_from_mldev(response_dict)
|
|
@@ -990,10 +765,7 @@ class AsyncFiles(_api_module.BaseModule):
|
|
|
990
765
|
'get', path, request_dict, http_options
|
|
991
766
|
)
|
|
992
767
|
|
|
993
|
-
response_dict =
|
|
994
|
-
|
|
995
|
-
if not self._api_client.vertexai:
|
|
996
|
-
response_dict = _File_from_mldev(response_dict)
|
|
768
|
+
response_dict = {} if not response.body else json.loads(response.body)
|
|
997
769
|
|
|
998
770
|
return_value = types.File._from_response(
|
|
999
771
|
response=response_dict, kwargs=parameter_model.model_dump()
|
|
@@ -1059,7 +831,7 @@ class AsyncFiles(_api_module.BaseModule):
|
|
|
1059
831
|
'delete', path, request_dict, http_options
|
|
1060
832
|
)
|
|
1061
833
|
|
|
1062
|
-
response_dict =
|
|
834
|
+
response_dict = {} if not response.body else json.loads(response.body)
|
|
1063
835
|
|
|
1064
836
|
if not self._api_client.vertexai:
|
|
1065
837
|
response_dict = _DeleteFileResponse_from_mldev(response_dict)
|
|
@@ -1073,6 +845,34 @@ class AsyncFiles(_api_module.BaseModule):
|
|
|
1073
845
|
self._api_client._verify_response(return_value)
|
|
1074
846
|
return return_value
|
|
1075
847
|
|
|
848
|
+
async def list(
|
|
849
|
+
self, *, config: Optional[types.ListFilesConfigOrDict] = None
|
|
850
|
+
) -> AsyncPager[types.File]:
|
|
851
|
+
"""Lists all files from the service asynchronously.
|
|
852
|
+
|
|
853
|
+
Args:
|
|
854
|
+
config (ListFilesConfig): Optional, configuration for the list method.
|
|
855
|
+
|
|
856
|
+
Returns:
|
|
857
|
+
A Pager object that contains one page of files. When iterating over
|
|
858
|
+
the pager, it automatically fetches the next page if there are more.
|
|
859
|
+
|
|
860
|
+
Usage:
|
|
861
|
+
|
|
862
|
+
.. code-block:: python
|
|
863
|
+
|
|
864
|
+
async for file in await client.aio.files.list(config={'page_size': 10}):
|
|
865
|
+
print(file.name)
|
|
866
|
+
"""
|
|
867
|
+
|
|
868
|
+
list_request = self._list
|
|
869
|
+
return AsyncPager(
|
|
870
|
+
'files',
|
|
871
|
+
list_request,
|
|
872
|
+
await self._list(config=config),
|
|
873
|
+
config,
|
|
874
|
+
)
|
|
875
|
+
|
|
1076
876
|
async def upload(
|
|
1077
877
|
self,
|
|
1078
878
|
*,
|
|
@@ -1109,54 +909,13 @@ class AsyncFiles(_api_module.BaseModule):
|
|
|
1109
909
|
if file_obj.name is not None and not file_obj.name.startswith('files/'):
|
|
1110
910
|
file_obj.name = f'files/{file_obj.name}'
|
|
1111
911
|
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
if 'b' not in file.mode:
|
|
1120
|
-
raise ValueError('The file must be opened in binary mode.')
|
|
1121
|
-
offset = file.tell()
|
|
1122
|
-
file.seek(0, os.SEEK_END)
|
|
1123
|
-
file_obj.size_bytes = file.tell() - offset
|
|
1124
|
-
file.seek(offset, os.SEEK_SET)
|
|
1125
|
-
else:
|
|
1126
|
-
fs_path = os.fspath(file)
|
|
1127
|
-
if not fs_path or not os.path.isfile(fs_path):
|
|
1128
|
-
raise FileNotFoundError(f'{file} is not a valid file path.')
|
|
1129
|
-
file_obj.size_bytes = os.path.getsize(fs_path)
|
|
1130
|
-
if file_obj.mime_type is None:
|
|
1131
|
-
file_obj.mime_type, _ = mimetypes.guess_type(fs_path)
|
|
1132
|
-
if file_obj.mime_type is None:
|
|
1133
|
-
raise ValueError(
|
|
1134
|
-
'Unknown mime type: Could not determine the mimetype for your'
|
|
1135
|
-
' file\n please set the `mime_type` argument'
|
|
1136
|
-
)
|
|
1137
|
-
|
|
1138
|
-
http_options: types.HttpOptions
|
|
1139
|
-
if config_model and config_model.http_options:
|
|
1140
|
-
http_options = config_model.http_options
|
|
1141
|
-
http_options.api_version = ''
|
|
1142
|
-
http_options.headers = {
|
|
1143
|
-
'Content-Type': 'application/json',
|
|
1144
|
-
'X-Goog-Upload-Protocol': 'resumable',
|
|
1145
|
-
'X-Goog-Upload-Command': 'start',
|
|
1146
|
-
'X-Goog-Upload-Header-Content-Length': f'{file_obj.size_bytes}',
|
|
1147
|
-
'X-Goog-Upload-Header-Content-Type': f'{file_obj.mime_type}',
|
|
1148
|
-
}
|
|
1149
|
-
else:
|
|
1150
|
-
http_options = types.HttpOptions(
|
|
1151
|
-
api_version='',
|
|
1152
|
-
headers={
|
|
1153
|
-
'Content-Type': 'application/json',
|
|
1154
|
-
'X-Goog-Upload-Protocol': 'resumable',
|
|
1155
|
-
'X-Goog-Upload-Command': 'start',
|
|
1156
|
-
'X-Goog-Upload-Header-Content-Length': f'{file_obj.size_bytes}',
|
|
1157
|
-
'X-Goog-Upload-Header-Content-Type': f'{file_obj.mime_type}',
|
|
1158
|
-
},
|
|
1159
|
-
)
|
|
912
|
+
http_options, size_bytes, mime_type = _extra_utils.prepare_resumable_upload(
|
|
913
|
+
file,
|
|
914
|
+
user_http_options=config_model.http_options,
|
|
915
|
+
user_mime_type=config_model.mime_type,
|
|
916
|
+
)
|
|
917
|
+
file_obj.size_bytes = size_bytes
|
|
918
|
+
file_obj.mime_type = mime_type
|
|
1160
919
|
response = await self._create(
|
|
1161
920
|
file=file_obj,
|
|
1162
921
|
config=types.CreateFileConfig(
|
|
@@ -1185,25 +944,16 @@ class AsyncFiles(_api_module.BaseModule):
|
|
|
1185
944
|
file, upload_url, file_obj.size_bytes, http_options=http_options
|
|
1186
945
|
)
|
|
1187
946
|
else:
|
|
947
|
+
fs_path = os.fspath(file)
|
|
1188
948
|
return_file = await self._api_client.async_upload_file(
|
|
1189
949
|
fs_path, upload_url, file_obj.size_bytes, http_options=http_options
|
|
1190
950
|
)
|
|
1191
951
|
|
|
1192
952
|
return types.File._from_response(
|
|
1193
|
-
response=
|
|
953
|
+
response=return_file.json['file'],
|
|
1194
954
|
kwargs=config_model.model_dump() if config else {},
|
|
1195
955
|
)
|
|
1196
956
|
|
|
1197
|
-
async def list(
|
|
1198
|
-
self, *, config: Optional[types.ListFilesConfigOrDict] = None
|
|
1199
|
-
) -> AsyncPager[types.File]:
|
|
1200
|
-
return AsyncPager(
|
|
1201
|
-
'files',
|
|
1202
|
-
self._list,
|
|
1203
|
-
await self._list(config=config),
|
|
1204
|
-
config,
|
|
1205
|
-
)
|
|
1206
|
-
|
|
1207
957
|
async def download(
|
|
1208
958
|
self,
|
|
1209
959
|
*,
|