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,768 @@
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_import_storage import RedisImportStorage
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[RedisImportStorage]:
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 import (source) 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[RedisImportStorage]
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.import_storage.redis.list()
54
+ """
55
+ _response = self._client_wrapper.httpx_client.request(
56
+ "api/storages/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[RedisImportStorage], _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
+ regex_filter: typing.Optional[str] = OMIT,
75
+ use_blob_urls: typing.Optional[bool] = OMIT,
76
+ request_options: typing.Optional[RequestOptions] = None,
77
+ ) -> RedisCreateResponse:
78
+ """
79
+ Create a new source storage connection to a Redis database.
80
+
81
+ For information about the required fields and prerequisites, see [Redis database](https://labelstud.io/guide/storage#Redis-database) in the Label Studio documentation.
82
+
83
+ <Tip>After you add the storage, you should validate the connection before attempting to sync your data. Your data will not be imported until you [sync your connection](sync).</Tip>
84
+
85
+ Parameters
86
+ ----------
87
+ project : typing.Optional[int]
88
+ Project ID
89
+
90
+ path : typing.Optional[str]
91
+ Storage prefix (optional)
92
+
93
+ host : typing.Optional[str]
94
+ Server Host IP (optional)
95
+
96
+ port : typing.Optional[str]
97
+ Server Port (optional)
98
+
99
+ password : typing.Optional[str]
100
+ Server Password (optional)
101
+
102
+ regex_filter : typing.Optional[str]
103
+ Cloud storage regex for filtering objects
104
+
105
+ use_blob_urls : typing.Optional[bool]
106
+ Interpret objects as BLOBs and generate URLs
107
+
108
+ request_options : typing.Optional[RequestOptions]
109
+ Request-specific configuration.
110
+
111
+ Returns
112
+ -------
113
+ RedisCreateResponse
114
+
115
+
116
+ Examples
117
+ --------
118
+ from label_studio_sdk.client import LabelStudio
119
+
120
+ client = LabelStudio(
121
+ api_key="YOUR_API_KEY",
122
+ )
123
+ client.import_storage.redis.create()
124
+ """
125
+ _response = self._client_wrapper.httpx_client.request(
126
+ "api/storages/redis/",
127
+ method="POST",
128
+ json={
129
+ "project": project,
130
+ "path": path,
131
+ "host": host,
132
+ "port": port,
133
+ "password": password,
134
+ "regex_filter": regex_filter,
135
+ "use_blob_urls": use_blob_urls,
136
+ },
137
+ request_options=request_options,
138
+ omit=OMIT,
139
+ )
140
+ if 200 <= _response.status_code < 300:
141
+ return pydantic_v1.parse_obj_as(RedisCreateResponse, _response.json()) # type: ignore
142
+ try:
143
+ _response_json = _response.json()
144
+ except JSONDecodeError:
145
+ raise ApiError(status_code=_response.status_code, body=_response.text)
146
+ raise ApiError(status_code=_response.status_code, body=_response_json)
147
+
148
+ def validate(self, *, request_options: typing.Optional[RequestOptions] = None) -> RedisImportStorage:
149
+ """
150
+ Validate a specific Redis import storage connection. This is useful to ensure that the storage configuration settings are correct and operational before attempting to import data.
151
+
152
+ Parameters
153
+ ----------
154
+ request_options : typing.Optional[RequestOptions]
155
+ Request-specific configuration.
156
+
157
+ Returns
158
+ -------
159
+ RedisImportStorage
160
+
161
+
162
+ Examples
163
+ --------
164
+ from label_studio_sdk.client import LabelStudio
165
+
166
+ client = LabelStudio(
167
+ api_key="YOUR_API_KEY",
168
+ )
169
+ client.import_storage.redis.validate()
170
+ """
171
+ _response = self._client_wrapper.httpx_client.request(
172
+ "api/storages/redis/validate", method="POST", request_options=request_options
173
+ )
174
+ if 200 <= _response.status_code < 300:
175
+ return pydantic_v1.parse_obj_as(RedisImportStorage, _response.json()) # type: ignore
176
+ try:
177
+ _response_json = _response.json()
178
+ except JSONDecodeError:
179
+ raise ApiError(status_code=_response.status_code, body=_response.text)
180
+ raise ApiError(status_code=_response.status_code, body=_response_json)
181
+
182
+ def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> RedisImportStorage:
183
+ """
184
+ Get a specific Redis import storage connection. You will need to provide the import storage ID. You can find this using [List import storages](list).
185
+
186
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
187
+
188
+ Parameters
189
+ ----------
190
+ id : int
191
+ A unique integer value identifying this redis import storage.
192
+
193
+ request_options : typing.Optional[RequestOptions]
194
+ Request-specific configuration.
195
+
196
+ Returns
197
+ -------
198
+ RedisImportStorage
199
+
200
+
201
+ Examples
202
+ --------
203
+ from label_studio_sdk.client import LabelStudio
204
+
205
+ client = LabelStudio(
206
+ api_key="YOUR_API_KEY",
207
+ )
208
+ client.import_storage.redis.get(
209
+ id=1,
210
+ )
211
+ """
212
+ _response = self._client_wrapper.httpx_client.request(
213
+ f"api/storages/redis/{jsonable_encoder(id)}", method="GET", request_options=request_options
214
+ )
215
+ if 200 <= _response.status_code < 300:
216
+ return pydantic_v1.parse_obj_as(RedisImportStorage, _response.json()) # type: ignore
217
+ try:
218
+ _response_json = _response.json()
219
+ except JSONDecodeError:
220
+ raise ApiError(status_code=_response.status_code, body=_response.text)
221
+ raise ApiError(status_code=_response.status_code, body=_response_json)
222
+
223
+ def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None:
224
+ """
225
+ Delete a specific Redis import storage connection. You will need to provide the import storage ID. You can find this using [List import storages](list).
226
+
227
+ Deleting a source storage connection does not affect tasks with synced data in Label Studio. The sync process is designed to import new or updated tasks from the connected storage into the project, but it does not track deletions of files from the storage. Therefore, if you remove the external storage connection, the tasks that were created from that storage will remain in the project.
228
+
229
+ 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.
230
+
231
+ Parameters
232
+ ----------
233
+ id : int
234
+ A unique integer value identifying this redis import storage.
235
+
236
+ request_options : typing.Optional[RequestOptions]
237
+ Request-specific configuration.
238
+
239
+ Returns
240
+ -------
241
+ None
242
+
243
+ Examples
244
+ --------
245
+ from label_studio_sdk.client import LabelStudio
246
+
247
+ client = LabelStudio(
248
+ api_key="YOUR_API_KEY",
249
+ )
250
+ client.import_storage.redis.delete(
251
+ id=1,
252
+ )
253
+ """
254
+ _response = self._client_wrapper.httpx_client.request(
255
+ f"api/storages/redis/{jsonable_encoder(id)}", method="DELETE", request_options=request_options
256
+ )
257
+ if 200 <= _response.status_code < 300:
258
+ return
259
+ try:
260
+ _response_json = _response.json()
261
+ except JSONDecodeError:
262
+ raise ApiError(status_code=_response.status_code, body=_response.text)
263
+ raise ApiError(status_code=_response.status_code, body=_response_json)
264
+
265
+ def update(
266
+ self,
267
+ id: int,
268
+ *,
269
+ project: typing.Optional[int] = OMIT,
270
+ path: typing.Optional[str] = OMIT,
271
+ host: typing.Optional[str] = OMIT,
272
+ port: typing.Optional[str] = OMIT,
273
+ password: typing.Optional[str] = OMIT,
274
+ regex_filter: typing.Optional[str] = OMIT,
275
+ use_blob_urls: typing.Optional[bool] = OMIT,
276
+ request_options: typing.Optional[RequestOptions] = None,
277
+ ) -> RedisUpdateResponse:
278
+ """
279
+ Update a specific Redis import storage connection. You will need to provide the import storage ID. You can find this using [List import storages](list).
280
+
281
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
282
+
283
+ Parameters
284
+ ----------
285
+ id : int
286
+ A unique integer value identifying this redis import storage.
287
+
288
+ project : typing.Optional[int]
289
+ Project ID
290
+
291
+ path : typing.Optional[str]
292
+ Storage prefix (optional)
293
+
294
+ host : typing.Optional[str]
295
+ Server Host IP (optional)
296
+
297
+ port : typing.Optional[str]
298
+ Server Port (optional)
299
+
300
+ password : typing.Optional[str]
301
+ Server Password (optional)
302
+
303
+ regex_filter : typing.Optional[str]
304
+ Cloud storage regex for filtering objects
305
+
306
+ use_blob_urls : typing.Optional[bool]
307
+ Interpret objects as BLOBs and generate URLs
308
+
309
+ request_options : typing.Optional[RequestOptions]
310
+ Request-specific configuration.
311
+
312
+ Returns
313
+ -------
314
+ RedisUpdateResponse
315
+
316
+
317
+ Examples
318
+ --------
319
+ from label_studio_sdk.client import LabelStudio
320
+
321
+ client = LabelStudio(
322
+ api_key="YOUR_API_KEY",
323
+ )
324
+ client.import_storage.redis.update(
325
+ id=1,
326
+ )
327
+ """
328
+ _response = self._client_wrapper.httpx_client.request(
329
+ f"api/storages/redis/{jsonable_encoder(id)}",
330
+ method="PATCH",
331
+ json={
332
+ "project": project,
333
+ "path": path,
334
+ "host": host,
335
+ "port": port,
336
+ "password": password,
337
+ "regex_filter": regex_filter,
338
+ "use_blob_urls": use_blob_urls,
339
+ },
340
+ request_options=request_options,
341
+ omit=OMIT,
342
+ )
343
+ if 200 <= _response.status_code < 300:
344
+ return pydantic_v1.parse_obj_as(RedisUpdateResponse, _response.json()) # type: ignore
345
+ try:
346
+ _response_json = _response.json()
347
+ except JSONDecodeError:
348
+ raise ApiError(status_code=_response.status_code, body=_response.text)
349
+ raise ApiError(status_code=_response.status_code, body=_response_json)
350
+
351
+ def sync(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> RedisImportStorage:
352
+ """
353
+ Sync tasks from a Redis import storage connection. You will need to provide the import storage ID. You can find this using [List import storages](list).
354
+
355
+ 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.
356
+
357
+ <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>
358
+
359
+ Parameters
360
+ ----------
361
+ id : int
362
+ Storage ID
363
+
364
+ request_options : typing.Optional[RequestOptions]
365
+ Request-specific configuration.
366
+
367
+ Returns
368
+ -------
369
+ RedisImportStorage
370
+
371
+
372
+ Examples
373
+ --------
374
+ from label_studio_sdk.client import LabelStudio
375
+
376
+ client = LabelStudio(
377
+ api_key="YOUR_API_KEY",
378
+ )
379
+ client.import_storage.redis.sync(
380
+ id=1,
381
+ )
382
+ """
383
+ _response = self._client_wrapper.httpx_client.request(
384
+ f"api/storages/redis/{jsonable_encoder(id)}/sync", method="POST", request_options=request_options
385
+ )
386
+ if 200 <= _response.status_code < 300:
387
+ return pydantic_v1.parse_obj_as(RedisImportStorage, _response.json()) # type: ignore
388
+ try:
389
+ _response_json = _response.json()
390
+ except JSONDecodeError:
391
+ raise ApiError(status_code=_response.status_code, body=_response.text)
392
+ raise ApiError(status_code=_response.status_code, body=_response_json)
393
+
394
+
395
+ class AsyncRedisClient:
396
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
397
+ self._client_wrapper = client_wrapper
398
+
399
+ async def list(
400
+ self, *, project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None
401
+ ) -> typing.List[RedisImportStorage]:
402
+ """
403
+ 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 import (source) storage connections for a specific project.
404
+
405
+ 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).
406
+
407
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
408
+
409
+ Parameters
410
+ ----------
411
+ project : typing.Optional[int]
412
+ Project ID
413
+
414
+ request_options : typing.Optional[RequestOptions]
415
+ Request-specific configuration.
416
+
417
+ Returns
418
+ -------
419
+ typing.List[RedisImportStorage]
420
+
421
+
422
+ Examples
423
+ --------
424
+ from label_studio_sdk.client import AsyncLabelStudio
425
+
426
+ client = AsyncLabelStudio(
427
+ api_key="YOUR_API_KEY",
428
+ )
429
+ await client.import_storage.redis.list()
430
+ """
431
+ _response = await self._client_wrapper.httpx_client.request(
432
+ "api/storages/redis/", method="GET", params={"project": project}, request_options=request_options
433
+ )
434
+ if 200 <= _response.status_code < 300:
435
+ return pydantic_v1.parse_obj_as(typing.List[RedisImportStorage], _response.json()) # type: ignore
436
+ try:
437
+ _response_json = _response.json()
438
+ except JSONDecodeError:
439
+ raise ApiError(status_code=_response.status_code, body=_response.text)
440
+ raise ApiError(status_code=_response.status_code, body=_response_json)
441
+
442
+ async def create(
443
+ self,
444
+ *,
445
+ project: typing.Optional[int] = OMIT,
446
+ path: typing.Optional[str] = OMIT,
447
+ host: typing.Optional[str] = OMIT,
448
+ port: typing.Optional[str] = OMIT,
449
+ password: typing.Optional[str] = OMIT,
450
+ regex_filter: typing.Optional[str] = OMIT,
451
+ use_blob_urls: typing.Optional[bool] = OMIT,
452
+ request_options: typing.Optional[RequestOptions] = None,
453
+ ) -> RedisCreateResponse:
454
+ """
455
+ Create a new source storage connection to a Redis database.
456
+
457
+ For information about the required fields and prerequisites, see [Redis database](https://labelstud.io/guide/storage#Redis-database) in the Label Studio documentation.
458
+
459
+ <Tip>After you add the storage, you should validate the connection before attempting to sync your data. Your data will not be imported until you [sync your connection](sync).</Tip>
460
+
461
+ Parameters
462
+ ----------
463
+ project : typing.Optional[int]
464
+ Project ID
465
+
466
+ path : typing.Optional[str]
467
+ Storage prefix (optional)
468
+
469
+ host : typing.Optional[str]
470
+ Server Host IP (optional)
471
+
472
+ port : typing.Optional[str]
473
+ Server Port (optional)
474
+
475
+ password : typing.Optional[str]
476
+ Server Password (optional)
477
+
478
+ regex_filter : typing.Optional[str]
479
+ Cloud storage regex for filtering objects
480
+
481
+ use_blob_urls : typing.Optional[bool]
482
+ Interpret objects as BLOBs and generate URLs
483
+
484
+ request_options : typing.Optional[RequestOptions]
485
+ Request-specific configuration.
486
+
487
+ Returns
488
+ -------
489
+ RedisCreateResponse
490
+
491
+
492
+ Examples
493
+ --------
494
+ from label_studio_sdk.client import AsyncLabelStudio
495
+
496
+ client = AsyncLabelStudio(
497
+ api_key="YOUR_API_KEY",
498
+ )
499
+ await client.import_storage.redis.create()
500
+ """
501
+ _response = await self._client_wrapper.httpx_client.request(
502
+ "api/storages/redis/",
503
+ method="POST",
504
+ json={
505
+ "project": project,
506
+ "path": path,
507
+ "host": host,
508
+ "port": port,
509
+ "password": password,
510
+ "regex_filter": regex_filter,
511
+ "use_blob_urls": use_blob_urls,
512
+ },
513
+ request_options=request_options,
514
+ omit=OMIT,
515
+ )
516
+ if 200 <= _response.status_code < 300:
517
+ return pydantic_v1.parse_obj_as(RedisCreateResponse, _response.json()) # type: ignore
518
+ try:
519
+ _response_json = _response.json()
520
+ except JSONDecodeError:
521
+ raise ApiError(status_code=_response.status_code, body=_response.text)
522
+ raise ApiError(status_code=_response.status_code, body=_response_json)
523
+
524
+ async def validate(self, *, request_options: typing.Optional[RequestOptions] = None) -> RedisImportStorage:
525
+ """
526
+ Validate a specific Redis import storage connection. This is useful to ensure that the storage configuration settings are correct and operational before attempting to import data.
527
+
528
+ Parameters
529
+ ----------
530
+ request_options : typing.Optional[RequestOptions]
531
+ Request-specific configuration.
532
+
533
+ Returns
534
+ -------
535
+ RedisImportStorage
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.import_storage.redis.validate()
546
+ """
547
+ _response = await self._client_wrapper.httpx_client.request(
548
+ "api/storages/redis/validate", method="POST", request_options=request_options
549
+ )
550
+ if 200 <= _response.status_code < 300:
551
+ return pydantic_v1.parse_obj_as(RedisImportStorage, _response.json()) # type: ignore
552
+ try:
553
+ _response_json = _response.json()
554
+ except JSONDecodeError:
555
+ raise ApiError(status_code=_response.status_code, body=_response.text)
556
+ raise ApiError(status_code=_response.status_code, body=_response_json)
557
+
558
+ async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> RedisImportStorage:
559
+ """
560
+ Get a specific Redis import storage connection. You will need to provide the import storage ID. You can find this using [List import storages](list).
561
+
562
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
563
+
564
+ Parameters
565
+ ----------
566
+ id : int
567
+ A unique integer value identifying this redis import storage.
568
+
569
+ request_options : typing.Optional[RequestOptions]
570
+ Request-specific configuration.
571
+
572
+ Returns
573
+ -------
574
+ RedisImportStorage
575
+
576
+
577
+ Examples
578
+ --------
579
+ from label_studio_sdk.client import AsyncLabelStudio
580
+
581
+ client = AsyncLabelStudio(
582
+ api_key="YOUR_API_KEY",
583
+ )
584
+ await client.import_storage.redis.get(
585
+ id=1,
586
+ )
587
+ """
588
+ _response = await self._client_wrapper.httpx_client.request(
589
+ f"api/storages/redis/{jsonable_encoder(id)}", method="GET", request_options=request_options
590
+ )
591
+ if 200 <= _response.status_code < 300:
592
+ return pydantic_v1.parse_obj_as(RedisImportStorage, _response.json()) # type: ignore
593
+ try:
594
+ _response_json = _response.json()
595
+ except JSONDecodeError:
596
+ raise ApiError(status_code=_response.status_code, body=_response.text)
597
+ raise ApiError(status_code=_response.status_code, body=_response_json)
598
+
599
+ async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None:
600
+ """
601
+ Delete a specific Redis import storage connection. You will need to provide the import storage ID. You can find this using [List import storages](list).
602
+
603
+ Deleting a source storage connection does not affect tasks with synced data in Label Studio. The sync process is designed to import new or updated tasks from the connected storage into the project, but it does not track deletions of files from the storage. Therefore, if you remove the external storage connection, the tasks that were created from that storage will remain in the project.
604
+
605
+ 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.
606
+
607
+ Parameters
608
+ ----------
609
+ id : int
610
+ A unique integer value identifying this redis import storage.
611
+
612
+ request_options : typing.Optional[RequestOptions]
613
+ Request-specific configuration.
614
+
615
+ Returns
616
+ -------
617
+ None
618
+
619
+ Examples
620
+ --------
621
+ from label_studio_sdk.client import AsyncLabelStudio
622
+
623
+ client = AsyncLabelStudio(
624
+ api_key="YOUR_API_KEY",
625
+ )
626
+ await client.import_storage.redis.delete(
627
+ id=1,
628
+ )
629
+ """
630
+ _response = await self._client_wrapper.httpx_client.request(
631
+ f"api/storages/redis/{jsonable_encoder(id)}", method="DELETE", request_options=request_options
632
+ )
633
+ if 200 <= _response.status_code < 300:
634
+ return
635
+ try:
636
+ _response_json = _response.json()
637
+ except JSONDecodeError:
638
+ raise ApiError(status_code=_response.status_code, body=_response.text)
639
+ raise ApiError(status_code=_response.status_code, body=_response_json)
640
+
641
+ async def update(
642
+ self,
643
+ id: int,
644
+ *,
645
+ project: typing.Optional[int] = OMIT,
646
+ path: typing.Optional[str] = OMIT,
647
+ host: typing.Optional[str] = OMIT,
648
+ port: typing.Optional[str] = OMIT,
649
+ password: typing.Optional[str] = OMIT,
650
+ regex_filter: typing.Optional[str] = OMIT,
651
+ use_blob_urls: typing.Optional[bool] = OMIT,
652
+ request_options: typing.Optional[RequestOptions] = None,
653
+ ) -> RedisUpdateResponse:
654
+ """
655
+ Update a specific Redis import storage connection. You will need to provide the import storage ID. You can find this using [List import storages](list).
656
+
657
+ For more information about working with external storage, see [Sync data from external storage](https://labelstud.io/guide/storage).
658
+
659
+ Parameters
660
+ ----------
661
+ id : int
662
+ A unique integer value identifying this redis import storage.
663
+
664
+ project : typing.Optional[int]
665
+ Project ID
666
+
667
+ path : typing.Optional[str]
668
+ Storage prefix (optional)
669
+
670
+ host : typing.Optional[str]
671
+ Server Host IP (optional)
672
+
673
+ port : typing.Optional[str]
674
+ Server Port (optional)
675
+
676
+ password : typing.Optional[str]
677
+ Server Password (optional)
678
+
679
+ regex_filter : typing.Optional[str]
680
+ Cloud storage regex for filtering objects
681
+
682
+ use_blob_urls : typing.Optional[bool]
683
+ Interpret objects as BLOBs and generate URLs
684
+
685
+ request_options : typing.Optional[RequestOptions]
686
+ Request-specific configuration.
687
+
688
+ Returns
689
+ -------
690
+ RedisUpdateResponse
691
+
692
+
693
+ Examples
694
+ --------
695
+ from label_studio_sdk.client import AsyncLabelStudio
696
+
697
+ client = AsyncLabelStudio(
698
+ api_key="YOUR_API_KEY",
699
+ )
700
+ await client.import_storage.redis.update(
701
+ id=1,
702
+ )
703
+ """
704
+ _response = await self._client_wrapper.httpx_client.request(
705
+ f"api/storages/redis/{jsonable_encoder(id)}",
706
+ method="PATCH",
707
+ json={
708
+ "project": project,
709
+ "path": path,
710
+ "host": host,
711
+ "port": port,
712
+ "password": password,
713
+ "regex_filter": regex_filter,
714
+ "use_blob_urls": use_blob_urls,
715
+ },
716
+ request_options=request_options,
717
+ omit=OMIT,
718
+ )
719
+ if 200 <= _response.status_code < 300:
720
+ return pydantic_v1.parse_obj_as(RedisUpdateResponse, _response.json()) # type: ignore
721
+ try:
722
+ _response_json = _response.json()
723
+ except JSONDecodeError:
724
+ raise ApiError(status_code=_response.status_code, body=_response.text)
725
+ raise ApiError(status_code=_response.status_code, body=_response_json)
726
+
727
+ async def sync(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> RedisImportStorage:
728
+ """
729
+ Sync tasks from a Redis import storage connection. You will need to provide the import storage ID. You can find this using [List import storages](list).
730
+
731
+ 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.
732
+
733
+ <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>
734
+
735
+ Parameters
736
+ ----------
737
+ id : int
738
+ Storage ID
739
+
740
+ request_options : typing.Optional[RequestOptions]
741
+ Request-specific configuration.
742
+
743
+ Returns
744
+ -------
745
+ RedisImportStorage
746
+
747
+
748
+ Examples
749
+ --------
750
+ from label_studio_sdk.client import AsyncLabelStudio
751
+
752
+ client = AsyncLabelStudio(
753
+ api_key="YOUR_API_KEY",
754
+ )
755
+ await client.import_storage.redis.sync(
756
+ id=1,
757
+ )
758
+ """
759
+ _response = await self._client_wrapper.httpx_client.request(
760
+ f"api/storages/redis/{jsonable_encoder(id)}/sync", method="POST", request_options=request_options
761
+ )
762
+ if 200 <= _response.status_code < 300:
763
+ return pydantic_v1.parse_obj_as(RedisImportStorage, _response.json()) # type: ignore
764
+ try:
765
+ _response_json = _response.json()
766
+ except JSONDecodeError:
767
+ raise ApiError(status_code=_response.status_code, body=_response.text)
768
+ raise ApiError(status_code=_response.status_code, body=_response_json)