label-studio-sdk 0.0.34__py3-none-any.whl → 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. label_studio_sdk/__init__.py +206 -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/_legacy/__init__.py +11 -0
  16. label_studio_sdk/_legacy/client.py +471 -0
  17. label_studio_sdk/_legacy/label_interface/data_examples.json +96 -0
  18. label_studio_sdk/{label_interface → _legacy/label_interface}/interface.py +9 -6
  19. label_studio_sdk/{project.py → _legacy/project.py} +2 -2
  20. label_studio_sdk/actions/__init__.py +2 -0
  21. label_studio_sdk/actions/client.py +150 -0
  22. label_studio_sdk/annotations/__init__.py +2 -0
  23. label_studio_sdk/annotations/client.py +750 -0
  24. label_studio_sdk/client.py +162 -450
  25. label_studio_sdk/converter/__init__.py +7 -0
  26. label_studio_sdk/converter/audio.py +56 -0
  27. label_studio_sdk/converter/brush.py +452 -0
  28. label_studio_sdk/converter/converter.py +1175 -0
  29. label_studio_sdk/converter/exports/__init__.py +0 -0
  30. label_studio_sdk/converter/exports/csv.py +82 -0
  31. label_studio_sdk/converter/exports/csv2.py +103 -0
  32. label_studio_sdk/converter/funsd.py +85 -0
  33. label_studio_sdk/converter/imports/__init__.py +0 -0
  34. label_studio_sdk/converter/imports/coco.py +314 -0
  35. label_studio_sdk/converter/imports/colors.py +198 -0
  36. label_studio_sdk/converter/imports/label_config.py +45 -0
  37. label_studio_sdk/converter/imports/pathtrack.py +269 -0
  38. label_studio_sdk/converter/imports/yolo.py +236 -0
  39. label_studio_sdk/converter/main.py +202 -0
  40. label_studio_sdk/converter/utils.py +473 -0
  41. label_studio_sdk/core/__init__.py +33 -0
  42. label_studio_sdk/core/api_error.py +15 -0
  43. label_studio_sdk/core/client_wrapper.py +55 -0
  44. label_studio_sdk/core/datetime_utils.py +28 -0
  45. label_studio_sdk/core/file.py +38 -0
  46. label_studio_sdk/core/http_client.py +443 -0
  47. label_studio_sdk/core/jsonable_encoder.py +99 -0
  48. label_studio_sdk/core/pagination.py +87 -0
  49. label_studio_sdk/core/pydantic_utilities.py +28 -0
  50. label_studio_sdk/core/query_encoder.py +33 -0
  51. label_studio_sdk/core/remove_none_from_dict.py +11 -0
  52. label_studio_sdk/core/request_options.py +32 -0
  53. label_studio_sdk/environment.py +7 -0
  54. label_studio_sdk/errors/__init__.py +6 -0
  55. label_studio_sdk/errors/bad_request_error.py +8 -0
  56. label_studio_sdk/errors/internal_server_error.py +8 -0
  57. label_studio_sdk/export_storage/__init__.py +28 -0
  58. label_studio_sdk/export_storage/azure/__init__.py +5 -0
  59. label_studio_sdk/export_storage/azure/client.py +722 -0
  60. label_studio_sdk/export_storage/azure/types/__init__.py +6 -0
  61. label_studio_sdk/export_storage/azure/types/azure_create_response.py +52 -0
  62. label_studio_sdk/export_storage/azure/types/azure_update_response.py +52 -0
  63. label_studio_sdk/export_storage/client.py +107 -0
  64. label_studio_sdk/export_storage/gcs/__init__.py +5 -0
  65. label_studio_sdk/export_storage/gcs/client.py +722 -0
  66. label_studio_sdk/export_storage/gcs/types/__init__.py +6 -0
  67. label_studio_sdk/export_storage/gcs/types/gcs_create_response.py +52 -0
  68. label_studio_sdk/export_storage/gcs/types/gcs_update_response.py +52 -0
  69. label_studio_sdk/export_storage/local/__init__.py +5 -0
  70. label_studio_sdk/export_storage/local/client.py +688 -0
  71. label_studio_sdk/export_storage/local/types/__init__.py +6 -0
  72. label_studio_sdk/export_storage/local/types/local_create_response.py +47 -0
  73. label_studio_sdk/export_storage/local/types/local_update_response.py +47 -0
  74. label_studio_sdk/export_storage/redis/__init__.py +5 -0
  75. label_studio_sdk/export_storage/redis/client.py +714 -0
  76. label_studio_sdk/export_storage/redis/types/__init__.py +6 -0
  77. label_studio_sdk/export_storage/redis/types/redis_create_response.py +57 -0
  78. label_studio_sdk/export_storage/redis/types/redis_update_response.py +57 -0
  79. label_studio_sdk/export_storage/s3/__init__.py +5 -0
  80. label_studio_sdk/export_storage/s3/client.py +820 -0
  81. label_studio_sdk/export_storage/s3/types/__init__.py +6 -0
  82. label_studio_sdk/export_storage/s3/types/s3create_response.py +74 -0
  83. label_studio_sdk/export_storage/s3/types/s3update_response.py +74 -0
  84. label_studio_sdk/export_storage/types/__init__.py +5 -0
  85. label_studio_sdk/export_storage/types/export_storage_list_types_response_item.py +30 -0
  86. label_studio_sdk/files/__init__.py +2 -0
  87. label_studio_sdk/files/client.py +556 -0
  88. label_studio_sdk/import_storage/__init__.py +28 -0
  89. label_studio_sdk/import_storage/azure/__init__.py +5 -0
  90. label_studio_sdk/import_storage/azure/client.py +812 -0
  91. label_studio_sdk/import_storage/azure/types/__init__.py +6 -0
  92. label_studio_sdk/import_storage/azure/types/azure_create_response.py +72 -0
  93. label_studio_sdk/import_storage/azure/types/azure_update_response.py +72 -0
  94. label_studio_sdk/import_storage/client.py +107 -0
  95. label_studio_sdk/import_storage/gcs/__init__.py +5 -0
  96. label_studio_sdk/import_storage/gcs/client.py +812 -0
  97. label_studio_sdk/import_storage/gcs/types/__init__.py +6 -0
  98. label_studio_sdk/import_storage/gcs/types/gcs_create_response.py +72 -0
  99. label_studio_sdk/import_storage/gcs/types/gcs_update_response.py +72 -0
  100. label_studio_sdk/import_storage/local/__init__.py +5 -0
  101. label_studio_sdk/import_storage/local/client.py +690 -0
  102. label_studio_sdk/import_storage/local/types/__init__.py +6 -0
  103. label_studio_sdk/import_storage/local/types/local_create_response.py +47 -0
  104. label_studio_sdk/import_storage/local/types/local_update_response.py +47 -0
  105. label_studio_sdk/import_storage/redis/__init__.py +5 -0
  106. label_studio_sdk/import_storage/redis/client.py +768 -0
  107. label_studio_sdk/import_storage/redis/types/__init__.py +6 -0
  108. label_studio_sdk/import_storage/redis/types/redis_create_response.py +62 -0
  109. label_studio_sdk/import_storage/redis/types/redis_update_response.py +62 -0
  110. label_studio_sdk/import_storage/s3/__init__.py +5 -0
  111. label_studio_sdk/import_storage/s3/client.py +912 -0
  112. label_studio_sdk/import_storage/s3/types/__init__.py +6 -0
  113. label_studio_sdk/import_storage/s3/types/s3create_response.py +99 -0
  114. label_studio_sdk/import_storage/s3/types/s3update_response.py +99 -0
  115. label_studio_sdk/import_storage/types/__init__.py +5 -0
  116. label_studio_sdk/import_storage/types/import_storage_list_types_response_item.py +30 -0
  117. label_studio_sdk/ml/__init__.py +19 -0
  118. label_studio_sdk/ml/client.py +981 -0
  119. label_studio_sdk/ml/types/__init__.py +17 -0
  120. label_studio_sdk/ml/types/ml_create_request_auth_method.py +5 -0
  121. label_studio_sdk/ml/types/ml_create_response.py +78 -0
  122. label_studio_sdk/ml/types/ml_create_response_auth_method.py +5 -0
  123. label_studio_sdk/ml/types/ml_update_request_auth_method.py +5 -0
  124. label_studio_sdk/ml/types/ml_update_response.py +78 -0
  125. label_studio_sdk/ml/types/ml_update_response_auth_method.py +5 -0
  126. label_studio_sdk/predictions/__init__.py +2 -0
  127. label_studio_sdk/predictions/client.py +638 -0
  128. label_studio_sdk/projects/__init__.py +6 -0
  129. label_studio_sdk/projects/client.py +1053 -0
  130. label_studio_sdk/projects/exports/__init__.py +2 -0
  131. label_studio_sdk/projects/exports/client.py +930 -0
  132. label_studio_sdk/projects/types/__init__.py +7 -0
  133. label_studio_sdk/projects/types/projects_create_response.py +96 -0
  134. label_studio_sdk/projects/types/projects_import_tasks_response.py +71 -0
  135. label_studio_sdk/projects/types/projects_list_response.py +33 -0
  136. label_studio_sdk/py.typed +0 -0
  137. label_studio_sdk/tasks/__init__.py +5 -0
  138. label_studio_sdk/tasks/client.py +811 -0
  139. label_studio_sdk/tasks/types/__init__.py +6 -0
  140. label_studio_sdk/tasks/types/tasks_list_request_fields.py +5 -0
  141. label_studio_sdk/tasks/types/tasks_list_response.py +48 -0
  142. label_studio_sdk/types/__init__.py +115 -0
  143. label_studio_sdk/types/annotation.py +116 -0
  144. label_studio_sdk/types/annotation_filter_options.py +42 -0
  145. label_studio_sdk/types/annotation_last_action.py +19 -0
  146. label_studio_sdk/types/azure_blob_export_storage.py +112 -0
  147. label_studio_sdk/types/azure_blob_export_storage_status.py +7 -0
  148. label_studio_sdk/types/azure_blob_import_storage.py +113 -0
  149. label_studio_sdk/types/azure_blob_import_storage_status.py +7 -0
  150. label_studio_sdk/types/base_task.py +113 -0
  151. label_studio_sdk/types/base_user.py +42 -0
  152. label_studio_sdk/types/converted_format.py +36 -0
  153. label_studio_sdk/types/converted_format_status.py +5 -0
  154. label_studio_sdk/types/export.py +48 -0
  155. label_studio_sdk/types/export_convert.py +32 -0
  156. label_studio_sdk/types/export_create.py +54 -0
  157. label_studio_sdk/types/export_create_status.py +5 -0
  158. label_studio_sdk/types/export_status.py +5 -0
  159. label_studio_sdk/types/file_upload.py +30 -0
  160. label_studio_sdk/types/filter.py +53 -0
  161. label_studio_sdk/types/filter_group.py +35 -0
  162. label_studio_sdk/types/gcs_export_storage.py +112 -0
  163. label_studio_sdk/types/gcs_export_storage_status.py +7 -0
  164. label_studio_sdk/types/gcs_import_storage.py +113 -0
  165. label_studio_sdk/types/gcs_import_storage_status.py +7 -0
  166. label_studio_sdk/types/local_files_export_storage.py +97 -0
  167. label_studio_sdk/types/local_files_export_storage_status.py +7 -0
  168. label_studio_sdk/types/local_files_import_storage.py +92 -0
  169. label_studio_sdk/types/local_files_import_storage_status.py +7 -0
  170. label_studio_sdk/types/ml_backend.py +89 -0
  171. label_studio_sdk/types/ml_backend_auth_method.py +5 -0
  172. label_studio_sdk/types/ml_backend_state.py +5 -0
  173. label_studio_sdk/types/prediction.py +78 -0
  174. label_studio_sdk/types/project.py +198 -0
  175. label_studio_sdk/types/project_import.py +63 -0
  176. label_studio_sdk/types/project_import_status.py +5 -0
  177. label_studio_sdk/types/project_label_config.py +32 -0
  178. label_studio_sdk/types/project_sampling.py +7 -0
  179. label_studio_sdk/types/project_skip_queue.py +5 -0
  180. label_studio_sdk/types/redis_export_storage.py +117 -0
  181. label_studio_sdk/types/redis_export_storage_status.py +7 -0
  182. label_studio_sdk/types/redis_import_storage.py +112 -0
  183. label_studio_sdk/types/redis_import_storage_status.py +7 -0
  184. label_studio_sdk/types/s3export_storage.py +134 -0
  185. label_studio_sdk/types/s3export_storage_status.py +7 -0
  186. label_studio_sdk/types/s3import_storage.py +140 -0
  187. label_studio_sdk/types/s3import_storage_status.py +7 -0
  188. label_studio_sdk/types/serialization_option.py +36 -0
  189. label_studio_sdk/types/serialization_options.py +45 -0
  190. label_studio_sdk/types/task.py +157 -0
  191. label_studio_sdk/types/task_filter_options.py +49 -0
  192. label_studio_sdk/types/user_simple.py +37 -0
  193. label_studio_sdk/types/view.py +55 -0
  194. label_studio_sdk/types/webhook.py +67 -0
  195. label_studio_sdk/types/webhook_actions_item.py +21 -0
  196. label_studio_sdk/types/webhook_serializer_for_update.py +67 -0
  197. label_studio_sdk/types/webhook_serializer_for_update_actions_item.py +21 -0
  198. label_studio_sdk/users/__init__.py +5 -0
  199. label_studio_sdk/users/client.py +830 -0
  200. label_studio_sdk/users/types/__init__.py +6 -0
  201. label_studio_sdk/users/types/users_get_token_response.py +36 -0
  202. label_studio_sdk/users/types/users_reset_token_response.py +36 -0
  203. label_studio_sdk/version.py +4 -0
  204. label_studio_sdk/views/__init__.py +31 -0
  205. label_studio_sdk/views/client.py +564 -0
  206. label_studio_sdk/views/types/__init__.py +29 -0
  207. label_studio_sdk/views/types/views_create_request_data.py +43 -0
  208. label_studio_sdk/views/types/views_create_request_data_filters.py +43 -0
  209. label_studio_sdk/views/types/views_create_request_data_filters_conjunction.py +5 -0
  210. label_studio_sdk/views/types/views_create_request_data_filters_items_item.py +47 -0
  211. label_studio_sdk/views/types/views_create_request_data_ordering_item.py +38 -0
  212. label_studio_sdk/views/types/views_create_request_data_ordering_item_direction.py +5 -0
  213. label_studio_sdk/views/types/views_update_request_data.py +43 -0
  214. label_studio_sdk/views/types/views_update_request_data_filters.py +43 -0
  215. label_studio_sdk/views/types/views_update_request_data_filters_conjunction.py +5 -0
  216. label_studio_sdk/views/types/views_update_request_data_filters_items_item.py +47 -0
  217. label_studio_sdk/views/types/views_update_request_data_ordering_item.py +38 -0
  218. label_studio_sdk/views/types/views_update_request_data_ordering_item_direction.py +5 -0
  219. label_studio_sdk/webhooks/__init__.py +5 -0
  220. label_studio_sdk/webhooks/client.py +636 -0
  221. label_studio_sdk/webhooks/types/__init__.py +5 -0
  222. label_studio_sdk/webhooks/types/webhooks_update_request_actions_item.py +21 -0
  223. label_studio_sdk-1.0.0.dist-info/METADATA +307 -0
  224. label_studio_sdk-1.0.0.dist-info/RECORD +239 -0
  225. {label_studio_sdk-0.0.34.dist-info → label_studio_sdk-1.0.0.dist-info}/WHEEL +1 -2
  226. label_studio_sdk-0.0.34.dist-info/LICENSE +0 -201
  227. label_studio_sdk-0.0.34.dist-info/METADATA +0 -24
  228. label_studio_sdk-0.0.34.dist-info/RECORD +0 -37
  229. label_studio_sdk-0.0.34.dist-info/top_level.txt +0 -2
  230. tests/test_client.py +0 -37
  231. tests/test_export.py +0 -105
  232. tests/test_interface/__init__.py +0 -1
  233. tests/test_interface/configs.py +0 -137
  234. tests/test_interface/mockups.py +0 -22
  235. tests/test_interface/test_compat.py +0 -64
  236. tests/test_interface/test_control_tags.py +0 -55
  237. tests/test_interface/test_data_generation.py +0 -45
  238. tests/test_interface/test_lpi.py +0 -15
  239. tests/test_interface/test_main.py +0 -196
  240. tests/test_interface/test_object_tags.py +0 -36
  241. tests/test_interface/test_region.py +0 -36
  242. tests/test_interface/test_validate_summary.py +0 -35
  243. tests/test_interface/test_validation.py +0 -59
  244. {tests → label_studio_sdk/_extensions}/__init__.py +0 -0
  245. /label_studio_sdk/{exceptions.py → _legacy/exceptions.py} +0 -0
  246. /label_studio_sdk/{label_interface → _legacy/label_interface}/__init__.py +0 -0
  247. /label_studio_sdk/{label_interface → _legacy/label_interface}/base.py +0 -0
  248. /label_studio_sdk/{label_interface → _legacy/label_interface}/control_tags.py +0 -0
  249. /label_studio_sdk/{label_interface → _legacy/label_interface}/label_tags.py +0 -0
  250. /label_studio_sdk/{label_interface → _legacy/label_interface}/object_tags.py +0 -0
  251. /label_studio_sdk/{label_interface → _legacy/label_interface}/region.py +0 -0
  252. /label_studio_sdk/{objects.py → _legacy/objects.py} +0 -0
  253. /label_studio_sdk/{schema → _legacy/schema}/label_config_schema.json +0 -0
  254. /label_studio_sdk/{users.py → _legacy/users.py} +0 -0
  255. /label_studio_sdk/{utils.py → _legacy/utils.py} +0 -0
  256. /label_studio_sdk/{workspaces.py → _legacy/workspaces.py} +0 -0
