studyfetch-sdk 0.1.0a14__py3-none-any.whl → 0.1.0a16__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.
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "studyfetch_sdk"
4
- __version__ = "0.1.0-alpha.14" # x-release-please-version
4
+ __version__ = "0.1.0-alpha.16" # x-release-please-version
@@ -56,7 +56,6 @@ class ComponentsResource(SyncAPIResource):
56
56
  *,
57
57
  config: component_create_params.Config,
58
58
  name: str,
59
- origin: Literal["chat", "classroom", "upload", "console", "api"],
60
59
  type: Literal[
61
60
  "chat", "flashcards", "scenarios", "practice_test", "audio_recap", "tutor_me", "explainers", "uploads"
62
61
  ],
@@ -77,8 +76,6 @@ class ComponentsResource(SyncAPIResource):
77
76
 
78
77
  name: Name of the component
79
78
 
80
- origin: Origin of the component
81
-
82
79
  type: Type of component to create
83
80
 
84
81
  description: Component description
@@ -99,7 +96,6 @@ class ComponentsResource(SyncAPIResource):
99
96
  {
100
97
  "config": config,
101
98
  "name": name,
102
- "origin": origin,
103
99
  "type": type,
104
100
  "description": description,
105
101
  "metadata": metadata,
@@ -448,7 +444,6 @@ class AsyncComponentsResource(AsyncAPIResource):
448
444
  *,
449
445
  config: component_create_params.Config,
450
446
  name: str,
451
- origin: Literal["chat", "classroom", "upload", "console", "api"],
452
447
  type: Literal[
453
448
  "chat", "flashcards", "scenarios", "practice_test", "audio_recap", "tutor_me", "explainers", "uploads"
454
449
  ],
@@ -469,8 +464,6 @@ class AsyncComponentsResource(AsyncAPIResource):
469
464
 
470
465
  name: Name of the component
471
466
 
472
- origin: Origin of the component
473
-
474
467
  type: Type of component to create
475
468
 
476
469
  description: Component description
@@ -491,7 +484,6 @@ class AsyncComponentsResource(AsyncAPIResource):
491
484
  {
492
485
  "config": config,
493
486
  "name": name,
494
- "origin": origin,
495
487
  "type": type,
496
488
  "description": description,
497
489
  "metadata": metadata,
@@ -2,6 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from typing import List
6
+
5
7
  import httpx
6
8
 
7
9
  from .bulk import (
@@ -31,7 +33,12 @@ from .upload import (
31
33
  from ...._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven
32
34
  from ...._utils import maybe_transform, async_maybe_transform
33
35
  from ...._compat import cached_property
34
- from ....types.v1 import material_list_params, material_create_params, material_get_download_url_params
36
+ from ....types.v1 import (
37
+ material_list_params,
38
+ material_create_params,
39
+ material_search_params,
40
+ material_get_download_url_params,
41
+ )
35
42
  from ...._resource import SyncAPIResource, AsyncAPIResource
36
43
  from ...._response import (
37
44
  to_raw_response_wrapper,
@@ -418,6 +425,10 @@ class MaterialsResource(SyncAPIResource):
418
425
  def search(
419
426
  self,
420
427
  *,
428
+ query: str,
429
+ folder_ids: List[str] | NotGiven = NOT_GIVEN,
430
+ material_ids: List[str] | NotGiven = NOT_GIVEN,
431
+ top_k: float | NotGiven = NOT_GIVEN,
421
432
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
422
433
  # The extra values given here take precedence over values defined on the client or passed to this method.
423
434
  extra_headers: Headers | None = None,
@@ -425,9 +436,39 @@ class MaterialsResource(SyncAPIResource):
425
436
  extra_body: Body | None = None,
426
437
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
427
438
  ) -> None:
439
+ """
440
+ Search materials using RAG
441
+
442
+ Args:
443
+ query: Search query
444
+
445
+ folder_ids: Optional: Limit search to materials within specific folders (includes
446
+ subfolders)
447
+
448
+ material_ids: Optional: Limit search to specific material IDs
449
+
450
+ top_k: Number of results to return (default: 5)
451
+
452
+ extra_headers: Send extra headers
453
+
454
+ extra_query: Add additional query parameters to the request
455
+
456
+ extra_body: Add additional JSON properties to the request
457
+
458
+ timeout: Override the client-level default timeout for this request, in seconds
459
+ """
428
460
  extra_headers = {"Accept": "*/*", **(extra_headers or {})}
429
461
  return self._post(
430
462
  "/api/v1/materials/search",
463
+ body=maybe_transform(
464
+ {
465
+ "query": query,
466
+ "folder_ids": folder_ids,
467
+ "material_ids": material_ids,
468
+ "top_k": top_k,
469
+ },
470
+ material_search_params.MaterialSearchParams,
471
+ ),
431
472
  options=make_request_options(
432
473
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
433
474
  ),
@@ -807,6 +848,10 @@ class AsyncMaterialsResource(AsyncAPIResource):
807
848
  async def search(
808
849
  self,
809
850
  *,
851
+ query: str,
852
+ folder_ids: List[str] | NotGiven = NOT_GIVEN,
853
+ material_ids: List[str] | NotGiven = NOT_GIVEN,
854
+ top_k: float | NotGiven = NOT_GIVEN,
810
855
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
811
856
  # The extra values given here take precedence over values defined on the client or passed to this method.
812
857
  extra_headers: Headers | None = None,
@@ -814,9 +859,39 @@ class AsyncMaterialsResource(AsyncAPIResource):
814
859
  extra_body: Body | None = None,
815
860
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
816
861
  ) -> None:
862
+ """
863
+ Search materials using RAG
864
+
865
+ Args:
866
+ query: Search query
867
+
868
+ folder_ids: Optional: Limit search to materials within specific folders (includes
869
+ subfolders)
870
+
871
+ material_ids: Optional: Limit search to specific material IDs
872
+
873
+ top_k: Number of results to return (default: 5)
874
+
875
+ extra_headers: Send extra headers
876
+
877
+ extra_query: Add additional query parameters to the request
878
+
879
+ extra_body: Add additional JSON properties to the request
880
+
881
+ timeout: Override the client-level default timeout for this request, in seconds
882
+ """
817
883
  extra_headers = {"Accept": "*/*", **(extra_headers or {})}
818
884
  return await self._post(
819
885
  "/api/v1/materials/search",
886
+ body=await async_maybe_transform(
887
+ {
888
+ "query": query,
889
+ "folder_ids": folder_ids,
890
+ "material_ids": material_ids,
891
+ "top_k": top_k,
892
+ },
893
+ material_search_params.MaterialSearchParams,
894
+ ),
820
895
  options=make_request_options(
821
896
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
822
897
  ),
@@ -2,9 +2,12 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from typing import Mapping, cast
6
+
5
7
  import httpx
6
8
 
7
- from ...._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven
9
+ from ...._types import NOT_GIVEN, Body, Query, Headers, NotGiven, FileTypes
10
+ from ...._utils import extract_files, maybe_transform, deepcopy_minimal, async_maybe_transform
8
11
  from ...._compat import cached_property
9
12
  from ...._resource import SyncAPIResource, AsyncAPIResource
10
13
  from ...._response import (
@@ -14,6 +17,16 @@ from ...._response import (
14
17
  async_to_streamed_response_wrapper,
15
18
  )
16
19
  from ...._base_client import make_request_options
20
+ from ....types.v1.upload import (
21
+ component_upload_url_params,
22
+ component_upload_file_params,
23
+ component_complete_upload_params,
24
+ component_get_presigned_url_params,
25
+ )
26
+ from ....types.v1.upload.component_upload_url_response import ComponentUploadURLResponse
27
+ from ....types.v1.upload.component_upload_file_response import ComponentUploadFileResponse
28
+ from ....types.v1.upload.component_complete_upload_response import ComponentCompleteUploadResponse
29
+ from ....types.v1.upload.component_get_presigned_url_response import ComponentGetPresignedURLResponse
17
30
 
18
31
  __all__ = ["ComponentResource", "AsyncComponentResource"]
19
32
 
@@ -42,15 +55,26 @@ class ComponentResource(SyncAPIResource):
42
55
  self,
43
56
  component_id: str,
44
57
  *,
58
+ material_id: str,
59
+ organization_id: str,
60
+ s3_key: str,
45
61
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
46
62
  # The extra values given here take precedence over values defined on the client or passed to this method.
47
63
  extra_headers: Headers | None = None,
48
64
  extra_query: Query | None = None,
49
65
  extra_body: Body | None = None,
50
66
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
51
- ) -> None:
67
+ ) -> ComponentCompleteUploadResponse:
52
68
  """
69
+ Complete a file upload after using presigned URL
70
+
53
71
  Args:
72
+ material_id: The ID of the material that was uploaded
73
+
74
+ organization_id: The ID of the organization
75
+
76
+ s3_key: The S3 key of the uploaded file
77
+
54
78
  extra_headers: Send extra headers
55
79
 
56
80
  extra_query: Add additional query parameters to the request
@@ -61,28 +85,49 @@ class ComponentResource(SyncAPIResource):
61
85
  """
62
86
  if not component_id:
63
87
  raise ValueError(f"Expected a non-empty value for `component_id` but received {component_id!r}")
64
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
65
88
  return self._post(
66
89
  f"/api/v1/upload/component/{component_id}/complete",
90
+ body=maybe_transform(
91
+ {
92
+ "material_id": material_id,
93
+ "organization_id": organization_id,
94
+ "s3_key": s3_key,
95
+ },
96
+ component_complete_upload_params.ComponentCompleteUploadParams,
97
+ ),
67
98
  options=make_request_options(
68
99
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
69
100
  ),
70
- cast_to=NoneType,
101
+ cast_to=ComponentCompleteUploadResponse,
71
102
  )
72
103
 
73
104
  def get_presigned_url(
74
105
  self,
75
106
  component_id: str,
76
107
  *,
108
+ content_type: str,
109
+ filename: str,
110
+ folder_id: str,
111
+ organization_id: str,
77
112
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
78
113
  # The extra values given here take precedence over values defined on the client or passed to this method.
79
114
  extra_headers: Headers | None = None,
80
115
  extra_query: Query | None = None,
81
116
  extra_body: Body | None = None,
82
117
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
83
- ) -> None:
118
+ ) -> ComponentGetPresignedURLResponse:
84
119
  """
120
+ Get a presigned URL for direct file upload
121
+
85
122
  Args:
123
+ content_type: The MIME type of the file
124
+
125
+ filename: The name of the file to upload
126
+
127
+ folder_id: The ID of the folder to upload to
128
+
129
+ organization_id: The ID of the organization
130
+
86
131
  extra_headers: Send extra headers
87
132
 
88
133
  extra_query: Add additional query parameters to the request
@@ -93,28 +138,47 @@ class ComponentResource(SyncAPIResource):
93
138
  """
94
139
  if not component_id:
95
140
  raise ValueError(f"Expected a non-empty value for `component_id` but received {component_id!r}")
96
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
97
141
  return self._post(
98
142
  f"/api/v1/upload/component/{component_id}/presigned-url",
143
+ body=maybe_transform(
144
+ {
145
+ "content_type": content_type,
146
+ "filename": filename,
147
+ "folder_id": folder_id,
148
+ "organization_id": organization_id,
149
+ },
150
+ component_get_presigned_url_params.ComponentGetPresignedURLParams,
151
+ ),
99
152
  options=make_request_options(
100
153
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
101
154
  ),
102
- cast_to=NoneType,
155
+ cast_to=ComponentGetPresignedURLResponse,
103
156
  )
104
157
 
105
158
  def upload_file(
106
159
  self,
107
160
  component_id: str,
108
161
  *,
162
+ file: FileTypes,
163
+ folder_id: str,
164
+ organization_id: str,
109
165
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
110
166
  # The extra values given here take precedence over values defined on the client or passed to this method.
111
167
  extra_headers: Headers | None = None,
112
168
  extra_query: Query | None = None,
113
169
  extra_body: Body | None = None,
114
170
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
115
- ) -> None:
171
+ ) -> ComponentUploadFileResponse:
116
172
  """
173
+ Upload a file to a component
174
+
117
175
  Args:
176
+ file: The file to upload
177
+
178
+ folder_id: The ID of the folder to upload to
179
+
180
+ organization_id: The ID of the organization
181
+
118
182
  extra_headers: Send extra headers
119
183
 
120
184
  extra_query: Add additional query parameters to the request
@@ -125,28 +189,55 @@ class ComponentResource(SyncAPIResource):
125
189
  """
126
190
  if not component_id:
127
191
  raise ValueError(f"Expected a non-empty value for `component_id` but received {component_id!r}")
128
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
192
+ body = deepcopy_minimal(
193
+ {
194
+ "file": file,
195
+ "folder_id": folder_id,
196
+ "organization_id": organization_id,
197
+ }
198
+ )
199
+ files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
200
+ # It should be noted that the actual Content-Type header that will be
201
+ # sent to the server will contain a `boundary` parameter, e.g.
202
+ # multipart/form-data; boundary=---abc--
203
+ extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
129
204
  return self._post(
130
205
  f"/api/v1/upload/component/{component_id}/file",
206
+ body=maybe_transform(body, component_upload_file_params.ComponentUploadFileParams),
207
+ files=files,
131
208
  options=make_request_options(
132
209
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
133
210
  ),
134
- cast_to=NoneType,
211
+ cast_to=ComponentUploadFileResponse,
135
212
  )
136
213
 
137
214
  def upload_url(
138
215
  self,
139
216
  component_id: str,
140
217
  *,
218
+ folder_id: str,
219
+ name: str,
220
+ organization_id: str,
221
+ url: str,
141
222
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
142
223
  # The extra values given here take precedence over values defined on the client or passed to this method.
143
224
  extra_headers: Headers | None = None,
144
225
  extra_query: Query | None = None,
145
226
  extra_body: Body | None = None,
146
227
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
147
- ) -> None:
228
+ ) -> ComponentUploadURLResponse:
148
229
  """
230
+ Upload a file from URL to a component
231
+
149
232
  Args:
233
+ folder_id: The ID of the folder to upload to
234
+
235
+ name: The name for the uploaded file
236
+
237
+ organization_id: The ID of the organization
238
+
239
+ url: The URL of the file to upload
240
+
150
241
  extra_headers: Send extra headers
151
242
 
152
243
  extra_query: Add additional query parameters to the request
@@ -157,13 +248,21 @@ class ComponentResource(SyncAPIResource):
157
248
  """
158
249
  if not component_id:
159
250
  raise ValueError(f"Expected a non-empty value for `component_id` but received {component_id!r}")
160
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
161
251
  return self._post(
162
252
  f"/api/v1/upload/component/{component_id}/url",
253
+ body=maybe_transform(
254
+ {
255
+ "folder_id": folder_id,
256
+ "name": name,
257
+ "organization_id": organization_id,
258
+ "url": url,
259
+ },
260
+ component_upload_url_params.ComponentUploadURLParams,
261
+ ),
163
262
  options=make_request_options(
164
263
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
165
264
  ),
166
- cast_to=NoneType,
265
+ cast_to=ComponentUploadURLResponse,
167
266
  )
168
267
 
169
268
 
@@ -191,15 +290,26 @@ class AsyncComponentResource(AsyncAPIResource):
191
290
  self,
192
291
  component_id: str,
193
292
  *,
293
+ material_id: str,
294
+ organization_id: str,
295
+ s3_key: str,
194
296
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
195
297
  # The extra values given here take precedence over values defined on the client or passed to this method.
196
298
  extra_headers: Headers | None = None,
197
299
  extra_query: Query | None = None,
198
300
  extra_body: Body | None = None,
199
301
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
200
- ) -> None:
302
+ ) -> ComponentCompleteUploadResponse:
201
303
  """
304
+ Complete a file upload after using presigned URL
305
+
202
306
  Args:
307
+ material_id: The ID of the material that was uploaded
308
+
309
+ organization_id: The ID of the organization
310
+
311
+ s3_key: The S3 key of the uploaded file
312
+
203
313
  extra_headers: Send extra headers
204
314
 
205
315
  extra_query: Add additional query parameters to the request
@@ -210,28 +320,49 @@ class AsyncComponentResource(AsyncAPIResource):
210
320
  """
211
321
  if not component_id:
212
322
  raise ValueError(f"Expected a non-empty value for `component_id` but received {component_id!r}")
213
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
214
323
  return await self._post(
215
324
  f"/api/v1/upload/component/{component_id}/complete",
325
+ body=await async_maybe_transform(
326
+ {
327
+ "material_id": material_id,
328
+ "organization_id": organization_id,
329
+ "s3_key": s3_key,
330
+ },
331
+ component_complete_upload_params.ComponentCompleteUploadParams,
332
+ ),
216
333
  options=make_request_options(
217
334
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
218
335
  ),
219
- cast_to=NoneType,
336
+ cast_to=ComponentCompleteUploadResponse,
220
337
  )
221
338
 
222
339
  async def get_presigned_url(
223
340
  self,
224
341
  component_id: str,
225
342
  *,
343
+ content_type: str,
344
+ filename: str,
345
+ folder_id: str,
346
+ organization_id: str,
226
347
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
227
348
  # The extra values given here take precedence over values defined on the client or passed to this method.
228
349
  extra_headers: Headers | None = None,
229
350
  extra_query: Query | None = None,
230
351
  extra_body: Body | None = None,
231
352
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
232
- ) -> None:
353
+ ) -> ComponentGetPresignedURLResponse:
233
354
  """
355
+ Get a presigned URL for direct file upload
356
+
234
357
  Args:
358
+ content_type: The MIME type of the file
359
+
360
+ filename: The name of the file to upload
361
+
362
+ folder_id: The ID of the folder to upload to
363
+
364
+ organization_id: The ID of the organization
365
+
235
366
  extra_headers: Send extra headers
236
367
 
237
368
  extra_query: Add additional query parameters to the request
@@ -242,28 +373,47 @@ class AsyncComponentResource(AsyncAPIResource):
242
373
  """
