label-studio-sdk 0.0.34__py3-none-any.whl → 1.0.1__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.

Potentially problematic release.


This version of label-studio-sdk might be problematic. Click here for more details.

Files changed (272) hide show
  1. label_studio_sdk/__init__.py +232 -9
  2. label_studio_sdk/_extensions/label_studio_tools/__init__.py +0 -0
  3. label_studio_sdk/_extensions/label_studio_tools/core/__init__.py +0 -0
  4. label_studio_sdk/_extensions/label_studio_tools/core/label_config.py +163 -0
  5. label_studio_sdk/_extensions/label_studio_tools/core/utils/__init__.py +0 -0
  6. label_studio_sdk/_extensions/label_studio_tools/core/utils/exceptions.py +2 -0
  7. label_studio_sdk/_extensions/label_studio_tools/core/utils/io.py +228 -0
  8. label_studio_sdk/_extensions/label_studio_tools/core/utils/params.py +45 -0
  9. label_studio_sdk/_extensions/label_studio_tools/etl/__init__.py +1 -0
  10. label_studio_sdk/_extensions/label_studio_tools/etl/beam.py +34 -0
  11. label_studio_sdk/_extensions/label_studio_tools/etl/example.py +17 -0
  12. label_studio_sdk/_extensions/label_studio_tools/etl/registry.py +67 -0
  13. label_studio_sdk/_extensions/label_studio_tools/postprocessing/__init__.py +0 -0
  14. label_studio_sdk/_extensions/label_studio_tools/postprocessing/video.py +97 -0
  15. label_studio_sdk/_extensions/pager_ext.py +49 -0
  16. label_studio_sdk/_legacy/__init__.py +11 -0
  17. label_studio_sdk/_legacy/client.py +471 -0
  18. label_studio_sdk/_legacy/objects.py +74 -0
  19. label_studio_sdk/{project.py → _legacy/project.py} +2 -2
  20. label_studio_sdk/{schema → _legacy/schema}/label_config_schema.json +14 -14
  21. label_studio_sdk/actions/__init__.py +27 -0
  22. label_studio_sdk/actions/client.py +223 -0
  23. label_studio_sdk/actions/types/__init__.py +25 -0
  24. label_studio_sdk/actions/types/actions_create_request_filters.py +43 -0
  25. label_studio_sdk/actions/types/actions_create_request_filters_conjunction.py +5 -0
  26. label_studio_sdk/actions/types/actions_create_request_filters_items_item.py +49 -0
  27. label_studio_sdk/actions/types/actions_create_request_filters_items_item_filter.py +31 -0
  28. label_studio_sdk/actions/types/actions_create_request_filters_items_item_operator.py +23 -0
  29. label_studio_sdk/actions/types/actions_create_request_id.py +19 -0
  30. label_studio_sdk/actions/types/actions_create_request_ordering_item.py +31 -0
  31. label_studio_sdk/actions/types/actions_create_request_selected_items.py +10 -0
  32. label_studio_sdk/actions/types/actions_create_request_selected_items_excluded.py +39 -0
  33. label_studio_sdk/actions/types/actions_create_request_selected_items_included.py +39 -0
  34. label_studio_sdk/annotations/__init__.py +2 -0
  35. label_studio_sdk/annotations/client.py +750 -0
  36. label_studio_sdk/base_client.py +183 -0
  37. label_studio_sdk/client.py +17 -463
  38. label_studio_sdk/converter/__init__.py +7 -0
  39. label_studio_sdk/converter/audio.py +56 -0
  40. label_studio_sdk/converter/brush.py +452 -0
  41. label_studio_sdk/converter/converter.py +1175 -0
  42. label_studio_sdk/converter/exports/__init__.py +0 -0
  43. label_studio_sdk/converter/exports/csv.py +82 -0
  44. label_studio_sdk/converter/exports/csv2.py +103 -0
  45. label_studio_sdk/converter/funsd.py +85 -0
  46. label_studio_sdk/converter/imports/__init__.py +0 -0
  47. label_studio_sdk/converter/imports/coco.py +314 -0
  48. label_studio_sdk/converter/imports/colors.py +198 -0
  49. label_studio_sdk/converter/imports/label_config.py +45 -0
  50. label_studio_sdk/converter/imports/pathtrack.py +269 -0
  51. label_studio_sdk/converter/imports/yolo.py +236 -0
  52. label_studio_sdk/converter/main.py +202 -0
  53. label_studio_sdk/converter/utils.py +473 -0
  54. label_studio_sdk/core/__init__.py +33 -0
  55. label_studio_sdk/core/api_error.py +15 -0
  56. label_studio_sdk/core/client_wrapper.py +55 -0
  57. label_studio_sdk/core/datetime_utils.py +28 -0
  58. label_studio_sdk/core/file.py +38 -0
  59. label_studio_sdk/core/http_client.py +447 -0
  60. label_studio_sdk/core/jsonable_encoder.py +99 -0
  61. label_studio_sdk/core/pagination.py +87 -0
  62. label_studio_sdk/core/pydantic_utilities.py +28 -0
  63. label_studio_sdk/core/query_encoder.py +33 -0
  64. label_studio_sdk/core/remove_none_from_dict.py +11 -0
  65. label_studio_sdk/core/request_options.py +32 -0
  66. label_studio_sdk/environment.py +7 -0
  67. label_studio_sdk/errors/__init__.py +6 -0
  68. label_studio_sdk/errors/bad_request_error.py +8 -0
  69. label_studio_sdk/errors/internal_server_error.py +8 -0
  70. label_studio_sdk/export_storage/__init__.py +28 -0
  71. label_studio_sdk/export_storage/azure/__init__.py +5 -0
  72. label_studio_sdk/export_storage/azure/client.py +888 -0
  73. label_studio_sdk/export_storage/azure/types/__init__.py +6 -0
  74. label_studio_sdk/export_storage/azure/types/azure_create_response.py +67 -0
  75. label_studio_sdk/export_storage/azure/types/azure_update_response.py +67 -0
  76. label_studio_sdk/export_storage/client.py +107 -0
  77. label_studio_sdk/export_storage/gcs/__init__.py +5 -0
  78. label_studio_sdk/export_storage/gcs/client.py +888 -0
  79. label_studio_sdk/export_storage/gcs/types/__init__.py +6 -0
  80. label_studio_sdk/export_storage/gcs/types/gcs_create_response.py +67 -0
  81. label_studio_sdk/export_storage/gcs/types/gcs_update_response.py +67 -0
  82. label_studio_sdk/export_storage/local/__init__.py +5 -0
  83. label_studio_sdk/export_storage/local/client.py +834 -0
  84. label_studio_sdk/export_storage/local/types/__init__.py +6 -0
  85. label_studio_sdk/export_storage/local/types/local_create_response.py +57 -0
  86. label_studio_sdk/export_storage/local/types/local_update_response.py +57 -0
  87. label_studio_sdk/export_storage/redis/__init__.py +5 -0
  88. label_studio_sdk/export_storage/redis/client.py +918 -0
  89. label_studio_sdk/export_storage/redis/types/__init__.py +6 -0
  90. label_studio_sdk/export_storage/redis/types/redis_create_response.py +72 -0
  91. label_studio_sdk/export_storage/redis/types/redis_update_response.py +72 -0
  92. label_studio_sdk/export_storage/s3/__init__.py +5 -0
  93. label_studio_sdk/export_storage/s3/client.py +1008 -0
  94. label_studio_sdk/export_storage/s3/types/__init__.py +6 -0
  95. label_studio_sdk/export_storage/s3/types/s3create_response.py +89 -0
  96. label_studio_sdk/export_storage/s3/types/s3update_response.py +89 -0
  97. label_studio_sdk/export_storage/types/__init__.py +5 -0
  98. label_studio_sdk/export_storage/types/export_storage_list_types_response_item.py +30 -0
  99. label_studio_sdk/files/__init__.py +2 -0
  100. label_studio_sdk/files/client.py +556 -0
  101. label_studio_sdk/import_storage/__init__.py +28 -0
  102. label_studio_sdk/import_storage/azure/__init__.py +5 -0
  103. label_studio_sdk/import_storage/azure/client.py +988 -0
  104. label_studio_sdk/import_storage/azure/types/__init__.py +6 -0
  105. label_studio_sdk/import_storage/azure/types/azure_create_response.py +82 -0
  106. label_studio_sdk/import_storage/azure/types/azure_update_response.py +82 -0
  107. label_studio_sdk/import_storage/client.py +107 -0
  108. label_studio_sdk/import_storage/gcs/__init__.py +5 -0
  109. label_studio_sdk/import_storage/gcs/client.py +988 -0
  110. label_studio_sdk/import_storage/gcs/types/__init__.py +6 -0
  111. label_studio_sdk/import_storage/gcs/types/gcs_create_response.py +82 -0
  112. label_studio_sdk/import_storage/gcs/types/gcs_update_response.py +82 -0
  113. label_studio_sdk/import_storage/local/__init__.py +5 -0
  114. label_studio_sdk/import_storage/local/client.py +836 -0
  115. label_studio_sdk/import_storage/local/types/__init__.py +6 -0
  116. label_studio_sdk/import_storage/local/types/local_create_response.py +57 -0
  117. label_studio_sdk/import_storage/local/types/local_update_response.py +57 -0
  118. label_studio_sdk/import_storage/redis/__init__.py +5 -0
  119. label_studio_sdk/import_storage/redis/client.py +924 -0
  120. label_studio_sdk/import_storage/redis/types/__init__.py +6 -0
  121. label_studio_sdk/import_storage/redis/types/redis_create_response.py +72 -0
  122. label_studio_sdk/import_storage/redis/types/redis_update_response.py +72 -0
  123. label_studio_sdk/import_storage/s3/__init__.py +5 -0
  124. label_studio_sdk/import_storage/s3/client.py +1138 -0
  125. label_studio_sdk/import_storage/s3/types/__init__.py +6 -0
  126. label_studio_sdk/import_storage/s3/types/s3create_response.py +109 -0
  127. label_studio_sdk/import_storage/s3/types/s3update_response.py +109 -0
  128. label_studio_sdk/import_storage/types/__init__.py +5 -0
  129. label_studio_sdk/import_storage/types/import_storage_list_types_response_item.py +30 -0
  130. label_studio_sdk/label_interface/base.py +10 -0
  131. label_studio_sdk/label_interface/control_tags.py +109 -71
  132. label_studio_sdk/label_interface/data_examples.json +96 -0
  133. label_studio_sdk/label_interface/interface.py +102 -53
  134. label_studio_sdk/label_interface/object_tags.py +8 -13
  135. label_studio_sdk/label_interface/region.py +33 -1
  136. label_studio_sdk/ml/__init__.py +19 -0
  137. label_studio_sdk/ml/client.py +981 -0
  138. label_studio_sdk/ml/types/__init__.py +17 -0
  139. label_studio_sdk/ml/types/ml_create_request_auth_method.py +5 -0
  140. label_studio_sdk/ml/types/ml_create_response.py +78 -0
  141. label_studio_sdk/ml/types/ml_create_response_auth_method.py +5 -0
  142. label_studio_sdk/ml/types/ml_update_request_auth_method.py +5 -0
  143. label_studio_sdk/ml/types/ml_update_response.py +78 -0
  144. label_studio_sdk/ml/types/ml_update_response_auth_method.py +5 -0
  145. label_studio_sdk/predictions/__init__.py +2 -0
  146. label_studio_sdk/predictions/client.py +638 -0
  147. label_studio_sdk/projects/__init__.py +6 -0
  148. label_studio_sdk/projects/client.py +1055 -0
  149. label_studio_sdk/projects/client_ext.py +19 -0
  150. label_studio_sdk/projects/exports/__init__.py +2 -0
  151. label_studio_sdk/projects/exports/client.py +930 -0
  152. label_studio_sdk/projects/types/__init__.py +7 -0
  153. label_studio_sdk/projects/types/projects_create_response.py +96 -0
  154. label_studio_sdk/projects/types/projects_import_tasks_response.py +71 -0
  155. label_studio_sdk/projects/types/projects_list_response.py +33 -0
  156. label_studio_sdk/py.typed +0 -0
  157. label_studio_sdk/tasks/__init__.py +5 -0
  158. label_studio_sdk/tasks/client.py +835 -0
  159. label_studio_sdk/tasks/client_ext.py +18 -0
  160. label_studio_sdk/tasks/types/__init__.py +6 -0
  161. label_studio_sdk/tasks/types/tasks_list_request_fields.py +5 -0
  162. label_studio_sdk/tasks/types/tasks_list_response.py +48 -0
  163. label_studio_sdk/types/__init__.py +115 -0
  164. label_studio_sdk/types/annotation.py +116 -0
  165. label_studio_sdk/types/annotation_filter_options.py +42 -0
  166. label_studio_sdk/types/annotation_last_action.py +19 -0
  167. label_studio_sdk/types/azure_blob_export_storage.py +112 -0
  168. label_studio_sdk/types/azure_blob_export_storage_status.py +7 -0
  169. label_studio_sdk/types/azure_blob_import_storage.py +113 -0
  170. label_studio_sdk/types/azure_blob_import_storage_status.py +7 -0
  171. label_studio_sdk/types/base_task.py +113 -0
  172. label_studio_sdk/types/base_user.py +42 -0
  173. label_studio_sdk/types/converted_format.py +36 -0
  174. label_studio_sdk/types/converted_format_status.py +5 -0
  175. label_studio_sdk/types/export.py +48 -0
  176. label_studio_sdk/types/export_convert.py +32 -0
  177. label_studio_sdk/types/export_create.py +54 -0
  178. label_studio_sdk/types/export_create_status.py +5 -0
  179. label_studio_sdk/types/export_status.py +5 -0
  180. label_studio_sdk/types/file_upload.py +30 -0
  181. label_studio_sdk/types/filter.py +53 -0
  182. label_studio_sdk/types/filter_group.py +35 -0
  183. label_studio_sdk/types/gcs_export_storage.py +112 -0
  184. label_studio_sdk/types/gcs_export_storage_status.py +7 -0
  185. label_studio_sdk/types/gcs_import_storage.py +113 -0
  186. label_studio_sdk/types/gcs_import_storage_status.py +7 -0
  187. label_studio_sdk/types/local_files_export_storage.py +97 -0
  188. label_studio_sdk/types/local_files_export_storage_status.py +7 -0
  189. label_studio_sdk/types/local_files_import_storage.py +92 -0
  190. label_studio_sdk/types/local_files_import_storage_status.py +7 -0
  191. label_studio_sdk/types/ml_backend.py +89 -0
  192. label_studio_sdk/types/ml_backend_auth_method.py +5 -0
  193. label_studio_sdk/types/ml_backend_state.py +5 -0
  194. label_studio_sdk/types/prediction.py +78 -0
  195. label_studio_sdk/types/project.py +198 -0
  196. label_studio_sdk/types/project_import.py +63 -0
  197. label_studio_sdk/types/project_import_status.py +5 -0
  198. label_studio_sdk/types/project_label_config.py +32 -0
  199. label_studio_sdk/types/project_sampling.py +7 -0
  200. label_studio_sdk/types/project_skip_queue.py +5 -0
  201. label_studio_sdk/types/redis_export_storage.py +117 -0
  202. label_studio_sdk/types/redis_export_storage_status.py +7 -0
  203. label_studio_sdk/types/redis_import_storage.py +112 -0
  204. label_studio_sdk/types/redis_import_storage_status.py +7 -0
  205. label_studio_sdk/types/s3export_storage.py +134 -0
  206. label_studio_sdk/types/s3export_storage_status.py +7 -0
  207. label_studio_sdk/types/s3import_storage.py +140 -0
  208. label_studio_sdk/types/s3import_storage_status.py +7 -0
  209. label_studio_sdk/types/serialization_option.py +36 -0
  210. label_studio_sdk/types/serialization_options.py +45 -0
  211. label_studio_sdk/types/task.py +157 -0
  212. label_studio_sdk/types/task_filter_options.py +49 -0
  213. label_studio_sdk/types/user_simple.py +37 -0
  214. label_studio_sdk/types/view.py +55 -0
  215. label_studio_sdk/types/webhook.py +67 -0
  216. label_studio_sdk/types/webhook_actions_item.py +21 -0
  217. label_studio_sdk/types/webhook_serializer_for_update.py +67 -0
  218. label_studio_sdk/types/webhook_serializer_for_update_actions_item.py +21 -0
  219. label_studio_sdk/users/__init__.py +5 -0
  220. label_studio_sdk/users/client.py +830 -0
  221. label_studio_sdk/users/types/__init__.py +6 -0
  222. label_studio_sdk/users/types/users_get_token_response.py +36 -0
  223. label_studio_sdk/users/types/users_reset_token_response.py +36 -0
  224. label_studio_sdk/version.py +4 -0
  225. label_studio_sdk/views/__init__.py +35 -0
  226. label_studio_sdk/views/client.py +564 -0
  227. label_studio_sdk/views/types/__init__.py +33 -0
  228. label_studio_sdk/views/types/views_create_request_data.py +43 -0
  229. label_studio_sdk/views/types/views_create_request_data_filters.py +43 -0
  230. label_studio_sdk/views/types/views_create_request_data_filters_conjunction.py +5 -0
  231. label_studio_sdk/views/types/views_create_request_data_filters_items_item.py +49 -0
  232. label_studio_sdk/views/types/views_create_request_data_filters_items_item_filter.py +31 -0
  233. label_studio_sdk/views/types/views_create_request_data_filters_items_item_operator.py +23 -0
  234. label_studio_sdk/views/types/views_create_request_data_ordering_item.py +31 -0
  235. label_studio_sdk/views/types/views_update_request_data.py +43 -0
  236. label_studio_sdk/views/types/views_update_request_data_filters.py +43 -0
  237. label_studio_sdk/views/types/views_update_request_data_filters_conjunction.py +5 -0
  238. label_studio_sdk/views/types/views_update_request_data_filters_items_item.py +49 -0
  239. label_studio_sdk/views/types/views_update_request_data_filters_items_item_filter.py +31 -0
  240. label_studio_sdk/views/types/views_update_request_data_filters_items_item_operator.py +23 -0
  241. label_studio_sdk/views/types/views_update_request_data_ordering_item.py +31 -0
  242. label_studio_sdk/webhooks/__init__.py +5 -0
  243. label_studio_sdk/webhooks/client.py +636 -0
  244. label_studio_sdk/webhooks/types/__init__.py +5 -0
  245. label_studio_sdk/webhooks/types/webhooks_update_request_actions_item.py +21 -0
  246. label_studio_sdk-1.0.1.dist-info/METADATA +163 -0
  247. label_studio_sdk-1.0.1.dist-info/RECORD +256 -0
  248. {label_studio_sdk-0.0.34.dist-info → label_studio_sdk-1.0.1.dist-info}/WHEEL +1 -2
  249. label_studio_sdk/objects.py +0 -35
  250. label_studio_sdk-0.0.34.dist-info/LICENSE +0 -201
  251. label_studio_sdk-0.0.34.dist-info/METADATA +0 -24
  252. label_studio_sdk-0.0.34.dist-info/RECORD +0 -37
  253. label_studio_sdk-0.0.34.dist-info/top_level.txt +0 -2
  254. tests/test_client.py +0 -37
  255. tests/test_export.py +0 -105
  256. tests/test_interface/__init__.py +0 -1
  257. tests/test_interface/configs.py +0 -137
  258. tests/test_interface/mockups.py +0 -22
  259. tests/test_interface/test_compat.py +0 -64
  260. tests/test_interface/test_control_tags.py +0 -55
  261. tests/test_interface/test_data_generation.py +0 -45
  262. tests/test_interface/test_lpi.py +0 -15
  263. tests/test_interface/test_main.py +0 -196
  264. tests/test_interface/test_object_tags.py +0 -36
  265. tests/test_interface/test_region.py +0 -36
  266. tests/test_interface/test_validate_summary.py +0 -35
  267. tests/test_interface/test_validation.py +0 -59
  268. {tests → label_studio_sdk/_extensions}/__init__.py +0 -0
  269. /label_studio_sdk/{exceptions.py → _legacy/exceptions.py} +0 -0
  270. /label_studio_sdk/{users.py → _legacy/users.py} +0 -0
  271. /label_studio_sdk/{utils.py → _legacy/utils.py} +0 -0
  272. /label_studio_sdk/{workspaces.py → _legacy/workspaces.py} +0 -0