@@ -0,0 +1,714 @@
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.redis_export_storage import RedisExportStorage
12
+ from .types.redis_create_response import RedisCreateResponse
13
+ from .types.redis_update_response import RedisUpdateResponse
14
+
15
+ # this is used as the default value for optional parameters
16
+ OMIT = typing.cast(typing.Any, ...)
17
+
18
+
19
+ class RedisClient:
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[RedisExportStorage]:
26
+ """
27
+ You can connect your Redis database to Label Studio as a source storage or target storage. Use this API request to get a list of all Redis 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[RedisExportStorage]
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.redis.list()
54
+ """
55
+ _response = self._client_wrapper.httpx_client.request(
56
+ "api/storages/export/redis", 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[RedisExportStorage], _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
+ project: typing.Optional[int] = OMIT,
70
+ path: typing.Optional[str] = OMIT,
71
+ host: typing.Optional[str] = OMIT,
72
+ port: typing.Optional[str] = OMIT,
73
+ password: typing.Optional[str] = OMIT,
74
+ db: typing.Optional[int] = OMIT,
75
+ request_options: typing.Optional[RequestOptions] = None,
76
+ ) -> RedisCreateResponse:
77
+ """
78
+ Create a new target storage connection to Redis.
79
+
80
+ For information about the required fields and prerequisites, see [Redis database](https://labelstud.io/guide/storage#Redis-database) in the Label Studio documentation.
81
+
82
+ <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>
83
+
84
+ Parameters
85
+ ----------
86
+ project : typing.Optional[int]
87
+ Project ID
88
+
89
+ path : typing.Optional[str]
90
+ Storage prefix (optional)
91
+
92
+ host : typing.Optional[str]
93
+ Server Host IP (optional)
94
+
95
+ port : typing.Optional[str]
96
+ Server Port (optional)
97
+
98
+ password : typing.Optional[str]
99
+ Server Password (optional)
100
+
101
+ db : typing.Optional[int]
102
+ Database ID of database to use
103
+
104
+ request_options : typing.Optional[RequestOptions]
105
+ Request-specific configuration.
106
+
107
+ Returns
108
+ -------
109
+ RedisCreateResponse
110
+
111
+
112
+ Examples
113
+ --------
114
+ from label_studio_sdk.client import LabelStudio
115
+
116
+ client = LabelStudio(
117
+ api_key="YOUR_API_KEY",
118
+ )
119
+ client.export_storage.redis.create()
120
+ """
121
+ _response = self._client_wrapper.httpx_client.request(
122
+ "api/storages/export/redis",
123
+ method="POST",
124
+ json={"project": project, "path": path, "host": host, "port": port, "password": password, "db": db},
125
+ request_options=request_options,
126
+ omit=OMIT,
127
+ )
128
+ if 200 <= _response.status_code < 300:
129
+ return pydantic_v1.parse_obj_as(RedisCreateResponse, _response.json()) # type: ignore
130
+ try:
131
+ _response_json = _response.json()
132
+ except JSONDecodeError:
133
+ raise ApiError(status_code=_response.status_code, body=_response.text)
134
+ raise ApiError(status_code=_response.status_code, body=_response_json)
135
+
136
+ def validate(self, *, request_options: typing.Optional[RequestOptions] = None) -> RedisExportStorage:
137
+ """
138
+ Validate a specific Redis export storage connection. This is useful to ensure that the storage configuration settings are correct and operational before attempting to export data.
139
+
140
+ Parameters
141
+ ----------
142
+ request_options : typing.Optional[RequestOptions]
143
+ Request-specific configuration.
144
+
145
+ Returns
146
+ -------
147
+ RedisExportStorage
148
+
149
+
150
+ Examples
151
+ --------
152
+ from label_studio_sdk.client import LabelStudio
153
+
154
+ client = LabelStudio(
155
+ api_key="YOUR_API_KEY",
156
+ )
157
+ client.export_storage.redis.validate()
158
+ """
159
+ _response = self._client_wrapper.httpx_client.request(
160
+ "api/storages/export/redis/validate", method="POST", request_options=request_options
161
+ )
162
+ if 200 <= _response.status_code < 300:
163
+ return pydantic_v1.parse_obj_as(RedisExportStorage, _response.json()) # type: ignore
164
+ try:
165
+ _response_json = _response.json()
166
+ except JSONDecodeError:
167
+ raise ApiError(status_code=_response.status_code, body=_response.text)
168
+ raise ApiError(status_code=_response.status_code, body=_response_json)
169
+
170
+ def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> RedisExportStorage:
171
+ """
172
+ Get a specific Redis export storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
173
+
174
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
175
+
176
+ Parameters
177
+ ----------
178
+ id : int
179
+ A unique integer value identifying this redis export storage.
180
+
181
+ request_options : typing.Optional[RequestOptions]
182
+ Request-specific configuration.
183
+
184
+ Returns
185
+ -------
186
+ RedisExportStorage
187
+
188
+
189
+ Examples
190
+ --------
191
+ from label_studio_sdk.client import LabelStudio
192
+
193
+ client = LabelStudio(
194
+ api_key="YOUR_API_KEY",
195
+ )
196
+ client.export_storage.redis.get(
197
+ id=1,
198
+ )
199
+ """
200
+ _response = self._client_wrapper.httpx_client.request(
201
+ f"api/storages/export/redis/{jsonable_encoder(id)}", method="GET", request_options=request_options
202
+ )
203
+ if 200 <= _response.status_code < 300:
204
+ return pydantic_v1.parse_obj_as(RedisExportStorage, _response.json()) # type: ignore
205
+ try:
206
+ _response_json = _response.json()
207
+ except JSONDecodeError:
208
+ raise ApiError(status_code=_response.status_code, body=_response.text)
209
+ raise ApiError(status_code=_response.status_code, body=_response_json)
210
+
211
+ def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None:
212
+ """
213
+ Delete a specific Redis export storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
214
+
215
+ 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.
216
+
217
+ Parameters
218
+ ----------
219
+ id : int
220
+ A unique integer value identifying this redis export storage.
221
+
222
+ request_options : typing.Optional[RequestOptions]
223
+ Request-specific configuration.
224
+
225
+ Returns
226
+ -------
227
+ None
228
+
229
+ Examples
230
+ --------
231
+ from label_studio_sdk.client import LabelStudio
232
+
233
+ client = LabelStudio(
234
+ api_key="YOUR_API_KEY",
235
+ )
236
+ client.export_storage.redis.delete(
237
+ id=1,
238
+ )
239
+ """
240
+ _response = self._client_wrapper.httpx_client.request(
241
+ f"api/storages/export/redis/{jsonable_encoder(id)}", method="DELETE", request_options=request_options
242
+ )
243
+ if 200 <= _response.status_code < 300:
244
+ return
245
+ try:
246
+ _response_json = _response.json()
247
+ except JSONDecodeError:
248
+ raise ApiError(status_code=_response.status_code, body=_response.text)
249
+ raise ApiError(status_code=_response.status_code, body=_response_json)
250
+
251
+ def update(
252
+ self,
253
+ id: int,
254
+ *,
255
+ project: typing.Optional[int] = OMIT,
256
+ path: typing.Optional[str] = OMIT,
257
+ host: typing.Optional[str] = OMIT,
258
+ port: typing.Optional[str] = OMIT,
259
+ password: typing.Optional[str] = OMIT,
260
+ db: typing.Optional[int] = OMIT,
261
+ request_options: typing.Optional[RequestOptions] = None,
262
+ ) -> RedisUpdateResponse:
263
+ """
264
+ Update a specific Redis export storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
265
+
266
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
267
+
268
+ Parameters
269
+ ----------
270
+ id : int
271
+ A unique integer value identifying this redis export storage.
272
+
273
+ project : typing.Optional[int]
274
+ Project ID
275
+
276
+ path : typing.Optional[str]
277
+ Storage prefix (optional)
278
+
279
+ host : typing.Optional[str]
280
+ Server Host IP (optional)
281
+
282
+ port : typing.Optional[str]
283
+ Server Port (optional)
284
+
285
+ password : typing.Optional[str]
286
+ Server Password (optional)
287
+
288
+ db : typing.Optional[int]
289
+ Database ID of database to use
290
+
291
+ request_options : typing.Optional[RequestOptions]
292
+ Request-specific configuration.
293
+
294
+ Returns
295
+ -------
296
+ RedisUpdateResponse
297
+
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.redis.update(
307
+ id=1,
308
+ )
309
+ """
310
+ _response = self._client_wrapper.httpx_client.request(
311
+ f"api/storages/export/redis/{jsonable_encoder(id)}",
312
+ method="PATCH",
313
+ json={"project": project, "path": path, "host": host, "port": port, "password": password, "db": db},
314
+ request_options=request_options,
315
+ omit=OMIT,
316
+ )
317
+ if 200 <= _response.status_code < 300:
318
+ return pydantic_v1.parse_obj_as(RedisUpdateResponse, _response.json()) # type: ignore
319
+ try:
320
+ _response_json = _response.json()
321
+ except JSONDecodeError:
322
+ raise ApiError(status_code=_response.status_code, body=_response.text)
323
+ raise ApiError(status_code=_response.status_code, body=_response_json)
324
+
325
+ def sync(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> RedisExportStorage:
326
+ """
327
+ Sync tasks to an Redis export/target storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
328
+
329
+ Sync operations with external databases only go one way. They either create tasks from objects in the database (source/import storage) or push annotations to the output database (export/target storage). Changing something on the database side doesn’t guarantee consistency in results.
330
+
331
+ <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>
332
+
333
+ Parameters
334
+ ----------
335
+ id : str
336
+
337
+ request_options : typing.Optional[RequestOptions]
338
+ Request-specific configuration.
339
+
340
+ Returns
341
+ -------
342
+ RedisExportStorage
343
+
344
+
345
+ Examples
346
+ --------
347
+ from label_studio_sdk.client import LabelStudio
348
+
349
+ client = LabelStudio(
350
+ api_key="YOUR_API_KEY",
351
+ )
352
+ client.export_storage.redis.sync(
353
+ id="id",
354
+ )
355
+ """
356
+ _response = self._client_wrapper.httpx_client.request(
357
+ f"api/storages/export/redis/{jsonable_encoder(id)}/sync", method="POST", request_options=request_options
358
+ )
359
+ if 200 <= _response.status_code < 300:
360
+ return pydantic_v1.parse_obj_as(RedisExportStorage, _response.json()) # type: ignore
361
+ try:
362
+ _response_json = _response.json()
363
+ except JSONDecodeError:
364
+ raise ApiError(status_code=_response.status_code, body=_response.text)
365
+ raise ApiError(status_code=_response.status_code, body=_response_json)
366
+
367
+
368
+ class AsyncRedisClient:
369
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
370
+ self._client_wrapper = client_wrapper
371
+
372
+ async def list(
373
+ self, *, project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None
374
+ ) -> typing.List[RedisExportStorage]:
375
+ """
376
+ You can connect your Redis database to Label Studio as a source storage or target storage. Use this API request to get a list of all Redis export (target) storage connections for a specific project.
377
+
378
+ 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).
379
+
380
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
381
+
382
+ Parameters
383
+ ----------
384
+ project : typing.Optional[int]
385
+ Project ID
386
+
387
+ request_options : typing.Optional[RequestOptions]
388
+ Request-specific configuration.
389
+
390
+ Returns
391
+ -------
392
+ typing.List[RedisExportStorage]
393
+
394
+
395
+ Examples
396
+ --------
397
+ from label_studio_sdk.client import AsyncLabelStudio
398
+
399
+ client = AsyncLabelStudio(
400
+ api_key="YOUR_API_KEY",
401
+ )
402
+ await client.export_storage.redis.list()
403
+ """
404
+ _response = await self._client_wrapper.httpx_client.request(
405
+ "api/storages/export/redis", method="GET", params={"project": project}, request_options=request_options
406
+ )
407
+ if 200 <= _response.status_code < 300:
408
+ return pydantic_v1.parse_obj_as(typing.List[RedisExportStorage], _response.json()) # type: ignore
409
+ try:
410
+ _response_json = _response.json()
411
+ except JSONDecodeError:
412
+ raise ApiError(status_code=_response.status_code, body=_response.text)
413
+ raise ApiError(status_code=_response.status_code, body=_response_json)
414
+
415
+ async def create(
416
+ self,
417
+ *,
418
+ project: typing.Optional[int] = OMIT,
419
+ path: typing.Optional[str] = OMIT,
420
+ host: typing.Optional[str] = OMIT,
421
+ port: typing.Optional[str] = OMIT,
422
+ password: typing.Optional[str] = OMIT,
423
+ db: typing.Optional[int] = OMIT,
424
+ request_options: typing.Optional[RequestOptions] = None,
425
+ ) -> RedisCreateResponse:
426
+ """
427
+ Create a new target storage connection to Redis.
428
+
429
+ For information about the required fields and prerequisites, see [Redis database](https://labelstud.io/guide/storage#Redis-database) in the Label Studio documentation.
430
+
431
+ <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>
432
+
433
+ Parameters
434
+ ----------
435
+ project : typing.Optional[int]
436
+ Project ID
437
+
438
+ path : typing.Optional[str]
439
+ Storage prefix (optional)
440
+
441
+ host : typing.Optional[str]
442
+ Server Host IP (optional)
443
+
444
+ port : typing.Optional[str]
445
+ Server Port (optional)
446
+
447
+ password : typing.Optional[str]
448
+ Server Password (optional)
449
+
450
+ db : typing.Optional[int]
451
+ Database ID of database to use
452
+
453
+ request_options : typing.Optional[RequestOptions]
454
+ Request-specific configuration.
455
+
456
+ Returns
457
+ -------
458
+ RedisCreateResponse
459
+
460
+
461
+ Examples
462
+ --------
463
+ from label_studio_sdk.client import AsyncLabelStudio
464
+
465
+ client = AsyncLabelStudio(
466
+ api_key="YOUR_API_KEY",
467
+ )
468
+ await client.export_storage.redis.create()
469
+ """
470
+ _response = await self._client_wrapper.httpx_client.request(
471
+ "api/storages/export/redis",
472
+ method="POST",
473
+ json={"project": project, "path": path, "host": host, "port": port, "password": password, "db": db},
474
+ request_options=request_options,
475
+ omit=OMIT,
476
+ )
477
+ if 200 <= _response.status_code < 300:
478
+ return pydantic_v1.parse_obj_as(RedisCreateResponse, _response.json()) # type: ignore
479
+ try:
480
+ _response_json = _response.json()
481
+ except JSONDecodeError:
482
+ raise ApiError(status_code=_response.status_code, body=_response.text)
483
+ raise ApiError(status_code=_response.status_code, body=_response_json)
484
+
485
+ async def validate(self, *, request_options: typing.Optional[RequestOptions] = None) -> RedisExportStorage:
486
+ """
487
+ Validate a specific Redis export storage connection. This is useful to ensure that the storage configuration settings are correct and operational before attempting to export data.
488
+
489
+ Parameters
490
+ ----------
491
+ request_options : typing.Optional[RequestOptions]
492
+ Request-specific configuration.
493
+
494
+ Returns
495
+ -------
496
+ RedisExportStorage
497
+
498
+
499
+ Examples
500
+ --------
501
+ from label_studio_sdk.client import AsyncLabelStudio
502
+
503
+ client = AsyncLabelStudio(
504
+ api_key="YOUR_API_KEY",
505
+ )
506
+ await client.export_storage.redis.validate()
507
+ """
508
+ _response = await self._client_wrapper.httpx_client.request(
509
+ "api/storages/export/redis/validate", method="POST", request_options=request_options
510
+ )
511
+ if 200 <= _response.status_code < 300:
512
+ return pydantic_v1.parse_obj_as(RedisExportStorage, _response.json()) # type: ignore
513
+ try:
514
+ _response_json = _response.json()
515
+ except JSONDecodeError:
516
+ raise ApiError(status_code=_response.status_code, body=_response.text)
517
+ raise ApiError(status_code=_response.status_code, body=_response_json)
518
+
519
+ async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> RedisExportStorage:
520
+ """
521
+ Get a specific Redis export storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
522
+
523
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
524
+
525
+ Parameters
526
+ ----------
527
+ id : int
528
+ A unique integer value identifying this redis export storage.
529
+
530
+ request_options : typing.Optional[RequestOptions]
531
+ Request-specific configuration.
532
+
533
+ Returns
534
+ -------
535
+ RedisExportStorage
536
+
537
+
538
+ Examples
539
+ --------
540
+ from label_studio_sdk.client import AsyncLabelStudio
541
+
542
+ client = AsyncLabelStudio(
543
+ api_key="YOUR_API_KEY",
544
+ )
545
+ await client.export_storage.redis.get(
546
+ id=1,
547
+ )
548
+ """
549
+ _response = await self._client_wrapper.httpx_client.request(
550
+ f"api/storages/export/redis/{jsonable_encoder(id)}", method="GET", request_options=request_options
551
+ )
552
+ if 200 <= _response.status_code < 300:
553
+ return pydantic_v1.parse_obj_as(RedisExportStorage, _response.json()) # type: ignore
554
+ try:
555
+ _response_json = _response.json()
556
+ except JSONDecodeError:
557
+ raise ApiError(status_code=_response.status_code, body=_response.text)
558
+ raise ApiError(status_code=_response.status_code, body=_response_json)
559
+
560
+ async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None:
561
+ """
562
+ Delete a specific Redis export storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
563
+
564
+ 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.
565
+
566
+ Parameters
567
+ ----------
568
+ id : int
569
+ A unique integer value identifying this redis export storage.
570
+
571
+ request_options : typing.Optional[RequestOptions]
572
+ Request-specific configuration.
573
+
574
+ Returns
575
+ -------
576
+ None
577
+
578
+ Examples
579
+ --------
580
+ from label_studio_sdk.client import AsyncLabelStudio
581
+
582
+ client = AsyncLabelStudio(
583
+ api_key="YOUR_API_KEY",
584
+ )
585
+ await client.export_storage.redis.delete(
586
+ id=1,
587
+ )
588
+ """
589
+ _response = await self._client_wrapper.httpx_client.request(
590
+ f"api/storages/export/redis/{jsonable_encoder(id)}", method="DELETE", request_options=request_options
591
+ )
592
+ if 200 <= _response.status_code < 300:
593
+ return
594
+ try:
595
+ _response_json = _response.json()
596
+ except JSONDecodeError:
597
+ raise ApiError(status_code=_response.status_code, body=_response.text)
598
+ raise ApiError(status_code=_response.status_code, body=_response_json)
599
+
600
+ async def update(
601
+ self,
602
+ id: int,
603
+ *,
604
+ project: typing.Optional[int] = OMIT,
605
+ path: typing.Optional[str] = OMIT,
606
+ host: typing.Optional[str] = OMIT,
607
+ port: typing.Optional[str] = OMIT,
608
+ password: typing.Optional[str] = OMIT,
609
+ db: typing.Optional[int] = OMIT,
610
+ request_options: typing.Optional[RequestOptions] = None,
611
+ ) -> RedisUpdateResponse:
612
+ """
613
+ Update a specific Redis export storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
614
+
615
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
616
+
617
+ Parameters
618
+ ----------
619
+ id : int
620
+ A unique integer value identifying this redis export storage.
621
+
622
+ project : typing.Optional[int]
623
+ Project ID
624
+
625
+ path : typing.Optional[str]
626
+ Storage prefix (optional)
627
+
628
+ host : typing.Optional[str]
629
+ Server Host IP (optional)
630
+
631
+ port : typing.Optional[str]
632
+ Server Port (optional)
633
+
634
+ password : typing.Optional[str]
635
+ Server Password (optional)
636
+
637
+ db : typing.Optional[int]
638
+ Database ID of database to use
639
+
640
+ request_options : typing.Optional[RequestOptions]
641
+ Request-specific configuration.
642
+
643
+ Returns
644
+ -------
645
+ RedisUpdateResponse
646
+
647
+
648
+ Examples
649
+ --------
650
+ from label_studio_sdk.client import AsyncLabelStudio
651
+
652
+ client = AsyncLabelStudio(
653
+ api_key="YOUR_API_KEY",
654
+ )
655
+ await client.export_storage.redis.update(
656
+ id=1,
657
+ )
658
+ """
659
+ _response = await self._client_wrapper.httpx_client.request(
660
+ f"api/storages/export/redis/{jsonable_encoder(id)}",
661
+ method="PATCH",
662
+ json={"project": project, "path": path, "host": host, "port": port, "password": password, "db": db},
663
+ request_options=request_options,
664
+ omit=OMIT,
665
+ )
666
+ if 200 <= _response.status_code < 300:
667
+ return pydantic_v1.parse_obj_as(RedisUpdateResponse, _response.json()) # type: ignore
668
+ try:
669
+ _response_json = _response.json()
670
+ except JSONDecodeError:
671
+ raise ApiError(status_code=_response.status_code, body=_response.text)
672
+ raise ApiError(status_code=_response.status_code, body=_response_json)
673
+
674
+ async def sync(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> RedisExportStorage:
675
+ """
676
+ Sync tasks to an Redis export/target storage connection. You will need to provide the export storage ID. You can find this using [List export storages](list).
677
+
678
+ Sync operations with external databases only go one way. They either create tasks from objects in the database (source/import storage) or push annotations to the output database (export/target storage). Changing something on the database side doesn’t guarantee consistency in results.
679
+
680
+ <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>
681
+
682
+ Parameters
683
+ ----------
684
+ id : str
685
+
686
+ request_options : typing.Optional[RequestOptions]
687
+ Request-specific configuration.
688
+
689
+ Returns
690
+ -------
691
+ RedisExportStorage
692
+
693
+
694
+ Examples
695
+ --------
696
+ from label_studio_sdk.client import AsyncLabelStudio
697
+
698
+ client = AsyncLabelStudio(
699
+ api_key="YOUR_API_KEY",
700
+ )
701
+ await client.export_storage.redis.sync(
702
+ id="id",
703
+ )
704
+ """
705
+ _response = await self._client_wrapper.httpx_client.request(
706
+ f"api/storages/export/redis/{jsonable_encoder(id)}/sync", method="POST", request_options=request_options
707
+ )
708
+ if 200 <= _response.status_code < 300:
709
+ return pydantic_v1.parse_obj_as(RedisExportStorage, _response.json()) # type: ignore
710
+ try:
711
+ _response_json = _response.json()
712
+ except JSONDecodeError:
713
+ raise ApiError(status_code=_response.status_code, body=_response.text)
714
+ raise ApiError(status_code=_response.status_code, body=_response_json)