243
374
  if not component_id:
244
375
  raise ValueError(f"Expected a non-empty value for `component_id` but received {component_id!r}")
245
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
246
376
  return await self._post(
247
377
  f"/api/v1/upload/component/{component_id}/presigned-url",
378
+ body=await async_maybe_transform(
379
+ {
380
+ "content_type": content_type,
381
+ "filename": filename,
382
+ "folder_id": folder_id,
383
+ "organization_id": organization_id,
384
+ },
385
+ component_get_presigned_url_params.ComponentGetPresignedURLParams,
386
+ ),
248
387
  options=make_request_options(
249
388
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
250
389
  ),
251
- cast_to=NoneType,
390
+ cast_to=ComponentGetPresignedURLResponse,
252
391
  )
253
392
 
254
393
  async def upload_file(
255
394
  self,
256
395
  component_id: str,
257
396
  *,
397
+ file: FileTypes,
398
+ folder_id: str,
399
+ organization_id: str,
258
400
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
259
401
  # The extra values given here take precedence over values defined on the client or passed to this method.
260
402
  extra_headers: Headers | None = None,
261
403
  extra_query: Query | None = None,
262
404
  extra_body: Body | None = None,
263
405
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
264
- ) -> None:
406
+ ) -> ComponentUploadFileResponse:
265
407
  """
408
+ Upload a file to a component
409
+
266
410
  Args:
411
+ file: The file to upload
412
+
413
+ folder_id: The ID of the folder to upload to
414
+
415
+ organization_id: The ID of the organization
416
+
267
417
  extra_headers: Send extra headers
268
418
 
269
419
  extra_query: Add additional query parameters to the request
@@ -274,28 +424,55 @@ class AsyncComponentResource(AsyncAPIResource):
274
424
  """
