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