diff --git a/.mock/definition/__package__.yml b/.mock/definition/__package__.yml index 4bad0c059..0fb7e7cff 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 @@ -2145,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: |- @@ -5641,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 @@ -5710,10 +5725,11 @@ types: openapi: openapi/openapi.yaml OrganizationPermission: properties: - default_role: string + default: list + group: optional id: integer - label: string - options: string + label: optional + options: list organization: integer permission: type: string @@ -5722,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 aaf7f88ca..48156d066 100644 --- a/.mock/definition/organizations/permissions.yml +++ b/.mock/definition/organizations/permissions.yml @@ -30,10 +30,13 @@ service: id: 1 response: body: - - default_role: default_role + - default: + - OW + group: group id: 1 label: label - options: options + options: + - OW organization: 1 permission: permission roles: @@ -69,10 +72,13 @@ service: permission: permission response: body: - default_role: default_role + default: + - OW + group: group id: 1 label: label - options: options + options: + - OW organization: 1 permission: permission roles: @@ -106,7 +112,9 @@ service: id: 1 response: body: - - default: OW + - default: + - OW + group: group label: label options: - OW @@ -136,10 +144,13 @@ service: permission: permission response: body: - default_role: default_role + default: + - OW + group: group id: 1 label: label - options: options + options: + - OW organization: 1 permission: permission roles: @@ -182,10 +193,13 @@ service: permission: permission response: body: - default_role: default_role + default: + - OW + group: group id: 1 label: label - options: options + options: + - OW organization: 1 permission: permission roles: @@ -252,10 +266,13 @@ service: request: {} response: body: - default_role: default_role + 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 5124411dd..e20c4d0d1 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 @@ -20278,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: @@ -25171,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: @@ -25270,18 +25292,27 @@ components: type: object OrganizationPermission: properties: - default_role: + default: + items: + $ref: '#/components/schemas/Default165Enum' + readOnly: true + 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 @@ -25294,10 +25325,12 @@ components: $ref: '#/components/schemas/Role9e7Enum' type: array tooltip: + nullable: true 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..b9f0d5892 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, @@ -51,6 +50,7 @@ DatabricksExportStorageRequest, DatabricksImportStorage, DatabricksImportStorageRequest, + Default165Enum, DefaultRole, DefaultRoleCustomScriptsEditableBy, EditionEnum, @@ -137,6 +137,7 @@ ModelRunStatusEnum, NullEnum, OnboardingStateEnum, + Options165Enum, OrganizationBilling, OrganizationId, OrganizationInvite, @@ -404,7 +405,6 @@ "CommentRequest", "CommentSerializerWithExpandedUser", "ConfigurablePermissionOption", - "ConfigurablePermissionOptionDefault", "ConvertedFormat", "ConvertedFormatRequest", "CountLimit", @@ -413,6 +413,7 @@ "DatabricksExportStorageRequest", "DatabricksImportStorage", "DatabricksImportStorageRequest", + "Default165Enum", "DefaultRole", "DefaultRoleCustomScriptsEditableBy", "EditionEnum", @@ -513,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 5c92d9ec9..ecac1985a 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 @@ -52,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 @@ -138,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 @@ -271,7 +272,6 @@ "CommentRequest", "CommentSerializerWithExpandedUser", "ConfigurablePermissionOption", - "ConfigurablePermissionOptionDefault", "ConvertedFormat", "ConvertedFormatRequest", "CountLimit", @@ -280,6 +280,7 @@ "DatabricksExportStorageRequest", "DatabricksImportStorage", "DatabricksImportStorageRequest", + "Default165Enum", "DefaultRole", "DefaultRoleCustomScriptsEditableBy", "EditionEnum", @@ -366,6 +367,7 @@ "ModelRunStatusEnum", "NullEnum", "OnboardingStateEnum", + "Options165Enum", "OrganizationBilling", "OrganizationId", "OrganizationInvite", 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/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 e9ca4c416..01220cfb8 100644 --- a/src/label_studio_sdk/types/organization_permission.py +++ b/src/label_studio_sdk/types/organization_permission.py @@ -2,16 +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_role: 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) @@ -19,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 813475542..49d00226e 100644 --- a/tests/organizations/test_permissions.py +++ b/tests/organizations/test_permissions.py @@ -9,10 +9,11 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = [ { - "default_role": "default_role", + "default": ["OW"], + "group": "group", "id": 1, "label": "label", - "options": "options", + "options": ["OW"], "organization": 1, "permission": "permission", "roles": ["OW"], @@ -23,10 +24,11 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "list", { 0: { - "default_role": 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}), @@ -43,20 +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_role": "default_role", + "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_role": 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}), @@ -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,20 +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_role": "default_role", + "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_role": 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}), @@ -114,20 +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_role": "default_role", + "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_role": 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}), @@ -157,20 +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_role": "default_role", + "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_role": 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}),