275
425
  if not component_id:
276
426
  raise ValueError(f"Expected a non-empty value for `component_id` but received {component_id!r}")
277
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
427
+ body = deepcopy_minimal(
428
+ {
429
+ "file": file,
430
+ "folder_id": folder_id,
431
+ "organization_id": organization_id,
432
+ }
433
+ )
434
+ files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
435
+ # It should be noted that the actual Content-Type header that will be
436
+ # sent to the server will contain a `boundary` parameter, e.g.
437
+ # multipart/form-data; boundary=---abc--
438
+ extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
278
439
  return await self._post(
279
440
  f"/api/v1/upload/component/{component_id}/file",
441
+ body=await async_maybe_transform(body, component_upload_file_params.ComponentUploadFileParams),
442
+ files=files,
280
443
  options=make_request_options(
281
444
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
282
445
  ),
283
- cast_to=NoneType,
446
+ cast_to=ComponentUploadFileResponse,
284
447
  )
285
448
 
286
449
  async def upload_url(
287
450
  self,
288
451
  component_id: str,
289
452
  *,
453
+ folder_id: str,
454
+ name: str,
455
+ organization_id: str,
456
+ url: str,
290
457
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
291
458
  # The extra values given here take precedence over values defined on the client or passed to this method.
292
459
  extra_headers: Headers | None = None,
293
460
  extra_query: Query | None = None,
294
461
  extra_body: Body | None = None,
295
462
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
296
- ) -> None:
463
+ ) -> ComponentUploadURLResponse:
297
464
  """
465
+ Upload a file from URL to a component
466
+
298
467
  Args:
468
+ folder_id: The ID of the folder to upload to
469
+
470
+ name: The name for the uploaded file
471
+
472
+ organization_id: The ID of the organization
473
+
474
+ url: The URL of the file to upload
475
+
299
476
  extra_headers: Send extra headers
300
477
 
301
478
  extra_query: Add additional query parameters to the request
@@ -306,13 +483,21 @@ class AsyncComponentResource(AsyncAPIResource):
306
483
  """