@@ -0,0 +1,888 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ...core.api_error import ApiError
7
+ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ...core.jsonable_encoder import jsonable_encoder
9
+ from ...core.pydantic_utilities import pydantic_v1
10
+ from ...core.request_options import RequestOptions
11
+ from ...types.gcs_export_storage import GcsExportStorage
12
+ from .types.gcs_create_response import GcsCreateResponse
13
+ from .types.gcs_update_response import GcsUpdateResponse
14
+
15
+ # this is used as the default value for optional parameters
16
+ OMIT = typing.cast(typing.Any, ...)
17
+
18
+
19
+ class GcsClient:
20
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
21
+ self._client_wrapper = client_wrapper
22
+
23
+ def list(
24
+ self, *, project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None
25
+ ) -> typing.List[GcsExportStorage]:
26
+ """
27
+ You can connect your Google Cloud Storage bucket to Label Studio as a source storage or target storage. Use this API request to get a list of all GCS export (target) storage connections for a specific project.
28
+
29
+ The project ID can be found in the URL when viewing the project in Label Studio, or you can retrieve all project IDs using [List all projects](../projects/list).
30
+
31
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
32
+
33
+ Parameters
34
+ ----------
35
+ project : typing.Optional[int]
36
+ Project ID
37
+
38
+ request_options : typing.Optional[RequestOptions]
39
+ Request-specific configuration.
40
+
41
+ Returns
42
+ -------
43
+ typing.List[GcsExportStorage]
44
+
45
+
46
+ Examples
47
+ --------
48
+ from label_studio_sdk.client import LabelStudio
49
+
50
+ client = LabelStudio(
51
+ api_key="YOUR_API_KEY",
52
+ )
53
+ client.export_storage.gcs.list()
54
+ """
55
+ _response = self._client_wrapper.httpx_client.request(
56
+ "api/storages/export/gcs", method="GET", params={"project": project}, request_options=request_options
57
+ )
58
+ if 200 <= _response.status_code < 300:
59
+ return pydantic_v1.parse_obj_as(typing.List[GcsExportStorage], _response.json()) # type: ignore
60
+ try:
61
+ _response_json = _response.json()
62
+ except JSONDecodeError:
63
+ raise ApiError(status_code=_response.status_code, body=_response.text)
64
+ raise ApiError(status_code=_response.status_code, body=_response_json)
65
+
66
+ def create(
67
+ self,
68
+ *,
69
+ can_delete_objects: typing.Optional[bool] = OMIT,
70
+ title: typing.Optional[str] = OMIT,
71
+ description: typing.Optional[str] = OMIT,
72
+ project: typing.Optional[int] = OMIT,
73
+ bucket: typing.Optional[str] = OMIT,
74
+ prefix: typing.Optional[str] = OMIT,
75
+ google_application_credentials: typing.Optional[str] = OMIT,
76
+ google_project_id: typing.Optional[str] = OMIT,
77
+ request_options: typing.Optional[RequestOptions] = None,
78
+ ) -> GcsCreateResponse:
79
+ """
80
+ Create a new target storage connection to Google Cloud Storage.
81
+
82
+ For information about the required fields and prerequisites, see [Google Cloud Storage](https://labelstud.io/guide/storage#Google-Cloud-Storage) in the Label Studio documentation.
83
+
84
+ <Tip>After you add the storage, you should validate the connection before attempting to sync your data. Your data will not be exported until you [sync your connection](sync).</Tip>
85
+
86
+ Parameters
87
+ ----------
88
+ can_delete_objects : typing.Optional[bool]
89
+ Deletion from storage enabled.
90
+
91
+ title : typing.Optional[str]
92
+ Storage title
93
+
94
+ description : typing.Optional[str]
95
+ Storage description
96
+
97
+ project : typing.Optional[int]
98
+ Project ID
99
+
100
+ bucket : typing.Optional[str]
101
+ GCS bucket name
102
+
103
+ prefix : typing.Optional[str]
104
+ GCS bucket prefix
105
+
106
+ google_application_credentials : typing.Optional[str]
107
+ The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details.
108
+
109
+ google_project_id : typing.Optional[str]
110
+ Google project ID
111
+
112
+ request_options : typing.Optional[RequestOptions]
113
+ Request-specific configuration.
114
+
115
+ Returns
116
+ -------
117
+ GcsCreateResponse
118
+
119
+
120
+ Examples
121
+ --------
122
+ from label_studio_sdk.client import LabelStudio
123
+
124
+ client = LabelStudio(
125
+ api_key="YOUR_API_KEY",
126
+ )
127
+ client.export_storage.gcs.create()
128
+ """
129
+ _response = self._client_wrapper.httpx_client.request(
130
+ "api/storages/export/gcs",
131
+ method="POST",
132
+ json={
133
+ "can_delete_objects": can_delete_objects,
134
+ "title": title,
135
+ "description": description,
136
+ "project": project,
137
+ "bucket": bucket,
138
+ "prefix": prefix,
139
+ "google_application_credentials": google_application_credentials,
140
+ "google_project_id": google_project_id,
141
+ },
142
+ request_options=request_options,
143
+ omit=OMIT,
144
+ )
145
+ if 200 <= _response.status_code < 300:
146
+ return pydantic_v1.parse_obj_as(GcsCreateResponse, _response.json()) # type: ignore
147
+ try:
148
+ _response_json = _response.json()
149
+ except JSONDecodeError:
150
+ raise ApiError(status_code=_response.status_code, body=_response.text)
151
+ raise ApiError(status_code=_response.status_code, body=_response_json)
152
+
153
+ def validate(
154
+ self,
155
+ *,
156
+ id: typing.Optional[int] = OMIT,
157
+ can_delete_objects: typing.Optional[bool] = OMIT,
158
+ title: typing.Optional[str] = OMIT,
159
+ description: typing.Optional[str] = OMIT,
160
+ project: typing.Optional[int] = OMIT,
161
+ bucket: typing.Optional[str] = OMIT,
162
+ prefix: typing.Optional[str] = OMIT,
163
+ google_application_credentials: typing.Optional[str] = OMIT,
164
+ google_project_id: typing.Optional[str] = OMIT,
165
+ request_options: typing.Optional[RequestOptions] = None,
166
+ ) -> None:
167
+ """
168
+ Validate a specific GCS export storage connection. This is useful to ensure that the storage configuration settings are correct and operational before attempting to export data.
169
+
170
+ Parameters
171
+ ----------
172
+ id : typing.Optional[int]
173
+ Storage ID. If set, storage with specified ID will be updated
174
+
175
+ can_delete_objects : typing.Optional[bool]
176
+ Deletion from storage enabled.
177
+
178
+ title : typing.Optional[str]
179
+ Storage title
180
+
181
+ description : typing.Optional[str]
182
+ Storage description
183
+
184
+ project : typing.Optional[int]
185
+ Project ID
186
+
187
+ bucket : typing.Optional[str]
188
+ GCS bucket name
189
+
190
+ prefix : typing.Optional[str]
191
+ GCS bucket prefix
192
+
193
+ google_application_credentials : typing.Optional[str]
194
+ The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details.
195
+
196
+ google_project_id : typing.Optional[str]
197
+ Google project ID
198
+
199
+ request_options : typing.Optional[RequestOptions]
200
+ Request-specific configuration.
201
+
202
+ Returns
203
+ -------
204
+ None
205
+
206
+ Examples
207
+ --------
208
+ from label_studio_sdk.client import LabelStudio
209
+
210
+ client = LabelStudio(
211
+ api_key="YOUR_API_KEY",
212
+ )
213
+ client.export_storage.gcs.validate()
214
+ """
215
+ _response = self._client_wrapper.httpx_client.request(
216
+ "api/storages/export/gcs/validate",
217
+ method="POST",
218
+ json={
219
+ "id": id,
220
+ "can_delete_objects": can_delete_objects,
221
+ "title": title,
222
+ "description": description,
223
+ "project": project,
224
+ "bucket": bucket,
225
+ "prefix": prefix,
226
+ "google_application_credentials": google_application_credentials,
227
+ "google_project_id": google_project_id,
228
+ },
229
+ request_options=request_options,
230
+ omit=OMIT,
231
+ )
232
+ if 200 <= _response.status_code < 300:
233
+ return
234
+ try:
235
+ _response_json = _response.json()
236
+ except JSONDecodeError:
237
+ raise ApiError(status_code=_response.status_code, body=_response.text)
238
+ raise ApiError(status_code=_response.status_code, body=_response_json)
239
+
240
+ def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> GcsExportStorage:
241
+ """
242
+ Get a specific GCS export storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
243
+
244
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
245
+
246
+ Parameters
247
+ ----------
248
+ id : int
249
+ A unique integer value identifying this gcs export storage.
250
+
251
+ request_options : typing.Optional[RequestOptions]
252
+ Request-specific configuration.
253
+
254
+ Returns
255
+ -------
256
+ GcsExportStorage
257
+
258
+
259
+ Examples
260
+ --------
261
+ from label_studio_sdk.client import LabelStudio
262
+
263
+ client = LabelStudio(
264
+ api_key="YOUR_API_KEY",
265
+ )
266
+ client.export_storage.gcs.get(
267
+ id=1,
268
+ )
269
+ """
270
+ _response = self._client_wrapper.httpx_client.request(
271
+ f"api/storages/export/gcs/{jsonable_encoder(id)}", method="GET", request_options=request_options
272
+ )
273
+ if 200 <= _response.status_code < 300:
274
+ return pydantic_v1.parse_obj_as(GcsExportStorage, _response.json()) # type: ignore
275
+ try:
276
+ _response_json = _response.json()
277
+ except JSONDecodeError:
278
+ raise ApiError(status_code=_response.status_code, body=_response.text)
279
+ raise ApiError(status_code=_response.status_code, body=_response_json)
280
+
281
+ def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None:
282
+ """
283
+ Delete a specific GCS export storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
284
+
285
+ Deleting an export/target storage connection does not affect tasks with synced data in Label Studio. If you want to remove the tasks that were synced from the external storage, you will need to delete them manually from within the Label Studio UI or use the [Delete tasks](../../tasks/delete-all-tasks) API.
286
+
287
+ Parameters
288
+ ----------
289
+ id : int
290
+ A unique integer value identifying this gcs export storage.
291
+
292
+ request_options : typing.Optional[RequestOptions]
293
+ Request-specific configuration.
294
+
295
+ Returns
296
+ -------
297
+ None
298
+
299
+ Examples
300
+ --------
301
+ from label_studio_sdk.client import LabelStudio
302
+
303
+ client = LabelStudio(
304
+ api_key="YOUR_API_KEY",
305
+ )
306
+ client.export_storage.gcs.delete(
307
+ id=1,
308
+ )
309
+ """
310
+ _response = self._client_wrapper.httpx_client.request(
311
+ f"api/storages/export/gcs/{jsonable_encoder(id)}", method="DELETE", request_options=request_options
312
+ )
313
+ if 200 <= _response.status_code < 300:
314
+ return
315
+ try:
316
+ _response_json = _response.json()
317
+ except JSONDecodeError:
318
+ raise ApiError(status_code=_response.status_code, body=_response.text)
319
+ raise ApiError(status_code=_response.status_code, body=_response_json)
320
+
321
+ def update(
322
+ self,
323
+ id: int,
324
+ *,
325
+ can_delete_objects: typing.Optional[bool] = OMIT,
326
+ title: typing.Optional[str] = OMIT,
327
+ description: typing.Optional[str] = OMIT,
328
+ project: typing.Optional[int] = OMIT,
329
+ bucket: typing.Optional[str] = OMIT,
330
+ prefix: typing.Optional[str] = OMIT,
331
+ google_application_credentials: typing.Optional[str] = OMIT,
332
+ google_project_id: typing.Optional[str] = OMIT,
333
+ request_options: typing.Optional[RequestOptions] = None,
334
+ ) -> GcsUpdateResponse:
335
+ """
336
+ Update a specific GCS export storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
337
+
338
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
339
+
340
+ Parameters
341
+ ----------
342
+ id : int
343
+ A unique integer value identifying this gcs export storage.
344
+
345
+ can_delete_objects : typing.Optional[bool]
346
+ Deletion from storage enabled.
347
+
348
+ title : typing.Optional[str]
349
+ Storage title
350
+
351
+ description : typing.Optional[str]
352
+ Storage description
353
+
354
+ project : typing.Optional[int]
355
+ Project ID
356
+
357
+ bucket : typing.Optional[str]
358
+ GCS bucket name
359
+
360
+ prefix : typing.Optional[str]
361
+ GCS bucket prefix
362
+
363
+ google_application_credentials : typing.Optional[str]
364
+ The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details.
365
+
366
+ google_project_id : typing.Optional[str]
367
+ Google project ID
368
+
369
+ request_options : typing.Optional[RequestOptions]
370
+ Request-specific configuration.
371
+
372
+ Returns
373
+ -------
374
+ GcsUpdateResponse
375
+
376
+
377
+ Examples
378
+ --------
379
+ from label_studio_sdk.client import LabelStudio
380
+
381
+ client = LabelStudio(
382
+ api_key="YOUR_API_KEY",
383
+ )
384
+ client.export_storage.gcs.update(
385
+ id=1,
386
+ )
387
+ """
388
+ _response = self._client_wrapper.httpx_client.request(
389
+ f"api/storages/export/gcs/{jsonable_encoder(id)}",
390
+ method="PATCH",
391
+ json={
392
+ "can_delete_objects": can_delete_objects,
393
+ "title": title,
394
+ "description": description,
395
+ "project": project,
396
+ "bucket": bucket,
397
+ "prefix": prefix,
398
+ "google_application_credentials": google_application_credentials,
399
+ "google_project_id": google_project_id,
400
+ },
401
+ request_options=request_options,
402
+ omit=OMIT,
403
+ )
404
+ if 200 <= _response.status_code < 300:
405
+ return pydantic_v1.parse_obj_as(GcsUpdateResponse, _response.json()) # type: ignore
406
+ try:
407
+ _response_json = _response.json()
408
+ except JSONDecodeError:
409
+ raise ApiError(status_code=_response.status_code, body=_response.text)
410
+ raise ApiError(status_code=_response.status_code, body=_response_json)
411
+
412
+ def sync(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GcsExportStorage:
413
+ """
414
+ Sync tasks to a GCS export/target storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
415
+
416
+ Sync operations with external buckets only go one way. They either create tasks from objects in the bucket (source/import storage) or push annotations to the output bucket (export/target storage). Changing something on the bucket side doesn’t guarantee consistency in results.
417
+
418
+ <Note>Before proceeding, you should review [How sync operations work - Source storage](https://labelstud.io/guide/storage#Source-storage) to ensure that your data remains secure and private.</Note>
419
+
420
+ Parameters
421
+ ----------
422
+ id : str
423
+
424
+ request_options : typing.Optional[RequestOptions]
425
+ Request-specific configuration.
426
+
427
+ Returns
428
+ -------
429
+ GcsExportStorage
430
+
431
+
432
+ Examples
433
+ --------
434
+ from label_studio_sdk.client import LabelStudio
435
+
436
+ client = LabelStudio(
437
+ api_key="YOUR_API_KEY",
438
+ )
439
+ client.export_storage.gcs.sync(
440
+ id="id",
441
+ )
442
+ """
443
+ _response = self._client_wrapper.httpx_client.request(
444
+ f"api/storages/export/gcs/{jsonable_encoder(id)}/sync", method="POST", request_options=request_options
445
+ )
446
+ if 200 <= _response.status_code < 300:
447
+ return pydantic_v1.parse_obj_as(GcsExportStorage, _response.json()) # type: ignore
448
+ try:
449
+ _response_json = _response.json()
450
+ except JSONDecodeError:
451
+ raise ApiError(status_code=_response.status_code, body=_response.text)
452
+ raise ApiError(status_code=_response.status_code, body=_response_json)
453
+
454
+
455
+ class AsyncGcsClient:
456
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
457
+ self._client_wrapper = client_wrapper
458
+
459
+ async def list(
460
+ self, *, project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None
461
+ ) -> typing.List[GcsExportStorage]:
462
+ """
463
+ You can connect your Google Cloud Storage bucket to Label Studio as a source storage or target storage. Use this API request to get a list of all GCS export (target) storage connections for a specific project.
464
+
465
+ The project ID can be found in the URL when viewing the project in Label Studio, or you can retrieve all project IDs using [List all projects](../projects/list).
466
+
467
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
468
+
469
+ Parameters
470
+ ----------
471
+ project : typing.Optional[int]
472
+ Project ID
473
+
474
+ request_options : typing.Optional[RequestOptions]
475
+ Request-specific configuration.
476
+
477
+ Returns
478
+ -------
479
+ typing.List[GcsExportStorage]
480
+
481
+
482
+ Examples
483
+ --------
484
+ from label_studio_sdk.client import AsyncLabelStudio
485
+
486
+ client = AsyncLabelStudio(
487
+ api_key="YOUR_API_KEY",
488
+ )
489
+ await client.export_storage.gcs.list()
490
+ """
491
+ _response = await self._client_wrapper.httpx_client.request(
492
+ "api/storages/export/gcs", method="GET", params={"project": project}, request_options=request_options
493
+ )
494
+ if 200 <= _response.status_code < 300:
495
+ return pydantic_v1.parse_obj_as(typing.List[GcsExportStorage], _response.json()) # type: ignore
496
+ try:
497
+ _response_json = _response.json()
498
+ except JSONDecodeError:
499
+ raise ApiError(status_code=_response.status_code, body=_response.text)
500
+ raise ApiError(status_code=_response.status_code, body=_response_json)
501
+
502
+ async def create(
503
+ self,
504
+ *,
505
+ can_delete_objects: typing.Optional[bool] = OMIT,
506
+ title: typing.Optional[str] = OMIT,
507
+ description: typing.Optional[str] = OMIT,
508
+ project: typing.Optional[int] = OMIT,
509
+ bucket: typing.Optional[str] = OMIT,
510
+ prefix: typing.Optional[str] = OMIT,
511
+ google_application_credentials: typing.Optional[str] = OMIT,
512
+ google_project_id: typing.Optional[str] = OMIT,
513
+ request_options: typing.Optional[RequestOptions] = None,
514
+ ) -> GcsCreateResponse:
515
+ """
516
+ Create a new target storage connection to Google Cloud Storage.
517
+
518
+ For information about the required fields and prerequisites, see [Google Cloud Storage](https://labelstud.io/guide/storage#Google-Cloud-Storage) in the Label Studio documentation.
519
+
520
+ <Tip>After you add the storage, you should validate the connection before attempting to sync your data. Your data will not be exported until you [sync your connection](sync).</Tip>
521
+
522
+ Parameters
523
+ ----------
524
+ can_delete_objects : typing.Optional[bool]
525
+ Deletion from storage enabled.
526
+
527
+ title : typing.Optional[str]
528
+ Storage title
529
+
530
+ description : typing.Optional[str]
531
+ Storage description
532
+
533
+ project : typing.Optional[int]
534
+ Project ID
535
+
536
+ bucket : typing.Optional[str]
537
+ GCS bucket name
538
+
539
+ prefix : typing.Optional[str]
540
+ GCS bucket prefix
541
+
542
+ google_application_credentials : typing.Optional[str]
543
+ The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details.
544
+
545
+ google_project_id : typing.Optional[str]
546
+ Google project ID
547
+
548
+ request_options : typing.Optional[RequestOptions]
549
+ Request-specific configuration.
550
+
551
+ Returns
552
+ -------
553
+ GcsCreateResponse
554
+
555
+
556
+ Examples
557
+ --------
558
+ from label_studio_sdk.client import AsyncLabelStudio
559
+
560
+ client = AsyncLabelStudio(
561
+ api_key="YOUR_API_KEY",
562
+ )
563
+ await client.export_storage.gcs.create()
564
+ """
565
+ _response = await self._client_wrapper.httpx_client.request(
566
+ "api/storages/export/gcs",
567
+ method="POST",
568
+ json={
569
+ "can_delete_objects": can_delete_objects,
570
+ "title": title,
571
+ "description": description,
572
+ "project": project,
573
+ "bucket": bucket,
574
+ "prefix": prefix,
575
+ "google_application_credentials": google_application_credentials,
576
+ "google_project_id": google_project_id,
577
+ },
578
+ request_options=request_options,
579
+ omit=OMIT,
580
+ )
581
+ if 200 <= _response.status_code < 300:
582
+ return pydantic_v1.parse_obj_as(GcsCreateResponse, _response.json()) # type: ignore
583
+ try:
584
+ _response_json = _response.json()
585
+ except JSONDecodeError:
586
+ raise ApiError(status_code=_response.status_code, body=_response.text)
587
+ raise ApiError(status_code=_response.status_code, body=_response_json)
588
+
589
+ async def validate(
590
+ self,
591
+ *,
592
+ id: typing.Optional[int] = OMIT,
593
+ can_delete_objects: typing.Optional[bool] = OMIT,
594
+ title: typing.Optional[str] = OMIT,
595
+ description: typing.Optional[str] = OMIT,
596
+ project: typing.Optional[int] = OMIT,
597
+ bucket: typing.Optional[str] = OMIT,
598
+ prefix: typing.Optional[str] = OMIT,
599
+ google_application_credentials: typing.Optional[str] = OMIT,
600
+ google_project_id: typing.Optional[str] = OMIT,
601
+ request_options: typing.Optional[RequestOptions] = None,
602
+ ) -> None:
603
+ """
604
+ Validate a specific GCS export storage connection. This is useful to ensure that the storage configuration settings are correct and operational before attempting to export data.
605
+
606
+ Parameters
607
+ ----------
608
+ id : typing.Optional[int]
609
+ Storage ID. If set, storage with specified ID will be updated
610
+
611
+ can_delete_objects : typing.Optional[bool]
612
+ Deletion from storage enabled.
613
+
614
+ title : typing.Optional[str]
615
+ Storage title
616
+
617
+ description : typing.Optional[str]
618
+ Storage description
619
+
620
+ project : typing.Optional[int]
621
+ Project ID
622
+
623
+ bucket : typing.Optional[str]
624
+ GCS bucket name
625
+
626
+ prefix : typing.Optional[str]
627
+ GCS bucket prefix
628
+
629
+ google_application_credentials : typing.Optional[str]
630
+ The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details.
631
+
632
+ google_project_id : typing.Optional[str]
633
+ Google project ID
634
+
635
+ request_options : typing.Optional[RequestOptions]
636
+ Request-specific configuration.
637
+
638
+ Returns
639
+ -------
640
+ None
641
+
642
+ Examples
643
+ --------
644
+ from label_studio_sdk.client import AsyncLabelStudio
645
+
646
+ client = AsyncLabelStudio(
647
+ api_key="YOUR_API_KEY",
648
+ )
649
+ await client.export_storage.gcs.validate()
650
+ """
651
+ _response = await self._client_wrapper.httpx_client.request(
652
+ "api/storages/export/gcs/validate",
653
+ method="POST",
654
+ json={
655
+ "id": id,
656
+ "can_delete_objects": can_delete_objects,
657
+ "title": title,
658
+ "description": description,
659
+ "project": project,
660
+ "bucket": bucket,
661
+ "prefix": prefix,
662
+ "google_application_credentials": google_application_credentials,
663
+ "google_project_id": google_project_id,
664
+ },
665
+ request_options=request_options,
666
+ omit=OMIT,
667
+ )
668
+ if 200 <= _response.status_code < 300:
669
+ return
670
+ try:
671
+ _response_json = _response.json()
672
+ except JSONDecodeError:
673
+ raise ApiError(status_code=_response.status_code, body=_response.text)
674
+ raise ApiError(status_code=_response.status_code, body=_response_json)
675
+
676
+ async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> GcsExportStorage:
677
+ """
678
+ Get a specific GCS export storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
679
+
680
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
681
+
682
+ Parameters
683
+ ----------
684
+ id : int
685
+ A unique integer value identifying this gcs export storage.
686
+
687
+ request_options : typing.Optional[RequestOptions]
688
+ Request-specific configuration.
689
+
690
+ Returns
691
+ -------
692
+ GcsExportStorage
693
+
694
+
695
+ Examples
696
+ --------
697
+ from label_studio_sdk.client import AsyncLabelStudio
698
+
699
+ client = AsyncLabelStudio(
700
+ api_key="YOUR_API_KEY",
701
+ )
702
+ await client.export_storage.gcs.get(
703
+ id=1,
704
+ )
705
+ """
706
+ _response = await self._client_wrapper.httpx_client.request(
707
+ f"api/storages/export/gcs/{jsonable_encoder(id)}", method="GET", request_options=request_options
708
+ )
709
+ if 200 <= _response.status_code < 300:
710
+ return pydantic_v1.parse_obj_as(GcsExportStorage, _response.json()) # type: ignore
711
+ try:
712
+ _response_json = _response.json()
713
+ except JSONDecodeError:
714
+ raise ApiError(status_code=_response.status_code, body=_response.text)
715
+ raise ApiError(status_code=_response.status_code, body=_response_json)
716
+
717
+ async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None:
718
+ """
719
+ Delete a specific GCS export storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
720
+
721
+ Deleting an export/target storage connection does not affect tasks with synced data in Label Studio. If you want to remove the tasks that were synced from the external storage, you will need to delete them manually from within the Label Studio UI or use the [Delete tasks](../../tasks/delete-all-tasks) API.
722
+
723
+ Parameters
724
+ ----------
725
+ id : int
726
+ A unique integer value identifying this gcs export storage.
727
+
728
+ request_options : typing.Optional[RequestOptions]
729
+ Request-specific configuration.
730
+
731
+ Returns
732
+ -------
733
+ None
734
+
735
+ Examples
736
+ --------
737
+ from label_studio_sdk.client import AsyncLabelStudio
738
+
739
+ client = AsyncLabelStudio(
740
+ api_key="YOUR_API_KEY",
741
+ )
742
+ await client.export_storage.gcs.delete(
743
+ id=1,
744
+ )
745
+ """
746
+ _response = await self._client_wrapper.httpx_client.request(
747
+ f"api/storages/export/gcs/{jsonable_encoder(id)}", method="DELETE", request_options=request_options
748
+ )
749
+ if 200 <= _response.status_code < 300:
750
+ return
751
+ try:
752
+ _response_json = _response.json()
753
+ except JSONDecodeError:
754
+ raise ApiError(status_code=_response.status_code, body=_response.text)
755
+ raise ApiError(status_code=_response.status_code, body=_response_json)
756
+
757
+ async def update(
758
+ self,
759
+ id: int,
760
+ *,
761
+ can_delete_objects: typing.Optional[bool] = OMIT,
762
+ title: typing.Optional[str] = OMIT,
763
+ description: typing.Optional[str] = OMIT,
764
+ project: typing.Optional[int] = OMIT,
765
+ bucket: typing.Optional[str] = OMIT,
766
+ prefix: typing.Optional[str] = OMIT,
767
+ google_application_credentials: typing.Optional[str] = OMIT,
768
+ google_project_id: typing.Optional[str] = OMIT,
769
+ request_options: typing.Optional[RequestOptions] = None,
770
+ ) -> GcsUpdateResponse:
771
+ """
772
+ Update a specific GCS export storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
773
+
774
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
775
+
776
+ Parameters
777
+ ----------
778
+ id : int
779
+ A unique integer value identifying this gcs export storage.
780
+
781
+ can_delete_objects : typing.Optional[bool]
782
+ Deletion from storage enabled.
783
+
784
+ title : typing.Optional[str]
785
+ Storage title
786
+
787
+ description : typing.Optional[str]
788
+ Storage description
789
+
790
+ project : typing.Optional[int]
791
+ Project ID
792
+
793
+ bucket : typing.Optional[str]
794
+ GCS bucket name
795
+
796
+ prefix : typing.Optional[str]
797
+ GCS bucket prefix
798
+
799
+ google_application_credentials : typing.Optional[str]
800
+ The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details.
801
+
802
+ google_project_id : typing.Optional[str]
803
+ Google project ID
804
+
805
+ request_options : typing.Optional[RequestOptions]
806
+ Request-specific configuration.
807
+
808
+ Returns
809
+ -------
810
+ GcsUpdateResponse
811
+
812
+
813
+ Examples
814
+ --------
815
+ from label_studio_sdk.client import AsyncLabelStudio
816
+
817
+ client = AsyncLabelStudio(
818
+ api_key="YOUR_API_KEY",
819
+ )
820
+ await client.export_storage.gcs.update(
821
+ id=1,
822
+ )
823
+ """
824
+ _response = await self._client_wrapper.httpx_client.request(
825
+ f"api/storages/export/gcs/{jsonable_encoder(id)}",
826
+ method="PATCH",
827
+ json={
828
+ "can_delete_objects": can_delete_objects,
829
+ "title": title,
830
+ "description": description,
831
+ "project": project,
832
+ "bucket": bucket,
833
+ "prefix": prefix,
834
+ "google_application_credentials": google_application_credentials,
835
+ "google_project_id": google_project_id,
836
+ },
837
+ request_options=request_options,
838
+ omit=OMIT,
839
+ )
840
+ if 200 <= _response.status_code < 300:
841
+ return pydantic_v1.parse_obj_as(GcsUpdateResponse, _response.json()) # type: ignore
842
+ try:
843
+ _response_json = _response.json()
844
+ except JSONDecodeError:
845
+ raise ApiError(status_code=_response.status_code, body=_response.text)
846
+ raise ApiError(status_code=_response.status_code, body=_response_json)
847
+
848
+ async def sync(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GcsExportStorage:
849
+ """
850
+ Sync tasks to a GCS export/target storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
851
+
852
+ Sync operations with external buckets only go one way. They either create tasks from objects in the bucket (source/import storage) or push annotations to the output bucket (export/target storage). Changing something on the bucket side doesn’t guarantee consistency in results.
853
+
854
+ <Note>Before proceeding, you should review [How sync operations work - Source storage](https://labelstud.io/guide/storage#Source-storage) to ensure that your data remains secure and private.</Note>
855
+
856
+ Parameters
857
+ ----------
858
+ id : str
859
+
860
+ request_options : typing.Optional[RequestOptions]
861
+ Request-specific configuration.
862
+
863
+ Returns
864
+ -------
865
+ GcsExportStorage
866
+
867
+
868
+ Examples
869
+ --------
870
+ from label_studio_sdk.client import AsyncLabelStudio
871
+
872
+ client = AsyncLabelStudio(
873
+ api_key="YOUR_API_KEY",
874
+ )
875
+ await client.export_storage.gcs.sync(
876
+ id="id",
877
+ )
878
+ """
879
+ _response = await self._client_wrapper.httpx_client.request(
880
+ f"api/storages/export/gcs/{jsonable_encoder(id)}/sync", method="POST", request_options=request_options
881
+ )
882
+ if 200 <= _response.status_code < 300:
883
+ return pydantic_v1.parse_obj_as(GcsExportStorage, _response.json()) # type: ignore
884
+ try:
885
+ _response_json = _response.json()
886
+ except JSONDecodeError:
887
+ raise ApiError(status_code=_response.status_code, body=_response.text)
888
+ raise ApiError(status_code=_response.status_code, body=_response_json)