From 663b3ea24c7b8cbb900816a5b0ddb0a00134bddd Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 23 Sep 2025 16:02:22 +0000 Subject: [PATCH 1/4] SDK regeneration --- .mock/definition/__package__.yml | 14 ++---- .../definition/organizations/permissions.yml | 19 ++++--- .mock/openapi/openapi.yaml | 18 ++++--- poetry.lock | 8 +-- src/label_studio_sdk/__init__.py | 2 - src/label_studio_sdk/types/__init__.py | 2 - .../types/configurable_permission_option.py | 4 +- .../configurable_permission_option_default.py | 7 --- .../types/organization_permission.py | 3 +- tests/organizations/test_permissions.py | 50 ++++++++++++++----- 10 files changed, 75 insertions(+), 52 deletions(-) delete mode 100644 src/label_studio_sdk/types/configurable_permission_option_default.py diff --git a/.mock/definition/__package__.yml b/.mock/definition/__package__.yml index 4bad0c059..a6ce792f9 100644 --- a/.mock/definition/__package__.yml +++ b/.mock/definition/__package__.yml @@ -1626,17 +1626,10 @@ types: docs: Last updated time source: openapi: openapi/openapi.yaml - ConfigurablePermissionOptionDefault: - discriminated: false - union: - - Role9E7Enum - - NullEnum - source: - openapi: openapi/openapi.yaml - inline: true ConfigurablePermissionOption: properties: - default: optional + default: list + group: optional label: optional options: list permission: string @@ -5710,7 +5703,8 @@ types: openapi: openapi/openapi.yaml OrganizationPermission: properties: - default_role: string + default: string + group: string id: integer label: string options: string diff --git a/.mock/definition/organizations/permissions.yml b/.mock/definition/organizations/permissions.yml index aaf7f88ca..05d5cec3c 100644 --- a/.mock/definition/organizations/permissions.yml +++ b/.mock/definition/organizations/permissions.yml @@ -30,7 +30,8 @@ service: id: 1 response: body: - - default_role: default_role + - default: default + group: group id: 1 label: label options: options @@ -69,7 +70,8 @@ service: permission: permission response: body: - default_role: default_role + default: default + group: group id: 1 label: label options: options @@ -106,7 +108,9 @@ service: id: 1 response: body: - - default: OW + - default: + - OW + group: group label: label options: - OW @@ -136,7 +140,8 @@ service: permission: permission response: body: - default_role: default_role + default: default + group: group id: 1 label: label options: options @@ -182,7 +187,8 @@ service: permission: permission response: body: - default_role: default_role + default: default + group: group id: 1 label: label options: options @@ -252,7 +258,8 @@ service: request: {} response: body: - default_role: default_role + default: default + group: group id: 1 label: label options: options diff --git a/.mock/openapi/openapi.yaml b/.mock/openapi/openapi.yaml index 5124411dd..ab3e4bb99 100644 --- a/.mock/openapi/openapi.yaml +++ b/.mock/openapi/openapi.yaml @@ -19638,10 +19638,11 @@ components: ConfigurablePermissionOption: properties: default: - nullable: true - oneOf: - - $ref: '#/components/schemas/Role9e7Enum' - - $ref: '#/components/schemas/NullEnum' + items: + $ref: '#/components/schemas/Role9e7Enum' + type: array + group: + type: string label: type: string options: @@ -19653,6 +19654,7 @@ components: tooltip: type: string required: + - default - options - permission type: object @@ -25270,7 +25272,10 @@ components: type: object OrganizationPermission: properties: - default_role: + default: + readOnly: true + type: string + group: readOnly: true type: string id: @@ -25297,7 +25302,8 @@ components: readOnly: true type: string required: - - default_role + - default + - group - id - label - options diff --git a/poetry.lock b/poetry.lock index cd4f7d8e3..abc698ce5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "anyio" -version = "4.10.0" +version = "4.11.0" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.9" files = [ - {file = "anyio-4.10.0-py3-none-any.whl", hash = "sha256:60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1"}, - {file = "anyio-4.10.0.tar.gz", hash = "sha256:3f3fae35c96039744587aa5b8371e7e8e603c0702999535961dd336026973ba6"}, + {file = "anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc"}, + {file = "anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4"}, ] [package.dependencies] @@ -29,7 +29,7 @@ sniffio = ">=1.1" typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] -trio = ["trio (>=0.26.1)"] +trio = ["trio (>=0.31.0)"] [[package]] name = "appdirs" diff --git a/src/label_studio_sdk/__init__.py b/src/label_studio_sdk/__init__.py index ee7786cb5..5aa9a1468 100644 --- a/src/label_studio_sdk/__init__.py +++ b/src/label_studio_sdk/__init__.py @@ -42,7 +42,6 @@ CommentRequest, CommentSerializerWithExpandedUser, ConfigurablePermissionOption, - ConfigurablePermissionOptionDefault, ConvertedFormat, ConvertedFormatRequest, CountLimit, @@ -404,7 +403,6 @@ "CommentRequest", "CommentSerializerWithExpandedUser", "ConfigurablePermissionOption", - "ConfigurablePermissionOptionDefault", "ConvertedFormat", "ConvertedFormatRequest", "CountLimit", diff --git a/src/label_studio_sdk/types/__init__.py b/src/label_studio_sdk/types/__init__.py index 5c92d9ec9..68689f9c0 100644 --- a/src/label_studio_sdk/types/__init__.py +++ b/src/label_studio_sdk/types/__init__.py @@ -43,7 +43,6 @@ from .comment_request import CommentRequest from .comment_serializer_with_expanded_user import CommentSerializerWithExpandedUser from .configurable_permission_option import ConfigurablePermissionOption -from .configurable_permission_option_default import ConfigurablePermissionOptionDefault from .converted_format import ConvertedFormat from .converted_format_request import ConvertedFormatRequest from .count_limit import CountLimit @@ -271,7 +270,6 @@ "CommentRequest", "CommentSerializerWithExpandedUser", "ConfigurablePermissionOption", - "ConfigurablePermissionOptionDefault", "ConvertedFormat", "ConvertedFormatRequest", "CountLimit", diff --git a/src/label_studio_sdk/types/configurable_permission_option.py b/src/label_studio_sdk/types/configurable_permission_option.py index db9475f8e..e4b1a0e5e 100644 --- a/src/label_studio_sdk/types/configurable_permission_option.py +++ b/src/label_studio_sdk/types/configurable_permission_option.py @@ -2,14 +2,14 @@ from ..core.unchecked_base_model import UncheckedBaseModel import typing -from .configurable_permission_option_default import ConfigurablePermissionOptionDefault from .role9e7enum import Role9E7Enum from ..core.pydantic_utilities import IS_PYDANTIC_V2 import pydantic class ConfigurablePermissionOption(UncheckedBaseModel): - default: typing.Optional[ConfigurablePermissionOptionDefault] = None + default: typing.List[Role9E7Enum] + group: typing.Optional[str] = None label: typing.Optional[str] = None options: typing.List[Role9E7Enum] permission: str diff --git a/src/label_studio_sdk/types/configurable_permission_option_default.py b/src/label_studio_sdk/types/configurable_permission_option_default.py deleted file mode 100644 index ee182d47a..000000000 --- a/src/label_studio_sdk/types/configurable_permission_option_default.py +++ /dev/null @@ -1,7 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing -from .role9e7enum import Role9E7Enum -from .null_enum import NullEnum - -ConfigurablePermissionOptionDefault = typing.Union[Role9E7Enum, NullEnum] diff --git a/src/label_studio_sdk/types/organization_permission.py b/src/label_studio_sdk/types/organization_permission.py index e9ca4c416..9ce319d98 100644 --- a/src/label_studio_sdk/types/organization_permission.py +++ b/src/label_studio_sdk/types/organization_permission.py @@ -8,7 +8,8 @@ class OrganizationPermission(UncheckedBaseModel): - default_role: str + default: str + group: str id: int label: str options: str diff --git a/tests/organizations/test_permissions.py b/tests/organizations/test_permissions.py index 813475542..2e33c7801 100644 --- a/tests/organizations/test_permissions.py +++ b/tests/organizations/test_permissions.py @@ -9,7 +9,8 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = [ { - "default_role": "default_role", + "default": "default", + "group": "group", "id": 1, "label": "label", "options": "options", @@ -23,7 +24,8 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "list", { 0: { - "default_role": None, + "default": None, + "group": None, "id": "integer", "label": None, "options": None, @@ -43,7 +45,8 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = { - "default_role": "default_role", + "default": "default", + "group": "group", "id": 1, "label": "label", "options": "options", @@ -53,7 +56,8 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "tooltip": "tooltip", } expected_types: typing.Any = { - "default_role": None, + "default": None, + "group": None, "id": "integer", "label": None, "options": None, @@ -71,11 +75,27 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No async def test_get_options(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = [ - {"default": "OW", "label": "label", "options": ["OW"], "permission": "permission", "tooltip": "tooltip"} + { + "default": ["OW"], + "group": "group", + "label": "label", + "options": ["OW"], + "permission": "permission", + "tooltip": "tooltip", + } ] expected_types: typing.Tuple[typing.Any, typing.Any] = ( "list", - {0: {"default": None, "label": None, "options": ("list", {0: None}), "permission": None, "tooltip": None}}, + { + 0: { + "default": ("list", {0: None}), + "group": None, + "label": None, + "options": ("list", {0: None}), + "permission": None, + "tooltip": None, + } + }, ) response = client.organizations.permissions.get_options(id=1) validate_response(response, expected_response, expected_types) @@ -86,7 +106,8 @@ async def test_get_options(client: LabelStudio, async_client: AsyncLabelStudio) async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = { - "default_role": "default_role", + "default": "default", + "group": "group", "id": 1, "label": "label", "options": "options", @@ -96,7 +117,8 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "tooltip": "tooltip", } expected_types: typing.Any = { - "default_role": None, + "default": None, + "group": None, "id": "integer", "label": None, "options": None, @@ -114,7 +136,8 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: async def test_replace(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = { - "default_role": "default_role", + "default": "default", + "group": "group", "id": 1, "label": "label", "options": "options", @@ -124,7 +147,8 @@ async def test_replace(client: LabelStudio, async_client: AsyncLabelStudio) -> N "tooltip": "tooltip", } expected_types: typing.Any = { - "default_role": None, + "default": None, + "group": None, "id": "integer", "label": None, "options": None, @@ -157,7 +181,8 @@ async def test_delete(client: LabelStudio, async_client: AsyncLabelStudio) -> No async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = { - "default_role": "default_role", + "default": "default", + "group": "group", "id": 1, "label": "label", "options": "options", @@ -167,7 +192,8 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "tooltip": "tooltip", } expected_types: typing.Any = { - "default_role": None, + "default": None, + "group": None, "id": "integer", "label": None, "options": None, From b185d1f2f095051accb3cbeec83516bb313c6be8 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 23 Sep 2025 16:16:55 +0000 Subject: [PATCH 2/4] SDK regeneration From a40c88670876a231d921e3b67665bfcfe068ee6c Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 23 Sep 2025 16:29:04 +0000 Subject: [PATCH 3/4] SDK regeneration --- .mock/definition/__package__.yml | 32 ++++++++++++--- .../definition/organizations/permissions.yml | 30 +++++++++----- .mock/openapi/openapi.yaml | 31 +++++++++++++- src/label_studio_sdk/__init__.py | 4 ++ src/label_studio_sdk/types/__init__.py | 4 ++ src/label_studio_sdk/types/default165enum.py | 5 +++ src/label_studio_sdk/types/options165enum.py | 5 +++ .../types/organization_permission.py | 12 +++--- tests/organizations/test_permissions.py | 40 +++++++++---------- 9 files changed, 121 insertions(+), 42 deletions(-) create mode 100644 src/label_studio_sdk/types/default165enum.py create mode 100644 src/label_studio_sdk/types/options165enum.py diff --git a/.mock/definition/__package__.yml b/.mock/definition/__package__.yml index a6ce792f9..0fb7e7cff 100644 --- a/.mock/definition/__package__.yml +++ b/.mock/definition/__package__.yml @@ -2138,6 +2138,17 @@ types: docs: User who made this view source: openapi: openapi/openapi.yaml + Default165Enum: + enum: + - OW + - AD + - MA + - RE + - AN + - DI + - 'NO' + source: + openapi: openapi/openapi.yaml DefaultRoleCustomScriptsEditableBy: discriminated: false docs: |- @@ -5634,6 +5645,17 @@ types: * `complete` - Complete source: openapi: openapi/openapi.yaml + Options165Enum: + enum: + - OW + - AD + - MA + - RE + - AN + - DI + - 'NO' + source: + openapi: openapi/openapi.yaml OrganizationBilling: properties: manual_role_management: string @@ -5703,11 +5725,11 @@ types: openapi: openapi/openapi.yaml OrganizationPermission: properties: - default: string - group: string + default: list + group: optional id: integer - label: string - options: string + label: optional + options: list organization: integer permission: type: string @@ -5716,7 +5738,7 @@ types: roles: type: optional> docs: Explicit roles that have this permission within the organization. - tooltip: string + tooltip: optional source: openapi: openapi/openapi.yaml OrganizationPermissionRequest: diff --git a/.mock/definition/organizations/permissions.yml b/.mock/definition/organizations/permissions.yml index 05d5cec3c..48156d066 100644 --- a/.mock/definition/organizations/permissions.yml +++ b/.mock/definition/organizations/permissions.yml @@ -30,11 +30,13 @@ service: id: 1 response: body: - - default: default + - default: + - OW group: group id: 1 label: label - options: options + options: + - OW organization: 1 permission: permission roles: @@ -70,11 +72,13 @@ service: permission: permission response: body: - default: default + default: + - OW group: group id: 1 label: label - options: options + options: + - OW organization: 1 permission: permission roles: @@ -140,11 +144,13 @@ service: permission: permission response: body: - default: default + default: + - OW group: group id: 1 label: label - options: options + options: + - OW organization: 1 permission: permission roles: @@ -187,11 +193,13 @@ service: permission: permission response: body: - default: default + default: + - OW group: group id: 1 label: label - options: options + options: + - OW organization: 1 permission: permission roles: @@ -258,11 +266,13 @@ service: request: {} response: body: - default: default + default: + - OW group: group id: 1 label: label - options: options + options: + - OW organization: 1 permission: permission roles: diff --git a/.mock/openapi/openapi.yaml b/.mock/openapi/openapi.yaml index ab3e4bb99..e20c4d0d1 100644 --- a/.mock/openapi/openapi.yaml +++ b/.mock/openapi/openapi.yaml @@ -20280,6 +20280,16 @@ components: required: - dataset type: object + Default165Enum: + enum: + - OW + - AD + - MA + - RE + - AN + - DI + - 'NO' + type: string DefaultRole: properties: annotator_reviewer_firewall_enabled_at: @@ -25173,6 +25183,16 @@ components: - in_app_guidance - complete type: string + Options165Enum: + enum: + - OW + - AD + - MA + - RE + - AN + - DI + - 'NO' + type: string OrganizationBilling: properties: manual_role_management: @@ -25273,20 +25293,26 @@ components: OrganizationPermission: properties: default: + items: + $ref: '#/components/schemas/Default165Enum' readOnly: true - type: string + type: array group: + nullable: true readOnly: true type: string id: readOnly: true type: integer label: + nullable: true readOnly: true type: string options: + items: + $ref: '#/components/schemas/Options165Enum' readOnly: true - type: string + type: array organization: readOnly: true type: integer @@ -25299,6 +25325,7 @@ components: $ref: '#/components/schemas/Role9e7Enum' type: array tooltip: + nullable: true readOnly: true type: string required: diff --git a/src/label_studio_sdk/__init__.py b/src/label_studio_sdk/__init__.py index 5aa9a1468..b9f0d5892 100644 --- a/src/label_studio_sdk/__init__.py +++ b/src/label_studio_sdk/__init__.py @@ -50,6 +50,7 @@ DatabricksExportStorageRequest, DatabricksImportStorage, DatabricksImportStorageRequest, + Default165Enum, DefaultRole, DefaultRoleCustomScriptsEditableBy, EditionEnum, @@ -136,6 +137,7 @@ ModelRunStatusEnum, NullEnum, OnboardingStateEnum, + Options165Enum, OrganizationBilling, OrganizationId, OrganizationInvite, @@ -411,6 +413,7 @@ "DatabricksExportStorageRequest", "DatabricksImportStorage", "DatabricksImportStorageRequest", + "Default165Enum", "DefaultRole", "DefaultRoleCustomScriptsEditableBy", "EditionEnum", @@ -511,6 +514,7 @@ "NotFoundError", "NullEnum", "OnboardingStateEnum", + "Options165Enum", "OrganizationBilling", "OrganizationId", "OrganizationInvite", diff --git a/src/label_studio_sdk/types/__init__.py b/src/label_studio_sdk/types/__init__.py index 68689f9c0..ecac1985a 100644 --- a/src/label_studio_sdk/types/__init__.py +++ b/src/label_studio_sdk/types/__init__.py @@ -51,6 +51,7 @@ from .databricks_export_storage_request import DatabricksExportStorageRequest from .databricks_import_storage import DatabricksImportStorage from .databricks_import_storage_request import DatabricksImportStorageRequest +from .default165enum import Default165Enum from .default_role import DefaultRole from .default_role_custom_scripts_editable_by import DefaultRoleCustomScriptsEditableBy from .edition_enum import EditionEnum @@ -137,6 +138,7 @@ from .model_run_status_enum import ModelRunStatusEnum from .null_enum import NullEnum from .onboarding_state_enum import OnboardingStateEnum +from .options165enum import Options165Enum from .organization_billing import OrganizationBilling from .organization_id import OrganizationId from .organization_invite import OrganizationInvite @@ -278,6 +280,7 @@ "DatabricksExportStorageRequest", "DatabricksImportStorage", "DatabricksImportStorageRequest", + "Default165Enum", "DefaultRole", "DefaultRoleCustomScriptsEditableBy", "EditionEnum", @@ -364,6 +367,7 @@ "ModelRunStatusEnum", "NullEnum", "OnboardingStateEnum", + "Options165Enum", "OrganizationBilling", "OrganizationId", "OrganizationInvite", diff --git a/src/label_studio_sdk/types/default165enum.py b/src/label_studio_sdk/types/default165enum.py new file mode 100644 index 000000000..7a377e7bf --- /dev/null +++ b/src/label_studio_sdk/types/default165enum.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +Default165Enum = typing.Union[typing.Literal["OW", "AD", "MA", "RE", "AN", "DI", "NO"], typing.Any] diff --git a/src/label_studio_sdk/types/options165enum.py b/src/label_studio_sdk/types/options165enum.py new file mode 100644 index 000000000..6b8db0c05 --- /dev/null +++ b/src/label_studio_sdk/types/options165enum.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +Options165Enum = typing.Union[typing.Literal["OW", "AD", "MA", "RE", "AN", "DI", "NO"], typing.Any] diff --git a/src/label_studio_sdk/types/organization_permission.py b/src/label_studio_sdk/types/organization_permission.py index 9ce319d98..01220cfb8 100644 --- a/src/label_studio_sdk/types/organization_permission.py +++ b/src/label_studio_sdk/types/organization_permission.py @@ -2,17 +2,19 @@ from ..core.unchecked_base_model import UncheckedBaseModel import typing +from .default165enum import Default165Enum +from .options165enum import Options165Enum from .role9e7enum import Role9E7Enum import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2 class OrganizationPermission(UncheckedBaseModel): - default: str - group: str + default: typing.List[Default165Enum] + group: typing.Optional[str] = None id: int - label: str - options: str + label: typing.Optional[str] = None + options: typing.List[Options165Enum] organization: int permission: str roles: typing.Optional[typing.List[Role9E7Enum]] = pydantic.Field(default=None) @@ -20,7 +22,7 @@ class OrganizationPermission(UncheckedBaseModel): Explicit roles that have this permission within the organization. """ - tooltip: str + tooltip: typing.Optional[str] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/tests/organizations/test_permissions.py b/tests/organizations/test_permissions.py index 2e33c7801..49d00226e 100644 --- a/tests/organizations/test_permissions.py +++ b/tests/organizations/test_permissions.py @@ -9,11 +9,11 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = [ { - "default": "default", + "default": ["OW"], "group": "group", "id": 1, "label": "label", - "options": "options", + "options": ["OW"], "organization": 1, "permission": "permission", "roles": ["OW"], @@ -24,11 +24,11 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "list", { 0: { - "default": None, + "default": ("list", {0: None}), "group": None, "id": "integer", "label": None, - "options": None, + "options": ("list", {0: None}), "organization": "integer", "permission": None, "roles": ("list", {0: None}), @@ -45,22 +45,22 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = { - "default": "default", + "default": ["OW"], "group": "group", "id": 1, "label": "label", - "options": "options", + "options": ["OW"], "organization": 1, "permission": "permission", "roles": ["OW"], "tooltip": "tooltip", } expected_types: typing.Any = { - "default": None, + "default": ("list", {0: None}), "group": None, "id": "integer", "label": None, - "options": None, + "options": ("list", {0: None}), "organization": "integer", "permission": None, "roles": ("list", {0: None}), @@ -106,22 +106,22 @@ async def test_get_options(client: LabelStudio, async_client: AsyncLabelStudio) async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = { - "default": "default", + "default": ["OW"], "group": "group", "id": 1, "label": "label", - "options": "options", + "options": ["OW"], "organization": 1, "permission": "permission", "roles": ["OW"], "tooltip": "tooltip", } expected_types: typing.Any = { - "default": None, + "default": ("list", {0: None}), "group": None, "id": "integer", "label": None, - "options": None, + "options": ("list", {0: None}), "organization": "integer", "permission": None, "roles": ("list", {0: None}), @@ -136,22 +136,22 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: async def test_replace(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = { - "default": "default", + "default": ["OW"], "group": "group", "id": 1, "label": "label", - "options": "options", + "options": ["OW"], "organization": 1, "permission": "permission", "roles": ["OW"], "tooltip": "tooltip", } expected_types: typing.Any = { - "default": None, + "default": ("list", {0: None}), "group": None, "id": "integer", "label": None, - "options": None, + "options": ("list", {0: None}), "organization": "integer", "permission": None, "roles": ("list", {0: None}), @@ -181,22 +181,22 @@ async def test_delete(client: LabelStudio, async_client: AsyncLabelStudio) -> No async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = { - "default": "default", + "default": ["OW"], "group": "group", "id": 1, "label": "label", - "options": "options", + "options": ["OW"], "organization": 1, "permission": "permission", "roles": ["OW"], "tooltip": "tooltip", } expected_types: typing.Any = { - "default": None, + "default": ("list", {0: None}), "group": None, "id": "integer", "label": None, - "options": None, + "options": ("list", {0: None}), "organization": "integer", "permission": None, "roles": ("list", {0: None}), From ea307699c94989f894a8fd5bf05a49a8039ba9e1 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 23 Sep 2025 17:56:13 +0000 Subject: [PATCH 4/4] SDK regeneration