307
484
  if not component_id:
308
485
  raise ValueError(f"Expected a non-empty value for `component_id` but received {component_id!r}")
309
- extra_headers = {"Accept": "*/*", **(extra_headers or {})}
310
486
  return await self._post(
311
487
  f"/api/v1/upload/component/{component_id}/url",
488
+ body=await async_maybe_transform(
489
+ {
490
+ "folder_id": folder_id,
491
+ "name": name,
492
+ "organization_id": organization_id,
493
+ "url": url,
494
+ },
495
+ component_upload_url_params.ComponentUploadURLParams,
496
+ ),
312
497
  options=make_request_options(
313
498
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
314
499
  ),
315
- cast_to=NoneType,
500
+ cast_to=ComponentUploadURLResponse,
316
501
  )
317
502
 
318
503
 
@@ -18,6 +18,7 @@ from .flashcard_rate_params import FlashcardRateParams as FlashcardRateParams
18
18
  from .embed_get_theme_params import EmbedGetThemeParams as EmbedGetThemeParams
19
19
  from .material_create_params import MaterialCreateParams as MaterialCreateParams
20
20
  from .material_list_response import MaterialListResponse as MaterialListResponse
21
+ from .material_search_params import MaterialSearchParams as MaterialSearchParams
21
22
  from .scenario_create_params import ScenarioCreateParams as ScenarioCreateParams
22
23
  from .scenario_update_params import ScenarioUpdateParams as ScenarioUpdateParams
23
24
  from .usage_get_stats_params import UsageGetStatsParams as UsageGetStatsParams
@@ -31,9 +31,6 @@ class ComponentCreateParams(TypedDict, total=False):
31
31
  name: Required[str]
32
32
  """Name of the component"""
33
33
 
