Skip to content

Commit a9ded92

Browse files
committed
SDK regeneration
1 parent 1a8ad39 commit a9ded92

File tree

10 files changed

+294
-15
lines changed

10 files changed

+294
-15
lines changed

.mock/definition/__package__.yml

+7
Original file line numberDiff line numberDiff line change
@@ -2844,3 +2844,10 @@ types:
28442844
docs: New JWT access token
28452845
source:
28462846
openapi: openapi/openapi.yaml
2847+
RotateTokenResponse:
2848+
properties:
2849+
refresh:
2850+
type: string
2851+
docs: New JWT refresh token
2852+
source:
2853+
openapi: openapi/openapi.yaml

.mock/definition/tokens.yml

+30
Original file line numberDiff line numberDiff line change
@@ -98,5 +98,35 @@ service:
9898
access: access
9999
audiences:
100100
- public
101+
rotate:
102+
path: /api/token/rotate
103+
method: POST
104+
auth: true
105+
docs: |
106+
Blacklist existing refresh token, and get a new refresh token.
107+
source:
108+
openapi: openapi/openapi.yaml
109+
display-name: Rotate token
110+
request:
111+
name: TokensRotateRequest
112+
body:
113+
properties:
114+
refresh:
115+
type: string
116+
docs: JWT refresh token
117+
content-type: application/json
118+
response:
119+
docs: Refresh token successfully rotated
120+
type: root.RotateTokenResponse
121+
errors:
122+
- root.BadRequestError
123+
examples:
124+
- request:
125+
refresh: refresh
126+
response:
127+
body:
128+
refresh: refresh
129+
audiences:
130+
- public
101131
source:
102132
openapi: openapi/openapi.yaml

poetry.lock

+11-11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

-4
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ jsonschema = ">=4.23.0"
4545
lxml = ">=4.2.5"
4646
nltk = "^3.9.1"
4747
numpy = ">=1.26.4,<3.0.0"
48-
opencv-python = "^4.9.0"
4948
pandas = ">=0.24.0"
5049
pydantic = ">= 1.9.2"
5150
pydantic-core = "^2.18.2"
@@ -79,6 +78,3 @@ line-length = 120
7978
[build-system]
8079
requires = ["poetry-core"]
8180
build-backend = "poetry.core.masonry.api"
82-
83-
[project.scripts]
84-
label-studio-converter = "label_studio_sdk.converter.main:main"

reference.md

+70
Original file line numberDiff line numberDiff line change
@@ -8381,6 +8381,76 @@ client.tokens.refresh(
83818381
</dl>
83828382

83838383

8384+
</dd>
8385+
</dl>
8386+
</details>
8387+
8388+
<details><summary><code>client.tokens.<a href="src/label_studio_sdk/tokens/client.py">rotate</a>(...)</code></summary>
8389+
<dl>
8390+
<dd>
8391+
8392+
#### 📝 Description
8393+
8394+
<dl>
8395+
<dd>
8396+
8397+
<dl>
8398+
<dd>
8399+
8400+
Blacklist existing refresh token, and get a new refresh token.
8401+
</dd>
8402+
</dl>
8403+
</dd>
8404+
</dl>
8405+
8406+
#### 🔌 Usage
8407+
8408+
<dl>
8409+
<dd>
8410+
8411+
<dl>
8412+
<dd>
8413+
8414+
```python
8415+
from label_studio_sdk import LabelStudio
8416+
8417+
client = LabelStudio(
8418+
api_key="YOUR_API_KEY",
8419+
)
8420+
client.tokens.rotate(
8421+
refresh="refresh",
8422+
)
8423+
8424+
```
8425+
</dd>
8426+
</dl>
8427+
</dd>
8428+
</dl>
8429+
8430+
#### ⚙️ Parameters
8431+
8432+
<dl>
8433+
<dd>
8434+
8435+
<dl>
8436+
<dd>
8437+
8438+
**refresh:** `str` — JWT refresh token
8439+
8440+
</dd>
8441+
</dl>
8442+
8443+
<dl>
8444+
<dd>
8445+
8446+
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
8447+
8448+
</dd>
8449+
</dl>
8450+
</dd>
8451+
</dl>
8452+
8453+
83848454
</dd>
83858455
</dl>
83868456
</details>

src/label_studio_sdk/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
RedisImportStorageStatus,
8787
RefinedPromptResponse,
8888
RefinedPromptResponseRefinementStatus,
89+
RotateTokenResponse,
8990
S3ExportStorage,
9091
S3ExportStorageStatus,
9192
S3ImportStorage,
@@ -309,6 +310,7 @@
309310
"RedisImportStorageStatus",
310311
"RefinedPromptResponse",
311312
"RefinedPromptResponseRefinementStatus",
313+
"RotateTokenResponse",
312314
"S3ExportStorage",
313315
"S3ExportStorageStatus",
314316
"S3ImportStorage",

src/label_studio_sdk/tokens/client.py

+140
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
from ..types.api_token_response import ApiTokenResponse
1111
from ..types.access_token_response import AccessTokenResponse
1212
from ..errors.unauthorized_error import UnauthorizedError
13+
from ..types.rotate_token_response import RotateTokenResponse
14+
from ..errors.bad_request_error import BadRequestError
1315
from ..core.client_wrapper import AsyncClientWrapper
1416

1517
# this is used as the default value for optional parameters
@@ -225,6 +227,70 @@ def refresh(self, *, refresh: str, request_options: typing.Optional[RequestOptio
225227
raise ApiError(status_code=_response.status_code, body=_response.text)
226228
raise ApiError(status_code=_response.status_code, body=_response_json)
227229

230+
def rotate(self, *, refresh: str, request_options: typing.Optional[RequestOptions] = None) -> RotateTokenResponse:
231+
"""
232+
Blacklist existing refresh token, and get a new refresh token.
233+
234+
Parameters
235+
----------
236+
refresh : str
237+
JWT refresh token
238+
239+
request_options : typing.Optional[RequestOptions]
240+
Request-specific configuration.
241+
242+
Returns
243+
-------
244+
RotateTokenResponse
245+
Refresh token successfully rotated
246+
247+
Examples
248+
--------
249+
from label_studio_sdk import LabelStudio
250+
251+
client = LabelStudio(
252+
api_key="YOUR_API_KEY",
253+
)
254+
client.tokens.rotate(
255+
refresh="refresh",
256+
)
257+
"""
258+
_response = self._client_wrapper.httpx_client.request(
259+
"api/token/rotate",
260+
method="POST",
261+
json={
262+
"refresh": refresh,
263+
},
264+
headers={
265+
"content-type": "application/json",
266+
},
267+
request_options=request_options,
268+
omit=OMIT,
269+
)
270+
try:
271+
if 200 <= _response.status_code < 300:
272+
return typing.cast(
273+
RotateTokenResponse,
274+
parse_obj_as(
275+
type_=RotateTokenResponse, # type: ignore
276+
object_=_response.json(),
277+
),
278+
)
279+
if _response.status_code == 400:
280+
raise BadRequestError(
281+
typing.cast(
282+
typing.Optional[typing.Any],
283+
parse_obj_as(
284+
type_=typing.Optional[typing.Any], # type: ignore
285+
object_=_response.json(),
286+
),
287+
)
288+
)
289+
_response_json = _response.json()
290+
except JSONDecodeError:
291+
raise ApiError(status_code=_response.status_code, body=_response.text)
292+
raise ApiError(status_code=_response.status_code, body=_response_json)
293+
228294

229295
class AsyncTokensClient:
230296
def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -468,3 +534,77 @@ async def main() -> None:
468534
except JSONDecodeError:
469535
raise ApiError(status_code=_response.status_code, body=_response.text)
470536
raise ApiError(status_code=_response.status_code, body=_response_json)
537+
538+
async def rotate(
539+
self, *, refresh: str, request_options: typing.Optional[RequestOptions] = None
540+
) -> RotateTokenResponse:
541+
"""
542+
Blacklist existing refresh token, and get a new refresh token.
543+
544+
Parameters
545+
----------
546+
refresh : str
547+
JWT refresh token
548+
549+
request_options : typing.Optional[RequestOptions]
550+
Request-specific configuration.
551+
552+
Returns
553+
-------
554+
RotateTokenResponse
555+
Refresh token successfully rotated
556+
557+
Examples
558+
--------
559+
import asyncio
560+
561+
from label_studio_sdk import AsyncLabelStudio
562+
563+
client = AsyncLabelStudio(
564+
api_key="YOUR_API_KEY",
565+
)
566+
567+
568+
async def main() -> None:
569+
await client.tokens.rotate(
570+
refresh="refresh",
571+
)
572+
573+
574+
asyncio.run(main())
575+
"""
576+
_response = await self._client_wrapper.httpx_client.request(
577+
"api/token/rotate",
578+
method="POST",
579+
json={
580+
"refresh": refresh,
581+
},
582+
headers={
583+
"content-type": "application/json",
584+
},
585+
request_options=request_options,
586+
omit=OMIT,
587+
)
588+
try:
589+
if 200 <= _response.status_code < 300:
590+
return typing.cast(
591+
RotateTokenResponse,
592+
parse_obj_as(
593+
type_=RotateTokenResponse, # type: ignore
594+
object_=_response.json(),
595+
),
596+
)
597+
if _response.status_code == 400:
598+
raise BadRequestError(
599+
typing.cast(
600+
typing.Optional[typing.Any],
601+
parse_obj_as(
602+
type_=typing.Optional[typing.Any], # type: ignore
603+
object_=_response.json(),
604+
),
605+
)
606+
)
607+
_response_json = _response.json()
608+
except JSONDecodeError:
609+
raise ApiError(status_code=_response.status_code, body=_response.text)
610+
raise ApiError(status_code=_response.status_code, body=_response_json)

src/label_studio_sdk/types/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
from .redis_import_storage_status import RedisImportStorageStatus
8686
from .refined_prompt_response import RefinedPromptResponse
8787
from .refined_prompt_response_refinement_status import RefinedPromptResponseRefinementStatus
88+
from .rotate_token_response import RotateTokenResponse
8889
from .s3export_storage import S3ExportStorage
8990
from .s3export_storage_status import S3ExportStorageStatus
9091
from .s3import_storage import S3ImportStorage
@@ -192,6 +193,7 @@
192193
"RedisImportStorageStatus",
193194
"RefinedPromptResponse",
194195
"RefinedPromptResponseRefinementStatus",
196+
"RotateTokenResponse",
195197
"S3ExportStorage",
196198
"S3ExportStorageStatus",
197199
"S3ImportStorage",

0 commit comments

Comments
 (0)