34
- origin: Required[Literal["chat", "classroom", "upload", "console", "api"]]
35
- """Origin of the component"""
36
-
37
34
  type: Required[
38
35
  Literal["chat", "flashcards", "scenarios", "practice_test", "audio_recap", "tutor_me", "explainers", "uploads"]
39
36
  ]
@@ -94,9 +91,6 @@ class ConfigFlashcardsConfigDto(TypedDict, total=False):
94
91
  difficulty: Literal["easy", "medium", "hard", "mixed"]
95
92
  """Difficulty level"""
96
93
 
97
- enable_spaced_repetition: Annotated[bool, PropertyInfo(alias="enableSpacedRepetition")]
98
- """Enable spaced repetition"""
99
-
100
94
  folders: List[str]
101
95
  """Folder IDs"""
102
96
 
@@ -0,0 +1,27 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import List
6
+ from typing_extensions import Required, Annotated, TypedDict
7
+
8
+ from ..._utils import PropertyInfo
9
+
10
+ __all__ = ["MaterialSearchParams"]
11
+
12
+
13
+ class MaterialSearchParams(TypedDict, total=False):
14
+ query: Required[str]
15
+ """Search query"""
16
+
17
+ folder_ids: Annotated[List[str], PropertyInfo(alias="folderIds")]
18
+ """
19
+ Optional: Limit search to materials within specific folders (includes
20
+ subfolders)
21
+ """
22
+
23
+ material_ids: Annotated[List[str], PropertyInfo(alias="materialIds")]
24
+ """Optional: Limit search to specific material IDs"""
25
+
26
+ top_k: Annotated[float, PropertyInfo(alias="topK")]
27
+ """Number of results to return (default: 5)"""
@@ -1,3 +1,12 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  from __future__ import annotations
4
+
5
+ from .component_upload_url_params import ComponentUploadURLParams as ComponentUploadURLParams
6
+ from .component_upload_file_params import ComponentUploadFileParams as ComponentUploadFileParams
7
+ from .component_upload_url_response import ComponentUploadURLResponse as ComponentUploadURLResponse
8
+ from .component_upload_file_response import ComponentUploadFileResponse as ComponentUploadFileResponse
9
+ from .component_complete_upload_params import ComponentCompleteUploadParams as ComponentCompleteUploadParams
10
+ from .component_complete_upload_response import ComponentCompleteUploadResponse as ComponentCompleteUploadResponse
11
+ from .component_get_presigned_url_params import ComponentGetPresignedURLParams as ComponentGetPresignedURLParams
12
+ from .component_get_presigned_url_response import ComponentGetPresignedURLResponse as ComponentGetPresignedURLResponse
@@ -0,0 +1,20 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import Required, Annotated, TypedDict
6
+
7
+ from ...._utils import PropertyInfo
8
+
9
+ __all__ = ["ComponentCompleteUploadParams"]
10
+
11
+
12
+ class ComponentCompleteUploadParams(TypedDict, total=False):
13
+ material_id: Required[Annotated[str, PropertyInfo(alias="materialId")]]
14
+ """The ID of the material that was uploaded"""
15
+
16
+ organization_id: Required[Annotated[str, PropertyInfo(alias="organizationId")]]
17
+ """The ID of the organization"""
18
+
19
+ s3_key: Required[Annotated[str, PropertyInfo(alias="s3Key")]]
20
+ """The S3 key of the uploaded file"""
@@ -0,0 +1,16 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from ...._models import BaseModel
4
+
5
+ __all__ = ["ComponentCompleteUploadResponse"]
6
+
7
+
8
+ class ComponentCompleteUploadResponse(BaseModel):
9
+ id: str
10
+ """The ID of the uploaded material"""
11
+
12
+ name: str
13
+ """The name of the material"""
14
+
15
+ status: str
16
+ """The status of the material"""
@@ -0,0 +1,23 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import Required, Annotated, TypedDict
6
+
7
+ from ...._utils import PropertyInfo
8
+
9
+ __all__ = ["ComponentGetPresignedURLParams"]
10
+
11
+
12
+ class ComponentGetPresignedURLParams(TypedDict, total=False):
13
+ content_type: Required[Annotated[str, PropertyInfo(alias="contentType")]]
14
+ """The MIME type of the file"""
15
+
16
+ filename: Required[str]
17
+ """The name of the file to upload"""
18
+
19
+ folder_id: Required[Annotated[str, PropertyInfo(alias="folderId")]]
20
+ """The ID of the folder to upload to"""
21
+
22
+ organization_id: Required[Annotated[str, PropertyInfo(alias="organizationId")]]
23
+ """The ID of the organization"""
@@ -0,0 +1,15 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from pydantic import Field as FieldInfo
4
+
5
+ from ...._models import BaseModel
6
+
7
+ __all__ = ["ComponentGetPresignedURLResponse"]
8
+
9
+
10
+ class ComponentGetPresignedURLResponse(BaseModel):
11
+ key: str
12
+ """The S3 key for the file"""
13
+
14
+ upload_url: str = FieldInfo(alias="uploadUrl")
15
+ """The presigned URL for uploading"""
@@ -0,0 +1,21 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import Required, Annotated, TypedDict
6
+
7
+ from ...._types import FileTypes
8
+ from ...._utils import PropertyInfo
9
+
10
+ __all__ = ["ComponentUploadFileParams"]
11
+
12
+
13
+ class ComponentUploadFileParams(TypedDict, total=False):
14
+ file: Required[FileTypes]
15
+ """The file to upload"""
16
+
17
+ folder_id: Required[Annotated[str, PropertyInfo(alias="folderId")]]
18
+ """The ID of the folder to upload to"""
19
+
20
+ organization_id: Required[Annotated[str, PropertyInfo(alias="organizationId")]]
21
+ """The ID of the organization"""
@@ -0,0 +1,24 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from pydantic import Field as FieldInfo
4
+
5
+ from ...._models import BaseModel
6
+
7
+ __all__ = ["ComponentUploadFileResponse"]
8
+
9
+
10
+ class ComponentUploadFileResponse(BaseModel):
11
+ id: str
12
+ """The ID of the uploaded material"""
13
+
14
+ content_type: str = FieldInfo(alias="contentType")
15
+ """The content type of the material"""
16
+
17
+ name: str
18
+ """The name of the material"""
19
+
20
+ s3_key: str = FieldInfo(alias="s3Key")
21
+ """The S3 key of the uploaded file"""
22
+
23
+ status: str
24
+ """The status of the material"""
@@ -0,0 +1,23 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import Required, Annotated, TypedDict
6
+
7
+ from ...._utils import PropertyInfo
8
+
9
+ __all__ = ["ComponentUploadURLParams"]
10
+
11
+
12
+ class ComponentUploadURLParams(TypedDict, total=False):
13
+ folder_id: Required[Annotated[str, PropertyInfo(alias="folderId")]]
14
+ """The ID of the folder to upload to"""
15
+
16
+ name: Required[str]
17
+ """The name for the uploaded file"""
18
+
19
+ organization_id: Required[Annotated[str, PropertyInfo(alias="organizationId")]]
20
+ """The ID of the organization"""
21
+
22
+ url: Required[str]
23
+ """The URL of the file to upload"""
@@ -0,0 +1,24 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from pydantic import Field as FieldInfo
4
+
5
+ from ...._models import BaseModel
6
+
7
+ __all__ = ["ComponentUploadURLResponse"]
8
+
9
+
10
+ class ComponentUploadURLResponse(BaseModel):
11
+ id: str
12
+ """The ID of the uploaded material"""
13
+
14
+ content_type: str = FieldInfo(alias="contentType")
15
+ """The content type of the material"""
16
+
17
+ name: str
18
+ """The name of the material"""
19
+
20
+ s3_key: str = FieldInfo(alias="s3Key")
21
+ """The S3 key of the uploaded file"""
22
+
23
+ status: str
24
+ """The status of the material"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: studyfetch_sdk
3
- Version: 0.1.0a14
3
+ Version: 0.1.0a16
4
4
  Summary: The official Python library for the studyfetch-sdk API
5
5
  Project-URL: Homepage, https://github.com/GoStudyFetchGo/studyfetch-sdk-python
6
6
  Project-URL: Repository, https://github.com/GoStudyFetchGo/studyfetch-sdk-python
@@ -11,7 +11,7 @@ studyfetch_sdk/_resource.py,sha256=y0aoAqMIYwTAwStuxbpO8XpTPnrSNQQ_ZcgiH5xcntg,1
11
11
  studyfetch_sdk/_response.py,sha256=6ph8tSkqF5pNbTo_2Zhizhq2O-Eb67TcksHwyg3aXdc,28864
12
12
  studyfetch_sdk/_streaming.py,sha256=HZoENuPVzWhBn24eH3lnMCvRbWN0EPwvhWYfdlJfw0A,10128
13
13
  studyfetch_sdk/_types.py,sha256=6nvqHGarRGuhs_FL8tJ8sGXXD8XWajNynT2K78GxRUI,6205
14
- studyfetch_sdk/_version.py,sha256=UNFOC7laKmlg_jG609moJ6luDXLc6eUhVQvMBjgA6W8,175
14
+ studyfetch_sdk/_version.py,sha256=YHFYJd0dBpxqU2_Bn1ubUnUsfR7WQTD3ZpuR4UDyX1k,175
15
15
  studyfetch_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  studyfetch_sdk/_utils/__init__.py,sha256=PNZ_QJuzZEgyYXqkO1HVhGkj5IU9bglVUcw7H-Knjzw,2062
17
17
  studyfetch_sdk/_utils/_logs.py,sha256=EoZgOiIkpf2WB_0Ts0Ti7G3o_25v7IsPf_q-yEU6sbY,798
@@ -27,7 +27,7 @@ studyfetch_sdk/lib/.keep,sha256=wuNrz-5SXo3jJaJOJgz4vFHM41YH_g20F5cRQo0vLes,224
27
27
  studyfetch_sdk/resources/__init__.py,sha256=TSJ6b8GNHShyK5w7efHV93u1bY2jYVySQRa2zKc1dKM,500
28
28
  studyfetch_sdk/resources/v1/__init__.py,sha256=qxWo4pd2dhmbovxcvRakku86rsvbGMXDISPSEs8qc_s,6729
29
29
  studyfetch_sdk/resources/v1/assignment_grader.py,sha256=6jUl0kFBR90J5rkqa6bLf07EaiFDcXN1DvbUxFjUSs8,13243
30
- studyfetch_sdk/resources/v1/components.py,sha256=iU4cy-l8k6_RBtsMvjag0E29nWJpSyktuCFhi4TZEh4,35435
30
+ studyfetch_sdk/resources/v1/components.py,sha256=bPVp1Z1uZPco7ZHN7ulduuV4lhXfIHnnvj_lzGDr9vI,35125
31
31
  studyfetch_sdk/resources/v1/explainers.py,sha256=W5Kq3Gpwqw3kBy9v-qpV5FKxH1HAm5_yk1NgACM-Mec,16047
32
32
  studyfetch_sdk/resources/v1/flashcards.py,sha256=_-zZUd8Ja9k2895cxLJsLbN73ZTIrkJaComGCSMkbCk,29242
33
33
  studyfetch_sdk/resources/v1/folders.py,sha256=o43HhcVhqF3t7xWMFFNIiMPElhoqkXtaCTVjEE5s5so,27436
@@ -44,7 +44,7 @@ studyfetch_sdk/resources/v1/embed/component.py,sha256=vFArqNnLaCGiHAKt4dhF3IBE95
44
44
  studyfetch_sdk/resources/v1/embed/embed.py,sha256=Tbny2GdlacLtNE-TfYRqYsVNIcOmPOy16cI1IrAHLmM,12582
45
45
  studyfetch_sdk/resources/v1/materials/__init__.py,sha256=tVk8p-CapS6r8iWZXSBxwA0UlQyHJQMY9FPDL_TvMfY,1889
46
46
  studyfetch_sdk/resources/v1/materials/bulk.py,sha256=oVAcnbKm8NUBFJIMoj4pEHFb_l1CM7F3Ve9cTApWguo,4843
47
- studyfetch_sdk/resources/v1/materials/materials.py,sha256=dHx9epoBs9-Q2gFm08RMHxo5kETE_dF3yReV_Vf7Fow,38476
47
+ studyfetch_sdk/resources/v1/materials/materials.py,sha256=P_KTA5L54eVljY_HtLZD4zIEScrQ6kAi9WcCFI_04-0,40800
48
48
  studyfetch_sdk/resources/v1/materials/test.py,sha256=eGcjGYvPlrlZGrU6AnvZZX5qZ3aLgZgxIrNspXC1rnE,11355
49
49
  studyfetch_sdk/resources/v1/materials/upload.py,sha256=vXbsicx0pVlrx3LPr7rqOkqHmzBoxFI6lIBScM29zr8,15476
50
50
  studyfetch_sdk/resources/v1/scenarios/__init__.py,sha256=WrMn3vQJgHGQzWKq5SRUTMMvRd4p15Bt5JjZpHhKHZs,2071
@@ -58,13 +58,13 @@ studyfetch_sdk/resources/v1/tests/__init__.py,sha256=7-K6i3WJPRCoMSOatJEqUhlz74S
58
58
  studyfetch_sdk/resources/v1/tests/component.py,sha256=MJZIo4-ES4tkY9P1FJl8phjkQxGG8FBCe99ar0I_un4,6013
59
59
  studyfetch_sdk/resources/v1/tests/tests.py,sha256=BGwXClZ8YkzegN80R0WDIrvK3WN1-ujtYkfR33ARhVU,24870
60
60
  studyfetch_sdk/resources/v1/upload/__init__.py,sha256=N5r6jpSMe43dezq-6RBAWLVlL3-Z76lU7DG53phDGr8,1041
61
- studyfetch_sdk/resources/v1/upload/component.py,sha256=BbiKtJ9hC7c7_Wv6Q_Zi_BZJmcusWFRNvBKJqaB75yA,15493
61
+ studyfetch_sdk/resources/v1/upload/component.py,sha256=7lABKoQke4Ek9loVprcANTMxkPnPPjxgY-pQZsdDsd0,21979
62
62
  studyfetch_sdk/resources/v1/upload/upload.py,sha256=RBkrsVi5_8qIqdYKypnSqj44ONvwW7u2XXIlpuJsKSg,3736
63
63
  studyfetch_sdk/resources/v1/usage/__init__.py,sha256=zUBe7msw9tyZplhmwNkhbCfRigNQQVj4IFpod4uGWZY,1002
64
64
  studyfetch_sdk/resources/v1/usage/analyst.py,sha256=BZC5QVnm6UWacrqodYFGXUodBM_b37I9jClbiXTakJo,13206
65
65
  studyfetch_sdk/resources/v1/usage/usage.py,sha256=HAG7FfTIiIihB0dtbZEmluKDD0GWqKWrfLp03gcdPjU,19694
66
66
  studyfetch_sdk/types/__init__.py,sha256=OKfJYcKb4NObdiRObqJV_dOyDQ8feXekDUge2o_4pXQ,122
67
- studyfetch_sdk/types/v1/__init__.py,sha256=ZYgsBMrJnlzlGjnuZmHVl8dP3wnDvh_ZZz9yB76qxTw,3775
67
+ studyfetch_sdk/types/v1/__init__.py,sha256=G2hSEu2NGKqUlFDRv3h2M-6AhdYOZqvNpMmNGGphgyg,3856
68
68
  studyfetch_sdk/types/v1/assignment_grader_create_params.py,sha256=o-U_-0ZHJxwpL3pSEW41SmsHz-sOP490i5P8EA5A-Ws,1246
69
69
  studyfetch_sdk/types/v1/assignment_grader_get_all_response.py,sha256=FidqfpFC-PX05_knGWicLerCeSqJiScW2IbzPyzBb2c,339
70
70
  studyfetch_sdk/types/v1/assignment_grader_response.py,sha256=j2DKiD99EPKPcvY6k7wKXd3r9UTkEe9SMmY94rRxjgw,548
@@ -72,7 +72,7 @@ studyfetch_sdk/types/v1/chat_get_session_params.py,sha256=Iv3O6eF4DvTYTBVQVyVR4t
72
72
  studyfetch_sdk/types/v1/chat_send_message_params.py,sha256=BRxjNsVXsqcBbdrp4J5TQGjjNPJ_bz7uXw3pnc-x0oU,1454
73
73
  studyfetch_sdk/types/v1/chat_stream_params.py,sha256=Aqp2Vdsa35PAH-75kaO_ZYlkqGrCgDZ5EyYTTLRAJoE,695
74
74
  studyfetch_sdk/types/v1/component.py,sha256=ye8BDfb0taD0WwEWJDpi4cXH0iwKqzom0SQQA1nbO4c,1166
75
- studyfetch_sdk/types/v1/component_create_params.py,sha256=ec6urTYr_9KEvITea9qThEIVFgWhRbY8tUhyk2RQHQQ,10496
75
+ studyfetch_sdk/types/v1/component_create_params.py,sha256=wtPCBVQScdZZuREIzmRIoMCCXoK9cVeR-NUA0qFatxo,10254
76
76
  studyfetch_sdk/types/v1/component_generate_embed_params.py,sha256=keiOzDzPCvacAWHQj_OtF2pGjEAqxwjNriBGxRaRQNk,3068
77
77
  studyfetch_sdk/types/v1/component_generate_embed_response.py,sha256=xhbqEpAt_Q7yzD4xjWITs_jXYUD6ElrH4aQfNEunI3Y,922
78
78
  studyfetch_sdk/types/v1/component_list_params.py,sha256=R8NMK7r37CpqmbAWdbs6rEF1LigoYrE3BXksJCCdKEQ,431
@@ -98,6 +98,7 @@ studyfetch_sdk/types/v1/material_create_params.py,sha256=mYjnlTBvz_aInnnqO7FiNEH
98
98
  studyfetch_sdk/types/v1/material_get_download_url_params.py,sha256=7prrB3K-E4xAWUQlaH_YBCEB7u9WHQSc9pE1NvO88Ts,400
99
99
  studyfetch_sdk/types/v1/material_list_params.py,sha256=8yd556-GB4Xw-NFGshxm_Hx-nIG-MAg4dPtn-W38w3k,388
100
100
  studyfetch_sdk/types/v1/material_list_response.py,sha256=mYCoEQJT6sxJd35nchrBf7BJpRHWWH1CbgZNz3QBPQg,269
101
+ studyfetch_sdk/types/v1/material_search_params.py,sha256=vawi3xfUqEn0jfj7X50dEEqpEjbhFYkwaWnXpKk7Lxs,800
101
102
  studyfetch_sdk/types/v1/scenario_create_params.py,sha256=anCK913P4vYEtgY6GnxxxCxRnUazeV1H1NoyBV78sT8,1281
102
103
  studyfetch_sdk/types/v1/scenario_submit_answer_params.py,sha256=g1idbU9OxRC_qrU7bOVNuFcXtKa2ZiJgy7KBR2mJWSM,597
103
104
  studyfetch_sdk/types/v1/scenario_update_params.py,sha256=F83xky9wzolK2VmTkTUqfrNwXB-h-H__8YYy7oXLz8A,1168
@@ -121,10 +122,18 @@ studyfetch_sdk/types/v1/scenarios/__init__.py,sha256=2DyrawNlb-TstNKw0gUMlQaNSq-
121
122
  studyfetch_sdk/types/v1/scenarios/component_update_params.py,sha256=0wsa-_gN17TKmvhQBbCIQmN2gSEuCq2HBWjQaTqhFdk,1171
122
123
  studyfetch_sdk/types/v1/scenarios/submissions/__init__.py,sha256=OKfJYcKb4NObdiRObqJV_dOyDQ8feXekDUge2o_4pXQ,122
123
124
  studyfetch_sdk/types/v1/tests/__init__.py,sha256=OKfJYcKb4NObdiRObqJV_dOyDQ8feXekDUge2o_4pXQ,122
124
- studyfetch_sdk/types/v1/upload/__init__.py,sha256=OKfJYcKb4NObdiRObqJV_dOyDQ8feXekDUge2o_4pXQ,122
125
+ studyfetch_sdk/types/v1/upload/__init__.py,sha256=G-KdJ3sJGH9LAfnOaGCZA9myrntfZmuhT3OqPOgQSM4,973
126
+ studyfetch_sdk/types/v1/upload/component_complete_upload_params.py,sha256=B3-7nCdLI4S_q0qa8NBS7gNwL0F8ljYVvEbo9fwCkXQ,687
127
+ studyfetch_sdk/types/v1/upload/component_complete_upload_response.py,sha256=fOWcCnkzzLlYtwKjmdh4X4hlGVOKUNDA1DmnM5jb1ao,378
128
+ studyfetch_sdk/types/v1/upload/component_get_presigned_url_params.py,sha256=dTGFn9zyOY9z3NNdPw732L3Ln7D1GKA3S8xB3FBPb7c,754
129
+ studyfetch_sdk/types/v1/upload/component_get_presigned_url_response.py,sha256=RDHDy3IO_qjtnfLHJQ2CX2_uG6_BJI-vwgQk2UJ-aE8,404
130
+ studyfetch_sdk/types/v1/upload/component_upload_file_params.py,sha256=UTv4EMrj7_hXa-PU68PMEyXn-bnhxcC0V0qO0JN5W-I,652
131
+ studyfetch_sdk/types/v1/upload/component_upload_file_response.py,sha256=3aMMe3Q2tRiZkdhhbtolqhW7O0jxj5ln3OofgbeXm2U,596
132
+ studyfetch_sdk/types/v1/upload/component_upload_url_params.py,sha256=3wXvto5WWzLYCu0EfQAWQgM73OmbRGhTwe6UnkMW0gM,687
133
+ studyfetch_sdk/types/v1/upload/component_upload_url_response.py,sha256=S0eyja9wnBzce70CN-WCHd_8CdNRcygub_ZMAkyG2a0,594
125
134
  studyfetch_sdk/types/v1/usage/__init__.py,sha256=W93APDYogn9YlFksS696VpAlz_P7W8mt5wfduXWtoVY,214
126
135
  studyfetch_sdk/types/v1/usage/analyst_list_events_params.py,sha256=5ylEgFOsxQ0HNLfyTktNvZx-VuWJHV06HMIfiNnVNHo,1562
127
- studyfetch_sdk-0.1.0a14.dist-info/METADATA,sha256=RX9XOKeRJqD0J2qgpXwgk0wWm8clWQ2-Y0kI4Oq-714,15518
128
- studyfetch_sdk-0.1.0a14.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
129
- studyfetch_sdk-0.1.0a14.dist-info/licenses/LICENSE,sha256=CsdbJMegH_AAWljUmVcwW0Cj_GyIm1hjw6qPqPnmdn4,11344
130
- studyfetch_sdk-0.1.0a14.dist-info/RECORD,,
136
+ studyfetch_sdk-0.1.0a16.dist-info/METADATA,sha256=BYLFe3-gJTlF4p9lzo2-9TEaibxZulb7RiIlIBakQco,15518
137
+ studyfetch_sdk-0.1.0a16.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
138
+ studyfetch_sdk-0.1.0a16.dist-info/licenses/LICENSE,sha256=CsdbJMegH_AAWljUmVcwW0Cj_GyIm1hjw6qPqPnmdn4,11344
139
+ studyfetch_sdk-0.1.0a16.dist-info/RECORD,,