diff --git a/.mock/definition/__package__.yml b/.mock/definition/__package__.yml index b0742359d..a62319374 100644 --- a/.mock/definition/__package__.yml +++ b/.mock/definition/__package__.yml @@ -6,18 +6,18 @@ errors: examples: - value: key: value - ForbiddenError: - status-code: 403 - type: unknown - docs: Organization does not allow to invite people BadRequestError: status-code: 400 type: unknown - docs: '' + docs: Invalid parameters or unsupported KPI type examples: - value: key: value - value: string + ForbiddenError: + status-code: 403 + type: unknown + docs: Organization does not allow to invite people InternalServerError: status-code: 500 type: unknown @@ -146,6 +146,10 @@ types: validation: min: -2147483648 max: 2147483647 + user_session: + type: optional + validation: + maxLength: 8 workspace_owner_id: type: optional docs: Owner id of workspace where action performed @@ -165,7 +169,7 @@ types: AllRolesProjectListSampling: discriminated: false union: - - SamplingEnum + - SamplingDe5Enum - NullEnum source: openapi: openapi/openapi.yaml @@ -183,7 +187,14 @@ types: Serializer get numbers from project queryset annotation, make sure, that you use correct one(Project.objects.with_counts()) properties: - allow_stream: string + agreement_threshold: + type: optional + docs: >- + Minimum percent agreement threshold for which minimum number of + annotators must agree + validation: + pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ + allow_stream: boolean annotation_limit_count: type: optional validation: @@ -259,6 +270,11 @@ types: label_config: type: optional docs: Label config in XML format. See more about it in documentation + max_additional_annotators_assignable: + type: optional + docs: >- + Maximum number of additional annotators that can be assigned to a low + agreement task maximum_annotations: type: optional docs: >- @@ -281,7 +297,7 @@ types: model_version: type: optional docs: Machine learning model version - num_tasks_with_annotations: string + num_tasks_with_annotations: optional organization: optional overlap_cohort_percentage: type: optional @@ -296,11 +312,11 @@ types: type: optional docs: Pinned date and time prompts: string - queue_done: string - queue_left: string + queue_done: integer + queue_left: integer queue_total: string - ready: string - rejected: string + ready: boolean + rejected: integer require_comment_on_skip: type: optional default: false @@ -308,9 +324,9 @@ types: type: optional docs: Reveal pre-annotations interactively review_settings: ReviewSettings - review_total_tasks: string - reviewed_number: string - reviewer_queue_total: string + review_total_tasks: integer + reviewed_number: integer + reviewer_queue_total: integer sampling: optional show_annotation_history: type: optional @@ -318,7 +334,11 @@ types: show_collab_predictions: type: optional docs: If set, the annotator can view model predictions - show_ground_truth_first: optional + show_ground_truth_first: + type: optional + docs: >- + Onboarding mode (true): show ground truth tasks first in the labeling + stream show_instruction: type: optional docs: Show instructions to the annotator before they start @@ -343,7 +363,7 @@ types: maxLength: 50 total_annotations_number: string total_predictions_number: integer - useful_annotation_number: string + useful_annotation_number: optional workspace: string workspace_title: string source: @@ -381,10 +401,10 @@ types: inline: true Annotation: docs: |- - A ModelSerializer that takes additional arguments for - "fields", "omit" and "expand" in order to - control which fields are displayed, and whether to replace simple - values with complex, nested serializations + Annotation Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. properties: bulk_created: type: optional @@ -446,6 +466,7 @@ types: result: type: optional>> docs: List of annotation results for the task + state: string task: type: optional docs: Corresponding task for this annotation @@ -561,10 +582,10 @@ types: inline: true AnnotationRequest: docs: |- - A ModelSerializer that takes additional arguments for - "fields", "omit" and "expand" in order to - control which fields are displayed, and whether to replace simple - values with complex, nested serializations + Annotation Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. properties: bulk_created: type: optional @@ -631,10 +652,14 @@ types: openapi: openapi/openapi.yaml AnnotationReview: docs: |- - A ModelSerializer that takes additional arguments for - "fields", "omit" and "expand" in order to - control which fields are displayed, and whether to replace simple - values with complex, nested serializations + AnnotationReview Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) properties: accepted: type: optional @@ -659,14 +684,19 @@ types: remove_from_queue: optional result: optional started_at: optional + state: string source: openapi: openapi/openapi.yaml AnnotationReviewRequest: docs: |- - A ModelSerializer that takes additional arguments for - "fields", "omit" and "expand" in order to - control which fields are displayed, and whether to replace simple - values with complex, nested serializations + AnnotationReview Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) properties: accepted: type: optional @@ -885,6 +915,9 @@ types: project: type: integer docs: A unique integer value identifying this project. + recursive_scan: + type: optional + docs: Perform recursive scan over the container content regex_filter: type: optional docs: Cloud storage regex for filtering objects @@ -961,6 +994,9 @@ types: validation: min: 0 max: 32767 + recursive_scan: + type: optional + docs: Perform recursive scan over the container content regex_filter: type: optional docs: Cloud storage regex for filtering objects @@ -1034,6 +1070,9 @@ types: validation: min: 0 max: 32767 + recursive_scan: + type: optional + docs: Perform recursive scan over the container content regex_filter: type: optional docs: Cloud storage regex for filtering objects @@ -1249,6 +1288,9 @@ types: project: type: integer docs: A unique integer value identifying this project. + recursive_scan: + type: optional + docs: Perform recursive scan regex_filter: type: optional docs: Cloud storage regex for filtering objects @@ -1325,6 +1367,9 @@ types: project: type: integer docs: A unique integer value identifying this project. + recursive_scan: + type: optional + docs: Perform recursive scan regex_filter: type: optional docs: Cloud storage regex for filtering objects @@ -1410,6 +1455,7 @@ types: allow_data_credentials: boolean allow_invite_people: boolean allow_invite_project_experts: boolean + allow_nda: boolean allow_organization_webhooks: boolean allow_sso: boolean allow_storage_proxy: boolean @@ -1419,10 +1465,10 @@ types: disable_members_page: boolean disable_project_imports: boolean early_adopter: boolean + email_configured: boolean embed_domains: optional>> embed_enabled: boolean embed_settings: optional> - hide_storage_settings_for_manager: boolean manual_role_management: boolean manual_workspace_management: boolean secure_mode: boolean @@ -1484,6 +1530,11 @@ types: * `Yearly` - Yearly source: openapi: openapi/openapi.yaml + CancelModelRunResponse: + properties: + detail: string + source: + openapi: openapi/openapi.yaml ChildFilter: properties: column: @@ -1551,6 +1602,15 @@ types: source: openapi: openapi/openapi.yaml Comment: + docs: |- + Comment Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) properties: annotation: optional classifications: optional @@ -1570,6 +1630,7 @@ types: resolved_at: type: optional docs: Resolving time + state: string task: optional text: type: optional @@ -1580,6 +1641,15 @@ types: source: openapi: openapi/openapi.yaml CommentRequest: + docs: |- + Comment Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) properties: annotation: optional classifications: optional @@ -1594,6 +1664,15 @@ types: source: openapi: openapi/openapi.yaml CommentSerializerWithExpandedUser: + docs: |- + Comment Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) properties: annotation: optional classifications: optional @@ -1611,6 +1690,7 @@ types: resolved_at: type: optional docs: Resolving time + state: string task: optional text: type: optional @@ -1620,6 +1700,16 @@ types: docs: Last updated time source: openapi: openapi/openapi.yaml + ConfigurablePermissionOption: + properties: + default: list + group: optional + label: optional + options: list + permission: string + tooltip: optional + source: + openapi: openapi/openapi.yaml ConvertedFormat: properties: export_type: @@ -1654,15 +1744,6 @@ types: total: optional source: openapi: openapi/openapi.yaml - CustomScriptsEditableByEnum: - enum: - - AD - - MA - docs: |- - * `AD` - Administrator - * `MA` - Manager - source: - openapi: openapi/openapi.yaml DatabricksExportStorage: properties: can_delete_objects: @@ -2122,19 +2203,17 @@ types: docs: User who made this view source: openapi: openapi/openapi.yaml - DefaultRoleCustomScriptsEditableBy: - discriminated: false - docs: |- - Set the minimum user role that can edit custom scripts in the UI. - - * `AD` - Administrator - * `MA` - Manager - union: - - CustomScriptsEditableByEnum - - NullEnum + Default165Enum: + enum: + - OW + - AD + - MA + - RE + - AN + - DI + - 'NO' source: openapi: openapi/openapi.yaml - inline: true DefaultRole: properties: annotator_reviewer_firewall_enabled_at: @@ -2144,23 +2223,16 @@ types: reviewers in the label stream, review stream, and notifications (which will be disabled). In these settings, information about annotator and reviewer identity is suppressed in the UI. - custom_scripts_editable_by: - type: optional - docs: |- - Set the minimum user role that can edit custom scripts in the UI. - - * `AD` - Administrator - * `MA` - Manager custom_scripts_enabled_at: type: optional docs: >- - Set to current time to enabled custom scripts for this organization. - Can only be enabled if no organization members are active members of - any other organizations; otherwise an error will be raised. If this - occurs, contact the LEAP team for assistance with enabling custom - scripts. + Set to current time to enable custom scripts (Plugins) for this + organization. Can only be enabled if no organization members are + active members of any other organizations; otherwise an error will be + raised. If this occurs, contact the LEAP team for assistance with + enabling custom scripts (Plugins). default_role: - type: optional + type: optional docs: |- Default membership role for invited users @@ -2194,25 +2266,6 @@ types: quick view. source: openapi: openapi/openapi.yaml - DefaultRoleEnum: - enum: - - OW - - AD - - MA - - RE - - AN - - DI - - 'NO' - docs: |- - * `OW` - Owner - * `AD` - Administrator - * `MA` - Manager - * `RE` - Reviewer - * `AN` - Annotator - * `DI` - Deactivated - * `NO` - Not Activated - source: - openapi: openapi/openapi.yaml EditionEnum: enum: - Community @@ -2405,6 +2458,9 @@ types: validation: min: 0 max: 32767 + recursive_scan: + type: optional + docs: Perform recursive scan over the bucket content regex_filter: type: optional docs: Cloud storage regex for filtering objects @@ -2478,6 +2534,9 @@ types: validation: min: 0 max: 32767 + recursive_scan: + type: optional + docs: Perform recursive scan over the bucket content regex_filter: type: optional docs: Cloud storage regex for filtering objects @@ -2614,6 +2673,9 @@ types: project: type: integer docs: A unique integer value identifying this project. + recursive_scan: + type: optional + docs: Perform recursive scan over the bucket content regex_filter: type: optional docs: Cloud storage regex for filtering objects @@ -2844,6 +2906,9 @@ types: project: type: integer docs: A unique integer value identifying this project. + recursive_scan: + type: optional + docs: Perform recursive scan over the bucket content regex_filter: type: optional docs: Cloud storage regex for filtering objects @@ -2923,6 +2988,9 @@ types: project: type: integer docs: A unique integer value identifying this project. + recursive_scan: + type: optional + docs: Perform recursive scan over the bucket content regex_filter: type: optional docs: Cloud storage regex for filtering objects @@ -2984,6 +3052,9 @@ types: validation: min: -2147483648 max: 2147483647 + precomputed_agreement: + type: optional + docs: Average agreement score for the task predictions: optional> total_annotations: type: optional @@ -3032,6 +3103,156 @@ types: docs: Total cost of the inference (in USD) source: openapi: openapi/openapi.yaml + KpiDetailResponse: + docs: |- + Response serializer for KPI detail endpoint. + Structure varies based on segmentation parameters. + properties: + by_user: + type: optional + docs: User-segmented data (compact format with parallel arrays) + kpi_key: + type: string + docs: KPI identifier + kpi_label: + type: optional + docs: Human-readable KPI label + matrix: + type: optional + docs: 2D matrix (time × user) in compact format + segmentation: + type: SegmentationEnum + docs: |- + Type of segmentation applied + + * `none` - none + * `time` - time + * `user` - user + * `matrix` - matrix + time_series: + type: optional + docs: Time-segmented data (compact format with parallel arrays) + total: + type: optional + docs: Total value (no segmentation) + unit: + type: string + docs: 'Unit of measurement: seconds, minutes, hours, count, or ratio' + source: + openapi: openapi/openapi.yaml + KpiMatrixSegment: + docs: |- + Serializer for 2D matrix segmentation (time × user) in compact format. + Returns a 2D array where values[user_index][time_index] corresponds to + users[user_index] at interval_start[time_index]. + properties: + interval_start: + docs: Array of time period start timestamps + type: list + users: + docs: Array of user information + type: list + values: + docs: '2D array of values: values[user_index][time_index]' + type: list>> + source: + openapi: openapi/openapi.yaml + KpiMetadata: + docs: |- + Serializer for KPI metadata information. + Provides information about available KPIs including their keys, labels, + dependencies, and configuration. + properties: + base_class: + type: string + docs: Base class name that the KPI inherits from + calculation_formula: + type: optional> + docs: >- + Formula for calculated KPIs defining how to derive the value from + component KPIs. Structure: {"type": "ratio|sum|difference|product", + "numerator": "kpi_key", "denominator": "kpi_key"} + date_column: + type: optional + docs: Database column used for date filtering and aggregation + depends_on_kpis: + docs: List of other KPI keys that this KPI depends on + type: list + is_calculated: + type: boolean + docs: Whether this KPI is calculated from other KPIs (has dependencies) + is_label_type: + type: boolean + docs: >- + Whether this KPI is a label/filter type that does not show a value per + se + key: + type: string + docs: Unique identifier for the KPI + label: + type: optional + docs: Human-readable label for the KPI + percentage: + type: boolean + docs: 'Whether the KPI value is a percentage (DEPRECATED: use unit)' + unit: + type: string + docs: 'Unit of measurement: seconds, minutes, hours, count, or ratio' + source: + openapi: openapi/openapi.yaml + KpiTimeSegment: + docs: |- + Serializer for time-segmented KPI data (compact format). + Returns parallel arrays: interval_start and values. + properties: + interval_start: + docs: Array of time period start timestamps + type: list + values: + docs: Array of KPI values, one per time period (parallel to interval_start) + type: list> + source: + openapi: openapi/openapi.yaml + KpiUserInfo: + docs: Serializer for user information (compact format). + properties: + user_email: + type: string + docs: User email + validation: + format: email + user_id: + type: integer + docs: User ID + username: + type: string + docs: Username + source: + openapi: openapi/openapi.yaml + KpiUserSegment: + docs: |- + Serializer for user-segmented KPI data (compact format). + Returns parallel arrays: users and values. + properties: + users: + docs: Array of user information + type: list + values: + docs: Array of KPI values, one per user (parallel to users array) + type: list> + source: + openapi: openapi/openapi.yaml + KpiValue: + docs: Serializer for a single KPI value (no segmentation). + properties: + unit: + type: string + docs: 'Unit of measurement: seconds, minutes, hours, count, or ratio' + value: + type: optional + docs: The KPI value in its native unit + source: + openapi: openapi/openapi.yaml LseapiTokenCreate: properties: created_at: string @@ -3310,6 +3531,9 @@ types: project: type: integer docs: A unique integer value identifying this project. + recursive_scan: + type: optional + docs: Perform recursive scan over the directory content regex_filter: type: optional docs: Regex for filtering objects @@ -3578,33 +3802,13 @@ types: trial_role: optional source: openapi: openapi/openapi.yaml - LseOrganizationCustomScriptsEditableBy: - discriminated: false - docs: |- - Set the minimum user role that can edit custom scripts in the UI. - - * `AD` - Administrator - * `MA` - Manager - union: - - CustomScriptsEditableByEnum - - NullEnum - source: - openapi: openapi/openapi.yaml - inline: true LseOrganization: properties: billing: OrganizationBilling created_at: datetime - custom_scripts_editable_by: - type: optional - docs: |- - Set the minimum user role that can edit custom scripts in the UI. - - * `AD` - Administrator - * `MA` - Manager custom_scripts_enabled: string default_role: - type: optional + type: optional docs: |- Default membership role for invited users @@ -3644,7 +3848,7 @@ types: LseProjectSampling: discriminated: false union: - - SamplingEnum + - SamplingDe5Enum - NullEnum source: openapi: openapi/openapi.yaml @@ -3662,6 +3866,13 @@ types: Serializer get numbers from project queryset annotation, make sure, that you use correct one(Project.objects.with_counts()) properties: + agreement_threshold: + type: optional + docs: >- + Minimum percent agreement threshold for which minimum number of + annotators must agree + validation: + pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ annotation_limit_count: type: optional validation: @@ -3737,6 +3948,11 @@ types: label_config: type: optional docs: Label config in XML format. See more about it in documentation + max_additional_annotators_assignable: + type: optional + docs: >- + Maximum number of additional annotators that can be assigned to a low + agreement task maximum_annotations: type: optional docs: >- @@ -3759,9 +3975,7 @@ types: model_version: type: optional docs: Machine learning model version - num_tasks_with_annotations: - type: integer - docs: Tasks with annotations count + num_tasks_with_annotations: optional organization: optional overlap_cohort_percentage: type: optional @@ -3794,7 +4008,11 @@ types: show_collab_predictions: type: optional docs: If set, the annotator can view model predictions - show_ground_truth_first: optional + show_ground_truth_first: + type: optional + docs: >- + Onboarding mode (true): show ground truth tasks first in the labeling + stream show_instruction: type: optional docs: Show instructions to the annotator before they start @@ -3860,26 +4078,26 @@ types: type: integer docs: Honeypot annotation number in project id: integer - num_tasks_with_annotations: string - queue_done: string - queue_left: string + num_tasks_with_annotations: optional + queue_done: integer + queue_left: integer queue_total: string - rejected: string - review_total_tasks: string - reviewed_number: string + rejected: integer + review_total_tasks: integer + reviewed_number: integer skipped_annotations_number: string task_number: type: integer docs: Total task number in project total_annotations_number: string total_predictions_number: integer - useful_annotation_number: string + useful_annotation_number: optional source: openapi: openapi/openapi.yaml LseProjectCreateSampling: discriminated: false union: - - SamplingEnum + - SamplingDe5Enum - NullEnum source: openapi: openapi/openapi.yaml @@ -3985,7 +4203,11 @@ types: show_collab_predictions: type: optional docs: If set, the annotator can view model predictions - show_ground_truth_first: optional + show_ground_truth_first: + type: optional + docs: >- + Onboarding mode (true): show ground truth tasks first in the labeling + stream show_instruction: type: optional docs: Show instructions to the annotator before they start @@ -4039,15 +4261,26 @@ types: workspace: optional source: openapi: openapi/openapi.yaml - LseProjectUpdateSampling: + LseProjectParams: + properties: + annotator_params: optional + use_kappa: + type: optional + docs: >- + If categorical variables are used in labeling (e.g. choices), Cohen's + Kappa statistic is computed to measure inter-rater reliability instead + of basic agreement + source: + openapi: openapi/openapi.yaml + LseProjectResponseSampling: discriminated: false union: - - SamplingEnum + - SamplingDe5Enum - NullEnum source: openapi: openapi/openapi.yaml inline: true - LseProjectUpdateSkipQueue: + LseProjectResponseSkipQueue: discriminated: false union: - SkipQueueEnum @@ -4055,11 +4288,19 @@ types: source: openapi: openapi/openapi.yaml inline: true - LseProjectUpdate: - docs: |- - Serializer get numbers from project queryset annotation, - make sure, that you use correct one(Project.objects.with_counts()) + LseProjectResponse: + docs: >- + Serializer for project response, combining all the serializers for + different roles. Don't use it except for Spectacular/Fern definitions. properties: + agreement_threshold: + type: optional + docs: >- + Minimum percent agreement threshold for which minimum number of + annotators must agree + validation: + pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ + allow_stream: boolean annotation_limit_count: type: optional validation: @@ -4102,9 +4343,14 @@ types: validation: min: 1 max: 86400 + data_types: unknown description: type: optional docs: Project description + duplication_done: + type: optional + default: false + duplication_status: optional enable_empty_annotation: type: optional docs: Allow annotators to submit empty annotations @@ -4130,6 +4376,11 @@ types: label_config: type: optional docs: Label config in XML format. See more about it in documentation + max_additional_annotators_assignable: + type: optional + docs: >- + Maximum number of additional annotators that can be assigned to a low + agreement task maximum_annotations: type: optional docs: >- @@ -4139,6 +4390,8 @@ types: validation: min: -2147483648 max: 2147483647 + members: string + members_count: integer min_annotations_to_start_training: type: optional docs: >- @@ -4150,9 +4403,7 @@ types: model_version: type: optional docs: Machine learning model version - num_tasks_with_annotations: - type: integer - docs: Tasks with annotations count + num_tasks_with_annotations: integer organization: optional overlap_cohort_percentage: type: optional @@ -4168,7 +4419,10 @@ types: docs: Pinned date and time prompts: string queue_done: integer + queue_left: integer queue_total: integer + ready: boolean + rejected: integer require_comment_on_skip: type: optional default: false @@ -4176,14 +4430,21 @@ types: type: optional docs: Reveal pre-annotations interactively review_settings: ReviewSettings - sampling: optional + review_total_tasks: integer + reviewed_number: integer + reviewer_queue_total: integer + sampling: optional show_annotation_history: type: optional docs: Show annotation history to annotator show_collab_predictions: type: optional docs: If set, the annotator can view model predictions - show_ground_truth_first: optional + show_ground_truth_first: + type: optional + docs: >- + Onboarding mode (true): show ground truth tasks first in the labeling + stream show_instruction: type: optional docs: Show instructions to the annotator before they start @@ -4192,8 +4453,208 @@ types: type: optional docs: Show a skip button in interface and allow annotators to skip the task show_unused_data_columns_to_annotators: optional - skip_queue: optional - skipped_annotations_number: + skip_queue: optional + skipped_annotations_number: integer + start_training_on_annotation_update: + type: boolean + docs: Start model training after any annotations are submitted or updated + task_data_login: + type: optional + docs: 'Task data credentials: login' + validation: + maxLength: 256 + task_data_password: + type: optional + docs: 'Task data credentials: password' + validation: + maxLength: 256 + task_number: + type: integer + docs: Total task number in project + title: + type: optional + docs: Project name. Must be between 3 and 50 characters long. + validation: + minLength: 3 + maxLength: 50 + total_annotations_number: integer + total_predictions_number: optional + useful_annotation_number: optional + workspace: string + workspace_title: string + source: + openapi: openapi/openapi.yaml + LseProjectUpdateSampling: + discriminated: false + union: + - SamplingDe5Enum + - NullEnum + source: + openapi: openapi/openapi.yaml + inline: true + LseProjectUpdateSkipQueue: + discriminated: false + union: + - SkipQueueEnum + - NullEnum + source: + openapi: openapi/openapi.yaml + inline: true + LseProjectUpdate: + docs: |- + Serializer get numbers from project queryset annotation, + make sure, that you use correct one(Project.objects.with_counts()) + properties: + agreement_threshold: + type: optional + docs: >- + Minimum percent agreement threshold for which minimum number of + annotators must agree + validation: + pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ + annotation_limit_count: + type: optional + validation: + min: 1 + annotation_limit_percent: + type: optional + validation: + pattern: ^-?\d{0,3}(?:\.\d{0,2})?$ + annotator_evaluation_minimum_score: + type: optional + default: '95.00' + validation: + pattern: ^-?\d{0,3}(?:\.\d{0,2})?$ + annotator_evaluation_minimum_tasks: + type: optional + default: 10 + validation: + min: 0 + assignment_settings: AssignmentSettings + color: + type: optional + validation: + maxLength: 16 + comment_classification_config: optional + config_has_control_tags: + type: boolean + docs: Flag to detect is project ready for labeling + config_suitable_for_bulk_annotation: + type: boolean + docs: Flag to detect is project ready for bulk annotation + control_weights: optional + created_at: datetime + created_by: + type: optional + docs: Project owner + custom_script: optional + custom_task_lock_ttl: + type: optional + docs: TTL in seconds for task reservations, on new and existing tasks + validation: + min: 1 + max: 86400 + description: + type: optional + docs: Project description + enable_empty_annotation: + type: optional + docs: Allow annotators to submit empty annotations + evaluate_predictions_automatically: + type: optional + docs: Retrieve and display predictions when loading a task + expert_instruction: + type: optional + docs: Labeling instructions in HTML format + finished_task_number: + type: integer + docs: Finished tasks + ground_truth_number: + type: integer + docs: Honeypot annotation number in project + id: integer + is_draft: + type: optional + docs: Whether or not the project is in the middle of being created + is_published: + type: optional + docs: Whether or not the project is published to annotators + label_config: + type: optional + docs: Label config in XML format. See more about it in documentation + max_additional_annotators_assignable: + type: optional + docs: >- + Maximum number of additional annotators that can be assigned to a low + agreement task + maximum_annotations: + type: optional + docs: >- + Maximum number of annotations for one task. If the number of + annotations per task is equal or greater to this value, the task is + completed (is_labeled=True) + validation: + min: -2147483648 + max: 2147483647 + min_annotations_to_start_training: + type: optional + docs: >- + Minimum number of completed tasks after which model training is + started + validation: + min: -2147483648 + max: 2147483647 + model_version: + type: optional + docs: Machine learning model version + num_tasks_with_annotations: + type: integer + docs: Tasks with annotations count + organization: optional + overlap_cohort_percentage: + type: optional + validation: + min: -2147483648 + max: 2147483647 + parsed_label_config: unknown + pause_on_failed_annotator_evaluation: + type: optional + default: false + pinned_at: + type: optional + docs: Pinned date and time + prompts: string + queue_done: integer + queue_total: integer + require_comment_on_skip: + type: optional + default: false + reveal_preannotations_interactively: + type: optional + docs: Reveal pre-annotations interactively + review_settings: ReviewSettings + sampling: optional + show_annotation_history: + type: optional + docs: Show annotation history to annotator + show_collab_predictions: + type: optional + docs: If set, the annotator can view model predictions + show_ground_truth_first: + type: optional + docs: >- + Onboarding mode (true): show ground truth tasks first in the labeling + stream + show_instruction: + type: optional + docs: Show instructions to the annotator before they start + show_overlap_first: optional + show_skip_button: + type: optional + docs: Show a skip button in interface and allow annotators to skip the task + show_unused_data_columns_to_annotators: optional + skip_queue: optional + skipped_annotations_number: type: integer docs: Skipped by collaborators annotation number in project start_training_on_annotation_update: @@ -4618,7 +5079,7 @@ types: openapi: openapi/openapi.yaml inline: true LseTask: - docs: Task Serializer with project scheme configs validation + docs: Data Manager Task Serializer with FSM state support. properties: agreement: string agreement_selected: string @@ -4673,6 +5134,9 @@ types: validation: min: -2147483648 max: 2147483647 + precomputed_agreement: + type: optional + docs: Average agreement score for the task predictions: docs: Predictions for this task type: list @@ -4682,11 +5146,19 @@ types: project: type: optional docs: Project ID for this task + review_time: + type: integer + docs: >- + Calculate total review time for this task from MetricInTimeBucket + records. + + Returns time in seconds. reviewed: optional reviewers: list> reviewers_count: integer reviews_accepted: optional reviews_rejected: optional + state: string storage_filename: string total_annotations: optional total_predictions: optional @@ -5003,7 +5475,7 @@ types: openapi: openapi/openapi.yaml inline: true LseTaskSerializerForAnnotators: - docs: Task Serializer with project scheme configs validation + docs: Data Manager Task Serializer with FSM state support. properties: annotations: string annotations_results: string @@ -5065,7 +5537,7 @@ types: openapi: openapi/openapi.yaml inline: true LseTaskSerializerForReviewers: - docs: Task Serializer with project scheme configs validation + docs: Data Manager Task Serializer with FSM state support. properties: agreement: string agreement_selected: string @@ -5120,6 +5592,9 @@ types: validation: min: -2147483648 max: 2147483647 + precomputed_agreement: + type: optional + docs: Average agreement score for the task predictions: docs: Predictions for this task type: list @@ -5129,11 +5604,19 @@ types: project: type: optional docs: Project ID for this task + review_time: + type: integer + docs: >- + Calculate total review time for this task from MetricInTimeBucket + records. + + Returns time in seconds. reviewed: optional reviewers: list> reviewers_count: integer reviews_accepted: optional reviews_rejected: optional + state: string storage_filename: string total_annotations: optional total_predictions: optional @@ -5185,7 +5668,10 @@ types: validation: maxLength: 256 lse_fields: LseFields - org_membership: list + org_membership: + type: list + availability: deprecated + organization_membership: OrganizationMembership pause: string phone: type: optional @@ -5230,7 +5716,10 @@ types: type: optional validation: maxLength: 256 - org_membership: list + org_membership: + type: list + availability: deprecated + organization_membership: OrganizationMembership phone: type: optional validation: @@ -5341,7 +5830,9 @@ types: openapi: openapi/openapi.yaml MetricParam: properties: - agreement_threshold: string + agreement_threshold: + type: string + availability: deprecated allowed: string max_additional_annotators_assignable: type: optional @@ -5351,6 +5842,7 @@ types: validation: min: -2147483648 max: 2147483647 + availability: deprecated metric_name: type: optional docs: Evaluation metric chosen for this project @@ -5631,6 +6123,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 @@ -5698,6 +6201,36 @@ types: minLength: 1 source: openapi: openapi/openapi.yaml + OrganizationPermission: + properties: + default: list + group: optional + id: integer + label: optional + options: list + organization: integer + permission: + type: string + validation: + maxLength: 255 + roles: + type: optional> + docs: Explicit roles that have this permission within the organization. + tooltip: optional + source: + openapi: openapi/openapi.yaml + OrganizationPermissionRequest: + properties: + permission: + type: string + validation: + minLength: 1 + maxLength: 255 + roles: + type: optional> + docs: Explicit roles that have this permission within the organization. + source: + openapi: openapi/openapi.yaml PaginatedAllRolesProjectListList: properties: count: integer @@ -5858,7 +6391,10 @@ types: validation: maxLength: 256 lse_fields: LseFields - org_membership: list + org_membership: + type: list + availability: deprecated + organization_membership: OrganizationMembership pause: string phone: type: optional @@ -5871,6 +6407,20 @@ types: maxLength: 256 source: openapi: openapi/openapi.yaml + PaginatedProjectSubsetTasksResponseList: + properties: + count: integer + next: + type: optional + validation: + format: uri + previous: + type: optional + validation: + format: uri + results: list + source: + openapi: openapi/openapi.yaml PaginatedRoleBasedTaskList: properties: tasks: list @@ -6031,7 +6581,7 @@ types: ProjectSampling: discriminated: false union: - - SamplingEnum + - SamplingDe5Enum - NullEnum source: openapi: openapi/openapi.yaml @@ -6137,7 +6687,11 @@ types: show_collab_predictions: type: optional docs: If set, the annotator can view model predictions - show_ground_truth_first: optional + show_ground_truth_first: + type: optional + docs: >- + Onboarding mode (true): show ground truth tasks first in the labeling + stream show_instruction: type: optional docs: Show instructions to the annotator before they start @@ -6360,6 +6914,33 @@ types: * `Sample` - Sample source: openapi: openapi/openapi.yaml + ProjectSubsetItem: + properties: + columns_schema: optional>> + count: integer + subset: string + source: + openapi: openapi/openapi.yaml + ProjectSubsetTaskItem: + properties: + data: map + error: optional> + ground_truth: optional> + id: optional + prediction: optional> + score: optional + source: + openapi: openapi/openapi.yaml + ProjectSubsetTasksResponse: + properties: + next_cursor: optional + previous_cursor: optional + task_count: + type: optional + docs: Present only when include_total=true + task_result_list: list + source: + openapi: openapi/openapi.yaml ProjectTemplate: properties: assignment_settings: optional @@ -6367,7 +6948,7 @@ types: created_by: optional custom_script: type: optional - docs: custom script for projects created from this template + docs: custom script (Plugin) for projects created from this template description: optional id: integer name: @@ -6391,7 +6972,7 @@ types: created_by: optional custom_script: type: optional - docs: custom script for projects created from this template + docs: custom script (Plugin) for projects created from this template validation: minLength: 1 description: @@ -6692,6 +7273,20 @@ types: source: openapi: openapi/openapi.yaml inline: true + ReviewSettingsSampling: + discriminated: false + docs: |- + Task sampling strategy in the review stream (by task id or random) + + * `task_id` - By Task ID + * `random` - Random + union: + - ReviewSettingsSamplingEnum + - BlankEnum + - NullEnum + source: + openapi: openapi/openapi.yaml + inline: true ReviewSettings: properties: anonymize_annotations: @@ -6727,6 +7322,18 @@ types: review_only_manual_assignments: type: optional docs: When set True, review queue is built only from manually assigned tasks + review_task_limit_percent: + type: optional + docs: Percent of tasks to include in review stream (0-100). Null/0 disables. + validation: + pattern: ^-?\d{0,3}(?:\.\d{0,2})?$ + sampling: + type: optional + docs: |- + Task sampling strategy in the review stream (by task id or random) + + * `task_id` - By Task ID + * `random` - Random show_agreement_to_reviewers: type: optional docs: Show the agreement column to reviewers @@ -6771,6 +7378,20 @@ types: source: openapi: openapi/openapi.yaml inline: true + ReviewSettingsRequestSampling: + discriminated: false + docs: |- + Task sampling strategy in the review stream (by task id or random) + + * `task_id` - By Task ID + * `random` - Random + union: + - ReviewSettingsSamplingEnum + - BlankEnum + - NullEnum + source: + openapi: openapi/openapi.yaml + inline: true ReviewSettingsRequest: properties: anonymize_annotations: @@ -6804,6 +7425,18 @@ types: review_only_manual_assignments: type: optional docs: When set True, review queue is built only from manually assigned tasks + review_task_limit_percent: + type: optional + docs: Percent of tasks to include in review stream (0-100). Null/0 disables. + validation: + pattern: ^-?\d{0,3}(?:\.\d{0,2})?$ + sampling: + type: optional + docs: |- + Task sampling strategy in the review stream (by task id or random) + + * `task_id` - By Task ID + * `random` - Random show_agreement_to_reviewers: type: optional docs: Show the agreement column to reviewers @@ -6820,6 +7453,15 @@ types: false, hides columns not referenced by the label interface source: openapi: openapi/openapi.yaml + ReviewSettingsSamplingEnum: + enum: + - task_id + - random + docs: |- + * `task_id` - By Task ID + * `random` - Random + source: + openapi: openapi/openapi.yaml ReviewedEnum: enum: - only @@ -7213,7 +7855,7 @@ types: workspaces_groups: optional>> source: openapi: openapi/openapi.yaml - SamplingEnum: + SamplingDe5Enum: enum: - value: Sequential sampling name: SequentialSampling @@ -7255,6 +7897,19 @@ types: * `Model` - Model source: openapi: openapi/openapi.yaml + SegmentationEnum: + enum: + - none + - time + - user + - matrix + docs: |- + * `none` - none + * `time` - time + * `user` - user + * `matrix` - matrix + source: + openapi: openapi/openapi.yaml SelectedItemsRequest: properties: all: boolean @@ -7416,6 +8071,15 @@ types: source: openapi: openapi/openapi.yaml TaskAssignment: + docs: |- + TaskAssignment Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) properties: assignee: type: integer @@ -7424,6 +8088,7 @@ types: type: datetime docs: Time of assignment id: integer + state: string task: type: integer docs: Assigned task @@ -7924,8 +8589,12 @@ types: validation: maxLength: 256 lse_fields: WhoAmILseFields - org_membership: list + org_membership: + type: list + availability: deprecated + organization_membership: OrganizationMembership pause: string + permissions: list phone: type: optional validation: diff --git a/.mock/definition/actions.yml b/.mock/definition/actions.yml index 747504855..e80fe6d09 100644 --- a/.mock/definition/actions.yml +++ b/.mock/definition/actions.yml @@ -12,6 +12,15 @@ types: source: openapi: openapi/openapi.yaml inline: true + ActionsListResponseItemPermission: + discriminated: false + union: + - string + - docs: List of permissions (user needs any all of them) + type: list + source: + openapi: openapi/openapi.yaml + inline: true ActionsListResponseItem: properties: dialog: @@ -23,7 +32,7 @@ types: order: type: optional permission: - type: optional + type: optional title: type: optional source: diff --git a/.mock/definition/activityLogs.yml b/.mock/definition/activityLogs.yml index 0532b45d7..68da06dcf 100644 --- a/.mock/definition/activityLogs.yml +++ b/.mock/definition/activityLogs.yml @@ -21,11 +21,17 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve activity logs filtered by workspace, project, user, HTTP method, date range or search query. source: openapi: openapi/openapi.yaml - display-name: Get activity logs + display-name: ✨ Get activity logs request: name: ActivityLogsListRequest query-parameters: diff --git a/.mock/definition/analytics.yml b/.mock/definition/analytics.yml new file mode 100644 index 000000000..7a9373aa3 --- /dev/null +++ b/.mock/definition/analytics.yml @@ -0,0 +1,128 @@ +imports: + root: __package__.yml +service: + auth: false + base-path: '' + endpoints: + api_analytics_kpis_retrieve: + path: /api/analytics/kpis/ + method: GET + auth: true + docs: >- + Returns metadata for all available KPI (Key Performance Indicator) + classes. Each KPI includes its key, label, base class, dependencies, and + configuration. This endpoint is useful for discovering available metrics + and understanding their relationships and requirements. + source: + openapi: openapi/openapi.yaml + display-name: List all available KPIs + response: + docs: List of available KPIs with metadata + type: list + examples: + - response: + body: + - base_class: base_class + calculation_formula: + key: value + date_column: date_column + depends_on_kpis: + - depends_on_kpis + is_calculated: true + is_label_type: true + key: key + label: label + percentage: true + unit: unit + api_analytics_kpis_retrieve_2: + path: /api/analytics/kpis/{kpi_key} + method: GET + auth: true + docs: >- + Retrieve data for a specific KPI with support for filtering and + segmentation. Can segment by time (hourly, daily, weekly, monthly, + yearly), by user, or both (2D matrix). If no segmentation is specified, + returns a single total value. Supports filtering by projects, members, + and date range. Date filters are interpreted in the specified timezone + (required parameter). + source: + openapi: openapi/openapi.yaml + path-parameters: + kpi_key: + type: string + docs: KPI identifier (key) + display-name: Get KPI data with optional segmentation + request: + name: ApiAnalyticsKpisRetrieve2Request + query-parameters: + end: + type: optional + docs: End date for filtering (ISO format) + members: + type: optional + docs: >- + Comma-separated user IDs. If empty, includes all organization + members. + projects: + type: optional + docs: >- + Comma-separated project IDs. If empty, includes all organization + projects. + segment_by_time: + type: optional + docs: 'Time granularity: hourly, daily, weekly, monthly, yearly' + segment_by_user: + type: optional + docs: Whether to segment results by user + start: + type: optional + docs: Start date for filtering (ISO format) + tz: + type: string + docs: >- + Timezone for date filtering (IANA timezone name, e.g., + "America/New_York", "UTC"). The start and end dates will be + interpreted in this timezone. + response: + docs: KPI data with requested segmentation + type: root.KpiDetailResponse + errors: + - root.BadRequestError + - root.NotFoundError + examples: + - path-parameters: + kpi_key: kpi_key + query-parameters: + tz: tz + response: + body: + by_user: + users: + - user_email: user_email + user_id: 1 + username: username + values: + - 1.1 + kpi_key: kpi_key + kpi_label: kpi_label + matrix: + interval_start: + - '2024-01-15T09:30:00Z' + users: + - user_email: user_email + user_id: 1 + username: username + values: + - [] + segmentation: none + time_series: + interval_start: + - '2024-01-15T09:30:00Z' + values: + - 1.1 + total: + unit: unit + value: 1.1 + unit: unit + source: + openapi: openapi/openapi.yaml diff --git a/.mock/definition/annotationHistory.yml b/.mock/definition/annotationHistory.yml index c569c27f7..c1e0e820c 100644 --- a/.mock/definition/annotationHistory.yml +++ b/.mock/definition/annotationHistory.yml @@ -9,13 +9,19 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List annotation history items for an annotation. Annotation history logs all actions performed with annotations, such as: imports, submits, updates, reviews, and more. Users can view annotation history items in the Annotation History panel during labeling. source: openapi: openapi/openapi.yaml - display-name: List all annotation history items for annotation + display-name: ✨ List all annotation history items for annotation request: name: AnnotationHistoryListRequest query-parameters: @@ -54,12 +60,18 @@ service: method: DELETE auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete all annotation history items for a specific annotation, task or project. This method is available only for users with administrator roles. source: openapi: openapi/openapi.yaml - display-name: Delete annotation history items + display-name: ✨ Delete annotation history items request: name: AnnotationHistoryDeleteRequest query-parameters: @@ -85,12 +97,19 @@ service: path: /api/projects/{id}/annotation-history/ method: GET auth: true - docs: List all annotation history items for the project with pagination. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all annotation history items for the project with pagination. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: List annotation history items for project + display-name: ✨ List annotation history items for project request: name: AnnotationHistoryListForProjectRequest query-parameters: diff --git a/.mock/definition/annotationReviews.yml b/.mock/definition/annotationReviews.yml index c8d2f95eb..9161cca2c 100644 --- a/.mock/definition/annotationReviews.yml +++ b/.mock/definition/annotationReviews.yml @@ -8,10 +8,17 @@ service: path: /api/annotation-reviews/ method: GET auth: true - docs: List all reviews for a specific annotation ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all reviews for a specific annotation ID. source: openapi: openapi/openapi.yaml - display-name: List reviews + display-name: ✨ List reviews request: name: AnnotationReviewsListRequest query-parameters: @@ -38,16 +45,24 @@ service: result: key: value started_at: '2024-01-15T09:30:00Z' + state: state audiences: - public create: path: /api/annotation-reviews/ method: POST auth: true - docs: Create a review for a specific annotation ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a review for a specific annotation ID. source: openapi: openapi/openapi.yaml - display-name: Create review + display-name: ✨ Create review request: body: root.AnnotationReviewRequest query-parameters: @@ -76,20 +91,28 @@ service: result: key: value started_at: '2024-01-15T09:30:00Z' + state: state audiences: - public get: path: /api/annotation-reviews/{id}/ method: GET auth: true - docs: Retrieve a specific review by ID for an annotation. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a specific review by ID for an annotation. source: openapi: openapi/openapi.yaml path-parameters: id: type: integer docs: A unique integer value identifying this annotation review. - display-name: Get review + display-name: ✨ Get review response: docs: '' type: root.AnnotationReview @@ -110,20 +133,28 @@ service: result: key: value started_at: '2024-01-15T09:30:00Z' + state: state audiences: - public api_annotation_reviews_update: path: /api/annotation-reviews/{id}/ method: PUT auth: true - docs: Overwrite a specific review by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overwrite a specific review by ID. source: openapi: openapi/openapi.yaml path-parameters: id: type: integer docs: A unique integer value identifying this annotation review. - display-name: Put review + display-name: ✨ Put review request: body: root.AnnotationReviewRequest content-type: application/json @@ -149,20 +180,28 @@ service: result: key: value started_at: '2024-01-15T09:30:00Z' + state: state audiences: - internal delete: path: /api/annotation-reviews/{id}/ method: DELETE auth: true - docs: Delete a review by ID + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a review by ID source: openapi: openapi/openapi.yaml path-parameters: id: type: integer docs: A unique integer value identifying this annotation review. - display-name: Delete review + display-name: ✨ Delete review examples: - path-parameters: id: 1 @@ -172,14 +211,21 @@ service: path: /api/annotation-reviews/{id}/ method: PATCH auth: true - docs: Update a specific review by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific review by ID. source: openapi: openapi/openapi.yaml path-parameters: id: type: integer docs: A unique integer value identifying this annotation review. - display-name: Update review + display-name: ✨ Update review request: name: PatchedAnnotationReviewRequest body: @@ -220,6 +266,7 @@ service: result: key: value started_at: '2024-01-15T09:30:00Z' + state: state audiences: - public source: diff --git a/.mock/definition/annotations.yml b/.mock/definition/annotations.yml index a01e0a71a..808438e21 100644 --- a/.mock/definition/annotations.yml +++ b/.mock/definition/annotations.yml @@ -174,6 +174,7 @@ service: width: 50 x: 20 'y': 30 + state: state task: 1 updated_at: '2024-01-15T09:30:00Z' updated_by: 1 @@ -296,6 +297,7 @@ service: width: 50 x: 20 'y': 30 + state: state task: 1 updated_at: '2024-01-15T09:30:00Z' updated_by: 1 @@ -361,6 +363,7 @@ service: project: 1 result: - key: value + state: state task: 1 updated_at: '2024-01-15T09:30:00Z' updated_by: 1 @@ -486,6 +489,7 @@ service: width: 50 x: 20 'y': 30 + state: state task: 1 updated_at: '2024-01-15T09:30:00Z' updated_by: 1 diff --git a/.mock/definition/billing.yml b/.mock/definition/billing.yml index f8c4d9f7e..cf69fd0b3 100644 --- a/.mock/definition/billing.yml +++ b/.mock/definition/billing.yml @@ -8,10 +8,17 @@ service: path: /api/billing/info method: GET auth: true - docs: Retrieve billing checks and feature flags for the active organization. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve billing checks and feature flags for the active organization. source: openapi: openapi/openapi.yaml - display-name: Get billing info + display-name: ✨ Get billing info response: docs: Billing information for the active organization type: root.BillingInfoResponse @@ -67,6 +74,7 @@ service: allow_data_credentials: true allow_invite_people: true allow_invite_project_experts: true + allow_nda: true allow_organization_webhooks: true allow_sso: false allow_storage_proxy: true @@ -76,6 +84,7 @@ service: disable_members_page: false disable_project_imports: false early_adopter: false + email_configured: true embed_domains: - domain: http://localhost:3000 - domain: https://example.com @@ -84,7 +93,6 @@ service: public_verify_alg: - RS256 public_verify_key: .... - hide_storage_settings_for_manager: false manual_role_management: false manual_workspace_management: false secure_mode: false @@ -141,6 +149,7 @@ service: allow_data_credentials: true allow_invite_people: true allow_invite_project_experts: true + allow_nda: true allow_organization_webhooks: true allow_sso: true allow_storage_proxy: true @@ -150,6 +159,7 @@ service: disable_members_page: false disable_project_imports: false early_adopter: true + email_configured: true embed_domains: - domain: http://localhost:3000 - domain: https://example.com @@ -158,7 +168,6 @@ service: public_verify_alg: - RS256 public_verify_key: .... - hide_storage_settings_for_manager: false manual_role_management: false manual_workspace_management: false secure_mode: false @@ -215,6 +224,7 @@ service: allow_data_credentials: false allow_invite_people: true allow_invite_project_experts: true + allow_nda: true allow_organization_webhooks: false allow_sso: true allow_storage_proxy: true @@ -224,6 +234,7 @@ service: disable_members_page: false disable_project_imports: false early_adopter: true + email_configured: true embed_domains: - domain: http://localhost:3000 - domain: https://purple-zoos-flash.loca.lt @@ -232,7 +243,6 @@ service: public_verify_alg: - RS256 public_verify_key: .... - hide_storage_settings_for_manager: false manual_role_management: true manual_workspace_management: true secure_mode: false diff --git a/.mock/definition/blueprints.yml b/.mock/definition/blueprints.yml index 99ddd0d56..3fca5ba5f 100644 --- a/.mock/definition/blueprints.yml +++ b/.mock/definition/blueprints.yml @@ -49,7 +49,7 @@ service: title: title updated_at: '2024-01-15T09:30:00Z' audiences: - - public + - internal delete: path: /api/blueprints/{id}/ method: DELETE @@ -64,7 +64,7 @@ service: - path-parameters: id: id audiences: - - public + - internal api_blueprints_create_project_retrieve: path: /api/blueprints/{share_id}/create-project method: GET diff --git a/.mock/definition/comments.yml b/.mock/definition/comments.yml index 260ea6597..d552bf1b8 100644 --- a/.mock/definition/comments.yml +++ b/.mock/definition/comments.yml @@ -8,10 +8,17 @@ service: path: /api/comments/ method: GET auth: true - docs: List all comments for a specific annotation ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all comments for a specific annotation ID. source: openapi: openapi/openapi.yaml - display-name: List comments + display-name: ✨ List comments request: name: CommentsListRequest query-parameters: @@ -41,6 +48,7 @@ service: region_ref: key: value resolved_at: '2024-01-15T09:30:00Z' + state: state task: 1 text: text updated_at: '2024-01-15T09:30:00Z' @@ -50,10 +58,17 @@ service: path: /api/comments/ method: POST auth: true - docs: Create a comment for a specific annotation ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a comment for a specific annotation ID. source: openapi: openapi/openapi.yaml - display-name: Create comment + display-name: ✨ Create comment request: body: root.CommentRequest query-parameters: @@ -81,6 +96,7 @@ service: region_ref: key: value resolved_at: '2024-01-15T09:30:00Z' + state: state task: 1 text: text updated_at: '2024-01-15T09:30:00Z' @@ -90,10 +106,17 @@ service: path: /api/comments/export/ method: GET auth: true - docs: Export comments to CSV file + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Export comments to CSV file source: openapi: openapi/openapi.yaml - display-name: Export comments to CSV + display-name: ✨ Export comments to CSV request: name: CommentsExportRequest query-parameters: @@ -116,12 +139,19 @@ service: path: /api/comments/{id}/ method: GET auth: true - docs: Retrieve a specific comment by ID for an annotation. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a specific comment by ID for an annotation. source: openapi: openapi/openapi.yaml path-parameters: id: string - display-name: Get comment + display-name: ✨ Get comment request: name: CommentsGetRequest query-parameters: @@ -148,6 +178,7 @@ service: region_ref: key: value resolved_at: '2024-01-15T09:30:00Z' + state: state task: 1 text: text updated_at: '2024-01-15T09:30:00Z' @@ -157,12 +188,19 @@ service: path: /api/comments/{id}/ method: PUT auth: true - docs: Overwrite a specific comment by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overwrite a specific comment by ID. source: openapi: openapi/openapi.yaml path-parameters: id: string - display-name: Put comment + display-name: ✨ Put comment request: body: root.CommentRequest query-parameters: @@ -192,6 +230,7 @@ service: region_ref: key: value resolved_at: '2024-01-15T09:30:00Z' + state: state task: 1 text: text updated_at: '2024-01-15T09:30:00Z' @@ -201,12 +240,19 @@ service: path: /api/comments/{id}/ method: DELETE auth: true - docs: Delete a comment by ID + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a comment by ID source: openapi: openapi/openapi.yaml path-parameters: id: string - display-name: Delete comment + display-name: ✨ Delete comment request: name: CommentsDeleteRequest query-parameters: @@ -222,12 +268,19 @@ service: path: /api/comments/{id}/ method: PATCH auth: true - docs: Update a specific comment by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific comment by ID. source: openapi: openapi/openapi.yaml path-parameters: id: string - display-name: Update comment + display-name: ✨ Update comment request: name: PatchedCommentRequest query-parameters: @@ -268,6 +321,7 @@ service: region_ref: key: value resolved_at: '2024-01-15T09:30:00Z' + state: state task: 1 text: text updated_at: '2024-01-15T09:30:00Z' diff --git a/.mock/definition/dashboard.yml b/.mock/definition/dashboard.yml index 98417b5ec..f9dcbd342 100644 --- a/.mock/definition/dashboard.yml +++ b/.mock/definition/dashboard.yml @@ -21,56 +21,6 @@ types: docs: Total number of tasks source: openapi: openapi/openapi.yaml - ApiProjectsDashboardMembersRetrieveResponseStatsItem: - docs: User statistics - properties: - accepted: - type: optional - docs: Number of annotations marked as "Accepted" by reviewer - finished: - type: optional - gt: - type: optional - docs: Average agreement with Ground Truth annotations - mean_time: - type: optional - docs: Average mean time spent on annotation - median_time: - type: optional - docs: Average median time spent on annotation - predictions: - type: optional - docs: Average agreement with predictions - progress: - type: optional - docs: Fraction of annotation work done so far - rejected: - type: optional - docs: Number of annotations marked as "Rejected" by reviewer - review_score: - type: optional - docs: >- - Average reviewing score, when calling with "per_label=true", returns - dictionary with labels to score breakdown - skipped: - type: optional - source: - openapi: openapi/openapi.yaml - inline: true - ApiProjectsDashboardMembersRetrieveResponse: - docs: Task creation response - properties: - similarity: - type: optional>> - docs: Consensus statistics between different users - stats: - type: optional> - docs: Number of annotated (completed) tasks - users: - type: optional>> - docs: List of users - source: - openapi: openapi/openapi.yaml service: auth: false base-path: '' @@ -102,72 +52,5 @@ service: tasks: 1 audiences: - internal - api_projects_dashboard_members_retrieve: - path: /api/projects/{id}/dashboard-members - method: GET - auth: true - docs: >- - Get dashboard for members, including similarity matrix, user statistics - and users list. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Get dashboard data for members - request: - name: ApiProjectsDashboardMembersRetrieveRequest - query-parameters: - action: - type: optional - docs: >- - All data objects will be filtered by updated_at or created_at - field - end_date: - type: optional - docs: >- - End date for dashboard stats calculation. UTC timezone by default. - Use iso format (yyyy-mm-dd-hh-mm) to specify timezone. - per_label: - type: optional - docs: Per label calculation - start_date: - type: optional - docs: >- - Start date for dashboard stats calculation. UTC timezone by - default. Use iso format (yyyy-mm-dd-hh-mm) to specify timezone. - updated_by: - type: optional - docs: >- - All task objects will be filtered by updated_by field. Only tasks - that were updated by concrete user will be taken in account. - use_kappa: - type: optional - docs: Use kappa statistics for calculation - response: - docs: Successful response returns project-related annotation statistics - type: ApiProjectsDashboardMembersRetrieveResponse - availability: deprecated - examples: - - path-parameters: - id: 1 - response: - body: - similarity: - - key: value - stats: - - accepted: 1 - finished: 1 - gt: 1.1 - mean_time: 1.1 - median_time: 1.1 - predictions: 1.1 - progress: 1 - rejected: 1 - review_score: 1.1 - skipped: 1 - users: - - key: value - audiences: - - internal source: openapi: openapi/openapi.yaml diff --git a/.mock/definition/datasetStorageAzure.yml b/.mock/definition/datasetStorageAzure.yml index bc4b08991..d2641c526 100644 --- a/.mock/definition/datasetStorageAzure.yml +++ b/.mock/definition/datasetStorageAzure.yml @@ -44,6 +44,7 @@ service: prefix: prefix presign: true presign_ttl: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synced: true @@ -90,6 +91,7 @@ service: prefix: prefix presign: true presign_ttl: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synced: true @@ -138,6 +140,7 @@ service: prefix: prefix presign: true presign_ttl: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synced: true @@ -184,6 +187,7 @@ service: prefix: prefix presign: true presign_ttl: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synced: true @@ -229,6 +233,7 @@ service: prefix: prefix presign: true presign_ttl: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synced: true @@ -313,6 +318,9 @@ service: validation: min: 0 max: 32767 + recursive_scan: + type: optional + docs: Perform recursive scan over the container content regex_filter: type: optional docs: Cloud storage regex for filtering objects @@ -361,6 +369,7 @@ service: prefix: prefix presign: true presign_ttl: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synced: true @@ -426,6 +435,7 @@ service: prefix: prefix presign: true presign_ttl: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synced: true diff --git a/.mock/definition/datasetStorageGcs.yml b/.mock/definition/datasetStorageGcs.yml index dae91abf1..a4b70d5c0 100644 --- a/.mock/definition/datasetStorageGcs.yml +++ b/.mock/definition/datasetStorageGcs.yml @@ -44,6 +44,7 @@ service: prefix: prefix presign: true presign_ttl: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synced: true @@ -90,6 +91,7 @@ service: prefix: prefix presign: true presign_ttl: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synced: true @@ -138,6 +140,7 @@ service: prefix: prefix presign: true presign_ttl: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synced: true @@ -184,6 +187,7 @@ service: prefix: prefix presign: true presign_ttl: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synced: true @@ -229,6 +233,7 @@ service: prefix: prefix presign: true presign_ttl: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synced: true @@ -313,6 +318,9 @@ service: validation: min: 0 max: 32767 + recursive_scan: + type: optional + docs: Perform recursive scan over the bucket content regex_filter: type: optional docs: Cloud storage regex for filtering objects @@ -361,6 +369,7 @@ service: prefix: prefix presign: true presign_ttl: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synced: true @@ -426,6 +435,7 @@ service: prefix: prefix presign: true presign_ttl: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synced: true diff --git a/.mock/definition/exportStorage/azure.yml b/.mock/definition/exportStorage/azure.yml index 0e26ee5f1..61f76099a 100644 --- a/.mock/definition/exportStorage/azure.yml +++ b/.mock/definition/exportStorage/azure.yml @@ -19,13 +19,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - account_key: account_key account_name: account_name diff --git a/.mock/definition/exportStorage/azureSpi.yml b/.mock/definition/exportStorage/azureSpi.yml index 962f93d34..e204a1c02 100644 --- a/.mock/definition/exportStorage/azureSpi.yml +++ b/.mock/definition/exportStorage/azureSpi.yml @@ -9,11 +9,17 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all Azure export storage connections that were set up with Service Principal authentication. source: openapi: openapi/openapi.yaml - display-name: Get all Azure SPI export storage + display-name: ✨ Get all Azure SPI export storage request: name: AzureSpiListRequest query-parameters: @@ -21,13 +27,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - account_name: account_name can_delete_objects: true @@ -60,11 +68,17 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create an Azure export storage connection with Service Principal authentication to store annotations. source: openapi: openapi/openapi.yaml - display-name: Create Azure export storage with SPI authentication + display-name: ✨ Create Azure export storage with SPI authentication request: body: root.AzureServicePrincipalExportStorageRequest content-type: application/json @@ -107,11 +121,17 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific Azure export storage connection that was set up with Service Principal authentication. source: openapi: openapi/openapi.yaml - display-name: Validate Azure SPI export storage + display-name: ✨ Validate Azure SPI export storage request: body: root.AzureServicePrincipalExportStorageRequest content-type: application/json @@ -125,13 +145,19 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific Azure export storage connection that was set up with Service Principal authentication. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get Azure SPI export storage + display-name: ✨ Get Azure SPI export storage response: docs: '' type: root.AzureServicePrincipalExportStorage @@ -171,13 +197,19 @@ service: method: DELETE auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific Azure export storage connection that was set up with Service Principal authentication. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Delete Azure SPI export storage + display-name: ✨ Delete Azure SPI export storage examples: - path-parameters: id: 1 @@ -188,13 +220,19 @@ service: method: PATCH auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific Azure export storage connection that was set up with Service Principal authentication. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Update Azure SPI export storage + display-name: ✨ Update Azure SPI export storage request: name: PatchedAzureServicePrincipalExportStorageRequest body: @@ -302,12 +340,19 @@ service: path: /api/storages/export/azure_spi/{id}/sync method: POST auth: true - docs: Sync tasks from an Azure SPI export storage. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Sync tasks from an Azure SPI export storage. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Sync Azure SPI export storage + display-name: ✨ Sync Azure SPI export storage response: docs: '' type: root.AzureServicePrincipalExportStorage diff --git a/.mock/definition/exportStorage/databricks.yml b/.mock/definition/exportStorage/databricks.yml new file mode 100644 index 000000000..25f4cfaa8 --- /dev/null +++ b/.mock/definition/exportStorage/databricks.yml @@ -0,0 +1,414 @@ +imports: + root: ../__package__.yml +service: + auth: false + base-path: '' + endpoints: + list: + path: /api/storages/export/databricks + method: GET + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a list of all Databricks Files export storage connections. + source: + openapi: openapi/openapi.yaml + display-name: ✨ List Databricks export storages + request: + name: DatabricksListRequest + query-parameters: + ordering: + type: optional + docs: Which field to use when ordering the results. + project: + type: integer + docs: Project ID + response: + docs: '' + type: list + examples: + - query-parameters: + project: 1 + response: + body: + - can_delete_objects: true + catalog: catalog + created_at: '2024-01-15T09:30:00Z' + description: description + host: host + id: 1 + last_sync: '2024-01-15T09:30:00Z' + last_sync_count: 1 + last_sync_job: last_sync_job + meta: + key: value + prefix: prefix + project: 1 + regex_filter: regex_filter + request_timeout_s: 1 + schema: schema + status: initialized + stream_chunk_bytes: 1 + synchronizable: true + title: title + traceback: traceback + type: type + use_blob_urls: true + verify_tls: true + volume: volume + audiences: + - public + create: + path: /api/storages/export/databricks + method: POST + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a Databricks Files export storage connection. + source: + openapi: openapi/openapi.yaml + display-name: ✨ Create Databricks export storage + request: + body: root.DatabricksExportStorageRequest + content-type: application/json + response: + docs: '' + type: root.DatabricksExportStorage + examples: + - request: + catalog: catalog + host: host + project: 1 + schema: schema + volume: volume + response: + body: + can_delete_objects: true + catalog: catalog + created_at: '2024-01-15T09:30:00Z' + description: description + host: host + id: 1 + last_sync: '2024-01-15T09:30:00Z' + last_sync_count: 1 + last_sync_job: last_sync_job + meta: + key: value + prefix: prefix + project: 1 + regex_filter: regex_filter + request_timeout_s: 1 + schema: schema + status: initialized + stream_chunk_bytes: 1 + synchronizable: true + title: title + traceback: traceback + type: type + use_blob_urls: true + verify_tls: true + volume: volume + audiences: + - public + validate: + path: /api/storages/export/databricks/validate + method: POST + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate a specific Databricks Files export storage connection. + source: + openapi: openapi/openapi.yaml + display-name: ✨ Validate Databricks export storage + request: + body: root.DatabricksExportStorageRequest + content-type: application/json + examples: + - request: + catalog: catalog + host: host + project: 1 + schema: schema + volume: volume + audiences: + - public + get: + path: /api/storages/export/databricks/{id} + method: GET + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific Databricks Files export storage connection. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Get Databricks export storage + response: + docs: '' + type: root.DatabricksExportStorage + examples: + - path-parameters: + id: 1 + response: + body: + can_delete_objects: true + catalog: catalog + created_at: '2024-01-15T09:30:00Z' + description: description + host: host + id: 1 + last_sync: '2024-01-15T09:30:00Z' + last_sync_count: 1 + last_sync_job: last_sync_job + meta: + key: value + prefix: prefix + project: 1 + regex_filter: regex_filter + request_timeout_s: 1 + schema: schema + status: initialized + stream_chunk_bytes: 1 + synchronizable: true + title: title + traceback: traceback + type: type + use_blob_urls: true + verify_tls: true + volume: volume + audiences: + - public + delete: + path: /api/storages/export/databricks/{id} + method: DELETE + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific Databricks Files export storage connection. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Delete Databricks export storage + examples: + - path-parameters: + id: 1 + audiences: + - public + update: + path: /api/storages/export/databricks/{id} + method: PATCH + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific Databricks Files export storage connection. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Update Databricks export storage + request: + name: PatchedDatabricksExportStorageRequest + body: + properties: + can_delete_objects: + type: optional + docs: Deletion from storage enabled + catalog: + type: optional + docs: UC catalog name + validation: + minLength: 1 + description: + type: optional + docs: Cloud storage description + host: + type: optional + docs: Databricks workspace base URL (https://...) + validation: + minLength: 1 + last_sync: + type: optional + docs: Last sync finished time + last_sync_count: + type: optional + docs: Count of tasks synced last time + validation: + min: 0 + max: 2147483647 + last_sync_job: + type: optional + docs: Last sync job ID + validation: + maxLength: 256 + meta: optional + prefix: + type: optional + docs: Export path prefix under the volume + project: + type: optional + docs: A unique integer value identifying this project. + regex_filter: + type: optional + docs: Regex for filtering objects + request_timeout_s: + type: optional + validation: + min: 0 + max: 2147483647 + schema: + type: optional + docs: UC schema name + validation: + minLength: 1 + status: optional + stream_chunk_bytes: + type: optional + validation: + min: 0 + max: 2147483647 + synchronizable: + type: optional + default: true + title: + type: optional + docs: Cloud storage title + validation: + maxLength: 256 + token: optional + traceback: + type: optional + docs: Traceback report for the last failed sync + use_blob_urls: + type: optional + docs: Generate blob URLs in tasks + verify_tls: + type: optional + docs: Verify TLS certificates + volume: + type: optional + docs: UC volume name + validation: + minLength: 1 + content-type: application/json + response: + docs: '' + type: root.DatabricksExportStorage + examples: + - path-parameters: + id: 1 + request: {} + response: + body: + can_delete_objects: true + catalog: catalog + created_at: '2024-01-15T09:30:00Z' + description: description + host: host + id: 1 + last_sync: '2024-01-15T09:30:00Z' + last_sync_count: 1 + last_sync_job: last_sync_job + meta: + key: value + prefix: prefix + project: 1 + regex_filter: regex_filter + request_timeout_s: 1 + schema: schema + status: initialized + stream_chunk_bytes: 1 + synchronizable: true + title: title + traceback: traceback + type: type + use_blob_urls: true + verify_tls: true + volume: volume + audiences: + - public + sync: + path: /api/storages/export/databricks/{id}/sync + method: POST + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Export annotations to a Databricks Files storage. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Sync Databricks export storage + response: + docs: '' + type: root.DatabricksExportStorage + examples: + - path-parameters: + id: 1 + response: + body: + can_delete_objects: true + catalog: catalog + created_at: '2024-01-15T09:30:00Z' + description: description + host: host + id: 1 + last_sync: '2024-01-15T09:30:00Z' + last_sync_count: 1 + last_sync_job: last_sync_job + meta: + key: value + prefix: prefix + project: 1 + regex_filter: regex_filter + request_timeout_s: 1 + schema: schema + status: initialized + stream_chunk_bytes: 1 + synchronizable: true + title: title + traceback: traceback + type: type + use_blob_urls: true + verify_tls: true + volume: volume + audiences: + - public + source: + openapi: openapi/openapi.yaml diff --git a/.mock/definition/exportStorage/gcs.yml b/.mock/definition/exportStorage/gcs.yml index c00e8b713..f8cf379fe 100644 --- a/.mock/definition/exportStorage/gcs.yml +++ b/.mock/definition/exportStorage/gcs.yml @@ -19,13 +19,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - bucket: bucket can_delete_objects: true diff --git a/.mock/definition/exportStorage/gcswif.yml b/.mock/definition/exportStorage/gcswif.yml index 5cf7e8d1c..9d419f439 100644 --- a/.mock/definition/exportStorage/gcswif.yml +++ b/.mock/definition/exportStorage/gcswif.yml @@ -9,11 +9,17 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all GCS export storage connections that were set up with WIF authentication. source: openapi: openapi/openapi.yaml - display-name: Get all GCS WIF export storage + display-name: ✨ Get all GCS WIF export storage request: name: GcswifListRequest query-parameters: @@ -21,13 +27,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - bucket: bucket can_delete_objects: true @@ -61,11 +69,17 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create an GCS export storage connection with WIF authentication to store annotations. source: openapi: openapi/openapi.yaml - display-name: Create GCS export storage with WIF authentication + display-name: ✨ Create GCS export storage with WIF authentication request: body: root.GcswifExportStorageRequest content-type: application/json @@ -109,11 +123,17 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific GCS export storage connection that was set up with WIF authentication. source: openapi: openapi/openapi.yaml - display-name: Validate GCS WIF export storage + display-name: ✨ Validate GCS WIF export storage request: body: root.GcswifExportStorageRequest content-type: application/json @@ -127,13 +147,19 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific GCS export storage connection that was set up with WIF authentication. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get GCS WIF export storage + display-name: ✨ Get GCS WIF export storage response: docs: '' type: root.GcswifExportStorage @@ -174,13 +200,19 @@ service: method: DELETE auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific GCS export storage connection that was set up with WIF authentication. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Delete GCS WIF export storage + display-name: ✨ Delete GCS WIF export storage examples: - path-parameters: id: 1 @@ -191,13 +223,19 @@ service: method: PATCH auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific GCS export storage connection that was set up with WIF authentication. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Update GCS WIF export storage + display-name: ✨ Update GCS WIF export storage request: name: PatchedGcswifExportStorageRequest body: @@ -309,12 +347,19 @@ service: path: /api/storages/export/gcswif/{id}/sync method: POST auth: true - docs: Sync tasks from an GCS WIF export storage. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Sync tasks from an GCS WIF export storage. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Sync GCS WIF export storage + display-name: ✨ Sync GCS WIF export storage response: docs: '' type: root.GcswifExportStorage diff --git a/.mock/definition/exportStorage/local.yml b/.mock/definition/exportStorage/local.yml index 49b888aed..0a340bd61 100644 --- a/.mock/definition/exportStorage/local.yml +++ b/.mock/definition/exportStorage/local.yml @@ -19,13 +19,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - can_delete_objects: true created_at: '2024-01-15T09:30:00Z' diff --git a/.mock/definition/exportStorage/redis.yml b/.mock/definition/exportStorage/redis.yml index a17299458..c68268935 100644 --- a/.mock/definition/exportStorage/redis.yml +++ b/.mock/definition/exportStorage/redis.yml @@ -19,13 +19,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - can_delete_objects: true created_at: '2024-01-15T09:30:00Z' diff --git a/.mock/definition/exportStorage/s3.yml b/.mock/definition/exportStorage/s3.yml index 964181a38..ec1598392 100644 --- a/.mock/definition/exportStorage/s3.yml +++ b/.mock/definition/exportStorage/s3.yml @@ -19,13 +19,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - aws_access_key_id: aws_access_key_id aws_secret_access_key: aws_secret_access_key diff --git a/.mock/definition/exportStorage/s3S.yml b/.mock/definition/exportStorage/s3S.yml index 348b15b35..0f882015b 100644 --- a/.mock/definition/exportStorage/s3S.yml +++ b/.mock/definition/exportStorage/s3S.yml @@ -9,11 +9,17 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all S3 export storage connections that were set up with IAM role access. source: openapi: openapi/openapi.yaml - display-name: List S3s export storage + display-name: ✨ List S3s export storage request: name: S3SListRequest query-parameters: @@ -21,13 +27,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - aws_access_key_id: aws_access_key_id aws_secret_access_key: aws_secret_access_key @@ -64,11 +72,17 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create an S3 export storage connection with IAM role access to store annotations. source: openapi: openapi/openapi.yaml - display-name: Create export storage + display-name: ✨ Create export storage request: body: root.LseS3ExportStorageRequest content-type: application/json @@ -116,11 +130,17 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific S3 export storage connection that was set up with IAM role access. source: openapi: openapi/openapi.yaml - display-name: Validate export storage + display-name: ✨ Validate export storage request: body: root.LseS3ExportStorageRequest content-type: application/json @@ -135,13 +155,19 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific S3 export storage connection that was set up with IAM role access. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get export storage + display-name: ✨ Get export storage response: docs: '' type: root.LseS3ExportStorage @@ -185,13 +211,19 @@ service: method: DELETE auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific S3 export storage connection that was set up with IAM role access. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Delete export storage + display-name: ✨ Delete export storage examples: - path-parameters: id: 1 @@ -202,13 +234,19 @@ service: method: PATCH auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific S3 export storage connection that was set up with IAM role access. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Update export storage + display-name: ✨ Update export storage request: name: PatchedLseS3ExportStorageRequest body: @@ -332,12 +370,19 @@ service: path: /api/storages/export/s3s/{id}/sync method: POST auth: true - docs: Sync tasks from an S3 export storage. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Sync tasks from an S3 export storage. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Sync export storage + display-name: ✨ Sync export storage response: docs: '' type: root.LseS3ExportStorage diff --git a/.mock/definition/importStorage/azure.yml b/.mock/definition/importStorage/azure.yml index d70c13ee8..e915df875 100644 --- a/.mock/definition/importStorage/azure.yml +++ b/.mock/definition/importStorage/azure.yml @@ -19,13 +19,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - account_key: account_key account_name: account_name @@ -42,6 +44,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -130,6 +133,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -236,6 +240,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -343,6 +348,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -387,6 +393,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true diff --git a/.mock/definition/importStorage/azureSpi.yml b/.mock/definition/importStorage/azureSpi.yml index f88cad861..50d59ae9d 100644 --- a/.mock/definition/importStorage/azureSpi.yml +++ b/.mock/definition/importStorage/azureSpi.yml @@ -9,11 +9,17 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get list of all Azure import storage connections set up with Service Principal authentication. source: openapi: openapi/openapi.yaml - display-name: Get Azure SPI import storage + display-name: ✨ Get Azure SPI import storage request: name: AzureSpiListRequest query-parameters: @@ -21,13 +27,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - account_name: account_name client_id: client_id @@ -45,6 +53,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -60,10 +69,17 @@ service: path: /api/storages/azure_spi/ method: POST auth: true - docs: Create Azure import storage with Service Principal authentication. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create Azure import storage with Service Principal authentication. source: openapi: openapi/openapi.yaml - display-name: Create Azure import storage with SPI + display-name: ✨ Create Azure import storage with SPI request: body: root.AzureServicePrincipalImportStorageRequest content-type: application/json @@ -91,6 +107,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -107,11 +124,17 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific Azure import storage connection that was set up with Service Principal authentication. source: openapi: openapi/openapi.yaml - display-name: Validate Azure SPI import storage + display-name: ✨ Validate Azure SPI import storage request: body: root.AzureServicePrincipalImportStorageRequest content-type: application/json @@ -125,13 +148,19 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific Azure import storage connection that was set up with Service Principal authentication. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get Azure SPI import storage + display-name: ✨ Get Azure SPI import storage response: docs: '' type: root.AzureServicePrincipalImportStorage @@ -156,6 +185,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -172,13 +202,19 @@ service: method: DELETE auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific Azure import storage connection that was set up with Service Principal authentication. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Delete Azure SPI import storage + display-name: ✨ Delete Azure SPI import storage examples: - path-parameters: id: 1 @@ -189,13 +225,19 @@ service: method: PATCH auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific Azure import storage connection that was set up with Service Principal authentication. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Update Azure SPI import storage + display-name: ✨ Update Azure SPI import storage request: name: PatchedAzureServicePrincipalImportStorageRequest body: @@ -245,6 +287,9 @@ service: project: type: optional docs: A unique integer value identifying this project. + recursive_scan: + type: optional + docs: Perform recursive scan regex_filter: type: optional docs: Cloud storage regex for filtering objects @@ -295,6 +340,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -311,13 +357,19 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an Azure import storage connection that was set up with Service Principal authentication. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Sync Azure SPI import storage + display-name: ✨ Sync Azure SPI import storage response: docs: '' type: root.AzureServicePrincipalImportStorage @@ -342,6 +394,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true diff --git a/.mock/definition/importStorage/databricks.yml b/.mock/definition/importStorage/databricks.yml new file mode 100644 index 000000000..1c73e5759 --- /dev/null +++ b/.mock/definition/importStorage/databricks.yml @@ -0,0 +1,433 @@ +imports: + root: ../__package__.yml +service: + auth: false + base-path: '' + endpoints: + list: + path: /api/storages/databricks/ + method: GET + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get list of all Databricks Files import storage connections. + source: + openapi: openapi/openapi.yaml + display-name: ✨ List Databricks import storages + request: + name: DatabricksListRequest + query-parameters: + ordering: + type: optional + docs: Which field to use when ordering the results. + project: + type: integer + docs: Project ID + response: + docs: '' + type: list + examples: + - query-parameters: + project: 1 + response: + body: + - catalog: catalog + created_at: '2024-01-15T09:30:00Z' + description: description + host: host + id: 1 + last_sync: '2024-01-15T09:30:00Z' + last_sync_count: 1 + last_sync_job: last_sync_job + meta: + key: value + prefix: prefix + presign: true + presign_ttl: 1 + project: 1 + recursive_scan: true + regex_filter: regex_filter + request_timeout_s: 1 + schema: schema + status: initialized + stream_chunk_bytes: 1 + synchronizable: true + title: title + traceback: traceback + type: type + use_blob_urls: true + verify_tls: true + volume: volume + audiences: + - public + create: + path: /api/storages/databricks/ + method: POST + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a Databricks Files import storage connection. + source: + openapi: openapi/openapi.yaml + display-name: ✨ Create Databricks import storage + request: + body: root.DatabricksImportStorageRequest + content-type: application/json + response: + docs: '' + type: root.DatabricksImportStorage + examples: + - request: + catalog: catalog + host: host + project: 1 + schema: schema + volume: volume + response: + body: + catalog: catalog + created_at: '2024-01-15T09:30:00Z' + description: description + host: host + id: 1 + last_sync: '2024-01-15T09:30:00Z' + last_sync_count: 1 + last_sync_job: last_sync_job + meta: + key: value + prefix: prefix + presign: true + presign_ttl: 1 + project: 1 + recursive_scan: true + regex_filter: regex_filter + request_timeout_s: 1 + schema: schema + status: initialized + stream_chunk_bytes: 1 + synchronizable: true + title: title + traceback: traceback + type: type + use_blob_urls: true + verify_tls: true + volume: volume + audiences: + - public + validate: + path: /api/storages/databricks/validate + method: POST + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate a specific Databricks Files import storage connection. + source: + openapi: openapi/openapi.yaml + display-name: ✨ Validate Databricks import storage + request: + body: root.DatabricksImportStorageRequest + content-type: application/json + examples: + - request: + catalog: catalog + host: host + project: 1 + schema: schema + volume: volume + audiences: + - public + get: + path: /api/storages/databricks/{id} + method: GET + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific Databricks Files import storage connection. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Get Databricks import storage + response: + docs: '' + type: root.DatabricksImportStorage + examples: + - path-parameters: + id: 1 + response: + body: + catalog: catalog + created_at: '2024-01-15T09:30:00Z' + description: description + host: host + id: 1 + last_sync: '2024-01-15T09:30:00Z' + last_sync_count: 1 + last_sync_job: last_sync_job + meta: + key: value + prefix: prefix + presign: true + presign_ttl: 1 + project: 1 + recursive_scan: true + regex_filter: regex_filter + request_timeout_s: 1 + schema: schema + status: initialized + stream_chunk_bytes: 1 + synchronizable: true + title: title + traceback: traceback + type: type + use_blob_urls: true + verify_tls: true + volume: volume + audiences: + - public + delete: + path: /api/storages/databricks/{id} + method: DELETE + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific Databricks Files import storage connection. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Delete Databricks import storage + examples: + - path-parameters: + id: 1 + audiences: + - public + update: + path: /api/storages/databricks/{id} + method: PATCH + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific Databricks Files import storage connection. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Update Databricks import storage + request: + name: PatchedDatabricksImportStorageRequest + body: + properties: + catalog: + type: optional + docs: UC catalog name + validation: + minLength: 1 + description: + type: optional + docs: Cloud storage description + host: + type: optional + docs: Databricks workspace base URL (https://...) + validation: + minLength: 1 + last_sync: + type: optional + docs: Last sync finished time + last_sync_count: + type: optional + docs: Count of tasks synced last time + validation: + min: 0 + max: 2147483647 + last_sync_job: + type: optional + docs: Last sync job ID + validation: + maxLength: 256 + meta: optional + prefix: + type: optional + docs: Path under the volume + presign: + type: optional + docs: Presign not supported; always proxied + presign_ttl: + type: optional + docs: Unused for Databricks; kept for compatibility + validation: + min: 0 + max: 32767 + project: + type: optional + docs: A unique integer value identifying this project. + recursive_scan: + type: optional + docs: Perform recursive scan + regex_filter: + type: optional + docs: Regex for filtering objects + request_timeout_s: + type: optional + validation: + min: 0 + max: 2147483647 + schema: + type: optional + docs: UC schema name + validation: + minLength: 1 + status: optional + stream_chunk_bytes: + type: optional + validation: + min: 0 + max: 2147483647 + synchronizable: + type: optional + default: true + title: + type: optional + docs: Cloud storage title + validation: + maxLength: 256 + token: optional + traceback: + type: optional + docs: Traceback report for the last failed sync + use_blob_urls: + type: optional + docs: Generate blob URLs in tasks + verify_tls: + type: optional + docs: Verify TLS certificates + volume: + type: optional + docs: UC volume name + validation: + minLength: 1 + content-type: application/json + response: + docs: '' + type: root.DatabricksImportStorage + examples: + - path-parameters: + id: 1 + request: {} + response: + body: + catalog: catalog + created_at: '2024-01-15T09:30:00Z' + description: description + host: host + id: 1 + last_sync: '2024-01-15T09:30:00Z' + last_sync_count: 1 + last_sync_job: last_sync_job + meta: + key: value + prefix: prefix + presign: true + presign_ttl: 1 + project: 1 + recursive_scan: true + regex_filter: regex_filter + request_timeout_s: 1 + schema: schema + status: initialized + stream_chunk_bytes: 1 + synchronizable: true + title: title + traceback: traceback + type: type + use_blob_urls: true + verify_tls: true + volume: volume + audiences: + - public + sync: + path: /api/storages/databricks/{id}/sync + method: POST + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Sync tasks from a Databricks Files import storage. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Sync Databricks import storage + response: + docs: '' + type: root.DatabricksImportStorage + examples: + - path-parameters: + id: 1 + response: + body: + catalog: catalog + created_at: '2024-01-15T09:30:00Z' + description: description + host: host + id: 1 + last_sync: '2024-01-15T09:30:00Z' + last_sync_count: 1 + last_sync_job: last_sync_job + meta: + key: value + prefix: prefix + presign: true + presign_ttl: 1 + project: 1 + recursive_scan: true + regex_filter: regex_filter + request_timeout_s: 1 + schema: schema + status: initialized + stream_chunk_bytes: 1 + synchronizable: true + title: title + traceback: traceback + type: type + use_blob_urls: true + verify_tls: true + volume: volume + audiences: + - public + source: + openapi: openapi/openapi.yaml diff --git a/.mock/definition/importStorage/gcs.yml b/.mock/definition/importStorage/gcs.yml index 088f6a655..735cb56a0 100644 --- a/.mock/definition/importStorage/gcs.yml +++ b/.mock/definition/importStorage/gcs.yml @@ -19,13 +19,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - bucket: bucket created_at: '2024-01-15T09:30:00Z' @@ -42,6 +44,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -133,6 +136,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -242,6 +246,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -352,6 +357,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -396,6 +402,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true diff --git a/.mock/definition/importStorage/gcswif.yml b/.mock/definition/importStorage/gcswif.yml index 39e1762b3..7c60350f6 100644 --- a/.mock/definition/importStorage/gcswif.yml +++ b/.mock/definition/importStorage/gcswif.yml @@ -9,11 +9,17 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get list of all GCS import storage connections set up with WIF authentication. source: openapi: openapi/openapi.yaml - display-name: Get GCS WIF import storage + display-name: ✨ Get GCS WIF import storage request: name: GcswifListRequest query-parameters: @@ -21,13 +27,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - bucket: bucket created_at: '2024-01-15T09:30:00Z' @@ -48,6 +56,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -61,10 +70,17 @@ service: path: /api/storages/gcswif/ method: POST auth: true - docs: Create GCS import storage with WIF. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create GCS import storage with WIF. source: openapi: openapi/openapi.yaml - display-name: Create GCS import storage with WIF + display-name: ✨ Create GCS import storage with WIF request: body: root.GcswifImportStorageRequest content-type: application/json @@ -95,6 +111,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -109,11 +126,17 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific GCS import storage connection that was set up with WIF authentication. source: openapi: openapi/openapi.yaml - display-name: Validate GCS WIF import storage + display-name: ✨ Validate GCS WIF import storage request: body: root.GcswifImportStorageRequest content-type: application/json @@ -126,12 +149,19 @@ service: path: /api/storages/gcswif/{id} method: GET auth: true - docs: Get a specific GCS import storage connection that was set up with WIF. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific GCS import storage connection that was set up with WIF. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get GCS WIF import storage + display-name: ✨ Get GCS WIF import storage response: docs: '' type: root.GcswifImportStorage @@ -159,6 +189,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -173,13 +204,19 @@ service: method: DELETE auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific GCS import storage connection that was set up with WIF authentication. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Delete GCS WIF import storage + display-name: ✨ Delete GCS WIF import storage examples: - path-parameters: id: 1 @@ -190,13 +227,19 @@ service: method: PATCH auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific GCS import storage connection that was set up with WIF authentication. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Update GCS WIF import storage + display-name: ✨ Update GCS WIF import storage request: name: PatchedGcswifImportStorageRequest body: @@ -255,6 +298,9 @@ service: project: type: optional docs: A unique integer value identifying this project. + recursive_scan: + type: optional + docs: Perform recursive scan over the bucket content regex_filter: type: optional docs: Cloud storage regex for filtering objects @@ -302,6 +348,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -316,13 +363,19 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an GCS import storage connection that was set up with WIF authentication. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Sync GCS WIF import storage + display-name: ✨ Sync GCS WIF import storage response: docs: '' type: root.GcswifImportStorage @@ -350,6 +403,7 @@ service: presign: true presign_ttl: 1 project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true diff --git a/.mock/definition/importStorage/local.yml b/.mock/definition/importStorage/local.yml index 0eb37cbed..274fd3694 100644 --- a/.mock/definition/importStorage/local.yml +++ b/.mock/definition/importStorage/local.yml @@ -19,13 +19,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - created_at: '2024-01-15T09:30:00Z' description: description @@ -37,6 +39,7 @@ service: key: value path: path project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -101,6 +104,7 @@ service: key: value path: path project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -183,6 +187,7 @@ service: key: value path: path project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -266,6 +271,7 @@ service: key: value path: path project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true @@ -305,6 +311,7 @@ service: key: value path: path project: 1 + recursive_scan: true regex_filter: regex_filter status: initialized synchronizable: true diff --git a/.mock/definition/importStorage/redis.yml b/.mock/definition/importStorage/redis.yml index 02d5a0e59..b0697a79c 100644 --- a/.mock/definition/importStorage/redis.yml +++ b/.mock/definition/importStorage/redis.yml @@ -19,13 +19,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - created_at: '2024-01-15T09:30:00Z' db: 1 diff --git a/.mock/definition/importStorage/s3.yml b/.mock/definition/importStorage/s3.yml index de67ea85b..9db70e7f4 100644 --- a/.mock/definition/importStorage/s3.yml +++ b/.mock/definition/importStorage/s3.yml @@ -19,13 +19,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - aws_access_key_id: aws_access_key_id aws_secret_access_key: aws_secret_access_key diff --git a/.mock/definition/importStorage/s3S.yml b/.mock/definition/importStorage/s3S.yml index f11ecbdf2..e8c3afdce 100644 --- a/.mock/definition/importStorage/s3S.yml +++ b/.mock/definition/importStorage/s3S.yml @@ -9,11 +9,17 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get list of all S3 import storage connections set up with IAM role access. source: openapi: openapi/openapi.yaml - display-name: List S3s import storage + display-name: ✨ List S3s import storage request: name: S3SListRequest query-parameters: @@ -21,13 +27,15 @@ service: type: optional docs: Which field to use when ordering the results. project: - type: optional + type: integer docs: Project ID response: docs: '' type: list examples: - - response: + - query-parameters: + project: 1 + response: body: - aws_access_key_id: aws_access_key_id aws_secret_access_key: aws_secret_access_key @@ -65,10 +73,17 @@ service: path: /api/storages/s3s/ method: POST auth: true - docs: Create S3 import storage with IAM role access. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create S3 import storage with IAM role access. source: openapi: openapi/openapi.yaml - display-name: Create import storage + display-name: ✨ Create import storage request: body: root.LseS3ImportStorageRequest content-type: application/json @@ -118,11 +133,17 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific S3 import storage connection that was set up with IAM role access. source: openapi: openapi/openapi.yaml - display-name: Validate import storage + display-name: ✨ Validate import storage request: body: root.LseS3ImportStorageRequest content-type: application/json @@ -137,13 +158,19 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific S3 import storage connection that was set up with IAM role access. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get import storage + display-name: ✨ Get import storage response: docs: '' type: root.LseS3ImportStorage @@ -189,13 +216,19 @@ service: method: DELETE auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific S3 import storage connection that was set up with IAM role access. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Delete import storage + display-name: ✨ Delete import storage examples: - path-parameters: id: 1 @@ -206,13 +239,19 @@ service: method: PATCH auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific S3 import storage connection that was set up with IAM role access. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Update import storage + display-name: ✨ Update import storage request: name: PatchedLseS3ImportStorageRequest body: @@ -348,13 +387,19 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an S3 import storage connection that was set up with IAM role access. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Sync import storage + display-name: ✨ Sync import storage response: docs: '' type: root.LseS3ImportStorage diff --git a/.mock/definition/ml.yml b/.mock/definition/ml.yml index b3d16dc37..708055eab 100644 --- a/.mock/definition/ml.yml +++ b/.mock/definition/ml.yml @@ -314,7 +314,12 @@ service: method: POST auth: true docs: >- - Note: not available in the community edition of Label Studio. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create predictions for all tasks using a specific ML backend so that you @@ -337,7 +342,7 @@ service: id: type: integer docs: A unique integer value identifying this ML backend. - display-name: Create predictions for all tasks + display-name: ✨ Create predictions for all tasks request: name: MlPredictAllTasksRequest query-parameters: diff --git a/.mock/definition/modelProviderConnection.yml b/.mock/definition/modelProviderConnection.yml index d09b32f2d..f295a9aef 100644 --- a/.mock/definition/modelProviderConnection.yml +++ b/.mock/definition/modelProviderConnection.yml @@ -8,12 +8,19 @@ service: path: /api/model-provider-connections/{id}/ method: PUT auth: true - docs: Overwrite a specific model provider connection by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overwrite a specific model provider connection by ID. source: openapi: openapi/openapi.yaml path-parameters: id: string - display-name: Put model provider connection + display-name: ✨ Put model provider connection request: body: root.ModelProviderConnectionRequest content-type: application/json diff --git a/.mock/definition/modelProviders.yml b/.mock/definition/modelProviders.yml index c4bf1ae32..3c0f2f699 100644 --- a/.mock/definition/modelProviders.yml +++ b/.mock/definition/modelProviders.yml @@ -8,10 +8,17 @@ service: path: /api/model-provider-connections/ method: GET auth: true - docs: List all model provider connections. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all model provider connections. source: openapi: openapi/openapi.yaml - display-name: List model provider connections + display-name: ✨ List model provider connections request: name: ModelProvidersListRequest query-parameters: @@ -54,10 +61,17 @@ service: path: /api/model-provider-connections/ method: POST auth: true - docs: Create a new model provider connection. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new model provider connection. source: openapi: openapi/openapi.yaml - display-name: Create model provider connection + display-name: ✨ Create model provider connection request: body: root.ModelProviderConnectionRequest content-type: application/json @@ -98,10 +112,17 @@ service: path: /api/model-provider-connections/provider-choices method: GET auth: true - docs: List all possible model provider choices + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all possible model provider choices source: openapi: openapi/openapi.yaml - display-name: List model provider choices + display-name: ✨ List model provider choices response: docs: List of model provider choices type: ModelProvidersListModelProviderChoicesResponse @@ -116,12 +137,19 @@ service: path: /api/model-provider-connections/{id}/ method: GET auth: true - docs: Retrieve a specific model provider connection. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a specific model provider connection. source: openapi: openapi/openapi.yaml path-parameters: id: string - display-name: Get model provider connection + display-name: ✨ Get model provider connection response: docs: '' type: root.ModelProviderConnection @@ -160,12 +188,19 @@ service: path: /api/model-provider-connections/{id}/ method: DELETE auth: true - docs: Delete a model provider connection by ID + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a model provider connection by ID source: openapi: openapi/openapi.yaml path-parameters: id: string - display-name: Delete model provider connection + display-name: ✨ Delete model provider connection examples: - path-parameters: id: id @@ -175,12 +210,19 @@ service: path: /api/model-provider-connections/{id}/ method: PATCH auth: true - docs: Update a specific model provider connection by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific model provider connection by ID. source: openapi: openapi/openapi.yaml path-parameters: id: string - display-name: Update model provider connection + display-name: ✨ Update model provider connection request: name: PatchedModelProviderConnectionRequest body: diff --git a/.mock/definition/organizations.yml b/.mock/definition/organizations.yml index 59cba9e71..96e0c2acc 100644 --- a/.mock/definition/organizations.yml +++ b/.mock/definition/organizations.yml @@ -75,7 +75,6 @@ service: manual_role_management: manual_role_management manual_workspace_management: manual_workspace_management created_at: '2024-01-15T09:30:00Z' - custom_scripts_editable_by: AD custom_scripts_enabled: custom_scripts_enabled default_role: OW email_notification_settings: email_notification_settings @@ -94,13 +93,19 @@ service: method: PATCH auth: true docs: >- - Update organization details including title, embed domains, and custom - scripts settings. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update organization details including title, embed domains, and Plugins + settings. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Update organization + display-name: ✨ Update organization request: name: PatchedLseOrganizationSerializerUpdateRequest body: @@ -111,10 +116,6 @@ service: format: email maxLength: 254 created_by: optional - custom_scripts_editable_by: - type: optional - validation: - minLength: 1 custom_scripts_enabled: optional email_notification_settings: optional embed_domains: optional>> @@ -145,7 +146,6 @@ service: manual_role_management: manual_role_management manual_workspace_management: manual_workspace_management created_at: '2024-01-15T09:30:00Z' - custom_scripts_editable_by: AD custom_scripts_enabled: custom_scripts_enabled default_role: OW email_notification_settings: email_notification_settings @@ -163,12 +163,19 @@ service: path: /api/organizations/{id}/set-default-role method: PATCH auth: true - docs: Update the default role for members of a specific organization. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update the default role for members of a specific organization. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Update default role + display-name: ✨ Update default role request: name: PatchedDefaultRoleRequest body: @@ -181,26 +188,16 @@ service: notifications (which will be disabled). In these settings, information about annotator and reviewer identity is suppressed in the UI. - custom_scripts_editable_by: - type: optional - docs: >- - Set the minimum user role that can edit custom scripts in the - UI. - - - * `AD` - Administrator - - * `MA` - Manager custom_scripts_enabled_at: type: optional docs: >- - Set to current time to enabled custom scripts for this + Set to current time to enable custom scripts (Plugins) for this organization. Can only be enabled if no organization members are active members of any other organizations; otherwise an error will be raised. If this occurs, contact the LEAP team for - assistance with enabling custom scripts. + assistance with enabling custom scripts (Plugins). default_role: - type: optional + type: optional docs: |- Default membership role for invited users @@ -243,7 +240,6 @@ service: response: body: annotator_reviewer_firewall_enabled_at: '2024-01-15T09:30:00Z' - custom_scripts_editable_by: AD custom_scripts_enabled_at: '2024-01-15T09:30:00Z' default_role: OW email_notification_settings: @@ -261,17 +257,3 @@ service: - public source: openapi: openapi/openapi.yaml -types: - PatchedDefaultRoleRequestCustomScriptsEditableBy: - discriminated: false - docs: |- - Set the minimum user role that can edit custom scripts in the UI. - - * `AD` - Administrator - * `MA` - Manager - union: - - root.CustomScriptsEditableByEnum - - root.NullEnum - source: - openapi: openapi/openapi.yaml - inline: true diff --git a/.mock/definition/organizations/invites.yml b/.mock/definition/organizations/invites.yml index 8d36c3da1..53fcfed96 100644 --- a/.mock/definition/organizations/invites.yml +++ b/.mock/definition/organizations/invites.yml @@ -28,10 +28,17 @@ service: path: /api/invite/revoke method: POST auth: true - docs: Revoke invite to organization + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Revoke invite to organization source: openapi: openapi/openapi.yaml - display-name: Revoke invite + display-name: ✨ Revoke invite request: name: RevokeInviteRequest body: @@ -50,19 +57,25 @@ service: path: /api/invite/send-email method: POST auth: true - docs: Send email with invite to organization + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Send email with invite to organization source: openapi: openapi/openapi.yaml - display-name: Send email with invite + display-name: ✨ Send email with invite request: name: SendInviteRequest body: properties: emails: list - role: - type: string - validation: - minLength: 1 + projects: optional> + role: root.Role9E7Enum + workspaces: optional> content-type: application/json errors: - root.ForbiddenError @@ -70,7 +83,7 @@ service: - request: emails: - emails - role: role + role: OW audiences: - public source: diff --git a/.mock/definition/organizations/members.yml b/.mock/definition/organizations/members.yml index 0857be759..b4ad208f9 100644 --- a/.mock/definition/organizations/members.yml +++ b/.mock/definition/organizations/members.yml @@ -8,14 +8,21 @@ service: path: /api/organizations/{id}/memberships method: GET auth: true - docs: Retrieve a list of all users and roles in a specific organization. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a list of all users and roles in a specific organization. source: openapi: openapi/openapi.yaml path-parameters: id: type: integer docs: A unique integer value identifying this organization. - display-name: Get organization members/roles + display-name: ✨ Get organization members/roles request: name: MembersListRequest query-parameters: @@ -78,6 +85,12 @@ service: method: PATCH auth: true docs: >+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update organization membership or role for a specific user ID. @@ -118,7 +131,7 @@ service: id: type: integer docs: A unique integer value identifying this organization. - display-name: Update organization member/role + display-name: ✨ Update organization member/role request: name: PatchedOrganizationMemberCreateUpdateRequest body: diff --git a/.mock/definition/organizations/permissions.yml b/.mock/definition/organizations/permissions.yml new file mode 100644 index 000000000..21c40ad1b --- /dev/null +++ b/.mock/definition/organizations/permissions.yml @@ -0,0 +1,332 @@ +imports: + root: ../__package__.yml +service: + auth: false + base-path: '' + endpoints: + list: + path: /api/organizations/{id}/permissions + method: GET + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all organization-level permission overrides for a given + organization. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ List organization permission overrides + request: + name: PermissionsListRequest + query-parameters: + ordering: + type: optional + docs: Which field to use when ordering the results. + response: + docs: '' + type: list + examples: + - path-parameters: + id: 1 + response: + body: + - default: + - OW + group: group + id: 1 + label: label + options: + - OW + organization: 1 + permission: permission + roles: + - OW + tooltip: tooltip + audiences: + - public + create: + path: /api/organizations/{id}/permissions + method: POST + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new organization-level permission override for a given + organization. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Create organization permission override + request: + body: root.OrganizationPermissionRequest + content-type: application/json + response: + docs: '' + type: root.OrganizationPermission + errors: + - root.BadRequestError + - root.ForbiddenError + examples: + - path-parameters: + id: 1 + request: + permission: permission + response: + body: + default: + - OW + group: group + id: 1 + label: label + options: + - OW + organization: 1 + permission: permission + roles: + - OW + tooltip: tooltip + audiences: + - public + get_options: + path: /api/organizations/{id}/permissions/options + method: GET + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve the list of configurable permission options (label, tooltip, + default role and allowed roles). + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Get configurable permissions options + request: + name: PermissionsGetOptionsRequest + query-parameters: + ordering: + type: optional + docs: Which field to use when ordering the results. + response: + docs: '' + type: list + examples: + - path-parameters: + id: 1 + response: + body: + - default: + - OW + group: group + label: label + options: + - OW + permission: permission + tooltip: tooltip + audiences: + - public + get: + path: /api/organizations/{id}/permissions/{permission} + method: GET + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve the organization-level permission override for a given + permission key. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + permission: string + display-name: ✨ Retrieve organization permission override + response: + docs: '' + type: root.OrganizationPermission + errors: + - root.ForbiddenError + - root.NotFoundError + examples: + - path-parameters: + id: 1 + permission: permission + response: + body: + default: + - OW + group: group + id: 1 + label: label + options: + - OW + organization: 1 + permission: permission + roles: + - OW + tooltip: tooltip + audiences: + - public + replace: + path: /api/organizations/{id}/permissions/{permission} + method: PUT + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Replace the organization-level permission override for a given + permission key. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: + type: integer + docs: A unique integer value identifying this organization. + permission: + type: string + docs: Permission key to update within the organization. + display-name: ✨ Replace organization permission override + request: + body: root.OrganizationPermissionRequest + content-type: application/json + response: + docs: '' + type: root.OrganizationPermission + errors: + - root.BadRequestError + - root.ForbiddenError + - root.NotFoundError + examples: + - path-parameters: + id: 1 + permission: permission + request: + permission: permission + response: + body: + default: + - OW + group: group + id: 1 + label: label + options: + - OW + organization: 1 + permission: permission + roles: + - OW + tooltip: tooltip + audiences: + - public + delete: + path: /api/organizations/{id}/permissions/{permission} + method: DELETE + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete the organization-level permission override for a given permission + key. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + permission: string + display-name: ✨ Delete organization permission override + errors: + - root.ForbiddenError + - root.NotFoundError + examples: + - path-parameters: + id: 1 + permission: permission + audiences: + - public + update: + path: /api/organizations/{id}/permissions/{permission} + method: PATCH + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Partially update the organization-level permission override for a given + permission key. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + permission: string + display-name: ✨ Update organization permission override + request: + name: PatchedOrganizationPermissionRequest + body: + properties: + permission: + type: optional + name: patchedOrganizationPermissionRequestPermission + roles: + type: optional> + docs: >- + Explicit roles that have this permission within the + organization. + content-type: application/json + response: + docs: '' + type: root.OrganizationPermission + errors: + - root.BadRequestError + - root.ForbiddenError + - root.NotFoundError + examples: + - path-parameters: + id: 1 + permission: permission + request: {} + response: + body: + default: + - OW + group: group + id: 1 + label: label + options: + - OW + organization: 1 + permission: permission + roles: + - OW + tooltip: tooltip + audiences: + - public + source: + openapi: openapi/openapi.yaml diff --git a/.mock/definition/pauses.yml b/.mock/definition/pauses.yml index a7ab6b91c..5f44a2ab6 100644 --- a/.mock/definition/pauses.yml +++ b/.mock/definition/pauses.yml @@ -8,14 +8,21 @@ service: path: /api/projects/{project_pk}/members/{user_pk}/pauses/{id}/ method: PUT auth: true - docs: Overwrite a pause entry by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overwrite a pause entry by ID. source: openapi: openapi/openapi.yaml path-parameters: id: string project_pk: integer user_pk: integer - display-name: Put pause + display-name: ✨ Put pause request: body: root.PauseRequest content-type: application/json diff --git a/.mock/definition/projectTemplates.yml b/.mock/definition/projectTemplates.yml index 3f83a55b7..586c1bd1c 100644 --- a/.mock/definition/projectTemplates.yml +++ b/.mock/definition/projectTemplates.yml @@ -8,10 +8,17 @@ service: path: /api/project-templates/ method: GET auth: true - docs: Get a list of all project templates for an organization. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a list of all project templates for an organization. source: openapi: openapi/openapi.yaml - display-name: Get project templates + display-name: ✨ Get project templates request: name: ProjectTemplatesListRequest query-parameters: @@ -48,10 +55,17 @@ service: path: /api/project-templates/ method: POST auth: true - docs: Create a project template for an organization. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a project template for an organization. source: openapi: openapi/openapi.yaml - display-name: Create project template + display-name: ✨ Create project template request: body: root.ProjectTemplateRequest content-type: application/json @@ -88,12 +102,19 @@ service: path: /api/project-templates/{id} method: GET auth: true - docs: Get a specific project template by ID for an organization. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific project template by ID for an organization. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get a project template + display-name: ✨ Get a project template response: docs: '' type: root.ProjectTemplate @@ -126,12 +147,19 @@ service: path: /api/project-templates/{id} method: PUT auth: true - docs: Overwrite a specific project template by ID for an organization. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overwrite a specific project template by ID for an organization. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Overwrite a project template + display-name: ✨ Overwrite a project template request: body: root.ProjectTemplateRequest content-type: application/json @@ -170,12 +198,19 @@ service: path: /api/project-templates/{id} method: DELETE auth: true - docs: Delete a specific project template by ID for an organization. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific project template by ID for an organization. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Delete a project template + display-name: ✨ Delete a project template examples: - path-parameters: id: 1 @@ -186,13 +221,19 @@ service: method: PATCH auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update the details of a specific project template by ID for an organization. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Update a project template + display-name: ✨ Update a project template request: name: PatchedProjectTemplateRequest body: @@ -201,7 +242,7 @@ service: created_by: optional custom_script: type: optional - docs: custom script for projects created from this template + docs: custom script (Plugin) for projects created from this template validation: minLength: 1 description: @@ -257,13 +298,19 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a project from a specific project template by ID for an organization. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Create project from template + display-name: ✨ Create project from template request: name: ProjectTemplatesCreateProjectFromTemplateRequest body: @@ -291,6 +338,7 @@ service: workspace_id: 1 response: body: + agreement_threshold: agreement_threshold annotation_limit_count: 1 annotation_limit_percent: annotation_limit_percent annotator_evaluation_minimum_score: annotator_evaluation_minimum_score @@ -328,6 +376,7 @@ service: is_draft: true is_published: true label_config: label_config + max_additional_annotators_assignable: 1 maximum_annotations: 1 members: members members_count: 1 @@ -357,6 +406,8 @@ service: require_comment_on_reject: true review_criteria: all review_only_manual_assignments: true + review_task_limit_percent: review_task_limit_percent + sampling: task_id show_agreement_to_reviewers: true show_data_manager_to_reviewers: true show_instruction: true diff --git a/.mock/definition/projects.yml b/.mock/definition/projects.yml index 41652e2b8..baee73f38 100644 --- a/.mock/definition/projects.yml +++ b/.mock/definition/projects.yml @@ -1,101 +1,3 @@ -types: - ProjectsListRequestFilter: - enum: - - all - - exclude_pinned - - pinned_only - source: - openapi: openapi/openapi.yaml - LseProjectCreateRequestSampling: - discriminated: false - union: - - root.SamplingEnum - - root.NullEnum - source: - openapi: openapi/openapi.yaml - inline: true - LseProjectCreateRequestSkipQueue: - discriminated: false - union: - - root.SkipQueueEnum - - root.NullEnum - source: - openapi: openapi/openapi.yaml - inline: true - PatchedLseProjectUpdateRequestSampling: - discriminated: false - union: - - root.SamplingEnum - - root.NullEnum - source: - openapi: openapi/openapi.yaml - inline: true - PatchedLseProjectUpdateRequestSkipQueue: - discriminated: false - union: - - root.SkipQueueEnum - - root.NullEnum - source: - openapi: openapi/openapi.yaml - inline: true - ProjectsDuplicateResponse: - properties: - id: - type: integer - docs: The ID of the duplicated project. - source: - openapi: openapi/openapi.yaml - ProjectsImportTasksResponse: - docs: Task creation response - properties: - annotation_count: - type: optional - docs: Number of annotations added - could_be_tasks_list: - type: optional - docs: Whether uploaded files can contain lists of tasks, like CSV/TSV files - data_columns: - type: optional> - docs: The list of found data columns - duration: - type: optional - docs: Time in seconds to create - file_upload_ids: - type: optional> - docs: Database IDs of uploaded files - found_formats: - type: optional> - docs: The list of found file formats - predictions_count: - type: optional - docs: Number of predictions added - task_count: - type: optional - docs: Number of tasks added - source: - openapi: openapi/openapi.yaml - ApiProjectsProjectExtraParamsRetrieveResponse: - docs: Create or change annotator weights for statistics - properties: - annotator_params: - type: optional>> - docs: Dict of users with weights - use_kappa: - type: optional - docs: If project uses Cohen's Kappa in calculation - source: - openapi: openapi/openapi.yaml - ApiProjectsProjectExtraParamsCreateResponse: - docs: Create or change annotator weights for statistics - properties: - annotator_params: - type: optional>> - docs: Dict of users with weights - use_kappa: - type: optional - docs: If project uses Cohen's Kappa in calculation - source: - openapi: openapi/openapi.yaml imports: root: __package__.yml service: @@ -117,14 +19,15 @@ service: name: ProjectsListRequest query-parameters: filter: - type: optional + type: optional + default: all docs: >- Filter projects by pinned status. Use 'pinned_only' to return only pinned projects, 'exclude_pinned' to return only non-pinned projects, or 'all' to return all projects. ids: type: optional - docs: ids + docs: Filter id by in list include: type: optional docs: >- @@ -138,7 +41,7 @@ service: members_limit: type: optional default: 10 - docs: Maximum number of members to return. + docs: Maximum number of members to return ordering: type: optional docs: Which field to use when ordering the results. @@ -148,12 +51,15 @@ service: page_size: type: optional docs: Number of results to return per page. + search: + type: optional + docs: Search term for project title and description title: type: optional - docs: title + docs: Filter title by contains (case-insensitive) workspaces: - type: optional - docs: workspaces + type: optional + docs: Filter workspaces by exact match response: docs: '' type: root.PaginatedAllRolesProjectListList @@ -164,7 +70,8 @@ service: next: http://api.example.org/accounts/?page=4 previous: http://api.example.org/accounts/?page=2 results: - - allow_stream: allow_stream + - agreement_threshold: agreement_threshold + allow_stream: true annotation_limit_count: 1 annotation_limit_percent: annotation_limit_percent annotator_evaluation_minimum_score: annotator_evaluation_minimum_score @@ -203,12 +110,13 @@ service: is_draft: true is_published: true label_config: label_config + max_additional_annotators_assignable: 1 maximum_annotations: 1 members: members members_count: 1 min_annotations_to_start_training: 1 model_version: model_version - num_tasks_with_annotations: num_tasks_with_annotations + num_tasks_with_annotations: 1 organization: 1 overlap_cohort_percentage: 1 parsed_label_config: @@ -216,19 +124,19 @@ service: pause_on_failed_annotator_evaluation: true pinned_at: '2024-01-15T09:30:00Z' prompts: prompts - queue_done: queue_done - queue_left: queue_left + queue_done: 1 + queue_left: 1 queue_total: queue_total - ready: ready - rejected: rejected + ready: true + rejected: 1 require_comment_on_skip: true reveal_preannotations_interactively: true review_settings: id: 1 requeue_rejected_tasks_to_annotator: true - review_total_tasks: review_total_tasks - reviewed_number: reviewed_number - reviewer_queue_total: reviewer_queue_total + review_total_tasks: 1 + reviewed_number: 1 + reviewer_queue_total: 1 sampling: Sequential sampling show_annotation_history: true show_collab_predictions: true @@ -244,7 +152,7 @@ service: title: title total_annotations_number: total_annotations_number total_predictions_number: 1 - useful_annotation_number: useful_annotation_number + useful_annotation_number: 1 workspace: workspace workspace_title: workspace_title audiences: @@ -329,7 +237,11 @@ service: show_collab_predictions: type: optional docs: If set, the annotator can view model predictions - show_ground_truth_first: optional + show_ground_truth_first: + type: optional + docs: >- + Onboarding mode (true): show ground truth tasks first in the + labeling stream show_instruction: type: optional docs: Show instructions to the annotator before they start @@ -419,7 +331,7 @@ service: workspace: 1 audiences: - public - api_projects_counts_list: + list_counts: path: /api/projects/counts/ method: GET auth: true @@ -428,10 +340,30 @@ service: which is the total task number in project source: openapi: openapi/openapi.yaml - display-name: List project's counts + display-name: List projects' counts request: - name: ApiProjectsCountsListRequest + name: ProjectsListCountsRequest query-parameters: + filter: + type: optional + default: all + docs: >- + Filter projects by pinned status. Use 'pinned_only' to return only + pinned projects, 'exclude_pinned' to return only non-pinned + projects, or 'all' to return all projects. + ids: + type: optional + docs: Filter id by in list + include: + type: optional + docs: >- + Comma-separated list of count fields to include in the response to + optimize performance. Available fields: task_number, + finished_task_number, total_predictions_number, + total_annotations_number, num_tasks_with_annotations, + useful_annotation_number, ground_truth_number, + skipped_annotations_number. If not specified, all count fields are + included. ordering: type: optional docs: Which field to use when ordering the results. @@ -441,6 +373,15 @@ service: page_size: type: optional docs: Number of results to return per page. + search: + type: optional + docs: Search term for project title and description + title: + type: optional + docs: Filter title by contains (case-insensitive) + workspaces: + type: optional + docs: Filter workspaces by exact match response: docs: '' type: root.PaginatedLseProjectCountsList @@ -454,18 +395,20 @@ service: - finished_task_number: 1 ground_truth_number: 1 id: 1 - num_tasks_with_annotations: num_tasks_with_annotations - queue_done: queue_done - queue_left: queue_left + num_tasks_with_annotations: 1 + queue_done: 1 + queue_left: 1 queue_total: queue_total - rejected: rejected - review_total_tasks: review_total_tasks - reviewed_number: reviewed_number + rejected: 1 + review_total_tasks: 1 + reviewed_number: 1 skipped_annotations_number: skipped_annotations_number task_number: 1 total_annotations_number: total_annotations_number total_predictions_number: 1 - useful_annotation_number: useful_annotation_number + useful_annotation_number: 1 + audiences: + - public api_projects_validate_create: path: /api/projects/validate/ method: POST @@ -494,47 +437,101 @@ service: path-parameters: id: integer display-name: Get project by ID + request: + name: ProjectsGetRequest + query-parameters: + members_limit: + type: optional + default: 10 + docs: Maximum number of members to return response: - docs: Project information - type: root.Project + docs: Project information. Not all fields are available for all roles. + type: root.LseProjectResponse examples: - - name: response - path-parameters: + - path-parameters: id: 1 response: body: - color: '#FF0000' + agreement_threshold: agreement_threshold + allow_stream: true + annotation_limit_count: 1 + annotation_limit_percent: annotation_limit_percent + annotator_evaluation_minimum_score: annotator_evaluation_minimum_score + annotator_evaluation_minimum_tasks: 1 + assignment_settings: + id: 1 + label_stream_task_distribution: auto_distribution + project: 1 + color: color + comment_classification_config: comment_classification_config config_has_control_tags: true config_suitable_for_bulk_annotation: true - control_weights: {} - created_at: '2023-08-24T14:15:22Z' + control_weights: + key: value + created_at: '2024-01-15T09:30:00Z' created_by: avatar: avatar - email: manager@humansignal.com - first_name: Jo + email: email + first_name: first_name id: 1 - last_name: Doe - description: My first project + last_name: last_name + custom_script: custom_script + custom_task_lock_ttl: 1 + data_types: + key: value + description: description + duplication_done: true + duplication_status: duplication_status enable_empty_annotation: true - evaluate_predictions_automatically: false - expert_instruction: Label all cats - finished_task_number: 10 - ground_truth_number: 5 + evaluate_predictions_automatically: true + expert_instruction: expert_instruction + finished_task_number: 1 + ground_truth_number: 1 id: 1 - is_draft: false + is_draft: true is_published: true - label_config: [...] + label_config: label_config + max_additional_annotators_assignable: 1 maximum_annotations: 1 - min_annotations_to_start_training: 0 - model_version: 1.0.0 - num_tasks_with_annotations: 10 + members: members + members_count: 1 + min_annotations_to_start_training: 1 + model_version: model_version + num_tasks_with_annotations: 1 organization: 1 - overlap_cohort_percentage: 100 - parsed_label_config: '{"tag": {...}}' - pinned_at: '2023-08-24T14:15:22Z' - queue_done: 100 - queue_total: 10 + overlap_cohort_percentage: 1 + parsed_label_config: + key: value + pause_on_failed_annotator_evaluation: true + pinned_at: '2024-01-15T09:30:00Z' + prompts: prompts + queue_done: 1 + queue_left: 1 + queue_total: 1 + ready: true + rejected: 1 + require_comment_on_skip: true reveal_preannotations_interactively: true + review_settings: + anonymize_annotations: true + id: 1 + instruction: instruction + only_finished_tasks: true + project: 1 + requeue_rejected_tasks_mode: requeue + requeue_rejected_tasks_to_annotator: true + require_comment_on_reject: true + review_criteria: all + review_only_manual_assignments: true + review_task_limit_percent: review_task_limit_percent + sampling: task_id + show_agreement_to_reviewers: true + show_data_manager_to_reviewers: true + show_instruction: true + show_unused_data_columns_to_reviewers: true + review_total_tasks: 1 + reviewed_number: 1 + reviewer_queue_total: 1 sampling: Sequential sampling show_annotation_history: true show_collab_predictions: true @@ -542,16 +539,19 @@ service: show_instruction: true show_overlap_first: true show_skip_button: true + show_unused_data_columns_to_annotators: true skip_queue: REQUEUE_FOR_ME - skipped_annotations_number: 0 + skipped_annotations_number: 1 start_training_on_annotation_update: true - task_data_login: user - task_data_password: secret - task_number: 100 - title: My project - total_annotations_number: 10 - total_predictions_number: 0 - useful_annotation_number: 10 + task_data_login: task_data_login + task_data_password: task_data_password + task_number: 1 + title: title + total_annotations_number: 1 + total_predictions_number: 1 + useful_annotation_number: 1 + workspace: workspace + workspace_title: workspace_title audiences: - public delete: @@ -581,8 +581,20 @@ service: display-name: Update project details request: name: PatchedLseProjectUpdateRequest + query-parameters: + members_limit: + type: optional + default: 10 + docs: Maximum number of members to return body: properties: + agreement_threshold: + type: optional + docs: >- + Minimum percent agreement threshold for which minimum number of + annotators must agree + validation: + pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ annotation_limit_count: type: optional validation: @@ -639,6 +651,11 @@ service: label_config: type: optional docs: Label config in XML format. See more about it in documentation + max_additional_annotators_assignable: + type: optional + docs: >- + Maximum number of additional annotators that can be assigned to + a low agreement task maximum_annotations: type: optional docs: >- @@ -685,7 +702,11 @@ service: show_collab_predictions: type: optional docs: If set, the annotator can view model predictions - show_ground_truth_first: optional + show_ground_truth_first: + type: optional + docs: >- + Onboarding mode (true): show ground truth tasks first in the + labeling stream show_instruction: type: optional docs: Show instructions to the annotator before they start @@ -724,6 +745,7 @@ service: request: {} response: body: + agreement_threshold: agreement_threshold annotation_limit_count: 1 annotation_limit_percent: annotation_limit_percent annotator_evaluation_minimum_score: annotator_evaluation_minimum_score @@ -757,6 +779,7 @@ service: is_draft: true is_published: true label_config: label_config + max_additional_annotators_assignable: 1 maximum_annotations: 1 min_annotations_to_start_training: 1 model_version: model_version @@ -783,6 +806,8 @@ service: require_comment_on_reject: true review_criteria: all review_only_manual_assignments: true + review_task_limit_percent: review_task_limit_percent + sampling: task_id show_agreement_to_reviewers: true show_data_manager_to_reviewers: true show_instruction: true @@ -809,16 +834,50 @@ service: workspace_title: workspace_title audiences: - public + list_unique_annotators: + path: /api/projects/{id}/annotators/ + method: GET + auth: true + docs: >- + Return unique users who have submitted annotations in the specified + project. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: List unique annotators for project + response: + docs: List of annotator users + type: list + examples: + - path-parameters: + id: 1 + response: + body: + - avatar: avatar + email: email + first_name: first_name + id: 1 + last_name: last_name + audiences: + - public duplicate: path: /api/projects/{id}/duplicate/ method: POST auth: true - docs: Make a copy of project. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Make a copy of project. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Duplicate project + display-name: ✨ Duplicate project request: name: ProjectDuplicateRequest body: @@ -972,112 +1031,38 @@ service: task_count: 1 audiences: - public - api_projects_members_create: - path: /api/projects/{id}/members/ + import_predictions: + path: /api/projects/{id}/import/predictions method: POST auth: true - docs: Add a member to a specific project. + docs: Import model predictions for tasks in the specified project. source: openapi: openapi/openapi.yaml path-parameters: - id: integer - display-name: Add project member + id: + type: integer + docs: A unique integer value identifying this project. + display-name: Import predictions request: - name: ProjectMemberRequest - body: - properties: - user: integer + body: list content-type: application/json response: - docs: '' - type: root.ProjectMember + docs: Predictions successfully imported + type: ProjectsImportPredictionsResponse + errors: + - root.BadRequestError examples: - path-parameters: id: 1 request: - user: 1 - response: - body: - user: 1 - api_projects_members_destroy: - path: /api/projects/{id}/members/ - method: DELETE - auth: true - docs: Remove a member from a specific project. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Remove member from project - request: - name: ApiProjectsMembersDestroyRequest - query-parameters: - project_member: - type: optional - docs: A unique integer value identifying this project member. - examples: - - path-parameters: - id: 1 - api_projects_project_extra_params_retrieve: - path: /api/projects/{id}/project-extra-params/ - method: GET - auth: true - docs: >- - Retrieve the annotator weights for statistics and Cohen's Kappa for a - specific project. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Get annotator weights - response: - docs: Annotator weights retrieved - type: ApiProjectsProjectExtraParamsRetrieveResponse - examples: - - path-parameters: - id: 1 - response: - body: - annotator_params: + - result: - key: value - use_kappa: true - api_projects_project_extra_params_create: - path: /api/projects/{id}/project-extra-params/ - method: POST - auth: true - docs: >- - Create annotator weights to be used in the annotation statistics for a - project, such as when calculating kappa metrics for inter-annotator - agreement. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Create annotator weights for statistics - request: - name: LseProjectParamsRequest - body: - properties: - annotator_params: optional - use_kappa: - type: optional - docs: >- - If categorical variables are used in labeling (e.g. choices), - Cohen's Kappa statistic is computed to measure inter-rater - reliability instead of basic agreement - content-type: application/json - response: - docs: Annotator weights created/updated - type: ApiProjectsProjectExtraParamsCreateResponse - examples: - - path-parameters: - id: 1 - request: {} + task: 1 response: body: - annotator_params: - - key: value - use_kappa: true + created: 1 + audiences: + - public api_projects_reimports_retrieve: path: /api/projects/{id}/reimports/{reimport_pk}/ method: GET @@ -1162,6 +1147,7 @@ service: created_at: '2024-01-15T09:30:00Z' created_username: created_username id: 1 + state: state updated_at: '2024-01-15T09:30:00Z' cancelled_annotations: 1 comment_authors: @@ -1224,57 +1210,82 @@ service: label_config: label_config audiences: - public - api_projects_subset_tasks_list: - path: /api/projects/{project_pk}/subset-tasks - method: GET - auth: true - docs: |2- - - Provides list of tasks, based on project subset. Includes predictions for tasks. For the 'HasGT' subset, accuracy metrics will also be provided. - - source: - openapi: openapi/openapi.yaml - path-parameters: - project_pk: integer - display-name: Get Project Subset Task List with Predictions and Accuracy details - request: - name: ApiProjectsSubsetTasksListRequest - query-parameters: - model_run: - type: optional - docs: A unique ID of a ModelRun - ordering: - type: optional - docs: Which field to use when ordering the results. - page: - type: optional - docs: A page number within the paginated result set. - page_size: - type: optional - docs: Number of results to return per page. - project_subset: - type: optional - docs: The project subset to retrieve tasks for - errors: - - root.BadRequestError - examples: - - path-parameters: - project_pk: 1 - api_projects_subsets_retrieve: - path: /api/projects/{project_pk}/subsets - method: GET - auth: true - docs: |2- - - Provides list of available subsets for a project along with count of tasks in each subset - - source: - openapi: openapi/openapi.yaml - path-parameters: - project_pk: integer - display-name: Get available subsets of a project (for prompts usage) - examples: - - path-parameters: - project_pk: 1 source: openapi: openapi/openapi.yaml +types: + LseProjectCreateRequestSampling: + discriminated: false + union: + - root.SamplingDe5Enum + - root.NullEnum + source: + openapi: openapi/openapi.yaml + inline: true + LseProjectCreateRequestSkipQueue: + discriminated: false + union: + - root.SkipQueueEnum + - root.NullEnum + source: + openapi: openapi/openapi.yaml + inline: true + PatchedLseProjectUpdateRequestSampling: + discriminated: false + union: + - root.SamplingDe5Enum + - root.NullEnum + source: + openapi: openapi/openapi.yaml + inline: true + PatchedLseProjectUpdateRequestSkipQueue: + discriminated: false + union: + - root.SkipQueueEnum + - root.NullEnum + source: + openapi: openapi/openapi.yaml + inline: true + ProjectsDuplicateResponse: + properties: + id: + type: integer + docs: The ID of the duplicated project. + source: + openapi: openapi/openapi.yaml + ProjectsImportTasksResponse: + docs: Task creation response + properties: + annotation_count: + type: optional + docs: Number of annotations added + could_be_tasks_list: + type: optional + docs: Whether uploaded files can contain lists of tasks, like CSV/TSV files + data_columns: + type: optional> + docs: The list of found data columns + duration: + type: optional + docs: Time in seconds to create + file_upload_ids: + type: optional> + docs: Database IDs of uploaded files + found_formats: + type: optional> + docs: The list of found file formats + predictions_count: + type: optional + docs: Number of predictions added + task_count: + type: optional + docs: Number of tasks added + source: + openapi: openapi/openapi.yaml + ProjectsImportPredictionsResponse: + docs: Import result + properties: + created: + type: optional + docs: Number of predictions created + source: + openapi: openapi/openapi.yaml diff --git a/.mock/definition/projects/annotatorWeights.yml b/.mock/definition/projects/annotatorWeights.yml new file mode 100644 index 000000000..4dede4954 --- /dev/null +++ b/.mock/definition/projects/annotatorWeights.yml @@ -0,0 +1,89 @@ +imports: + root: ../__package__.yml +service: + auth: false + base-path: '' + endpoints: + get: + path: /api/projects/{id}/project-extra-params/ + method: GET + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve the annotator weights for statistics and Cohen's Kappa for a + specific project. Affects dashboard-members stats, but old and unused. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Get annotator weights + response: + docs: Annotator weights retrieved + type: root.LseProjectParams + examples: + - path-parameters: + id: 1 + response: + body: + annotator_params: + key: value + use_kappa: true + audiences: + - internal + create: + path: /api/projects/{id}/project-extra-params/ + method: POST + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create annotator weights to be used in the annotation statistics for a + project, such as when calculating kappa metrics for inter-annotator + agreement. Affects dashboard-members stats, but old and unused. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Create annotator weights for statistics + request: + name: LseProjectParamsRequest + body: + properties: + annotator_params: optional + use_kappa: + type: optional + docs: >- + If categorical variables are used in labeling (e.g. choices), + Cohen's Kappa statistic is computed to measure inter-rater + reliability instead of basic agreement + content-type: application/json + response: + docs: Annotator weights created/updated + type: root.LseProjectParams + examples: + - name: payload format for annotator_params + path-parameters: + id: 1 + request: + annotator_params: + '123': 1 + '456': 0.75 + use_kappa: true + response: + body: + annotator_params: + key: value + use_kappa: true + audiences: + - internal + source: + openapi: openapi/openapi.yaml diff --git a/.mock/definition/projects/assignments.yml b/.mock/definition/projects/assignments.yml index 0540b049c..7b0ffe3f5 100644 --- a/.mock/definition/projects/assignments.yml +++ b/.mock/definition/projects/assignments.yml @@ -344,13 +344,19 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Assign multiple users to a collection of tasks within a specific project. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Bulk assign users to tasks + display-name: ✨ Bulk assign users to tasks request: name: AssignmentsBulkAssignRequest body: @@ -404,6 +410,12 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a list of tasks and assignees for those tasks for a specific project. source: @@ -415,7 +427,7 @@ service: task_pk: type: integer docs: A unique integer value identifying this task. - display-name: Get assigned tasks and assignees + display-name: ✨ Get assigned tasks and assignees response: docs: List of assignments for the task type: list @@ -428,6 +440,7 @@ service: - assignee: 1 created_at: '2024-01-15T09:30:00Z' id: 1 + state: state task: 1 type: AN audiences: @@ -436,7 +449,14 @@ service: path: /api/projects/{id}/tasks/{task_pk}/assignees method: POST auth: true - docs: Assign a user to a task in a specific project. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Assign a user to a task in a specific project. source: openapi: openapi/openapi.yaml path-parameters: @@ -446,7 +466,7 @@ service: task_pk: type: integer docs: A unique integer value identifying this task. - display-name: Create task assignee + display-name: ✨ Create task assignee request: name: AssignmentsAssignRequest body: @@ -474,6 +494,7 @@ service: assignee: 1 created_at: '2024-01-15T09:30:00Z' id: 1 + state: state task: 1 type: AN audiences: @@ -482,7 +503,14 @@ service: path: /api/projects/{id}/tasks/{task_pk}/assignees method: DELETE auth: true - docs: Remove assignees for a task within a specific project. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Remove assignees for a task within a specific project. source: openapi: openapi/openapi.yaml path-parameters: @@ -492,7 +520,7 @@ service: task_pk: type: integer docs: A unique integer value identifying this task. - display-name: Delete task assignments + display-name: ✨ Delete task assignments request: name: AssignmentsDeleteRequest query-parameters: @@ -516,7 +544,14 @@ service: path: /api/projects/{id}/tasks/{task_pk}/assignees method: PATCH auth: true - docs: Update the assignee for a task in a specific project. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update the assignee for a task in a specific project. source: openapi: openapi/openapi.yaml path-parameters: @@ -526,7 +561,7 @@ service: task_pk: type: integer docs: A unique integer value identifying this task. - display-name: Update task assignee + display-name: ✨ Update task assignee request: name: AssignmentsUpdateRequest body: @@ -554,6 +589,7 @@ service: assignee: 1 created_at: '2024-01-15T09:30:00Z' id: 1 + state: state task: 1 type: AN audiences: diff --git a/.mock/definition/projects/members.yml b/.mock/definition/projects/members.yml index 18cf1eb9b..c89c88817 100644 --- a/.mock/definition/projects/members.yml +++ b/.mock/definition/projects/members.yml @@ -11,6 +11,9 @@ service: docs: >- Retrieve the members for a specific project. Optionally filter by user IDs (comma-separated). + + + Does NOT include annotators. Deprecated; use paginated endpoint. source: openapi: openapi/openapi.yaml path-parameters: @@ -27,6 +30,7 @@ service: response: docs: List of users with membership information type: list + availability: deprecated examples: - path-parameters: id: 1 @@ -63,9 +67,71 @@ service: - active: active organization_id: 1 role: role + organization_membership: + active: active + organization_id: 1 + role: role pause: pause phone: phone username: username + audiences: + - internal + add: + path: /api/projects/{id}/members/ + method: POST + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Add a member to a specific project. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Add project member + request: + name: ProjectMemberRequest + body: + properties: + user: integer + content-type: application/json + response: + docs: '' + type: root.ProjectMember + examples: + - path-parameters: + id: 1 + request: + user: 1 + response: + body: + user: 1 + audiences: + - public + remove: + path: /api/projects/{id}/members/ + method: DELETE + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Remove a member from a specific project. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Remove member from project + examples: + - path-parameters: + id: 1 audiences: - public source: diff --git a/.mock/definition/projects/members/bulk.yml b/.mock/definition/projects/members/bulk.yml index b1e984044..683cb15c8 100644 --- a/.mock/definition/projects/members/bulk.yml +++ b/.mock/definition/projects/members/bulk.yml @@ -19,12 +19,19 @@ service: path: /api/projects/{id}/members/bulk/ method: POST auth: true - docs: Assign project members in bulk. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Assign project members in bulk. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Bulk assign project members + display-name: ✨ Bulk assign project members request: name: ProjectMemberBulkAssignRequest query-parameters: @@ -58,13 +65,19 @@ service: method: DELETE auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Unassign project members in bulk. Allows the same request body as bulk assign. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Bulk unassign project members + display-name: ✨ Bulk unassign project members request: name: BulkDeleteRequest query-parameters: diff --git a/.mock/definition/projects/members/paginated.yml b/.mock/definition/projects/members/paginated.yml index 0e94dad81..8db11b5fb 100644 --- a/.mock/definition/projects/members/paginated.yml +++ b/.mock/definition/projects/members/paginated.yml @@ -8,7 +8,14 @@ service: path: /api/projects/{id}/members/paginated/ method: GET auth: true - docs: Retrieve the members for a specific project. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve the members for a specific project. pagination: offset: $request.page results: $response.results @@ -16,7 +23,7 @@ service: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get project members paginated + display-name: ✨ Get project members paginated request: name: PaginatedListRequest query-parameters: @@ -76,6 +83,10 @@ service: - active: active organization_id: 1 role: role + organization_membership: + active: active + organization_id: 1 + role: role pause: pause phone: phone project_role: project_role diff --git a/.mock/definition/projects/metrics.yml b/.mock/definition/projects/metrics.yml index be1c339c0..230d6b9f7 100644 --- a/.mock/definition/projects/metrics.yml +++ b/.mock/definition/projects/metrics.yml @@ -8,12 +8,19 @@ service: path: /api/projects/{id}/metricparam/ method: GET auth: true - docs: Get the current metrics configuration for a project. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get the current metrics configuration for a project. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get project metrics configuration + display-name: ✨ Get project metrics configuration response: docs: Current metrics configuration type: root.MetricParam @@ -34,14 +41,21 @@ service: path: /api/projects/{id}/metricparam/ method: POST auth: true - docs: Update metrics strategy and parameters for a project. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update metrics strategy and parameters for a project. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Update project metrics configuration + display-name: ✨ Update project metrics configuration request: - name: ProjectMetricParamUpdateRequest + name: MetricParamUpdateRequest body: properties: additional_params: optional> @@ -50,10 +64,12 @@ service: validation: min: 0 max: 100 + availability: deprecated max_additional_annotators_assignable: type: optional validation: min: 0 + availability: deprecated metric_name: type: optional validation: diff --git a/.mock/definition/projects/metrics/custom.yml b/.mock/definition/projects/metrics/custom.yml index 8ebbcc362..8b5ce5ff0 100644 --- a/.mock/definition/projects/metrics/custom.yml +++ b/.mock/definition/projects/metrics/custom.yml @@ -13,13 +13,19 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get the AWS Lambda code for the custom metric configured for this project. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get AWS custom metric code + display-name: ✨ Get AWS custom metric code response: docs: Lambda code type: CustomGetLambdaResponse @@ -36,13 +42,19 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create or update the AWS Lambda function used for custom metrics in this project. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Update AWS custom metric Lambda + display-name: ✨ Update AWS custom metric Lambda request: name: AwsCustomFunctionUpdateRequest body: @@ -68,13 +80,19 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get AWS lambda logs for project, including filtering by start and end dates source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get AWS lambda logs for project + display-name: ✨ Get AWS lambda logs for project request: name: CustomLogsRequest query-parameters: @@ -103,12 +121,19 @@ service: path: /api/projects/{id}/check-function method: POST auth: true - docs: Validate custom matching function code for the project. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate custom matching function code for the project. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Check custom matching function code + display-name: ✨ Check custom matching function code request: name: CheckMatchingFunctionRequestRequest body: diff --git a/.mock/definition/projects/pauses.yml b/.mock/definition/projects/pauses.yml index a5e2524c7..ab44adb39 100644 --- a/.mock/definition/projects/pauses.yml +++ b/.mock/definition/projects/pauses.yml @@ -8,13 +8,20 @@ service: path: /api/projects/{project_pk}/members/{user_pk}/pauses/ method: GET auth: true - docs: Retrieve a list of all pauses. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a list of all pauses. source: openapi: openapi/openapi.yaml path-parameters: project_pk: integer user_pk: integer - display-name: List pauses + display-name: ✨ List pauses request: name: PausesListRequest query-parameters: @@ -54,13 +61,20 @@ service: path: /api/projects/{project_pk}/members/{user_pk}/pauses/ method: POST auth: true - docs: Create a new pause entry. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new pause entry. source: openapi: openapi/openapi.yaml path-parameters: project_pk: integer user_pk: integer - display-name: Create pause + display-name: ✨ Create pause request: body: root.PauseRequest content-type: application/json @@ -96,14 +110,21 @@ service: path: /api/projects/{project_pk}/members/{user_pk}/pauses/{id}/ method: GET auth: true - docs: Retrieve a specific pause by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a specific pause by ID. source: openapi: openapi/openapi.yaml path-parameters: id: string project_pk: integer user_pk: integer - display-name: Get pause + display-name: ✨ Get pause response: docs: '' type: root.Pause @@ -135,14 +156,21 @@ service: path: /api/projects/{project_pk}/members/{user_pk}/pauses/{id}/ method: DELETE auth: true - docs: Delete a specific pause by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific pause by ID. source: openapi: openapi/openapi.yaml path-parameters: id: string project_pk: integer user_pk: integer - display-name: Delete pause + display-name: ✨ Delete pause examples: - path-parameters: id: id @@ -154,14 +182,21 @@ service: path: /api/projects/{project_pk}/members/{user_pk}/pauses/{id}/ method: PATCH auth: true - docs: Partially update a pause entry by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Partially update a pause entry by ID. source: openapi: openapi/openapi.yaml path-parameters: id: string project_pk: integer user_pk: integer - display-name: Update pause + display-name: ✨ Update pause request: name: PatchedPauseRequest body: diff --git a/.mock/definition/projectRoles.yml b/.mock/definition/projects/roles.yml similarity index 50% rename from .mock/definition/projectRoles.yml rename to .mock/definition/projects/roles.yml index b823c6ff4..89aba88db 100644 --- a/.mock/definition/projectRoles.yml +++ b/.mock/definition/projects/roles.yml @@ -1,22 +1,28 @@ imports: - root: __package__.yml + root: ../__package__.yml service: auth: false base-path: '' endpoints: - api_projects_roles_list: + list: path: /api/projects/roles/ method: GET auth: true - docs: |2- + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List project roles for requested IDs for the current user source: openapi: openapi/openapi.yaml - display-name: List project roles for current user + display-name: ✨ List project roles for current user request: - name: ApiProjectsRolesListRequest + name: RolesListRequest query-parameters: ids: optional ordering: @@ -32,17 +38,25 @@ service: project: 1 role: OW user: 1 - api_projects_roles_create: + audiences: + - public + add: path: /api/projects/roles/ method: POST auth: true - docs: |2- + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create project role for user allowing the user the same access level provided by organization role. source: openapi: openapi/openapi.yaml - display-name: Create project role for user + display-name: ✨ Create project role for user request: name: ProjectRoleRequest body: @@ -63,7 +77,7 @@ service: user: integer content-type: application/json response: - docs: '' + docs: Role created type: root.ProjectRole examples: - request: @@ -76,11 +90,19 @@ service: project: 1 role: OW user: 1 - api_projects_roles_destroy: + audiences: + - public + remove: path: /api/projects/roles/{id}/ method: DELETE auth: true - docs: |2- + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Remove project role for user allowing the user the same access level provided by organization role. @@ -90,15 +112,23 @@ service: id: type: integer docs: A unique integer value identifying this project role. - display-name: Remove project role for user + display-name: ✨ Remove project role for user examples: - path-parameters: id: 1 - api_projects_roles_retrieve: + audiences: + - public + get: path: /api/projects/{id}/roles method: GET auth: true - docs: |2- + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List users and their project level roles for a given project. If user is not listed here and is a member of the project then they would behave as assigned role in organization. @@ -107,18 +137,20 @@ service: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: List project roles + display-name: ✨ List project roles response: docs: '' - type: root.ProjectRole + type: list examples: - path-parameters: id: 1 response: body: - id: 1 - project: 1 - role: OW - user: 1 + - id: 1 + project: 1 + role: OW + user: 1 + audiences: + - public source: openapi: openapi/openapi.yaml diff --git a/.mock/definition/projects/stats.yml b/.mock/definition/projects/stats.yml index d8c8e4e92..90445ead8 100644 --- a/.mock/definition/projects/stats.yml +++ b/.mock/definition/projects/stats.yml @@ -1,4 +1,19 @@ types: + StatsModelVersionAnnotatorAgreementResponse: + properties: + agreement: optional + source: + openapi: openapi/openapi.yaml + StatsModelVersionGroundTruthAgreementResponse: + properties: + agreement: optional + source: + openapi: openapi/openapi.yaml + StatsModelVersionPredictionAgreementResponse: + properties: + average_prediction_agreement_per_model: optional + source: + openapi: openapi/openapi.yaml StatsIaaResponseIaa: discriminated: false docs: >- @@ -61,6 +76,105 @@ types: docs: List of users in the matrix source: openapi: openapi/openapi.yaml + StatsUsersGroundTruthAgreementResponseAgreementValue: + discriminated: false + union: + - type: double + docs: Ground truth agreement score for the user (0-1) when per_label=False + - type: map + docs: Ground truth agreement scores per label when per_label=True + source: + openapi: openapi/openapi.yaml + inline: true + StatsUsersGroundTruthAgreementResponse: + properties: + agreement: + type: >- + optional> + docs: Dictionary mapping user IDs to their ground truth agreement scores + source: + openapi: openapi/openapi.yaml + StatsAgreementAnnotatorResponse: + properties: + Agreement_per_annotator: + type: optional + docs: Agreement score for the annotator (0-1) + source: + openapi: openapi/openapi.yaml + StatsAgreementAnnotatorsResponse: + properties: + agreement: + type: map + docs: >- + Mapping of annotator ID to their agreement score (0-1) or null if no + data + source: + openapi: openapi/openapi.yaml + StatsDataFiltersResponseUserFiltersStatsItem: + properties: + id: + type: optional + docs: User ID or model version identifier (e.g., "model:1.0") + source: + openapi: openapi/openapi.yaml + inline: true + StatsDataFiltersResponseUserFilters: + docs: Data filter statistics by user and model + properties: + stats: + type: optional> + docs: List of filter configurations for users and models + tasks_with_annotations: + type: optional> + docs: Default filter tab for tasks with annotations + source: + openapi: openapi/openapi.yaml + inline: true + StatsDataFiltersResponse: + properties: + user_filters: + type: optional + docs: Data filter statistics by user and model + source: + openapi: openapi/openapi.yaml + StatsFinishedTasksResponse: + properties: + finished: + type: optional + docs: Number of finished tasks + id: + type: optional + docs: User ID + progress: + type: optional + docs: Progress percentage (0-100) + source: + openapi: openapi/openapi.yaml + StatsLeadTimeResponseLeadTimeStatsItem: + properties: + mean_time: + type: optional + docs: Average lead time for the user + median_time: + type: optional + docs: Median lead time for the user + sum_lead_time: + type: optional + docs: Total lead time for the user + user_id: + type: optional + docs: User ID + source: + openapi: openapi/openapi.yaml + inline: true + StatsLeadTimeResponse: + properties: + lead_time_stats: + type: optional> + docs: Lead time statistics including mean, median, and distribution + source: + openapi: openapi/openapi.yaml StatsTotalAgreementResponseZero: properties: total_agreement: optional @@ -80,22 +194,251 @@ types: - StatsTotalAgreementResponseOne source: openapi: openapi/openapi.yaml + StatsUsersPredictionAgreementResponseAgreementValue: + discriminated: false + union: + - type: double + docs: >- + Average prediction agreement score for the user (0-1) when + per_label=False + - type: map + docs: >- + Average prediction agreement score per label for the user (0-1) when + per_label=True + source: + openapi: openapi/openapi.yaml + inline: true + StatsUsersPredictionAgreementResponse: + properties: + agreement: + type: >- + optional> + docs: Dictionary mapping user IDs to their prediction agreement scores + source: + openapi: openapi/openapi.yaml + StatsUsersReviewScoreResponsePerformanceScoreValue: + discriminated: false + union: + - type: double + docs: Performance score for the annotator when per_label=False + - type: map + docs: Performance score per label for the annotator when per_label=True + source: + openapi: openapi/openapi.yaml + inline: true + StatsUsersReviewScoreResponseReviewScoreValue: + discriminated: false + union: + - type: double + docs: Average review score for the annotator when per_label=False + - type: map + docs: Review score per label for the annotator when per_label=True + source: + openapi: openapi/openapi.yaml + inline: true + StatsUsersReviewScoreResponse: + properties: + performance_score: + type: >- + optional> + docs: Performance scores mapped by annotator ID + review_score: + type: optional> + docs: Review scores mapped by annotator ID + source: + openapi: openapi/openapi.yaml + StatsUserPredictionAgreementResponseAveragePredictionAgreementPerUser: + discriminated: false + union: + - type: double + docs: >- + Average prediction agreement score for the user (0-1) when + per_label=False + - type: map + docs: >- + Average prediction agreement score per label for the user (0-1) when + per_label=True + source: + openapi: openapi/openapi.yaml + inline: true + StatsUserPredictionAgreementResponse: + properties: + average_prediction_agreement_per_user: >- + optional + source: + openapi: openapi/openapi.yaml + StatsUserReviewScoreResponsePerformanceScore: + discriminated: false + union: + - type: double + docs: Performance score for the user when per_label=False + - type: map + docs: Performance score per label for the user when per_label=True + source: + openapi: openapi/openapi.yaml + inline: true + StatsUserReviewScoreResponseReviewScore: + discriminated: false + union: + - type: double + docs: Average review score for the user when per_label=False + - type: map + docs: Average review score per label for the user when per_label=True + source: + openapi: openapi/openapi.yaml + inline: true + StatsUserReviewScoreResponse: + properties: + performance_score: optional + review_score: optional + source: + openapi: openapi/openapi.yaml + StatsUserGroundTruthAgreementResponseAgreement: + discriminated: false + union: + - type: double + docs: Ground truth agreement score for the user (0-1) when per_label=False + - type: map + docs: Ground truth agreement scores per label when per_label=True + source: + openapi: openapi/openapi.yaml + inline: true + StatsUserGroundTruthAgreementResponse: + properties: + agreement: optional + source: + openapi: openapi/openapi.yaml service: auth: false base-path: '' endpoints: + model_version_annotator_agreement: + path: /api/projects/{id}/model-stats/{model_version}/agreement + method: GET + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement between a given model version and all annotators in the + project for overlapping tasks. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + model_version: string + display-name: ✨ Get model-version overall agreement vs annotators + response: + docs: Model-version overall agreement vs annotators + type: StatsModelVersionAnnotatorAgreementResponse + examples: + - path-parameters: + id: 1 + model_version: model_version + response: + body: + agreement: 1.1 + audiences: + - public + model_version_ground_truth_agreement: + path: /api/projects/{id}/model-stats/{model_version}/agreement-groundtruth + method: GET + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement between a given model version and ground truth annotations + in the project for overlapping tasks. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + model_version: string + display-name: ✨ Get model-version ground truth agreement + request: + name: StatsModelVersionGroundTruthAgreementRequest + query-parameters: + per_label: + type: optional + default: false + docs: Calculate agreement per label + response: + docs: Model-version ground truth agreement + type: StatsModelVersionGroundTruthAgreementResponse + examples: + - path-parameters: + id: 1 + model_version: model_version + response: + body: + agreement: 1.1 + audiences: + - public + model_version_prediction_agreement: + path: /api/projects/{id}/model-stats/{model_version}/prediction + method: GET + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement between a given model version and all other model versions + in the project for overlapping tasks. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + model_version: string + display-name: ✨ Get model-version prediction agreement + request: + name: StatsModelVersionPredictionAgreementRequest + query-parameters: + per_label: + type: optional + default: false + docs: Calculate agreement per label + response: + docs: Model-version prediction agreement + type: StatsModelVersionPredictionAgreementResponse + examples: + - path-parameters: + id: 1 + model_version: model_version + response: + body: + average_prediction_agreement_per_model: 1.1 + audiences: + - public iaa: path: /api/projects/{id}/stats/IAA method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get Inter-Annotator Agreement (IAA) matrix for a project, showing agreement between all annotators. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get Inter-Annotator Agreement matrix + display-name: ✨ Get Inter-Annotator Agreement matrix request: name: StatsIaaRequest query-parameters: @@ -175,11 +518,229 @@ service: id: 2 audiences: - public + users_ground_truth_agreement: + path: /api/projects/{id}/stats/agreement-groundtruth + method: GET + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get ground truth agreement statistics for multiple users within a + project. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Get ground truth agreement for multiple users + request: + name: StatsUsersGroundTruthAgreementRequest + query-parameters: + ids: + type: string + docs: Comma separated list of user IDs to get ground truth agreement for + per_label: + type: optional + default: false + docs: Per label + response: + docs: Ground truth agreement statistics for multiple users + type: StatsUsersGroundTruthAgreementResponse + examples: + - path-parameters: + id: 1 + query-parameters: + ids: ids + response: + body: + agreement: + key: 1.1 + audiences: + - public + agreement_annotator: + path: /api/projects/{id}/stats/agreement_annotator/{user_id} + method: GET + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement statistics for a specific annotator within a project. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + user_id: integer + display-name: ✨ Get individual annotator agreement stats + response: + docs: Individual annotator agreement statistics + type: StatsAgreementAnnotatorResponse + examples: + - path-parameters: + id: 1 + user_id: 1 + response: + body: + Agreement_per_annotator: 1.1 + audiences: + - public + agreement_annotators: + path: /api/projects/{id}/stats/agreement_annotators + method: GET + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement statistics for multiple annotators within a project. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Get agreement statistics for multiple annotators + request: + name: StatsAgreementAnnotatorsRequest + query-parameters: + ids: + type: string + docs: >- + Comma separated list of annotator user IDs to get agreement scores + for + response: + docs: Multiple annotator agreement statistics + type: StatsAgreementAnnotatorsResponse + examples: + - path-parameters: + id: 1 + query-parameters: + ids: ids + response: + body: + agreement: + key: 1.1 + audiences: + - public + data_filters: + path: /api/projects/{id}/stats/data_filter + method: GET + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get statistics about user data filters and their usage within a project. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Get user data filter statistics + response: + docs: User data filter statistics + type: StatsDataFiltersResponse + examples: + - path-parameters: + id: 1 + response: + body: + user_filters: + stats: + - {} + tasks_with_annotations: + key: value + audiences: + - public + finished_tasks: + path: /api/projects/{id}/stats/finished + method: GET + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get statistics about finished tasks for a project. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Get finished tasks statistics + request: + name: StatsFinishedTasksRequest + query-parameters: + user_pk: + type: optional + docs: User ID to filter statistics by (optional) + response: + docs: Finished tasks statistics + type: StatsFinishedTasksResponse + examples: + - path-parameters: + id: 1 + response: + body: + finished: 1 + id: 1 + progress: 1 + audiences: + - public + lead_time: + path: /api/projects/{id}/stats/lead_time + method: GET + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get lead time statistics across the project, including average + annotation time. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Get lead time statistics + response: + docs: Lead time statistics + type: StatsLeadTimeResponse + examples: + - path-parameters: + id: 1 + response: + body: + lead_time_stats: + - mean_time: 1.1 + median_time: 1.1 + sum_lead_time: 1.1 + user_id: 1 + audiences: + - public total_agreement: path: /api/projects/{id}/stats/total_agreement method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Overall or per-label total agreement across the project. @@ -190,7 +751,7 @@ service: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get total agreement for project + display-name: ✨ Get total agreement for project request: name: StatsTotalAgreementRequest query-parameters: @@ -208,5 +769,239 @@ service: total_agreement: 1.1 audiences: - public + update_stats: + path: /api/projects/{id}/update-stats + method: GET + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Start stats recalculation for given project + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Start stats recalculation + request: + name: StatsUpdateStatsRequest + query-parameters: + stat_type: + type: optional + docs: 'Stat type to recalculate. Possible values: label, stats' + response: + docs: Successful response returns job id + type: map + examples: + - path-parameters: + id: 1 + response: + body: + key: value + audiences: + - public + users_prediction_agreement: + path: /api/projects/{id}/user-stats/prediction + method: GET + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get prediction agreement statistics for multiple annotators within a + project. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Get prediction agreement statistics for multiple annotators + request: + name: StatsUsersPredictionAgreementRequest + query-parameters: + ids: + type: string + docs: >- + Comma separated list of annotator user IDs to get agreement scores + for + per_label: + type: optional + default: false + docs: Per label + response: + docs: Prediction agreement statistics for multiple annotators + type: StatsUsersPredictionAgreementResponse + examples: + - path-parameters: + id: 1 + query-parameters: + ids: ids + response: + body: + agreement: + key: 1.1 + audiences: + - public + users_review_score: + path: /api/projects/{id}/user-stats/review_score + method: GET + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get review score and performance score statistics for multiple + annotators within a project. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Get review scores for multiple annotators + request: + name: StatsUsersReviewScoreRequest + query-parameters: + ids: + type: string + docs: >- + Comma separated list of annotator user IDs to get review scores + for + per_label: + type: optional + docs: Per label + response: + docs: Review scores and performance scores for multiple annotators + type: StatsUsersReviewScoreResponse + examples: + - path-parameters: + id: 1 + query-parameters: + ids: ids + response: + body: + performance_score: + key: 1.1 + review_score: + key: 1.1 + audiences: + - public + user_prediction_agreement: + path: /api/projects/{id}/user-stats/{user_pk}/prediction + method: GET + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get prediction agreement statistics for a specific user within a + project. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + user_pk: integer + display-name: ✨ Get individual user prediction agreement + request: + name: StatsUserPredictionAgreementRequest + query-parameters: + per_label: + type: optional + docs: Calculate agreement per label + response: + docs: Individual user prediction agreement statistics + type: StatsUserPredictionAgreementResponse + examples: + - path-parameters: + id: 1 + user_pk: 1 + response: + body: + average_prediction_agreement_per_user: 1.1 + audiences: + - public + user_review_score: + path: /api/projects/{id}/user-stats/{user_pk}/review_score + method: GET + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get review score statistics for a specific user within a project. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + user_pk: integer + display-name: ✨ Get individual user review scores + request: + name: StatsUserReviewScoreRequest + query-parameters: + per_label: + type: optional + docs: Calculate agreement per label + response: + docs: Individual user review score statistics + type: StatsUserReviewScoreResponse + examples: + - path-parameters: + id: 1 + user_pk: 1 + response: + body: + performance_score: 1.1 + review_score: 1.1 + audiences: + - public + user_ground_truth_agreement: + path: /api/projects/{id}/users/{user_pk}/stats/agreement-groundtruth + method: GET + auth: true + docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get ground truth agreement statistics for a specific user within a + project. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + user_pk: integer + display-name: ✨ Get individual user ground truth agreement + request: + name: StatsUserGroundTruthAgreementRequest + query-parameters: + per_label: + type: optional + docs: Calculate agreement per label + response: + docs: Individual user ground truth agreement statistics + type: StatsUserGroundTruthAgreementResponse + examples: + - path-parameters: + id: 1 + user_pk: 1 + response: + body: + agreement: 1.1 + audiences: + - public source: openapi: openapi/openapi.yaml diff --git a/.mock/definition/prompts.yml b/.mock/definition/prompts.yml index 822dc918b..e27eee5ed 100644 --- a/.mock/definition/prompts.yml +++ b/.mock/definition/prompts.yml @@ -8,10 +8,17 @@ service: path: /api/model-run/batch-failed-predictions method: POST auth: true - docs: Create a new batch of failed predictions. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new batch of failed predictions. source: openapi: openapi/openapi.yaml - display-name: Create batch of failed predictions + display-name: ✨ Create batch of failed predictions request: name: BatchFailedPredictionsRequestRequest query-parameters: @@ -48,10 +55,17 @@ service: path: /api/model-run/batch-predictions method: POST auth: true - docs: Create a new batch prediction. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new batch prediction. source: openapi: openapi/openapi.yaml - display-name: Create batch predictions + display-name: ✨ Create batch predictions request: name: BatchPredictionsRequestRequest query-parameters: @@ -84,6 +98,112 @@ service: - key: value audiences: - public + subset_tasks: + path: /api/projects/{project_pk}/subset-tasks + method: GET + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + Provides list of tasks, based on project subset. Includes predictions for tasks. For the 'HasGT' subset, accuracy metrics will also be provided. + + source: + openapi: openapi/openapi.yaml + path-parameters: + project_pk: integer + display-name: ✨ Get Project Subset Task List with Predictions and Accuracy details + request: + name: PromptsSubsetTasksRequest + query-parameters: + include_total: + type: optional + docs: >- + If true (default), includes task_count in response; if false, + omits it. + model_run: + type: optional + docs: A unique ID of a ModelRun + ordering: + type: optional + docs: Which field to use when ordering the results. + page: + type: optional + docs: A page number within the paginated result set. + page_size: + type: optional + docs: Number of results to return per page. + parent_model: + type: optional + docs: The ID of the parent model (ModelInterface) for this Inference Run + project_subset: + type: optional + docs: The project subset to retrieve tasks for + response: + docs: '' + type: root.PaginatedProjectSubsetTasksResponseList + errors: + - root.BadRequestError + examples: + - path-parameters: + project_pk: 1 + response: + body: + count: 123 + next: http://api.example.org/accounts/?page=4 + previous: http://api.example.org/accounts/?page=2 + results: + - next_cursor: next_cursor + previous_cursor: previous_cursor + task_count: 1 + task_result_list: + - data: + key: value + audiences: + - public + subsets: + path: /api/projects/{project_pk}/subsets + method: GET + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + Provides list of available subsets for a project along with count of tasks in each subset + + source: + openapi: openapi/openapi.yaml + path-parameters: + project_pk: integer + display-name: ✨ Get available subsets of a project (for prompts usage) + request: + name: PromptsSubsetsRequest + query-parameters: + ordering: + type: optional + docs: Which field to use when ordering the results. + response: + docs: '' + type: list + examples: + - path-parameters: + project_pk: 1 + response: + body: + - columns_schema: + - key: value + count: 1 + subset: subset + audiences: + - public list: path: /api/prompts/ method: GET @@ -91,7 +211,7 @@ service: docs: List all prompts. source: openapi: openapi/openapi.yaml - display-name: List prompts + display-name: ✨ List prompts request: name: PromptsListRequest query-parameters: @@ -129,10 +249,17 @@ service: path: /api/prompts/ method: POST auth: true - docs: Create a new prompt. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new prompt. source: openapi: openapi/openapi.yaml - display-name: Create prompt + display-name: ✨ Create prompt request: body: root.ModelInterfaceRequest content-type: application/json @@ -172,7 +299,7 @@ service: docs: Retrieve a list of compatible project for prompt. source: openapi: openapi/openapi.yaml - display-name: List projects compatible with prompt + display-name: ✨ List projects compatible with prompt request: name: PromptsCompatibleProjectsRequest query-parameters: @@ -199,7 +326,8 @@ service: next: http://api.example.org/accounts/?page=4 previous: http://api.example.org/accounts/?page=2 results: - - allow_stream: allow_stream + - agreement_threshold: agreement_threshold + allow_stream: true annotation_limit_count: 1 annotation_limit_percent: annotation_limit_percent annotator_evaluation_minimum_score: annotator_evaluation_minimum_score @@ -238,12 +366,13 @@ service: is_draft: true is_published: true label_config: label_config + max_additional_annotators_assignable: 1 maximum_annotations: 1 members: members members_count: 1 min_annotations_to_start_training: 1 model_version: model_version - num_tasks_with_annotations: num_tasks_with_annotations + num_tasks_with_annotations: 1 organization: 1 overlap_cohort_percentage: 1 parsed_label_config: @@ -251,19 +380,19 @@ service: pause_on_failed_annotator_evaluation: true pinned_at: '2024-01-15T09:30:00Z' prompts: prompts - queue_done: queue_done - queue_left: queue_left + queue_done: 1 + queue_left: 1 queue_total: queue_total - ready: ready - rejected: rejected + ready: true + rejected: 1 require_comment_on_skip: true reveal_preannotations_interactively: true review_settings: id: 1 requeue_rejected_tasks_to_annotator: true - review_total_tasks: review_total_tasks - reviewed_number: reviewed_number - reviewer_queue_total: reviewer_queue_total + review_total_tasks: 1 + reviewed_number: 1 + reviewer_queue_total: 1 sampling: Sequential sampling show_annotation_history: true show_collab_predictions: true @@ -279,7 +408,7 @@ service: title: title total_annotations_number: total_annotations_number total_predictions_number: 1 - useful_annotation_number: useful_annotation_number + useful_annotation_number: 1 workspace: workspace workspace_title: workspace_title audiences: @@ -288,12 +417,19 @@ service: path: /api/prompts/{id}/ method: GET auth: true - docs: Retrieve a specific prompt. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a specific prompt. source: openapi: openapi/openapi.yaml path-parameters: id: string - display-name: Get prompt + display-name: ✨ Get prompt response: docs: '' type: root.ModelInterfaceSerializerGet @@ -328,12 +464,19 @@ service: path: /api/prompts/{id}/ method: PUT auth: true - docs: Overwrite a specific prompt by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overwrite a specific prompt by ID. source: openapi: openapi/openapi.yaml path-parameters: id: string - display-name: Put prompt + display-name: ✨ Put prompt request: body: root.ModelInterfaceRequest content-type: application/json @@ -372,12 +515,19 @@ service: path: /api/prompts/{id}/ method: DELETE auth: true - docs: Delete a prompt by ID + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a prompt by ID source: openapi: openapi/openapi.yaml path-parameters: id: string - display-name: Delete prompt + display-name: ✨ Delete prompt examples: - path-parameters: id: id @@ -387,12 +537,19 @@ service: path: /api/prompts/{id}/ method: PATCH auth: true - docs: Update a specific prompt by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific prompt by ID. source: openapi: openapi/openapi.yaml path-parameters: id: string - display-name: Update prompt + display-name: ✨ Update prompt request: name: PatchedModelInterfaceRequest body: @@ -449,13 +606,20 @@ service: path: /api/prompts/{prompt_id}/versions/{version_id} method: PUT auth: true - docs: Overwrite a specific prompt version by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overwrite a specific prompt version by ID. source: openapi: openapi/openapi.yaml path-parameters: prompt_id: integer version_id: integer - display-name: Put prompt version + display-name: ✨ Put prompt version request: body: root.ThirdPartyModelVersionRequest content-type: application/json @@ -491,24 +655,6 @@ service: updated_at: '2024-01-15T09:30:00Z' audiences: - internal - api_prompts_versions_inference_runs_cancel_create: - path: >- - /api/prompts/{prompt_id}/versions/{version_id}/inference-runs/{inference_run_id}/cancel - method: POST - auth: true - docs: Cancel the inference run for the given api - source: - openapi: openapi/openapi.yaml - path-parameters: - inference_run_id: integer - prompt_id: integer - version_id: integer - display-name: Cancel Inference Run API - examples: - - path-parameters: - inference_run_id: 1 - prompt_id: 1 - version_id: 1 source: openapi: openapi/openapi.yaml types: diff --git a/.mock/definition/prompts/indicators.yml b/.mock/definition/prompts/indicators.yml index 50ab4e2c4..589f71ba0 100644 --- a/.mock/definition/prompts/indicators.yml +++ b/.mock/definition/prompts/indicators.yml @@ -13,12 +13,19 @@ service: path: /api/inference-runs/{id}/indicators/ method: GET auth: true - docs: Get key indicators for the Prompt dashboard. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get key indicators for the Prompt dashboard. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get key indicators + display-name: ✨ Get key indicators response: docs: Key indicators type: list @@ -36,13 +43,20 @@ service: path: /api/inference-runs/{id}/indicators/{indicator_key} method: GET auth: true - docs: Get a specific key indicator for the Prompt dashboard. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific key indicator for the Prompt dashboard. source: openapi: openapi/openapi.yaml path-parameters: id: integer indicator_key: string - display-name: Get key indicator + display-name: ✨ Get key indicator response: docs: Key indicator type: root.LseKeyIndicatorValue diff --git a/.mock/definition/prompts/runs.yml b/.mock/definition/prompts/runs.yml index 26679188a..15d391138 100644 --- a/.mock/definition/prompts/runs.yml +++ b/.mock/definition/prompts/runs.yml @@ -16,13 +16,20 @@ service: path: /api/prompts/{prompt_id}/versions/{version_id}/inference-runs method: GET auth: true - docs: Get information (status, metadata, etc) about an existing inference run + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get information (status, metadata, etc) about an existing inference run source: openapi: openapi/openapi.yaml path-parameters: prompt_id: integer version_id: integer - display-name: Get inference run info + display-name: ✨ Get inference run info request: name: RunsListRequest query-parameters: @@ -71,13 +78,20 @@ service: path: /api/prompts/{prompt_id}/versions/{version_id}/inference-runs method: POST auth: true - docs: Run a prompt inference. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Run a prompt inference. source: openapi: openapi/openapi.yaml path-parameters: prompt_id: integer version_id: integer - display-name: Run prompt inference + display-name: ✨ Run prompt inference request: name: ModelRunRequest body: @@ -135,5 +149,38 @@ service: triggered_at: '2024-01-15T09:30:00Z' audiences: - public + cancel: + path: >- + /api/prompts/{prompt_id}/versions/{version_id}/inference-runs/{inference_run_id}/cancel + method: POST + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Cancel the inference run for the given api + source: + openapi: openapi/openapi.yaml + path-parameters: + inference_run_id: integer + prompt_id: integer + version_id: integer + display-name: ✨ Cancel Inference Run API + response: + docs: '' + type: root.CancelModelRunResponse + examples: + - path-parameters: + inference_run_id: 1 + prompt_id: 1 + version_id: 1 + response: + body: + detail: detail + audiences: + - public source: openapi: openapi/openapi.yaml diff --git a/.mock/definition/prompts/versions.yml b/.mock/definition/prompts/versions.yml index da6eafc7e..a8029b31b 100644 --- a/.mock/definition/prompts/versions.yml +++ b/.mock/definition/prompts/versions.yml @@ -6,12 +6,19 @@ service: path: /api/prompts/{id}/get-default-version-name method: GET auth: true - docs: Get default prompt version name + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get default prompt version name source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get default prompt version name + display-name: ✨ Get default prompt version name examples: - path-parameters: id: 1 @@ -21,31 +28,31 @@ service: path: /api/prompts/{prompt_id}/versions method: GET auth: true - docs: List all versions of a prompt. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all versions of a prompt. source: openapi: openapi/openapi.yaml path-parameters: prompt_id: integer - display-name: List prompt versions + display-name: ✨ List prompt versions request: name: VersionsListRequest query-parameters: ordering: type: optional docs: Which field to use when ordering the results. - prompt_id: - type: integer - docs: >- - A unique integer value identifying the model ID to list versions - for. response: docs: '' type: list examples: - path-parameters: prompt_id: 1 - query-parameters: - prompt_id: 1 response: body: - created_at: '2024-01-15T09:30:00Z' @@ -71,12 +78,19 @@ service: path: /api/prompts/{prompt_id}/versions method: POST auth: true - docs: Create a new version of a prompt. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new version of a prompt. source: openapi: openapi/openapi.yaml path-parameters: prompt_id: integer - display-name: Create prompt version + display-name: ✨ Create prompt version request: body: root.ThirdPartyModelVersionRequest content-type: application/json @@ -115,13 +129,20 @@ service: path: /api/prompts/{prompt_id}/versions/{version_id} method: GET auth: true - docs: Retrieve a specific prompt of a model. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a specific prompt of a model. source: openapi: openapi/openapi.yaml path-parameters: prompt_id: integer version_id: integer - display-name: Get prompt version + display-name: ✨ Get prompt version response: docs: '' type: root.ThirdPartyModelVersion @@ -154,13 +175,20 @@ service: path: /api/prompts/{prompt_id}/versions/{version_id} method: DELETE auth: true - docs: Delete a prompt version by ID + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a prompt version by ID source: openapi: openapi/openapi.yaml path-parameters: prompt_id: integer version_id: integer - display-name: Delete prompt version + display-name: ✨ Delete prompt version examples: - path-parameters: prompt_id: 1 @@ -171,13 +199,20 @@ service: path: /api/prompts/{prompt_id}/versions/{version_id} method: PATCH auth: true - docs: Update a specific prompt version by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific prompt version by ID. source: openapi: openapi/openapi.yaml path-parameters: prompt_id: integer version_id: integer - display-name: Update prompt version + display-name: ✨ Update prompt version request: name: PatchedThirdPartyModelVersionRequest body: @@ -251,6 +286,12 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get an estimate of the cost for making an inference run on the selected Prompt Version and Project/ProjectSubset source: @@ -259,7 +300,7 @@ service: prompt_id: integer version_id: integer display-name: >- - Get cost estimate for running a prompt version on a particular + ✨ Get cost estimate for running a prompt version on a particular project/subset response: docs: Cost estimate response @@ -282,13 +323,20 @@ service: path: /api/prompts/{prompt_id}/versions/{version_id}/refine method: GET auth: true - docs: Get the refined prompt based on the `refinement_job_id`. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get the refined prompt based on the `refinement_job_id`. source: openapi: openapi/openapi.yaml path-parameters: prompt_id: integer version_id: integer - display-name: Get refined prompt + display-name: ✨ Get refined prompt request: name: VersionsGetRefinedPromptRequest query-parameters: @@ -337,6 +385,12 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Refine a prompt version using a teacher model and save the refined prompt as a new version. source: @@ -344,7 +398,7 @@ service: path-parameters: prompt_id: integer version_id: integer - display-name: Refine a prompt version + display-name: ✨ Refine a prompt version request: name: RefinePromptRequestRequest query-parameters: diff --git a/.mock/definition/sso/saml.yml b/.mock/definition/sso/saml.yml index 3e7eca934..eca906845 100644 --- a/.mock/definition/sso/saml.yml +++ b/.mock/definition/sso/saml.yml @@ -8,10 +8,17 @@ service: path: /api/saml/settings method: GET auth: true - docs: Retrieve SAML2 settings for the currently active organization. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve SAML2 settings for the currently active organization. source: openapi: openapi/openapi.yaml - display-name: Retrieve SAML2 Settings + display-name: ✨ Retrieve SAML2 Settings response: docs: '' type: root.SamlSettings @@ -35,10 +42,17 @@ service: path: /api/saml/settings method: POST auth: true - docs: Update SAML2 settings for the currently active organization. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update SAML2 settings for the currently active organization. source: openapi: openapi/openapi.yaml - display-name: Update SAML2 Settings + display-name: ✨ Update SAML2 Settings request: name: SamlSettingsUpdateRequest body: diff --git a/.mock/definition/sso/scim.yml b/.mock/definition/sso/scim.yml index f407efc3e..9e6dd69c2 100644 --- a/.mock/definition/sso/scim.yml +++ b/.mock/definition/sso/scim.yml @@ -8,10 +8,17 @@ service: path: /api/scim/settings method: GET auth: true - docs: Retrieve SCIM settings for the currently active organization. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve SCIM settings for the currently active organization. source: openapi: openapi/openapi.yaml - display-name: Retrieve SCIM Settings + display-name: ✨ Retrieve SCIM Settings response: docs: '' type: root.ScimSettings @@ -35,10 +42,17 @@ service: path: /api/scim/settings method: POST auth: true - docs: Update SCIM settings for the currently active organization. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update SCIM settings for the currently active organization. source: openapi: openapi/openapi.yaml - display-name: Update SCIM Settings + display-name: ✨ Update SCIM Settings request: name: ScimSettingsUpdateRequest body: diff --git a/.mock/definition/stats.yml b/.mock/definition/stats.yml deleted file mode 100644 index f8d3fc6d6..000000000 --- a/.mock/definition/stats.yml +++ /dev/null @@ -1,372 +0,0 @@ -types: - ApiProjectsModelStatsAgreementRetrieveResponse: - properties: - agreement: optional - source: - openapi: openapi/openapi.yaml - ApiProjectsModelStatsAgreementGroundtruthRetrieveResponse: - properties: - agreement: optional - source: - openapi: openapi/openapi.yaml - ApiProjectsModelStatsPredictionRetrieveResponse: - properties: - average_prediction_agreement_per_model: optional - source: - openapi: openapi/openapi.yaml - ApiProjectsStatsAgreementAnnotatorRetrieveResponse: - properties: - Agreement_per_annotator: - type: optional - docs: Agreement score for the annotator (0-1) - source: - openapi: openapi/openapi.yaml - ApiProjectsStatsDataFilterRetrieveResponse: - properties: - filters: - type: optional> - docs: Data filter statistics by user - source: - openapi: openapi/openapi.yaml - ApiProjectsStatsFinishedRetrieveResponse: - properties: - finished_tasks: - type: optional - docs: Number of finished tasks - progress: - type: optional - docs: Progress percentage (0-100) - source: - openapi: openapi/openapi.yaml - ApiProjectsStatsLeadTimeRetrieveResponse: - properties: - lead_time: - type: optional> - docs: Lead time statistics including mean, median, and distribution - source: - openapi: openapi/openapi.yaml - ApiProjectsUserStatsPredictionRetrieveResponse: - properties: - average_prediction_agreement_per_user: - type: optional - docs: Average prediction agreement score for the user (0-1) - source: - openapi: openapi/openapi.yaml - ApiProjectsUserStatsReviewScoreRetrieveResponse: - properties: - review_score: - type: optional - docs: Average review score for the user - source: - openapi: openapi/openapi.yaml - ApiProjectsUsersStatsAgreementGroundtruthRetrieveResponse: - properties: - agreement: - type: optional - docs: Ground truth agreement score for the user (0-1) - source: - openapi: openapi/openapi.yaml -service: - auth: false - base-path: '' - endpoints: - api_projects_model_stats_agreement_retrieve: - path: /api/projects/{id}/model-stats/{model_version}/agreement - method: GET - auth: true - docs: >- - Overall agreement between a given model version's predictions and all - annotators on overlapping tasks. - - Computed as the average of per-annotator agreement vs this model version - over annotators who overlap on at least one task. - - Mirrors IAA per annotator, but one side is the model. - - :return: {"agreement": float[0..1]} - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - model_version: string - display-name: Get model-version overall agreement vs annotators - response: - docs: Model-version overall agreement vs annotators - type: ApiProjectsModelStatsAgreementRetrieveResponse - examples: - - path-parameters: - id: 1 - model_version: model_version - response: - body: - agreement: 1.1 - api_projects_model_stats_agreement_groundtruth_retrieve: - path: /api/projects/{id}/model-stats/{model_version}/agreement-groundtruth - method: GET - auth: true - docs: >- - Ground truth agreement for annotations that match predictions of a - specific model version. - - This mirrors gt_per_user_agreement but filters stats by tasks where - predictions have given model_version. - - :return: {"agreement": float[0..1]} - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - model_version: string - display-name: Get model-version ground truth agreement - request: - name: ApiProjectsModelStatsAgreementGroundtruthRetrieveRequest - query-parameters: - per_label: - type: optional - default: false - docs: Calculate agreement per label - response: - docs: Model-version ground truth agreement - type: ApiProjectsModelStatsAgreementGroundtruthRetrieveResponse - examples: - - path-parameters: - id: 1 - model_version: model_version - response: - body: - agreement: 1.1 - api_projects_model_stats_prediction_retrieve: - path: /api/projects/{id}/model-stats/{model_version}/prediction - method: GET - auth: true - docs: >- - Mean agreement between the given model version and all other model - versions in the project. - - - Computed as the average of pairwise model-to-model agreement scores from - PredictionPairStats where either - - prediction pair's model_version_from or model_version_to equals the - provided model_version. - - - When per_label=true, returns a mapping of label -> average agreement - across the same set of pairs. - - - :return: {"average_prediction_agreement_per_model": float[0..1] | - {label: float[0..1]}} - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - model_version: string - display-name: Get model-version prediction agreement - request: - name: ApiProjectsModelStatsPredictionRetrieveRequest - query-parameters: - per_label: - type: optional - default: false - docs: Calculate agreement per label - response: - docs: Model-version prediction agreement - type: ApiProjectsModelStatsPredictionRetrieveResponse - examples: - - path-parameters: - id: 1 - model_version: model_version - response: - body: - average_prediction_agreement_per_model: 1.1 - api_projects_stats_agreement_annotator_retrieve: - path: /api/projects/{id}/stats/agreement_annotator/{user_id} - method: GET - auth: true - docs: Get agreement statistics for a specific annotator within a project. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - user_id: integer - display-name: Get individual annotator agreement stats - request: - name: ApiProjectsStatsAgreementAnnotatorRetrieveRequest - query-parameters: - per_label: - type: optional - default: false - docs: Calculate agreement per label - response: - docs: Individual annotator agreement statistics - type: ApiProjectsStatsAgreementAnnotatorRetrieveResponse - examples: - - path-parameters: - id: 1 - user_id: 1 - response: - body: - Agreement_per_annotator: 1.1 - api_projects_stats_data_filter_retrieve: - path: /api/projects/{id}/stats/data_filter - method: GET - auth: true - docs: Get statistics about user data filters and their usage within a project. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Get user data filter statistics - response: - docs: User data filter statistics - type: ApiProjectsStatsDataFilterRetrieveResponse - examples: - - path-parameters: - id: 1 - response: - body: - filters: - key: value - api_projects_stats_finished_retrieve: - path: /api/projects/{id}/stats/finished - method: GET - auth: true - docs: Get statistics about finished tasks for a project. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Get finished tasks statistics - request: - name: ApiProjectsStatsFinishedRetrieveRequest - query-parameters: - user_pk: - type: optional - docs: User ID to filter statistics by (optional) - response: - docs: Finished tasks statistics - type: ApiProjectsStatsFinishedRetrieveResponse - examples: - - path-parameters: - id: 1 - response: - body: - finished_tasks: 1 - progress: 1.1 - api_projects_stats_lead_time_retrieve: - path: /api/projects/{id}/stats/lead_time - method: GET - auth: true - docs: >- - Get lead time statistics across the project, including average - annotation time. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Get lead time statistics - response: - docs: Lead time statistics - type: ApiProjectsStatsLeadTimeRetrieveResponse - examples: - - path-parameters: - id: 1 - response: - body: - lead_time: - key: value - api_projects_update_stats_retrieve: - path: /api/projects/{id}/update-stats - method: GET - auth: true - docs: Start stats recalculation for given project - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Start stats recalculation - request: - name: ApiProjectsUpdateStatsRetrieveRequest - query-parameters: - stat_type: - type: optional - docs: 'Stat type to recalculate. Possible values: label, stats' - response: - docs: Successful response returns job id - type: map - examples: - - path-parameters: - id: 1 - response: - body: - key: value - api_projects_user_stats_prediction_retrieve: - path: /api/projects/{id}/user-stats/{user_pk}/prediction - method: GET - auth: true - docs: >- - Get prediction agreement statistics for a specific user within a - project. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - user_pk: integer - display-name: Get individual user prediction agreement - response: - docs: Individual user prediction agreement statistics - type: ApiProjectsUserStatsPredictionRetrieveResponse - examples: - - path-parameters: - id: 1 - user_pk: 1 - response: - body: - average_prediction_agreement_per_user: 1.1 - api_projects_user_stats_review_score_retrieve: - path: /api/projects/{id}/user-stats/{user_pk}/review_score - method: GET - auth: true - docs: Get review score statistics for a specific user within a project. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - user_pk: integer - display-name: Get individual user review scores - response: - docs: Individual user review score statistics - type: ApiProjectsUserStatsReviewScoreRetrieveResponse - examples: - - path-parameters: - id: 1 - user_pk: 1 - response: - body: - review_score: 1.1 - api_projects_users_stats_agreement_groundtruth_retrieve: - path: /api/projects/{id}/users/{user_pk}/stats/agreement-groundtruth - method: GET - auth: true - docs: >- - Get ground truth agreement statistics for a specific user within a - project. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - user_pk: integer - display-name: Get individual user ground truth agreement - response: - docs: Individual user ground truth agreement statistics - type: ApiProjectsUsersStatsAgreementGroundtruthRetrieveResponse - examples: - - path-parameters: - id: 1 - user_pk: 1 - response: - body: - agreement: 1.1 - source: - openapi: openapi/openapi.yaml diff --git a/.mock/definition/storageDatabricksFiles.yml b/.mock/definition/storageDatabricksFiles.yml deleted file mode 100644 index 8845d4b97..000000000 --- a/.mock/definition/storageDatabricksFiles.yml +++ /dev/null @@ -1,783 +0,0 @@ -imports: - root: __package__.yml -service: - auth: false - base-path: '' - endpoints: - api_storages_databricks_list: - path: /api/storages/databricks/ - method: GET - auth: true - docs: List Databricks Files import storage connections. - source: - openapi: openapi/openapi.yaml - display-name: Get Databricks import storages - request: - name: ApiStoragesDatabricksListRequest - query-parameters: - ordering: - type: optional - docs: Which field to use when ordering the results. - response: - docs: '' - type: list - examples: - - response: - body: - - catalog: catalog - created_at: '2024-01-15T09:30:00Z' - description: description - host: host - id: 1 - last_sync: '2024-01-15T09:30:00Z' - last_sync_count: 1 - last_sync_job: last_sync_job - meta: - key: value - prefix: prefix - presign: true - presign_ttl: 1 - project: 1 - recursive_scan: true - regex_filter: regex_filter - request_timeout_s: 1 - schema: schema - status: initialized - stream_chunk_bytes: 1 - synchronizable: true - title: title - traceback: traceback - type: type - use_blob_urls: true - verify_tls: true - volume: volume - api_storages_databricks_create: - path: /api/storages/databricks/ - method: POST - auth: true - docs: Create a Databricks Files import storage connection. - source: - openapi: openapi/openapi.yaml - display-name: Create Databricks import storage - request: - body: root.DatabricksImportStorageRequest - content-type: application/json - response: - docs: '' - type: root.DatabricksImportStorage - examples: - - request: - catalog: catalog - host: host - project: 1 - schema: schema - volume: volume - response: - body: - catalog: catalog - created_at: '2024-01-15T09:30:00Z' - description: description - host: host - id: 1 - last_sync: '2024-01-15T09:30:00Z' - last_sync_count: 1 - last_sync_job: last_sync_job - meta: - key: value - prefix: prefix - presign: true - presign_ttl: 1 - project: 1 - recursive_scan: true - regex_filter: regex_filter - request_timeout_s: 1 - schema: schema - status: initialized - stream_chunk_bytes: 1 - synchronizable: true - title: title - traceback: traceback - type: type - use_blob_urls: true - verify_tls: true - volume: volume - api_storages_databricks_validate_create: - path: /api/storages/databricks/validate - method: POST - auth: true - docs: Validate a specific Databricks Files import storage connection. - source: - openapi: openapi/openapi.yaml - display-name: Validate Databricks import storage - request: - body: root.DatabricksImportStorageRequest - content-type: application/json - response: - docs: '' - type: root.DatabricksImportStorage - examples: - - request: - catalog: catalog - host: host - project: 1 - schema: schema - volume: volume - response: - body: - catalog: catalog - created_at: '2024-01-15T09:30:00Z' - description: description - host: host - id: 1 - last_sync: '2024-01-15T09:30:00Z' - last_sync_count: 1 - last_sync_job: last_sync_job - meta: - key: value - prefix: prefix - presign: true - presign_ttl: 1 - project: 1 - recursive_scan: true - regex_filter: regex_filter - request_timeout_s: 1 - schema: schema - status: initialized - stream_chunk_bytes: 1 - synchronizable: true - title: title - traceback: traceback - type: type - use_blob_urls: true - verify_tls: true - volume: volume - api_storages_databricks_retrieve: - path: /api/storages/databricks/{id} - method: GET - auth: true - docs: Retrieve a specific Databricks Files import storage connection. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Get Databricks import storage - response: - docs: '' - type: root.DatabricksImportStorage - examples: - - path-parameters: - id: 1 - response: - body: - catalog: catalog - created_at: '2024-01-15T09:30:00Z' - description: description - host: host - id: 1 - last_sync: '2024-01-15T09:30:00Z' - last_sync_count: 1 - last_sync_job: last_sync_job - meta: - key: value - prefix: prefix - presign: true - presign_ttl: 1 - project: 1 - recursive_scan: true - regex_filter: regex_filter - request_timeout_s: 1 - schema: schema - status: initialized - stream_chunk_bytes: 1 - synchronizable: true - title: title - traceback: traceback - type: type - use_blob_urls: true - verify_tls: true - volume: volume - api_storages_databricks_destroy: - path: /api/storages/databricks/{id} - method: DELETE - auth: true - docs: Delete a specific Databricks Files import storage connection. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Delete Databricks import storage - examples: - - path-parameters: - id: 1 - api_storages_databricks_partial_update: - path: /api/storages/databricks/{id} - method: PATCH - auth: true - docs: Update a specific Databricks Files import storage connection. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Update Databricks import storage - request: - name: PatchedDatabricksImportStorageRequest - body: - properties: - catalog: - type: optional - docs: UC catalog name - validation: - minLength: 1 - description: - type: optional - docs: Cloud storage description - host: - type: optional - docs: Databricks workspace base URL (https://...) - validation: - minLength: 1 - last_sync: - type: optional - docs: Last sync finished time - last_sync_count: - type: optional - docs: Count of tasks synced last time - validation: - min: 0 - max: 2147483647 - last_sync_job: - type: optional - docs: Last sync job ID - validation: - maxLength: 256 - meta: optional - prefix: - type: optional - docs: Path under the volume - presign: - type: optional - docs: Presign not supported; always proxied - presign_ttl: - type: optional - docs: Unused for Databricks; kept for compatibility - validation: - min: 0 - max: 32767 - project: - type: optional - docs: A unique integer value identifying this project. - recursive_scan: - type: optional - docs: Perform recursive scan - regex_filter: - type: optional - docs: Regex for filtering objects - request_timeout_s: - type: optional - validation: - min: 0 - max: 2147483647 - schema: - type: optional - docs: UC schema name - validation: - minLength: 1 - status: optional - stream_chunk_bytes: - type: optional - validation: - min: 0 - max: 2147483647 - synchronizable: - type: optional - default: true - title: - type: optional - docs: Cloud storage title - validation: - maxLength: 256 - token: optional - traceback: - type: optional - docs: Traceback report for the last failed sync - use_blob_urls: - type: optional - docs: Generate blob URLs in tasks - verify_tls: - type: optional - docs: Verify TLS certificates - volume: - type: optional - docs: UC volume name - validation: - minLength: 1 - content-type: application/json - response: - docs: '' - type: root.DatabricksImportStorage - examples: - - path-parameters: - id: 1 - request: {} - response: - body: - catalog: catalog - created_at: '2024-01-15T09:30:00Z' - description: description - host: host - id: 1 - last_sync: '2024-01-15T09:30:00Z' - last_sync_count: 1 - last_sync_job: last_sync_job - meta: - key: value - prefix: prefix - presign: true - presign_ttl: 1 - project: 1 - recursive_scan: true - regex_filter: regex_filter - request_timeout_s: 1 - schema: schema - status: initialized - stream_chunk_bytes: 1 - synchronizable: true - title: title - traceback: traceback - type: type - use_blob_urls: true - verify_tls: true - volume: volume - api_storages_databricks_sync_create: - path: /api/storages/databricks/{id}/sync - method: POST - auth: true - docs: Sync tasks from a Databricks Files import storage. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Sync Databricks import storage - request: - body: root.DatabricksImportStorageRequest - content-type: application/json - response: - docs: '' - type: root.DatabricksImportStorage - examples: - - path-parameters: - id: 1 - request: - catalog: catalog - host: host - project: 1 - schema: schema - volume: volume - response: - body: - catalog: catalog - created_at: '2024-01-15T09:30:00Z' - description: description - host: host - id: 1 - last_sync: '2024-01-15T09:30:00Z' - last_sync_count: 1 - last_sync_job: last_sync_job - meta: - key: value - prefix: prefix - presign: true - presign_ttl: 1 - project: 1 - recursive_scan: true - regex_filter: regex_filter - request_timeout_s: 1 - schema: schema - status: initialized - stream_chunk_bytes: 1 - synchronizable: true - title: title - traceback: traceback - type: type - use_blob_urls: true - verify_tls: true - volume: volume - api_storages_export_databricks_list: - path: /api/storages/export/databricks - method: GET - auth: true - docs: List Databricks Files export storage connections. - source: - openapi: openapi/openapi.yaml - display-name: Get Databricks export storages - request: - name: ApiStoragesExportDatabricksListRequest - query-parameters: - ordering: - type: optional - docs: Which field to use when ordering the results. - response: - docs: '' - type: list - examples: - - response: - body: - - can_delete_objects: true - catalog: catalog - created_at: '2024-01-15T09:30:00Z' - description: description - host: host - id: 1 - last_sync: '2024-01-15T09:30:00Z' - last_sync_count: 1 - last_sync_job: last_sync_job - meta: - key: value - prefix: prefix - project: 1 - regex_filter: regex_filter - request_timeout_s: 1 - schema: schema - status: initialized - stream_chunk_bytes: 1 - synchronizable: true - title: title - traceback: traceback - type: type - use_blob_urls: true - verify_tls: true - volume: volume - api_storages_export_databricks_create: - path: /api/storages/export/databricks - method: POST - auth: true - docs: Create a Databricks Files export storage connection. - source: - openapi: openapi/openapi.yaml - display-name: Create Databricks export storage - request: - body: root.DatabricksExportStorageRequest - content-type: application/json - response: - docs: '' - type: root.DatabricksExportStorage - examples: - - request: - catalog: catalog - host: host - project: 1 - schema: schema - volume: volume - response: - body: - can_delete_objects: true - catalog: catalog - created_at: '2024-01-15T09:30:00Z' - description: description - host: host - id: 1 - last_sync: '2024-01-15T09:30:00Z' - last_sync_count: 1 - last_sync_job: last_sync_job - meta: - key: value - prefix: prefix - project: 1 - regex_filter: regex_filter - request_timeout_s: 1 - schema: schema - status: initialized - stream_chunk_bytes: 1 - synchronizable: true - title: title - traceback: traceback - type: type - use_blob_urls: true - verify_tls: true - volume: volume - api_storages_export_databricks_validate_create: - path: /api/storages/export/databricks/validate - method: POST - auth: true - docs: Validate a specific Databricks Files export storage connection. - source: - openapi: openapi/openapi.yaml - display-name: Validate Databricks export storage - request: - body: root.DatabricksExportStorageRequest - content-type: application/json - response: - docs: '' - type: root.DatabricksExportStorage - examples: - - request: - catalog: catalog - host: host - project: 1 - schema: schema - volume: volume - response: - body: - can_delete_objects: true - catalog: catalog - created_at: '2024-01-15T09:30:00Z' - description: description - host: host - id: 1 - last_sync: '2024-01-15T09:30:00Z' - last_sync_count: 1 - last_sync_job: last_sync_job - meta: - key: value - prefix: prefix - project: 1 - regex_filter: regex_filter - request_timeout_s: 1 - schema: schema - status: initialized - stream_chunk_bytes: 1 - synchronizable: true - title: title - traceback: traceback - type: type - use_blob_urls: true - verify_tls: true - volume: volume - api_storages_export_databricks_retrieve: - path: /api/storages/export/databricks/{id} - method: GET - auth: true - docs: Retrieve a specific Databricks Files export storage connection. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Get Databricks export storage - response: - docs: '' - type: root.DatabricksExportStorage - examples: - - path-parameters: - id: 1 - response: - body: - can_delete_objects: true - catalog: catalog - created_at: '2024-01-15T09:30:00Z' - description: description - host: host - id: 1 - last_sync: '2024-01-15T09:30:00Z' - last_sync_count: 1 - last_sync_job: last_sync_job - meta: - key: value - prefix: prefix - project: 1 - regex_filter: regex_filter - request_timeout_s: 1 - schema: schema - status: initialized - stream_chunk_bytes: 1 - synchronizable: true - title: title - traceback: traceback - type: type - use_blob_urls: true - verify_tls: true - volume: volume - api_storages_export_databricks_destroy: - path: /api/storages/export/databricks/{id} - method: DELETE - auth: true - docs: Delete a specific Databricks Files export storage connection. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Delete Databricks export storage - examples: - - path-parameters: - id: 1 - api_storages_export_databricks_partial_update: - path: /api/storages/export/databricks/{id} - method: PATCH - auth: true - docs: Update a specific Databricks Files export storage connection. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Update Databricks export storage - request: - name: PatchedDatabricksExportStorageRequest - body: - properties: - can_delete_objects: - type: optional - docs: Deletion from storage enabled - catalog: - type: optional - docs: UC catalog name - validation: - minLength: 1 - description: - type: optional - docs: Cloud storage description - host: - type: optional - docs: Databricks workspace base URL (https://...) - validation: - minLength: 1 - last_sync: - type: optional - docs: Last sync finished time - last_sync_count: - type: optional - docs: Count of tasks synced last time - validation: - min: 0 - max: 2147483647 - last_sync_job: - type: optional - docs: Last sync job ID - validation: - maxLength: 256 - meta: optional - prefix: - type: optional - docs: Export path prefix under the volume - project: - type: optional - docs: A unique integer value identifying this project. - regex_filter: - type: optional - docs: Regex for filtering objects - request_timeout_s: - type: optional - validation: - min: 0 - max: 2147483647 - schema: - type: optional - docs: UC schema name - validation: - minLength: 1 - status: optional - stream_chunk_bytes: - type: optional - validation: - min: 0 - max: 2147483647 - synchronizable: - type: optional - default: true - title: - type: optional - docs: Cloud storage title - validation: - maxLength: 256 - token: optional - traceback: - type: optional - docs: Traceback report for the last failed sync - use_blob_urls: - type: optional - docs: Generate blob URLs in tasks - verify_tls: - type: optional - docs: Verify TLS certificates - volume: - type: optional - docs: UC volume name - validation: - minLength: 1 - content-type: application/json - response: - docs: '' - type: root.DatabricksExportStorage - examples: - - path-parameters: - id: 1 - request: {} - response: - body: - can_delete_objects: true - catalog: catalog - created_at: '2024-01-15T09:30:00Z' - description: description - host: host - id: 1 - last_sync: '2024-01-15T09:30:00Z' - last_sync_count: 1 - last_sync_job: last_sync_job - meta: - key: value - prefix: prefix - project: 1 - regex_filter: regex_filter - request_timeout_s: 1 - schema: schema - status: initialized - stream_chunk_bytes: 1 - synchronizable: true - title: title - traceback: traceback - type: type - use_blob_urls: true - verify_tls: true - volume: volume - api_storages_export_databricks_sync_create: - path: /api/storages/export/databricks/{id}/sync - method: POST - auth: true - docs: Export annotations to a Databricks Files storage. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Sync Databricks export storage - request: - body: root.DatabricksExportStorageRequest - content-type: application/json - response: - docs: '' - type: root.DatabricksExportStorage - examples: - - path-parameters: - id: 1 - request: - catalog: catalog - host: host - project: 1 - schema: schema - volume: volume - response: - body: - can_delete_objects: true - catalog: catalog - created_at: '2024-01-15T09:30:00Z' - description: description - host: host - id: 1 - last_sync: '2024-01-15T09:30:00Z' - last_sync_count: 1 - last_sync_job: last_sync_job - meta: - key: value - prefix: prefix - project: 1 - regex_filter: regex_filter - request_timeout_s: 1 - schema: schema - status: initialized - stream_chunk_bytes: 1 - synchronizable: true - title: title - traceback: traceback - type: type - use_blob_urls: true - verify_tls: true - volume: volume - source: - openapi: openapi/openapi.yaml diff --git a/.mock/definition/tasks.yml b/.mock/definition/tasks.yml index c45adf0fa..cf34d69ff 100644 --- a/.mock/definition/tasks.yml +++ b/.mock/definition/tasks.yml @@ -200,18 +200,21 @@ service: meta: key: value overlap: 1 + precomputed_agreement: 1.1 predictions: - {} predictions_model_versions: predictions_model_versions predictions_results: predictions_results predictions_score: 1.1 project: 1 + review_time: 1 reviewed: true reviewers: - key: value reviewers_count: 1 reviews_accepted: 1 reviews_rejected: 1 + state: state storage_filename: storage_filename total_annotations: 1 total_predictions: 1 @@ -305,6 +308,82 @@ service: response: docs: '' type: root.LseTask + examples: + - name: Create Task + request: + data: + image: https://example.com/image.jpg + text: Hello, world! + project: 1 + response: + body: + agreement: agreement + agreement_selected: agreement_selected + annotations: annotations + annotations_ids: annotations_ids + annotations_results: annotations_results + annotators: + - 1 + annotators_count: 1 + avg_lead_time: 1.1 + cancelled_annotations: 1 + comment_authors: + - key: value + comment_authors_count: 1 + comment_count: 1 + comments: comments + completed_at: '2024-01-15T09:30:00Z' + created_at: '2024-01-15T09:30:00Z' + data: + key: value + draft_exists: true + drafts: + - created_at: '2024-01-15T09:30:00Z' + result: + - key: value + updated_at: '2024-01-15T09:30:00Z' + file_upload: file_upload + ground_truth: true + id: 1 + inner_id: 1 + is_labeled: true + last_comment_updated_at: '2024-01-15T09:30:00Z' + meta: + key: value + overlap: 1 + precomputed_agreement: 1.1 + predictions: + - created_at: '2024-01-15T09:30:00Z' + model: + key: value + model_run: + key: value + model_version: model_version + project: 1 + result: + - key: value + score: 1.1 + task: 1 + updated_at: '2024-01-15T09:30:00Z' + predictions_model_versions: predictions_model_versions + predictions_results: predictions_results + predictions_score: 1.1 + project: 1 + review_time: 1 + reviewed: true + reviewers: + - key: value + reviewers_count: 1 + reviews_accepted: 1 + reviews_rejected: 1 + state: state + storage_filename: storage_filename + total_annotations: 1 + total_predictions: 1 + unresolved_comment_count: 1 + updated_at: '2024-01-15T09:30:00Z' + updated_by: + - key: value audiences: - public get: @@ -363,6 +442,7 @@ service: meta: key: value overlap: 1 + precomputed_agreement: 1.1 predictions: - created_at: '2024-01-15T09:30:00Z' model: @@ -380,12 +460,14 @@ service: predictions_results: predictions_results predictions_score: 1.1 project: 1 + review_time: 1 reviewed: true reviewers: - key: value reviewers_count: 1 reviews_accepted: 1 reviews_rejected: 1 + state: state storage_filename: storage_filename total_annotations: 1 total_predictions: 1 @@ -456,6 +538,9 @@ service: validation: min: -2147483648 max: 2147483647 + precomputed_agreement: + type: optional + docs: Average agreement score for the task predictions_score: optional project: type: optional @@ -517,6 +602,7 @@ service: meta: key: value overlap: 1 + precomputed_agreement: 1.1 predictions: - created_at: '2024-01-15T09:30:00Z' model: @@ -534,12 +620,14 @@ service: predictions_results: predictions_results predictions_score: 1.1 project: 1 + review_time: 1 reviewed: true reviewers: - key: value reviewers_count: 1 reviews_accepted: 1 reviews_rejected: 1 + state: state storage_filename: storage_filename total_annotations: 1 total_predictions: 1 @@ -556,41 +644,41 @@ service: docs: |2- Create a new task event to track user interactions and system events during annotation. - + This endpoint is designed to receive events from the frontend labeling interface to enable accurate lead time calculation and detailed annotation analytics. - + ## Event Types - + **Core Annotation Events:** - `annotation_loaded` - When annotation interface is loaded - `annotation_submitted` - When annotation is submitted - `annotation_updated` - When annotation is modified - `annotation_reviewed` - When annotation is reviewed - + **User Activity Events:** - `visibility_change` - When page visibility changes (tab switch, minimize) - `idle_detected` - When user goes idle - `idle_resumed` - When user returns from idle - + **Interaction Events:** - `region_finished_drawing` - When annotation region is completed - `region_deleted` - When annotation regions are removed - `hotkey_pressed` - When keyboard shortcuts are used - + **Media Events:** - `video_playback_start/end` - Video playback control - `audio_playback_start/end` - Audio playback control - `video_scrub` - Video timeline scrubbing - + ## Usage - + Events are automatically associated with the task specified in the URL path. The current user is automatically set as the actor. Project and organization are derived from the task context. - + ## Example Request - + ```json { "event_key": "annotation_loaded", diff --git a/.mock/definition/users.yml b/.mock/definition/users.yml index d73ae86d2..ba77aca4e 100644 --- a/.mock/definition/users.yml +++ b/.mock/definition/users.yml @@ -8,10 +8,17 @@ service: path: /api/current-user method: GET auth: true - docs: Get info about the currently authenticated user. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get info about the currently authenticated user. source: openapi: openapi/openapi.yaml - display-name: Get current user info + display-name: ✨ Get current user info response: docs: '' type: root.LseUserApi @@ -35,6 +42,10 @@ service: - active: active organization_id: 1 role: role + organization_membership: + active: active + organization_id: 1 + role: role phone: phone username: username audiences: @@ -43,10 +54,17 @@ service: path: /api/current-user method: PATCH auth: true - docs: Update details for the currently authenticated user. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update details for the currently authenticated user. source: openapi: openapi/openapi.yaml - display-name: Update current user + display-name: ✨ Update current user request: name: PatchedLseUserSerializerUpdateRequest body: @@ -109,6 +127,10 @@ service: - active: active organization_id: 1 role: role + organization_membership: + active: active + organization_id: 1 + role: role phone: phone username: username audiences: @@ -236,7 +258,13 @@ service: - active: active organization_id: 1 role: role + organization_membership: + active: active + organization_id: 1 + role: role pause: pause + permissions: + - permissions phone: phone username: username audiences: @@ -278,6 +306,10 @@ service: - active: active organization_id: 1 role: role + organization_membership: + active: active + organization_id: 1 + role: role phone: phone username: username audiences: @@ -360,6 +392,10 @@ service: - active: active organization_id: 1 role: role + organization_membership: + active: active + organization_id: 1 + role: role pause: pause phone: phone username: username @@ -416,6 +452,10 @@ service: - active: active organization_id: 1 role: role + organization_membership: + active: active + organization_id: 1 + role: role pause: pause phone: phone username: username @@ -533,6 +573,10 @@ service: - active: active organization_id: 1 role: role + organization_membership: + active: active + organization_id: 1 + role: role pause: pause phone: phone username: username diff --git a/.mock/definition/workspaces.yml b/.mock/definition/workspaces.yml index a5a3bee8c..c1b946762 100644 --- a/.mock/definition/workspaces.yml +++ b/.mock/definition/workspaces.yml @@ -9,6 +9,12 @@ service: method: GET auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all workspaces for your organization. Workspaces in Label Studio let you organize your projects and users into separate spaces. This is useful for managing different teams, departments, or projects within @@ -16,7 +22,7 @@ service: documentation](https://docs.humansignal.com/workspaces). source: openapi: openapi/openapi.yaml - display-name: List workspaces + display-name: ✨ List workspaces request: name: WorkspacesListRequest query-parameters: @@ -46,6 +52,12 @@ service: method: POST auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new workspace. Workspaces in Label Studio let you organize your projects and users into separate spaces. This is useful for managing different teams, departments, or projects within your organization. For @@ -53,7 +65,7 @@ service: documentation](https://docs.humansignal.com/workspaces). source: openapi: openapi/openapi.yaml - display-name: Create workspace + display-name: ✨ Create workspace request: name: WorkspaceRequest body: @@ -99,12 +111,19 @@ service: path: /api/workspaces/{id}/ method: GET auth: true - docs: Retrieve details for a specific workspace by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve details for a specific workspace by ID. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get workspace + display-name: ✨ Get workspace response: docs: '' type: root.Workspace @@ -126,12 +145,19 @@ service: path: /api/workspaces/{id}/ method: DELETE auth: true - docs: Delete a specific workspace by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific workspace by ID. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Delete workspace + display-name: ✨ Delete workspace examples: - path-parameters: id: 1 @@ -141,12 +167,19 @@ service: path: /api/workspaces/{id}/ method: PATCH auth: true - docs: Update settings for a specific workspace by ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update settings for a specific workspace by ID. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Update workspace + display-name: ✨ Update workspace request: name: PatchedWorkspaceRequest body: @@ -189,274 +222,5 @@ service: title: title audiences: - public - api_workspaces_projects_retrieve: - path: /api/workspaces/{id}/projects/ - method: GET - auth: true - docs: Retrieve a list of all projects in a specific workspace. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: List workspace projects - response: - docs: '' - type: root.Project - examples: - - path-parameters: - id: 1 - response: - body: - color: color - config_has_control_tags: true - config_suitable_for_bulk_annotation: true - control_weights: - key: value - created_at: '2024-01-15T09:30:00Z' - created_by: - avatar: avatar - email: email - first_name: first_name - id: 1 - last_name: last_name - description: description - enable_empty_annotation: true - evaluate_predictions_automatically: true - expert_instruction: expert_instruction - finished_task_number: 1 - ground_truth_number: 1 - id: 1 - is_draft: true - is_published: true - label_config: label_config - maximum_annotations: 1 - min_annotations_to_start_training: 1 - model_version: model_version - num_tasks_with_annotations: 1 - organization: 1 - overlap_cohort_percentage: 1 - parsed_label_config: - key: value - pinned_at: '2024-01-15T09:30:00Z' - queue_done: 1 - queue_total: 1 - reveal_preannotations_interactively: true - sampling: Sequential sampling - show_annotation_history: true - show_collab_predictions: true - show_ground_truth_first: true - show_instruction: true - show_overlap_first: true - show_skip_button: true - skip_queue: REQUEUE_FOR_ME - skipped_annotations_number: 1 - start_training_on_annotation_update: true - task_data_login: task_data_login - task_data_password: task_data_password - task_number: 1 - title: title - total_annotations_number: 1 - total_predictions_number: 1 - useful_annotation_number: 1 - api_workspaces_projects_create: - path: /api/workspaces/{id}/projects/ - method: POST - auth: true - docs: Create a project in a specific workspace. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Create workspace project - request: - name: ProjectRequest - body: - properties: - color: - type: optional - validation: - maxLength: 16 - control_weights: optional - created_by: - type: optional - docs: Project owner - description: - type: optional - docs: Project description - enable_empty_annotation: - type: optional - docs: Allow annotators to submit empty annotations - evaluate_predictions_automatically: - type: optional - docs: Retrieve and display predictions when loading a task - expert_instruction: - type: optional - docs: Labeling instructions in HTML format - is_draft: - type: optional - docs: Whether or not the project is in the middle of being created - is_published: - type: optional - docs: Whether or not the project is published to annotators - label_config: - type: optional - docs: Label config in XML format. See more about it in documentation - maximum_annotations: - type: optional - docs: >- - Maximum number of annotations for one task. If the number of - annotations per task is equal or greater to this value, the task - is completed (is_labeled=True) - validation: - min: -2147483648 - max: 2147483647 - min_annotations_to_start_training: - type: optional - docs: >- - Minimum number of completed tasks after which model training is - started - validation: - min: -2147483648 - max: 2147483647 - model_version: - type: optional - docs: Machine learning model version - organization: optional - overlap_cohort_percentage: - type: optional - validation: - min: -2147483648 - max: 2147483647 - pinned_at: - type: optional - docs: Pinned date and time - reveal_preannotations_interactively: - type: optional - docs: Reveal pre-annotations interactively - sampling: optional - show_annotation_history: - type: optional - docs: Show annotation history to annotator - show_collab_predictions: - type: optional - docs: If set, the annotator can view model predictions - show_ground_truth_first: optional - show_instruction: - type: optional - docs: Show instructions to the annotator before they start - show_overlap_first: optional - show_skip_button: - type: optional - docs: >- - Show a skip button in interface and allow annotators to skip the - task - skip_queue: optional - task_data_login: - type: optional - docs: 'Task data credentials: login' - validation: - maxLength: 256 - task_data_password: - type: optional - docs: 'Task data credentials: password' - validation: - maxLength: 256 - title: - type: optional - docs: Project name. Must be between 3 and 50 characters long. - validation: - minLength: 3 - maxLength: 50 - content-type: application/json - response: - docs: '' - type: root.Project - examples: - - path-parameters: - id: 1 - request: {} - response: - body: - color: color - config_has_control_tags: true - config_suitable_for_bulk_annotation: true - control_weights: - key: value - created_at: '2024-01-15T09:30:00Z' - created_by: - avatar: avatar - email: email - first_name: first_name - id: 1 - last_name: last_name - description: description - enable_empty_annotation: true - evaluate_predictions_automatically: true - expert_instruction: expert_instruction - finished_task_number: 1 - ground_truth_number: 1 - id: 1 - is_draft: true - is_published: true - label_config: label_config - maximum_annotations: 1 - min_annotations_to_start_training: 1 - model_version: model_version - num_tasks_with_annotations: 1 - organization: 1 - overlap_cohort_percentage: 1 - parsed_label_config: - key: value - pinned_at: '2024-01-15T09:30:00Z' - queue_done: 1 - queue_total: 1 - reveal_preannotations_interactively: true - sampling: Sequential sampling - show_annotation_history: true - show_collab_predictions: true - show_ground_truth_first: true - show_instruction: true - show_overlap_first: true - show_skip_button: true - skip_queue: REQUEUE_FOR_ME - skipped_annotations_number: 1 - start_training_on_annotation_update: true - task_data_login: task_data_login - task_data_password: task_data_password - task_number: 1 - title: title - total_annotations_number: 1 - total_predictions_number: 1 - useful_annotation_number: 1 - api_workspaces_projects_destroy: - path: /api/workspaces/{id}/projects/ - method: DELETE - auth: true - docs: Delete projects from a specific workspace. - source: - openapi: openapi/openapi.yaml - path-parameters: - id: integer - display-name: Remove workspace projects - examples: - - path-parameters: - id: 1 source: openapi: openapi/openapi.yaml -types: - ProjectRequestSampling: - discriminated: false - union: - - root.SamplingEnum - - root.NullEnum - source: - openapi: openapi/openapi.yaml - inline: true - ProjectRequestSkipQueue: - discriminated: false - union: - - root.SkipQueueEnum - - root.NullEnum - source: - openapi: openapi/openapi.yaml - inline: true diff --git a/.mock/definition/workspaces/members.yml b/.mock/definition/workspaces/members.yml index f48b32497..567015fac 100644 --- a/.mock/definition/workspaces/members.yml +++ b/.mock/definition/workspaces/members.yml @@ -8,12 +8,19 @@ service: path: /api/workspaces/{id}/memberships/ method: GET auth: true - docs: Get a list of all members in a specific workspace. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a list of all members in a specific workspace. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: List workspace memberships + display-name: ✨ List workspace memberships response: docs: A list of workspace memberships type: list @@ -44,6 +51,10 @@ service: - active: active organization_id: 1 role: role + organization_membership: + active: active + organization_id: 1 + role: role pause: pause phone: phone username: username @@ -54,12 +65,19 @@ service: path: /api/workspaces/{id}/memberships/ method: POST auth: true - docs: Add a new workspace member by user ID. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Add a new workspace member by user ID. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Create workspace membership + display-name: ✨ Create workspace membership request: name: WorkspaceMemberCreateRequest body: @@ -90,13 +108,19 @@ service: method: DELETE auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Remove a specific member by ID from a workspace. This endpoint expects an object like `{"user_id": 123}`. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Delete workspace membership + display-name: ✨ Delete workspace membership examples: - path-parameters: id: 1 diff --git a/.mock/definition/workspaces/members/bulk.yml b/.mock/definition/workspaces/members/bulk.yml index 2c3bb4ec8..96b6ddd44 100644 --- a/.mock/definition/workspaces/members/bulk.yml +++ b/.mock/definition/workspaces/members/bulk.yml @@ -17,12 +17,19 @@ service: path: /api/workspaces/{id}/memberships/bulk/ method: POST auth: true - docs: Assign workspace members in bulk. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Assign workspace members in bulk. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Bulk assign workspace members + display-name: ✨ Bulk assign workspace members request: name: WorkspaceMemberBulkAssignRequest body: @@ -49,13 +56,19 @@ service: method: DELETE auth: true docs: >- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Unassign workspace members in bulk. Allows the same request body as bulk assign. source: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Bulk unassign workspace members + display-name: ✨ Bulk unassign workspace members response: docs: '' type: BulkDeleteResponse diff --git a/.mock/definition/workspaces/members/paginated.yml b/.mock/definition/workspaces/members/paginated.yml index a1b4e8da2..5828b26d1 100644 --- a/.mock/definition/workspaces/members/paginated.yml +++ b/.mock/definition/workspaces/members/paginated.yml @@ -8,7 +8,14 @@ service: path: /api/workspaces/{id}/memberships/paginated/ method: GET auth: true - docs: Retrieve the members for a specific workspace. + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve the members for a specific workspace. pagination: offset: $request.page results: $response.results @@ -16,7 +23,7 @@ service: openapi: openapi/openapi.yaml path-parameters: id: integer - display-name: Get workspace members paginated + display-name: ✨ Get workspace members paginated request: name: PaginatedListRequest query-parameters: @@ -65,6 +72,10 @@ service: - active: active organization_id: 1 role: role + organization_membership: + active: active + organization_id: 1 + role: role pause: pause phone: phone username: username diff --git a/.mock/definition/workspaces/projects.yml b/.mock/definition/workspaces/projects.yml new file mode 100644 index 000000000..4a85cc86d --- /dev/null +++ b/.mock/definition/workspaces/projects.yml @@ -0,0 +1,138 @@ +imports: + root: ../__package__.yml +service: + auth: false + base-path: '' + endpoints: + list: + path: /api/workspaces/{id}/projects/ + method: GET + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a list of all projects in a specific workspace. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ List workspace projects + response: + docs: Projects list + type: list + examples: + - path-parameters: + id: 1 + response: + body: + - color: color + config_has_control_tags: true + config_suitable_for_bulk_annotation: true + control_weights: + key: value + created_at: '2024-01-15T09:30:00Z' + created_by: + avatar: avatar + email: email + first_name: first_name + id: 1 + last_name: last_name + description: description + enable_empty_annotation: true + evaluate_predictions_automatically: true + expert_instruction: expert_instruction + finished_task_number: 1 + ground_truth_number: 1 + id: 1 + is_draft: true + is_published: true + label_config: label_config + maximum_annotations: 1 + min_annotations_to_start_training: 1 + model_version: model_version + num_tasks_with_annotations: 1 + organization: 1 + overlap_cohort_percentage: 1 + parsed_label_config: + key: value + pinned_at: '2024-01-15T09:30:00Z' + queue_done: 1 + queue_total: 1 + reveal_preannotations_interactively: true + sampling: Sequential sampling + show_annotation_history: true + show_collab_predictions: true + show_ground_truth_first: true + show_instruction: true + show_overlap_first: true + show_skip_button: true + skip_queue: REQUEUE_FOR_ME + skipped_annotations_number: 1 + start_training_on_annotation_update: true + task_data_login: task_data_login + task_data_password: task_data_password + task_number: 1 + title: title + total_annotations_number: 1 + total_predictions_number: 1 + useful_annotation_number: 1 + audiences: + - public + add: + path: /api/workspaces/{id}/projects/ + method: POST + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Add a project to a specific workspace. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Add workspace project + request: + name: WorkspaceProjectsRequest + body: + properties: + project: integer + content-type: application/json + examples: + - path-parameters: + id: 1 + request: + project: 1 + audiences: + - public + remove: + path: /api/workspaces/{id}/projects/ + method: DELETE + auth: true + docs: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Remove a project from a specific workspace. + source: + openapi: openapi/openapi.yaml + path-parameters: + id: integer + display-name: ✨ Remove workspace project + examples: + - path-parameters: + id: 1 + audiences: + - public + source: + openapi: openapi/openapi.yaml diff --git a/.mock/openapi/openapi.yaml b/.mock/openapi/openapi.yaml index 497910b4c..315a2c037 100644 --- a/.mock/openapi/openapi.yaml +++ b/.mock/openapi/openapi.yaml @@ -8,7 +8,14 @@ info: paths: /api/activity-logs/: get: - description: Retrieve activity logs filtered by workspace, project, user, HTTP method, date range or search query. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve activity logs filtered by workspace, project, user, HTTP method, date range or search query. operationId: api_activity_logs_list parameters: - description: End date/time (ISO-8601) for log filtering. @@ -83,16 +90,106 @@ paths: description: No more logs found security: - Token: [] - summary: Get activity logs + summary: ✨ Get activity logs tags: - Activity Logs x-fern-audiences: - public x-fern-sdk-group-name: activity_logs x-fern-sdk-method-name: list + /api/analytics/kpis/: + get: + description: Returns metadata for all available KPI (Key Performance Indicator) classes. Each KPI includes its key, label, base class, dependencies, and configuration. This endpoint is useful for discovering available metrics and understanding their relationships and requirements. + operationId: api_analytics_kpis_retrieve + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/KPIMetadata' + type: array + description: List of available KPIs with metadata + security: + - Token: [] + summary: List all available KPIs + tags: + - Analytics + /api/analytics/kpis/{kpi_key}: + get: + description: Retrieve data for a specific KPI with support for filtering and segmentation. Can segment by time (hourly, daily, weekly, monthly, yearly), by user, or both (2D matrix). If no segmentation is specified, returns a single total value. Supports filtering by projects, members, and date range. Date filters are interpreted in the specified timezone (required parameter). + operationId: api_analytics_kpis_retrieve_2 + parameters: + - description: End date for filtering (ISO format) + in: query + name: end + schema: + format: date-time + type: string + - description: KPI identifier (key) + in: path + name: kpi_key + required: true + schema: + type: string + - description: Comma-separated user IDs. If empty, includes all organization members. + in: query + name: members + schema: + type: string + - description: Comma-separated project IDs. If empty, includes all organization projects. + in: query + name: projects + schema: + type: string + - description: 'Time granularity: hourly, daily, weekly, monthly, yearly' + in: query + name: segment_by_time + schema: + type: string + - description: Whether to segment results by user + in: query + name: segment_by_user + schema: + type: boolean + - description: Start date for filtering (ISO format) + in: query + name: start + schema: + format: date-time + type: string + - description: Timezone for date filtering (IANA timezone name, e.g., "America/New_York", "UTC"). The start and end dates will be interpreted in this timezone. + in: query + name: tz + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/KPIDetailResponse' + description: KPI data with requested segmentation + '400': + description: Invalid parameters or unsupported KPI type + '404': + description: KPI not found or organization not found + security: + - Token: [] + summary: Get KPI data with optional segmentation + tags: + - Analytics /api/annotation-history/: delete: - description: Delete all annotation history items for a specific annotation, task or project. This method is available only for users with administrator roles. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete all annotation history items for a specific annotation, task or project. This method is available only for users with administrator roles. operationId: api_annotation_history_destroy parameters: - description: Annotation ID to delete annotation history items for. @@ -123,7 +220,7 @@ paths: description: Returns a dict containing the count of removed items. security: - Token: [] - summary: Delete annotation history items + summary: ✨ Delete annotation history items tags: - Annotation History x-fern-audiences: @@ -131,7 +228,14 @@ paths: x-fern-sdk-group-name: annotation_history x-fern-sdk-method-name: delete get: - description: 'List annotation history items for an annotation. Annotation history logs all actions performed with annotations, such as: imports, submits, updates, reviews, and more. Users can view annotation history items in the Annotation History panel during labeling.' + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List annotation history items for an annotation. Annotation history logs all actions performed with annotations, such as: imports, submits, updates, reviews, and more. Users can view annotation history items in the Annotation History panel during labeling. operationId: api_annotation_history_list parameters: - description: Annotation ID to get annotation history items for. @@ -156,7 +260,7 @@ paths: description: '' security: - Token: [] - summary: List all annotation history items for annotation + summary: ✨ List all annotation history items for annotation tags: - Annotation History x-fern-audiences: @@ -165,7 +269,14 @@ paths: x-fern-sdk-method-name: list /api/annotation-reviews/: get: - description: List all reviews for a specific annotation ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all reviews for a specific annotation ID. operationId: api_annotation_reviews_list parameters: - in: query @@ -193,7 +304,7 @@ paths: description: '' security: - Token: [] - summary: List reviews + summary: ✨ List reviews tags: - Annotation Reviews x-fern-audiences: @@ -201,7 +312,14 @@ paths: x-fern-sdk-group-name: annotation_reviews x-fern-sdk-method-name: list post: - description: Create a review for a specific annotation ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a review for a specific annotation ID. operationId: api_annotation_reviews_create parameters: - description: Whether to postprocess the review asynchronously. @@ -230,7 +348,7 @@ paths: description: '' security: - Token: [] - summary: Create review + summary: ✨ Create review tags: - Annotation Reviews x-fern-audiences: @@ -239,7 +357,14 @@ paths: x-fern-sdk-method-name: create /api/annotation-reviews/{id}/: delete: - description: Delete a review by ID + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a review by ID operationId: api_annotation_reviews_destroy parameters: - description: A unique integer value identifying this annotation review. @@ -253,7 +378,7 @@ paths: description: No response body security: - Token: [] - summary: Delete review + summary: ✨ Delete review tags: - Annotation Reviews x-fern-audiences: @@ -261,7 +386,14 @@ paths: x-fern-sdk-group-name: annotation_reviews x-fern-sdk-method-name: delete get: - description: Retrieve a specific review by ID for an annotation. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a specific review by ID for an annotation. operationId: api_annotation_reviews_retrieve parameters: - description: A unique integer value identifying this annotation review. @@ -279,7 +411,7 @@ paths: description: '' security: - Token: [] - summary: Get review + summary: ✨ Get review tags: - Annotation Reviews x-fern-audiences: @@ -287,7 +419,14 @@ paths: x-fern-sdk-group-name: annotation_reviews x-fern-sdk-method-name: get patch: - description: Update a specific review by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific review by ID. operationId: api_annotation_reviews_partial_update parameters: - description: A unique integer value identifying this annotation review. @@ -316,7 +455,7 @@ paths: description: '' security: - Token: [] - summary: Update review + summary: ✨ Update review tags: - Annotation Reviews x-fern-audiences: @@ -324,7 +463,14 @@ paths: x-fern-sdk-group-name: annotation_reviews x-fern-sdk-method-name: update put: - description: Overwrite a specific review by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overwrite a specific review by ID. operationId: api_annotation_reviews_update parameters: - description: A unique integer value identifying this annotation review. @@ -354,7 +500,7 @@ paths: description: '' security: - Token: [] - summary: Put review + summary: ✨ Put review tags: - Annotation Reviews x-fern-audiences: @@ -617,7 +763,14 @@ paths: - internal /api/billing/info: get: - description: Retrieve billing checks and feature flags for the active organization. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve billing checks and feature flags for the active organization. operationId: api_billing_info_retrieve responses: '200': @@ -688,7 +841,6 @@ paths: public_verify_alg: - RS256 public_verify_key: '....' - hide_storage_settings_for_manager: false manual_role_management: false manual_workspace_management: false secure_mode: false @@ -758,7 +910,6 @@ paths: public_verify_alg: - RS256 public_verify_key: '....' - hide_storage_settings_for_manager: false manual_role_management: false manual_workspace_management: false secure_mode: false @@ -828,7 +979,6 @@ paths: public_verify_alg: - RS256 public_verify_key: '....' - hide_storage_settings_for_manager: false manual_role_management: true manual_workspace_management: true secure_mode: false @@ -839,7 +989,7 @@ paths: description: Billing information for the active organization security: - Token: [] - summary: Get billing info + summary: ✨ Get billing info tags: - Billing x-fern-audiences: @@ -876,7 +1026,7 @@ paths: tags: - Blueprints x-fern-audiences: - - public + - internal x-fern-sdk-group-name: blueprints x-fern-sdk-method-name: create /api/blueprints/{id}/: @@ -898,7 +1048,7 @@ paths: tags: - Blueprints x-fern-audiences: - - public + - internal x-fern-sdk-group-name: blueprints x-fern-sdk-method-name: delete /api/blueprints/{share_id}/create-project: @@ -926,7 +1076,14 @@ paths: - internal /api/comments/: get: - description: List all comments for a specific annotation ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all comments for a specific annotation ID. operationId: api_comments_list parameters: - in: query @@ -967,7 +1124,7 @@ paths: description: List of comments security: - Token: [] - summary: List comments + summary: ✨ List comments tags: - Comments x-fern-audiences: @@ -975,7 +1132,14 @@ paths: x-fern-sdk-group-name: comments x-fern-sdk-method-name: list post: - description: Create a comment for a specific annotation ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a comment for a specific annotation ID. operationId: api_comments_create parameters: - description: Expand the created_by field @@ -1003,7 +1167,7 @@ paths: description: '' security: - Token: [] - summary: Create comment + summary: ✨ Create comment tags: - Comments x-fern-audiences: @@ -1012,7 +1176,14 @@ paths: x-fern-sdk-method-name: create /api/comments/export/: get: - description: Export comments to CSV file + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Export comments to CSV file operationId: api_comments_export_retrieve parameters: - in: query @@ -1051,7 +1222,7 @@ paths: description: CSV file with comments security: - Token: [] - summary: Export comments to CSV + summary: ✨ Export comments to CSV tags: - Comments x-fern-audiences: @@ -1060,7 +1231,14 @@ paths: x-fern-sdk-method-name: export /api/comments/{id}/: delete: - description: Delete a comment by ID + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a comment by ID operationId: api_comments_destroy parameters: - description: Expand the created_by field @@ -1078,7 +1256,7 @@ paths: description: No response body security: - Token: [] - summary: Delete comment + summary: ✨ Delete comment tags: - Comments x-fern-audiences: @@ -1086,7 +1264,14 @@ paths: x-fern-sdk-group-name: comments x-fern-sdk-method-name: delete get: - description: Retrieve a specific comment by ID for an annotation. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a specific comment by ID for an annotation. operationId: api_comments_retrieve parameters: - description: Expand the created_by field @@ -1108,7 +1293,7 @@ paths: description: '' security: - Token: [] - summary: Get comment + summary: ✨ Get comment tags: - Comments x-fern-audiences: @@ -1116,7 +1301,14 @@ paths: x-fern-sdk-group-name: comments x-fern-sdk-method-name: get patch: - description: Update a specific comment by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific comment by ID. operationId: api_comments_partial_update parameters: - description: Expand the created_by field @@ -1149,7 +1341,7 @@ paths: description: '' security: - Token: [] - summary: Update comment + summary: ✨ Update comment tags: - Comments x-fern-audiences: @@ -1157,7 +1349,14 @@ paths: x-fern-sdk-group-name: comments x-fern-sdk-method-name: update put: - description: Overwrite a specific comment by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overwrite a specific comment by ID. operationId: api_comments_update parameters: - description: Expand the created_by field @@ -1190,14 +1389,21 @@ paths: description: '' security: - Token: [] - summary: Put comment + summary: ✨ Put comment tags: - Comments x-fern-audiences: - internal /api/current-user: get: - description: Get info about the currently authenticated user. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get info about the currently authenticated user. operationId: api_current_user_retrieve responses: '200': @@ -1208,7 +1414,7 @@ paths: description: '' security: - Token: [] - summary: Get current user info + summary: ✨ Get current user info tags: - Users x-fern-audiences: @@ -1216,7 +1422,14 @@ paths: x-fern-sdk-group-name: users x-fern-sdk-method-name: get_current_user patch: - description: Update details for the currently authenticated user. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update details for the currently authenticated user. operationId: api_current_user_partial_update requestBody: content: @@ -1238,7 +1451,7 @@ paths: description: '' security: - Token: [] - summary: Update current user + summary: ✨ Update current user tags: - Users x-fern-audiences: @@ -2838,8 +3051,12 @@ paths: title: Order type: integer permission: - title: Permission - type: string + oneOf: + - type: string + - description: List of permissions (user needs any all of them) + items: + type: string + type: array title: title: Title type: string @@ -3837,7 +4054,14 @@ paths: x-fern-sdk-method-name: update /api/inference-runs/{id}/indicators/: get: - description: Get key indicators for the Prompt dashboard. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get key indicators for the Prompt dashboard. operationId: api_inference_runs_indicators_retrieve parameters: - in: path @@ -3861,7 +4085,7 @@ paths: description: Key indicators security: - Token: [] - summary: Get key indicators + summary: ✨ Get key indicators tags: - Prompts x-fern-audiences: @@ -3872,7 +4096,14 @@ paths: x-fern-sdk-method-name: list /api/inference-runs/{id}/indicators/{indicator_key}: get: - description: Get a specific key indicator for the Prompt dashboard. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific key indicator for the Prompt dashboard. operationId: api_inference_runs_indicators_retrieve_2 parameters: - in: path @@ -3894,7 +4125,7 @@ paths: description: Key indicator security: - Token: [] - summary: Get key indicator + summary: ✨ Get key indicator tags: - Prompts x-fern-audiences: @@ -3950,7 +4181,14 @@ paths: x-fern-sdk-method-name: reset_token /api/invite/revoke: post: - description: Revoke invite to organization + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Revoke invite to organization operationId: api_invite_revoke_create requestBody: content: @@ -3969,7 +4207,7 @@ paths: description: Invite revoked security: - Token: [] - summary: Revoke invite + summary: ✨ Revoke invite tags: - Organizations - Invites @@ -3981,7 +4219,14 @@ paths: x-fern-sdk-method-name: revoke_invite /api/invite/send-email: post: - description: Send email with invite to organization + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Send email with invite to organization operationId: api_invite_send_email_create requestBody: content: @@ -4002,7 +4247,7 @@ paths: description: Organization does not allow to invite people security: - Token: [] - summary: Send email with invite + summary: ✨ Send email with invite tags: - Organizations - Invites @@ -4747,7 +4992,7 @@ paths: x-fern-sdk-method-name: predict_interactive /api/ml/{id}/predict: post: - description: "Note: not available in the community edition of Label Studio. \n\nCreate predictions for all tasks using a specific ML backend so that you can set up an active learning strategy based on the confidence or uncertainty scores associated with the predictions. Creating predictions requires a Label Studio ML backend set up and configured for your project. \n\nSee [Set up machine learning](https://labelstud.io/guide/ml.html) for more details about a Label Studio ML backend. \n\nReference the ML backend ID in the path of this API call. Get the ML backend ID by [listing the ML backends for a project](https://labelstud.io/api/#operation/api_ml_list)." + description: "\n \"Label\n

\n This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise)\n

\n
\n\n\nCreate predictions for all tasks using a specific ML backend so that you can set up an active learning strategy based on the confidence or uncertainty scores associated with the predictions. Creating predictions requires a Label Studio ML backend set up and configured for your project. \n\nSee [Set up machine learning](https://labelstud.io/guide/ml.html) for more details about a Label Studio ML backend. \n\nReference the ML backend ID in the path of this API call. Get the ML backend ID by [listing the ML backends for a project](https://labelstud.io/api/#operation/api_ml_list)." operationId: api_ml_predict_create parameters: - description: Computed number of tasks without predictions that the ML backend needs to predict. @@ -4766,7 +5011,7 @@ paths: description: Predictions have successfully started. security: - Token: [] - summary: Create predictions for all tasks + summary: ✨ Create predictions for all tasks tags: - Machine Learning x-fern-audiences: @@ -4891,7 +5136,14 @@ paths: x-fern-sdk-method-name: list_model_versions /api/model-provider-connections/: get: - description: List all model provider connections. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all model provider connections. operationId: api_model_provider_connections_list parameters: - description: Which field to use when ordering the results. @@ -4911,7 +5163,7 @@ paths: description: '' security: - Token: [] - summary: List model provider connections + summary: ✨ List model provider connections tags: - Model Provider Connection x-fern-audiences: @@ -4919,7 +5171,14 @@ paths: x-fern-sdk-group-name: model_providers x-fern-sdk-method-name: list post: - description: Create a new model provider connection. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new model provider connection. operationId: api_model_provider_connections_create requestBody: content: @@ -4941,7 +5200,7 @@ paths: description: '' security: - Token: [] - summary: Create model provider connection + summary: ✨ Create model provider connection tags: - Model Provider Connection x-fern-audiences: @@ -4950,7 +5209,14 @@ paths: x-fern-sdk-method-name: create /api/model-provider-connections/provider-choices: get: - description: List all possible model provider choices + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all possible model provider choices operationId: api_model_provider_connections_provider_choices_retrieve responses: '200': @@ -4966,7 +5232,7 @@ paths: description: List of model provider choices security: - Token: [] - summary: List model provider choices + summary: ✨ List model provider choices tags: - Model Provider Connection x-fern-audiences: @@ -4975,7 +5241,14 @@ paths: x-fern-sdk-method-name: list_model_provider_choices /api/model-provider-connections/{id}/: delete: - description: Delete a model provider connection by ID + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a model provider connection by ID operationId: api_model_provider_connections_destroy parameters: - in: path @@ -4988,7 +5261,7 @@ paths: description: No response body security: - Token: [] - summary: Delete model provider connection + summary: ✨ Delete model provider connection tags: - Model Provider Connection x-fern-audiences: @@ -4996,7 +5269,14 @@ paths: x-fern-sdk-group-name: model_providers x-fern-sdk-method-name: delete get: - description: Retrieve a specific model provider connection. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a specific model provider connection. operationId: api_model_provider_connections_retrieve parameters: - in: path @@ -5013,7 +5293,7 @@ paths: description: '' security: - Token: [] - summary: Get model provider connection + summary: ✨ Get model provider connection tags: - Model Provider Connection x-fern-audiences: @@ -5021,7 +5301,14 @@ paths: x-fern-sdk-group-name: model_providers x-fern-sdk-method-name: get patch: - description: Update a specific model provider connection by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific model provider connection by ID. operationId: api_model_provider_connections_partial_update parameters: - in: path @@ -5049,7 +5336,7 @@ paths: description: '' security: - Token: [] - summary: Update model provider connection + summary: ✨ Update model provider connection tags: - Model Provider Connection x-fern-audiences: @@ -5057,7 +5344,14 @@ paths: x-fern-sdk-group-name: model_providers x-fern-sdk-method-name: update put: - description: Overwrite a specific model provider connection by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overwrite a specific model provider connection by ID. operationId: api_model_provider_connections_update parameters: - in: path @@ -5085,14 +5379,21 @@ paths: description: '' security: - Token: [] - summary: Put model provider connection + summary: ✨ Put model provider connection tags: - Model Provider Connection x-fern-audiences: - internal /api/model-run/batch-failed-predictions: post: - description: Create a new batch of failed predictions. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new batch of failed predictions. operationId: api_model_run_batch_failed_predictions_create parameters: - description: Number of failed predictions being sent (for telemetry only, has no effect) @@ -5121,7 +5422,7 @@ paths: description: '' security: - Token: [] - summary: Create batch of failed predictions + summary: ✨ Create batch of failed predictions tags: - Prompts x-fern-audiences: @@ -5130,7 +5431,14 @@ paths: x-fern-sdk-method-name: batch_failed_predictions /api/model-run/batch-predictions: post: - description: Create a new batch prediction. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new batch prediction. operationId: api_model_run_batch_predictions_create parameters: - description: Number of predictions being sent (for telemetry only, has no effect) @@ -5159,7 +5467,7 @@ paths: description: '' security: - Token: [] - summary: Create batch predictions + summary: ✨ Create batch predictions tags: - Prompts x-fern-audiences: @@ -5222,7 +5530,14 @@ paths: x-fern-sdk-group-name: organizations x-fern-sdk-method-name: get patch: - description: Update organization details including title, embed domains, and custom scripts settings. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update organization details including title, embed domains, and Plugins settings. operationId: api_organizations_partial_update parameters: - in: path @@ -5256,7 +5571,7 @@ paths: description: Not Found security: - Token: [] - summary: Update organization + summary: ✨ Update organization tags: - Organizations x-fern-audiences: @@ -5266,7 +5581,14 @@ paths: x-fern-sdk-method-name: update /api/organizations/{id}/memberships: get: - description: Retrieve a list of all users and roles in a specific organization. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a list of all users and roles in a specific organization. operationId: api_organizations_memberships_list parameters: - description: Project ID to exclude users who are already associated with this project (direct members, workspace members, or implicit admin/owner access). @@ -5318,7 +5640,7 @@ paths: description: '' security: - Token: [] - summary: Get organization members/roles + summary: ✨ Get organization members/roles tags: - Organizations x-fern-audiences: @@ -5329,6 +5651,12 @@ paths: x-fern-sdk-method-name: list patch: description: |+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update organization membership or role for a specific user ID. **User Rotation Best Practices for API Usage** @@ -5371,7 +5699,7 @@ paths: description: '' security: - Token: [] - summary: Update organization member/role + summary: ✨ Update organization member/role tags: - Organizations x-fern-audiences: @@ -5449,10 +5777,60 @@ paths: - organizations - members x-fern-sdk-method-name: get - /api/organizations/{id}/set-default-role: - patch: - description: Update the default role for members of a specific organization. - operationId: api_organizations_set_default_role_partial_update + /api/organizations/{id}/permissions: + get: + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all organization-level permission overrides for a given organization. + operationId: api_organizations_permissions_list + parameters: + - in: path + name: id + required: true + schema: + type: integer + - description: Which field to use when ordering the results. + in: query + name: ordering + required: false + schema: + type: string + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/OrganizationPermission' + type: array + description: '' + security: + - Token: [] + summary: ✨ List organization permission overrides + tags: + - Organizations + - Permissions + x-fern-audiences: + - public + x-fern-sdk-group-name: + - organizations + - permissions + x-fern-sdk-method-name: list + post: + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new organization-level permission override for a given organization. + operationId: api_organizations_permissions_create parameters: - in: path name: id @@ -5463,154 +5841,452 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PatchedDefaultRoleRequest' + $ref: '#/components/schemas/OrganizationPermissionRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/PatchedDefaultRoleRequest' + $ref: '#/components/schemas/OrganizationPermissionRequest' multipart/form-data: schema: - $ref: '#/components/schemas/PatchedDefaultRoleRequest' + $ref: '#/components/schemas/OrganizationPermissionRequest' + required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/DefaultRole' + $ref: '#/components/schemas/OrganizationPermission' description: '' + '400': + description: Bad Request + '403': + description: Permission Denied security: - Token: [] - summary: Update default role + summary: ✨ Create organization permission override tags: - Organizations + - Permissions x-fern-audiences: - public x-fern-sdk-group-name: - organizations - x-fern-sdk-method-name: update_default_role - /api/predictions/: + - permissions + x-fern-sdk-method-name: create + /api/organizations/{id}/permissions/options: get: - description: List all predictions and their IDs. - operationId: api_predictions_list + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve the list of configurable permission options (label, tooltip, default role and allowed roles). + operationId: api_organizations_permissions_options_list parameters: - - description: Filter predictions by project ID - in: query - name: project + - in: path + name: id + required: true schema: type: integer - - description: Filter predictions by task ID + - description: Which field to use when ordering the results. in: query - name: task + name: ordering + required: false schema: - type: integer + type: string responses: '200': content: application/json: - examples: - Response: - summary: response - value: - - - id: 1 - model_version: yolo-v8 - result: - - from_name: bboxes - image_rotation: 0 - original_height: 1080 - original_width: 1920 - to_name: image - type: rectanglelabels - value: - height: 60 - rotation: 0 - values: - rectanglelabels: - - Person - width: 50 - x: 20 - y: 30 - score: 0.95 - task: 1 schema: items: - $ref: '#/components/schemas/Prediction' + $ref: '#/components/schemas/ConfigurablePermissionOption' type: array - description: Predictions list + description: '' security: - Token: [] - summary: List predictions + summary: ✨ Get configurable permissions options tags: - - Predictions + - Organizations + - Permissions x-fern-audiences: - public - x-fern-sdk-group-name: predictions - x-fern-sdk-method-name: list - post: - description: Create a prediction for a specific task. - operationId: api_predictions_create - requestBody: - content: - application/json: - schema: - example: - model_version: yolo-v8 - result: - - from_name: bboxes - image_rotation: 0 - original_height: 1080 - original_width: 1920 - to_name: image - type: rectanglelabels - value: - height: 60 - rotation: 0 - values: - rectanglelabels: - - Person - width: 50 - x: 20 - y: 30 - score: 0.95 - properties: - model_version: - description: Model version - tag for predictions that can be used to filter tasks in Data Manager, as well as select specific model version for showing preannotations in the labeling interface - example: yolo-v8 - type: string - result: - description: Prediction result in JSON format. Read more about the format in [the Label Studio documentation.](https://labelstud.io/guide/predictions) - example: - - from_name: bboxes - image_rotation: 0 - original_height: 1080 - original_width: 1920 - to_name: image - type: rectanglelabels - value: - height: 60 - rotation: 0 - values: - rectanglelabels: - - Person - width: 50 - x: 20 - y: 30 - items: - type: object - type: array - score: - description: Prediction score. Can be used in Data Manager to sort task by model confidence. Task with the lowest score will be shown first. - example: 0.95 - type: number - task: - description: Task ID for which the prediction is created - type: integer - type: object - responses: - '201': - content: - application/json: - examples: - Response: - summary: response + x-fern-sdk-group-name: + - organizations + - permissions + x-fern-sdk-method-name: get_options + /api/organizations/{id}/permissions/{permission}: + delete: + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete the organization-level permission override for a given permission key. + operationId: api_organizations_permissions_destroy + parameters: + - in: path + name: id + required: true + schema: + type: integer + - in: path + name: permission + required: true + schema: + type: string + responses: + '204': + description: Deleted + '403': + description: Permission Denied + '404': + description: Permission not found for organization + security: + - Token: [] + summary: ✨ Delete organization permission override + tags: + - Organizations + - Permissions + x-fern-audiences: + - public + x-fern-sdk-group-name: + - organizations + - permissions + x-fern-sdk-method-name: delete + get: + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve the organization-level permission override for a given permission key. + operationId: api_organizations_permissions_retrieve + parameters: + - in: path + name: id + required: true + schema: + type: integer + - in: path + name: permission + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationPermission' + description: '' + '403': + description: Permission Denied + '404': + description: Permission not found for organization + security: + - Token: [] + summary: ✨ Retrieve organization permission override + tags: + - Organizations + - Permissions + x-fern-audiences: + - public + x-fern-sdk-group-name: + - organizations + - permissions + x-fern-sdk-method-name: get + patch: + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Partially update the organization-level permission override for a given permission key. + operationId: api_organizations_permissions_partial_update + parameters: + - in: path + name: id + required: true + schema: + type: integer + - in: path + name: permission + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedOrganizationPermissionRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedOrganizationPermissionRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedOrganizationPermissionRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationPermission' + description: '' + '400': + description: Bad Request + '403': + description: Permission Denied + '404': + description: Permission not found for organization + security: + - Token: [] + summary: ✨ Update organization permission override + tags: + - Organizations + - Permissions + x-fern-audiences: + - public + x-fern-sdk-group-name: + - organizations + - permissions + x-fern-sdk-method-name: update + put: + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Replace the organization-level permission override for a given permission key. + operationId: api_organizations_permissions_update + parameters: + - description: A unique integer value identifying this organization. + in: path + name: id + required: true + schema: + type: integer + - description: Permission key to update within the organization. + in: path + name: permission + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationPermissionRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/OrganizationPermissionRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/OrganizationPermissionRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/OrganizationPermission' + description: '' + '400': + description: Bad Request + '403': + description: Permission Denied + '404': + description: Permission not found for organization + security: + - Token: [] + summary: ✨ Replace organization permission override + tags: + - Organizations + - Permissions + x-fern-audiences: + - public + x-fern-sdk-group-name: + - organizations + - permissions + x-fern-sdk-method-name: replace + /api/organizations/{id}/set-default-role: + patch: + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update the default role for members of a specific organization. + operationId: api_organizations_set_default_role_partial_update + parameters: + - in: path + name: id + required: true + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PatchedDefaultRoleRequest' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PatchedDefaultRoleRequest' + multipart/form-data: + schema: + $ref: '#/components/schemas/PatchedDefaultRoleRequest' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DefaultRole' + description: '' + security: + - Token: [] + summary: ✨ Update default role + tags: + - Organizations + x-fern-audiences: + - public + x-fern-sdk-group-name: + - organizations + x-fern-sdk-method-name: update_default_role + /api/predictions/: + get: + description: List all predictions and their IDs. + operationId: api_predictions_list + parameters: + - description: Filter predictions by project ID + in: query + name: project + schema: + type: integer + - description: Filter predictions by task ID + in: query + name: task + schema: + type: integer + responses: + '200': + content: + application/json: + examples: + Response: + summary: response + value: + - - id: 1 + model_version: yolo-v8 + result: + - from_name: bboxes + image_rotation: 0 + original_height: 1080 + original_width: 1920 + to_name: image + type: rectanglelabels + value: + height: 60 + rotation: 0 + values: + rectanglelabels: + - Person + width: 50 + x: 20 + y: 30 + score: 0.95 + task: 1 + schema: + items: + $ref: '#/components/schemas/Prediction' + type: array + description: Predictions list + security: + - Token: [] + summary: List predictions + tags: + - Predictions + x-fern-audiences: + - public + x-fern-sdk-group-name: predictions + x-fern-sdk-method-name: list + post: + description: Create a prediction for a specific task. + operationId: api_predictions_create + requestBody: + content: + application/json: + schema: + example: + model_version: yolo-v8 + result: + - from_name: bboxes + image_rotation: 0 + original_height: 1080 + original_width: 1920 + to_name: image + type: rectanglelabels + value: + height: 60 + rotation: 0 + values: + rectanglelabels: + - Person + width: 50 + x: 20 + y: 30 + score: 0.95 + properties: + model_version: + description: Model version - tag for predictions that can be used to filter tasks in Data Manager, as well as select specific model version for showing preannotations in the labeling interface + example: yolo-v8 + type: string + result: + description: Prediction result in JSON format. Read more about the format in [the Label Studio documentation.](https://labelstud.io/guide/predictions) + example: + - from_name: bboxes + image_rotation: 0 + original_height: 1080 + original_width: 1920 + to_name: image + type: rectanglelabels + value: + height: 60 + rotation: 0 + values: + rectanglelabels: + - Person + width: 50 + x: 20 + y: 30 + items: + type: object + type: array + score: + description: Prediction score. Can be used in Data Manager to sort task by model confidence. Task with the lowest score will be shown first. + example: 0.95 + type: number + task: + description: Task ID for which the prediction is created + type: integer + type: object + responses: + '201': + content: + application/json: + examples: + Response: + summary: response value: id: 1 model_version: yolo-v8 @@ -5931,7 +6607,14 @@ paths: - internal /api/project-templates/: get: - description: Get a list of all project templates for an organization. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a list of all project templates for an organization. operationId: api_project_templates_list parameters: - description: Which field to use when ordering the results. @@ -5951,7 +6634,7 @@ paths: description: '' security: - Token: [] - summary: Get project templates + summary: ✨ Get project templates tags: - Project Templates x-fern-audiences: @@ -5960,7 +6643,14 @@ paths: - project-templates x-fern-sdk-method-name: list post: - description: Create a project template for an organization. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a project template for an organization. operationId: api_project_templates_create requestBody: content: @@ -5983,7 +6673,7 @@ paths: description: '' security: - Token: [] - summary: Create project template + summary: ✨ Create project template tags: - Project Templates x-fern-audiences: @@ -5993,7 +6683,14 @@ paths: x-fern-sdk-method-name: create /api/project-templates/{id}: delete: - description: Delete a specific project template by ID for an organization. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific project template by ID for an organization. operationId: api_project_templates_destroy parameters: - in: path @@ -6006,7 +6703,7 @@ paths: description: No response body security: - Token: [] - summary: Delete a project template + summary: ✨ Delete a project template tags: - Project Templates x-fern-audiences: @@ -6015,7 +6712,14 @@ paths: - project-templates x-fern-sdk-method-name: delete get: - description: Get a specific project template by ID for an organization. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific project template by ID for an organization. operationId: api_project_templates_retrieve parameters: - in: path @@ -6032,7 +6736,7 @@ paths: description: '' security: - Token: [] - summary: Get a project template + summary: ✨ Get a project template tags: - Project Templates x-fern-audiences: @@ -6041,7 +6745,14 @@ paths: - project-templates x-fern-sdk-method-name: get patch: - description: Update the details of a specific project template by ID for an organization. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update the details of a specific project template by ID for an organization. operationId: api_project_templates_partial_update parameters: - in: path @@ -6069,7 +6780,7 @@ paths: description: '' security: - Token: [] - summary: Update a project template + summary: ✨ Update a project template tags: - Project Templates x-fern-audiences: @@ -6078,7 +6789,14 @@ paths: - project-templates x-fern-sdk-method-name: update put: - description: Overwrite a specific project template by ID for an organization. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overwrite a specific project template by ID for an organization. operationId: api_project_templates_update parameters: - in: path @@ -6107,14 +6825,21 @@ paths: description: '' security: - Token: [] - summary: Overwrite a project template + summary: ✨ Overwrite a project template tags: - Project Templates x-fern-audiences: - internal /api/project-templates/{id}/create-project: post: - description: Create a project from a specific project template by ID for an organization. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a project from a specific project template by ID for an organization. operationId: api_project_templates_create_project_create parameters: - in: path @@ -6149,7 +6874,7 @@ paths: description: Project created successfully security: - Token: [] - summary: Create project from template + summary: ✨ Create project from template tags: - Project Templates x-fern-audiences: @@ -6166,12 +6891,9 @@ paths: in: query name: filter schema: - enum: - - all - - exclude_pinned - - pinned_only + default: all type: string - - description: ids + - description: Filter id by in list in: query name: ids schema: @@ -6181,7 +6903,7 @@ paths: name: include schema: type: string - - description: Maximum number of members to return. + - description: Maximum number of members to return in: query name: members_limit schema: @@ -6190,6 +6912,7 @@ paths: - description: Which field to use when ordering the results. in: query name: ordering + required: false schema: type: string - description: A page number within the paginated result set. @@ -6204,16 +6927,21 @@ paths: required: false schema: type: integer - - description: title + - description: Search term for project title and description + in: query + name: search + schema: + type: string + - description: Filter title by contains (case-insensitive) in: query name: title schema: type: string - - description: workspaces + - description: Filter workspaces by exact match in: query name: workspaces schema: - type: integer + type: number responses: '200': content: @@ -6268,6 +6996,22 @@ paths: description: Returns a list of projects with their counts. For example, task_number which is the total task number in project operationId: api_projects_counts_list parameters: + - description: Filter projects by pinned status. Use 'pinned_only' to return only pinned projects, 'exclude_pinned' to return only non-pinned projects, or 'all' to return all projects. + in: query + name: filter + schema: + default: all + type: string + - description: Filter id by in list + in: query + name: ids + schema: + type: string + - description: 'Comma-separated list of count fields to include in the response to optimize performance. Available fields: task_number, finished_task_number, total_predictions_number, total_annotations_number, num_tasks_with_annotations, useful_annotation_number, ground_truth_number, skipped_annotations_number. If not specified, all count fields are included.' + in: query + name: include + schema: + type: string - description: Which field to use when ordering the results. in: query name: ordering @@ -6286,6 +7030,21 @@ paths: required: false schema: type: integer + - description: Search term for project title and description + in: query + name: search + schema: + type: string + - description: Filter title by contains (case-insensitive) + in: query + name: title + schema: + type: string + - description: Filter workspaces by exact match + in: query + name: workspaces + schema: + type: number responses: '200': content: @@ -6295,12 +7054,16 @@ paths: description: '' security: - Token: [] - summary: List project's counts + summary: List projects' counts tags: - Projects + x-fern-audiences: + - public + x-fern-sdk-group-name: projects + x-fern-sdk-method-name: list_counts /api/projects/roles/: get: - description: "\n List project roles for requested IDs for the current user\n " + description: "\n \"Label\n

\n This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise)\n

\n
\n\n List project roles for requested IDs for the current user\n " operationId: api_projects_roles_list parameters: - in: query @@ -6324,11 +7087,17 @@ paths: description: '' security: - Token: [] - summary: List project roles for current user + summary: ✨ List project roles for current user tags: - Project Roles + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - roles + x-fern-sdk-method-name: list post: - description: "\n Create project role for user allowing the user the same access level provided by organization role.\n " + description: "\n \"Label\n

\n This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise)\n

\n
\n\n Create project role for user allowing the user the same access level provided by organization role.\n " operationId: api_projects_roles_create requestBody: content: @@ -6348,15 +7117,21 @@ paths: application/json: schema: $ref: '#/components/schemas/ProjectRole' - description: '' + description: Role created security: - Token: [] - summary: Create project role for user + summary: ✨ Create project role for user tags: - Project Roles + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - roles + x-fern-sdk-method-name: add /api/projects/roles/{id}/: delete: - description: "\n Remove project role for user allowing the user the same access level provided by organization role.\n " + description: "\n \"Label\n

\n This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise)\n

\n
\n\n Remove project role for user allowing the user the same access level provided by organization role.\n " operationId: api_projects_roles_destroy parameters: - description: A unique integer value identifying this project role. @@ -6367,12 +7142,18 @@ paths: type: integer responses: '204': - description: No response body + description: Role removed security: - Token: [] - summary: Remove project role for user + summary: ✨ Remove project role for user tags: - Project Roles + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - roles + x-fern-sdk-method-name: remove /api/projects/validate/: post: description: Validate an arbitrary labeling configuration. @@ -6433,64 +7214,19 @@ paths: required: true schema: type: integer + - description: Maximum number of members to return + in: query + name: members_limit + schema: + default: 10 + type: integer responses: '200': content: application/json: - examples: - Response: - summary: response - value: - color: '#FF0000' - config_has_control_tags: true - control_weights: {} - created_at: '2023-08-24T14:15:22Z' - created_by: - email: manager@humansignal.com - first_name: Jo - id: 1 - last_name: Doe - description: My first project - enable_empty_annotation: true - evaluate_predictions_automatically: false - expert_instruction: Label all cats - finished_task_number: 10 - ground_truth_number: 5 - id: 1 - is_draft: false - is_published: true - label_config: [...] - maximum_annotations: 1 - min_annotations_to_start_training: 0 - model_version: 1.0.0 - num_tasks_with_annotations: 10 - organization: 1 - overlap_cohort_percentage: 100 - parsed_label_config: '{"tag": {...}}' - pinned_at: '2023-08-24T14:15:22Z' - queue_done: 100 - queue_total: 10 - reveal_preannotations_interactively: true - sampling: Sequential sampling - show_annotation_history: true - show_collab_predictions: true - show_ground_truth_first: true - show_instruction: true - show_overlap_first: true - show_skip_button: true - skip_queue: REQUEUE_FOR_ME - skipped_annotations_number: 0 - start_training_on_annotation_update: true - task_data_login: user - task_data_password: secret - task_number: 100 - title: My project - total_annotations_number: 10 - total_predictions_number: 0 - useful_annotation_number: 10 - schema: - $ref: '#/components/schemas/Project' - description: Project information + schema: + $ref: '#/components/schemas/LseProjectResponse' + description: Project information. Not all fields are available for all roles. security: - Token: [] summary: Get project by ID @@ -6509,6 +7245,12 @@ paths: required: true schema: type: integer + - description: Maximum number of members to return + in: query + name: members_limit + schema: + default: 10 + type: integer requestBody: content: application/json: @@ -6538,7 +7280,14 @@ paths: x-fern-sdk-method-name: update /api/projects/{id}/annotation-history/: get: - description: List all annotation history items for the project with pagination. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all annotation history items for the project with pagination. operationId: api_projects_annotation_history_list parameters: - in: path @@ -6567,16 +7316,51 @@ paths: description: '' security: - Token: [] - summary: List annotation history items for project + summary: ✨ List annotation history items for project tags: - Annotation History x-fern-audiences: - public x-fern-sdk-group-name: annotation_history x-fern-sdk-method-name: list_for_project + /api/projects/{id}/annotators/: + get: + description: Return unique users who have submitted annotations in the specified project. + operationId: api_projects_annotators_retrieve + parameters: + - in: path + name: id + required: true + schema: + type: integer + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/components/schemas/UserSimple' + type: array + description: List of annotator users + security: + - Token: [] + summary: List unique annotators for project + tags: + - Projects + x-fern-audiences: + - public + x-fern-sdk-group-name: projects + x-fern-sdk-method-name: list_unique_annotators /api/projects/{id}/aws-custom-function: get: - description: Get the AWS Lambda code for the custom metric configured for this project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get the AWS Lambda code for the custom metric configured for this project. operationId: api_projects_aws_custom_function_retrieve parameters: - in: path @@ -6598,7 +7382,7 @@ paths: description: Lambda code security: - Token: [] - summary: Get AWS custom metric code + summary: ✨ Get AWS custom metric code tags: - Projects x-fern-audiences: @@ -6609,7 +7393,14 @@ paths: - custom x-fern-sdk-method-name: get_lambda post: - description: Create or update the AWS Lambda function used for custom metrics in this project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create or update the AWS Lambda function used for custom metrics in this project. operationId: api_projects_aws_custom_function_create parameters: - in: path @@ -6640,7 +7431,7 @@ paths: description: Error updating function security: - Token: [] - summary: Update AWS custom metric Lambda + summary: ✨ Update AWS custom metric Lambda tags: - Projects x-fern-audiences: @@ -6652,7 +7443,14 @@ paths: x-fern-sdk-method-name: update_lambda /api/projects/{id}/aws-custom-function-logs: get: - description: Get AWS lambda logs for project, including filtering by start and end dates + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get AWS lambda logs for project, including filtering by start and end dates operationId: api_projects_aws_custom_function_logs_retrieve parameters: - description: End date for AWS logs filtering in format %Y-%m-%d @@ -6687,7 +7485,7 @@ paths: description: Successful response returns list of AWS lambda logs security: - Token: [] - summary: Get AWS lambda logs for project + summary: ✨ Get AWS lambda logs for project tags: - AWS x-fern-audiences: @@ -6699,7 +7497,14 @@ paths: x-fern-sdk-method-name: logs /api/projects/{id}/check-function: post: - description: Validate custom matching function code for the project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate custom matching function code for the project. operationId: api_projects_check_function_create parameters: - in: path @@ -6724,7 +7529,7 @@ paths: description: Code is valid security: - Token: [] - summary: Check custom matching function code + summary: ✨ Check custom matching function code tags: - Projects x-fern-audiences: @@ -6763,146 +7568,37 @@ paths: description: Total number of uncompleted tasks title: remaining_tasks type: integer - reviewed_tasks: - description: Number of tasks that have been reviewed by at least one reviewer - title: reviewed_tasks - type: integer - skipped_tasks: - description: Number of tasks that have been skipped by at least one annotator - title: skipped_tasks - type: integer - tasks: - description: Total number of tasks - title: tasks - type: integer - type: object - description: Successful response returns project-related annotation statistics - security: - - Token: [] - summary: Get dashboard data for project - tags: - - Dashboard - x-fern-audiences: - - internal - /api/projects/{id}/dashboard-members: - get: - deprecated: true - description: Get dashboard for members, including similarity matrix, user statistics and users list. - operationId: api_projects_dashboard_members_retrieve - parameters: - - description: All data objects will be filtered by updated_at or created_at field - in: query - name: action - schema: - type: string - - description: End date for dashboard stats calculation. UTC timezone by default. Use iso format (yyyy-mm-dd-hh-mm) to specify timezone. - in: query - name: end_date - schema: - type: string - - in: path - name: id - required: true - schema: - type: integer - - description: Per label calculation - in: query - name: per_label - schema: - type: boolean - - description: Start date for dashboard stats calculation. UTC timezone by default. Use iso format (yyyy-mm-dd-hh-mm) to specify timezone. - in: query - name: start_date - schema: - type: string - - description: All task objects will be filtered by updated_by field. Only tasks that were updated by concrete user will be taken in account. - in: query - name: updated_by - schema: - type: string - - description: Use kappa statistics for calculation - in: query - name: use_kappa - schema: - type: boolean - responses: - '200': - content: - application/json: - schema: - description: Task creation response - properties: - similarity: - description: Consensus statistics between different users - items: - title: Similarities, common tasks - type: object - type: array - stats: - description: Number of annotated (completed) tasks - items: - description: User statistics - properties: - accepted: - description: Number of annotations marked as "Accepted" by reviewer - title: Accepted tasks - type: integer - finished: - title: Finished tasks - type: integer - gt: - description: Average agreement with Ground Truth annotations - title: Ground Truth score - type: number - mean_time: - description: Average mean time spent on annotation - title: Mean time - type: number - median_time: - description: Average median time spent on annotation - title: Median time - type: number - predictions: - description: Average agreement with predictions - title: Predictions score - type: number - progress: - description: Fraction of annotation work done so far - title: Annotation progress - type: integer - rejected: - description: Number of annotations marked as "Rejected" by reviewer - title: Rejected tasks - type: integer - review_score: - description: Average reviewing score, when calling with "per_label=true", returns dictionary with labels to score breakdown - title: Review score - type: number - skipped: - title: Skipped tasks - type: integer - title: User statistics - type: object - type: array - users: - description: List of users - items: - title: User data - type: object - type: array - title: Task creation response + reviewed_tasks: + description: Number of tasks that have been reviewed by at least one reviewer + title: reviewed_tasks + type: integer + skipped_tasks: + description: Number of tasks that have been skipped by at least one annotator + title: skipped_tasks + type: integer + tasks: + description: Total number of tasks + title: tasks + type: integer type: object description: Successful response returns project-related annotation statistics security: - Token: [] - summary: Get dashboard data for members + summary: Get dashboard data for project tags: - Dashboard x-fern-audiences: - internal /api/projects/{id}/duplicate/: post: - description: Make a copy of project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Make a copy of project. operationId: api_projects_duplicate_create parameters: - in: path @@ -6937,7 +7633,7 @@ paths: description: Project duplicated security: - Token: [] - summary: Duplicate project + summary: ✨ Duplicate project tags: - Projects x-fern-audiences: @@ -7451,6 +8147,60 @@ paths: - public x-fern-sdk-group-name: projects x-fern-sdk-method-name: import_tasks + /api/projects/{id}/import/predictions: + post: + description: Import model predictions for tasks in the specified project. + operationId: api_projects_import_predictions_create + parameters: + - description: A unique integer value identifying this project. + in: path + name: id + required: true + schema: + type: integer + requestBody: + content: + application/json: + schema: + items: + $ref: '#/components/schemas/PredictionRequest' + type: array + application/x-www-form-urlencoded: + schema: + items: + $ref: '#/components/schemas/PredictionRequest' + type: array + multipart/form-data: + schema: + items: + $ref: '#/components/schemas/PredictionRequest' + type: array + required: true + responses: + '201': + content: + application/json: + schema: + description: Import result + properties: + created: + description: Number of predictions created + title: created + type: integer + title: Predictions import response + type: object + description: Predictions successfully imported + '400': + description: Bad Request + security: + - Token: [] + summary: Import predictions + tags: + - Import + x-fern-audiences: + - public + x-fern-sdk-group-name: projects + x-fern-sdk-method-name: import_predictions /api/projects/{id}/imports/{import_pk}/: get: description: Return data related to async project import operation @@ -7485,7 +8235,14 @@ paths: x-fern-sdk-method-name: create_many_status /api/projects/{id}/members/: delete: - description: Remove a member from a specific project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Remove a member from a specific project. operationId: api_projects_members_destroy parameters: - in: path @@ -7493,21 +8250,26 @@ paths: required: true schema: type: integer - - description: A unique integer value identifying this project member. - in: query - name: project_member - schema: - type: integer responses: '204': - description: No response body + description: Member removed security: - Token: [] - summary: Remove member from project + summary: ✨ Remove member from project tags: - Projects + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - members + x-fern-sdk-method-name: remove get: - description: Retrieve the members for a specific project. Optionally filter by user IDs (comma-separated). + deprecated: true + description: |- + Retrieve the members for a specific project. Optionally filter by user IDs (comma-separated). + + Does NOT include annotators. Deprecated; use paginated endpoint. operationId: api_projects_members_retrieve parameters: - in: path @@ -7535,13 +8297,20 @@ paths: tags: - Projects x-fern-audiences: - - public + - internal x-fern-sdk-group-name: - projects - members x-fern-sdk-method-name: get post: - description: Add a member to a specific project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Add a member to a specific project. operationId: api_projects_members_create parameters: - in: path @@ -7570,12 +8339,25 @@ paths: description: '' security: - Token: [] - summary: Add project member + summary: ✨ Add project member tags: - Projects + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - members + x-fern-sdk-method-name: add /api/projects/{id}/members/bulk/: delete: - description: Unassign project members in bulk. Allows the same request body as bulk assign. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Unassign project members in bulk. Allows the same request body as bulk assign. operationId: api_projects_members_bulk_destroy parameters: - in: path @@ -7600,7 +8382,7 @@ paths: description: '' security: - Token: [] - summary: Bulk unassign project members + summary: ✨ Bulk unassign project members tags: - Projects x-fern-audiences: @@ -7611,7 +8393,14 @@ paths: - bulk x-fern-sdk-method-name: delete post: - description: Assign project members in bulk. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Assign project members in bulk. operationId: api_projects_members_bulk_create parameters: - in: path @@ -7648,7 +8437,7 @@ paths: description: '' security: - Token: [] - summary: Bulk assign project members + summary: ✨ Bulk assign project members tags: - Projects x-fern-audiences: @@ -7660,7 +8449,14 @@ paths: x-fern-sdk-method-name: post /api/projects/{id}/members/paginated/: get: - description: Retrieve the members for a specific project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve the members for a specific project. operationId: api_projects_members_paginated_list parameters: - in: path @@ -7714,7 +8510,7 @@ paths: description: '' security: - Token: [] - summary: Get project members paginated + summary: ✨ Get project members paginated tags: - Projects x-fern-audiences: @@ -7729,7 +8525,14 @@ paths: x-fern-sdk-method-name: list /api/projects/{id}/metricparam/: get: - description: Get the current metrics configuration for a project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get the current metrics configuration for a project. operationId: api_projects_metricparam_retrieve parameters: - in: path @@ -7746,7 +8549,7 @@ paths: description: Current metrics configuration security: - Token: [] - summary: Get project metrics configuration + summary: ✨ Get project metrics configuration tags: - Projects x-fern-audiences: @@ -7756,7 +8559,14 @@ paths: - metrics x-fern-sdk-method-name: get post: - description: Update metrics strategy and parameters for a project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update metrics strategy and parameters for a project. operationId: api_projects_metricparam_create parameters: - in: path @@ -7768,13 +8578,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ProjectMetricParamUpdateRequest' + $ref: '#/components/schemas/MetricParamUpdateRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/ProjectMetricParamUpdateRequest' + $ref: '#/components/schemas/MetricParamUpdateRequest' multipart/form-data: schema: - $ref: '#/components/schemas/ProjectMetricParamUpdateRequest' + $ref: '#/components/schemas/MetricParamUpdateRequest' responses: '200': content: @@ -7786,7 +8596,7 @@ paths: description: No params provided to update security: - Token: [] - summary: Update project metrics configuration + summary: ✨ Update project metrics configuration tags: - Projects x-fern-audiences: @@ -7798,10 +8608,13 @@ paths: /api/projects/{id}/model-stats/{model_version}/agreement: get: description: |- - Overall agreement between a given model version's predictions and all annotators on overlapping tasks. - Computed as the average of per-annotator agreement vs this model version over annotators who overlap on at least one task. - Mirrors IAA per annotator, but one side is the model. - :return: {"agreement": float[0..1]} + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement between a given model version and all annotators in the project for overlapping tasks. operationId: api_projects_model_stats_agreement_retrieve parameters: - in: path @@ -7821,20 +8634,31 @@ paths: schema: properties: agreement: + nullable: true type: number type: object description: Model-version overall agreement vs annotators security: - Token: [] - summary: Get model-version overall agreement vs annotators + summary: ✨ Get model-version overall agreement vs annotators tags: - Stats + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: model_version_annotator_agreement /api/projects/{id}/model-stats/{model_version}/agreement-groundtruth: get: description: |- - Ground truth agreement for annotations that match predictions of a specific model version. - This mirrors gt_per_user_agreement but filters stats by tasks where predictions have given model_version. - :return: {"agreement": float[0..1]} + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement between a given model version and ground truth annotations in the project for overlapping tasks. operationId: api_projects_model_stats_agreement_groundtruth_retrieve parameters: - in: path @@ -7860,25 +8684,31 @@ paths: schema: properties: agreement: + nullable: true type: number type: object description: Model-version ground truth agreement security: - Token: [] - summary: Get model-version ground truth agreement + summary: ✨ Get model-version ground truth agreement tags: - Stats + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: model_version_ground_truth_agreement /api/projects/{id}/model-stats/{model_version}/prediction: get: description: |- - Mean agreement between the given model version and all other model versions in the project. - - Computed as the average of pairwise model-to-model agreement scores from PredictionPairStats where either - prediction pair's model_version_from or model_version_to equals the provided model_version. - - When per_label=true, returns a mapping of label -> average agreement across the same set of pairs. - - :return: {"average_prediction_agreement_per_model": float[0..1] | {label: float[0..1]}} + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement between a given model version and all other model versions in the project for overlapping tasks. operationId: api_projects_model_stats_prediction_retrieve parameters: - in: path @@ -7904,17 +8734,31 @@ paths: schema: properties: average_prediction_agreement_per_model: + nullable: true type: number type: object description: Model-version prediction agreement security: - Token: [] - summary: Get model-version prediction agreement + summary: ✨ Get model-version prediction agreement tags: - Stats + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: model_version_prediction_agreement /api/projects/{id}/project-extra-params/: get: - description: Retrieve the annotator weights for statistics and Cohen's Kappa for a specific project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve the annotator weights for statistics and Cohen's Kappa for a specific project. Affects dashboard-members stats, but old and unused. operationId: api_projects_project_extra_params_retrieve parameters: - in: path @@ -7927,32 +8771,30 @@ paths: content: application/json: schema: - description: Create or change annotator weights for statistics - properties: - annotator_params: - description: Dict of users with weights - items: - description: '{user_id: weight}' - title: User_id and weight - type: object - title: annotator_params - type: array - use_kappa: - description: If project uses Cohen's Kappa in calculation - title: use_kappa - type: boolean - title: Change annotator weights for statistics - type: object + $ref: '#/components/schemas/LseProjectParams' description: Annotator weights retrieved '204': description: No annotator weights found security: - Token: [] - summary: Get annotator weights + summary: ✨ Get annotator weights tags: - Projects + x-fern-audiences: + - internal + x-fern-sdk-group-name: + - projects + - annotator_weights + x-fern-sdk-method-name: get post: - description: Create annotator weights to be used in the annotation statistics for a project, such as when calculating kappa metrics for inter-annotator agreement. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create annotator weights to be used in the annotation statistics for a project, such as when calculating kappa metrics for inter-annotator agreement. Affects dashboard-members stats, but old and unused. operationId: api_projects_project_extra_params_create parameters: - in: path @@ -7963,6 +8805,15 @@ paths: requestBody: content: application/json: + examples: + AnnotatorWeightsMapping: + description: annotator_params must be a mapping of user_id to weight (0..1). + summary: payload format for annotator_params + value: + annotator_params: + 123: 1.0 + 456: 0.75 + use_kappa: true schema: $ref: '#/components/schemas/LseProjectParamsRequest' application/x-www-form-urlencoded: @@ -7976,28 +8827,19 @@ paths: content: application/json: schema: - description: Create or change annotator weights for statistics - properties: - annotator_params: - description: Dict of users with weights - items: - description: '{user_id: weight}' - title: User_id and weight - type: object - title: annotator_params - type: array - use_kappa: - description: If project uses Cohen's Kappa in calculation - title: use_kappa - type: boolean - title: Change annotator weights for statistics - type: object + $ref: '#/components/schemas/LseProjectParams' description: Annotator weights created/updated security: - Token: [] - summary: Create annotator weights for statistics + summary: ✨ Create annotator weights for statistics tags: - Projects + x-fern-audiences: + - internal + x-fern-sdk-group-name: + - projects + - annotator_weights + x-fern-sdk-method-name: create /api/projects/{id}/reimports/{reimport_pk}/: get: description: Return data related to async project reimport operation @@ -8030,7 +8872,7 @@ paths: - internal /api/projects/{id}/roles: get: - description: "\n List users and their project level roles for a given project.\n If user is not listed here and is a member of the project then they would behave as assigned role in organization.\n " + description: "\n \"Label\n

\n This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise)\n

\n
\n\n List users and their project level roles for a given project.\n If user is not listed here and is a member of the project then they would behave as assigned role in organization.\n " operationId: api_projects_roles_retrieve parameters: - in: path @@ -8043,16 +8885,31 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ProjectRole' + items: + $ref: '#/components/schemas/ProjectRole' + type: array description: '' security: - Token: [] - summary: List project roles + summary: ✨ List project roles tags: - Project Roles + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - roles + x-fern-sdk-method-name: get /api/projects/{id}/stats/IAA: get: - description: Get Inter-Annotator Agreement (IAA) matrix for a project, showing agreement between all annotators. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get Inter-Annotator Agreement (IAA) matrix for a project, showing agreement between all annotators. operationId: api_projects_stats_IAA_retrieve parameters: - description: Comma-separated list of fields to expand @@ -8193,7 +9050,7 @@ paths: description: Inter-Annotator Agreement matrix security: - Token: [] - summary: Get Inter-Annotator Agreement matrix + summary: ✨ Get Inter-Annotator Agreement matrix tags: - Stats x-fern-audiences: @@ -8202,22 +9059,83 @@ paths: - projects - stats x-fern-sdk-method-name: iaa - /api/projects/{id}/stats/agreement_annotator/{user_id}: + /api/projects/{id}/stats/agreement-groundtruth: get: - description: Get agreement statistics for a specific annotator within a project. - operationId: api_projects_stats_agreement_annotator_retrieve + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get ground truth agreement statistics for multiple users within a project. + operationId: api_projects_stats_agreement_groundtruth_retrieve parameters: - in: path name: id required: true schema: type: integer - - description: Calculate agreement per label + - description: Comma separated list of user IDs to get ground truth agreement for + in: query + name: ids + required: true + schema: + type: string + - description: Per label in: query name: per_label schema: default: false type: boolean + responses: + '200': + content: + application/json: + schema: + properties: + agreement: + additionalProperties: + oneOf: + - description: Ground truth agreement score for the user (0-1) when per_label=False + type: number + - additionalProperties: + description: Agreement score for specific label (0-1) + type: number + description: Ground truth agreement scores per label when per_label=True + type: object + description: Dictionary mapping user IDs to their ground truth agreement scores + type: object + type: object + description: Ground truth agreement statistics for multiple users + security: + - Token: [] + summary: ✨ Get ground truth agreement for multiple users + tags: + - Stats + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: users_ground_truth_agreement + /api/projects/{id}/stats/agreement_annotator/{user_id}: + get: + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement statistics for a specific annotator within a project. + operationId: api_projects_stats_agreement_annotator_retrieve + parameters: + - in: path + name: id + required: true + schema: + type: integer - in: path name: user_id required: true @@ -8236,12 +9154,74 @@ paths: description: Individual annotator agreement statistics security: - Token: [] - summary: Get individual annotator agreement stats + summary: ✨ Get individual annotator agreement stats + tags: + - Stats + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: agreement_annotator + /api/projects/{id}/stats/agreement_annotators: + get: + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement statistics for multiple annotators within a project. + operationId: api_projects_stats_agreement_annotators_retrieve + parameters: + - in: path + name: id + required: true + schema: + type: integer + - description: Comma separated list of annotator user IDs to get agreement scores for + in: query + name: ids + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + properties: + agreement: + additionalProperties: + type: number + description: Mapping of annotator ID to their agreement score (0-1) or null if no data + type: object + required: + - agreement + type: object + description: Multiple annotator agreement statistics + security: + - Token: [] + summary: ✨ Get agreement statistics for multiple annotators tags: - Stats + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: agreement_annotators /api/projects/{id}/stats/data_filter: get: - description: Get statistics about user data filters and their usage within a project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get statistics about user data filters and their usage within a project. operationId: api_projects_stats_data_filter_retrieve parameters: - in: path @@ -8255,19 +9235,48 @@ paths: application/json: schema: properties: - filters: - description: Data filter statistics by user + user_filters: + description: Data filter statistics by user and model + properties: + stats: + description: List of filter configurations for users and models + items: + additionalProperties: + description: Filter configurations (finished, skipped, accepted, rejected, gt, predictions, review_score) + type: object + properties: + id: + description: User ID or model version identifier (e.g., "model:1.0") + type: string + type: object + type: array + tasks_with_annotations: + description: Default filter tab for tasks with annotations + type: object type: object type: object description: User data filter statistics security: - Token: [] - summary: Get user data filter statistics + summary: ✨ Get user data filter statistics tags: - Stats + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: data_filters /api/projects/{id}/stats/finished: get: - description: Get statistics about finished tasks for a project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get statistics about finished tasks for a project. operationId: api_projects_stats_finished_retrieve parameters: - in: path @@ -8286,22 +9295,38 @@ paths: application/json: schema: properties: - finished_tasks: + finished: description: Number of finished tasks type: integer + id: + description: User ID + type: integer progress: description: Progress percentage (0-100) - type: number + type: integer type: object description: Finished tasks statistics security: - Token: [] - summary: Get finished tasks statistics + summary: ✨ Get finished tasks statistics tags: - Stats + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: finished_tasks /api/projects/{id}/stats/lead_time: get: - description: Get lead time statistics across the project, including average annotation time. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get lead time statistics across the project, including average annotation time. operationId: api_projects_stats_lead_time_retrieve parameters: - in: path @@ -8315,19 +9340,46 @@ paths: application/json: schema: properties: - lead_time: + lead_time_stats: description: Lead time statistics including mean, median, and distribution - type: object + items: + properties: + mean_time: + description: Average lead time for the user + type: number + median_time: + description: Median lead time for the user + type: number + sum_lead_time: + description: Total lead time for the user + type: number + user_id: + description: User ID + type: integer + type: object + type: array type: object description: Lead time statistics security: - Token: [] - summary: Get lead time statistics + summary: ✨ Get lead time statistics tags: - Stats + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: lead_time /api/projects/{id}/stats/total_agreement: get: description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Overall or per-label total agreement across the project. NOTE: due to an open issue in Fern, SDK clients will raise ApiError upon handling a 204 response. As a workaround, wrap call to this function in a try-except block. @@ -8364,7 +9416,7 @@ paths: description: No data to compute agreement security: - Token: [] - summary: Get total agreement for project + summary: ✨ Get total agreement for project tags: - Stats x-fern-audiences: @@ -8440,7 +9492,14 @@ paths: - internal /api/projects/{id}/tasks/assignees: post: - description: Assign multiple users to a collection of tasks within a specific project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Assign multiple users to a collection of tasks within a specific project. operationId: api_projects_tasks_assignees_create parameters: - in: path @@ -8620,7 +9679,7 @@ paths: description: Can't assign tasks security: - Token: [] - summary: Bulk assign users to tasks + summary: ✨ Bulk assign users to tasks tags: - Tasks x-fern-audiences: @@ -8631,7 +9690,14 @@ paths: x-fern-sdk-method-name: bulk_assign /api/projects/{id}/tasks/{task_pk}/assignees: delete: - description: Remove assignees for a task within a specific project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Remove assignees for a task within a specific project. operationId: api_projects_tasks_assignees_destroy parameters: - description: A unique integer value identifying this project. @@ -8664,7 +9730,7 @@ paths: description: No response body security: - Token: [] - summary: Delete task assignments + summary: ✨ Delete task assignments tags: - Tasks x-fern-audiences: @@ -8674,7 +9740,14 @@ paths: - assignments x-fern-sdk-method-name: delete get: - description: Retrieve a list of tasks and assignees for those tasks for a specific project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a list of tasks and assignees for those tasks for a specific project. operationId: api_projects_tasks_assignees_retrieve parameters: - description: A unique integer value identifying this project. @@ -8700,7 +9773,7 @@ paths: description: List of assignments for the task security: - Token: [] - summary: Get assigned tasks and assignees + summary: ✨ Get assigned tasks and assignees tags: - Tasks x-fern-audiences: @@ -8710,7 +9783,14 @@ paths: - assignments x-fern-sdk-method-name: list patch: - description: Update the assignee for a task in a specific project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update the assignee for a task in a specific project. operationId: api_projects_tasks_assignees_partial_update parameters: - description: A unique integer value identifying this project. @@ -8754,7 +9834,7 @@ paths: description: '' security: - Token: [] - summary: Update task assignee + summary: ✨ Update task assignee tags: - Tasks x-fern-audiences: @@ -8764,7 +9844,14 @@ paths: - assignments x-fern-sdk-method-name: update post: - description: Assign a user to a task in a specific project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Assign a user to a task in a specific project. operationId: api_projects_tasks_assignees_create_2 parameters: - description: A unique integer value identifying this project. @@ -8808,7 +9895,7 @@ paths: description: '' security: - Token: [] - summary: Create task assignee + summary: ✨ Create task assignee tags: - Tasks x-fern-audiences: @@ -8819,7 +9906,14 @@ paths: x-fern-sdk-method-name: assign /api/projects/{id}/update-stats: get: - description: Start stats recalculation for given project + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Start stats recalculation for given project operationId: api_projects_update_stats_retrieve parameters: - in: path @@ -8843,12 +9937,25 @@ paths: description: Successful response returns job id security: - Token: [] - summary: Start stats recalculation + summary: ✨ Start stats recalculation tags: - Stats - /api/projects/{id}/user-stats/{user_pk}/prediction: + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: update_stats + /api/projects/{id}/user-stats/prediction: get: - description: Get prediction agreement statistics for a specific user within a project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get prediction agreement statistics for multiple annotators within a project. operationId: api_projects_user_stats_prediction_retrieve parameters: - in: path @@ -8856,6 +9963,139 @@ paths: required: true schema: type: integer + - description: Comma separated list of annotator user IDs to get agreement scores for + in: query + name: ids + required: true + schema: + type: string + - description: Per label + in: query + name: per_label + schema: + default: false + type: boolean + responses: + '200': + content: + application/json: + schema: + properties: + agreement: + additionalProperties: + oneOf: + - description: Average prediction agreement score for the user (0-1) when per_label=False + type: number + - additionalProperties: + type: number + description: Average prediction agreement score per label for the user (0-1) when per_label=True + type: object + description: Dictionary mapping user IDs to their prediction agreement scores + type: object + type: object + description: Prediction agreement statistics for multiple annotators + security: + - Token: [] + summary: ✨ Get prediction agreement statistics for multiple annotators + tags: + - Stats + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: users_prediction_agreement + /api/projects/{id}/user-stats/review_score: + get: + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get review score and performance score statistics for multiple annotators within a project. + operationId: api_projects_user_stats_review_score_retrieve + parameters: + - in: path + name: id + required: true + schema: + type: integer + - description: Comma separated list of annotator user IDs to get review scores for + in: query + name: ids + required: true + schema: + type: string + - description: Per label + in: query + name: per_label + schema: + type: boolean + responses: + '200': + content: + application/json: + schema: + properties: + performance_score: + additionalProperties: + oneOf: + - description: Performance score for the annotator when per_label=False + type: number + - additionalProperties: + type: number + description: Performance score per label for the annotator when per_label=True + type: object + description: Performance scores mapped by annotator ID + type: object + review_score: + additionalProperties: + oneOf: + - description: Average review score for the annotator when per_label=False + type: number + - additionalProperties: + type: number + description: Review score per label for the annotator when per_label=True + type: object + description: Review scores mapped by annotator ID + type: object + type: object + description: Review scores and performance scores for multiple annotators + security: + - Token: [] + summary: ✨ Get review scores for multiple annotators + tags: + - Stats + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: users_review_score + /api/projects/{id}/user-stats/{user_pk}/prediction: + get: + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get prediction agreement statistics for a specific user within a project. + operationId: api_projects_user_stats_prediction_retrieve_2 + parameters: + - in: path + name: id + required: true + schema: + type: integer + - description: Calculate agreement per label + in: query + name: per_label + schema: + type: boolean - in: path name: user_pk required: true @@ -8868,25 +10108,48 @@ paths: schema: properties: average_prediction_agreement_per_user: - description: Average prediction agreement score for the user (0-1) - type: number + oneOf: + - description: Average prediction agreement score for the user (0-1) when per_label=False + type: number + - additionalProperties: + type: number + description: Average prediction agreement score per label for the user (0-1) when per_label=True + type: object type: object description: Individual user prediction agreement statistics security: - Token: [] - summary: Get individual user prediction agreement + summary: ✨ Get individual user prediction agreement tags: - Stats + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: user_prediction_agreement /api/projects/{id}/user-stats/{user_pk}/review_score: get: - description: Get review score statistics for a specific user within a project. - operationId: api_projects_user_stats_review_score_retrieve + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get review score statistics for a specific user within a project. + operationId: api_projects_user_stats_review_score_retrieve_2 parameters: - in: path name: id required: true schema: type: integer + - description: Calculate agreement per label + in: query + name: per_label + schema: + type: boolean - in: path name: user_pk required: true @@ -8898,19 +10161,45 @@ paths: application/json: schema: properties: + performance_score: + oneOf: + - description: Performance score for the user when per_label=False + type: number + - additionalProperties: + type: number + description: Performance score per label for the user when per_label=True + type: object review_score: - description: Average review score for the user - type: number + oneOf: + - description: Average review score for the user when per_label=False + type: number + - additionalProperties: + type: number + description: Average review score per label for the user when per_label=True + type: object type: object description: Individual user review score statistics security: - Token: [] - summary: Get individual user review scores + summary: ✨ Get individual user review scores tags: - Stats + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: user_review_score /api/projects/{id}/users/{user_pk}/stats/agreement-groundtruth: get: - description: Get ground truth agreement statistics for a specific user within a project. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get ground truth agreement statistics for a specific user within a project. operationId: api_projects_users_stats_agreement_groundtruth_retrieve parameters: - in: path @@ -8918,6 +10207,11 @@ paths: required: true schema: type: integer + - description: Calculate agreement per label + in: query + name: per_label + schema: + type: boolean - in: path name: user_pk required: true @@ -8930,15 +10224,27 @@ paths: schema: properties: agreement: - description: Ground truth agreement score for the user (0-1) - type: number + oneOf: + - description: Ground truth agreement score for the user (0-1) when per_label=False + type: number + - additionalProperties: + description: Agreement score for specific label (0-1) + type: number + description: Ground truth agreement scores per label when per_label=True + type: object type: object description: Individual user ground truth agreement statistics security: - Token: [] - summary: Get individual user ground truth agreement + summary: ✨ Get individual user ground truth agreement tags: - Stats + x-fern-audiences: + - public + x-fern-sdk-group-name: + - projects + - stats + x-fern-sdk-method-name: user_ground_truth_agreement /api/projects/{id}/validate/: post: description: Determine whether the label configuration for a specific project is valid. @@ -8980,7 +10286,14 @@ paths: x-fern-sdk-method-name: validate_label_config /api/projects/{project_pk}/members/{user_pk}/pauses/: get: - description: Retrieve a list of all pauses. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a list of all pauses. operationId: api_projects_members_pauses_list parameters: - description: Include deleted pauses. @@ -9015,7 +10328,7 @@ paths: description: '' security: - Token: [] - summary: List pauses + summary: ✨ List pauses tags: - Pauses x-fern-audiences: @@ -9025,7 +10338,14 @@ paths: - pauses x-fern-sdk-method-name: list post: - description: Create a new pause entry. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new pause entry. operationId: api_projects_members_pauses_create parameters: - in: path @@ -9059,7 +10379,7 @@ paths: description: '' security: - Token: [] - summary: Create pause + summary: ✨ Create pause tags: - Pauses x-fern-audiences: @@ -9070,7 +10390,14 @@ paths: x-fern-sdk-method-name: create /api/projects/{project_pk}/members/{user_pk}/pauses/{id}/: delete: - description: Delete a specific pause by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific pause by ID. operationId: api_projects_members_pauses_destroy parameters: - in: path @@ -9093,7 +10420,7 @@ paths: description: No response body security: - Token: [] - summary: Delete pause + summary: ✨ Delete pause tags: - Pauses x-fern-audiences: @@ -9103,7 +10430,14 @@ paths: - pauses x-fern-sdk-method-name: delete get: - description: Retrieve a specific pause by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a specific pause by ID. operationId: api_projects_members_pauses_retrieve parameters: - in: path @@ -9130,7 +10464,7 @@ paths: description: '' security: - Token: [] - summary: Get pause + summary: ✨ Get pause tags: - Pauses x-fern-audiences: @@ -9140,7 +10474,14 @@ paths: - pauses x-fern-sdk-method-name: get patch: - description: Partially update a pause entry by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Partially update a pause entry by ID. operationId: api_projects_members_pauses_partial_update parameters: - in: path @@ -9178,7 +10519,7 @@ paths: description: '' security: - Token: [] - summary: Update pause + summary: ✨ Update pause tags: - Pauses x-fern-audiences: @@ -9188,7 +10529,14 @@ paths: - pauses x-fern-sdk-method-name: update put: - description: Overwrite a pause entry by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overwrite a pause entry by ID. operationId: api_projects_members_pauses_update parameters: - in: path @@ -9227,16 +10575,21 @@ paths: description: '' security: - Token: [] - summary: Put pause + summary: ✨ Put pause tags: - Pauses x-fern-audiences: - internal /api/projects/{project_pk}/subset-tasks: get: - description: "\n Provides list of tasks, based on project subset. Includes predictions for tasks. For the 'HasGT' subset, accuracy metrics will also be provided.\n " + description: "\n \"Label\n

\n This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise)\n

\n
\n\n Provides list of tasks, based on project subset. Includes predictions for tasks. For the 'HasGT' subset, accuracy metrics will also be provided.\n " operationId: api_projects_subset_tasks_list parameters: + - description: If true (default), includes task_count in response; if false, omits it. + in: query + name: include_total + schema: + type: boolean - description: A unique ID of a ModelRun in: query name: model_run @@ -9260,6 +10613,11 @@ paths: required: false schema: type: integer + - description: The ID of the parent model (ModelInterface) for this Inference Run + in: query + name: parent_model + schema: + type: integer - in: path name: project_pk required: true @@ -9272,19 +10630,33 @@ paths: type: string responses: '200': - description: Project subset task list + content: + application/json: + schema: + $ref: '#/components/schemas/PaginatedProjectSubsetTasksResponseList' + description: '' '400': description: Bad request - missing parent_model security: - Token: [] - summary: Get Project Subset Task List with Predictions and Accuracy details + summary: ✨ Get Project Subset Task List with Predictions and Accuracy details tags: - Projects + x-fern-audiences: + - public + x-fern-sdk-group-name: prompts + x-fern-sdk-method-name: subset_tasks /api/projects/{project_pk}/subsets: get: - description: "\n Provides list of available subsets for a project along with count of tasks in each subset\n " - operationId: api_projects_subsets_retrieve + description: "\n \"Label\n

\n This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise)\n

\n
\n\n Provides list of available subsets for a project along with count of tasks in each subset\n " + operationId: api_projects_subsets_list parameters: + - description: Which field to use when ordering the results. + in: query + name: ordering + required: false + schema: + type: string - in: path name: project_pk required: true @@ -9292,12 +10664,22 @@ paths: type: integer responses: '200': - description: No response body + content: + application/json: + schema: + items: + $ref: '#/components/schemas/ProjectSubsetItem' + type: array + description: '' security: - Token: [] - summary: Get available subsets of a project (for prompts usage) + summary: ✨ Get available subsets of a project (for prompts usage) tags: - Projects + x-fern-audiences: + - public + x-fern-sdk-group-name: prompts + x-fern-sdk-method-name: subsets /api/prompts/: get: description: List all prompts. @@ -9320,7 +10702,7 @@ paths: description: '' security: - Token: [] - summary: List prompts + summary: ✨ List prompts tags: - Prompts x-fern-audiences: @@ -9328,7 +10710,14 @@ paths: x-fern-sdk-group-name: prompts x-fern-sdk-method-name: list post: - description: Create a new prompt. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new prompt. operationId: api_prompts_create requestBody: content: @@ -9351,7 +10740,7 @@ paths: description: '' security: - Token: [] - summary: Create prompt + summary: ✨ Create prompt tags: - Prompts x-fern-audiences: @@ -9399,7 +10788,7 @@ paths: description: '' security: - Token: [] - summary: List projects compatible with prompt + summary: ✨ List projects compatible with prompt tags: - Prompts x-fern-audiences: @@ -9408,7 +10797,14 @@ paths: x-fern-sdk-method-name: compatible_projects /api/prompts/{id}/: delete: - description: Delete a prompt by ID + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a prompt by ID operationId: api_prompts_destroy parameters: - in: path @@ -9421,7 +10817,7 @@ paths: description: No response body security: - Token: [] - summary: Delete prompt + summary: ✨ Delete prompt tags: - Prompts x-fern-audiences: @@ -9429,7 +10825,14 @@ paths: x-fern-sdk-group-name: prompts x-fern-sdk-method-name: delete get: - description: Retrieve a specific prompt. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a specific prompt. operationId: api_prompts_retrieve parameters: - in: path @@ -9446,7 +10849,7 @@ paths: description: '' security: - Token: [] - summary: Get prompt + summary: ✨ Get prompt tags: - Prompts x-fern-audiences: @@ -9454,7 +10857,14 @@ paths: x-fern-sdk-group-name: prompts x-fern-sdk-method-name: get patch: - description: Update a specific prompt by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific prompt by ID. operationId: api_prompts_partial_update parameters: - in: path @@ -9482,7 +10892,7 @@ paths: description: '' security: - Token: [] - summary: Update prompt + summary: ✨ Update prompt tags: - Prompts x-fern-audiences: @@ -9490,7 +10900,14 @@ paths: x-fern-sdk-group-name: prompts x-fern-sdk-method-name: update put: - description: Overwrite a specific prompt by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overwrite a specific prompt by ID. operationId: api_prompts_update parameters: - in: path @@ -9519,14 +10936,21 @@ paths: description: '' security: - Token: [] - summary: Put prompt + summary: ✨ Put prompt tags: - Prompts x-fern-audiences: - internal /api/prompts/{id}/get-default-version-name: get: - description: Get default prompt version name + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get default prompt version name operationId: api_prompts_get_default_version_name_retrieve parameters: - in: path @@ -9539,7 +10963,7 @@ paths: description: No response body security: - Token: [] - summary: Get default prompt version name + summary: ✨ Get default prompt version name tags: - Prompts x-fern-audiences: @@ -9550,7 +10974,14 @@ paths: x-fern-sdk-method-name: get_default_version_name /api/prompts/{prompt_id}/versions: get: - description: List all versions of a prompt. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all versions of a prompt. operationId: api_prompts_versions_list parameters: - description: Which field to use when ordering the results. @@ -9564,12 +10995,6 @@ paths: required: true schema: type: integer - - description: A unique integer value identifying the model ID to list versions for. - in: query - name: prompt_id - required: true - schema: - type: integer responses: '200': content: @@ -9581,7 +11006,7 @@ paths: description: '' security: - Token: [] - summary: List prompt versions + summary: ✨ List prompt versions tags: - Prompts x-fern-audiences: @@ -9591,7 +11016,14 @@ paths: - versions x-fern-sdk-method-name: list post: - description: Create a new version of a prompt. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new version of a prompt. operationId: api_prompts_versions_create parameters: - in: path @@ -9620,7 +11052,7 @@ paths: description: '' security: - Token: [] - summary: Create prompt version + summary: ✨ Create prompt version tags: - Prompts x-fern-audiences: @@ -9631,7 +11063,14 @@ paths: x-fern-sdk-method-name: create /api/prompts/{prompt_id}/versions/{version_id}: delete: - description: Delete a prompt version by ID + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a prompt version by ID operationId: api_prompts_versions_destroy parameters: - in: path @@ -9649,7 +11088,7 @@ paths: description: No response body security: - Token: [] - summary: Delete prompt version + summary: ✨ Delete prompt version tags: - Prompts x-fern-audiences: @@ -9659,7 +11098,14 @@ paths: - versions x-fern-sdk-method-name: delete get: - description: Retrieve a specific prompt of a model. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a specific prompt of a model. operationId: api_prompts_versions_retrieve parameters: - in: path @@ -9681,7 +11127,7 @@ paths: description: '' security: - Token: [] - summary: Get prompt version + summary: ✨ Get prompt version tags: - Prompts x-fern-audiences: @@ -9691,7 +11137,14 @@ paths: - versions x-fern-sdk-method-name: get patch: - description: Update a specific prompt version by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific prompt version by ID. operationId: api_prompts_versions_partial_update parameters: - in: path @@ -9724,7 +11177,7 @@ paths: description: '' security: - Token: [] - summary: Update prompt version + summary: ✨ Update prompt version tags: - Prompts x-fern-audiences: @@ -9734,7 +11187,14 @@ paths: - versions x-fern-sdk-method-name: update put: - description: Overwrite a specific prompt version by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overwrite a specific prompt version by ID. operationId: api_prompts_versions_update parameters: - in: path @@ -9768,14 +11228,21 @@ paths: description: '' security: - Token: [] - summary: Put prompt version + summary: ✨ Put prompt version tags: - Prompts x-fern-audiences: - internal /api/prompts/{prompt_id}/versions/{version_id}/cost-estimate: get: - description: Get an estimate of the cost for making an inference run on the selected Prompt Version and Project/ProjectSubset + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get an estimate of the cost for making an inference run on the selected Prompt Version and Project/ProjectSubset operationId: api_prompts_versions_cost_estimate_retrieve parameters: - in: path @@ -9797,7 +11264,7 @@ paths: description: Cost estimate response security: - Token: [] - summary: Get cost estimate for running a prompt version on a particular project/subset + summary: ✨ Get cost estimate for running a prompt version on a particular project/subset tags: - Prompts x-fern-audiences: @@ -9808,7 +11275,14 @@ paths: x-fern-sdk-method-name: cost_estimate /api/prompts/{prompt_id}/versions/{version_id}/inference-runs: get: - description: Get information (status, metadata, etc) about an existing inference run + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get information (status, metadata, etc) about an existing inference run operationId: api_prompts_versions_inference_runs_list parameters: - description: Which field to use when ordering the results. @@ -9857,7 +11331,7 @@ paths: description: '' security: - Token: [] - summary: Get inference run info + summary: ✨ Get inference run info tags: - Prompts x-fern-audiences: @@ -9867,7 +11341,14 @@ paths: - runs x-fern-sdk-method-name: list post: - description: Run a prompt inference. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Run a prompt inference. operationId: api_prompts_versions_inference_runs_create parameters: - in: path @@ -9901,7 +11382,7 @@ paths: description: '' security: - Token: [] - summary: Run prompt inference + summary: ✨ Run prompt inference tags: - Prompts x-fern-audiences: @@ -9912,7 +11393,14 @@ paths: x-fern-sdk-method-name: create /api/prompts/{prompt_id}/versions/{version_id}/inference-runs/{inference_run_id}/cancel: post: - description: Cancel the inference run for the given api + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Cancel the inference run for the given api operationId: api_prompts_versions_inference_runs_cancel_create parameters: - in: path @@ -9931,16 +11419,33 @@ paths: schema: type: integer responses: - '201': - description: No response body + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/CancelModelRunResponse' + description: '' security: - Token: [] - summary: Cancel Inference Run API + summary: ✨ Cancel Inference Run API tags: - Prompts + x-fern-audiences: + - public + x-fern-sdk-group-name: + - prompts + - runs + x-fern-sdk-method-name: cancel /api/prompts/{prompt_id}/versions/{version_id}/refine: get: - description: Get the refined prompt based on the `refinement_job_id`. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get the refined prompt based on the `refinement_job_id`. operationId: api_prompts_versions_refine_retrieve parameters: - in: path @@ -9973,7 +11478,7 @@ paths: description: Refinement job status security: - Token: [] - summary: Get refined prompt + summary: ✨ Get refined prompt tags: - Prompts x-fern-audiences: @@ -9983,7 +11488,14 @@ paths: - versions x-fern-sdk-method-name: get_refined_prompt post: - description: Refine a prompt version using a teacher model and save the refined prompt as a new version. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Refine a prompt version using a teacher model and save the refined prompt as a new version. operationId: api_prompts_versions_refine_create parameters: - description: Whether to run the refinement asynchronously @@ -10022,7 +11534,7 @@ paths: description: Refined prompt response security: - Token: [] - summary: Refine a prompt version + summary: ✨ Refine a prompt version tags: - Prompts x-fern-audiences: @@ -10033,7 +11545,14 @@ paths: x-fern-sdk-method-name: refine_prompt /api/saml/settings: get: - description: Retrieve SAML2 settings for the currently active organization. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve SAML2 settings for the currently active organization. operationId: api_saml_settings_retrieve responses: '200': @@ -10058,7 +11577,7 @@ paths: description: '' security: - Token: [] - summary: Retrieve SAML2 Settings + summary: ✨ Retrieve SAML2 Settings tags: - SSO x-fern-audiences: @@ -10068,7 +11587,14 @@ paths: - saml x-fern-sdk-method-name: get post: - description: Update SAML2 settings for the currently active organization. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update SAML2 settings for the currently active organization. operationId: api_saml_settings_create requestBody: content: @@ -10118,7 +11644,7 @@ paths: description: '' security: - Token: [] - summary: Update SAML2 Settings + summary: ✨ Update SAML2 Settings tags: - SSO x-fern-audiences: @@ -10129,7 +11655,14 @@ paths: x-fern-sdk-method-name: update /api/scim/settings: get: - description: Retrieve SCIM settings for the currently active organization. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve SCIM settings for the currently active organization. operationId: api_scim_settings_retrieve responses: '200': @@ -10154,7 +11687,7 @@ paths: description: '' security: - Token: [] - summary: Retrieve SCIM Settings + summary: ✨ Retrieve SCIM Settings tags: - SSO x-fern-audiences: @@ -10164,7 +11697,14 @@ paths: - scim x-fern-sdk-method-name: get post: - description: Update SCIM settings for the currently active organization. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update SCIM settings for the currently active organization. operationId: api_scim_settings_create requestBody: content: @@ -10214,7 +11754,7 @@ paths: description: '' security: - Token: [] - summary: Update SCIM Settings + summary: ✨ Update SCIM Settings tags: - SSO x-fern-audiences: @@ -10319,6 +11859,7 @@ paths: - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -10624,17 +12165,26 @@ paths: x-fern-sdk-method-name: sync /api/storages/azure_spi/: get: - description: Get list of all Azure import storage connections set up with Service Principal authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get list of all Azure import storage connections set up with Service Principal authentication. operationId: api_storages_azure_spi_list parameters: - description: Which field to use when ordering the results. in: query name: ordering + required: false schema: type: string - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -10648,7 +12198,7 @@ paths: description: '' security: - Token: [] - summary: Get Azure SPI import storage + summary: ✨ Get Azure SPI import storage tags: - 'Storage: Azure SPI' x-fern-audiences: @@ -10658,7 +12208,14 @@ paths: - azure_spi x-fern-sdk-method-name: list post: - description: Create Azure import storage with Service Principal authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create Azure import storage with Service Principal authentication. operationId: api_storages_azure_spi_create requestBody: content: @@ -10681,7 +12238,7 @@ paths: description: '' security: - Token: [] - summary: Create Azure import storage with SPI + summary: ✨ Create Azure import storage with SPI tags: - 'Storage: Azure SPI' x-fern-audiences: @@ -10692,7 +12249,14 @@ paths: x-fern-sdk-method-name: create /api/storages/azure_spi/validate: post: - description: Validate a specific Azure import storage connection that was set up with Service Principal authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate a specific Azure import storage connection that was set up with Service Principal authentication. operationId: api_storages_azure_spi_validate_create requestBody: content: @@ -10711,7 +12275,7 @@ paths: description: Validation successful security: - Token: [] - summary: Validate Azure SPI import storage + summary: ✨ Validate Azure SPI import storage tags: - 'Storage: Azure SPI' x-fern-audiences: @@ -10722,7 +12286,14 @@ paths: x-fern-sdk-method-name: validate /api/storages/azure_spi/{id}: delete: - description: Delete a specific Azure import storage connection that was set up with Service Principal authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific Azure import storage connection that was set up with Service Principal authentication. operationId: api_storages_azure_spi_destroy parameters: - in: path @@ -10735,7 +12306,7 @@ paths: description: No response body security: - Token: [] - summary: Delete Azure SPI import storage + summary: ✨ Delete Azure SPI import storage tags: - 'Storage: Azure SPI' x-fern-audiences: @@ -10745,7 +12316,14 @@ paths: - azure_spi x-fern-sdk-method-name: delete get: - description: Get a specific Azure import storage connection that was set up with Service Principal authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific Azure import storage connection that was set up with Service Principal authentication. operationId: api_storages_azure_spi_retrieve parameters: - in: path @@ -10762,7 +12340,7 @@ paths: description: '' security: - Token: [] - summary: Get Azure SPI import storage + summary: ✨ Get Azure SPI import storage tags: - 'Storage: Azure SPI' x-fern-audiences: @@ -10772,7 +12350,14 @@ paths: - azure_spi x-fern-sdk-method-name: get patch: - description: Update a specific Azure import storage connection that was set up with Service Principal authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific Azure import storage connection that was set up with Service Principal authentication. operationId: api_storages_azure_spi_partial_update parameters: - in: path @@ -10800,7 +12385,7 @@ paths: description: '' security: - Token: [] - summary: Update Azure SPI import storage + summary: ✨ Update Azure SPI import storage tags: - 'Storage: Azure SPI' x-fern-audiences: @@ -10811,7 +12396,14 @@ paths: x-fern-sdk-method-name: update /api/storages/azure_spi/{id}/sync: post: - description: Sync tasks from an Azure import storage connection that was set up with Service Principal authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Sync tasks from an Azure import storage connection that was set up with Service Principal authentication. operationId: api_storages_azure_spi_sync_create parameters: - in: path @@ -10828,7 +12420,7 @@ paths: description: '' security: - Token: [] - summary: Sync Azure SPI import storage + summary: ✨ Sync Azure SPI import storage tags: - 'Storage: Azure SPI' x-fern-audiences: @@ -10839,7 +12431,14 @@ paths: x-fern-sdk-method-name: sync /api/storages/databricks/: get: - description: List Databricks Files import storage connections. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get list of all Databricks Files import storage connections. operationId: api_storages_databricks_list parameters: - description: Which field to use when ordering the results. @@ -10848,6 +12447,12 @@ paths: required: false schema: type: string + - description: Project ID + in: query + name: project + required: true + schema: + type: integer responses: '200': content: @@ -10859,11 +12464,24 @@ paths: description: '' security: - Token: [] - summary: Get Databricks import storages + summary: ✨ List Databricks import storages tags: - 'Storage: Databricks Files' + x-fern-audiences: + - public + x-fern-sdk-group-name: + - import_storage + - databricks + x-fern-sdk-method-name: list post: - description: Create a Databricks Files import storage connection. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a Databricks Files import storage connection. operationId: api_storages_databricks_create requestBody: content: @@ -10886,12 +12504,25 @@ paths: description: '' security: - Token: [] - summary: Create Databricks import storage + summary: ✨ Create Databricks import storage tags: - 'Storage: Databricks Files' + x-fern-audiences: + - public + x-fern-sdk-group-name: + - import_storage + - databricks + x-fern-sdk-method-name: create /api/storages/databricks/validate: post: - description: Validate a specific Databricks Files import storage connection. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate a specific Databricks Files import storage connection. operationId: api_storages_databricks_validate_create requestBody: content: @@ -10906,20 +12537,29 @@ paths: $ref: '#/components/schemas/DatabricksImportStorageRequest' required: true responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/DatabricksImportStorage' - description: '' + '200': + description: Validation successful security: - Token: [] - summary: Validate Databricks import storage + summary: ✨ Validate Databricks import storage tags: - 'Storage: Databricks Files' + x-fern-audiences: + - public + x-fern-sdk-group-name: + - import_storage + - databricks + x-fern-sdk-method-name: validate /api/storages/databricks/{id}: delete: - description: Delete a specific Databricks Files import storage connection. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific Databricks Files import storage connection. operationId: api_storages_databricks_destroy parameters: - in: path @@ -10932,11 +12572,24 @@ paths: description: No response body security: - Token: [] - summary: Delete Databricks import storage + summary: ✨ Delete Databricks import storage tags: - 'Storage: Databricks Files' + x-fern-audiences: + - public + x-fern-sdk-group-name: + - import_storage + - databricks + x-fern-sdk-method-name: delete get: - description: Retrieve a specific Databricks Files import storage connection. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific Databricks Files import storage connection. operationId: api_storages_databricks_retrieve parameters: - in: path @@ -10953,11 +12606,24 @@ paths: description: '' security: - Token: [] - summary: Get Databricks import storage + summary: ✨ Get Databricks import storage tags: - 'Storage: Databricks Files' + x-fern-audiences: + - public + x-fern-sdk-group-name: + - import_storage + - databricks + x-fern-sdk-method-name: get patch: - description: Update a specific Databricks Files import storage connection. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific Databricks Files import storage connection. operationId: api_storages_databricks_partial_update parameters: - in: path @@ -10985,12 +12651,25 @@ paths: description: '' security: - Token: [] - summary: Update Databricks import storage + summary: ✨ Update Databricks import storage tags: - 'Storage: Databricks Files' + x-fern-audiences: + - public + x-fern-sdk-group-name: + - import_storage + - databricks + x-fern-sdk-method-name: update /api/storages/databricks/{id}/sync: post: - description: Sync tasks from a Databricks Files import storage. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Sync tasks from a Databricks Files import storage. operationId: api_storages_databricks_sync_create parameters: - in: path @@ -10998,18 +12677,6 @@ paths: required: true schema: type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DatabricksImportStorageRequest' - application/x-www-form-urlencoded: - schema: - $ref: '#/components/schemas/DatabricksImportStorageRequest' - multipart/form-data: - schema: - $ref: '#/components/schemas/DatabricksImportStorageRequest' - required: true responses: '200': content: @@ -11019,9 +12686,15 @@ paths: description: '' security: - Token: [] - summary: Sync Databricks import storage + summary: ✨ Sync Databricks import storage tags: - 'Storage: Databricks Files' + x-fern-audiences: + - public + x-fern-sdk-group-name: + - import_storage + - databricks + x-fern-sdk-method-name: sync /api/storages/export: get: description: Retrieve a list of the export storages of all types with their IDs. @@ -11068,6 +12741,7 @@ paths: - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -11339,17 +13013,26 @@ paths: x-fern-sdk-method-name: sync /api/storages/export/azure_spi: get: - description: Get a list of all Azure export storage connections that were set up with Service Principal authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a list of all Azure export storage connections that were set up with Service Principal authentication. operationId: api_storages_export_azure_spi_list parameters: - description: Which field to use when ordering the results. in: query name: ordering + required: false schema: type: string - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -11363,7 +13046,7 @@ paths: description: '' security: - Token: [] - summary: Get all Azure SPI export storage + summary: ✨ Get all Azure SPI export storage tags: - 'Storage: Azure SPI' x-fern-audiences: @@ -11373,7 +13056,14 @@ paths: - azure_spi x-fern-sdk-method-name: list post: - description: Create an Azure export storage connection with Service Principal authentication to store annotations. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create an Azure export storage connection with Service Principal authentication to store annotations. operationId: api_storages_export_azure_spi_create requestBody: content: @@ -11396,7 +13086,7 @@ paths: description: '' security: - Token: [] - summary: Create Azure export storage with SPI authentication + summary: ✨ Create Azure export storage with SPI authentication tags: - 'Storage: Azure SPI' x-fern-audiences: @@ -11407,7 +13097,14 @@ paths: x-fern-sdk-method-name: create /api/storages/export/azure_spi/validate: post: - description: Validate a specific Azure export storage connection that was set up with Service Principal authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate a specific Azure export storage connection that was set up with Service Principal authentication. operationId: api_storages_export_azure_spi_validate_create requestBody: content: @@ -11426,7 +13123,7 @@ paths: description: Validation successful security: - Token: [] - summary: Validate Azure SPI export storage + summary: ✨ Validate Azure SPI export storage tags: - 'Storage: Azure SPI' x-fern-audiences: @@ -11437,7 +13134,14 @@ paths: x-fern-sdk-method-name: validate /api/storages/export/azure_spi/{id}: delete: - description: Delete a specific Azure export storage connection that was set up with Service Principal authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific Azure export storage connection that was set up with Service Principal authentication. operationId: api_storages_export_azure_spi_destroy parameters: - in: path @@ -11450,7 +13154,7 @@ paths: description: No response body security: - Token: [] - summary: Delete Azure SPI export storage + summary: ✨ Delete Azure SPI export storage tags: - 'Storage: Azure SPI' x-fern-audiences: @@ -11460,7 +13164,14 @@ paths: - azure_spi x-fern-sdk-method-name: delete get: - description: Get a specific Azure export storage connection that was set up with Service Principal authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific Azure export storage connection that was set up with Service Principal authentication. operationId: api_storages_export_azure_spi_retrieve parameters: - in: path @@ -11477,7 +13188,7 @@ paths: description: '' security: - Token: [] - summary: Get Azure SPI export storage + summary: ✨ Get Azure SPI export storage tags: - 'Storage: Azure SPI' x-fern-audiences: @@ -11487,7 +13198,14 @@ paths: - azure_spi x-fern-sdk-method-name: get patch: - description: Update a specific Azure export storage connection that was set up with Service Principal authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific Azure export storage connection that was set up with Service Principal authentication. operationId: api_storages_export_azure_spi_partial_update parameters: - in: path @@ -11515,7 +13233,7 @@ paths: description: '' security: - Token: [] - summary: Update Azure SPI export storage + summary: ✨ Update Azure SPI export storage tags: - 'Storage: Azure SPI' x-fern-audiences: @@ -11526,7 +13244,14 @@ paths: x-fern-sdk-method-name: update /api/storages/export/azure_spi/{id}/sync: post: - description: Sync tasks from an Azure SPI export storage. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Sync tasks from an Azure SPI export storage. operationId: api_storages_export_azure_spi_sync_create parameters: - in: path @@ -11543,7 +13268,7 @@ paths: description: '' security: - Token: [] - summary: Sync Azure SPI export storage + summary: ✨ Sync Azure SPI export storage tags: - 'Storage: Azure SPI' x-fern-audiences: @@ -11554,7 +13279,14 @@ paths: x-fern-sdk-method-name: sync /api/storages/export/databricks: get: - description: List Databricks Files export storage connections. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a list of all Databricks Files export storage connections. operationId: api_storages_export_databricks_list parameters: - description: Which field to use when ordering the results. @@ -11563,6 +13295,12 @@ paths: required: false schema: type: string + - description: Project ID + in: query + name: project + required: true + schema: + type: integer responses: '200': content: @@ -11574,11 +13312,24 @@ paths: description: '' security: - Token: [] - summary: Get Databricks export storages + summary: ✨ List Databricks export storages tags: - 'Storage: Databricks Files' + x-fern-audiences: + - public + x-fern-sdk-group-name: + - export_storage + - databricks + x-fern-sdk-method-name: list post: - description: Create a Databricks Files export storage connection. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a Databricks Files export storage connection. operationId: api_storages_export_databricks_create requestBody: content: @@ -11601,12 +13352,25 @@ paths: description: '' security: - Token: [] - summary: Create Databricks export storage + summary: ✨ Create Databricks export storage tags: - 'Storage: Databricks Files' + x-fern-audiences: + - public + x-fern-sdk-group-name: + - export_storage + - databricks + x-fern-sdk-method-name: create /api/storages/export/databricks/validate: post: - description: Validate a specific Databricks Files export storage connection. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate a specific Databricks Files export storage connection. operationId: api_storages_export_databricks_validate_create requestBody: content: @@ -11621,20 +13385,29 @@ paths: $ref: '#/components/schemas/DatabricksExportStorageRequest' required: true responses: - '201': - content: - application/json: - schema: - $ref: '#/components/schemas/DatabricksExportStorage' - description: '' + '200': + description: Validation successful security: - Token: [] - summary: Validate Databricks export storage + summary: ✨ Validate Databricks export storage tags: - 'Storage: Databricks Files' + x-fern-audiences: + - public + x-fern-sdk-group-name: + - export_storage + - databricks + x-fern-sdk-method-name: validate /api/storages/export/databricks/{id}: delete: - description: Delete a specific Databricks Files export storage connection. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific Databricks Files export storage connection. operationId: api_storages_export_databricks_destroy parameters: - in: path @@ -11647,11 +13420,24 @@ paths: description: No response body security: - Token: [] - summary: Delete Databricks export storage + summary: ✨ Delete Databricks export storage tags: - 'Storage: Databricks Files' + x-fern-audiences: + - public + x-fern-sdk-group-name: + - export_storage + - databricks + x-fern-sdk-method-name: delete get: - description: Retrieve a specific Databricks Files export storage connection. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific Databricks Files export storage connection. operationId: api_storages_export_databricks_retrieve parameters: - in: path @@ -11668,11 +13454,24 @@ paths: description: '' security: - Token: [] - summary: Get Databricks export storage + summary: ✨ Get Databricks export storage tags: - 'Storage: Databricks Files' + x-fern-audiences: + - public + x-fern-sdk-group-name: + - export_storage + - databricks + x-fern-sdk-method-name: get patch: - description: Update a specific Databricks Files export storage connection. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific Databricks Files export storage connection. operationId: api_storages_export_databricks_partial_update parameters: - in: path @@ -11700,12 +13499,25 @@ paths: description: '' security: - Token: [] - summary: Update Databricks export storage + summary: ✨ Update Databricks export storage tags: - 'Storage: Databricks Files' + x-fern-audiences: + - public + x-fern-sdk-group-name: + - export_storage + - databricks + x-fern-sdk-method-name: update /api/storages/export/databricks/{id}/sync: post: - description: Export annotations to a Databricks Files storage. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Export annotations to a Databricks Files storage. operationId: api_storages_export_databricks_sync_create parameters: - in: path @@ -11713,18 +13525,6 @@ paths: required: true schema: type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DatabricksExportStorageRequest' - application/x-www-form-urlencoded: - schema: - $ref: '#/components/schemas/DatabricksExportStorageRequest' - multipart/form-data: - schema: - $ref: '#/components/schemas/DatabricksExportStorageRequest' - required: true responses: '200': content: @@ -11734,9 +13534,15 @@ paths: description: '' security: - Token: [] - summary: Sync Databricks export storage + summary: ✨ Sync Databricks export storage tags: - 'Storage: Databricks Files' + x-fern-audiences: + - public + x-fern-sdk-group-name: + - export_storage + - databricks + x-fern-sdk-method-name: sync /api/storages/export/gcs: get: description: Get a list of all GCS export storage connections. @@ -11751,6 +13557,7 @@ paths: - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -12022,17 +13829,26 @@ paths: x-fern-sdk-method-name: sync /api/storages/export/gcswif: get: - description: Get a list of all GCS export storage connections that were set up with WIF authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a list of all GCS export storage connections that were set up with WIF authentication. operationId: api_storages_export_gcswif_list parameters: - description: Which field to use when ordering the results. in: query name: ordering + required: false schema: type: string - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -12046,7 +13862,7 @@ paths: description: '' security: - Token: [] - summary: Get all GCS WIF export storage + summary: ✨ Get all GCS WIF export storage tags: - 'Storage: GCS WIF' x-fern-audiences: @@ -12056,7 +13872,14 @@ paths: - gcswif x-fern-sdk-method-name: list post: - description: Create an GCS export storage connection with WIF authentication to store annotations. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create an GCS export storage connection with WIF authentication to store annotations. operationId: api_storages_export_gcswif_create requestBody: content: @@ -12079,7 +13902,7 @@ paths: description: '' security: - Token: [] - summary: Create GCS export storage with WIF authentication + summary: ✨ Create GCS export storage with WIF authentication tags: - 'Storage: GCS WIF' x-fern-audiences: @@ -12090,7 +13913,14 @@ paths: x-fern-sdk-method-name: create /api/storages/export/gcswif/validate: post: - description: Validate a specific GCS export storage connection that was set up with WIF authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate a specific GCS export storage connection that was set up with WIF authentication. operationId: api_storages_export_gcswif_validate_create requestBody: content: @@ -12109,7 +13939,7 @@ paths: description: Validation successful security: - Token: [] - summary: Validate GCS WIF export storage + summary: ✨ Validate GCS WIF export storage tags: - 'Storage: GCS WIF' x-fern-audiences: @@ -12120,7 +13950,14 @@ paths: x-fern-sdk-method-name: validate /api/storages/export/gcswif/{id}: delete: - description: Delete a specific GCS export storage connection that was set up with WIF authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific GCS export storage connection that was set up with WIF authentication. operationId: api_storages_export_gcswif_destroy parameters: - in: path @@ -12133,7 +13970,7 @@ paths: description: No response body security: - Token: [] - summary: Delete GCS WIF export storage + summary: ✨ Delete GCS WIF export storage tags: - 'Storage: GCS WIF' x-fern-audiences: @@ -12143,7 +13980,14 @@ paths: - gcswif x-fern-sdk-method-name: delete get: - description: Get a specific GCS export storage connection that was set up with WIF authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific GCS export storage connection that was set up with WIF authentication. operationId: api_storages_export_gcswif_retrieve parameters: - in: path @@ -12160,7 +14004,7 @@ paths: description: '' security: - Token: [] - summary: Get GCS WIF export storage + summary: ✨ Get GCS WIF export storage tags: - 'Storage: GCS WIF' x-fern-audiences: @@ -12170,7 +14014,14 @@ paths: - gcswif x-fern-sdk-method-name: get patch: - description: Update a specific GCS export storage connection that was set up with WIF authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific GCS export storage connection that was set up with WIF authentication. operationId: api_storages_export_gcswif_partial_update parameters: - in: path @@ -12198,7 +14049,7 @@ paths: description: '' security: - Token: [] - summary: Update GCS WIF export storage + summary: ✨ Update GCS WIF export storage tags: - 'Storage: GCS WIF' x-fern-audiences: @@ -12209,7 +14060,14 @@ paths: x-fern-sdk-method-name: update /api/storages/export/gcswif/{id}/sync: post: - description: Sync tasks from an GCS WIF export storage. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Sync tasks from an GCS WIF export storage. operationId: api_storages_export_gcswif_sync_create parameters: - in: path @@ -12226,7 +14084,7 @@ paths: description: '' security: - Token: [] - summary: Sync GCS WIF export storage + summary: ✨ Sync GCS WIF export storage tags: - 'Storage: GCS WIF' x-fern-audiences: @@ -12249,6 +14107,7 @@ paths: - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -12514,6 +14373,7 @@ paths: - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -12806,6 +14666,7 @@ paths: - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -13113,17 +14974,26 @@ paths: x-fern-sdk-method-name: sync /api/storages/export/s3s: get: - description: Get a list of all S3 export storage connections that were set up with IAM role access. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a list of all S3 export storage connections that were set up with IAM role access. operationId: api_storages_export_s3s_list parameters: - description: Which field to use when ordering the results. in: query name: ordering + required: false schema: type: string - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -13137,7 +15007,7 @@ paths: description: '' security: - Token: [] - summary: List S3s export storage + summary: ✨ List S3s export storage tags: - 'Storage: S3 Roles' x-fern-audiences: @@ -13147,7 +15017,14 @@ paths: - s3s x-fern-sdk-method-name: list post: - description: Create an S3 export storage connection with IAM role access to store annotations. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create an S3 export storage connection with IAM role access to store annotations. operationId: api_storages_export_s3s_create requestBody: content: @@ -13170,7 +15047,7 @@ paths: description: '' security: - Token: [] - summary: Create export storage + summary: ✨ Create export storage tags: - 'Storage: S3 Roles' x-fern-audiences: @@ -13181,7 +15058,14 @@ paths: x-fern-sdk-method-name: create /api/storages/export/s3s/validate: post: - description: Validate a specific S3 export storage connection that was set up with IAM role access. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate a specific S3 export storage connection that was set up with IAM role access. operationId: api_storages_export_s3s_validate_create requestBody: content: @@ -13200,7 +15084,7 @@ paths: description: Validation successful security: - Token: [] - summary: Validate export storage + summary: ✨ Validate export storage tags: - 'Storage: S3 Roles' x-fern-audiences: @@ -13211,7 +15095,14 @@ paths: x-fern-sdk-method-name: validate /api/storages/export/s3s/{id}: delete: - description: Delete a specific S3 export storage connection that was set up with IAM role access. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific S3 export storage connection that was set up with IAM role access. operationId: api_storages_export_s3s_destroy parameters: - in: path @@ -13224,7 +15115,7 @@ paths: description: No response body security: - Token: [] - summary: Delete export storage + summary: ✨ Delete export storage tags: - 'Storage: S3 Roles' x-fern-audiences: @@ -13234,7 +15125,14 @@ paths: - s3s x-fern-sdk-method-name: delete get: - description: Get a specific S3 export storage connection that was set up with IAM role access. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific S3 export storage connection that was set up with IAM role access. operationId: api_storages_export_s3s_retrieve parameters: - in: path @@ -13251,7 +15149,7 @@ paths: description: '' security: - Token: [] - summary: Get export storage + summary: ✨ Get export storage tags: - 'Storage: S3 Roles' x-fern-audiences: @@ -13261,7 +15159,14 @@ paths: - s3s x-fern-sdk-method-name: get patch: - description: Update a specific S3 export storage connection that was set up with IAM role access. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific S3 export storage connection that was set up with IAM role access. operationId: api_storages_export_s3s_partial_update parameters: - in: path @@ -13289,7 +15194,7 @@ paths: description: '' security: - Token: [] - summary: Update export storage + summary: ✨ Update export storage tags: - 'Storage: S3 Roles' x-fern-audiences: @@ -13300,7 +15205,14 @@ paths: x-fern-sdk-method-name: update /api/storages/export/s3s/{id}/sync: post: - description: Sync tasks from an S3 export storage. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Sync tasks from an S3 export storage. operationId: api_storages_export_s3s_sync_create parameters: - in: path @@ -13317,7 +15229,7 @@ paths: description: '' security: - Token: [] - summary: Sync export storage + summary: ✨ Sync export storage tags: - 'Storage: S3 Roles' x-fern-audiences: @@ -13368,6 +15280,7 @@ paths: - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -13673,17 +15586,26 @@ paths: x-fern-sdk-method-name: sync /api/storages/gcswif/: get: - description: Get list of all GCS import storage connections set up with WIF authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get list of all GCS import storage connections set up with WIF authentication. operationId: api_storages_gcswif_list parameters: - description: Which field to use when ordering the results. in: query name: ordering + required: false schema: type: string - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -13697,7 +15619,7 @@ paths: description: '' security: - Token: [] - summary: Get GCS WIF import storage + summary: ✨ Get GCS WIF import storage tags: - 'Storage: GCS WIF' x-fern-audiences: @@ -13707,7 +15629,14 @@ paths: - gcswif x-fern-sdk-method-name: list post: - description: Create GCS import storage with WIF. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create GCS import storage with WIF. operationId: api_storages_gcswif_create requestBody: content: @@ -13730,7 +15659,7 @@ paths: description: '' security: - Token: [] - summary: Create GCS import storage with WIF + summary: ✨ Create GCS import storage with WIF tags: - 'Storage: GCS WIF' x-fern-audiences: @@ -13741,7 +15670,14 @@ paths: x-fern-sdk-method-name: create /api/storages/gcswif/validate: post: - description: Validate a specific GCS import storage connection that was set up with WIF authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate a specific GCS import storage connection that was set up with WIF authentication. operationId: api_storages_gcswif_validate_create requestBody: content: @@ -13760,7 +15696,7 @@ paths: description: Validation successful security: - Token: [] - summary: Validate GCS WIF import storage + summary: ✨ Validate GCS WIF import storage tags: - 'Storage: GCS WIF' x-fern-audiences: @@ -13771,7 +15707,14 @@ paths: x-fern-sdk-method-name: validate /api/storages/gcswif/{id}: delete: - description: Delete a specific GCS import storage connection that was set up with WIF authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific GCS import storage connection that was set up with WIF authentication. operationId: api_storages_gcswif_destroy parameters: - in: path @@ -13784,7 +15727,7 @@ paths: description: No response body security: - Token: [] - summary: Delete GCS WIF import storage + summary: ✨ Delete GCS WIF import storage tags: - 'Storage: GCS WIF' x-fern-audiences: @@ -13794,7 +15737,14 @@ paths: - gcswif x-fern-sdk-method-name: delete get: - description: Get a specific GCS import storage connection that was set up with WIF. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific GCS import storage connection that was set up with WIF. operationId: api_storages_gcswif_retrieve parameters: - in: path @@ -13811,7 +15761,7 @@ paths: description: '' security: - Token: [] - summary: Get GCS WIF import storage + summary: ✨ Get GCS WIF import storage tags: - 'Storage: GCS WIF' x-fern-audiences: @@ -13821,7 +15771,14 @@ paths: - gcswif x-fern-sdk-method-name: get patch: - description: Update a specific GCS import storage connection that was set up with WIF authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific GCS import storage connection that was set up with WIF authentication. operationId: api_storages_gcswif_partial_update parameters: - in: path @@ -13849,7 +15806,7 @@ paths: description: '' security: - Token: [] - summary: Update GCS WIF import storage + summary: ✨ Update GCS WIF import storage tags: - 'Storage: GCS WIF' x-fern-audiences: @@ -13860,7 +15817,14 @@ paths: x-fern-sdk-method-name: update /api/storages/gcswif/{id}/sync: post: - description: Sync tasks from an GCS import storage connection that was set up with WIF authentication. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Sync tasks from an GCS import storage connection that was set up with WIF authentication. operationId: api_storages_gcswif_sync_create parameters: - in: path @@ -13877,7 +15841,7 @@ paths: description: '' security: - Token: [] - summary: Sync GCS WIF import storage + summary: ✨ Sync GCS WIF import storage tags: - 'Storage: GCS WIF' x-fern-audiences: @@ -13900,6 +15864,7 @@ paths: - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -14166,6 +16131,7 @@ paths: - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -14459,6 +16425,7 @@ paths: - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -14809,17 +16776,26 @@ paths: x-fern-sdk-method-name: sync /api/storages/s3s/: get: - description: Get list of all S3 import storage connections set up with IAM role access. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get list of all S3 import storage connections set up with IAM role access. operationId: api_storages_s3s_list parameters: - description: Which field to use when ordering the results. in: query name: ordering + required: false schema: type: string - description: Project ID in: query name: project + required: true schema: type: integer responses: @@ -14833,7 +16809,7 @@ paths: description: '' security: - Token: [] - summary: List S3s import storage + summary: ✨ List S3s import storage tags: - 'Storage: S3 Roles' x-fern-audiences: @@ -14843,7 +16819,14 @@ paths: - s3s x-fern-sdk-method-name: list post: - description: Create S3 import storage with IAM role access. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create S3 import storage with IAM role access. operationId: api_storages_s3s_create requestBody: content: @@ -14866,7 +16849,7 @@ paths: description: '' security: - Token: [] - summary: Create import storage + summary: ✨ Create import storage tags: - 'Storage: S3 Roles' x-fern-audiences: @@ -14877,7 +16860,14 @@ paths: x-fern-sdk-method-name: create /api/storages/s3s/validate: post: - description: Validate a specific S3 import storage connection that was set up with IAM role access. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate a specific S3 import storage connection that was set up with IAM role access. operationId: api_storages_s3s_validate_create requestBody: content: @@ -14896,7 +16886,7 @@ paths: description: Validation successful security: - Token: [] - summary: Validate import storage + summary: ✨ Validate import storage tags: - 'Storage: S3 Roles' x-fern-audiences: @@ -14907,7 +16897,14 @@ paths: x-fern-sdk-method-name: validate /api/storages/s3s/{id}: delete: - description: Delete a specific S3 import storage connection that was set up with IAM role access. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific S3 import storage connection that was set up with IAM role access. operationId: api_storages_s3s_destroy parameters: - in: path @@ -14920,7 +16917,7 @@ paths: description: No response body security: - Token: [] - summary: Delete import storage + summary: ✨ Delete import storage tags: - 'Storage: S3 Roles' x-fern-audiences: @@ -14930,7 +16927,14 @@ paths: - s3s x-fern-sdk-method-name: delete get: - description: Get a specific S3 import storage connection that was set up with IAM role access. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific S3 import storage connection that was set up with IAM role access. operationId: api_storages_s3s_retrieve parameters: - in: path @@ -14947,7 +16951,7 @@ paths: description: '' security: - Token: [] - summary: Get import storage + summary: ✨ Get import storage tags: - 'Storage: S3 Roles' x-fern-audiences: @@ -14957,7 +16961,14 @@ paths: - s3s x-fern-sdk-method-name: get patch: - description: Update a specific S3 import storage connection that was set up with IAM role access. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific S3 import storage connection that was set up with IAM role access. operationId: api_storages_s3s_partial_update parameters: - in: path @@ -14985,7 +16996,7 @@ paths: description: '' security: - Token: [] - summary: Update import storage + summary: ✨ Update import storage tags: - 'Storage: S3 Roles' x-fern-audiences: @@ -14996,7 +17007,14 @@ paths: x-fern-sdk-method-name: update /api/storages/s3s/{id}/sync: post: - description: Sync tasks from an S3 import storage connection that was set up with IAM role access. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Sync tasks from an S3 import storage connection that was set up with IAM role access. operationId: api_storages_s3s_sync_create parameters: - in: path @@ -15013,7 +17031,7 @@ paths: description: '' security: - Token: [] - summary: Sync import storage + summary: ✨ Sync import storage tags: - 'Storage: S3 Roles' x-fern-audiences: @@ -15158,6 +17176,15 @@ paths: requestBody: content: application/json: + examples: + CreateTask: + description: Example of Create Task + summary: Create Task + value: + data: + image: https://example.com/image.jpg + text: Hello, world! + project: 1 schema: $ref: '#/components/schemas/LseTaskRequest' application/x-www-form-urlencoded: @@ -15457,7 +17484,7 @@ paths: x-fern-sdk-method-name: create /api/tasks/{id}/events/: post: - description: "\n Create a new task event to track user interactions and system events during annotation.\n \n This endpoint is designed to receive events from the frontend labeling interface to enable\n accurate lead time calculation and detailed annotation analytics.\n \n ## Event Types\n \n **Core Annotation Events:**\n - `annotation_loaded` - When annotation interface is loaded\n - `annotation_submitted` - When annotation is submitted\n - `annotation_updated` - When annotation is modified\n - `annotation_reviewed` - When annotation is reviewed\n \n **User Activity Events:**\n - `visibility_change` - When page visibility changes (tab switch, minimize)\n - `idle_detected` - When user goes idle\n - `idle_resumed` - When user returns from idle\n \n **Interaction Events:**\n - `region_finished_drawing` - When annotation region is completed\n - `region_deleted` - When annotation regions are removed\n - `hotkey_pressed` - When keyboard shortcuts are used\n \n **Media Events:**\n - `video_playback_start/end` - Video playback control\n - `audio_playback_start/end` - Audio playback control\n - `video_scrub` - Video timeline scrubbing\n \n ## Usage\n \n Events are automatically associated with the task specified in the URL path.\n The current user is automatically set as the actor. Project and organization\n are derived from the task context.\n \n ## Example Request\n \n ```json\n {\n \"event_key\": \"annotation_loaded\",\n \"event_time\": \"2024-01-15T10:30:00Z\",\n \"annotation\": 123,\n \"meta\": {\n \"annotation_count\": 5,\n \"estimated_time\": 300\n }\n }\n ```\n " + description: "\n Create a new task event to track user interactions and system events during annotation.\n\n This endpoint is designed to receive events from the frontend labeling interface to enable\n accurate lead time calculation and detailed annotation analytics.\n\n ## Event Types\n\n **Core Annotation Events:**\n - `annotation_loaded` - When annotation interface is loaded\n - `annotation_submitted` - When annotation is submitted\n - `annotation_updated` - When annotation is modified\n - `annotation_reviewed` - When annotation is reviewed\n\n **User Activity Events:**\n - `visibility_change` - When page visibility changes (tab switch, minimize)\n - `idle_detected` - When user goes idle\n - `idle_resumed` - When user returns from idle\n\n **Interaction Events:**\n - `region_finished_drawing` - When annotation region is completed\n - `region_deleted` - When annotation regions are removed\n - `hotkey_pressed` - When keyboard shortcuts are used\n\n **Media Events:**\n - `video_playback_start/end` - Video playback control\n - `audio_playback_start/end` - Audio playback control\n - `video_scrub` - Video timeline scrubbing\n\n ## Usage\n\n Events are automatically associated with the task specified in the URL path.\n The current user is automatically set as the actor. Project and organization\n are derived from the task context.\n\n ## Example Request\n\n ```json\n {\n \"event_key\": \"annotation_loaded\",\n \"event_time\": \"2024-01-15T10:30:00Z\",\n \"annotation\": 123,\n \"meta\": {\n \"annotation_count\": 5,\n \"estimated_time\": 300\n }\n }\n ```\n " operationId: api_tasks_events_create parameters: - description: Task ID to associate the event with @@ -16316,7 +18343,14 @@ paths: - internal /api/workspaces/: get: - description: List all workspaces for your organization. Workspaces in Label Studio let you organize your projects and users into separate spaces. This is useful for managing different teams, departments, or projects within your organization. For more information, see the [Workspaces documentation](https://docs.humansignal.com/workspaces). + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all workspaces for your organization. Workspaces in Label Studio let you organize your projects and users into separate spaces. This is useful for managing different teams, departments, or projects within your organization. For more information, see the [Workspaces documentation](https://docs.humansignal.com/workspaces). operationId: api_workspaces_list parameters: - description: Workspace is a personal user workspace. @@ -16341,7 +18375,7 @@ paths: description: '' security: - Token: [] - summary: List workspaces + summary: ✨ List workspaces tags: - Workspaces x-fern-audiences: @@ -16349,7 +18383,14 @@ paths: x-fern-sdk-group-name: workspaces x-fern-sdk-method-name: list post: - description: Create a new workspace. Workspaces in Label Studio let you organize your projects and users into separate spaces. This is useful for managing different teams, departments, or projects within your organization. For more information, see the [Workspaces documentation](https://docs.humansignal.com/workspaces). + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new workspace. Workspaces in Label Studio let you organize your projects and users into separate spaces. This is useful for managing different teams, departments, or projects within your organization. For more information, see the [Workspaces documentation](https://docs.humansignal.com/workspaces). operationId: api_workspaces_create requestBody: content: @@ -16372,7 +18413,7 @@ paths: description: '' security: - Token: [] - summary: Create workspace + summary: ✨ Create workspace tags: - Workspaces x-fern-audiences: @@ -16381,7 +18422,14 @@ paths: x-fern-sdk-method-name: create /api/workspaces/{id}/: delete: - description: Delete a specific workspace by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific workspace by ID. operationId: api_workspaces_destroy parameters: - in: path @@ -16394,7 +18442,7 @@ paths: description: No response body security: - Token: [] - summary: Delete workspace + summary: ✨ Delete workspace tags: - Workspaces x-fern-audiences: @@ -16402,7 +18450,14 @@ paths: x-fern-sdk-group-name: workspaces x-fern-sdk-method-name: delete get: - description: Retrieve details for a specific workspace by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve details for a specific workspace by ID. operationId: api_workspaces_retrieve parameters: - in: path @@ -16419,7 +18474,7 @@ paths: description: '' security: - Token: [] - summary: Get workspace + summary: ✨ Get workspace tags: - Workspaces x-fern-audiences: @@ -16427,7 +18482,14 @@ paths: x-fern-sdk-group-name: workspaces x-fern-sdk-method-name: get patch: - description: Update settings for a specific workspace by ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update settings for a specific workspace by ID. operationId: api_workspaces_partial_update parameters: - in: path @@ -16455,7 +18517,7 @@ paths: description: '' security: - Token: [] - summary: Update workspace + summary: ✨ Update workspace tags: - Workspaces x-fern-audiences: @@ -16464,7 +18526,14 @@ paths: x-fern-sdk-method-name: update /api/workspaces/{id}/memberships/: delete: - description: 'Remove a specific member by ID from a workspace. This endpoint expects an object like `{"user_id": 123}`.' + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Remove a specific member by ID from a workspace. This endpoint expects an object like `{"user_id": 123}`. operationId: api_workspaces_memberships_destroy parameters: - in: path @@ -16477,7 +18546,7 @@ paths: description: No response body security: - Token: [] - summary: Delete workspace membership + summary: ✨ Delete workspace membership tags: - Workspaces x-fern-audiences: @@ -16487,7 +18556,14 @@ paths: - members x-fern-sdk-method-name: delete get: - description: Get a list of all members in a specific workspace. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a list of all members in a specific workspace. operationId: api_workspaces_memberships_retrieve parameters: - in: path @@ -16506,7 +18582,7 @@ paths: description: A list of workspace memberships security: - Token: [] - summary: List workspace memberships + summary: ✨ List workspace memberships tags: - Workspaces x-fern-audiences: @@ -16516,7 +18592,14 @@ paths: - members x-fern-sdk-method-name: list post: - description: Add a new workspace member by user ID. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Add a new workspace member by user ID. operationId: api_workspaces_memberships_create parameters: - in: path @@ -16545,7 +18628,7 @@ paths: description: '' security: - Token: [] - summary: Create workspace membership + summary: ✨ Create workspace membership tags: - Workspaces x-fern-audiences: @@ -16556,7 +18639,14 @@ paths: x-fern-sdk-method-name: create /api/workspaces/{id}/memberships/bulk/: delete: - description: Unassign workspace members in bulk. Allows the same request body as bulk assign. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Unassign workspace members in bulk. Allows the same request body as bulk assign. operationId: api_workspaces_memberships_bulk_destroy parameters: - in: path @@ -16576,7 +18666,7 @@ paths: description: '' security: - Token: [] - summary: Bulk unassign workspace members + summary: ✨ Bulk unassign workspace members tags: - Workspaces x-fern-audiences: @@ -16587,7 +18677,14 @@ paths: - bulk x-fern-sdk-method-name: delete post: - description: Assign workspace members in bulk. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Assign workspace members in bulk. operationId: api_workspaces_memberships_bulk_create parameters: - in: path @@ -16619,7 +18716,7 @@ paths: description: '' security: - Token: [] - summary: Bulk assign workspace members + summary: ✨ Bulk assign workspace members tags: - Workspaces x-fern-audiences: @@ -16631,7 +18728,14 @@ paths: x-fern-sdk-method-name: post /api/workspaces/{id}/memberships/paginated/: get: - description: Retrieve the members for a specific workspace. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve the members for a specific workspace. operationId: api_workspaces_memberships_paginated_list parameters: - in: path @@ -16671,7 +18775,7 @@ paths: description: '' security: - Token: [] - summary: Get workspace members paginated + summary: ✨ Get workspace members paginated tags: - Workspaces x-fern-audiences: @@ -16686,7 +18790,14 @@ paths: x-fern-sdk-method-name: list /api/workspaces/{id}/projects/: delete: - description: Delete projects from a specific workspace. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Remove a project from a specific workspace. operationId: api_workspaces_projects_destroy parameters: - in: path @@ -16696,14 +18807,27 @@ paths: type: integer responses: '204': - description: No response body + description: Project removed security: - Token: [] - summary: Remove workspace projects + summary: ✨ Remove workspace project tags: - Workspaces + x-fern-audiences: + - public + x-fern-sdk-group-name: + - workspaces + - projects + x-fern-sdk-method-name: remove get: - description: Retrieve a list of all projects in a specific workspace. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a list of all projects in a specific workspace. operationId: api_workspaces_projects_retrieve parameters: - in: path @@ -16716,15 +18840,30 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Project' - description: '' + items: + $ref: '#/components/schemas/Project' + type: array + description: Projects list security: - Token: [] - summary: List workspace projects + summary: ✨ List workspace projects tags: - Workspaces + x-fern-audiences: + - public + x-fern-sdk-group-name: + - workspaces + - projects + x-fern-sdk-method-name: list post: - description: Create a project in a specific workspace. + description: |- + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Add a project to a specific workspace. operationId: api_workspaces_projects_create parameters: - in: path @@ -16736,25 +18875,28 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/ProjectRequest' + $ref: '#/components/schemas/WorkspaceProjectsRequest' application/x-www-form-urlencoded: schema: - $ref: '#/components/schemas/ProjectRequest' + $ref: '#/components/schemas/WorkspaceProjectsRequest' multipart/form-data: schema: - $ref: '#/components/schemas/ProjectRequest' + $ref: '#/components/schemas/WorkspaceProjectsRequest' + required: true responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/Project' - description: '' + '201': + description: Project added security: - Token: [] - summary: Create workspace project + summary: ✨ Add workspace project tags: - Workspaces + x-fern-audiences: + - public + x-fern-sdk-group-name: + - workspaces + - projects + x-fern-sdk-method-name: add /data/upload/{filename}: get: description: Download a specific uploaded file. @@ -16910,6 +19052,10 @@ components: maximum: 2147483647 minimum: -2147483648 type: integer + user_session: + maxLength: 8 + nullable: true + type: string workspace_owner_id: description: Owner id of workspace where action performed maximum: 2147483647 @@ -16946,9 +19092,15 @@ components: Serializer get numbers from project queryset annotation, make sure, that you use correct one(Project.objects.with_counts()) properties: + agreement_threshold: + description: Minimum percent agreement threshold for which minimum number of annotators must agree + format: decimal + nullable: true + pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ + type: string allow_stream: readOnly: true - type: string + type: boolean annotation_limit_count: minimum: 1 nullable: true @@ -17055,6 +19207,10 @@ components: description: Label config in XML format. See more about it in documentation nullable: true type: string + max_additional_annotators_assignable: + description: Maximum number of additional annotators that can be assigned to a low agreement task + nullable: true + type: integer maximum_annotations: description: Maximum number of annotations for one task. If the number of annotations per task is equal or greater to this value, the task is completed (is_labeled=True) maximum: 2147483647 @@ -17077,8 +19233,9 @@ components: nullable: true type: string num_tasks_with_annotations: + nullable: true readOnly: true - type: string + type: integer organization: nullable: true type: integer @@ -17103,19 +19260,19 @@ components: type: string queue_done: readOnly: true - type: string + type: integer queue_left: readOnly: true - type: string + type: integer queue_total: readOnly: true type: string ready: readOnly: true - type: string + type: boolean rejected: readOnly: true - type: string + type: integer require_comment_on_skip: default: false type: boolean @@ -17126,17 +19283,17 @@ components: $ref: '#/components/schemas/ReviewSettings' review_total_tasks: readOnly: true - type: string + type: integer reviewed_number: readOnly: true - type: string + type: integer reviewer_queue_total: readOnly: true - type: string + type: integer sampling: nullable: true oneOf: - - $ref: '#/components/schemas/SamplingEnum' + - $ref: '#/components/schemas/SamplingDe5Enum' - $ref: '#/components/schemas/NullEnum' show_annotation_history: description: Show annotation history to annotator @@ -17146,6 +19303,7 @@ components: title: Show predictions to annotator type: boolean show_ground_truth_first: + description: 'Onboarding mode (true): show ground truth tasks first in the labeling stream' type: boolean show_instruction: description: Show instructions to the annotator before they start @@ -17187,8 +19345,9 @@ components: readOnly: true type: integer useful_annotation_number: + nullable: true readOnly: true - type: string + type: integer workspace: readOnly: true type: string @@ -17240,10 +19399,10 @@ components: - exclude Annotation: description: |- - A ModelSerializer that takes additional arguments for - "fields", "omit" and "expand" in order to - control which fields are displayed, and whether to replace simple - values with complex, nested serializations + Annotation Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. properties: bulk_created: description: Annotation was created in bulk mode @@ -17331,6 +19490,9 @@ components: type: object title: Annotation result list type: array + state: + readOnly: true + type: string task: description: Corresponding task for this annotation nullable: true @@ -17352,14 +19514,15 @@ components: - created_at - created_username - id + - state - updated_at type: object AnnotationBulkSerializerWithSelectedItemsRequest: description: |- - A ModelSerializer that takes additional arguments for - "fields", "omit" and "expand" in order to - control which fields are displayed, and whether to replace simple - values with complex, nested serializations + Annotation Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. properties: bulk_created: description: Annotation was created in bulk mode @@ -17544,10 +19707,10 @@ components: type: object AnnotationRequest: description: |- - A ModelSerializer that takes additional arguments for - "fields", "omit" and "expand" in order to - control which fields are displayed, and whether to replace simple - values with complex, nested serializations + Annotation Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. properties: bulk_created: description: Annotation was created in bulk mode @@ -17635,10 +19798,14 @@ components: type: object AnnotationReview: description: |- - A ModelSerializer that takes additional arguments for - "fields", "omit" and "expand" in order to - control which fields are displayed, and whether to replace simple - values with complex, nested serializations + AnnotationReview Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) properties: accepted: description: Accepted or rejected (if false) flag @@ -17680,6 +19847,9 @@ components: format: date-time nullable: true type: string + state: + readOnly: true + type: string required: - annotation - created_at @@ -17687,13 +19857,18 @@ components: - fixed_annotation_history - id - previous_annotation_history + - state type: object AnnotationReviewRequest: description: |- - A ModelSerializer that takes additional arguments for - "fields", "omit" and "expand" in order to - control which fields are displayed, and whether to replace simple - values with complex, nested serializations + AnnotationReview Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) properties: accepted: description: Accepted or rejected (if false) flag @@ -17932,6 +20107,10 @@ components: project: description: A unique integer value identifying this project. type: integer + recursive_scan: + description: Perform recursive scan over the container content + nullable: true + type: boolean regex_filter: description: Cloud storage regex for filtering objects nullable: true @@ -18032,6 +20211,10 @@ components: maximum: 32767 minimum: 0 type: integer + recursive_scan: + description: Perform recursive scan over the container content + nullable: true + type: boolean regex_filter: description: Cloud storage regex for filtering objects nullable: true @@ -18123,6 +20306,10 @@ components: maximum: 32767 minimum: 0 type: integer + recursive_scan: + description: Perform recursive scan over the container content + nullable: true + type: boolean regex_filter: description: Cloud storage regex for filtering objects nullable: true @@ -18397,6 +20584,10 @@ components: project: description: A unique integer value identifying this project. type: integer + recursive_scan: + description: Perform recursive scan + nullable: true + type: boolean regex_filter: description: Cloud storage regex for filtering objects nullable: true @@ -18492,6 +20683,10 @@ components: project: description: A unique integer value identifying this project. type: integer + recursive_scan: + description: Perform recursive scan + nullable: true + type: boolean regex_filter: description: Cloud storage regex for filtering objects nullable: true @@ -18665,6 +20860,8 @@ components: type: boolean allow_invite_project_experts: type: boolean + allow_nda: + type: boolean allow_organization_webhooks: type: boolean allow_sso: @@ -18683,6 +20880,8 @@ components: type: boolean early_adopter: type: boolean + email_configured: + type: boolean embed_domains: items: additionalProperties: {} @@ -18693,8 +20892,6 @@ components: embed_settings: additionalProperties: {} type: object - hide_storage_settings_for_manager: - type: boolean manual_role_management: type: boolean manual_workspace_management: @@ -18714,6 +20911,7 @@ components: - allow_data_credentials - allow_invite_people - allow_invite_project_experts + - allow_nda - allow_organization_webhooks - allow_sso - allow_storage_proxy @@ -18723,8 +20921,8 @@ components: - disable_members_page - disable_project_imports - early_adopter + - email_configured - embed_enabled - - hide_storage_settings_for_manager - manual_role_management - manual_workspace_management - secure_mode @@ -18850,6 +21048,13 @@ components: - Monthly - Yearly type: string + CancelModelRunResponse: + properties: + detail: + type: string + required: + - detail + type: object CheckMatchingFunctionRequestRequest: properties: code: @@ -18930,6 +21135,15 @@ components: - type type: object Comment: + description: |- + Comment Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) properties: annotation: nullable: true @@ -18968,6 +21182,9 @@ components: nullable: true readOnly: true type: string + state: + readOnly: true + type: string task: nullable: true readOnly: true @@ -18987,10 +21204,20 @@ components: - id - project - resolved_at + - state - task - updated_at type: object CommentRequest: + description: |- + Comment Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) properties: annotation: nullable: true @@ -19013,6 +21240,15 @@ components: type: string type: object CommentSerializerWithExpandedUser: + description: |- + Comment Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) properties: annotation: nullable: true @@ -19049,6 +21285,9 @@ components: nullable: true readOnly: true type: string + state: + readOnly: true + type: string task: nullable: true readOnly: true @@ -19068,9 +21307,33 @@ components: - id - project - resolved_at + - state - task - updated_at type: object + ConfigurablePermissionOption: + properties: + default: + items: + $ref: '#/components/schemas/Role9e7Enum' + type: array + group: + type: string + label: + type: string + options: + items: + $ref: '#/components/schemas/Role9e7Enum' + type: array + permission: + type: string + tooltip: + type: string + required: + - default + - options + - permission + type: object ConvertedFormat: properties: export_type: @@ -19119,14 +21382,6 @@ components: - limit - reached type: object - CustomScriptsEditableByEnum: - description: |- - * `AD` - Administrator - * `MA` - Manager - enum: - - AD - - MA - type: string DatabricksExportStorage: properties: can_delete_objects: @@ -19693,6 +21948,16 @@ components: required: - dataset type: object + Default165Enum: + enum: + - OW + - AD + - MA + - RE + - AN + - DI + - 'NO' + type: string DefaultRole: properties: annotator_reviewer_firewall_enabled_at: @@ -19700,24 +21965,14 @@ components: format: date-time nullable: true type: string - custom_scripts_editable_by: - description: |- - Set the minimum user role that can edit custom scripts in the UI. - - * `AD` - Administrator - * `MA` - Manager - nullable: true - oneOf: - - $ref: '#/components/schemas/CustomScriptsEditableByEnum' - - $ref: '#/components/schemas/NullEnum' custom_scripts_enabled_at: - description: Set to current time to enabled custom scripts for this organization. Can only be enabled if no organization members are active members of any other organizations; otherwise an error will be raised. If this occurs, contact the LEAP team for assistance with enabling custom scripts. + description: Set to current time to enable custom scripts (Plugins) for this organization. Can only be enabled if no organization members are active members of any other organizations; otherwise an error will be raised. If this occurs, contact the LEAP team for assistance with enabling custom scripts (Plugins). format: date-time nullable: true type: string default_role: allOf: - - $ref: '#/components/schemas/DefaultRoleEnum' + - $ref: '#/components/schemas/Role9e7Enum' description: |- Default membership role for invited users @@ -19759,24 +22014,6 @@ components: required: - organization type: object - DefaultRoleEnum: - description: |- - * `OW` - Owner - * `AD` - Administrator - * `MA` - Manager - * `RE` - Reviewer - * `AN` - Annotator - * `DI` - Deactivated - * `NO` - Not Activated - enum: - - OW - - AD - - MA - - RE - - AN - - DI - - 'NO' - type: string EditionEnum: description: |- * `Community` - Community @@ -20036,6 +22273,10 @@ components: maximum: 32767 minimum: 0 type: integer + recursive_scan: + description: Perform recursive scan over the bucket content + nullable: true + type: boolean regex_filter: description: Cloud storage regex for filtering objects nullable: true @@ -20127,6 +22368,10 @@ components: maximum: 32767 minimum: 0 type: integer + recursive_scan: + description: Perform recursive scan over the bucket content + nullable: true + type: boolean regex_filter: description: Cloud storage regex for filtering objects nullable: true @@ -20301,6 +22546,10 @@ components: project: description: A unique integer value identifying this project. type: integer + recursive_scan: + description: Perform recursive scan over the bucket content + nullable: true + type: boolean regex_filter: description: Cloud storage regex for filtering objects nullable: true @@ -20602,6 +22851,10 @@ components: project: description: A unique integer value identifying this project. type: integer + recursive_scan: + description: Perform recursive scan over the bucket content + nullable: true + type: boolean regex_filter: description: Cloud storage regex for filtering objects nullable: true @@ -20702,6 +22955,10 @@ components: project: description: A unique integer value identifying this project. type: integer + recursive_scan: + description: Perform recursive scan over the bucket content + nullable: true + type: boolean regex_filter: description: Cloud storage regex for filtering objects nullable: true @@ -20783,6 +23040,11 @@ components: maximum: 2147483647 minimum: -2147483648 type: integer + precomputed_agreement: + description: Average agreement score for the task + format: double + nullable: true + type: number predictions: default: [] items: @@ -20837,6 +23099,217 @@ components: nullable: true type: string type: object + KPIDetailResponse: + description: |- + Response serializer for KPI detail endpoint. + Structure varies based on segmentation parameters. + properties: + by_user: + allOf: + - $ref: '#/components/schemas/KPIUserSegment' + description: User-segmented data (compact format with parallel arrays) + nullable: true + kpi_key: + description: KPI identifier + type: string + kpi_label: + description: Human-readable KPI label + nullable: true + type: string + matrix: + allOf: + - $ref: '#/components/schemas/KPIMatrixSegment' + description: 2D matrix (time × user) in compact format + nullable: true + segmentation: + allOf: + - $ref: '#/components/schemas/SegmentationEnum' + description: |- + Type of segmentation applied + + * `none` - none + * `time` - time + * `user` - user + * `matrix` - matrix + time_series: + allOf: + - $ref: '#/components/schemas/KPITimeSegment' + description: Time-segmented data (compact format with parallel arrays) + nullable: true + total: + allOf: + - $ref: '#/components/schemas/KPIValue' + description: Total value (no segmentation) + nullable: true + unit: + description: 'Unit of measurement: seconds, minutes, hours, count, or ratio' + type: string + required: + - kpi_key + - kpi_label + - segmentation + - unit + type: object + KPIMatrixSegment: + description: |- + Serializer for 2D matrix segmentation (time × user) in compact format. + Returns a 2D array where values[user_index][time_index] corresponds to + users[user_index] at interval_start[time_index]. + properties: + interval_start: + description: Array of time period start timestamps + items: + format: date-time + type: string + type: array + users: + description: Array of user information + items: + $ref: '#/components/schemas/KPIUserInfo' + type: array + values: + description: '2D array of values: values[user_index][time_index]' + items: + items: + format: double + nullable: true + type: number + type: array + type: array + required: + - interval_start + - users + - values + type: object + KPIMetadata: + description: |- + Serializer for KPI metadata information. + Provides information about available KPIs including their keys, labels, + dependencies, and configuration. + properties: + base_class: + description: Base class name that the KPI inherits from + type: string + calculation_formula: + additionalProperties: {} + description: 'Formula for calculated KPIs defining how to derive the value from component KPIs. Structure: {"type": "ratio|sum|difference|product", "numerator": "kpi_key", "denominator": "kpi_key"}' + nullable: true + type: object + date_column: + description: Database column used for date filtering and aggregation + nullable: true + type: string + depends_on_kpis: + description: List of other KPI keys that this KPI depends on + items: + type: string + type: array + is_calculated: + description: Whether this KPI is calculated from other KPIs (has dependencies) + type: boolean + is_label_type: + description: Whether this KPI is a label/filter type that does not show a value per se + type: boolean + key: + description: Unique identifier for the KPI + type: string + label: + description: Human-readable label for the KPI + nullable: true + type: string + percentage: + description: 'Whether the KPI value is a percentage (DEPRECATED: use unit)' + type: boolean + unit: + description: 'Unit of measurement: seconds, minutes, hours, count, or ratio' + type: string + required: + - base_class + - date_column + - depends_on_kpis + - is_calculated + - is_label_type + - key + - label + - percentage + - unit + type: object + KPITimeSegment: + description: |- + Serializer for time-segmented KPI data (compact format). + Returns parallel arrays: interval_start and values. + properties: + interval_start: + description: Array of time period start timestamps + items: + format: date-time + type: string + type: array + values: + description: Array of KPI values, one per time period (parallel to interval_start) + items: + format: double + nullable: true + type: number + type: array + required: + - interval_start + - values + type: object + KPIUserInfo: + description: Serializer for user information (compact format). + properties: + user_email: + description: User email + format: email + type: string + user_id: + description: User ID + type: integer + username: + description: Username + type: string + required: + - user_email + - user_id + - username + type: object + KPIUserSegment: + description: |- + Serializer for user-segmented KPI data (compact format). + Returns parallel arrays: users and values. + properties: + users: + description: Array of user information + items: + $ref: '#/components/schemas/KPIUserInfo' + type: array + values: + description: Array of KPI values, one per user (parallel to users array) + items: + format: double + nullable: true + type: number + type: array + required: + - users + - values + type: object + KPIValue: + description: Serializer for a single KPI value (no segmentation). + properties: + unit: + description: 'Unit of measurement: seconds, minutes, hours, count, or ratio' + type: string + value: + description: The KPI value in its native unit + format: double + nullable: true + type: number + required: + - unit + - value + type: object LSAPITokenBlacklistRequest: properties: refresh: @@ -21291,6 +23764,10 @@ components: project: description: A unique integer value identifying this project. type: integer + recursive_scan: + description: Perform recursive scan over the directory content + nullable: true + type: boolean regex_filter: description: Regex for filtering objects nullable: true @@ -21581,22 +24058,12 @@ components: format: date-time readOnly: true type: string - custom_scripts_editable_by: - description: |- - Set the minimum user role that can edit custom scripts in the UI. - - * `AD` - Administrator - * `MA` - Manager - nullable: true - oneOf: - - $ref: '#/components/schemas/CustomScriptsEditableByEnum' - - $ref: '#/components/schemas/NullEnum' custom_scripts_enabled: readOnly: true type: string default_role: allOf: - - $ref: '#/components/schemas/DefaultRoleEnum' + - $ref: '#/components/schemas/Role9e7Enum' description: |- Default membership role for invited users @@ -21665,6 +24132,12 @@ components: Serializer get numbers from project queryset annotation, make sure, that you use correct one(Project.objects.with_counts()) properties: + agreement_threshold: + description: Minimum percent agreement threshold for which minimum number of annotators must agree + format: decimal + nullable: true + pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ + type: string annotation_limit_count: minimum: 1 nullable: true @@ -21764,6 +24237,10 @@ components: description: Label config in XML format. See more about it in documentation nullable: true type: string + max_additional_annotators_assignable: + description: Maximum number of additional annotators that can be assigned to a low agreement task + nullable: true + type: integer maximum_annotations: description: Maximum number of annotations for one task. If the number of annotations per task is equal or greater to this value, the task is completed (is_labeled=True) maximum: 2147483647 @@ -21786,7 +24263,7 @@ components: nullable: true type: string num_tasks_with_annotations: - description: Tasks with annotations count + nullable: true readOnly: true type: integer organization: @@ -21834,7 +24311,7 @@ components: sampling: nullable: true oneOf: - - $ref: '#/components/schemas/SamplingEnum' + - $ref: '#/components/schemas/SamplingDe5Enum' - $ref: '#/components/schemas/NullEnum' show_annotation_history: description: Show annotation history to annotator @@ -21844,6 +24321,7 @@ components: title: Show predictions to annotator type: boolean show_ground_truth_first: + description: 'Onboarding mode (true): show ground truth tasks first in the labeling stream' type: boolean show_instruction: description: Show instructions to the annotator before they start @@ -21951,26 +24429,27 @@ components: readOnly: true type: integer num_tasks_with_annotations: + nullable: true readOnly: true - type: string + type: integer queue_done: readOnly: true - type: string + type: integer queue_left: readOnly: true - type: string + type: integer queue_total: readOnly: true type: string rejected: readOnly: true - type: string + type: integer review_total_tasks: readOnly: true - type: string + type: integer reviewed_number: readOnly: true - type: string + type: integer skipped_annotations_number: readOnly: true type: string @@ -21985,8 +24464,9 @@ components: readOnly: true type: integer useful_annotation_number: + nullable: true readOnly: true - type: string + type: integer required: - finished_task_number - ground_truth_number @@ -22114,7 +24594,7 @@ components: sampling: nullable: true oneOf: - - $ref: '#/components/schemas/SamplingEnum' + - $ref: '#/components/schemas/SamplingDe5Enum' - $ref: '#/components/schemas/NullEnum' show_annotation_history: description: Show annotation history to annotator @@ -22124,6 +24604,7 @@ components: title: Show predictions to annotator type: boolean show_ground_truth_first: + description: 'Onboarding mode (true): show ground truth tasks first in the labeling stream' type: boolean show_instruction: description: Show instructions to the annotator before they start @@ -22272,7 +24753,265 @@ components: sampling: nullable: true oneOf: - - $ref: '#/components/schemas/SamplingEnum' + - $ref: '#/components/schemas/SamplingDe5Enum' + - $ref: '#/components/schemas/NullEnum' + show_annotation_history: + description: Show annotation history to annotator + type: boolean + show_collab_predictions: + description: If set, the annotator can view model predictions + title: Show predictions to annotator + type: boolean + show_ground_truth_first: + description: 'Onboarding mode (true): show ground truth tasks first in the labeling stream' + type: boolean + show_instruction: + description: Show instructions to the annotator before they start + type: boolean + show_overlap_first: + type: boolean + show_skip_button: + description: Show a skip button in interface and allow annotators to skip the task + type: boolean + skip_queue: + nullable: true + oneOf: + - $ref: '#/components/schemas/SkipQueueEnum' + - $ref: '#/components/schemas/NullEnum' + task_data_login: + description: 'Task data credentials: login' + maxLength: 256 + nullable: true + type: string + task_data_password: + description: 'Task data credentials: password' + maxLength: 256 + nullable: true + type: string + title: + description: Project name. Must be between 3 and 50 characters long. + maxLength: 50 + minLength: 3 + nullable: true + type: string + workspace: + type: integer + type: object + LseProjectParams: + properties: + annotator_params: + description: 'user ID and user weight in score calculation. Format {user_id[int]: weight[Float[0..1]]}' + nullable: true + use_kappa: + description: If categorical variables are used in labeling (e.g. choices), Cohen's Kappa statistic is computed to measure inter-rater reliability instead of basic agreement + type: boolean + type: object + LseProjectParamsRequest: + properties: + annotator_params: + description: 'user ID and user weight in score calculation. Format {user_id[int]: weight[Float[0..1]]}' + nullable: true + use_kappa: + description: If categorical variables are used in labeling (e.g. choices), Cohen's Kappa statistic is computed to measure inter-rater reliability instead of basic agreement + type: boolean + type: object + LseProjectResponse: + description: Serializer for project response, combining all the serializers for different roles. Don't use it except for Spectacular/Fern definitions. + properties: + agreement_threshold: + description: Minimum percent agreement threshold for which minimum number of annotators must agree + format: decimal + nullable: true + pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ + type: string + allow_stream: + readOnly: true + type: boolean + annotation_limit_count: + minimum: 1 + nullable: true + type: integer + annotation_limit_percent: + format: decimal + nullable: true + pattern: ^-?\d{0,3}(?:\.\d{0,2})?$ + type: string + annotator_evaluation_minimum_score: + default: '95.00' + format: decimal + nullable: true + pattern: ^-?\d{0,3}(?:\.\d{0,2})?$ + type: string + annotator_evaluation_minimum_tasks: + default: 10 + minimum: 0 + nullable: true + type: integer + assignment_settings: + $ref: '#/components/schemas/AssignmentSettings' + color: + maxLength: 16 + nullable: true + type: string + comment_classification_config: + type: string + config_has_control_tags: + description: Flag to detect is project ready for labeling + readOnly: true + type: boolean + config_suitable_for_bulk_annotation: + description: Flag to detect is project ready for bulk annotation + readOnly: true + type: boolean + control_weights: + description: 'Dict of weights for each control tag in metric calculation. Each control tag (e.g. label or choice) will have it''s own key in control weight dict with weight for each label and overall weight.For example, if bounding box annotation with control tag named my_bbox should be included with 0.33 weight in agreement calculation, and the first label Car should be twice more important than Airplaine, then you have to need the specify: {''my_bbox'': {''type'': ''RectangleLabels'', ''labels'': {''Car'': 1.0, ''Airplaine'': 0.5}, ''overall'': 0.33}' + nullable: true + created_at: + format: date-time + readOnly: true + type: string + created_by: + allOf: + - $ref: '#/components/schemas/UserSimple' + description: Project owner + custom_script: + type: string + custom_task_lock_ttl: + description: TTL in seconds for task reservations, on new and existing tasks + maximum: 86400 + minimum: 1 + nullable: true + type: integer + data_types: + nullable: true + readOnly: true + description: + description: Project description + nullable: true + type: string + duplication_done: + default: false + type: boolean + duplication_status: + type: string + enable_empty_annotation: + description: Allow annotators to submit empty annotations + type: boolean + evaluate_predictions_automatically: + description: Retrieve and display predictions when loading a task + type: boolean + expert_instruction: + description: Labeling instructions in HTML format + nullable: true + type: string + finished_task_number: + description: Finished tasks + readOnly: true + type: integer + ground_truth_number: + description: Honeypot annotation number in project + readOnly: true + type: integer + id: + readOnly: true + type: integer + is_draft: + description: Whether or not the project is in the middle of being created + type: boolean + is_published: + description: Whether or not the project is published to annotators + title: Published + type: boolean + label_config: + description: Label config in XML format. See more about it in documentation + nullable: true + type: string + max_additional_annotators_assignable: + description: Maximum number of additional annotators that can be assigned to a low agreement task + nullable: true + type: integer + maximum_annotations: + description: Maximum number of annotations for one task. If the number of annotations per task is equal or greater to this value, the task is completed (is_labeled=True) + maximum: 2147483647 + minimum: -2147483648 + title: Maximum annotation number + type: integer + members: + readOnly: true + type: string + members_count: + readOnly: true + type: integer + min_annotations_to_start_training: + description: Minimum number of completed tasks after which model training is started + maximum: 2147483647 + minimum: -2147483648 + type: integer + model_version: + description: Machine learning model version + nullable: true + type: string + num_tasks_with_annotations: + readOnly: true + type: integer + organization: + nullable: true + type: integer + overlap_cohort_percentage: + maximum: 2147483647 + minimum: -2147483648 + type: integer + parsed_label_config: + description: JSON-formatted labeling configuration + readOnly: true + pause_on_failed_annotator_evaluation: + default: false + nullable: true + type: boolean + pinned_at: + description: Pinned date and time + format: date-time + nullable: true + type: string + prompts: + readOnly: true + type: string + queue_done: + readOnly: true + type: integer + queue_left: + readOnly: true + type: integer + queue_total: + readOnly: true + type: integer + ready: + readOnly: true + type: boolean + rejected: + readOnly: true + type: integer + require_comment_on_skip: + default: false + type: boolean + reveal_preannotations_interactively: + description: Reveal pre-annotations interactively + type: boolean + review_settings: + $ref: '#/components/schemas/ReviewSettings' + review_total_tasks: + readOnly: true + type: integer + reviewed_number: + readOnly: true + type: integer + reviewer_queue_total: + readOnly: true + type: integer + sampling: + nullable: true + oneOf: + - $ref: '#/components/schemas/SamplingDe5Enum' - $ref: '#/components/schemas/NullEnum' show_annotation_history: description: Show annotation history to annotator @@ -22282,6 +25021,7 @@ components: title: Show predictions to annotator type: boolean show_ground_truth_first: + description: 'Onboarding mode (true): show ground truth tasks first in the labeling stream' type: boolean show_instruction: description: Show instructions to the annotator before they start @@ -22291,11 +25031,21 @@ components: show_skip_button: description: Show a skip button in interface and allow annotators to skip the task type: boolean + show_unused_data_columns_to_annotators: + nullable: true + type: boolean skip_queue: nullable: true oneOf: - $ref: '#/components/schemas/SkipQueueEnum' - $ref: '#/components/schemas/NullEnum' + skipped_annotations_number: + readOnly: true + type: integer + start_training_on_annotation_update: + description: Start model training after any annotations are submitted or updated + readOnly: true + type: boolean task_data_login: description: 'Task data credentials: login' maxLength: 256 @@ -22306,29 +25056,77 @@ components: maxLength: 256 nullable: true type: string + task_number: + description: Total task number in project + readOnly: true + type: integer title: description: Project name. Must be between 3 and 50 characters long. maxLength: 50 minLength: 3 nullable: true type: string - workspace: + total_annotations_number: + readOnly: true type: integer - type: object - LseProjectParamsRequest: - properties: - annotator_params: - description: 'user ID and user weight in score calculation. Format {user_id[int]: weight[Float[0..1]]}' + total_predictions_number: nullable: true - use_kappa: - description: If categorical variables are used in labeling (e.g. choices), Cohen's Kappa statistic is computed to measure inter-rater reliability instead of basic agreement - type: boolean + readOnly: true + type: integer + useful_annotation_number: + nullable: true + readOnly: true + type: integer + workspace: + readOnly: true + type: string + workspace_title: + readOnly: true + type: string + required: + - allow_stream + - assignment_settings + - config_has_control_tags + - config_suitable_for_bulk_annotation + - created_at + - data_types + - finished_task_number + - ground_truth_number + - id + - members + - members_count + - num_tasks_with_annotations + - parsed_label_config + - prompts + - queue_done + - queue_left + - queue_total + - ready + - rejected + - review_settings + - review_total_tasks + - reviewed_number + - reviewer_queue_total + - skipped_annotations_number + - start_training_on_annotation_update + - task_number + - total_annotations_number + - total_predictions_number + - useful_annotation_number + - workspace + - workspace_title type: object LseProjectUpdate: description: |- Serializer get numbers from project queryset annotation, make sure, that you use correct one(Project.objects.with_counts()) properties: + agreement_threshold: + description: Minimum percent agreement threshold for which minimum number of annotators must agree + format: decimal + nullable: true + pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ + type: string annotation_limit_count: minimum: 1 nullable: true @@ -22420,6 +25218,10 @@ components: description: Label config in XML format. See more about it in documentation nullable: true type: string + max_additional_annotators_assignable: + description: Maximum number of additional annotators that can be assigned to a low agreement task + nullable: true + type: integer maximum_annotations: description: Maximum number of annotations for one task. If the number of annotations per task is equal or greater to this value, the task is completed (is_labeled=True) maximum: 2147483647 @@ -22478,7 +25280,7 @@ components: sampling: nullable: true oneOf: - - $ref: '#/components/schemas/SamplingEnum' + - $ref: '#/components/schemas/SamplingDe5Enum' - $ref: '#/components/schemas/NullEnum' show_annotation_history: description: Show annotation history to annotator @@ -22488,6 +25290,7 @@ components: title: Show predictions to annotator type: boolean show_ground_truth_first: + description: 'Onboarding mode (true): show ground truth tasks first in the labeling stream' type: boolean show_instruction: description: Show instructions to the annotator before they start @@ -23020,7 +25823,7 @@ components: - role_arn type: object LseTask: - description: Task Serializer with project scheme configs validation + description: Data Manager Task Serializer with FSM state support. properties: agreement: readOnly: true @@ -23132,6 +25935,11 @@ components: maximum: 2147483647 minimum: -2147483648 type: integer + precomputed_agreement: + description: Average agreement score for the task + format: double + nullable: true + type: number predictions: description: Predictions for this task items: @@ -23186,6 +25994,12 @@ components: description: Project ID for this task nullable: true type: integer + review_time: + description: |- + Calculate total review time for this task from MetricInTimeBucket records. + Returns time in seconds. + readOnly: true + type: integer reviewed: type: boolean reviewers: @@ -23201,6 +26015,9 @@ components: type: integer reviews_rejected: type: integer + state: + readOnly: true + type: string storage_filename: readOnly: true type: string @@ -23245,8 +26062,10 @@ components: - predictions - predictions_model_versions - predictions_results + - review_time - reviewers - reviewers_count + - state - storage_filename - updated_at - updated_by @@ -23431,7 +26250,7 @@ components: - data type: object LseTaskSerializerForAnnotators: - description: Task Serializer with project scheme configs validation + description: Data Manager Task Serializer with FSM state support. properties: annotations: default: [] @@ -23553,7 +26372,7 @@ components: - unresolved_comment_count type: object LseTaskSerializerForReviewers: - description: Task Serializer with project scheme configs validation + description: Data Manager Task Serializer with FSM state support. properties: agreement: readOnly: true @@ -23665,6 +26484,11 @@ components: maximum: 2147483647 minimum: -2147483648 type: integer + precomputed_agreement: + description: Average agreement score for the task + format: double + nullable: true + type: number predictions: description: Predictions for this task items: @@ -23719,6 +26543,12 @@ components: description: Project ID for this task nullable: true type: integer + review_time: + description: |- + Calculate total review time for this task from MetricInTimeBucket records. + Returns time in seconds. + readOnly: true + type: integer reviewed: type: boolean reviewers: @@ -23734,6 +26564,9 @@ components: type: integer reviews_rejected: type: integer + state: + readOnly: true + type: string storage_filename: readOnly: true type: string @@ -23778,8 +26611,10 @@ components: - predictions - predictions_model_versions - predictions_results + - review_time - reviewers - reviewers_count + - state - storage_filename - updated_at - updated_by @@ -23837,10 +26672,15 @@ components: - $ref: '#/components/schemas/LseFields' readOnly: true org_membership: + deprecated: true items: $ref: '#/components/schemas/OrganizationMembership' readOnly: true type: array + organization_membership: + allOf: + - $ref: '#/components/schemas/OrganizationMembership' + readOnly: true pause: readOnly: true type: string @@ -23858,6 +26698,7 @@ components: - last_activity - lse_fields - org_membership + - organization_membership - pause - username type: object @@ -23910,10 +26751,15 @@ components: maxLength: 256 type: string org_membership: + deprecated: true items: $ref: '#/components/schemas/OrganizationMembership' readOnly: true type: array + organization_membership: + allOf: + - $ref: '#/components/schemas/OrganizationMembership' + readOnly: true phone: maxLength: 256 type: string @@ -23927,6 +26773,7 @@ components: - initials - last_activity - org_membership + - organization_membership - username type: object LseUserOrganizationMemberList: @@ -24148,12 +26995,14 @@ components: MetricParam: properties: agreement_threshold: + deprecated: true readOnly: true type: string allowed: readOnly: true type: string max_additional_annotators_assignable: + deprecated: true description: Maximum number of additional annotators that can be assigned to a low agreement task maximum: 2147483647 minimum: -2147483648 @@ -24170,6 +27019,25 @@ components: - agreement_threshold - allowed type: object + MetricParamUpdateRequest: + properties: + additional_params: + additionalProperties: {} + nullable: true + type: object + agreement_threshold: + deprecated: true + maximum: 100 + minimum: 0 + type: integer + max_additional_annotators_assignable: + deprecated: true + minimum: 0 + type: integer + metric_name: + minLength: 1 + type: string + type: object ModeEnum: description: |- * `settings` - Only settings @@ -24592,6 +27460,16 @@ components: - in_app_guidance - complete type: string + Options165Enum: + enum: + - OW + - AD + - MA + - RE + - AN + - DI + - 'NO' + type: string OrganizationBilling: properties: manual_role_management: @@ -24689,6 +27567,68 @@ components: required: - role type: object + OrganizationPermission: + properties: + 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: array + organization: + readOnly: true + type: integer + permission: + maxLength: 255 + type: string + roles: + description: Explicit roles that have this permission within the organization. + items: + $ref: '#/components/schemas/Role9e7Enum' + type: array + tooltip: + nullable: true + readOnly: true + type: string + required: + - default + - group + - id + - label + - options + - organization + - permission + - tooltip + type: object + OrganizationPermissionRequest: + properties: + permission: + maxLength: 255 + minLength: 1 + type: string + roles: + description: Explicit roles that have this permission within the organization. + items: + $ref: '#/components/schemas/Role9e7Enum' + type: array + required: + - permission + type: object PaginatedAllRolesProjectListList: properties: count: @@ -24949,10 +27889,15 @@ components: - $ref: '#/components/schemas/LseFields' readOnly: true org_membership: + deprecated: true items: $ref: '#/components/schemas/OrganizationMembership' readOnly: true type: array + organization_membership: + allOf: + - $ref: '#/components/schemas/OrganizationMembership' + readOnly: true pause: readOnly: true type: string @@ -24973,10 +27918,34 @@ components: - last_activity - lse_fields - org_membership + - organization_membership - pause - project_role - username type: object + PaginatedProjectSubsetTasksResponseList: + properties: + count: + example: 123 + type: integer + next: + example: http://api.example.org/accounts/?page=4 + format: uri + nullable: true + type: string + previous: + example: http://api.example.org/accounts/?page=2 + format: uri + nullable: true + type: string + results: + items: + $ref: '#/components/schemas/ProjectSubsetTasksResponse' + type: array + required: + - count + - results + type: object PaginatedRoleBasedTaskList: properties: tasks: @@ -25003,10 +27972,14 @@ components: type: object PatchedAnnotationReviewRequest: description: |- - A ModelSerializer that takes additional arguments for - "fields", "omit" and "expand" in order to - control which fields are displayed, and whether to replace simple - values with complex, nested serializations + AnnotationReview Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) properties: accepted: description: Accepted or rejected (if false) flag @@ -25088,6 +28061,10 @@ components: maximum: 32767 minimum: 0 type: integer + recursive_scan: + description: Perform recursive scan over the container content + nullable: true + type: boolean regex_filter: description: Cloud storage regex for filtering objects nullable: true @@ -25251,6 +28228,10 @@ components: project: description: A unique integer value identifying this project. type: integer + recursive_scan: + description: Perform recursive scan + nullable: true + type: boolean regex_filter: description: Cloud storage regex for filtering objects nullable: true @@ -25282,6 +28263,15 @@ components: type: string type: object PatchedCommentRequest: + description: |- + Comment Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) properties: annotation: nullable: true @@ -25553,24 +28543,14 @@ components: format: date-time nullable: true type: string - custom_scripts_editable_by: - description: |- - Set the minimum user role that can edit custom scripts in the UI. - - * `AD` - Administrator - * `MA` - Manager - nullable: true - oneOf: - - $ref: '#/components/schemas/CustomScriptsEditableByEnum' - - $ref: '#/components/schemas/NullEnum' custom_scripts_enabled_at: - description: Set to current time to enabled custom scripts for this organization. Can only be enabled if no organization members are active members of any other organizations; otherwise an error will be raised. If this occurs, contact the LEAP team for assistance with enabling custom scripts. + description: Set to current time to enable custom scripts (Plugins) for this organization. Can only be enabled if no organization members are active members of any other organizations; otherwise an error will be raised. If this occurs, contact the LEAP team for assistance with enabling custom scripts (Plugins). format: date-time nullable: true type: string default_role: allOf: - - $ref: '#/components/schemas/DefaultRoleEnum' + - $ref: '#/components/schemas/Role9e7Enum' description: |- Default membership role for invited users @@ -25672,6 +28652,10 @@ components: maximum: 32767 minimum: 0 type: integer + recursive_scan: + description: Perform recursive scan over the bucket content + nullable: true + type: boolean regex_filter: description: Cloud storage regex for filtering objects nullable: true @@ -25853,6 +28837,10 @@ components: project: description: A unique integer value identifying this project. type: integer + recursive_scan: + description: Perform recursive scan over the bucket content + nullable: true + type: boolean regex_filter: description: Cloud storage regex for filtering objects nullable: true @@ -25943,11 +28931,6 @@ components: created_by: nullable: true type: integer - custom_scripts_editable_by: - minLength: 1 - nullable: true - type: string - writeOnly: true custom_scripts_enabled: nullable: true type: boolean @@ -25982,6 +28965,12 @@ components: Serializer get numbers from project queryset annotation, make sure, that you use correct one(Project.objects.with_counts()) properties: + agreement_threshold: + description: Minimum percent agreement threshold for which minimum number of annotators must agree + format: decimal + nullable: true + pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ + type: string annotation_limit_count: minimum: 1 nullable: true @@ -26050,6 +29039,10 @@ components: description: Label config in XML format. See more about it in documentation nullable: true type: string + max_additional_annotators_assignable: + description: Maximum number of additional annotators that can be assigned to a low agreement task + nullable: true + type: integer maximum_annotations: description: Maximum number of annotations for one task. If the number of annotations per task is equal or greater to this value, the task is completed (is_labeled=True) maximum: 2147483647 @@ -26092,7 +29085,7 @@ components: sampling: nullable: true oneOf: - - $ref: '#/components/schemas/SamplingEnum' + - $ref: '#/components/schemas/SamplingDe5Enum' - $ref: '#/components/schemas/NullEnum' show_annotation_history: description: Show annotation history to annotator @@ -26102,6 +29095,7 @@ components: title: Show predictions to annotator type: boolean show_ground_truth_first: + description: 'Onboarding mode (true): show ground truth tasks first in the labeling stream' type: boolean show_instruction: description: Show instructions to the annotator before they start @@ -26342,7 +29336,7 @@ components: type: boolean type: object PatchedLseTaskRequest: - description: Task Serializer with project scheme configs validation + description: Data Manager Task Serializer with FSM state support. properties: avg_lead_time: format: double @@ -26381,6 +29375,11 @@ components: maximum: 2147483647 minimum: -2147483648 type: integer + precomputed_agreement: + description: Average agreement score for the task + format: double + nullable: true + type: number predictions_score: format: double type: number @@ -26545,6 +29544,18 @@ components: user_id: type: integer type: object + PatchedOrganizationPermissionRequest: + properties: + permission: + maxLength: 255 + minLength: 1 + type: string + roles: + description: Explicit roles that have this permission within the organization. + items: + $ref: '#/components/schemas/Role9e7Enum' + type: array + type: object PatchedPauseRequest: description: |- A ModelSerializer that takes additional arguments for @@ -26576,7 +29587,7 @@ components: nullable: true type: integer custom_script: - description: custom script for projects created from this template + description: custom script (Plugin) for projects created from this template minLength: 1 nullable: true type: string @@ -27145,7 +30156,7 @@ components: sampling: nullable: true oneOf: - - $ref: '#/components/schemas/SamplingEnum' + - $ref: '#/components/schemas/SamplingDe5Enum' - $ref: '#/components/schemas/NullEnum' show_annotation_history: description: Show annotation history to annotator @@ -27155,6 +30166,7 @@ components: title: Show predictions to annotator type: boolean show_ground_truth_first: + description: 'Onboarding mode (true): show ground truth tasks first in the labeling stream' type: boolean show_instruction: description: Show instructions to the annotator before they start @@ -27423,23 +30435,6 @@ components: required: - user type: object - ProjectMetricParamUpdateRequest: - properties: - additional_params: - additionalProperties: {} - nullable: true - type: object - agreement_threshold: - maximum: 100 - minimum: 0 - type: integer - max_additional_annotators_assignable: - minimum: 0 - type: integer - metric_name: - minLength: 1 - type: string - type: object ProjectReimport: properties: annotation_count: @@ -27477,121 +30472,6 @@ components: required: - id type: object - ProjectRequest: - description: |- - Serializer get numbers from project queryset annotation, - make sure, that you use correct one(Project.objects.with_counts()) - properties: - color: - maxLength: 16 - nullable: true - type: string - control_weights: - description: 'Dict of weights for each control tag in metric calculation. Each control tag (e.g. label or choice) will have it''s own key in control weight dict with weight for each label and overall weight.For example, if bounding box annotation with control tag named my_bbox should be included with 0.33 weight in agreement calculation, and the first label Car should be twice more important than Airplaine, then you have to need the specify: {''my_bbox'': {''type'': ''RectangleLabels'', ''labels'': {''Car'': 1.0, ''Airplaine'': 0.5}, ''overall'': 0.33}' - nullable: true - created_by: - allOf: - - $ref: '#/components/schemas/UserSimpleRequest' - description: Project owner - description: - description: Project description - nullable: true - type: string - enable_empty_annotation: - description: Allow annotators to submit empty annotations - type: boolean - evaluate_predictions_automatically: - description: Retrieve and display predictions when loading a task - type: boolean - expert_instruction: - description: Labeling instructions in HTML format - nullable: true - type: string - is_draft: - description: Whether or not the project is in the middle of being created - type: boolean - is_published: - description: Whether or not the project is published to annotators - title: Published - type: boolean - label_config: - description: Label config in XML format. See more about it in documentation - nullable: true - type: string - maximum_annotations: - description: Maximum number of annotations for one task. If the number of annotations per task is equal or greater to this value, the task is completed (is_labeled=True) - maximum: 2147483647 - minimum: -2147483648 - title: Maximum annotation number - type: integer - min_annotations_to_start_training: - description: Minimum number of completed tasks after which model training is started - maximum: 2147483647 - minimum: -2147483648 - type: integer - model_version: - description: Machine learning model version - nullable: true - type: string - organization: - nullable: true - type: integer - overlap_cohort_percentage: - maximum: 2147483647 - minimum: -2147483648 - type: integer - pinned_at: - description: Pinned date and time - format: date-time - nullable: true - type: string - reveal_preannotations_interactively: - description: Reveal pre-annotations interactively - type: boolean - sampling: - nullable: true - oneOf: - - $ref: '#/components/schemas/SamplingEnum' - - $ref: '#/components/schemas/NullEnum' - show_annotation_history: - description: Show annotation history to annotator - type: boolean - show_collab_predictions: - description: If set, the annotator can view model predictions - title: Show predictions to annotator - type: boolean - show_ground_truth_first: - type: boolean - show_instruction: - description: Show instructions to the annotator before they start - type: boolean - show_overlap_first: - type: boolean - show_skip_button: - description: Show a skip button in interface and allow annotators to skip the task - type: boolean - skip_queue: - nullable: true - oneOf: - - $ref: '#/components/schemas/SkipQueueEnum' - - $ref: '#/components/schemas/NullEnum' - task_data_login: - description: 'Task data credentials: login' - maxLength: 256 - nullable: true - type: string - task_data_password: - description: 'Task data credentials: password' - maxLength: 256 - nullable: true - type: string - title: - description: Project name. Must be between 3 and 50 characters long. - maxLength: 50 - minLength: 3 - nullable: true - type: string - type: object ProjectRole: properties: id: @@ -27654,6 +30534,62 @@ components: - HasGT - Sample type: string + ProjectSubsetItem: + properties: + columns_schema: + items: + additionalProperties: {} + type: object + type: array + count: + type: integer + subset: + type: string + required: + - count + - subset + type: object + ProjectSubsetTaskItem: + properties: + data: + additionalProperties: {} + type: object + error: + additionalProperties: {} + type: object + ground_truth: + additionalProperties: {} + type: object + id: + type: integer + prediction: + additionalProperties: {} + type: object + score: + format: double + nullable: true + type: number + required: + - data + type: object + ProjectSubsetTasksResponse: + properties: + next_cursor: + nullable: true + type: string + previous_cursor: + nullable: true + type: string + task_count: + description: Present only when include_total=true + type: integer + task_result_list: + items: + $ref: '#/components/schemas/ProjectSubsetTaskItem' + type: array + required: + - task_result_list + type: object ProjectTemplate: properties: assignment_settings: @@ -27666,7 +30602,7 @@ components: nullable: true type: integer custom_script: - description: custom script for projects created from this template + description: custom script (Plugin) for projects created from this template nullable: true type: string description: @@ -27710,7 +30646,7 @@ components: nullable: true type: integer custom_script: - description: custom script for projects created from this template + description: custom script (Plugin) for projects created from this template minLength: 1 nullable: true type: string @@ -28098,6 +31034,23 @@ components: review_only_manual_assignments: description: When set True, review queue is built only from manually assigned tasks type: boolean + review_task_limit_percent: + description: Percent of tasks to include in review stream (0-100). Null/0 disables. + format: decimal + nullable: true + pattern: ^-?\d{0,3}(?:\.\d{0,2})?$ + type: string + sampling: + description: |- + Task sampling strategy in the review stream (by task id or random) + + * `task_id` - By Task ID + * `random` - Random + nullable: true + oneOf: + - $ref: '#/components/schemas/ReviewSettingsSamplingEnum' + - $ref: '#/components/schemas/BlankEnum' + - $ref: '#/components/schemas/NullEnum' show_agreement_to_reviewers: description: Show the agreement column to reviewers type: boolean @@ -28158,6 +31111,23 @@ components: review_only_manual_assignments: description: When set True, review queue is built only from manually assigned tasks type: boolean + review_task_limit_percent: + description: Percent of tasks to include in review stream (0-100). Null/0 disables. + format: decimal + nullable: true + pattern: ^-?\d{0,3}(?:\.\d{0,2})?$ + type: string + sampling: + description: |- + Task sampling strategy in the review stream (by task id or random) + + * `task_id` - By Task ID + * `random` - Random + nullable: true + oneOf: + - $ref: '#/components/schemas/ReviewSettingsSamplingEnum' + - $ref: '#/components/schemas/BlankEnum' + - $ref: '#/components/schemas/NullEnum' show_agreement_to_reviewers: description: Show the agreement column to reviewers type: boolean @@ -28172,6 +31142,14 @@ components: nullable: true type: boolean type: object + ReviewSettingsSamplingEnum: + description: |- + * `task_id` - By Task ID + * `random` - Random + enum: + - task_id + - random + type: string ReviewedEnum: description: |- * `only` - only @@ -28701,7 +31679,7 @@ components: type: array type: array type: object - SamplingEnum: + SamplingDe5Enum: description: |- * `Sequential sampling` - Tasks are ordered by Data manager ordering * `Uniform sampling` - Tasks are chosen randomly @@ -28773,6 +31751,18 @@ components: - User - Model type: string + SegmentationEnum: + description: |- + * `none` - none + * `time` - time + * `user` - user + * `matrix` - matrix + enum: + - none + - time + - user + - matrix + type: string SelectedItemsRequest: properties: all: @@ -28795,9 +31785,16 @@ components: minLength: 1 type: string type: array + projects: + items: + type: integer + type: array role: - minLength: 1 - type: string + $ref: '#/components/schemas/Role9e7Enum' + workspaces: + items: + type: integer + type: array required: - emails - role @@ -28957,6 +31954,15 @@ components: - completed_with_errors type: string TaskAssignment: + description: |- + TaskAssignment Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) properties: assignee: description: Assigned user @@ -28969,6 +31975,9 @@ components: id: readOnly: true type: integer + state: + readOnly: true + type: string task: description: Assigned task type: integer @@ -28985,6 +31994,7 @@ components: - assignee - created_at - id + - state - task type: object TaskEvent: @@ -29780,13 +32790,23 @@ components: - $ref: '#/components/schemas/WhoAmILseFields' readOnly: true org_membership: + deprecated: true items: $ref: '#/components/schemas/OrganizationMembership' readOnly: true type: array + organization_membership: + allOf: + - $ref: '#/components/schemas/OrganizationMembership' + readOnly: true pause: readOnly: true type: string + permissions: + items: + type: string + readOnly: true + type: array phone: maxLength: 256 type: string @@ -29801,7 +32821,9 @@ components: - last_activity - lse_fields - org_membership + - organization_membership - pause + - permissions - username type: object Workspace: @@ -29891,6 +32913,13 @@ components: required: - user type: object + WorkspaceProjectsRequest: + properties: + project: + type: integer + required: + - project + type: object WorkspaceRequest: description: |- A ModelSerializer that takes additional arguments for diff --git a/poetry.lock b/poetry.lock index f6ef7c540..19aea0c89 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" @@ -44,13 +44,13 @@ files = [ [[package]] name = "argcomplete" -version = "3.6.2" +version = "3.6.3" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.6.2-py3-none-any.whl", hash = "sha256:65b3133a29ad53fb42c48cf5114752c7ab66c1c38544fdf6460f450c09b42591"}, - {file = "argcomplete-3.6.2.tar.gz", hash = "sha256:d0519b1bc867f5f4f4713c41ad0aba73a4a5f007449716b16f385f2166dc6adf"}, + {file = "argcomplete-3.6.3-py3-none-any.whl", hash = "sha256:f5007b3a600ccac5d25bbce33089211dfd49eab4a7718da3f10e3082525a92ce"}, + {file = "argcomplete-3.6.3.tar.gz", hash = "sha256:62e8ed4fd6a45864acc8235409461b72c9a28ee785a2011cc5eb78318786c89c"}, ] [package.extras] @@ -58,52 +58,48 @@ test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] [[package]] name = "attrs" -version = "25.3.0" +version = "25.4.0" description = "Classes Without Boilerplate" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, - {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, + {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, + {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, ] -[package.extras] -benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] -tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] - [[package]] name = "black" -version = "25.1.0" +version = "25.11.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.9" files = [ - {file = "black-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:759e7ec1e050a15f89b770cefbf91ebee8917aac5c20483bc2d80a6c3a04df32"}, - {file = "black-25.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e519ecf93120f34243e6b0054db49c00a35f84f195d5bce7e9f5cfc578fc2da"}, - {file = "black-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:055e59b198df7ac0b7efca5ad7ff2516bca343276c466be72eb04a3bcc1f82d7"}, - {file = "black-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:db8ea9917d6f8fc62abd90d944920d95e73c83a5ee3383493e35d271aca872e9"}, - {file = "black-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a39337598244de4bae26475f77dda852ea00a93bd4c728e09eacd827ec929df0"}, - {file = "black-25.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96c1c7cd856bba8e20094e36e0f948718dc688dba4a9d78c3adde52b9e6c2299"}, - {file = "black-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce2e264d59c91e52d8000d507eb20a9aca4a778731a08cfff7e5ac4a4bb7096"}, - {file = "black-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:172b1dbff09f86ce6f4eb8edf9dede08b1fce58ba194c87d7a4f1a5aa2f5b3c2"}, - {file = "black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b"}, - {file = "black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc"}, - {file = "black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f"}, - {file = "black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba"}, - {file = "black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f"}, - {file = "black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3"}, - {file = "black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171"}, - {file = "black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18"}, - {file = "black-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1ee0a0c330f7b5130ce0caed9936a904793576ef4d2b98c40835d6a65afa6a0"}, - {file = "black-25.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3df5f1bf91d36002b0a75389ca8663510cf0531cca8aa5c1ef695b46d98655f"}, - {file = "black-25.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9e6827d563a2c820772b32ce8a42828dc6790f095f441beef18f96aa6f8294e"}, - {file = "black-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:bacabb307dca5ebaf9c118d2d2f6903da0d62c9faa82bd21a33eecc319559355"}, - {file = "black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717"}, - {file = "black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666"}, + {file = "black-25.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ec311e22458eec32a807f029b2646f661e6859c3f61bc6d9ffb67958779f392e"}, + {file = "black-25.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1032639c90208c15711334d681de2e24821af0575573db2810b0763bcd62e0f0"}, + {file = "black-25.11.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0c0f7c461df55cf32929b002335883946a4893d759f2df343389c4396f3b6b37"}, + {file = "black-25.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:f9786c24d8e9bd5f20dc7a7f0cdd742644656987f6ea6947629306f937726c03"}, + {file = "black-25.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:895571922a35434a9d8ca67ef926da6bc9ad464522a5fe0db99b394ef1c0675a"}, + {file = "black-25.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cb4f4b65d717062191bdec8e4a442539a8ea065e6af1c4f4d36f0cdb5f71e170"}, + {file = "black-25.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d81a44cbc7e4f73a9d6ae449ec2317ad81512d1e7dce7d57f6333fd6259737bc"}, + {file = "black-25.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:7eebd4744dfe92ef1ee349dc532defbf012a88b087bb7ddd688ff59a447b080e"}, + {file = "black-25.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:80e7486ad3535636657aa180ad32a7d67d7c273a80e12f1b4bfa0823d54e8fac"}, + {file = "black-25.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6cced12b747c4c76bc09b4db057c319d8545307266f41aaee665540bc0e04e96"}, + {file = "black-25.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cb2d54a39e0ef021d6c5eef442e10fd71fcb491be6413d083a320ee768329dd"}, + {file = "black-25.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae263af2f496940438e5be1a0c1020e13b09154f3af4df0835ea7f9fe7bfa409"}, + {file = "black-25.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0a1d40348b6621cc20d3d7530a5b8d67e9714906dfd7346338249ad9c6cedf2b"}, + {file = "black-25.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:51c65d7d60bb25429ea2bf0731c32b2a2442eb4bd3b2afcb47830f0b13e58bfd"}, + {file = "black-25.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:936c4dd07669269f40b497440159a221ee435e3fddcf668e0c05244a9be71993"}, + {file = "black-25.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:f42c0ea7f59994490f4dccd64e6b2dd49ac57c7c84f38b8faab50f8759db245c"}, + {file = "black-25.11.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:35690a383f22dd3e468c85dc4b915217f87667ad9cce781d7b42678ce63c4170"}, + {file = "black-25.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:dae49ef7369c6caa1a1833fd5efb7c3024bb7e4499bf64833f65ad27791b1545"}, + {file = "black-25.11.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bd4a22a0b37401c8e492e994bce79e614f91b14d9ea911f44f36e262195fdda"}, + {file = "black-25.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:aa211411e94fdf86519996b7f5f05e71ba34835d8f0c0f03c00a26271da02664"}, + {file = "black-25.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3bb5ce32daa9ff0605d73b6f19da0b0e6c1f8f2d75594db539fdfed722f2b06"}, + {file = "black-25.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9815ccee1e55717fe9a4b924cae1646ef7f54e0f990da39a34fc7b264fcf80a2"}, + {file = "black-25.11.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:92285c37b93a1698dcbc34581867b480f1ba3a7b92acf1fe0467b04d7a4da0dc"}, + {file = "black-25.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:43945853a31099c7c0ff8dface53b4de56c41294fa6783c0441a8b1d9bf668bc"}, + {file = "black-25.11.0-py3-none-any.whl", hash = "sha256:e3f562da087791e96cefcd9dda058380a442ab322a02e222add53736451f604b"}, + {file = "black-25.11.0.tar.gz", hash = "sha256:9a323ac32f5dc75ce7470501b887250be5005a01602e931a15e45593f70f6e08"}, ] [package.dependencies] @@ -112,6 +108,7 @@ mypy-extensions = ">=0.4.3" packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" +pytokens = ">=0.3.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} @@ -123,101 +120,135 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2025.8.3" +version = "2025.10.5" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" files = [ - {file = "certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5"}, - {file = "certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407"}, + {file = "certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de"}, + {file = "certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43"}, ] [[package]] name = "charset-normalizer" -version = "3.4.3" +version = "3.4.4" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" files = [ - {file = "charset_normalizer-3.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-win32.whl", hash = "sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f"}, - {file = "charset_normalizer-3.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849"}, - {file = "charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37"}, - {file = "charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce"}, - {file = "charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce"}, - {file = "charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-win32.whl", hash = "sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557"}, - {file = "charset_normalizer-3.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-win32.whl", hash = "sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432"}, - {file = "charset_normalizer-3.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca"}, - {file = "charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a"}, - {file = "charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-win32.whl", hash = "sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50"}, + {file = "charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f"}, + {file = "charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"}, ] [[package]] @@ -333,13 +364,13 @@ test = ["pytest (>=6)"] [[package]] name = "faker" -version = "37.6.0" +version = "37.12.0" description = "Faker is a Python package that generates fake data for you." optional = false python-versions = ">=3.9" files = [ - {file = "faker-37.6.0-py3-none-any.whl", hash = "sha256:3c5209b23d7049d596a51db5d76403a0ccfea6fc294ffa2ecfef6a8843b1e6a7"}, - {file = "faker-37.6.0.tar.gz", hash = "sha256:0f8cc34f30095184adf87c3c24c45b38b33ad81c35ef6eb0a3118f301143012c"}, + {file = "faker-37.12.0-py3-none-any.whl", hash = "sha256:afe7ccc038da92f2fbae30d8e16d19d91e92e242f8401ce9caf44de892bab4c4"}, + {file = "faker-37.12.0.tar.gz", hash = "sha256:7505e59a7e02fa9010f06c3e1e92f8250d4cfbb30632296140c2d6dbef09b0fa"}, ] [package.dependencies] @@ -414,13 +445,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "idna" -version = "3.10" +version = "3.11" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, + {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, + {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, ] [package.extras] @@ -428,96 +459,106 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 [[package]] name = "ijson" -version = "3.4.0" +version = "3.4.0.post0" description = "Iterative JSON parser with standard Python iterator interfaces" optional = false python-versions = ">=3.9" files = [ - {file = "ijson-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e27e50f6dcdee648f704abc5d31b976cd2f90b4642ed447cf03296d138433d09"}, - {file = "ijson-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2a753be681ac930740a4af9c93cfb4edc49a167faed48061ea650dc5b0f406f1"}, - {file = "ijson-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a07c47aed534e0ec198e6a2d4360b259d32ac654af59c015afc517ad7973b7fb"}, - {file = "ijson-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c55f48181e11c597cd7146fb31edc8058391201ead69f8f40d2ecbb0b3e4fc6"}, - {file = "ijson-3.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd5669f96f79d8a2dd5ae81cbd06770a4d42c435fd4a75c74ef28d9913b697d"}, - {file = "ijson-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e3ddd46d16b8542c63b1b8af7006c758d4e21cc1b86122c15f8530fae773461"}, - {file = "ijson-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1504cec7fe04be2bb0cc33b50c9dd3f83f98c0540ad4991d4017373b7853cfe6"}, - {file = "ijson-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:2f2ff456adeb216603e25d7915f10584c1b958b6eafa60038d76d08fc8a5fb06"}, - {file = "ijson-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0ab00d75d61613a125fbbb524551658b1ad6919a52271ca16563ca5bc2737bb1"}, - {file = "ijson-3.4.0-cp310-cp310-win32.whl", hash = "sha256:ada421fd59fe2bfa4cfa64ba39aeba3f0753696cdcd4d50396a85f38b1d12b01"}, - {file = "ijson-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:8c75e82cec05d00ed3a4af5f4edf08f59d536ed1a86ac7e84044870872d82a33"}, - {file = "ijson-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9e369bf5a173ca51846c243002ad8025d32032532523b06510881ecc8723ee54"}, - {file = "ijson-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:26e7da0a3cd2a56a1fde1b34231867693f21c528b683856f6691e95f9f39caec"}, - {file = "ijson-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c28c7f604729be22aa453e604e9617b665fa0c24cd25f9f47a970e8130c571a"}, - {file = "ijson-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bed8bcb84d3468940f97869da323ba09ae3e6b950df11dea9b62e2b231ca1e3"}, - {file = "ijson-3.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:296bc824f4088f2af814aaf973b0435bc887ce3d9f517b1577cc4e7d1afb1cb7"}, - {file = "ijson-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8145f8f40617b6a8aa24e28559d0adc8b889e56a203725226a8a60fa3501073f"}, - {file = "ijson-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b674a97bd503ea21bc85103e06b6493b1b2a12da3372950f53e1c664566a33a4"}, - {file = "ijson-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8bc731cf1c3282b021d3407a601a5a327613da9ad3c4cecb1123232623ae1826"}, - {file = "ijson-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:42ace5e940e0cf58c9de72f688d6829ddd815096d07927ee7e77df2648006365"}, - {file = "ijson-3.4.0-cp311-cp311-win32.whl", hash = "sha256:5be39a0df4cd3f02b304382ea8885391900ac62e95888af47525a287c50005e9"}, - {file = "ijson-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:0b1be1781792291e70d2e177acf564ec672a7907ba74f313583bdf39fe81f9b7"}, - {file = "ijson-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:956b148f88259a80a9027ffbe2d91705fae0c004fbfba3e5a24028fbe72311a9"}, - {file = "ijson-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06b89960f5c721106394c7fba5760b3f67c515b8eb7d80f612388f5eca2f4621"}, - {file = "ijson-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a0bb591cf250dd7e9dfab69d634745a7f3272d31cfe879f9156e0a081fd97ee"}, - {file = "ijson-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e92de999977f4c6b660ffcf2b8d59604ccd531edcbfde05b642baf283e0de8"}, - {file = "ijson-3.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e9602157a5b869d44b6896e64f502c712a312fcde044c2e586fccb85d3e316e"}, - {file = "ijson-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e83660edb931a425b7ff662eb49db1f10d30ca6d4d350e5630edbed098bc01"}, - {file = "ijson-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:49bf8eac1c7b7913073865a859c215488461f7591b4fa6a33c14b51cb73659d0"}, - {file = "ijson-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:160b09273cb42019f1811469508b0a057d19f26434d44752bde6f281da6d3f32"}, - {file = "ijson-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2019ff4e6f354aa00c76c8591bd450899111c61f2354ad55cc127e2ce2492c44"}, - {file = "ijson-3.4.0-cp312-cp312-win32.whl", hash = "sha256:931c007bf6bb8330705429989b2deed6838c22b63358a330bf362b6e458ba0bf"}, - {file = "ijson-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:71523f2b64cb856a820223e94d23e88369f193017ecc789bb4de198cc9d349eb"}, - {file = "ijson-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e8d96f88d75196a61c9d9443de2b72c2d4a7ba9456ff117b57ae3bba23a54256"}, - {file = "ijson-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c45906ce2c1d3b62f15645476fc3a6ca279549127f01662a39ca5ed334a00cf9"}, - {file = "ijson-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ab4bc2119b35c4363ea49f29563612237cae9413d2fbe54b223be098b97bc9e"}, - {file = "ijson-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b0a9b5a15e61dfb1f14921ea4e0dba39f3a650df6d8f444ddbc2b19b479ff1"}, - {file = "ijson-3.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3047bb994dabedf11de11076ed1147a307924b6e5e2df6784fb2599c4ad8c60"}, - {file = "ijson-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68c83161b052e9f5dc8191acbc862bb1e63f8a35344cb5cd0db1afd3afd487a6"}, - {file = "ijson-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1eebd9b6c20eb1dffde0ae1f0fbb4aeacec2eb7b89adb5c7c0449fc9fd742760"}, - {file = "ijson-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:13fb6d5c35192c541421f3ee81239d91fc15a8d8f26c869250f941f4b346a86c"}, - {file = "ijson-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:28b7196ff7b37c4897c547a28fa4876919696739fc91c1f347651c9736877c69"}, - {file = "ijson-3.4.0-cp313-cp313-win32.whl", hash = "sha256:3c2691d2da42629522140f77b99587d6f5010440d58d36616f33bc7bdc830cc3"}, - {file = "ijson-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:c4554718c275a044c47eb3874f78f2c939f300215d9031e785a6711cc51b83fc"}, - {file = "ijson-3.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:915a65e3f3c0eee2ea937bc62aaedb6c14cc1e8f0bb9f3f4fb5a9e2bbfa4b480"}, - {file = "ijson-3.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:afbe9748707684b6c5adc295c4fdcf27765b300aec4d484e14a13dca4e5c0afa"}, - {file = "ijson-3.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d823f8f321b4d8d5fa020d0a84f089fec5d52b7c0762430476d9f8bf95bbc1a9"}, - {file = "ijson-3.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0a2c54f3becf76881188beefd98b484b1d3bd005769a740d5b433b089fa23"}, - {file = "ijson-3.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ced19a83ab09afa16257a0b15bc1aa888dbc555cb754be09d375c7f8d41051f2"}, - {file = "ijson-3.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8100f9885eff1f38d35cef80ef759a1bbf5fc946349afa681bd7d0e681b7f1a0"}, - {file = "ijson-3.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d7bcc3f7f21b0f703031ecd15209b1284ea51b2a329d66074b5261de3916c1eb"}, - {file = "ijson-3.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2dcb190227b09dd171bdcbfe4720fddd574933c66314818dfb3960c8a6246a77"}, - {file = "ijson-3.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eda4cfb1d49c6073a901735aaa62e39cb7ab47f3ad7bb184862562f776f1fa8a"}, - {file = "ijson-3.4.0-cp313-cp313t-win32.whl", hash = "sha256:0772638efa1f3b72b51736833404f1cbd2f5beeb9c1a3d392e7d385b9160cba7"}, - {file = "ijson-3.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3d8a0d67f36e4fb97c61a724456ef0791504b16ce6f74917a31c2e92309bbeb9"}, - {file = "ijson-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8a990401dc7350c1739f42187823e68d2ef6964b55040c6e9f3a29461f9929e2"}, - {file = "ijson-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:80f50e0f5da4cd6b65e2d8ff38cb61b26559608a05dd3a3f9cfa6f19848e6f22"}, - {file = "ijson-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2d9ca52f5650d820a2e7aa672dea1c560f609e165337e5b3ed7cf56d696bf309"}, - {file = "ijson-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:940c8c5fd20fb89b56dde9194a4f1c7b779149f1ab26af6d8dc1da51a95d26dd"}, - {file = "ijson-3.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:41dbb525666017ad856ac9b4f0f4b87d3e56b7dfde680d5f6d123556b22e2172"}, - {file = "ijson-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9f84f5e2eea5c2d271c97221c382db005534294d1175ddd046a12369617c41c"}, - {file = "ijson-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0cd126c11835839bba8ac0baaba568f67d701fc4f717791cf37b10b74a2ebd7"}, - {file = "ijson-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f9a9d3bbc6d91c24a2524a189d2aca703cb5f7e8eb34ad0aff3c91702404a983"}, - {file = "ijson-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:56679ee133470d0f1f598a8ad109d760fcfebeef4819531e29335aefb7e4cb1a"}, - {file = "ijson-3.4.0-cp39-cp39-win32.whl", hash = "sha256:583c15ded42ba80104fa1d0fa0dfdd89bb47922f3bb893a931bb843aeb55a3f3"}, - {file = "ijson-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:4563e603e56f4451572d96b47311dffef5b933d825f3417881d4d3630c6edac2"}, - {file = "ijson-3.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:54e989c35dba9cf163d532c14bcf0c260897d5f465643f0cd1fba9c908bed7ef"}, - {file = "ijson-3.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:494eeb8e87afef22fbb969a4cb81ac2c535f30406f334fb6136e9117b0bb5380"}, - {file = "ijson-3.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81603de95de1688958af65cd2294881a4790edae7de540b70c65c8253c5dc44a"}, - {file = "ijson-3.4.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8524be12c1773e1be466034cc49c1ecbe3d5b47bb86217bd2a57f73f970a6c19"}, - {file = "ijson-3.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17994696ec895d05e0cfa21b11c68c920c82634b4a3d8b8a1455d6fe9fdee8f7"}, - {file = "ijson-3.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0b67727aaee55d43b2e82b6a866c3cbcb2b66a5e9894212190cbd8773d0d9857"}, - {file = "ijson-3.4.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cdc8c5ca0eec789ed99db29c68012dda05027af0860bb360afd28d825238d69d"}, - {file = "ijson-3.4.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8e6b44b6ec45d5b1a0ee9d97e0e65ab7f62258727004cbbe202bf5f198bc21f7"}, - {file = "ijson-3.4.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b51e239e4cb537929796e840d349fc731fdc0d58b1a0683ce5465ad725321e0f"}, - {file = "ijson-3.4.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed05d43ec02be8ddb1ab59579761f6656b25d241a77fd74f4f0f7ec09074318a"}, - {file = "ijson-3.4.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfeca1aaa59d93fd0a3718cbe5f7ef0effff85cf837e0bceb71831a47f39cc14"}, - {file = "ijson-3.4.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:7ca72ca12e9a1dd4252c97d952be34282907f263f7e28fcdff3a01b83981e837"}, - {file = "ijson-3.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0f79b2cd52bd220fff83b3ee4ef89b54fd897f57cc8564a6d8ab7ac669de3930"}, - {file = "ijson-3.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d16eed737610ad5ad8989b5864fbe09c64133129734e840c29085bb0d497fb03"}, - {file = "ijson-3.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b3aac1d7a27e1e3bdec5bd0689afe55c34aa499baa06a80852eda31f1ffa6dc"}, - {file = "ijson-3.4.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:784ae654aa9851851e87f323e9429b20b58a5399f83e6a7e348e080f2892081f"}, - {file = "ijson-3.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d05bd8fa6a8adefb32bbf7b993d2a2f4507db08453dd1a444c281413a6d9685"}, - {file = "ijson-3.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b5a05fd935cc28786b88c16976313086cd96414c6a3eb0a3822c47ab48b1793e"}, - {file = "ijson-3.4.0.tar.gz", hash = "sha256:5f74dcbad9d592c428d3ca3957f7115a42689ee7ee941458860900236ae9bb13"}, + {file = "ijson-3.4.0.post0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8f904a405b58a04b6ef0425f1babbc5c65feb66b0a4cc7f214d4ad7de106f77d"}, + {file = "ijson-3.4.0.post0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a07dcc1a8a1ddd76131a7c7528cbd12951c2e34eb3c3d63697b905069a2d65b1"}, + {file = "ijson-3.4.0.post0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab3be841b8c430c1883b8c0775eb551f21b5500c102c7ee828afa35ddd701bdd"}, + {file = "ijson-3.4.0.post0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:43059ae0d657b11c5ddb11d149bc400c44f9e514fb8663057e9b2ea4d8d44c1f"}, + {file = "ijson-3.4.0.post0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0d3e82963096579d1385c06b2559570d7191e225664b7fa049617da838e1a4a4"}, + {file = "ijson-3.4.0.post0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:461ce4e87a21a261b60c0a68a2ad17c7dd214f0b90a0bec7e559a66b6ae3bd7e"}, + {file = "ijson-3.4.0.post0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:890cf6610c9554efcb9765a93e368efeb5bb6135f59ce0828d92eaefff07fde5"}, + {file = "ijson-3.4.0.post0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6793c29a5728e7751a7df01be58ba7da9b9690c12bf79d32094c70a908fa02b9"}, + {file = "ijson-3.4.0.post0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a56b6674d7feec0401c91f86c376f4e3d8ff8129128a8ad21ca43ec0b1242f79"}, + {file = "ijson-3.4.0.post0-cp310-cp310-win32.whl", hash = "sha256:01767fcbd75a5fa5a626069787b41f04681216b798510d5f63bcf66884386368"}, + {file = "ijson-3.4.0.post0-cp310-cp310-win_amd64.whl", hash = "sha256:09127c06e5dec753feb9e4b8c5f6a23603d1cd672d098159a17e53a73b898eec"}, + {file = "ijson-3.4.0.post0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0b473112e72c0c506da425da3278367b6680f340ecc093084693a1e819d28435"}, + {file = "ijson-3.4.0.post0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:043f9b7cf9cc744263a78175e769947733710d2412d25180df44b1086b23ebd5"}, + {file = "ijson-3.4.0.post0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b55e49045f4c8031f3673f56662fd828dc9e8d65bd3b03a9420dda0d370e64ba"}, + {file = "ijson-3.4.0.post0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:11f13b73194ea2a5a8b4a2863f25b0b4624311f10db3a75747b510c4958179b0"}, + {file = "ijson-3.4.0.post0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:659acb2843433e080c271ecedf7d19c71adde1ee5274fc7faa2fec0a793f9f1c"}, + {file = "ijson-3.4.0.post0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:deda4cfcaafa72ca3fa845350045b1d0fef9364ec9f413241bb46988afbe6ee6"}, + {file = "ijson-3.4.0.post0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47352563e8c594360bacee2e0753e97025f0861234722d02faace62b1b6d2b2a"}, + {file = "ijson-3.4.0.post0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5a48b9486242d1295abe7fd0fbb6308867da5ca3f69b55c77922a93c2b6847aa"}, + {file = "ijson-3.4.0.post0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9c0886234d1fae15cf4581a430bdba03d79251c1ab3b07e30aa31b13ef28d01c"}, + {file = "ijson-3.4.0.post0-cp311-cp311-win32.whl", hash = "sha256:fecae19b5187d92900c73debb3a979b0b3290a53f85df1f8f3c5ba7d1e9fb9cb"}, + {file = "ijson-3.4.0.post0-cp311-cp311-win_amd64.whl", hash = "sha256:b39dbf87071f23a23c8077eea2ae7cfeeca9ff9ffec722dfc8b5f352e4dd729c"}, + {file = "ijson-3.4.0.post0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b607a500fca26101be47d2baf7cddb457b819ab60a75ce51ed1092a40da8b2f9"}, + {file = "ijson-3.4.0.post0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4827d9874a6a81625412c59f7ca979a84d01f7f6bfb3c6d4dc4c46d0382b14e0"}, + {file = "ijson-3.4.0.post0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d4d4afec780881edb2a0d2dd40b1cdbe246e630022d5192f266172a0307986a7"}, + {file = "ijson-3.4.0.post0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432fb60ffb952926f9438e0539011e2dfcd108f8426ee826ccc6173308c3ff2c"}, + {file = "ijson-3.4.0.post0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:54a0e3e05d9a0c95ecba73d9579f146cf6d5c5874116c849dba2d39a5f30380e"}, + {file = "ijson-3.4.0.post0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05807edc0bcbd222dc6ea32a2b897f0c81dc7f12c8580148bc82f6d7f5e7ec7b"}, + {file = "ijson-3.4.0.post0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a5269af16f715855d9864937f9dd5c348ca1ac49cee6a2c7a1b7091c159e874f"}, + {file = "ijson-3.4.0.post0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b200df83c901f5bfa416d069ac71077aa1608f854a4c50df1b84ced560e9c9ec"}, + {file = "ijson-3.4.0.post0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6458bd8e679cdff459a0a5e555b107c3bbacb1f382da3fe0f40e392871eb518d"}, + {file = "ijson-3.4.0.post0-cp312-cp312-win32.whl", hash = "sha256:55f7f656b5986326c978cbb3a9eea9e33f3ef6ecc4535b38f1d452c731da39ab"}, + {file = "ijson-3.4.0.post0-cp312-cp312-win_amd64.whl", hash = "sha256:e15833dcf6f6d188fdc624a31cd0520c3ba21b6855dc304bc7c1a8aeca02d4ac"}, + {file = "ijson-3.4.0.post0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:114ed248166ac06377e87a245a158d6b98019d2bdd3bb93995718e0bd996154f"}, + {file = "ijson-3.4.0.post0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ffb21203736b08fe27cb30df6a4f802fafb9ef7646c5ff7ef79569b63ea76c57"}, + {file = "ijson-3.4.0.post0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:07f20ecd748602ac7f18c617637e53bd73ded7f3b22260bba3abe401a7fc284e"}, + {file = "ijson-3.4.0.post0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:27aa193d47ffc6bc4e45453896ad98fb089a367e8283b973f1fe5c0198b60b4e"}, + {file = "ijson-3.4.0.post0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ccddb2894eb7af162ba43b9475ac5825d15d568832f82eb8783036e5d2aebd42"}, + {file = "ijson-3.4.0.post0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:61ab0b8c5bf707201dc67e02c116f4b6545c4afd7feb2264b989d242d9c4348a"}, + {file = "ijson-3.4.0.post0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:254cfb8c124af68327a0e7a49b50bbdacafd87c4690a3d62c96eb01020a685ef"}, + {file = "ijson-3.4.0.post0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:04ac9ca54db20f82aeda6379b5f4f6112fdb150d09ebce04affeab98a17b4ed3"}, + {file = "ijson-3.4.0.post0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a603d7474bf35e7b3a8e49c8dabfc4751841931301adff3f3318171c4e407f32"}, + {file = "ijson-3.4.0.post0-cp313-cp313-win32.whl", hash = "sha256:ec5bb1520cb212ebead7dba048bb9b70552c3440584f83b01b0abc96862e2a09"}, + {file = "ijson-3.4.0.post0-cp313-cp313-win_amd64.whl", hash = "sha256:3505dff18bdeb8b171eb28af6df34857e2be80dc01e2e3b624e77215ad58897f"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:45a0b1c833ed2620eaf8da958f06ac8351c59e5e470e078400d23814670ed708"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7809ec8c8f40228edaaa089f33e811dff4c5b8509702652870d3f286c9682e27"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cf4a34c2cfe852aee75c89c05b0a4531c49dc0be27eeed221afd6fbf9c3e149c"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a39d5d36067604b26b78de70b8951c90e9272450642661fe531a8f7a6936a7fa"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83fc738d81c9ea686b452996110b8a6678296c481e0546857db24785bff8da92"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b2a81aee91633868f5b40280e2523f7c5392e920a5082f47c5e991e516b483f6"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:56169e298c5a2e7196aaa55da78ddc2415876a74fe6304f81b1eb0d3273346f7"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eeb9540f0b1a575cbb5968166706946458f98c16e7accc6f2fe71efa29864241"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ba3478ff0bb49d7ba88783f491a99b6e3fa929c930ab062d2bb7837e6a38fe88"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-win32.whl", hash = "sha256:b005ce84e82f28b00bf777a464833465dfe3efa43a0a26c77b5ac40723e1a728"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-win_amd64.whl", hash = "sha256:fe9c84c9b1c8798afa407be1cea1603401d99bfc7c34497e19f4f5e5ddc9b441"}, + {file = "ijson-3.4.0.post0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da6a21b88cbf5ecbc53371283988d22c9643aa71ae2873bbeaefd2dea3b6160b"}, + {file = "ijson-3.4.0.post0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cf24a48a1c3ca9d44a04feb59ccefeb9aa52bb49b9cb70ad30518c25cce74bb7"}, + {file = "ijson-3.4.0.post0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d14427d366f95f21adcb97d0ed1f6d30f6fdc04d0aa1e4de839152c50c2b8d65"}, + {file = "ijson-3.4.0.post0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:339d49f6c5d24051c85d9226be96d2d56e633cb8b7d09dd8099de8d8b51a97e2"}, + {file = "ijson-3.4.0.post0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7206afcb396aaef66c2b066997b4e9d9042c4b7d777f4d994e9cec6d322c2fe6"}, + {file = "ijson-3.4.0.post0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c8dd327da225887194fe8b93f2b3c9c256353e14a6b9eefc940ed17fde38f5b8"}, + {file = "ijson-3.4.0.post0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4810546e66128af51fd4a0c9a640e84e8508e9c15c4f247d8a3e3253b20e1465"}, + {file = "ijson-3.4.0.post0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:103a0838061297d063bca81d724b0958b616f372bd893bbc278320152252c652"}, + {file = "ijson-3.4.0.post0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:40007c977e230e04118b27322f25a72ae342a3d61464b2057fcd9b21eeb7427a"}, + {file = "ijson-3.4.0.post0-cp314-cp314-win32.whl", hash = "sha256:f932969fc1fd4449ca141cf5f47ff357656a154a361f28d9ebca0badc5b02297"}, + {file = "ijson-3.4.0.post0-cp314-cp314-win_amd64.whl", hash = "sha256:3ed19b1e4349240773a8ce4a4bfa450892d4a57949c02c515cd6be5a46b7696a"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:226447e40ca9340a39ed07d68ea02ee14b52cb4fe649425b256c1f0073531c83"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2c88f0669d45d4b1aa017c9b68d378e7cd15d188dfb6f0209adc78b7f45590a7"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:56b3089dc28c12492d92cc4896d2be585a89ecae34e25d08c1df88f21815cb50"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c117321cfa7b749cc1213f9b4c80dc958f0a206df98ec038ae4bcbbdb8463a15"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8311f48db6a33116db5c81682f08b6e2405501a4b4e460193ae69fec3cd1f87a"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:91c61a3e63e04da648737e6b4abd537df1b46fb8cdf3219b072e790bb3c1a46b"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1709171023ce82651b2f132575c2e6282e47f64ad67bd3260da476418d0e7895"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:5f0a72b1e3c0f78551670c12b2fdc1bf05f2796254d9c2055ba319bec2216020"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b982a3597b0439ce9c8f4cfc929d86c6ed43907908be1e8463a34dc35fe5b258"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-win32.whl", hash = "sha256:4e39bfdc36b0b460ef15a06550a6a385c64c81f7ac205ccff39bd45147918912"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-win_amd64.whl", hash = "sha256:17e45262a5ddef39894013fb1548ee7094e444c8389eb1a97f86708b19bea03e"}, + {file = "ijson-3.4.0.post0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:35eb2760a42fd9461358b4be131287587b49ff504fc37fa3014dca6c27c343f4"}, + {file = "ijson-3.4.0.post0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f82ca7abfb3ef3cf2194c71dad634572bcccd62a5dd466649f78fe73d492c860"}, + {file = "ijson-3.4.0.post0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:97f5ef3d839fc24b0ad47e8b31b4751ae72c5d83606e3ee4c92bb25965c03a4f"}, + {file = "ijson-3.4.0.post0-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a2c873742e9f7e21378516217d81d6fa11d34bae860ed364832c00ab1dbf37ed"}, + {file = "ijson-3.4.0.post0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f8b9ffa2c2dfe3289da9aec4e5ab52684fa2b2da2c853c7891b360ec46fba07"}, + {file = "ijson-3.4.0.post0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0634b21188c67e5cf471cc1d30d193d19f521d89e2125ab1fb602aa8ae61e050"}, + {file = "ijson-3.4.0.post0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3752dd6f51ef58a71799de745649deff293e959700f1b7f5b1989618da366f24"}, + {file = "ijson-3.4.0.post0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:57db77f4ea3eca09f519f627d9f9c76eb862b30edef5d899f031feeed94f05a1"}, + {file = "ijson-3.4.0.post0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:435270a4b75667305f6df3226e5224e83cd6906022d7fdcc9df05caae725f796"}, + {file = "ijson-3.4.0.post0-cp39-cp39-win32.whl", hash = "sha256:742c211b004ab51ccad2b301525d8a6eb2cf68a5fb82d78836f3a351eec44d4e"}, + {file = "ijson-3.4.0.post0-cp39-cp39-win_amd64.whl", hash = "sha256:35aaa979da875fa92bea5dc5969b1541b4912b165091761785459a43f0c20946"}, + {file = "ijson-3.4.0.post0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:add9242f886eae844a7410b84aee2bbb8bdc83c624f227cb1fdb2d0476a96cb1"}, + {file = "ijson-3.4.0.post0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:69718ed41710dfcaa7564b0af42abc05875d4f7aaa24627c808867ef32634bc7"}, + {file = "ijson-3.4.0.post0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:636b6eca96c6c43c04629c6b37fad0181662eaacf9877c71c698485637f752f9"}, + {file = "ijson-3.4.0.post0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb5e73028f6e63d27b3d286069fe350ed80a4ccc493b022b590fea4bb086710d"}, + {file = "ijson-3.4.0.post0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:461acf4320219459dabe5ed90a45cb86c9ba8cc6d6db9dad0d9427d42f57794c"}, + {file = "ijson-3.4.0.post0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a0fedf09c0f6ffa2a99e7e7fd9c5f3caf74e655c1ee015a0797383e99382ebc3"}, + {file = "ijson-3.4.0.post0.tar.gz", hash = "sha256:9aa02dc70bb245670a6ca7fba737b992aeeb4895360980622f7e568dbf23e41e"}, ] [[package]] @@ -647,127 +688,151 @@ referencing = ">=0.31.0" [[package]] name = "lxml" -version = "6.0.1" +version = "6.0.2" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false python-versions = ">=3.8" files = [ - {file = "lxml-6.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b38e20c578149fdbba1fd3f36cb1928a3aaca4b011dfd41ba09d11fb396e1b9"}, - {file = "lxml-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:11a052cbd013b7140bbbb38a14e2329b6192478344c99097e378c691b7119551"}, - {file = "lxml-6.0.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:21344d29c82ca8547ea23023bb8e7538fa5d4615a1773b991edf8176a870c1ea"}, - {file = "lxml-6.0.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aa8f130f4b2dc94baa909c17bb7994f0268a2a72b9941c872e8e558fd6709050"}, - {file = "lxml-6.0.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4588806a721552692310ebe9f90c17ac6c7c5dac438cd93e3d74dd60531c3211"}, - {file = "lxml-6.0.1-cp310-cp310-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:8466faa66b0353802fb7c054a400ac17ce2cf416e3ad8516eadeff9cba85b741"}, - {file = "lxml-6.0.1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50b5e54f6a9461b1e9c08b4a3420415b538d4773bd9df996b9abcbfe95f4f1fd"}, - {file = "lxml-6.0.1-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:6f393e10685b37f15b1daef8aa0d734ec61860bb679ec447afa0001a31e7253f"}, - {file = "lxml-6.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:07038c62fd0fe2743e2f5326f54d464715373c791035d7dda377b3c9a5d0ad77"}, - {file = "lxml-6.0.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:7a44a5fb1edd11b3a65c12c23e1049c8ae49d90a24253ff18efbcb6aa042d012"}, - {file = "lxml-6.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a57d9eb9aadf311c9e8785230eec83c6abb9aef2adac4c0587912caf8f3010b8"}, - {file = "lxml-6.0.1-cp310-cp310-win32.whl", hash = "sha256:d877874a31590b72d1fa40054b50dc33084021bfc15d01b3a661d85a302af821"}, - {file = "lxml-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:c43460f4aac016ee0e156bfa14a9de9b3e06249b12c228e27654ac3996a46d5b"}, - {file = "lxml-6.0.1-cp310-cp310-win_arm64.whl", hash = "sha256:615bb6c73fed7929e3a477a3297a797892846b253d59c84a62c98bdce3849a0a"}, - {file = "lxml-6.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c6acde83f7a3d6399e6d83c1892a06ac9b14ea48332a5fbd55d60b9897b9570a"}, - {file = "lxml-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0d21c9cacb6a889cbb8eeb46c77ef2c1dd529cde10443fdeb1de847b3193c541"}, - {file = "lxml-6.0.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:847458b7cd0d04004895f1fb2cca8e7c0f8ec923c49c06b7a72ec2d48ea6aca2"}, - {file = "lxml-6.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1dc13405bf315d008fe02b1472d2a9d65ee1c73c0a06de5f5a45e6e404d9a1c0"}, - {file = "lxml-6.0.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f540c229a8c0a770dcaf6d5af56a5295e0fc314fc7ef4399d543328054bcea"}, - {file = "lxml-6.0.1-cp311-cp311-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:d2f73aef768c70e8deb8c4742fca4fd729b132fda68458518851c7735b55297e"}, - {file = "lxml-6.0.1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e7f4066b85a4fa25ad31b75444bd578c3ebe6b8ed47237896341308e2ce923c3"}, - {file = "lxml-6.0.1-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:0cce65db0cd8c750a378639900d56f89f7d6af11cd5eda72fde054d27c54b8ce"}, - {file = "lxml-6.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c372d42f3eee5844b69dcab7b8d18b2f449efd54b46ac76970d6e06b8e8d9a66"}, - {file = "lxml-6.0.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:2e2b0e042e1408bbb1c5f3cfcb0f571ff4ac98d8e73f4bf37c5dd179276beedd"}, - {file = "lxml-6.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cc73bb8640eadd66d25c5a03175de6801f63c535f0f3cf50cac2f06a8211f420"}, - {file = "lxml-6.0.1-cp311-cp311-win32.whl", hash = "sha256:7c23fd8c839708d368e406282d7953cee5134f4592ef4900026d84566d2b4c88"}, - {file = "lxml-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:2516acc6947ecd3c41a4a4564242a87c6786376989307284ddb115f6a99d927f"}, - {file = "lxml-6.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:cb46f8cfa1b0334b074f40c0ff94ce4d9a6755d492e6c116adb5f4a57fb6ad96"}, - {file = "lxml-6.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c03ac546adaabbe0b8e4a15d9ad815a281afc8d36249c246aecf1aaad7d6f200"}, - {file = "lxml-6.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33b862c7e3bbeb4ba2c96f3a039f925c640eeba9087a4dc7a572ec0f19d89392"}, - {file = "lxml-6.0.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7a3ec1373f7d3f519de595032d4dcafae396c29407cfd5073f42d267ba32440d"}, - {file = "lxml-6.0.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:03b12214fb1608f4cffa181ec3d046c72f7e77c345d06222144744c122ded870"}, - {file = "lxml-6.0.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:207ae0d5f0f03b30f95e649a6fa22aa73f5825667fee9c7ec6854d30e19f2ed8"}, - {file = "lxml-6.0.1-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:32297b09ed4b17f7b3f448de87a92fb31bb8747496623483788e9f27c98c0f00"}, - {file = "lxml-6.0.1-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7e18224ea241b657a157c85e9cac82c2b113ec90876e01e1f127312006233756"}, - {file = "lxml-6.0.1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a07a994d3c46cd4020c1ea566345cf6815af205b1e948213a4f0f1d392182072"}, - {file = "lxml-6.0.1-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:2287fadaa12418a813b05095485c286c47ea58155930cfbd98c590d25770e225"}, - {file = "lxml-6.0.1-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b4e597efca032ed99f418bd21314745522ab9fa95af33370dcee5533f7f70136"}, - {file = "lxml-6.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9696d491f156226decdd95d9651c6786d43701e49f32bf23715c975539aa2b3b"}, - {file = "lxml-6.0.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e4e3cd3585f3c6f87cdea44cda68e692cc42a012f0131d25957ba4ce755241a7"}, - {file = "lxml-6.0.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:45cbc92f9d22c28cd3b97f8d07fcefa42e569fbd587dfdac76852b16a4924277"}, - {file = "lxml-6.0.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:f8c9bcfd2e12299a442fba94459adf0b0d001dbc68f1594439bfa10ad1ecb74b"}, - {file = "lxml-6.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1e9dc2b9f1586e7cd77753eae81f8d76220eed9b768f337dc83a3f675f2f0cf9"}, - {file = "lxml-6.0.1-cp312-cp312-win32.whl", hash = "sha256:987ad5c3941c64031f59c226167f55a04d1272e76b241bfafc968bdb778e07fb"}, - {file = "lxml-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:abb05a45394fd76bf4a60c1b7bec0e6d4e8dfc569fc0e0b1f634cd983a006ddc"}, - {file = "lxml-6.0.1-cp312-cp312-win_arm64.whl", hash = "sha256:c4be29bce35020d8579d60aa0a4e95effd66fcfce31c46ffddf7e5422f73a299"}, - {file = "lxml-6.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:485eda5d81bb7358db96a83546949c5fe7474bec6c68ef3fa1fb61a584b00eea"}, - {file = "lxml-6.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d12160adea318ce3d118f0b4fbdff7d1225c75fb7749429541b4d217b85c3f76"}, - {file = "lxml-6.0.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48c8d335d8ab72f9265e7ba598ae5105a8272437403f4032107dbcb96d3f0b29"}, - {file = "lxml-6.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:405e7cf9dbdbb52722c231e0f1257214202dfa192327fab3de45fd62e0554082"}, - {file = "lxml-6.0.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:299a790d403335a6a057ade46f92612ebab87b223e4e8c5308059f2dc36f45ed"}, - {file = "lxml-6.0.1-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:48da704672f6f9c461e9a73250440c647638cc6ff9567ead4c3b1f189a604ee8"}, - {file = "lxml-6.0.1-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:21e364e1bb731489e3f4d51db416f991a5d5da5d88184728d80ecfb0904b1d68"}, - {file = "lxml-6.0.1-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1bce45a2c32032afddbd84ed8ab092130649acb935536ef7a9559636ce7ffd4a"}, - {file = "lxml-6.0.1-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:fa164387ff20ab0e575fa909b11b92ff1481e6876835014e70280769920c4433"}, - {file = "lxml-6.0.1-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7587ac5e000e1594e62278422c5783b34a82b22f27688b1074d71376424b73e8"}, - {file = "lxml-6.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:57478424ac4c9170eabf540237125e8d30fad1940648924c058e7bc9fb9cf6dd"}, - {file = "lxml-6.0.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:09c74afc7786c10dd6afaa0be2e4805866beadc18f1d843cf517a7851151b499"}, - {file = "lxml-6.0.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7fd70681aeed83b196482d42a9b0dc5b13bab55668d09ad75ed26dff3be5a2f5"}, - {file = "lxml-6.0.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:10a72e456319b030b3dd900df6b1f19d89adf06ebb688821636dc406788cf6ac"}, - {file = "lxml-6.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b0fa45fb5f55111ce75b56c703843b36baaf65908f8b8d2fbbc0e249dbc127ed"}, - {file = "lxml-6.0.1-cp313-cp313-win32.whl", hash = "sha256:01dab65641201e00c69338c9c2b8a0f2f484b6b3a22d10779bb417599fae32b5"}, - {file = "lxml-6.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:bdf8f7c8502552d7bff9e4c98971910a0a59f60f88b5048f608d0a1a75e94d1c"}, - {file = "lxml-6.0.1-cp313-cp313-win_arm64.whl", hash = "sha256:a6aeca75959426b9fd8d4782c28723ba224fe07cfa9f26a141004210528dcbe2"}, - {file = "lxml-6.0.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:29b0e849ec7030e3ecb6112564c9f7ad6881e3b2375dd4a0c486c5c1f3a33859"}, - {file = "lxml-6.0.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:02a0f7e629f73cc0be598c8b0611bf28ec3b948c549578a26111b01307fd4051"}, - {file = "lxml-6.0.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:beab5e54de016e730875f612ba51e54c331e2fa6dc78ecf9a5415fc90d619348"}, - {file = "lxml-6.0.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:92a08aefecd19ecc4ebf053c27789dd92c87821df2583a4337131cf181a1dffa"}, - {file = "lxml-6.0.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36c8fa7e177649470bc3dcf7eae6bee1e4984aaee496b9ccbf30e97ac4127fa2"}, - {file = "lxml-6.0.1-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:5d08e0f1af6916267bb7eff21c09fa105620f07712424aaae09e8cb5dd4164d1"}, - {file = "lxml-6.0.1-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9705cdfc05142f8c38c97a61bd3a29581ceceb973a014e302ee4a73cc6632476"}, - {file = "lxml-6.0.1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74555e2da7c1636e30bff4e6e38d862a634cf020ffa591f1f63da96bf8b34772"}, - {file = "lxml-6.0.1-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:e38b5f94c5a2a5dadaddd50084098dfd005e5a2a56cd200aaf5e0a20e8941782"}, - {file = "lxml-6.0.1-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a5ec101a92ddacb4791977acfc86c1afd624c032974bfb6a21269d1083c9bc49"}, - {file = "lxml-6.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5c17e70c82fd777df586c12114bbe56e4e6f823a971814fd40dec9c0de518772"}, - {file = "lxml-6.0.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:45fdd0415a0c3d91640b5d7a650a8f37410966a2e9afebb35979d06166fd010e"}, - {file = "lxml-6.0.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:d417eba28981e720a14fcb98f95e44e7a772fe25982e584db38e5d3b6ee02e79"}, - {file = "lxml-6.0.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:8e5d116b9e59be7934febb12c41cce2038491ec8fdb743aeacaaf36d6e7597e4"}, - {file = "lxml-6.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c238f0d0d40fdcb695c439fe5787fa69d40f45789326b3bb6ef0d61c4b588d6e"}, - {file = "lxml-6.0.1-cp314-cp314-win32.whl", hash = "sha256:537b6cf1c5ab88cfd159195d412edb3e434fee880f206cbe68dff9c40e17a68a"}, - {file = "lxml-6.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:911d0a2bb3ef3df55b3d97ab325a9ca7e438d5112c102b8495321105d25a441b"}, - {file = "lxml-6.0.1-cp314-cp314-win_arm64.whl", hash = "sha256:2834377b0145a471a654d699bdb3a2155312de492142ef5a1d426af2c60a0a31"}, - {file = "lxml-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9283997edb661ebba05314da1b9329e628354be310bbf947b0faa18263c5df1b"}, - {file = "lxml-6.0.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1beca37c6e7a4ddd1ca24829e2c6cb60b5aad0d6936283b5b9909a7496bd97af"}, - {file = "lxml-6.0.1-cp38-cp38-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:42897fe8cb097274087fafc8251a39b4cf8d64a7396d49479bdc00b3587331cb"}, - {file = "lxml-6.0.1-cp38-cp38-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ef8cd44a080bfb92776047d11ab64875faf76e0d8be20ea3ff0c1e67b3fc9cb"}, - {file = "lxml-6.0.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:433ab647dad6a9fb31418ccd3075dcb4405ece75dced998789fe14a8e1e3785c"}, - {file = "lxml-6.0.1-cp38-cp38-win32.whl", hash = "sha256:bfa30ef319462242333ef8f0c7631fb8b8b8eae7dca83c1f235d2ea2b7f8ff2b"}, - {file = "lxml-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:7f36e4a2439d134b8e70f92ff27ada6fb685966de385668e21c708021733ead1"}, - {file = "lxml-6.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:edb975280633a68d0988b11940834ce2b0fece9f5278297fc50b044cb713f0e1"}, - {file = "lxml-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d4c5acb9bc22f2026bbd0ecbfdb890e9b3e5b311b992609d35034706ad111b5d"}, - {file = "lxml-6.0.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:47ab1aff82a95a07d96c1eff4eaebec84f823e0dfb4d9501b1fbf9621270c1d3"}, - {file = "lxml-6.0.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:faa7233bdb7a4365e2411a665d034c370ac82798a926e65f76c26fbbf0fd14b7"}, - {file = "lxml-6.0.1-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c71a0ce0e08c7e11e64895c720dc7752bf064bfecd3eb2c17adcd7bfa8ffb22c"}, - {file = "lxml-6.0.1-cp39-cp39-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:57744270a512a93416a149f8b6ea1dbbbee127f5edcbcd5adf28e44b6ff02f33"}, - {file = "lxml-6.0.1-cp39-cp39-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e89d977220f7b1f0c725ac76f5c65904193bd4c264577a3af9017de17560ea7e"}, - {file = "lxml-6.0.1-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:0c8f7905f1971c2c408badf49ae0ef377cc54759552bcf08ae7a0a8ed18999c2"}, - {file = "lxml-6.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ea27626739e82f2be18cbb1aff7ad59301c723dc0922d9a00bc4c27023f16ab7"}, - {file = "lxml-6.0.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:21300d8c1bbcc38925aabd4b3c2d6a8b09878daf9e8f2035f09b5b002bcddd66"}, - {file = "lxml-6.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:021497a94907c5901cd49d24b5b0fdd18d198a06611f5ce26feeb67c901b92f2"}, - {file = "lxml-6.0.1-cp39-cp39-win32.whl", hash = "sha256:620869f2a3ec1475d000b608024f63259af8d200684de380ccb9650fbc14d1bb"}, - {file = "lxml-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:afae3a15889942426723839a3cf56dab5e466f7d873640a7a3c53abc671e2387"}, - {file = "lxml-6.0.1-cp39-cp39-win_arm64.whl", hash = "sha256:2719e42acda8f3444a0d88204fd90665116dda7331934da4d479dd9296c33ce2"}, - {file = "lxml-6.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0abfbaf4ebbd7fd33356217d317b6e4e2ef1648be6a9476a52b57ffc6d8d1780"}, - {file = "lxml-6.0.1-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1ebbf2d9775be149235abebdecae88fe3b3dd06b1797cd0f6dffe6948e85309d"}, - {file = "lxml-6.0.1-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a389e9f11c010bd30531325805bbe97bdf7f728a73d0ec475adef57ffec60547"}, - {file = "lxml-6.0.1-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8f5cf2addfbbe745251132c955ad62d8519bb4b2c28b0aa060eca4541798d86e"}, - {file = "lxml-6.0.1-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f1b60a3287bf33a2a54805d76b82055bcc076e445fd539ee9ae1fe85ed373691"}, - {file = "lxml-6.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f7bbfb0751551a8786915fc6b615ee56344dacc1b1033697625b553aefdd9837"}, - {file = "lxml-6.0.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b556aaa6ef393e989dac694b9c95761e32e058d5c4c11ddeef33f790518f7a5e"}, - {file = "lxml-6.0.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:64fac7a05ebb3737b79fd89fe5a5b6c5546aac35cfcfd9208eb6e5d13215771c"}, - {file = "lxml-6.0.1-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:038d3c08babcfce9dc89aaf498e6da205efad5b7106c3b11830a488d4eadf56b"}, - {file = "lxml-6.0.1-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:445f2cee71c404ab4259bc21e20339a859f75383ba2d7fb97dfe7c163994287b"}, - {file = "lxml-6.0.1-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e352d8578e83822d70bea88f3d08b9912528e4c338f04ab707207ab12f4b7aac"}, - {file = "lxml-6.0.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:51bd5d1a9796ca253db6045ab45ca882c09c071deafffc22e06975b7ace36300"}, - {file = "lxml-6.0.1.tar.gz", hash = "sha256:2b3a882ebf27dd026df3801a87cf49ff791336e0f94b0fad195db77e01240690"}, + {file = "lxml-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e77dd455b9a16bbd2a5036a63ddbd479c19572af81b624e79ef422f929eef388"}, + {file = "lxml-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d444858b9f07cefff6455b983aea9a67f7462ba1f6cbe4a21e8bf6791bf2153"}, + {file = "lxml-6.0.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f952dacaa552f3bb8834908dddd500ba7d508e6ea6eb8c52eb2d28f48ca06a31"}, + {file = "lxml-6.0.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:71695772df6acea9f3c0e59e44ba8ac50c4f125217e84aab21074a1a55e7e5c9"}, + {file = "lxml-6.0.2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:17f68764f35fd78d7c4cc4ef209a184c38b65440378013d24b8aecd327c3e0c8"}, + {file = "lxml-6.0.2-cp310-cp310-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:058027e261afed589eddcfe530fcc6f3402d7fd7e89bfd0532df82ebc1563dba"}, + {file = "lxml-6.0.2-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8ffaeec5dfea5881d4c9d8913a32d10cfe3923495386106e4a24d45300ef79c"}, + {file = "lxml-6.0.2-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:f2e3b1a6bb38de0bc713edd4d612969dd250ca8b724be8d460001a387507021c"}, + {file = "lxml-6.0.2-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d6690ec5ec1cce0385cb20896b16be35247ac8c2046e493d03232f1c2414d321"}, + {file = "lxml-6.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2a50c3c1d11cad0ebebbac357a97b26aa79d2bcaf46f256551152aa85d3a4d1"}, + {file = "lxml-6.0.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:3efe1b21c7801ffa29a1112fab3b0f643628c30472d507f39544fd48e9549e34"}, + {file = "lxml-6.0.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:59c45e125140b2c4b33920d21d83681940ca29f0b83f8629ea1a2196dc8cfe6a"}, + {file = "lxml-6.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:452b899faa64f1805943ec1c0c9ebeaece01a1af83e130b69cdefeda180bb42c"}, + {file = "lxml-6.0.2-cp310-cp310-win32.whl", hash = "sha256:1e786a464c191ca43b133906c6903a7e4d56bef376b75d97ccbb8ec5cf1f0a4b"}, + {file = "lxml-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:dacf3c64ef3f7440e3167aa4b49aa9e0fb99e0aa4f9ff03795640bf94531bcb0"}, + {file = "lxml-6.0.2-cp310-cp310-win_arm64.whl", hash = "sha256:45f93e6f75123f88d7f0cfd90f2d05f441b808562bf0bc01070a00f53f5028b5"}, + {file = "lxml-6.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:13e35cbc684aadf05d8711a5d1b5857c92e5e580efa9a0d2be197199c8def607"}, + {file = "lxml-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b1675e096e17c6fe9c0e8c81434f5736c0739ff9ac6123c87c2d452f48fc938"}, + {file = "lxml-6.0.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8ac6e5811ae2870953390452e3476694196f98d447573234592d30488147404d"}, + {file = "lxml-6.0.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5aa0fc67ae19d7a64c3fe725dc9a1bb11f80e01f78289d05c6f62545affec438"}, + {file = "lxml-6.0.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de496365750cc472b4e7902a485d3f152ecf57bd3ba03ddd5578ed8ceb4c5964"}, + {file = "lxml-6.0.2-cp311-cp311-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:200069a593c5e40b8f6fc0d84d86d970ba43138c3e68619ffa234bc9bb806a4d"}, + {file = "lxml-6.0.2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d2de809c2ee3b888b59f995625385f74629707c9355e0ff856445cdcae682b7"}, + {file = "lxml-6.0.2-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:b2c3da8d93cf5db60e8858c17684c47d01fee6405e554fb55018dd85fc23b178"}, + {file = "lxml-6.0.2-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:442de7530296ef5e188373a1ea5789a46ce90c4847e597856570439621d9c553"}, + {file = "lxml-6.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2593c77efde7bfea7f6389f1ab249b15ed4aa5bc5cb5131faa3b843c429fbedb"}, + {file = "lxml-6.0.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3e3cb08855967a20f553ff32d147e14329b3ae70ced6edc2f282b94afbc74b2a"}, + {file = "lxml-6.0.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2ed6c667fcbb8c19c6791bbf40b7268ef8ddf5a96940ba9404b9f9a304832f6c"}, + {file = "lxml-6.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b8f18914faec94132e5b91e69d76a5c1d7b0c73e2489ea8929c4aaa10b76bbf7"}, + {file = "lxml-6.0.2-cp311-cp311-win32.whl", hash = "sha256:6605c604e6daa9e0d7f0a2137bdc47a2e93b59c60a65466353e37f8272f47c46"}, + {file = "lxml-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e5867f2651016a3afd8dd2c8238baa66f1e2802f44bc17e236f547ace6647078"}, + {file = "lxml-6.0.2-cp311-cp311-win_arm64.whl", hash = "sha256:4197fb2534ee05fd3e7afaab5d8bfd6c2e186f65ea7f9cd6a82809c887bd1285"}, + {file = "lxml-6.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a59f5448ba2ceccd06995c95ea59a7674a10de0810f2ce90c9006f3cbc044456"}, + {file = "lxml-6.0.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e8113639f3296706fbac34a30813929e29247718e88173ad849f57ca59754924"}, + {file = "lxml-6.0.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f"}, + {file = "lxml-6.0.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534"}, + {file = "lxml-6.0.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564"}, + {file = "lxml-6.0.2-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f"}, + {file = "lxml-6.0.2-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0"}, + {file = "lxml-6.0.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192"}, + {file = "lxml-6.0.2-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0"}, + {file = "lxml-6.0.2-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092"}, + {file = "lxml-6.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f"}, + {file = "lxml-6.0.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8"}, + {file = "lxml-6.0.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f"}, + {file = "lxml-6.0.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6"}, + {file = "lxml-6.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322"}, + {file = "lxml-6.0.2-cp312-cp312-win32.whl", hash = "sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849"}, + {file = "lxml-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f"}, + {file = "lxml-6.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6"}, + {file = "lxml-6.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9b33d21594afab46f37ae58dfadd06636f154923c4e8a4d754b0127554eb2e77"}, + {file = "lxml-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6c8963287d7a4c5c9a432ff487c52e9c5618667179c18a204bdedb27310f022f"}, + {file = "lxml-6.0.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452"}, + {file = "lxml-6.0.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048"}, + {file = "lxml-6.0.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df"}, + {file = "lxml-6.0.2-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1"}, + {file = "lxml-6.0.2-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916"}, + {file = "lxml-6.0.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd"}, + {file = "lxml-6.0.2-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6"}, + {file = "lxml-6.0.2-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a"}, + {file = "lxml-6.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679"}, + {file = "lxml-6.0.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659"}, + {file = "lxml-6.0.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484"}, + {file = "lxml-6.0.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2"}, + {file = "lxml-6.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314"}, + {file = "lxml-6.0.2-cp313-cp313-win32.whl", hash = "sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2"}, + {file = "lxml-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7"}, + {file = "lxml-6.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf"}, + {file = "lxml-6.0.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:b0c732aa23de8f8aec23f4b580d1e52905ef468afb4abeafd3fec77042abb6fe"}, + {file = "lxml-6.0.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4468e3b83e10e0317a89a33d28f7aeba1caa4d1a6fd457d115dd4ffe90c5931d"}, + {file = "lxml-6.0.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d"}, + {file = "lxml-6.0.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5"}, + {file = "lxml-6.0.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0"}, + {file = "lxml-6.0.2-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba"}, + {file = "lxml-6.0.2-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0"}, + {file = "lxml-6.0.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d"}, + {file = "lxml-6.0.2-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37"}, + {file = "lxml-6.0.2-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9"}, + {file = "lxml-6.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917"}, + {file = "lxml-6.0.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f"}, + {file = "lxml-6.0.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8"}, + {file = "lxml-6.0.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a"}, + {file = "lxml-6.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c"}, + {file = "lxml-6.0.2-cp314-cp314-win32.whl", hash = "sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b"}, + {file = "lxml-6.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed"}, + {file = "lxml-6.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8"}, + {file = "lxml-6.0.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6162a86d86893d63084faaf4ff937b3daea233e3682fb4474db07395794fa80d"}, + {file = "lxml-6.0.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:414aaa94e974e23a3e92e7ca5b97d10c0cf37b6481f50911032c69eeb3991bba"}, + {file = "lxml-6.0.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601"}, + {file = "lxml-6.0.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed"}, + {file = "lxml-6.0.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37"}, + {file = "lxml-6.0.2-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338"}, + {file = "lxml-6.0.2-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9"}, + {file = "lxml-6.0.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd"}, + {file = "lxml-6.0.2-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d"}, + {file = "lxml-6.0.2-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9"}, + {file = "lxml-6.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e"}, + {file = "lxml-6.0.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d"}, + {file = "lxml-6.0.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec"}, + {file = "lxml-6.0.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272"}, + {file = "lxml-6.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f"}, + {file = "lxml-6.0.2-cp314-cp314t-win32.whl", hash = "sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312"}, + {file = "lxml-6.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca"}, + {file = "lxml-6.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c"}, + {file = "lxml-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a656ca105115f6b766bba324f23a67914d9c728dafec57638e2b92a9dcd76c62"}, + {file = "lxml-6.0.2-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c54d83a2188a10ebdba573f16bd97135d06c9ef60c3dc495315c7a28c80a263f"}, + {file = "lxml-6.0.2-cp38-cp38-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:1ea99340b3c729beea786f78c38f60f4795622f36e305d9c9be402201efdc3b7"}, + {file = "lxml-6.0.2-cp38-cp38-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:af85529ae8d2a453feee4c780d9406a5e3b17cee0dd75c18bd31adcd584debc3"}, + {file = "lxml-6.0.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:fe659f6b5d10fb5a17f00a50eb903eb277a71ee35df4615db573c069bcf967ac"}, + {file = "lxml-6.0.2-cp38-cp38-win32.whl", hash = "sha256:5921d924aa5468c939d95c9814fa9f9b5935a6ff4e679e26aaf2951f74043512"}, + {file = "lxml-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:0aa7070978f893954008ab73bb9e3c24a7c56c054e00566a21b553dc18105fca"}, + {file = "lxml-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2c8458c2cdd29589a8367c09c8f030f1d202be673f0ca224ec18590b3b9fb694"}, + {file = "lxml-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3fee0851639d06276e6b387f1c190eb9d7f06f7f53514e966b26bae46481ec90"}, + {file = "lxml-6.0.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b2142a376b40b6736dfc214fd2902409e9e3857eff554fed2d3c60f097e62a62"}, + {file = "lxml-6.0.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a6b5b39cc7e2998f968f05309e666103b53e2edd01df8dc51b90d734c0825444"}, + {file = "lxml-6.0.2-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4aec24d6b72ee457ec665344a29acb2d35937d5192faebe429ea02633151aad"}, + {file = "lxml-6.0.2-cp39-cp39-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:b42f4d86b451c2f9d06ffb4f8bbc776e04df3ba070b9fe2657804b1b40277c48"}, + {file = "lxml-6.0.2-cp39-cp39-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cdaefac66e8b8f30e37a9b4768a391e1f8a16a7526d5bc77a7928408ef68e93"}, + {file = "lxml-6.0.2-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:b738f7e648735714bbb82bdfd030203360cfeab7f6e8a34772b3c8c8b820568c"}, + {file = "lxml-6.0.2-cp39-cp39-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:daf42de090d59db025af61ce6bdb2521f0f102ea0e6ea310f13c17610a97da4c"}, + {file = "lxml-6.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:66328dabea70b5ba7e53d94aa774b733cf66686535f3bc9250a7aab53a91caaf"}, + {file = "lxml-6.0.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:e237b807d68a61fc3b1e845407e27e5eb8ef69bc93fe8505337c1acb4ee300b6"}, + {file = "lxml-6.0.2-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:ac02dc29fd397608f8eb15ac1610ae2f2f0154b03f631e6d724d9e2ad4ee2c84"}, + {file = "lxml-6.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:817ef43a0c0b4a77bd166dc9a09a555394105ff3374777ad41f453526e37f9cb"}, + {file = "lxml-6.0.2-cp39-cp39-win32.whl", hash = "sha256:bc532422ff26b304cfb62b328826bd995c96154ffd2bac4544f37dbb95ecaa8f"}, + {file = "lxml-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:995e783eb0374c120f528f807443ad5a83a656a8624c467ea73781fc5f8a8304"}, + {file = "lxml-6.0.2-cp39-cp39-win_arm64.whl", hash = "sha256:08b9d5e803c2e4725ae9e8559ee880e5328ed61aa0935244e0515d7d9dbec0aa"}, + {file = "lxml-6.0.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e748d4cf8fef2526bb2a589a417eba0c8674e29ffcb570ce2ceca44f1e567bf6"}, + {file = "lxml-6.0.2-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4ddb1049fa0579d0cbd00503ad8c58b9ab34d1254c77bc6a5576d96ec7853dba"}, + {file = "lxml-6.0.2-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cb233f9c95f83707dae461b12b720c1af9c28c2d19208e1be03387222151daf5"}, + {file = "lxml-6.0.2-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc456d04db0515ce3320d714a1eac7a97774ff0849e7718b492d957da4631dd4"}, + {file = "lxml-6.0.2-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2613e67de13d619fd283d58bda40bff0ee07739f624ffee8b13b631abf33083d"}, + {file = "lxml-6.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:24a8e756c982c001ca8d59e87c80c4d9dcd4d9b44a4cbeb8d9be4482c514d41d"}, + {file = "lxml-6.0.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1c06035eafa8404b5cf475bb37a9f6088b0aca288d4ccc9d69389750d5543700"}, + {file = "lxml-6.0.2-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c7d13103045de1bdd6fe5d61802565f1a3537d70cd3abf596aa0af62761921ee"}, + {file = "lxml-6.0.2-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a3c150a95fbe5ac91de323aa756219ef9cf7fde5a3f00e2281e30f33fa5fa4f"}, + {file = "lxml-6.0.2-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60fa43be34f78bebb27812ed90f1925ec99560b0fa1decdb7d12b84d857d31e9"}, + {file = "lxml-6.0.2-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:21c73b476d3cfe836be731225ec3421fa2f048d84f6df6a8e70433dff1376d5a"}, + {file = "lxml-6.0.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:27220da5be049e936c3aca06f174e8827ca6445a4353a1995584311487fc4e3e"}, + {file = "lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62"}, ] [package.extras] @@ -778,72 +843,100 @@ htmlsoup = ["BeautifulSoup4"] [[package]] name = "markupsafe" -version = "3.0.2" +version = "3.0.3" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" files = [ - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, - {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, + {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"}, + {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1"}, + {file = "markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa"}, + {file = "markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8"}, + {file = "markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1"}, + {file = "markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad"}, + {file = "markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a"}, + {file = "markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19"}, + {file = "markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01"}, + {file = "markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c"}, + {file = "markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e"}, + {file = "markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b"}, + {file = "markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d"}, + {file = "markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c"}, + {file = "markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f"}, + {file = "markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795"}, + {file = "markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12"}, + {file = "markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed"}, + {file = "markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5"}, + {file = "markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485"}, + {file = "markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73"}, + {file = "markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287"}, + {file = "markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe"}, + {file = "markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe"}, + {file = "markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9"}, + {file = "markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581"}, + {file = "markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4"}, + {file = "markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab"}, + {file = "markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa"}, + {file = "markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26"}, + {file = "markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d"}, + {file = "markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7"}, + {file = "markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e"}, + {file = "markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8"}, + {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"}, ] [[package]] @@ -905,13 +998,13 @@ files = [ [[package]] name = "nltk" -version = "3.9.1" +version = "3.9.2" description = "Natural Language Toolkit" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "nltk-3.9.1-py3-none-any.whl", hash = "sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1"}, - {file = "nltk-3.9.1.tar.gz", hash = "sha256:87d127bd3de4bd89a4f81265e5fa59cb1b199b27440175370f7417d2bc7ae868"}, + {file = "nltk-3.9.2-py3-none-any.whl", hash = "sha256:1e209d2b3009110635ed9709a67a1a3e33a10f799490fa71cf4bec218c11c88a"}, + {file = "nltk-3.9.2.tar.gz", hash = "sha256:0f409e9b069ca4177c1903c3e843eef90c7e92992fa4931ae607da6de49e1419"}, ] [package.dependencies] @@ -983,19 +1076,19 @@ files = [ ] [[package]] -name = "opencv-python" +name = "opencv-python-headless" version = "4.12.0.88" description = "Wrapper package for OpenCV python bindings." optional = false python-versions = ">=3.6" files = [ - {file = "opencv-python-4.12.0.88.tar.gz", hash = "sha256:8b738389cede219405f6f3880b851efa3415ccd674752219377353f017d2994d"}, - {file = "opencv_python-4.12.0.88-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:f9a1f08883257b95a5764bf517a32d75aec325319c8ed0f89739a57fae9e92a5"}, - {file = "opencv_python-4.12.0.88-cp37-abi3-macosx_13_0_x86_64.whl", hash = "sha256:812eb116ad2b4de43ee116fcd8991c3a687f099ada0b04e68f64899c09448e81"}, - {file = "opencv_python-4.12.0.88-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:51fd981c7df6af3e8f70b1556696b05224c4e6b6777bdd2a46b3d4fb09de1a92"}, - {file = "opencv_python-4.12.0.88-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:092c16da4c5a163a818f120c22c5e4a2f96e0db4f24e659c701f1fe629a690f9"}, - {file = "opencv_python-4.12.0.88-cp37-abi3-win32.whl", hash = "sha256:ff554d3f725b39878ac6a2e1fa232ec509c36130927afc18a1719ebf4fbf4357"}, - {file = "opencv_python-4.12.0.88-cp37-abi3-win_amd64.whl", hash = "sha256:d98edb20aa932fd8ebd276a72627dad9dc097695b3d435a4257557bbb49a79d2"}, + {file = "opencv-python-headless-4.12.0.88.tar.gz", hash = "sha256:cfdc017ddf2e59b6c2f53bc12d74b6b0be7ded4ec59083ea70763921af2b6c09"}, + {file = "opencv_python_headless-4.12.0.88-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:1e58d664809b3350c1123484dd441e1667cd7bed3086db1b9ea1b6f6cb20b50e"}, + {file = "opencv_python_headless-4.12.0.88-cp37-abi3-macosx_13_0_x86_64.whl", hash = "sha256:365bb2e486b50feffc2d07a405b953a8f3e8eaa63865bc650034e5c71e7a5154"}, + {file = "opencv_python_headless-4.12.0.88-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:aeb4b13ecb8b4a0beb2668ea07928160ea7c2cd2d9b5ef571bbee6bafe9cc8d0"}, + {file = "opencv_python_headless-4.12.0.88-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:236c8df54a90f4d02076e6f9c1cc763d794542e886c576a6fee46ec8ff75a7a9"}, + {file = "opencv_python_headless-4.12.0.88-cp37-abi3-win32.whl", hash = "sha256:fde2cf5c51e4def5f2132d78e0c08f9c14783cd67356922182c6845b9af87dbd"}, + {file = "opencv_python_headless-4.12.0.88-cp37-abi3-win_amd64.whl", hash = "sha256:86b413bdd6c6bf497832e346cd5371995de148e579b9774f8eba686dee3f5528"}, ] [package.dependencies] @@ -1014,53 +1107,66 @@ files = [ [[package]] name = "pandas" -version = "2.3.2" +version = "2.3.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" files = [ - {file = "pandas-2.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52bc29a946304c360561974c6542d1dd628ddafa69134a7131fdfd6a5d7a1a35"}, - {file = "pandas-2.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:220cc5c35ffaa764dd5bb17cf42df283b5cb7fdf49e10a7b053a06c9cb48ee2b"}, - {file = "pandas-2.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42c05e15111221384019897df20c6fe893b2f697d03c811ee67ec9e0bb5a3424"}, - {file = "pandas-2.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc03acc273c5515ab69f898df99d9d4f12c4d70dbfc24c3acc6203751d0804cf"}, - {file = "pandas-2.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d25c20a03e8870f6339bcf67281b946bd20b86f1a544ebbebb87e66a8d642cba"}, - {file = "pandas-2.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21bb612d148bb5860b7eb2c10faacf1a810799245afd342cf297d7551513fbb6"}, - {file = "pandas-2.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:b62d586eb25cb8cb70a5746a378fc3194cb7f11ea77170d59f889f5dfe3cec7a"}, - {file = "pandas-2.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1333e9c299adcbb68ee89a9bb568fc3f20f9cbb419f1dd5225071e6cddb2a743"}, - {file = "pandas-2.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:76972bcbd7de8e91ad5f0ca884a9f2c477a2125354af624e022c49e5bd0dfff4"}, - {file = "pandas-2.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b98bdd7c456a05eef7cd21fd6b29e3ca243591fe531c62be94a2cc987efb5ac2"}, - {file = "pandas-2.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d81573b3f7db40d020983f78721e9bfc425f411e616ef019a10ebf597aedb2e"}, - {file = "pandas-2.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e190b738675a73b581736cc8ec71ae113d6c3768d0bd18bffa5b9a0927b0b6ea"}, - {file = "pandas-2.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c253828cb08f47488d60f43c5fc95114c771bbfff085da54bfc79cb4f9e3a372"}, - {file = "pandas-2.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:9467697b8083f9667b212633ad6aa4ab32436dcbaf4cd57325debb0ddef2012f"}, - {file = "pandas-2.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fbb977f802156e7a3f829e9d1d5398f6192375a3e2d1a9ee0803e35fe70a2b9"}, - {file = "pandas-2.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b9b52693123dd234b7c985c68b709b0b009f4521000d0525f2b95c22f15944b"}, - {file = "pandas-2.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bd281310d4f412733f319a5bc552f86d62cddc5f51d2e392c8787335c994175"}, - {file = "pandas-2.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96d31a6b4354e3b9b8a2c848af75d31da390657e3ac6f30c05c82068b9ed79b9"}, - {file = "pandas-2.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:df4df0b9d02bb873a106971bb85d448378ef14b86ba96f035f50bbd3688456b4"}, - {file = "pandas-2.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:213a5adf93d020b74327cb2c1b842884dbdd37f895f42dcc2f09d451d949f811"}, - {file = "pandas-2.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c13b81a9347eb8c7548f53fd9a4f08d4dfe996836543f805c987bafa03317ae"}, - {file = "pandas-2.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0c6ecbac99a354a051ef21c5307601093cb9e0f4b1855984a084bfec9302699e"}, - {file = "pandas-2.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c6f048aa0fd080d6a06cc7e7537c09b53be6642d330ac6f54a600c3ace857ee9"}, - {file = "pandas-2.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0064187b80a5be6f2f9c9d6bdde29372468751dfa89f4211a3c5871854cfbf7a"}, - {file = "pandas-2.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ac8c320bded4718b298281339c1a50fb00a6ba78cb2a63521c39bec95b0209b"}, - {file = "pandas-2.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:114c2fe4f4328cf98ce5716d1532f3ab79c5919f95a9cfee81d9140064a2e4d6"}, - {file = "pandas-2.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:48fa91c4dfb3b2b9bfdb5c24cd3567575f4e13f9636810462ffed8925352be5a"}, - {file = "pandas-2.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:12d039facec710f7ba305786837d0225a3444af7bbd9c15c32ca2d40d157ed8b"}, - {file = "pandas-2.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c624b615ce97864eb588779ed4046186f967374185c047070545253a52ab2d57"}, - {file = "pandas-2.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0cee69d583b9b128823d9514171cabb6861e09409af805b54459bd0c821a35c2"}, - {file = "pandas-2.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2319656ed81124982900b4c37f0e0c58c015af9a7bbc62342ba5ad07ace82ba9"}, - {file = "pandas-2.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b37205ad6f00d52f16b6d09f406434ba928c1a1966e2771006a9033c736d30d2"}, - {file = "pandas-2.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:837248b4fc3a9b83b9c6214699a13f069dc13510a6a6d7f9ba33145d2841a012"}, - {file = "pandas-2.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d2c3554bd31b731cd6490d94a28f3abb8dd770634a9e06eb6d2911b9827db370"}, - {file = "pandas-2.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:88080a0ff8a55eac9c84e3ff3c7665b3b5476c6fbc484775ca1910ce1c3e0b87"}, - {file = "pandas-2.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d4a558c7620340a0931828d8065688b3cc5b4c8eb674bcaf33d18ff4a6870b4a"}, - {file = "pandas-2.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45178cf09d1858a1509dc73ec261bf5b25a625a389b65be2e47b559905f0ab6a"}, - {file = "pandas-2.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77cefe00e1b210f9c76c697fedd8fdb8d3dd86563e9c8adc9fa72b90f5e9e4c2"}, - {file = "pandas-2.3.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:13bd629c653856f00c53dc495191baa59bcafbbf54860a46ecc50d3a88421a96"}, - {file = "pandas-2.3.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:36d627906fd44b5fd63c943264e11e96e923f8de77d6016dc2f667b9ad193438"}, - {file = "pandas-2.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:a9d7ec92d71a420185dec44909c32e9a362248c4ae2238234b76d5be37f208cc"}, - {file = "pandas-2.3.2.tar.gz", hash = "sha256:ab7b58f8f82706890924ccdfb5f48002b83d2b5a3845976a9fb705d36c34dcdb"}, + {file = "pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c"}, + {file = "pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a"}, + {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1"}, + {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838"}, + {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250"}, + {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4"}, + {file = "pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826"}, + {file = "pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523"}, + {file = "pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45"}, + {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66"}, + {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b"}, + {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791"}, + {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151"}, + {file = "pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c"}, + {file = "pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53"}, + {file = "pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35"}, + {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908"}, + {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89"}, + {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98"}, + {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084"}, + {file = "pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b"}, + {file = "pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713"}, + {file = "pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8"}, + {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d"}, + {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac"}, + {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c"}, + {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493"}, + {file = "pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee"}, + {file = "pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5"}, + {file = "pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21"}, + {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78"}, + {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110"}, + {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86"}, + {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc"}, + {file = "pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0"}, + {file = "pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593"}, + {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c"}, + {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b"}, + {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6"}, + {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3"}, + {file = "pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5"}, + {file = "pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec"}, + {file = "pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7"}, + {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450"}, + {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5"}, + {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788"}, + {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87"}, + {file = "pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2"}, + {file = "pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8"}, + {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff"}, + {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29"}, + {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73"}, + {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9"}, + {file = "pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa"}, + {file = "pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b"}, ] [package.dependencies] @@ -1266,21 +1372,21 @@ testing = ["coverage", "pytest", "pytest-benchmark"] [[package]] name = "pydantic" -version = "2.11.9" +version = "2.12.4" description = "Data validation using Python type hints" optional = false python-versions = ">=3.9" files = [ - {file = "pydantic-2.11.9-py3-none-any.whl", hash = "sha256:c42dd626f5cfc1c6950ce6205ea58c93efa406da65f479dcb4029d5934857da2"}, - {file = "pydantic-2.11.9.tar.gz", hash = "sha256:6b8ffda597a14812a7975c90b82a8a2e777d9257aba3453f973acd3c032a18e2"}, + {file = "pydantic-2.12.4-py3-none-any.whl", hash = "sha256:92d3d202a745d46f9be6df459ac5a064fdaa3c1c4cd8adcfa332ccf3c05f871e"}, + {file = "pydantic-2.12.4.tar.gz", hash = "sha256:0f8cb9555000a4b5b617f66bfd2566264c4984b27589d3b845685983e8ea85ac"}, ] [package.dependencies] annotated-types = ">=0.6.0" email-validator = {version = ">=2.0.0", optional = true, markers = "extra == \"email\""} -pydantic-core = "2.33.2" -typing-extensions = ">=4.12.2" -typing-inspection = ">=0.4.0" +pydantic-core = "2.41.5" +typing-extensions = ">=4.14.1" +typing-inspection = ">=0.4.2" [package.extras] email = ["email-validator (>=2.0.0)"] @@ -1288,114 +1394,136 @@ timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.33.2" +version = "2.41.5" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.9" files = [ - {file = "pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8"}, - {file = "pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a"}, - {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac"}, - {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a"}, - {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b"}, - {file = "pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22"}, - {file = "pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640"}, - {file = "pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7"}, - {file = "pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e"}, - {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d"}, - {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30"}, - {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf"}, - {file = "pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51"}, - {file = "pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab"}, - {file = "pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65"}, - {file = "pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc"}, - {file = "pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b"}, - {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1"}, - {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6"}, - {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea"}, - {file = "pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290"}, - {file = "pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2"}, - {file = "pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab"}, - {file = "pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f"}, - {file = "pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56"}, - {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5"}, - {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e"}, - {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162"}, - {file = "pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849"}, - {file = "pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9"}, - {file = "pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9"}, - {file = "pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac"}, - {file = "pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5"}, - {file = "pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9"}, - {file = "pydantic_core-2.33.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a2b911a5b90e0374d03813674bf0a5fbbb7741570dcd4b4e85a2e48d17def29d"}, - {file = "pydantic_core-2.33.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6fa6dfc3e4d1f734a34710f391ae822e0a8eb8559a85c6979e14e65ee6ba2954"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e6116757f7959a712db11f3e9c0a99ade00a5bbedae83cb801985aa154f071b"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d55ab81c57b8ff8548c3e4947f119551253f4e3787a7bbc0b6b3ca47498a9d3"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c20c462aa4434b33a2661701b861604913f912254e441ab8d78d30485736115a"}, - {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44857c3227d3fb5e753d5fe4a3420d6376fa594b07b621e220cd93703fe21782"}, - {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:eb9b459ca4df0e5c87deb59d37377461a538852765293f9e6ee834f0435a93b9"}, - {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e"}, - {file = "pydantic_core-2.33.2-cp39-cp39-win32.whl", hash = "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9"}, - {file = "pydantic_core-2.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:87acbfcf8e90ca885206e98359d7dca4bcbb35abdc0ff66672a293e1d7a19101"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7f92c15cd1e97d4b12acd1cc9004fa092578acfa57b67ad5e43a197175d01a64"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3eb3fe62804e8f859c49ed20a8451342de53ed764150cb14ca71357c765dc2a6"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3abcd9392a36025e3bd55f9bd38d908bd17962cc49bc6da8e7e96285336e2bca"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3a1c81334778f9e3af2f8aeb7a960736e5cab1dfebfb26aabca09afd2906c039"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2807668ba86cb38c6817ad9bc66215ab8584d1d304030ce4f0887336f28a5e27"}, - {file = "pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc"}, + {file = "pydantic_core-2.41.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146"}, + {file = "pydantic_core-2.41.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c"}, + {file = "pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2"}, + {file = "pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556"}, + {file = "pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49"}, + {file = "pydantic_core-2.41.5-cp310-cp310-win32.whl", hash = "sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba"}, + {file = "pydantic_core-2.41.5-cp310-cp310-win_amd64.whl", hash = "sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9"}, + {file = "pydantic_core-2.41.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6"}, + {file = "pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284"}, + {file = "pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594"}, + {file = "pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e"}, + {file = "pydantic_core-2.41.5-cp311-cp311-win32.whl", hash = "sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-win_amd64.whl", hash = "sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe"}, + {file = "pydantic_core-2.41.5-cp311-cp311-win_arm64.whl", hash = "sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f"}, + {file = "pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7"}, + {file = "pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3"}, + {file = "pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9"}, + {file = "pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d"}, + {file = "pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740"}, + {file = "pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e"}, + {file = "pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858"}, + {file = "pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36"}, + {file = "pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11"}, + {file = "pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd"}, + {file = "pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a"}, + {file = "pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553"}, + {file = "pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90"}, + {file = "pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07"}, + {file = "pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb"}, + {file = "pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23"}, + {file = "pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf"}, + {file = "pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008"}, + {file = "pydantic_core-2.41.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf"}, + {file = "pydantic_core-2.41.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425"}, + {file = "pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504"}, + {file = "pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5"}, + {file = "pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3"}, + {file = "pydantic_core-2.41.5-cp39-cp39-win32.whl", hash = "sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460"}, + {file = "pydantic_core-2.41.5-cp39-cp39-win_amd64.whl", hash = "sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51"}, + {file = "pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e"}, ] [package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" +typing-extensions = ">=4.14.1" [[package]] name = "pyjwt" @@ -1468,6 +1596,20 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "pytokens" +version = "0.3.0" +description = "A Fast, spec compliant Python 3.14+ tokenizer that runs on older Pythons." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytokens-0.3.0-py3-none-any.whl", hash = "sha256:95b2b5eaf832e469d141a378872480ede3f251a5a5041b8ec6e581d3ac71bbf3"}, + {file = "pytokens-0.3.0.tar.gz", hash = "sha256:2f932b14ed08de5fcf0b391ace2642f858f1394c0857202959000b68ed7a458a"}, +] + +[package.extras] +dev = ["black", "build", "mypy", "pytest", "pytest-cov", "setuptools", "tox", "twine", "wheel"] + [[package]] name = "pytz" version = "2025.2" @@ -1481,64 +1623,84 @@ files = [ [[package]] name = "pyyaml" -version = "6.0.2" +version = "6.0.3" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" files = [ - {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, - {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, - {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, - {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, - {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, - {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, - {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, - {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, - {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, - {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, - {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, - {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, - {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, - {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, - {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, - {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, - {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, + {file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6"}, + {file = "PyYAML-6.0.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369"}, + {file = "PyYAML-6.0.3-cp38-cp38-win32.whl", hash = "sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295"}, + {file = "PyYAML-6.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b"}, + {file = "pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b"}, + {file = "pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b"}, + {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0"}, + {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69"}, + {file = "pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e"}, + {file = "pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c"}, + {file = "pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e"}, + {file = "pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d"}, + {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a"}, + {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4"}, + {file = "pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b"}, + {file = "pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea"}, + {file = "pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd"}, + {file = "pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8"}, + {file = "pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6"}, + {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6"}, + {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be"}, + {file = "pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26"}, + {file = "pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c"}, + {file = "pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb"}, + {file = "pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac"}, + {file = "pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5"}, + {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764"}, + {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35"}, + {file = "pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac"}, + {file = "pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3"}, + {file = "pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3"}, + {file = "pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c"}, + {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065"}, + {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65"}, + {file = "pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9"}, + {file = "pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b"}, + {file = "pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da"}, + {file = "pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a"}, + {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926"}, + {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7"}, + {file = "pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0"}, + {file = "pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007"}, + {file = "pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"}, ] [[package]] @@ -1559,98 +1721,126 @@ typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} [[package]] name = "regex" -version = "2025.9.1" +version = "2025.11.3" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.9" files = [ - {file = "regex-2025.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5aa2a6a73bf218515484b36a0d20c6ad9dc63f6339ff6224147b0e2c095ee55"}, - {file = "regex-2025.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c2ff5c01d5e47ad5fc9d31bcd61e78c2fa0068ed00cab86b7320214446da766"}, - {file = "regex-2025.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d49dc84e796b666181de8a9973284cad6616335f01b52bf099643253094920fc"}, - {file = "regex-2025.9.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9914fe1040874f83c15fcea86d94ea54091b0666eab330aaab69e30d106aabe"}, - {file = "regex-2025.9.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e71bceb3947362ec5eabd2ca0870bb78eae4edfc60c6c21495133c01b6cd2df4"}, - {file = "regex-2025.9.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:67a74456f410fe5e869239ee7a5423510fe5121549af133809d9591a8075893f"}, - {file = "regex-2025.9.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c3b96ed0223b32dbdc53a83149b6de7ca3acd5acd9c8e64b42a166228abe29c"}, - {file = "regex-2025.9.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:113d5aa950f428faf46fd77d452df62ebb4cc6531cb619f6cc30a369d326bfbd"}, - {file = "regex-2025.9.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fcdeb38de4f7f3d69d798f4f371189061446792a84e7c92b50054c87aae9c07c"}, - {file = "regex-2025.9.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4bcdff370509164b67a6c8ec23c9fb40797b72a014766fdc159bb809bd74f7d8"}, - {file = "regex-2025.9.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:7383efdf6e8e8c61d85e00cfb2e2e18da1a621b8bfb4b0f1c2747db57b942b8f"}, - {file = "regex-2025.9.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1ec2bd3bdf0f73f7e9f48dca550ba7d973692d5e5e9a90ac42cc5f16c4432d8b"}, - {file = "regex-2025.9.1-cp310-cp310-win32.whl", hash = "sha256:9627e887116c4e9c0986d5c3b4f52bcfe3df09850b704f62ec3cbf177a0ae374"}, - {file = "regex-2025.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:94533e32dc0065eca43912ee6649c90ea0681d59f56d43c45b5bcda9a740b3dd"}, - {file = "regex-2025.9.1-cp310-cp310-win_arm64.whl", hash = "sha256:a874a61bb580d48642ffd338570ee24ab13fa023779190513fcacad104a6e251"}, - {file = "regex-2025.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e5bcf112b09bfd3646e4db6bf2e598534a17d502b0c01ea6550ba4eca780c5e6"}, - {file = "regex-2025.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:67a0295a3c31d675a9ee0238d20238ff10a9a2fdb7a1323c798fc7029578b15c"}, - {file = "regex-2025.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea8267fbadc7d4bd7c1301a50e85c2ff0de293ff9452a1a9f8d82c6cafe38179"}, - {file = "regex-2025.9.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6aeff21de7214d15e928fb5ce757f9495214367ba62875100d4c18d293750cc1"}, - {file = "regex-2025.9.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d89f1bbbbbc0885e1c230f7770d5e98f4f00b0ee85688c871d10df8b184a6323"}, - {file = "regex-2025.9.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ca3affe8ddea498ba9d294ab05f5f2d3b5ad5d515bc0d4a9016dd592a03afe52"}, - {file = "regex-2025.9.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:91892a7a9f0a980e4c2c85dd19bc14de2b219a3a8867c4b5664b9f972dcc0c78"}, - {file = "regex-2025.9.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e1cb40406f4ae862710615f9f636c1e030fd6e6abe0e0f65f6a695a2721440c6"}, - {file = "regex-2025.9.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:94f6cff6f7e2149c7e6499a6ecd4695379eeda8ccbccb9726e8149f2fe382e92"}, - {file = "regex-2025.9.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6c0226fb322b82709e78c49cc33484206647f8a39954d7e9de1567f5399becd0"}, - {file = "regex-2025.9.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a12f59c7c380b4fcf7516e9cbb126f95b7a9518902bcf4a852423ff1dcd03e6a"}, - {file = "regex-2025.9.1-cp311-cp311-win32.whl", hash = "sha256:49865e78d147a7a4f143064488da5d549be6bfc3f2579e5044cac61f5c92edd4"}, - {file = "regex-2025.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:d34b901f6f2f02ef60f4ad3855d3a02378c65b094efc4b80388a3aeb700a5de7"}, - {file = "regex-2025.9.1-cp311-cp311-win_arm64.whl", hash = "sha256:47d7c2dab7e0b95b95fd580087b6ae196039d62306a592fa4e162e49004b6299"}, - {file = "regex-2025.9.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:84a25164bd8dcfa9f11c53f561ae9766e506e580b70279d05a7946510bdd6f6a"}, - {file = "regex-2025.9.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:645e88a73861c64c1af558dd12294fb4e67b5c1eae0096a60d7d8a2143a611c7"}, - {file = "regex-2025.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:10a450cba5cd5409526ee1d4449f42aad38dd83ac6948cbd6d7f71ca7018f7db"}, - {file = "regex-2025.9.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9dc5991592933a4192c166eeb67b29d9234f9c86344481173d1bc52f73a7104"}, - {file = "regex-2025.9.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a32291add816961aab472f4fad344c92871a2ee33c6c219b6598e98c1f0108f2"}, - {file = "regex-2025.9.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:588c161a68a383478e27442a678e3b197b13c5ba51dbba40c1ccb8c4c7bee9e9"}, - {file = "regex-2025.9.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47829ffaf652f30d579534da9085fe30c171fa2a6744a93d52ef7195dc38218b"}, - {file = "regex-2025.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e978e5a35b293ea43f140c92a3269b6ab13fe0a2bf8a881f7ac740f5a6ade85"}, - {file = "regex-2025.9.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4cf09903e72411f4bf3ac1eddd624ecfd423f14b2e4bf1c8b547b72f248b7bf7"}, - {file = "regex-2025.9.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d016b0f77be63e49613c9e26aaf4a242f196cd3d7a4f15898f5f0ab55c9b24d2"}, - {file = "regex-2025.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:656563e620de6908cd1c9d4f7b9e0777e3341ca7db9d4383bcaa44709c90281e"}, - {file = "regex-2025.9.1-cp312-cp312-win32.whl", hash = "sha256:df33f4ef07b68f7ab637b1dbd70accbf42ef0021c201660656601e8a9835de45"}, - {file = "regex-2025.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:5aba22dfbc60cda7c0853516104724dc904caa2db55f2c3e6e984eb858d3edf3"}, - {file = "regex-2025.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:ec1efb4c25e1849c2685fa95da44bfde1b28c62d356f9c8d861d4dad89ed56e9"}, - {file = "regex-2025.9.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bc6834727d1b98d710a63e6c823edf6ffbf5792eba35d3fa119531349d4142ef"}, - {file = "regex-2025.9.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c3dc05b6d579875719bccc5f3037b4dc80433d64e94681a0061845bd8863c025"}, - {file = "regex-2025.9.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:22213527df4c985ec4a729b055a8306272d41d2f45908d7bacb79be0fa7a75ad"}, - {file = "regex-2025.9.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8e3f6e3c5a5a1adc3f7ea1b5aec89abfc2f4fbfba55dafb4343cd1d084f715b2"}, - {file = "regex-2025.9.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bcb89c02a0d6c2bec9b0bb2d8c78782699afe8434493bfa6b4021cc51503f249"}, - {file = "regex-2025.9.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b0e2f95413eb0c651cd1516a670036315b91b71767af83bc8525350d4375ccba"}, - {file = "regex-2025.9.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:09a41dc039e1c97d3c2ed3e26523f748e58c4de3ea7a31f95e1cf9ff973fff5a"}, - {file = "regex-2025.9.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f0b4258b161094f66857a26ee938d3fe7b8a5063861e44571215c44fbf0e5df"}, - {file = "regex-2025.9.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bf70e18ac390e6977ea7e56f921768002cb0fa359c4199606c7219854ae332e0"}, - {file = "regex-2025.9.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b84036511e1d2bb0a4ff1aec26951caa2dea8772b223c9e8a19ed8885b32dbac"}, - {file = "regex-2025.9.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c2e05dcdfe224047f2a59e70408274c325d019aad96227ab959403ba7d58d2d7"}, - {file = "regex-2025.9.1-cp313-cp313-win32.whl", hash = "sha256:3b9a62107a7441b81ca98261808fed30ae36ba06c8b7ee435308806bd53c1ed8"}, - {file = "regex-2025.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:b38afecc10c177eb34cfae68d669d5161880849ba70c05cbfbe409f08cc939d7"}, - {file = "regex-2025.9.1-cp313-cp313-win_arm64.whl", hash = "sha256:ec329890ad5e7ed9fc292858554d28d58d56bf62cf964faf0aa57964b21155a0"}, - {file = "regex-2025.9.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:72fb7a016467d364546f22b5ae86c45680a4e0de6b2a6f67441d22172ff641f1"}, - {file = "regex-2025.9.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c9527fa74eba53f98ad86be2ba003b3ebe97e94b6eb2b916b31b5f055622ef03"}, - {file = "regex-2025.9.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c905d925d194c83a63f92422af7544ec188301451b292c8b487f0543726107ca"}, - {file = "regex-2025.9.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:74df7c74a63adcad314426b1f4ea6054a5ab25d05b0244f0c07ff9ce640fa597"}, - {file = "regex-2025.9.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4f6e935e98ea48c7a2e8be44494de337b57a204470e7f9c9c42f912c414cd6f5"}, - {file = "regex-2025.9.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4a62d033cd9ebefc7c5e466731a508dfabee827d80b13f455de68a50d3c2543d"}, - {file = "regex-2025.9.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef971ebf2b93bdc88d8337238be4dfb851cc97ed6808eb04870ef67589415171"}, - {file = "regex-2025.9.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d936a1db208bdca0eca1f2bb2c1ba1d8370b226785c1e6db76e32a228ffd0ad5"}, - {file = "regex-2025.9.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:7e786d9e4469698fc63815b8de08a89165a0aa851720eb99f5e0ea9d51dd2b6a"}, - {file = "regex-2025.9.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6b81d7dbc5466ad2c57ce3a0ddb717858fe1a29535c8866f8514d785fdb9fc5b"}, - {file = "regex-2025.9.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cd4890e184a6feb0ef195338a6ce68906a8903a0f2eb7e0ab727dbc0a3156273"}, - {file = "regex-2025.9.1-cp314-cp314-win32.whl", hash = "sha256:34679a86230e46164c9e0396b56cab13c0505972343880b9e705083cc5b8ec86"}, - {file = "regex-2025.9.1-cp314-cp314-win_amd64.whl", hash = "sha256:a1196e530a6bfa5f4bde029ac5b0295a6ecfaaffbfffede4bbaf4061d9455b70"}, - {file = "regex-2025.9.1-cp314-cp314-win_arm64.whl", hash = "sha256:f46d525934871ea772930e997d577d48c6983e50f206ff7b66d4ac5f8941e993"}, - {file = "regex-2025.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a13d20007dce3c4b00af5d84f6c191ed1c0f70928c6d9b6cd7b8d2f125df7f46"}, - {file = "regex-2025.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d6b046b0a01cb713fd53ef36cb59db4b0062b343db28e83b52ac6aa01ee5b368"}, - {file = "regex-2025.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0fa9a7477288717f42dbd02ff5d13057549e9a8cdb81f224c313154cc10bab52"}, - {file = "regex-2025.9.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2b3ad150c6bc01a8cd5030040675060e2adbe6cbc50aadc4da42c6d32ec266e"}, - {file = "regex-2025.9.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:aa88d5a82dfe80deaf04e8c39c8b0ad166d5d527097eb9431cb932c44bf88715"}, - {file = "regex-2025.9.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6f1dae2cf6c2dbc6fd2526653692c144721b3cf3f769d2a3c3aa44d0f38b9a58"}, - {file = "regex-2025.9.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ff62a3022914fc19adaa76b65e03cf62bc67ea16326cbbeb170d280710a7d719"}, - {file = "regex-2025.9.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a34ef82216189d823bc82f614d1031cb0b919abef27cecfd7b07d1e9a8bdeeb4"}, - {file = "regex-2025.9.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6d40e6b49daae9ebbd7fa4e600697372cba85b826592408600068e83a3c47211"}, - {file = "regex-2025.9.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:0aeb0fe80331059c152a002142699a89bf3e44352aee28261315df0c9874759b"}, - {file = "regex-2025.9.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a90014d29cb3098403d82a879105d1418edbbdf948540297435ea6e377023ea7"}, - {file = "regex-2025.9.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6ff623271e0b0cc5a95b802666bbd70f17ddd641582d65b10fb260cc0c003529"}, - {file = "regex-2025.9.1-cp39-cp39-win32.whl", hash = "sha256:d161bfdeabe236290adfd8c7588da7f835d67e9e7bf2945f1e9e120622839ba6"}, - {file = "regex-2025.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:43ebc77a7dfe36661192afd8d7df5e8be81ec32d2ad0c65b536f66ebfec3dece"}, - {file = "regex-2025.9.1-cp39-cp39-win_arm64.whl", hash = "sha256:5d74b557cf5554001a869cda60b9a619be307df4d10155894aeaad3ee67c9899"}, - {file = "regex-2025.9.1.tar.gz", hash = "sha256:88ac07b38d20b54d79e704e38aa3bd2c0f8027432164226bdee201a1c0c9c9ff"}, + {file = "regex-2025.11.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2b441a4ae2c8049106e8b39973bfbddfb25a179dda2bdb99b0eeb60c40a6a3af"}, + {file = "regex-2025.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2fa2eed3f76677777345d2f81ee89f5de2f5745910e805f7af7386a920fa7313"}, + {file = "regex-2025.11.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8b4a27eebd684319bdf473d39f1d79eed36bf2cd34bd4465cdb4618d82b3d56"}, + {file = "regex-2025.11.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cf77eac15bd264986c4a2c63353212c095b40f3affb2bc6b4ef80c4776c1a28"}, + {file = "regex-2025.11.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b7f9ee819f94c6abfa56ec7b1dbab586f41ebbdc0a57e6524bd5e7f487a878c7"}, + {file = "regex-2025.11.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:838441333bc90b829406d4a03cb4b8bf7656231b84358628b0406d803931ef32"}, + {file = "regex-2025.11.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cfe6d3f0c9e3b7e8c0c694b24d25e677776f5ca26dce46fd6b0489f9c8339391"}, + {file = "regex-2025.11.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2ab815eb8a96379a27c3b6157fcb127c8f59c36f043c1678110cea492868f1d5"}, + {file = "regex-2025.11.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:728a9d2d173a65b62bdc380b7932dd8e74ed4295279a8fe1021204ce210803e7"}, + {file = "regex-2025.11.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:509dc827f89c15c66a0c216331260d777dd6c81e9a4e4f830e662b0bb296c313"}, + {file = "regex-2025.11.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:849202cd789e5f3cf5dcc7822c34b502181b4824a65ff20ce82da5524e45e8e9"}, + {file = "regex-2025.11.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b6f78f98741dcc89607c16b1e9426ee46ce4bf31ac5e6b0d40e81c89f3481ea5"}, + {file = "regex-2025.11.3-cp310-cp310-win32.whl", hash = "sha256:149eb0bba95231fb4f6d37c8f760ec9fa6fabf65bab555e128dde5f2475193ec"}, + {file = "regex-2025.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:ee3a83ce492074c35a74cc76cf8235d49e77b757193a5365ff86e3f2f93db9fd"}, + {file = "regex-2025.11.3-cp310-cp310-win_arm64.whl", hash = "sha256:38af559ad934a7b35147716655d4a2f79fcef2d695ddfe06a06ba40ae631fa7e"}, + {file = "regex-2025.11.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eadade04221641516fa25139273505a1c19f9bf97589a05bc4cfcd8b4a618031"}, + {file = "regex-2025.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:feff9e54ec0dd3833d659257f5c3f5322a12eee58ffa360984b716f8b92983f4"}, + {file = "regex-2025.11.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3b30bc921d50365775c09a7ed446359e5c0179e9e2512beec4a60cbcef6ddd50"}, + {file = "regex-2025.11.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f99be08cfead2020c7ca6e396c13543baea32343b7a9a5780c462e323bd8872f"}, + {file = "regex-2025.11.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6dd329a1b61c0ee95ba95385fb0c07ea0d3fe1a21e1349fa2bec272636217118"}, + {file = "regex-2025.11.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4c5238d32f3c5269d9e87be0cf096437b7622b6920f5eac4fd202468aaeb34d2"}, + {file = "regex-2025.11.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10483eefbfb0adb18ee9474498c9a32fcf4e594fbca0543bb94c48bac6183e2e"}, + {file = "regex-2025.11.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:78c2d02bb6e1da0720eedc0bad578049cad3f71050ef8cd065ecc87691bed2b0"}, + {file = "regex-2025.11.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e6b49cd2aad93a1790ce9cffb18964f6d3a4b0b3dbdbd5de094b65296fce6e58"}, + {file = "regex-2025.11.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:885b26aa3ee56433b630502dc3d36ba78d186a00cc535d3806e6bfd9ed3c70ab"}, + {file = "regex-2025.11.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ddd76a9f58e6a00f8772e72cff8ebcff78e022be95edf018766707c730593e1e"}, + {file = "regex-2025.11.3-cp311-cp311-win32.whl", hash = "sha256:3e816cc9aac1cd3cc9a4ec4d860f06d40f994b5c7b4d03b93345f44e08cc68bf"}, + {file = "regex-2025.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:087511f5c8b7dfbe3a03f5d5ad0c2a33861b1fc387f21f6f60825a44865a385a"}, + {file = "regex-2025.11.3-cp311-cp311-win_arm64.whl", hash = "sha256:1ff0d190c7f68ae7769cd0313fe45820ba07ffebfddfaa89cc1eb70827ba0ddc"}, + {file = "regex-2025.11.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bc8ab71e2e31b16e40868a40a69007bc305e1109bd4658eb6cad007e0bf67c41"}, + {file = "regex-2025.11.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:22b29dda7e1f7062a52359fca6e58e548e28c6686f205e780b02ad8ef710de36"}, + {file = "regex-2025.11.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3a91e4a29938bc1a082cc28fdea44be420bf2bebe2665343029723892eb073e1"}, + {file = "regex-2025.11.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08b884f4226602ad40c5d55f52bf91a9df30f513864e0054bad40c0e9cf1afb7"}, + {file = "regex-2025.11.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3e0b11b2b2433d1c39c7c7a30e3f3d0aeeea44c2a8d0bae28f6b95f639927a69"}, + {file = "regex-2025.11.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:87eb52a81ef58c7ba4d45c3ca74e12aa4b4e77816f72ca25258a85b3ea96cb48"}, + {file = "regex-2025.11.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a12ab1f5c29b4e93db518f5e3872116b7e9b1646c9f9f426f777b50d44a09e8c"}, + {file = "regex-2025.11.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7521684c8c7c4f6e88e35ec89680ee1aa8358d3f09d27dfbdf62c446f5d4c695"}, + {file = "regex-2025.11.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7fe6e5440584e94cc4b3f5f4d98a25e29ca12dccf8873679a635638349831b98"}, + {file = "regex-2025.11.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:8e026094aa12b43f4fd74576714e987803a315c76edb6b098b9809db5de58f74"}, + {file = "regex-2025.11.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:435bbad13e57eb5606a68443af62bed3556de2f46deb9f7d4237bc2f1c9fb3a0"}, + {file = "regex-2025.11.3-cp312-cp312-win32.whl", hash = "sha256:3839967cf4dc4b985e1570fd8d91078f0c519f30491c60f9ac42a8db039be204"}, + {file = "regex-2025.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:e721d1b46e25c481dc5ded6f4b3f66c897c58d2e8cfdf77bbced84339108b0b9"}, + {file = "regex-2025.11.3-cp312-cp312-win_arm64.whl", hash = "sha256:64350685ff08b1d3a6fff33f45a9ca183dc1d58bbfe4981604e70ec9801bbc26"}, + {file = "regex-2025.11.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c1e448051717a334891f2b9a620fe36776ebf3dd8ec46a0b877c8ae69575feb4"}, + {file = "regex-2025.11.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9b5aca4d5dfd7fbfbfbdaf44850fcc7709a01146a797536a8f84952e940cca76"}, + {file = "regex-2025.11.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:04d2765516395cf7dda331a244a3282c0f5ae96075f728629287dfa6f76ba70a"}, + {file = "regex-2025.11.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d9903ca42bfeec4cebedba8022a7c97ad2aab22e09573ce9976ba01b65e4361"}, + {file = "regex-2025.11.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:639431bdc89d6429f6721625e8129413980ccd62e9d3f496be618a41d205f160"}, + {file = "regex-2025.11.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f117efad42068f9715677c8523ed2be1518116d1c49b1dd17987716695181efe"}, + {file = "regex-2025.11.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4aecb6f461316adf9f1f0f6a4a1a3d79e045f9b71ec76055a791affa3b285850"}, + {file = "regex-2025.11.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3b3a5f320136873cc5561098dfab677eea139521cb9a9e8db98b7e64aef44cbc"}, + {file = "regex-2025.11.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:75fa6f0056e7efb1f42a1c34e58be24072cb9e61a601340cc1196ae92326a4f9"}, + {file = "regex-2025.11.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:dbe6095001465294f13f1adcd3311e50dd84e5a71525f20a10bd16689c61ce0b"}, + {file = "regex-2025.11.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:454d9b4ae7881afbc25015b8627c16d88a597479b9dea82b8c6e7e2e07240dc7"}, + {file = "regex-2025.11.3-cp313-cp313-win32.whl", hash = "sha256:28ba4d69171fc6e9896337d4fc63a43660002b7da53fc15ac992abcf3410917c"}, + {file = "regex-2025.11.3-cp313-cp313-win_amd64.whl", hash = "sha256:bac4200befe50c670c405dc33af26dad5a3b6b255dd6c000d92fe4629f9ed6a5"}, + {file = "regex-2025.11.3-cp313-cp313-win_arm64.whl", hash = "sha256:2292cd5a90dab247f9abe892ac584cb24f0f54680c73fcb4a7493c66c2bf2467"}, + {file = "regex-2025.11.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:1eb1ebf6822b756c723e09f5186473d93236c06c579d2cc0671a722d2ab14281"}, + {file = "regex-2025.11.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1e00ec2970aab10dc5db34af535f21fcf32b4a31d99e34963419636e2f85ae39"}, + {file = "regex-2025.11.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a4cb042b615245d5ff9b3794f56be4138b5adc35a4166014d31d1814744148c7"}, + {file = "regex-2025.11.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44f264d4bf02f3176467d90b294d59bf1db9fe53c141ff772f27a8b456b2a9ed"}, + {file = "regex-2025.11.3-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7be0277469bf3bd7a34a9c57c1b6a724532a0d235cd0dc4e7f4316f982c28b19"}, + {file = "regex-2025.11.3-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0d31e08426ff4b5b650f68839f5af51a92a5b51abd8554a60c2fbc7c71f25d0b"}, + {file = "regex-2025.11.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e43586ce5bd28f9f285a6e729466841368c4a0353f6fd08d4ce4630843d3648a"}, + {file = "regex-2025.11.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0f9397d561a4c16829d4e6ff75202c1c08b68a3bdbfe29dbfcdb31c9830907c6"}, + {file = "regex-2025.11.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:dd16e78eb18ffdb25ee33a0682d17912e8cc8a770e885aeee95020046128f1ce"}, + {file = "regex-2025.11.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:ffcca5b9efe948ba0661e9df0fa50d2bc4b097c70b9810212d6b62f05d83b2dd"}, + {file = "regex-2025.11.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c56b4d162ca2b43318ac671c65bd4d563e841a694ac70e1a976ac38fcf4ca1d2"}, + {file = "regex-2025.11.3-cp313-cp313t-win32.whl", hash = "sha256:9ddc42e68114e161e51e272f667d640f97e84a2b9ef14b7477c53aac20c2d59a"}, + {file = "regex-2025.11.3-cp313-cp313t-win_amd64.whl", hash = "sha256:7a7c7fdf755032ffdd72c77e3d8096bdcb0eb92e89e17571a196f03d88b11b3c"}, + {file = "regex-2025.11.3-cp313-cp313t-win_arm64.whl", hash = "sha256:df9eb838c44f570283712e7cff14c16329a9f0fb19ca492d21d4b7528ee6821e"}, + {file = "regex-2025.11.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:9697a52e57576c83139d7c6f213d64485d3df5bf84807c35fa409e6c970801c6"}, + {file = "regex-2025.11.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e18bc3f73bd41243c9b38a6d9f2366cd0e0137a9aebe2d8ff76c5b67d4c0a3f4"}, + {file = "regex-2025.11.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:61a08bcb0ec14ff4e0ed2044aad948d0659604f824cbd50b55e30b0ec6f09c73"}, + {file = "regex-2025.11.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9c30003b9347c24bcc210958c5d167b9e4f9be786cb380a7d32f14f9b84674f"}, + {file = "regex-2025.11.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4e1e592789704459900728d88d41a46fe3969b82ab62945560a31732ffc19a6d"}, + {file = "regex-2025.11.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6538241f45eb5a25aa575dbba1069ad786f68a4f2773a29a2bd3dd1f9de787be"}, + {file = "regex-2025.11.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce22519c989bb72a7e6b36a199384c53db7722fe669ba891da75907fe3587db"}, + {file = "regex-2025.11.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:66d559b21d3640203ab9075797a55165d79017520685fb407b9234d72ab63c62"}, + {file = "regex-2025.11.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:669dcfb2e38f9e8c69507bace46f4889e3abbfd9b0c29719202883c0a603598f"}, + {file = "regex-2025.11.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:32f74f35ff0f25a5021373ac61442edcb150731fbaa28286bbc8bb1582c89d02"}, + {file = "regex-2025.11.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e6c7a21dffba883234baefe91bc3388e629779582038f75d2a5be918e250f0ed"}, + {file = "regex-2025.11.3-cp314-cp314-win32.whl", hash = "sha256:795ea137b1d809eb6836b43748b12634291c0ed55ad50a7d72d21edf1cd565c4"}, + {file = "regex-2025.11.3-cp314-cp314-win_amd64.whl", hash = "sha256:9f95fbaa0ee1610ec0fc6b26668e9917a582ba80c52cc6d9ada15e30aa9ab9ad"}, + {file = "regex-2025.11.3-cp314-cp314-win_arm64.whl", hash = "sha256:dfec44d532be4c07088c3de2876130ff0fbeeacaa89a137decbbb5f665855a0f"}, + {file = "regex-2025.11.3-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:ba0d8a5d7f04f73ee7d01d974d47c5834f8a1b0224390e4fe7c12a3a92a78ecc"}, + {file = "regex-2025.11.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:442d86cf1cfe4faabf97db7d901ef58347efd004934da045c745e7b5bd57ac49"}, + {file = "regex-2025.11.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:fd0a5e563c756de210bb964789b5abe4f114dacae9104a47e1a649b910361536"}, + {file = "regex-2025.11.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf3490bcbb985a1ae97b2ce9ad1c0f06a852d5b19dde9b07bdf25bf224248c95"}, + {file = "regex-2025.11.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3809988f0a8b8c9dcc0f92478d6501fac7200b9ec56aecf0ec21f4a2ec4b6009"}, + {file = "regex-2025.11.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f4ff94e58e84aedb9c9fce66d4ef9f27a190285b451420f297c9a09f2b9abee9"}, + {file = "regex-2025.11.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eb542fd347ce61e1321b0a6b945d5701528dca0cd9759c2e3bb8bd57e47964d"}, + {file = "regex-2025.11.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d6c2d5919075a1f2e413c00b056ea0c2f065b3f5fe83c3d07d325ab92dce51d6"}, + {file = "regex-2025.11.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:3f8bf11a4827cc7ce5a53d4ef6cddd5ad25595d3c1435ef08f76825851343154"}, + {file = "regex-2025.11.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:22c12d837298651e5550ac1d964e4ff57c3f56965fc1812c90c9fb2028eaf267"}, + {file = "regex-2025.11.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ba394a3dda9ad41c7c780f60f6e4a70988741415ae96f6d1bf6c239cf01379"}, + {file = "regex-2025.11.3-cp314-cp314t-win32.whl", hash = "sha256:4bf146dca15cdd53224a1bf46d628bd7590e4a07fbb69e720d561aea43a32b38"}, + {file = "regex-2025.11.3-cp314-cp314t-win_amd64.whl", hash = "sha256:adad1a1bcf1c9e76346e091d22d23ac54ef28e1365117d99521631078dfec9de"}, + {file = "regex-2025.11.3-cp314-cp314t-win_arm64.whl", hash = "sha256:c54f768482cef41e219720013cd05933b6f971d9562544d691c68699bf2b6801"}, + {file = "regex-2025.11.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:81519e25707fc076978c6143b81ea3dc853f176895af05bf7ec51effe818aeec"}, + {file = "regex-2025.11.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3bf28b1873a8af8bbb58c26cc56ea6e534d80053b41fb511a35795b6de507e6a"}, + {file = "regex-2025.11.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:856a25c73b697f2ce2a24e7968285579e62577a048526161a2c0f53090bea9f9"}, + {file = "regex-2025.11.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a3d571bd95fade53c86c0517f859477ff3a93c3fde10c9e669086f038e0f207"}, + {file = "regex-2025.11.3-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:732aea6de26051af97b94bc98ed86448821f839d058e5d259c72bf6d73ad0fc0"}, + {file = "regex-2025.11.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:51c1c1847128238f54930edb8805b660305dca164645a9fd29243f5610beea34"}, + {file = "regex-2025.11.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22dd622a402aad4558277305350699b2be14bc59f64d64ae1d928ce7d072dced"}, + {file = "regex-2025.11.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f3b5a391c7597ffa96b41bd5cbd2ed0305f515fcbb367dfa72735679d5502364"}, + {file = "regex-2025.11.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:cc4076a5b4f36d849fd709284b4a3b112326652f3b0466f04002a6c15a0c96c1"}, + {file = "regex-2025.11.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:a295ca2bba5c1c885826ce3125fa0b9f702a1be547d821c01d65f199e10c01e2"}, + {file = "regex-2025.11.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:b4774ff32f18e0504bfc4e59a3e71e18d83bc1e171a3c8ed75013958a03b2f14"}, + {file = "regex-2025.11.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e7d1cdfa88ef33a2ae6aa0d707f9255eb286ffbd90045f1088246833223aee"}, + {file = "regex-2025.11.3-cp39-cp39-win32.whl", hash = "sha256:74d04244852ff73b32eeede4f76f51c5bcf44bc3c207bc3e6cf1c5c45b890708"}, + {file = "regex-2025.11.3-cp39-cp39-win_amd64.whl", hash = "sha256:7a50cd39f73faa34ec18d6720ee25ef10c4c1839514186fcda658a06c06057a2"}, + {file = "regex-2025.11.3-cp39-cp39-win_arm64.whl", hash = "sha256:43b4fb020e779ca81c1b5255015fe2b82816c76ec982354534ad9ec09ad7c9e3"}, + {file = "regex-2025.11.3.tar.gz", hash = "sha256:1fedc720f9bb2494ce31a58a1631f9c82df6a09b49c19517ea5cc280b4541e01"}, ] [[package]] @@ -1920,13 +2110,13 @@ files = [ [[package]] name = "smart-open" -version = "7.3.1" +version = "7.5.0" description = "Utils for streaming large files (S3, HDFS, GCS, SFTP, Azure Blob Storage, gzip, bz2, zst...)" optional = false -python-versions = "<4.0,>=3.8" +python-versions = "<4.0,>=3.9" files = [ - {file = "smart_open-7.3.1-py3-none-any.whl", hash = "sha256:e243b2e7f69d6c0c96dd763d6fbbedbb4e0e4fc6d74aa007acc5b018d523858c"}, - {file = "smart_open-7.3.1.tar.gz", hash = "sha256:b33fee8dffd206f189d5e704106a8723afb4210d2ff47e0e1f7fbe436187a990"}, + {file = "smart_open-7.5.0-py3-none-any.whl", hash = "sha256:87e695c5148bbb988f15cec00971602765874163be85acb1c9fb8abc012e6599"}, + {file = "smart_open-7.5.0.tar.gz", hash = "sha256:f394b143851d8091011832ac8113ea4aba6b92e6c35f6e677ddaaccb169d7cb9"}, ] [package.dependencies] @@ -1936,13 +2126,13 @@ wrapt = "*" [package.extras] all = ["smart_open[azure,gcs,http,s3,ssh,webhdfs,zst]"] azure = ["azure-common", "azure-core", "azure-storage-blob"] -gcs = ["google-cloud-storage (>=2.6.0)"] +gcs = ["google-api-core (<2.28)", "google-cloud-storage (>=2.6.0)"] http = ["requests"] -s3 = ["boto3"] +s3 = ["boto3 (>=1.9.17)"] ssh = ["paramiko"] -test = ["awscli", "moto[server]", "numpy", "pyopenssl", "pytest", "pytest-rerunfailures", "pytest_benchmark", "responses", "smart_open[all]"] +test = ["awscli", "flake8", "moto[server]", "numpy", "pyopenssl", "pytest", "pytest-rerunfailures", "pytest-timeout", "pytest-xdist[psutil]", "pytest_benchmark", "responses", "smart_open[all]"] webhdfs = ["requests"] -zst = ["zstandard"] +zst = ["backports.zstd (>=1.0.0)"] [[package]] name = "sniffio" @@ -1968,43 +2158,53 @@ files = [ [[package]] name = "tomli" -version = "2.2.1" +version = "2.3.0" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" files = [ - {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, - {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, - {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, - {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, - {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, - {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, - {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, - {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, - {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, - {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, + {file = "tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45"}, + {file = "tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba"}, + {file = "tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf"}, + {file = "tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441"}, + {file = "tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845"}, + {file = "tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c"}, + {file = "tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456"}, + {file = "tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be"}, + {file = "tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac"}, + {file = "tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22"}, + {file = "tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f"}, + {file = "tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52"}, + {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8"}, + {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6"}, + {file = "tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876"}, + {file = "tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878"}, + {file = "tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b"}, + {file = "tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae"}, + {file = "tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b"}, + {file = "tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf"}, + {file = "tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f"}, + {file = "tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05"}, + {file = "tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606"}, + {file = "tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999"}, + {file = "tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e"}, + {file = "tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3"}, + {file = "tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc"}, + {file = "tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0"}, + {file = "tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879"}, + {file = "tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005"}, + {file = "tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463"}, + {file = "tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8"}, + {file = "tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77"}, + {file = "tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf"}, + {file = "tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530"}, + {file = "tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b"}, + {file = "tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67"}, + {file = "tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f"}, + {file = "tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0"}, + {file = "tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba"}, + {file = "tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b"}, + {file = "tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549"}, ] [[package]] @@ -2030,13 +2230,13 @@ telegram = ["requests"] [[package]] name = "types-python-dateutil" -version = "2.9.0.20250822" +version = "2.9.0.20251108" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.9" files = [ - {file = "types_python_dateutil-2.9.0.20250822-py3-none-any.whl", hash = "sha256:849d52b737e10a6dc6621d2bd7940ec7c65fcb69e6aa2882acf4e56b2b508ddc"}, - {file = "types_python_dateutil-2.9.0.20250822.tar.gz", hash = "sha256:84c92c34bd8e68b117bff742bc00b692a1e8531262d4507b33afcc9f7716cd53"}, + {file = "types_python_dateutil-2.9.0.20251108-py3-none-any.whl", hash = "sha256:a4a537f0ea7126f8ccc2763eec9aa31ac8609e3c8e530eb2ddc5ee234b3cd764"}, + {file = "types_python_dateutil-2.9.0.20251108.tar.gz", hash = "sha256:d8a6687e197f2fa71779ce36176c666841f811368710ab8d274b876424ebfcaa"}, ] [[package]] @@ -2052,13 +2252,13 @@ files = [ [[package]] name = "typing-inspection" -version = "0.4.1" +version = "0.4.2" description = "Runtime typing introspection tools" optional = false python-versions = ">=3.9" files = [ - {file = "typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51"}, - {file = "typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28"}, + {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, + {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, ] [package.dependencies] @@ -2187,94 +2387,123 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "wrapt" -version = "1.17.3" +version = "2.0.1" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" files = [ - {file = "wrapt-1.17.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04"}, - {file = "wrapt-1.17.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2"}, - {file = "wrapt-1.17.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd341868a4b6714a5962c1af0bd44f7c404ef78720c7de4892901e540417111c"}, - {file = "wrapt-1.17.3-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775"}, - {file = "wrapt-1.17.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd"}, - {file = "wrapt-1.17.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05"}, - {file = "wrapt-1.17.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418"}, - {file = "wrapt-1.17.3-cp310-cp310-win32.whl", hash = "sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390"}, - {file = "wrapt-1.17.3-cp310-cp310-win_amd64.whl", hash = "sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6"}, - {file = "wrapt-1.17.3-cp310-cp310-win_arm64.whl", hash = "sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18"}, - {file = "wrapt-1.17.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:273a736c4645e63ac582c60a56b0acb529ef07f78e08dc6bfadf6a46b19c0da7"}, - {file = "wrapt-1.17.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5531d911795e3f935a9c23eb1c8c03c211661a5060aab167065896bbf62a5f85"}, - {file = "wrapt-1.17.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f"}, - {file = "wrapt-1.17.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311"}, - {file = "wrapt-1.17.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1"}, - {file = "wrapt-1.17.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5"}, - {file = "wrapt-1.17.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2"}, - {file = "wrapt-1.17.3-cp311-cp311-win32.whl", hash = "sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89"}, - {file = "wrapt-1.17.3-cp311-cp311-win_amd64.whl", hash = "sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77"}, - {file = "wrapt-1.17.3-cp311-cp311-win_arm64.whl", hash = "sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a"}, - {file = "wrapt-1.17.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ab232e7fdb44cdfbf55fc3afa31bcdb0d8980b9b95c38b6405df2acb672af0e0"}, - {file = "wrapt-1.17.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9baa544e6acc91130e926e8c802a17f3b16fbea0fd441b5a60f5cf2cc5c3deba"}, - {file = "wrapt-1.17.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6b538e31eca1a7ea4605e44f81a48aa24c4632a277431a6ed3f328835901f4fd"}, - {file = "wrapt-1.17.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828"}, - {file = "wrapt-1.17.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9"}, - {file = "wrapt-1.17.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396"}, - {file = "wrapt-1.17.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc"}, - {file = "wrapt-1.17.3-cp312-cp312-win32.whl", hash = "sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe"}, - {file = "wrapt-1.17.3-cp312-cp312-win_amd64.whl", hash = "sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c"}, - {file = "wrapt-1.17.3-cp312-cp312-win_arm64.whl", hash = "sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6"}, - {file = "wrapt-1.17.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a47681378a0439215912ef542c45a783484d4dd82bac412b71e59cf9c0e1cea0"}, - {file = "wrapt-1.17.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a30837587c6ee3cd1a4d1c2ec5d24e77984d44e2f34547e2323ddb4e22eb77"}, - {file = "wrapt-1.17.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:16ecf15d6af39246fe33e507105d67e4b81d8f8d2c6598ff7e3ca1b8a37213f7"}, - {file = "wrapt-1.17.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277"}, - {file = "wrapt-1.17.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d"}, - {file = "wrapt-1.17.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa"}, - {file = "wrapt-1.17.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050"}, - {file = "wrapt-1.17.3-cp313-cp313-win32.whl", hash = "sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8"}, - {file = "wrapt-1.17.3-cp313-cp313-win_amd64.whl", hash = "sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb"}, - {file = "wrapt-1.17.3-cp313-cp313-win_arm64.whl", hash = "sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16"}, - {file = "wrapt-1.17.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cf30f6e3c077c8e6a9a7809c94551203c8843e74ba0c960f4a98cd80d4665d39"}, - {file = "wrapt-1.17.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e228514a06843cae89621384cfe3a80418f3c04aadf8a3b14e46a7be704e4235"}, - {file = "wrapt-1.17.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:5ea5eb3c0c071862997d6f3e02af1d055f381b1d25b286b9d6644b79db77657c"}, - {file = "wrapt-1.17.3-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b"}, - {file = "wrapt-1.17.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa"}, - {file = "wrapt-1.17.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7"}, - {file = "wrapt-1.17.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4"}, - {file = "wrapt-1.17.3-cp314-cp314-win32.whl", hash = "sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10"}, - {file = "wrapt-1.17.3-cp314-cp314-win_amd64.whl", hash = "sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6"}, - {file = "wrapt-1.17.3-cp314-cp314-win_arm64.whl", hash = "sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58"}, - {file = "wrapt-1.17.3-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:ed7c635ae45cfbc1a7371f708727bf74690daedc49b4dba310590ca0bd28aa8a"}, - {file = "wrapt-1.17.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:249f88ed15503f6492a71f01442abddd73856a0032ae860de6d75ca62eed8067"}, - {file = "wrapt-1.17.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a03a38adec8066d5a37bea22f2ba6bbf39fcdefbe2d91419ab864c3fb515454"}, - {file = "wrapt-1.17.3-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e"}, - {file = "wrapt-1.17.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f"}, - {file = "wrapt-1.17.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056"}, - {file = "wrapt-1.17.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804"}, - {file = "wrapt-1.17.3-cp314-cp314t-win32.whl", hash = "sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977"}, - {file = "wrapt-1.17.3-cp314-cp314t-win_amd64.whl", hash = "sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116"}, - {file = "wrapt-1.17.3-cp314-cp314t-win_arm64.whl", hash = "sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6"}, - {file = "wrapt-1.17.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:70d86fa5197b8947a2fa70260b48e400bf2ccacdcab97bb7de47e3d1e6312225"}, - {file = "wrapt-1.17.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:df7d30371a2accfe4013e90445f6388c570f103d61019b6b7c57e0265250072a"}, - {file = "wrapt-1.17.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:caea3e9c79d5f0d2c6d9ab96111601797ea5da8e6d0723f77eabb0d4068d2b2f"}, - {file = "wrapt-1.17.3-cp38-cp38-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:758895b01d546812d1f42204bd443b8c433c44d090248bf22689df673ccafe00"}, - {file = "wrapt-1.17.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:02b551d101f31694fc785e58e0720ef7d9a10c4e62c1c9358ce6f63f23e30a56"}, - {file = "wrapt-1.17.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:656873859b3b50eeebe6db8b1455e99d90c26ab058db8e427046dbc35c3140a5"}, - {file = "wrapt-1.17.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a9a2203361a6e6404f80b99234fe7fb37d1fc73487b5a78dc1aa5b97201e0f22"}, - {file = "wrapt-1.17.3-cp38-cp38-win32.whl", hash = "sha256:55cbbc356c2842f39bcc553cf695932e8b30e30e797f961860afb308e6b1bb7c"}, - {file = "wrapt-1.17.3-cp38-cp38-win_amd64.whl", hash = "sha256:ad85e269fe54d506b240d2d7b9f5f2057c2aa9a2ea5b32c66f8902f768117ed2"}, - {file = "wrapt-1.17.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:30ce38e66630599e1193798285706903110d4f057aab3168a34b7fdc85569afc"}, - {file = "wrapt-1.17.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:65d1d00fbfb3ea5f20add88bbc0f815150dbbde3b026e6c24759466c8b5a9ef9"}, - {file = "wrapt-1.17.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7c06742645f914f26c7f1fa47b8bc4c91d222f76ee20116c43d5ef0912bba2d"}, - {file = "wrapt-1.17.3-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a"}, - {file = "wrapt-1.17.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139"}, - {file = "wrapt-1.17.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df"}, - {file = "wrapt-1.17.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b"}, - {file = "wrapt-1.17.3-cp39-cp39-win32.whl", hash = "sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81"}, - {file = "wrapt-1.17.3-cp39-cp39-win_amd64.whl", hash = "sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f"}, - {file = "wrapt-1.17.3-cp39-cp39-win_arm64.whl", hash = "sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f"}, - {file = "wrapt-1.17.3-py3-none-any.whl", hash = "sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22"}, - {file = "wrapt-1.17.3.tar.gz", hash = "sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0"}, + {file = "wrapt-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:64b103acdaa53b7caf409e8d45d39a8442fe6dcfec6ba3f3d141e0cc2b5b4dbd"}, + {file = "wrapt-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:91bcc576260a274b169c3098e9a3519fb01f2989f6d3d386ef9cbf8653de1374"}, + {file = "wrapt-2.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab594f346517010050126fcd822697b25a7031d815bb4fbc238ccbe568216489"}, + {file = "wrapt-2.0.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:36982b26f190f4d737f04a492a68accbfc6fa042c3f42326fdfbb6c5b7a20a31"}, + {file = "wrapt-2.0.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23097ed8bc4c93b7bf36fa2113c6c733c976316ce0ee2c816f64ca06102034ef"}, + {file = "wrapt-2.0.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8bacfe6e001749a3b64db47bcf0341da757c95959f592823a93931a422395013"}, + {file = "wrapt-2.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8ec3303e8a81932171f455f792f8df500fc1a09f20069e5c16bd7049ab4e8e38"}, + {file = "wrapt-2.0.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:3f373a4ab5dbc528a94334f9fe444395b23c2f5332adab9ff4ea82f5a9e33bc1"}, + {file = "wrapt-2.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f49027b0b9503bf6c8cdc297ca55006b80c2f5dd36cecc72c6835ab6e10e8a25"}, + {file = "wrapt-2.0.1-cp310-cp310-win32.whl", hash = "sha256:8330b42d769965e96e01fa14034b28a2a7600fbf7e8f0cc90ebb36d492c993e4"}, + {file = "wrapt-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:1218573502a8235bb8a7ecaed12736213b22dcde9feab115fa2989d42b5ded45"}, + {file = "wrapt-2.0.1-cp310-cp310-win_arm64.whl", hash = "sha256:eda8e4ecd662d48c28bb86be9e837c13e45c58b8300e43ba3c9b4fa9900302f7"}, + {file = "wrapt-2.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0e17283f533a0d24d6e5429a7d11f250a58d28b4ae5186f8f47853e3e70d2590"}, + {file = "wrapt-2.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85df8d92158cb8f3965aecc27cf821461bb5f40b450b03facc5d9f0d4d6ddec6"}, + {file = "wrapt-2.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c1be685ac7700c966b8610ccc63c3187a72e33cab53526a27b2a285a662cd4f7"}, + {file = "wrapt-2.0.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:df0b6d3b95932809c5b3fecc18fda0f1e07452d05e2662a0b35548985f256e28"}, + {file = "wrapt-2.0.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da7384b0e5d4cae05c97cd6f94faaf78cc8b0f791fc63af43436d98c4ab37bb"}, + {file = "wrapt-2.0.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ec65a78fbd9d6f083a15d7613b2800d5663dbb6bb96003899c834beaa68b242c"}, + {file = "wrapt-2.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7de3cc939be0e1174969f943f3b44e0d79b6f9a82198133a5b7fc6cc92882f16"}, + {file = "wrapt-2.0.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:fb1a5b72cbd751813adc02ef01ada0b0d05d3dcbc32976ce189a1279d80ad4a2"}, + {file = "wrapt-2.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3fa272ca34332581e00bf7773e993d4f632594eb2d1b0b162a9038df0fd971dd"}, + {file = "wrapt-2.0.1-cp311-cp311-win32.whl", hash = "sha256:fc007fdf480c77301ab1afdbb6ab22a5deee8885f3b1ed7afcb7e5e84a0e27be"}, + {file = "wrapt-2.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:47434236c396d04875180171ee1f3815ca1eada05e24a1ee99546320d54d1d1b"}, + {file = "wrapt-2.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:837e31620e06b16030b1d126ed78e9383815cbac914693f54926d816d35d8edf"}, + {file = "wrapt-2.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1fdbb34da15450f2b1d735a0e969c24bdb8d8924892380126e2a293d9902078c"}, + {file = "wrapt-2.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3d32794fe940b7000f0519904e247f902f0149edbe6316c710a8562fb6738841"}, + {file = "wrapt-2.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:386fb54d9cd903ee0012c09291336469eb7b244f7183d40dc3e86a16a4bace62"}, + {file = "wrapt-2.0.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7b219cb2182f230676308cdcacd428fa837987b89e4b7c5c9025088b8a6c9faf"}, + {file = "wrapt-2.0.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:641e94e789b5f6b4822bb8d8ebbdfc10f4e4eae7756d648b717d980f657a9eb9"}, + {file = "wrapt-2.0.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fe21b118b9f58859b5ebaa4b130dee18669df4bd111daad082b7beb8799ad16b"}, + {file = "wrapt-2.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:17fb85fa4abc26a5184d93b3efd2dcc14deb4b09edcdb3535a536ad34f0b4dba"}, + {file = "wrapt-2.0.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:b89ef9223d665ab255ae42cc282d27d69704d94be0deffc8b9d919179a609684"}, + {file = "wrapt-2.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a453257f19c31b31ba593c30d997d6e5be39e3b5ad9148c2af5a7314061c63eb"}, + {file = "wrapt-2.0.1-cp312-cp312-win32.whl", hash = "sha256:3e271346f01e9c8b1130a6a3b0e11908049fe5be2d365a5f402778049147e7e9"}, + {file = "wrapt-2.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:2da620b31a90cdefa9cd0c2b661882329e2e19d1d7b9b920189956b76c564d75"}, + {file = "wrapt-2.0.1-cp312-cp312-win_arm64.whl", hash = "sha256:aea9c7224c302bc8bfc892b908537f56c430802560e827b75ecbde81b604598b"}, + {file = "wrapt-2.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:47b0f8bafe90f7736151f61482c583c86b0693d80f075a58701dd1549b0010a9"}, + {file = "wrapt-2.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:cbeb0971e13b4bd81d34169ed57a6dda017328d1a22b62fda45e1d21dd06148f"}, + {file = "wrapt-2.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb7cffe572ad0a141a7886a1d2efa5bef0bf7fe021deeea76b3ab334d2c38218"}, + {file = "wrapt-2.0.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c8d60527d1ecfc131426b10d93ab5d53e08a09c5fa0175f6b21b3252080c70a9"}, + {file = "wrapt-2.0.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c654eafb01afac55246053d67a4b9a984a3567c3808bb7df2f8de1c1caba2e1c"}, + {file = "wrapt-2.0.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:98d873ed6c8b4ee2418f7afce666751854d6d03e3c0ec2a399bb039cd2ae89db"}, + {file = "wrapt-2.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c9e850f5b7fc67af856ff054c71690d54fa940c3ef74209ad9f935b4f66a0233"}, + {file = "wrapt-2.0.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e505629359cb5f751e16e30cf3f91a1d3ddb4552480c205947da415d597f7ac2"}, + {file = "wrapt-2.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2879af909312d0baf35f08edeea918ee3af7ab57c37fe47cb6a373c9f2749c7b"}, + {file = "wrapt-2.0.1-cp313-cp313-win32.whl", hash = "sha256:d67956c676be5a24102c7407a71f4126d30de2a569a1c7871c9f3cabc94225d7"}, + {file = "wrapt-2.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:9ca66b38dd642bf90c59b6738af8070747b610115a39af2498535f62b5cdc1c3"}, + {file = "wrapt-2.0.1-cp313-cp313-win_arm64.whl", hash = "sha256:5a4939eae35db6b6cec8e7aa0e833dcca0acad8231672c26c2a9ab7a0f8ac9c8"}, + {file = "wrapt-2.0.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a52f93d95c8d38fed0669da2ebdb0b0376e895d84596a976c15a9eb45e3eccb3"}, + {file = "wrapt-2.0.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4e54bbf554ee29fcceee24fa41c4d091398b911da6e7f5d7bffda963c9aed2e1"}, + {file = "wrapt-2.0.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:908f8c6c71557f4deaa280f55d0728c3bca0960e8c3dd5ceeeafb3c19942719d"}, + {file = "wrapt-2.0.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e2f84e9af2060e3904a32cea9bb6db23ce3f91cfd90c6b426757cf7cc01c45c7"}, + {file = "wrapt-2.0.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e3612dc06b436968dfb9142c62e5dfa9eb5924f91120b3c8ff501ad878f90eb3"}, + {file = "wrapt-2.0.1-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6d2d947d266d99a1477cd005b23cbd09465276e302515e122df56bb9511aca1b"}, + {file = "wrapt-2.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:7d539241e87b650cbc4c3ac9f32c8d1ac8a54e510f6dca3f6ab60dcfd48c9b10"}, + {file = "wrapt-2.0.1-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:4811e15d88ee62dbf5c77f2c3ff3932b1e3ac92323ba3912f51fc4016ce81ecf"}, + {file = "wrapt-2.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c1c91405fcf1d501fa5d55df21e58ea49e6b879ae829f1039faaf7e5e509b41e"}, + {file = "wrapt-2.0.1-cp313-cp313t-win32.whl", hash = "sha256:e76e3f91f864e89db8b8d2a8311d57df93f01ad6bb1e9b9976d1f2e83e18315c"}, + {file = "wrapt-2.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:83ce30937f0ba0d28818807b303a412440c4b63e39d3d8fc036a94764b728c92"}, + {file = "wrapt-2.0.1-cp313-cp313t-win_arm64.whl", hash = "sha256:4b55cacc57e1dc2d0991dbe74c6419ffd415fb66474a02335cb10efd1aa3f84f"}, + {file = "wrapt-2.0.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:5e53b428f65ece6d9dad23cb87e64506392b720a0b45076c05354d27a13351a1"}, + {file = "wrapt-2.0.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ad3ee9d0f254851c71780966eb417ef8e72117155cff04821ab9b60549694a55"}, + {file = "wrapt-2.0.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7b822c61ed04ee6ad64bc90d13368ad6eb094db54883b5dde2182f67a7f22c0"}, + {file = "wrapt-2.0.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7164a55f5e83a9a0b031d3ffab4d4e36bbec42e7025db560f225489fa929e509"}, + {file = "wrapt-2.0.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e60690ba71a57424c8d9ff28f8d006b7ad7772c22a4af432188572cd7fa004a1"}, + {file = "wrapt-2.0.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3cd1a4bd9a7a619922a8557e1318232e7269b5fb69d4ba97b04d20450a6bf970"}, + {file = "wrapt-2.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b4c2e3d777e38e913b8ce3a6257af72fb608f86a1df471cb1d4339755d0a807c"}, + {file = "wrapt-2.0.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:3d366aa598d69416b5afedf1faa539fac40c1d80a42f6b236c88c73a3c8f2d41"}, + {file = "wrapt-2.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c235095d6d090aa903f1db61f892fffb779c1eaeb2a50e566b52001f7a0f66ed"}, + {file = "wrapt-2.0.1-cp314-cp314-win32.whl", hash = "sha256:bfb5539005259f8127ea9c885bdc231978c06b7a980e63a8a61c8c4c979719d0"}, + {file = "wrapt-2.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:4ae879acc449caa9ed43fc36ba08392b9412ee67941748d31d94e3cedb36628c"}, + {file = "wrapt-2.0.1-cp314-cp314-win_arm64.whl", hash = "sha256:8639b843c9efd84675f1e100ed9e99538ebea7297b62c4b45a7042edb84db03e"}, + {file = "wrapt-2.0.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:9219a1d946a9b32bb23ccae66bdb61e35c62773ce7ca6509ceea70f344656b7b"}, + {file = "wrapt-2.0.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:fa4184e74197af3adad3c889a1af95b53bb0466bced92ea99a0c014e48323eec"}, + {file = "wrapt-2.0.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c5ef2f2b8a53b7caee2f797ef166a390fef73979b15778a4a153e4b5fedce8fa"}, + {file = "wrapt-2.0.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e042d653a4745be832d5aa190ff80ee4f02c34b21f4b785745eceacd0907b815"}, + {file = "wrapt-2.0.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2afa23318136709c4b23d87d543b425c399887b4057936cd20386d5b1422b6fa"}, + {file = "wrapt-2.0.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6c72328f668cf4c503ffcf9434c2b71fdd624345ced7941bc6693e61bbe36bef"}, + {file = "wrapt-2.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3793ac154afb0e5b45d1233cb94d354ef7a983708cc3bb12563853b1d8d53747"}, + {file = "wrapt-2.0.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:fec0d993ecba3991645b4857837277469c8cc4c554a7e24d064d1ca291cfb81f"}, + {file = "wrapt-2.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:949520bccc1fa227274da7d03bf238be15389cd94e32e4297b92337df9b7a349"}, + {file = "wrapt-2.0.1-cp314-cp314t-win32.whl", hash = "sha256:be9e84e91d6497ba62594158d3d31ec0486c60055c49179edc51ee43d095f79c"}, + {file = "wrapt-2.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:61c4956171c7434634401db448371277d07032a81cc21c599c22953374781395"}, + {file = "wrapt-2.0.1-cp314-cp314t-win_arm64.whl", hash = "sha256:35cdbd478607036fee40273be8ed54a451f5f23121bd9d4be515158f9498f7ad"}, + {file = "wrapt-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:90897ea1cf0679763b62e79657958cd54eae5659f6360fc7d2ccc6f906342183"}, + {file = "wrapt-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:50844efc8cdf63b2d90cd3d62d4947a28311e6266ce5235a219d21b195b4ec2c"}, + {file = "wrapt-2.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:49989061a9977a8cbd6d20f2efa813f24bf657c6990a42967019ce779a878dbf"}, + {file = "wrapt-2.0.1-cp38-cp38-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:09c7476ab884b74dce081ad9bfd07fe5822d8600abade571cb1f66d5fc915af6"}, + {file = "wrapt-2.0.1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1a8a09a004ef100e614beec82862d11fc17d601092c3599afd22b1f36e4137e"}, + {file = "wrapt-2.0.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:89a82053b193837bf93c0f8a57ded6e4b6d88033a499dadff5067e912c2a41e9"}, + {file = "wrapt-2.0.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f26f8e2ca19564e2e1fdbb6a0e47f36e0efbab1acc31e15471fad88f828c75f6"}, + {file = "wrapt-2.0.1-cp38-cp38-win32.whl", hash = "sha256:115cae4beed3542e37866469a8a1f2b9ec549b4463572b000611e9946b86e6f6"}, + {file = "wrapt-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:c4012a2bd37059d04f8209916aa771dfb564cccb86079072bdcd48a308b6a5c5"}, + {file = "wrapt-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:68424221a2dc00d634b54f92441914929c5ffb1c30b3b837343978343a3512a3"}, + {file = "wrapt-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6bd1a18f5a797fe740cb3d7a0e853a8ce6461cc62023b630caec80171a6b8097"}, + {file = "wrapt-2.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fb3a86e703868561c5cad155a15c36c716e1ab513b7065bd2ac8ed353c503333"}, + {file = "wrapt-2.0.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5dc1b852337c6792aa111ca8becff5bacf576bf4a0255b0f05eb749da6a1643e"}, + {file = "wrapt-2.0.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c046781d422f0830de6329fa4b16796096f28a92c8aef3850674442cdcb87b7f"}, + {file = "wrapt-2.0.1-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f73f9f7a0ebd0db139253d27e5fc8d2866ceaeef19c30ab5d69dcbe35e1a6981"}, + {file = "wrapt-2.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b667189cf8efe008f55bbda321890bef628a67ab4147ebf90d182f2dadc78790"}, + {file = "wrapt-2.0.1-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:a9a83618c4f0757557c077ef71d708ddd9847ed66b7cc63416632af70d3e2308"}, + {file = "wrapt-2.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e9b121e9aeb15df416c2c960b8255a49d44b4038016ee17af03975992d03931"}, + {file = "wrapt-2.0.1-cp39-cp39-win32.whl", hash = "sha256:1f186e26ea0a55f809f232e92cc8556a0977e00183c3ebda039a807a42be1494"}, + {file = "wrapt-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:bf4cb76f36be5de950ce13e22e7fdf462b35b04665a12b64f3ac5c1bbbcf3728"}, + {file = "wrapt-2.0.1-cp39-cp39-win_arm64.whl", hash = "sha256:d6cc985b9c8b235bd933990cdbf0f891f8e010b65a3911f7a55179cd7b0fc57b"}, + {file = "wrapt-2.0.1-py3-none-any.whl", hash = "sha256:4d2ce1bf1a48c5277d7969259232b57645aae5686dba1eaeade39442277afbca"}, + {file = "wrapt-2.0.1.tar.gz", hash = "sha256:9c9c635e78497cacb81e84f8b11b23e0aacac7a136e73b8e5b2109a1d9fc468f"}, ] +[package.extras] +dev = ["pytest", "setuptools"] + [[package]] name = "xmljson" version = "0.2.1" @@ -2289,4 +2518,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = ">=3.9,<4" -content-hash = "976f7477c0cacf5a018706e4a96b48e2070142f2d56f7a925f60b60aaf26c082" +content-hash = "8917088545626f4a066fb1fe3a6b782590c2d505d5ef67e81d32f103dc79be93" diff --git a/pyproject.toml b/pyproject.toml index 5ef7bf271..5685ff2df 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "label-studio-sdk" [tool.poetry] name = "label-studio-sdk" -version = "2.0.8.dev" +version = "2.0.14" description = "" readme = "README.md" authors = [] @@ -45,7 +45,7 @@ jsonschema = ">=4.23.0" lxml = ">=4.2.5" nltk = "^3.9.1" numpy = ">=1.26.4,<3.0.0" -opencv-python = "^4.12.0" +opencv-python-headless = "^4.12.0" pandas = ">=0.24.0" pydantic = ">= 1.9.2" pydantic-core = "^2.18.2" diff --git a/reference.md b/reference.md index b12d0fd82..cc2ce6b6c 100644 --- a/reference.md +++ b/reference.md @@ -12,6 +12,12 @@
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve activity logs filtered by workspace, project, user, HTTP method, date range or search query.
@@ -153,6 +159,12 @@ client.activity_logs.list()
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List annotation history items for an annotation. Annotation history logs all actions performed with annotations, such as: imports, submits, updates, reviews, and more. Users can view annotation history items in the Annotation History panel during labeling.
@@ -229,6 +241,12 @@ client.annotation_history.list()
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete all annotation history items for a specific annotation, task or project. This method is available only for users with administrator roles.
@@ -313,6 +331,12 @@ client.annotation_history.delete()
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all annotation history items for the project with pagination.
@@ -400,6 +424,12 @@ client.annotation_history.list_for_project(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all reviews for a specific annotation ID.
@@ -484,6 +514,12 @@ client.annotation_reviews.list()
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a review for a specific annotation ID.
@@ -610,6 +646,12 @@ client.annotation_reviews.create(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific review by ID for an annotation.
@@ -680,6 +722,12 @@ client.annotation_reviews.get(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a review by ID
@@ -750,6 +798,12 @@ client.annotation_reviews.delete(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific review by ID.
@@ -1636,6 +1690,12 @@ client.annotations.create(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve billing checks and feature flags for the active organization.
@@ -1684,8 +1744,8 @@ client.billing.info() -## Blueprints -
client.blueprints.create(...) +## Comments +
client.comments.list(...)
@@ -1697,7 +1757,13 @@ client.billing.info()
-Create a new blueprint + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+List all comments for a specific annotation ID.
@@ -1717,9 +1783,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.blueprints.create( - project=1, -) +client.comments.list() ``` @@ -1735,7 +1799,7 @@ client.blueprints.create(
-**project:** `int` +**annotation:** `typing.Optional[int]`
@@ -1743,7 +1807,7 @@ client.blueprints.create(
-**created_by:** `typing.Optional[int]` +**annotators:** `typing.Optional[str]`
@@ -1751,7 +1815,7 @@ client.blueprints.create(
-**description:** `typing.Optional[str]` — Project description +**draft:** `typing.Optional[int]`
@@ -1759,7 +1823,7 @@ client.blueprints.create(
-**label_config:** `typing.Optional[str]` — Labeling configuration in XML format +**expand_created_by:** `typing.Optional[bool]`
@@ -1767,7 +1831,15 @@ client.blueprints.create(
-**title:** `typing.Optional[str]` — Blueprint name. Must be between 3 and 50 characters long. +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. + +
+
+ +
+
+ +**projects:** `typing.Optional[str]`
@@ -1787,7 +1859,7 @@ client.blueprints.create(
-
client.blueprints.delete(...) +
client.comments.create(...)
@@ -1799,7 +1871,13 @@ client.blueprints.create(
-Delete a blueprint by ID + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Create a comment for a specific annotation ID.
@@ -1819,9 +1897,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.blueprints.delete( - id="id", -) +client.comments.create() ``` @@ -1837,7 +1913,55 @@ client.blueprints.delete(
-**id:** `str` +**expand_created_by:** `typing.Optional[bool]` — Expand the created_by field + +
+
+ +
+
+ +**annotation:** `typing.Optional[int]` + +
+
+ +
+
+ +**classifications:** `typing.Optional[typing.Optional[typing.Any]]` + +
+
+ +
+
+ +**draft:** `typing.Optional[int]` + +
+
+ +
+
+ +**is_resolved:** `typing.Optional[bool]` — True if the comment is resolved + +
+
+ +
+
+ +**region_ref:** `typing.Optional[typing.Optional[typing.Any]]` + +
+
+ +
+
+ +**text:** `typing.Optional[str]` — Reviewer or annotator comment
@@ -1857,8 +1981,7 @@ client.blueprints.delete(
-## Comments -
client.comments.list(...) +
client.comments.get(...)
@@ -1870,7 +1993,13 @@ client.blueprints.delete(
-List all comments for a specific annotation ID. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Retrieve a specific comment by ID for an annotation.
@@ -1890,7 +2019,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.comments.list() +client.comments.get( + id="id", +) ``` @@ -1906,7 +2037,7 @@ client.comments.list()
-**annotation:** `typing.Optional[int]` +**id:** `str`
@@ -1914,7 +2045,7 @@ client.comments.list()
-**annotators:** `typing.Optional[str]` +**expand_created_by:** `typing.Optional[bool]` — Expand the created_by field
@@ -1922,23 +2053,75 @@ client.comments.list()
-**draft:** `typing.Optional[int]` +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
+ + + +
+ +
client.comments.delete(...)
-**expand_created_by:** `typing.Optional[bool]` - +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Delete a comment by ID
+
+
+ +#### 🔌 Usage
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.comments.delete( + id="id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `str`
@@ -1946,7 +2129,7 @@ client.comments.list()
-**projects:** `typing.Optional[str]` +**expand_created_by:** `typing.Optional[bool]` — Expand the created_by field
@@ -1966,7 +2149,7 @@ client.comments.list()
-
client.comments.create(...) +
client.comments.update(...)
@@ -1978,7 +2161,13 @@ client.comments.list()
-Create a comment for a specific annotation ID. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update a specific comment by ID.
@@ -1998,7 +2187,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.comments.create() +client.comments.update( + id="id", +) ``` @@ -2014,6 +2205,14 @@ client.comments.create()
+**id:** `str` + +
+
+ +
+
+ **expand_created_by:** `typing.Optional[bool]` — Expand the created_by field
@@ -2082,7 +2281,8 @@ client.comments.create()
-
client.comments.get(...) +## Users +
client.users.get_current_user()
@@ -2094,7 +2294,13 @@ client.comments.create()
-Retrieve a specific comment by ID for an annotation. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get info about the currently authenticated user.
@@ -2114,9 +2320,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.comments.get( - id="id", -) +client.users.get_current_user() ``` @@ -2132,22 +2336,6 @@ client.comments.get(
-**id:** `str` - -
-
- -
-
- -**expand_created_by:** `typing.Optional[bool]` — Expand the created_by field - -
-
- -
-
- **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -2160,7 +2348,7 @@ client.comments.get(
-
client.comments.delete(...) +
client.users.update_current_user(...)
@@ -2172,7 +2360,13 @@ client.comments.get(
-Delete a comment by ID + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update details for the currently authenticated user.
@@ -2192,9 +2386,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.comments.delete( - id="id", -) +client.users.update_current_user() ``` @@ -2210,7 +2402,7 @@ client.comments.delete(
-**id:** `str` +**active_organization:** `typing.Optional[int]`
@@ -2218,7 +2410,7 @@ client.comments.delete(
-**expand_created_by:** `typing.Optional[bool]` — Expand the created_by field +**allow_newsletters:** `typing.Optional[bool]` — Allow sending newsletters to user
@@ -2226,69 +2418,23 @@ client.comments.delete(
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**custom_hotkeys:** `typing.Optional[typing.Optional[typing.Any]]`
- -
- - - - -
- -
client.comments.update(...) -
-
- -#### 📝 Description - -
-
- -
-
- -Update a specific comment by ID. -
-
-
-
- -#### 🔌 Usage
-
-
- -```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.comments.update( - id="id", -) - -``` -
-
+**date_joined:** `typing.Optional[dt.datetime]` +
-#### ⚙️ Parameters -
-
-
- -**id:** `str` +**email_notification_settings:** `typing.Optional[typing.Optional[typing.Any]]`
@@ -2296,7 +2442,7 @@ client.comments.update(
-**expand_created_by:** `typing.Optional[bool]` — Expand the created_by field +**first_name:** `typing.Optional[str]`
@@ -2304,7 +2450,7 @@ client.comments.update(
-**annotation:** `typing.Optional[int]` +**is_email_verified:** `typing.Optional[bool]`
@@ -2312,7 +2458,7 @@ client.comments.update(
-**classifications:** `typing.Optional[typing.Optional[typing.Any]]` +**last_name:** `typing.Optional[str]`
@@ -2320,7 +2466,7 @@ client.comments.update(
-**draft:** `typing.Optional[int]` +**onboarding_state:** `typing.Optional[str]`
@@ -2328,7 +2474,7 @@ client.comments.update(
-**is_resolved:** `typing.Optional[bool]` — True if the comment is resolved +**password:** `typing.Optional[str]`
@@ -2336,7 +2482,7 @@ client.comments.update(
-**region_ref:** `typing.Optional[typing.Optional[typing.Any]]` +**phone:** `typing.Optional[str]`
@@ -2344,7 +2490,7 @@ client.comments.update(
-**text:** `typing.Optional[str]` — Reviewer or annotator comment +**username:** `typing.Optional[str]`
@@ -2364,8 +2510,7 @@ client.comments.update(
-## Users -
client.users.get_current_user() +
client.users.get_hotkeys()
@@ -2377,7 +2522,7 @@ client.comments.update(
-Get info about the currently authenticated user. +Retrieve the custom hotkeys configuration for the current user.
@@ -2397,7 +2542,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.users.get_current_user() +client.users.get_hotkeys() ``` @@ -2425,7 +2570,7 @@ client.users.get_current_user()
-
client.users.update_current_user(...) +
client.users.update_hotkeys(...)
@@ -2437,7 +2582,7 @@ client.users.get_current_user()
-Update details for the currently authenticated user. +Update the custom hotkeys configuration for the current user.
@@ -2457,7 +2602,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.users.update_current_user() +client.users.update_hotkeys() ``` @@ -2473,7 +2618,7 @@ client.users.update_current_user()
-**active_organization:** `typing.Optional[int]` +**custom_hotkeys:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]`
@@ -2481,91 +2626,63 @@ client.users.update_current_user()
-**allow_newsletters:** `typing.Optional[bool]` — Allow sending newsletters to user +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
- -
-
- -**custom_hotkeys:** `typing.Optional[typing.Optional[typing.Any]]` -
-
-
-**date_joined:** `typing.Optional[dt.datetime]` -
+
+
client.users.reset_token()
-**email_notification_settings:** `typing.Optional[typing.Optional[typing.Any]]` - -
-
+#### 📝 Description
-**first_name:** `typing.Optional[str]` - -
-
-
-**is_email_verified:** `typing.Optional[bool]` - +Reset the user token for the current user.
- -
-
- -**last_name:** `typing.Optional[str]` -
+#### 🔌 Usage +
-**onboarding_state:** `typing.Optional[str]` - -
-
-
-**password:** `typing.Optional[str]` - -
-
+```python +from label_studio_sdk import LabelStudio -
-
+client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.users.reset_token() -**phone:** `typing.Optional[str]` - +``` +
+
+#### ⚙️ Parameters +
-**username:** `typing.Optional[str]` - -
-
-
@@ -2581,7 +2698,7 @@ client.users.update_current_user()
-
client.users.get_hotkeys() +
client.users.get_token()
@@ -2593,7 +2710,7 @@ client.users.update_current_user()
-Retrieve the custom hotkeys configuration for the current user. +Get a user token to authenticate to the API as the current user.
@@ -2613,7 +2730,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.users.get_hotkeys() +client.users.get_token() ``` @@ -2641,7 +2758,7 @@ client.users.get_hotkeys()
-
client.users.update_hotkeys(...) +
client.users.whoami()
@@ -2653,7 +2770,7 @@ client.users.get_hotkeys()
-Update the custom hotkeys configuration for the current user. +Retrieve details of the account that you are using to access the API.
@@ -2673,7 +2790,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.users.update_hotkeys() +client.users.whoami() ``` @@ -2689,14 +2806,6 @@ client.users.update_hotkeys()
-**custom_hotkeys:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` - -
-
- -
-
- **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -2709,7 +2818,7 @@ client.users.update_hotkeys()
-
client.users.reset_token() +
client.users.list(...)
@@ -2721,7 +2830,7 @@ client.users.update_hotkeys()
-Reset the user token for the current user. +List the users that exist on the Label Studio server.
@@ -2741,7 +2850,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.users.reset_token() +client.users.list() ``` @@ -2757,6 +2866,14 @@ client.users.reset_token()
+**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -2769,7 +2886,7 @@ client.users.reset_token()
-
client.users.get_token() +
client.users.create(...)
@@ -2781,7 +2898,7 @@ client.users.reset_token()
-Get a user token to authenticate to the API as the current user. +Create a user in Label Studio.
@@ -2801,7 +2918,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.users.get_token() +client.users.create() ``` @@ -2817,63 +2934,75 @@ client.users.get_token()
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**allow_newsletters:** `typing.Optional[bool]` — Whether the user allows newsletters
- -
+
+
+**avatar:** `typing.Optional[str]` — Avatar URL of the user +
-
-
client.users.whoami()
-#### 📝 Description +**email:** `typing.Optional[str]` — Email of the user + +
+
+**first_name:** `typing.Optional[str]` — First name of the user + +
+
+
-Retrieve details of the account that you are using to access the API. -
-
+**id:** `typing.Optional[int]` — User ID + -#### 🔌 Usage -
+**initials:** `typing.Optional[str]` — Initials of the user + +
+
+
-```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.users.whoami() - -``` +**last_name:** `typing.Optional[str]` — Last name of the user +
+ +
+
+ +**phone:** `typing.Optional[str]` — Phone number of the user +
-#### ⚙️ Parameters -
+**username:** `typing.Optional[str]` — Username of the user + +
+
+
@@ -2889,7 +3018,7 @@ client.users.whoami()
-
client.users.list(...) +
client.users.get(...)
@@ -2901,7 +3030,7 @@ client.users.whoami()
-List the users that exist on the Label Studio server. +Get info about a specific Label Studio user, based on the user ID.
@@ -2921,7 +3050,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.users.list() +client.users.get( + id=1, +) ``` @@ -2937,7 +3068,7 @@ client.users.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**id:** `int` — User ID
@@ -2957,7 +3088,7 @@ client.users.list()
-
client.users.create(...) +
client.users.delete(...)
@@ -2969,7 +3100,9 @@ client.users.list()
-Create a user in Label Studio. +Delete a specific Label Studio user. Only available in community edition. + +Use caution when deleting a user, as this can cause issues such as breaking the "Annotated by" filter or leaving orphaned records.
@@ -2989,7 +3122,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.users.create() +client.users.delete( + id=1, +) ``` @@ -3005,71 +3140,7 @@ client.users.create()
-**allow_newsletters:** `typing.Optional[bool]` — Whether the user allows newsletters - -
-
- -
-
- -**avatar:** `typing.Optional[str]` — Avatar URL of the user - -
-
- -
-
- -**email:** `typing.Optional[str]` — Email of the user - -
-
- -
-
- -**first_name:** `typing.Optional[str]` — First name of the user - -
-
- -
-
- -**id:** `typing.Optional[int]` — User ID - -
-
- -
-
- -**initials:** `typing.Optional[str]` — Initials of the user - -
-
- -
-
- -**last_name:** `typing.Optional[str]` — Last name of the user - -
-
- -
-
- -**phone:** `typing.Optional[str]` — Phone number of the user - -
-
- -
-
- -**username:** `typing.Optional[str]` — Username of the user +**id:** `int` — User ID
@@ -3089,7 +3160,7 @@ client.users.create()
-
client.users.get(...) +
client.users.update(...)
@@ -3101,7 +3172,9 @@ client.users.create()
-Get info about a specific Label Studio user, based on the user ID. + + Update details for a specific user, such as their name or contact information, in Label Studio. +
@@ -3121,151 +3194,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.users.get( - id=1, -) - -``` - -
- - - -#### ⚙️ Parameters - -
-
- -
-
- -**id:** `int` — User ID - -
-
- -
-
- -**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - -
-
-
-
- - - - -
- -
client.users.delete(...) -
-
- -#### 📝 Description - -
-
- -
-
- -Delete a specific Label Studio user. Only available in community edition. - -Use caution when deleting a user, as this can cause issues such as breaking the "Annotated by" filter or leaving orphaned records. -
-
-
-
- -#### 🔌 Usage - -
-
- -
-
- -```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.users.delete( - id=1, -) - -``` -
-
-
-
- -#### ⚙️ Parameters - -
-
- -
-
- -**id:** `int` — User ID - -
-
- -
-
- -**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - -
-
-
-
- - -
-
-
- -
client.users.update(...) -
-
- -#### 📝 Description - -
-
- -
-
- - - Update details for a specific user, such as their name or contact information, in Label Studio. - -
-
-
-
- -#### 🔌 Usage - -
-
- -
-
- -```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.users.update( +client.users.update( id=1, ) @@ -4770,7 +4699,13 @@ client.organizations.get(
-Update organization details including title, embed domains, and custom scripts settings. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update organization details including title, embed domains, and Plugins settings.
@@ -4832,14 +4767,6 @@ client.organizations.update(
-**custom_scripts_editable_by:** `typing.Optional[str]` - -
-
- -
-
- **custom_scripts_enabled:** `typing.Optional[bool]`
@@ -4912,6 +4839,12 @@ client.organizations.update(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update the default role for members of a specific organization.
@@ -4966,12 +4899,7 @@ client.organizations.update_default_role(
-**custom_scripts_editable_by:** `typing.Optional[PatchedDefaultRoleRequestCustomScriptsEditableBy]` - -Set the minimum user role that can edit custom scripts in the UI. - -* `AD` - Administrator -* `MA` - Manager +**custom_scripts_enabled_at:** `typing.Optional[dt.datetime]` — Set to current time to enable custom scripts (Plugins) for this organization. Can only be enabled if no organization members are active members of any other organizations; otherwise an error will be raised. If this occurs, contact the LEAP team for assistance with enabling custom scripts (Plugins).
@@ -4979,15 +4907,7 @@ Set the minimum user role that can edit custom scripts in the UI.
-**custom_scripts_enabled_at:** `typing.Optional[dt.datetime]` — Set to current time to enabled custom scripts for this organization. Can only be enabled if no organization members are active members of any other organizations; otherwise an error will be raised. If this occurs, contact the LEAP team for assistance with enabling custom scripts. - -
-
- -
-
- -**default_role:** `typing.Optional[DefaultRoleEnum]` +**default_role:** `typing.Optional[Role9E7Enum]` Default membership role for invited users @@ -5856,7 +5776,13 @@ client.ml.predict_interactive(
-Note: not available in the community edition of Label Studio. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create predictions for all tasks using a specific ML backend so that you can set up an active learning strategy based on the confidence or uncertainty scores associated with the predictions. Creating predictions requires a Label Studio ML backend set up and configured for your project. @@ -6094,6 +6020,12 @@ client.ml.list_model_versions(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all model provider connections.
@@ -6162,6 +6094,12 @@ client.model_providers.list()
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new model provider connection.
@@ -6318,6 +6256,12 @@ client.model_providers.create()
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all possible model provider choices
@@ -6378,6 +6322,12 @@ client.model_providers.list_model_provider_choices()
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific model provider connection.
@@ -6448,6 +6398,12 @@ client.model_providers.get(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a model provider connection by ID
@@ -6518,6 +6474,12 @@ client.model_providers.delete(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific model provider connection by ID.
@@ -6685,6 +6647,12 @@ client.model_providers.update(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new batch of failed predictions.
@@ -6780,6 +6748,12 @@ client.prompts.batch_failed_predictions(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new batch prediction.
@@ -6863,7 +6837,7 @@ client.prompts.batch_predictions(
-
client.prompts.list(...) +
client.prompts.subset_tasks(...)
@@ -6875,7 +6849,15 @@ client.prompts.batch_predictions(
-List all prompts. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + Provides list of tasks, based on project subset. Includes predictions for tasks. For the 'HasGT' subset, accuracy metrics will also be provided. +
@@ -6895,7 +6877,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.prompts.list() +client.prompts.subset_tasks( + project_pk=1, +) ``` @@ -6911,7 +6895,7 @@ client.prompts.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**project_pk:** `int`
@@ -6919,69 +6903,47 @@ client.prompts.list()
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**include_total:** `typing.Optional[bool]` — If true (default), includes task_count in response; if false, omits it.
- -
+
+
+**model_run:** `typing.Optional[int]` — A unique ID of a ModelRun +
-
-
client.prompts.create(...)
-#### 📝 Description - -
-
+**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. + +
+
-Create a new prompt. -
-
+**page:** `typing.Optional[int]` — A page number within the paginated result set. +
-#### 🔌 Usage -
-
-
- -```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.prompts.create( - title="title", -) - -``` -
-
+**page_size:** `typing.Optional[int]` — Number of results to return per page. +
-#### ⚙️ Parameters - -
-
-
-**title:** `str` — Model name +**parent_model:** `typing.Optional[int]` — The ID of the parent model (ModelInterface) for this Inference Run
@@ -6989,7 +6951,7 @@ client.prompts.create(
-**associated_projects:** `typing.Optional[typing.Sequence[int]]` +**project_subset:** `typing.Optional[str]` — The project subset to retrieve tasks for
@@ -6997,39 +6959,77 @@ client.prompts.create(
-**created_by:** `typing.Optional[UserSimpleRequest]` — User who created Dataset +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
-
-
-**description:** `typing.Optional[str]` — Model description -
+
+
client.prompts.subsets(...)
-**input_fields:** `typing.Optional[typing.Optional[typing.Any]]` - +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + Provides list of available subsets for a project along with count of tasks in each subset + +
+
+#### 🔌 Usage +
-**organization:** `typing.Optional[int]` - +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.prompts.subsets( + project_pk=1, +) + +``` +
+
+#### ⚙️ Parameters +
-**output_classes:** `typing.Optional[typing.Optional[typing.Any]]` +
+
+ +**project_pk:** `int`
@@ -7037,7 +7037,7 @@ client.prompts.create(
-**skill_name:** `typing.Optional[SkillNameEnum]` +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -7057,7 +7057,7 @@ client.prompts.create(
-
client.prompts.compatible_projects(...) +
client.prompts.list(...)
@@ -7069,7 +7069,7 @@ client.prompts.create(
-Retrieve a list of compatible project for prompt. +List all prompts.
@@ -7089,7 +7089,207 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.prompts.compatible_projects() +client.prompts.list() + +``` + +
+ + + +#### ⚙️ Parameters + +
+
+ +
+
+ +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + + + +
+ +
client.prompts.create(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Create a new prompt. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.prompts.create( + title="title", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**title:** `str` — Model name + +
+
+ +
+
+ +**associated_projects:** `typing.Optional[typing.Sequence[int]]` + +
+
+ +
+
+ +**created_by:** `typing.Optional[UserSimpleRequest]` — User who created Dataset + +
+
+ +
+
+ +**description:** `typing.Optional[str]` — Model description + +
+
+ +
+
+ +**input_fields:** `typing.Optional[typing.Optional[typing.Any]]` + +
+
+ +
+
+ +**organization:** `typing.Optional[int]` + +
+
+ +
+
+ +**output_classes:** `typing.Optional[typing.Optional[typing.Any]]` + +
+
+ +
+
+ +**skill_name:** `typing.Optional[SkillNameEnum]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.prompts.compatible_projects(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Retrieve a list of compatible project for prompt. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.prompts.compatible_projects() ```
@@ -7161,6 +7361,12 @@ client.prompts.compatible_projects()
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific prompt.
@@ -7231,6 +7437,12 @@ client.prompts.get(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a prompt by ID
@@ -7301,6 +7513,12 @@ client.prompts.delete(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific prompt by ID.
@@ -7888,6 +8106,12 @@ client.predictions.update(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all project templates for an organization.
@@ -7956,6 +8180,12 @@ client.project_templates.list()
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a project template for an organization.
@@ -8027,7 +8257,7 @@ client.project_templates.create(
-**custom_script:** `typing.Optional[str]` — custom script for projects created from this template +**custom_script:** `typing.Optional[str]` — custom script (Plugin) for projects created from this template
@@ -8115,6 +8345,12 @@ client.project_templates.create(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific project template by ID for an organization.
@@ -8185,6 +8421,12 @@ client.project_templates.get(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific project template by ID for an organization.
@@ -8255,6 +8497,12 @@ client.project_templates.delete(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update the details of a specific project template by ID for an organization.
@@ -8317,7 +8565,7 @@ client.project_templates.update(
-**custom_script:** `typing.Optional[str]` — custom script for projects created from this template +**custom_script:** `typing.Optional[str]` — custom script (Plugin) for projects created from this template
@@ -8421,6 +8669,12 @@ client.project_templates.update(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a project from a specific project template by ID for an organization.
@@ -8559,7 +8813,7 @@ for page in response.iter_pages():
-**filter:** `typing.Optional[ProjectsListRequestFilter]` — Filter projects by pinned status. Use 'pinned_only' to return only pinned projects, 'exclude_pinned' to return only non-pinned projects, or 'all' to return all projects. +**filter:** `typing.Optional[str]` — Filter projects by pinned status. Use 'pinned_only' to return only pinned projects, 'exclude_pinned' to return only non-pinned projects, or 'all' to return all projects.
@@ -8567,7 +8821,7 @@ for page in response.iter_pages():
-**ids:** `typing.Optional[str]` — ids +**ids:** `typing.Optional[str]` — Filter id by in list
@@ -8583,7 +8837,7 @@ for page in response.iter_pages():
-**members_limit:** `typing.Optional[int]` — Maximum number of members to return. +**members_limit:** `typing.Optional[int]` — Maximum number of members to return
@@ -8615,7 +8869,7 @@ for page in response.iter_pages():
-**title:** `typing.Optional[str]` — title +**search:** `typing.Optional[str]` — Search term for project title and description
@@ -8623,7 +8877,15 @@ for page in response.iter_pages():
-**workspaces:** `typing.Optional[int]` — workspaces +**title:** `typing.Optional[str]` — Filter title by contains (case-insensitive) + +
+
+ +
+
+ +**workspaces:** `typing.Optional[float]` — Filter workspaces by exact match
@@ -8851,7 +9113,7 @@ client.projects.create()
-**show_ground_truth_first:** `typing.Optional[bool]` +**show_ground_truth_first:** `typing.Optional[bool]` — Onboarding mode (true): show ground truth tasks first in the labeling stream
@@ -8935,7 +9197,7 @@ client.projects.create()
-
client.projects.get(...) +
client.projects.list_counts(...)
@@ -8947,7 +9209,7 @@ client.projects.create()
-Retrieve information about a project by project ID. +Returns a list of projects with their counts. For example, task_number which is the total task number in project
@@ -8967,9 +9229,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.get( - id=1, -) +client.projects.list_counts() ``` @@ -8985,7 +9245,7 @@ client.projects.get(
-**id:** `int` +**filter:** `typing.Optional[str]` — Filter projects by pinned status. Use 'pinned_only' to return only pinned projects, 'exclude_pinned' to return only non-pinned projects, or 'all' to return all projects.
@@ -8993,69 +9253,63 @@ client.projects.get(
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**ids:** `typing.Optional[str]` — Filter id by in list
- -
+
+
+**include:** `typing.Optional[str]` — Comma-separated list of count fields to include in the response to optimize performance. Available fields: task_number, finished_task_number, total_predictions_number, total_annotations_number, num_tasks_with_annotations, useful_annotation_number, ground_truth_number, skipped_annotations_number. If not specified, all count fields are included. +
-
-
client.projects.delete(...)
-#### 📝 Description - -
-
+**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. + +
+
-Delete a project by specified project ID. -
-
+**page:** `typing.Optional[int]` — A page number within the paginated result set. +
-#### 🔌 Usage -
+**page_size:** `typing.Optional[int]` — Number of results to return per page. + +
+
+
-```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.projects.delete( - id=1, -) - -``` -
-
+**search:** `typing.Optional[str]` — Search term for project title and description + -#### ⚙️ Parameters -
+**title:** `typing.Optional[str]` — Filter title by contains (case-insensitive) + +
+
+
-**id:** `int` +**workspaces:** `typing.Optional[float]` — Filter workspaces by exact match
@@ -9075,7 +9329,7 @@ client.projects.delete(
-
client.projects.update(...) +
client.projects.get(...)
@@ -9087,7 +9341,7 @@ client.projects.delete(
-Update the details of a specific project. +Retrieve information about a project by project ID.
@@ -9107,7 +9361,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.update( +client.projects.get( id=1, ) @@ -9133,6 +9387,170 @@ client.projects.update(
+**members_limit:** `typing.Optional[int]` — Maximum number of members to return + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+ +
+ + + + +
+ +
client.projects.delete(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Delete a project by specified project ID. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.delete( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.projects.update(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Update the details of a specific project. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.update( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**members_limit:** `typing.Optional[int]` — Maximum number of members to return + +
+
+ +
+
+ +**agreement_threshold:** `typing.Optional[str]` — Minimum percent agreement threshold for which minimum number of annotators must agree + +
+
+ +
+
+ **annotation_limit_count:** `typing.Optional[int]`
@@ -9277,6 +9695,14 @@ client.projects.update(
+**max_additional_annotators_assignable:** `typing.Optional[int]` — Maximum number of additional annotators that can be assigned to a low agreement task + +
+
+ +
+
+ **maximum_annotations:** `typing.Optional[int]` — Maximum number of annotations for one task. If the number of annotations per task is equal or greater to this value, the task is completed (is_labeled=True)
@@ -9381,7 +9807,7 @@ client.projects.update(
-**show_ground_truth_first:** `typing.Optional[bool]` +**show_ground_truth_first:** `typing.Optional[bool]` — Onboarding mode (true): show ground truth tasks first in the labeling stream
@@ -9469,6 +9895,76 @@ client.projects.update(
+
+
+
+ +
client.projects.list_unique_annotators(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Return unique users who have submitted annotations in the specified project. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.list_unique_annotators( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
@@ -9485,6 +9981,12 @@ client.projects.update(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Make a copy of project.
@@ -9733,6 +10235,90 @@ client.projects.import_tasks( + + +
+ +
client.projects.import_predictions(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Import model predictions for tasks in the specified project. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio, PredictionRequest + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.import_predictions( + id=1, + request=[ + PredictionRequest( + result=[{"key": "value"}], + task=1, + ) + ], +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` — A unique integer value identifying this project. + +
+
+ +
+
+ +**request:** `typing.Sequence[PredictionRequest]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
@@ -10164,7 +10750,8 @@ client = LabelStudio( api_key="YOUR_API_KEY", ) client.tasks.create( - data={"key": "value"}, + data={"image": "https://example.com/image.jpg", "text": "Hello, world!"}, + project=1, ) ``` @@ -10607,6 +11194,14 @@ client.tasks.update(
+**precomputed_agreement:** `typing.Optional[float]` — Average agreement score for the task + +
+
+ +
+
+ **predictions_score:** `typing.Optional[float]`
@@ -10697,41 +11292,41 @@ client.tasks.update( Create a new task event to track user interactions and system events during annotation. - + This endpoint is designed to receive events from the frontend labeling interface to enable accurate lead time calculation and detailed annotation analytics. - + ## Event Types - + **Core Annotation Events:** - `annotation_loaded` - When annotation interface is loaded - `annotation_submitted` - When annotation is submitted - `annotation_updated` - When annotation is modified - `annotation_reviewed` - When annotation is reviewed - + **User Activity Events:** - `visibility_change` - When page visibility changes (tab switch, minimize) - `idle_detected` - When user goes idle - `idle_resumed` - When user returns from idle - + **Interaction Events:** - `region_finished_drawing` - When annotation region is completed - `region_deleted` - When annotation regions are removed - `hotkey_pressed` - When keyboard shortcuts are used - + **Media Events:** - `video_playback_start/end` - Video playback control - `audio_playback_start/end` - Audio playback control - `video_scrub` - Video timeline scrubbing - + ## Usage - + Events are automatically associated with the task specified in the URL path. The current user is automatically set as the actor. Project and organization are derived from the task context. - + ## Example Request - + ```json { "event_key": "annotation_loaded", @@ -11998,6 +12593,12 @@ client.webhooks.update(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all workspaces for your organization. Workspaces in Label Studio let you organize your projects and users into separate spaces. This is useful for managing different teams, departments, or projects within your organization. For more information, see the [Workspaces documentation](https://docs.humansignal.com/workspaces).
@@ -12074,6 +12675,12 @@ client.workspaces.list()
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new workspace. Workspaces in Label Studio let you organize your projects and users into separate spaces. This is useful for managing different teams, departments, or projects within your organization. For more information, see the [Workspaces documentation](https://docs.humansignal.com/workspaces).
@@ -12176,6 +12783,12 @@ client.workspaces.create(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve details for a specific workspace by ID.
@@ -12246,6 +12859,12 @@ client.workspaces.get(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific workspace by ID.
@@ -12316,6 +12935,12 @@ client.workspaces.delete(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update settings for a specific workspace by ID.
@@ -12447,7 +13072,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.azure.list() +client.export_storage.azure.list( + project=1, +) ``` @@ -12463,7 +13090,7 @@ client.export_storage.azure.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**project:** `int` — Project ID
@@ -12471,7 +13098,7 @@ client.export_storage.azure.list()
-**project:** `typing.Optional[int]` — Project ID +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -13104,6 +13731,12 @@ client.export_storage.azure.sync(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all Azure export storage connections that were set up with Service Principal authentication.
@@ -13124,7 +13757,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.azure_spi.list() +client.export_storage.azure_spi.list( + project=1, +) ``` @@ -13140,7 +13775,7 @@ client.export_storage.azure_spi.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**project:** `int` — Project ID
@@ -13148,7 +13783,7 @@ client.export_storage.azure_spi.list()
-**project:** `typing.Optional[int]` — Project ID +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -13180,6 +13815,12 @@ client.export_storage.azure_spi.list()
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create an Azure export storage connection with Service Principal authentication to store annotations.
@@ -13402,6 +14043,12 @@ client.export_storage.azure_spi.create(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific Azure export storage connection that was set up with Service Principal authentication.
@@ -13624,6 +14271,12 @@ client.export_storage.azure_spi.validate(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific Azure export storage connection that was set up with Service Principal authentication.
@@ -13694,6 +14347,12 @@ client.export_storage.azure_spi.get(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific Azure export storage connection that was set up with Service Principal authentication.
@@ -13764,6 +14423,12 @@ client.export_storage.azure_spi.delete(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific Azure export storage connection that was set up with Service Principal authentication.
@@ -13994,6 +14659,12 @@ client.export_storage.azure_spi.update(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an Azure SPI export storage.
@@ -14052,8 +14723,8 @@ client.export_storage.azure_spi.sync(
-## ExportStorage Gcs -
client.export_storage.gcs.list(...) +## ExportStorage Databricks +
client.export_storage.databricks.list(...)
@@ -14065,7 +14736,13 @@ client.export_storage.azure_spi.sync(
-Get a list of all GCS export storage connections. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get a list of all Databricks Files export storage connections.
@@ -14085,7 +14762,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.gcs.list() +client.export_storage.databricks.list( + project=1, +) ``` @@ -14101,7 +14780,7 @@ client.export_storage.gcs.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**project:** `int` — Project ID
@@ -14109,7 +14788,7 @@ client.export_storage.gcs.list()
-**project:** `typing.Optional[int]` — Project ID +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -14129,7 +14808,7 @@ client.export_storage.gcs.list()
-
client.export_storage.gcs.create(...) +
client.export_storage.databricks.create(...)
@@ -14141,7 +14820,13 @@ client.export_storage.gcs.list()
-Create a new GCS export storage connection to store annotations. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Create a Databricks Files export storage connection.
@@ -14161,7 +14846,13 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.gcs.create() +client.export_storage.databricks.create( + catalog="catalog", + host="host", + project=1, + schema="schema", + volume="volume", +) ``` @@ -14177,7 +14868,7 @@ client.export_storage.gcs.create()
-**bucket:** `typing.Optional[str]` — GCS bucket name +**catalog:** `str` — UC catalog name
@@ -14185,7 +14876,7 @@ client.export_storage.gcs.create()
-**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled. +**host:** `str` — Databricks workspace base URL (https://...)
@@ -14193,7 +14884,7 @@ client.export_storage.gcs.create()
-**description:** `typing.Optional[str]` — Storage description +**project:** `int` — A unique integer value identifying this project.
@@ -14201,7 +14892,7 @@ client.export_storage.gcs.create()
-**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details. +**schema:** `str` — UC schema name
@@ -14209,7 +14900,7 @@ client.export_storage.gcs.create()
-**google_project_id:** `typing.Optional[str]` — Google project ID +**volume:** `str` — UC volume name
@@ -14217,7 +14908,7 @@ client.export_storage.gcs.create()
-**prefix:** `typing.Optional[str]` — GCS bucket prefix +**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled
@@ -14225,7 +14916,7 @@ client.export_storage.gcs.create()
-**project:** `typing.Optional[int]` — Project ID +**description:** `typing.Optional[str]` — Cloud storage description
@@ -14233,7 +14924,7 @@ client.export_storage.gcs.create()
-**title:** `typing.Optional[str]` — Storage title +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time
@@ -14241,67 +14932,47 @@ client.export_storage.gcs.create()
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time
- -
+
+
+**last_sync_job:** `typing.Optional[str]` — Last sync job ID +
-
-
client.export_storage.gcs.validate(...)
-#### 📝 Description - -
-
+**meta:** `typing.Optional[typing.Optional[typing.Any]]` + +
+
-Validate a specific GCS export storage connection. -
-
+**prefix:** `typing.Optional[str]` — Export path prefix under the volume +
-#### 🔌 Usage - -
-
-
-```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.export_storage.gcs.validate() - -``` -
-
+**regex_filter:** `typing.Optional[str]` — Regex for filtering objects +
-#### ⚙️ Parameters - -
-
-
-**bucket:** `typing.Optional[str]` — GCS bucket name +**request_timeout_s:** `typing.Optional[int]`
@@ -14309,7 +14980,7 @@ client.export_storage.gcs.validate()
-**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled. +**status:** `typing.Optional[StatusC5AEnum]`
@@ -14317,7 +14988,7 @@ client.export_storage.gcs.validate()
-**description:** `typing.Optional[str]` — Storage description +**stream_chunk_bytes:** `typing.Optional[int]`
@@ -14325,7 +14996,7 @@ client.export_storage.gcs.validate()
-**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details. +**synchronizable:** `typing.Optional[bool]`
@@ -14333,7 +15004,7 @@ client.export_storage.gcs.validate()
-**google_project_id:** `typing.Optional[str]` — Google project ID +**title:** `typing.Optional[str]` — Cloud storage title
@@ -14341,7 +15012,7 @@ client.export_storage.gcs.validate()
-**id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated +**token:** `typing.Optional[str]`
@@ -14349,7 +15020,7 @@ client.export_storage.gcs.validate()
-**prefix:** `typing.Optional[str]` — GCS bucket prefix +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync
@@ -14357,7 +15028,7 @@ client.export_storage.gcs.validate()
-**project:** `typing.Optional[int]` — Project ID +**use_blob_urls:** `typing.Optional[bool]` — Generate blob URLs in tasks
@@ -14365,7 +15036,7 @@ client.export_storage.gcs.validate()
-**title:** `typing.Optional[str]` — Storage title +**verify_tls:** `typing.Optional[bool]` — Verify TLS certificates
@@ -14385,7 +15056,7 @@ client.export_storage.gcs.validate()
-
client.export_storage.gcs.get(...) +
client.export_storage.databricks.validate(...)
@@ -14397,7 +15068,13 @@ client.export_storage.gcs.validate()
-Get a specific GCS export storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Validate a specific Databricks Files export storage connection.
@@ -14417,8 +15094,12 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.gcs.get( - id=1, +client.export_storage.databricks.validate( + catalog="catalog", + host="host", + project=1, + schema="schema", + volume="volume", ) ``` @@ -14435,7 +15116,7 @@ client.export_storage.gcs.get(
-**id:** `int` +**catalog:** `str` — UC catalog name
@@ -14443,69 +15124,167 @@ client.export_storage.gcs.get(
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**host:** `str` — Databricks workspace base URL (https://...)
+ +
+
+ +**project:** `int` — A unique integer value identifying this project. +
+
+
+**schema:** `str` — UC schema name +
-
-
client.export_storage.gcs.delete(...)
-#### 📝 Description +**volume:** `str` — UC volume name + +
+
+**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled + +
+
+
-Delete a specific GCS export storage connection. +**description:** `typing.Optional[str]` — Cloud storage description +
+ +
+
+ +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time +
-#### 🔌 Usage +
+
+ +**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time + +
+
+**last_sync_job:** `typing.Optional[str]` — Last sync job ID + +
+
+
-```python -from label_studio_sdk import LabelStudio +**meta:** `typing.Optional[typing.Optional[typing.Any]]` + +
+
-client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.export_storage.gcs.delete( - id=1, -) +
+
-``` +**prefix:** `typing.Optional[str]` — Export path prefix under the volume +
+ +
+
+ +**regex_filter:** `typing.Optional[str]` — Regex for filtering objects +
-#### ⚙️ Parameters +
+
+ +**request_timeout_s:** `typing.Optional[int]` + +
+
+**status:** `typing.Optional[StatusC5AEnum]` + +
+
+
-**id:** `int` +**stream_chunk_bytes:** `typing.Optional[int]` + +
+
+ +
+
+ +**synchronizable:** `typing.Optional[bool]` + +
+
+ +
+
+ +**title:** `typing.Optional[str]` — Cloud storage title + +
+
+ +
+
+ +**token:** `typing.Optional[str]` + +
+
+ +
+
+ +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync + +
+
+ +
+
+ +**use_blob_urls:** `typing.Optional[bool]` — Generate blob URLs in tasks + +
+
+ +
+
+ +**verify_tls:** `typing.Optional[bool]` — Verify TLS certificates
@@ -14525,7 +15304,7 @@ client.export_storage.gcs.delete(
-
client.export_storage.gcs.update(...) +
client.export_storage.databricks.get(...)
@@ -14537,7 +15316,13 @@ client.export_storage.gcs.delete(
-Update a specific GCS export storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get a specific Databricks Files export storage connection.
@@ -14557,7 +15342,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.gcs.update( +client.export_storage.databricks.get( id=1, ) @@ -14583,70 +15368,6 @@ client.export_storage.gcs.update(
-**bucket:** `typing.Optional[str]` — GCS bucket name - -
-
- -
-
- -**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled. - -
-
- -
-
- -**description:** `typing.Optional[str]` — Storage description - -
-
- -
-
- -**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details. - -
-
- -
-
- -**google_project_id:** `typing.Optional[str]` — Google project ID - -
-
- -
-
- -**prefix:** `typing.Optional[str]` — GCS bucket prefix - -
-
- -
-
- -**project:** `typing.Optional[int]` — Project ID - -
-
- -
-
- -**title:** `typing.Optional[str]` — Storage title - -
-
- -
-
- **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -14659,7 +15380,7 @@ client.export_storage.gcs.update(
-
client.export_storage.gcs.sync(...) +
client.export_storage.databricks.delete(...)
@@ -14671,7 +15392,13 @@ client.export_storage.gcs.update(
-Sync tasks from an GCS export storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Delete a specific Databricks Files export storage connection.
@@ -14691,7 +15418,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.gcs.sync( +client.export_storage.databricks.delete( id=1, ) @@ -14729,8 +15456,7 @@ client.export_storage.gcs.sync(
-## ExportStorage Gcswif -
client.export_storage.gcswif.list(...) +
client.export_storage.databricks.update(...)
@@ -14742,7 +15468,13 @@ client.export_storage.gcs.sync(
-Get a list of all GCS export storage connections that were set up with WIF authentication. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update a specific Databricks Files export storage connection.
@@ -14762,7 +15494,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.gcswif.list() +client.export_storage.databricks.update( + id=1, +) ``` @@ -14778,7 +15512,7 @@ client.export_storage.gcswif.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**id:** `int`
@@ -14786,7 +15520,7 @@ client.export_storage.gcswif.list()
-**project:** `typing.Optional[int]` — Project ID +**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled
@@ -14794,69 +15528,79 @@ client.export_storage.gcswif.list()
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**catalog:** `typing.Optional[str]` — UC catalog name
- -
+
+
+**description:** `typing.Optional[str]` — Cloud storage description +
-
-
client.export_storage.gcswif.create(...)
-#### 📝 Description +**host:** `typing.Optional[str]` — Databricks workspace base URL (https://...) + +
+
+**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time + +
+
+
-Create an GCS export storage connection with WIF authentication to store annotations. -
-
+**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time + -#### 🔌 Usage -
+**last_sync_job:** `typing.Optional[str]` — Last sync job ID + +
+
+
-```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.export_storage.gcswif.create( - project=1, -) - -``` +**meta:** `typing.Optional[typing.Optional[typing.Any]]` +
+ +
+
+ +**prefix:** `typing.Optional[str]` — Export path prefix under the volume +
-#### ⚙️ Parameters -
+**project:** `typing.Optional[int]` — A unique integer value identifying this project. + +
+
+
-**project:** `int` — A unique integer value identifying this project. +**regex_filter:** `typing.Optional[str]` — Regex for filtering objects
@@ -14864,7 +15608,7 @@ client.export_storage.gcswif.create(
-**bucket:** `typing.Optional[str]` — GCS bucket name +**request_timeout_s:** `typing.Optional[int]`
@@ -14872,7 +15616,7 @@ client.export_storage.gcswif.create(
-**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled +**schema:** `typing.Optional[str]` — UC schema name
@@ -14880,7 +15624,7 @@ client.export_storage.gcswif.create(
-**description:** `typing.Optional[str]` — Cloud storage description +**status:** `typing.Optional[StatusC5AEnum]`
@@ -14888,7 +15632,7 @@ client.export_storage.gcswif.create(
-**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file +**stream_chunk_bytes:** `typing.Optional[int]`
@@ -14896,7 +15640,7 @@ client.export_storage.gcswif.create(
-**google_project_id:** `typing.Optional[str]` — Google project ID +**synchronizable:** `typing.Optional[bool]`
@@ -14904,7 +15648,7 @@ client.export_storage.gcswif.create(
-**google_project_number:** `typing.Optional[str]` — Google project number +**title:** `typing.Optional[str]` — Cloud storage title
@@ -14912,7 +15656,7 @@ client.export_storage.gcswif.create(
-**google_service_account_email:** `typing.Optional[str]` — Google service account email +**token:** `typing.Optional[str]`
@@ -14920,7 +15664,7 @@ client.export_storage.gcswif.create(
-**google_wif_pool_id:** `typing.Optional[str]` — Google WIF pool ID +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync
@@ -14928,7 +15672,7 @@ client.export_storage.gcswif.create(
-**google_wif_provider_id:** `typing.Optional[str]` — Google WIF provider ID +**use_blob_urls:** `typing.Optional[bool]` — Generate blob URLs in tasks
@@ -14936,7 +15680,7 @@ client.export_storage.gcswif.create(
-**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time +**verify_tls:** `typing.Optional[bool]` — Verify TLS certificates
@@ -14944,7 +15688,7 @@ client.export_storage.gcswif.create(
-**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time +**volume:** `typing.Optional[str]` — UC volume name
@@ -14952,31 +15696,75 @@ client.export_storage.gcswif.create(
-**last_sync_job:** `typing.Optional[str]` — Last sync job ID +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ + + + + +
+ +
client.export_storage.databricks.sync(...)
-**meta:** `typing.Optional[typing.Optional[typing.Any]]` - +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Export annotations to a Databricks Files storage.
+
+
+ +#### 🔌 Usage
-**prefix:** `typing.Optional[str]` — GCS bucket prefix - +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.export_storage.databricks.sync( + id=1, +) + +```
+
+
+ +#### ⚙️ Parameters
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects +
+
+ +**id:** `int`
@@ -14984,31 +15772,70 @@ client.export_storage.gcswif.create(
-**status:** `typing.Optional[StatusC5AEnum]` +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+ +
+
+
+ +## ExportStorage Gcs +
client.export_storage.gcs.list(...)
-**synchronizable:** `typing.Optional[bool]` - +#### 📝 Description + +
+
+ +
+
+ +Get a list of all GCS export storage connections. +
+
+#### 🔌 Usage +
-**title:** `typing.Optional[str]` — Cloud storage title - +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.export_storage.gcs.list( + project=1, +) + +``` +
+
+#### ⚙️ Parameters +
-**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync +
+
+ +**project:** `int` — Project ID
@@ -15016,7 +15843,7 @@ client.export_storage.gcswif.create(
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -15036,7 +15863,7 @@ client.export_storage.gcswif.create(
-
client.export_storage.gcswif.validate(...) +
client.export_storage.gcs.create(...)
@@ -15048,7 +15875,7 @@ client.export_storage.gcswif.create(
-Validate a specific GCS export storage connection that was set up with WIF authentication. +Create a new GCS export storage connection to store annotations.
@@ -15068,9 +15895,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.gcswif.validate( - project=1, -) +client.export_storage.gcs.create() ``` @@ -15086,7 +15911,7 @@ client.export_storage.gcswif.validate(
-**project:** `int` — A unique integer value identifying this project. +**bucket:** `typing.Optional[str]` — GCS bucket name
@@ -15094,7 +15919,7 @@ client.export_storage.gcswif.validate(
-**bucket:** `typing.Optional[str]` — GCS bucket name +**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled.
@@ -15102,7 +15927,7 @@ client.export_storage.gcswif.validate(
-**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled +**description:** `typing.Optional[str]` — Storage description
@@ -15110,7 +15935,7 @@ client.export_storage.gcswif.validate(
-**description:** `typing.Optional[str]` — Cloud storage description +**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details.
@@ -15118,7 +15943,7 @@ client.export_storage.gcswif.validate(
-**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file +**google_project_id:** `typing.Optional[str]` — Google project ID
@@ -15126,7 +15951,7 @@ client.export_storage.gcswif.validate(
-**google_project_id:** `typing.Optional[str]` — Google project ID +**prefix:** `typing.Optional[str]` — GCS bucket prefix
@@ -15134,7 +15959,7 @@ client.export_storage.gcswif.validate(
-**google_project_number:** `typing.Optional[str]` — Google project number +**project:** `typing.Optional[int]` — Project ID
@@ -15142,7 +15967,7 @@ client.export_storage.gcswif.validate(
-**google_service_account_email:** `typing.Optional[str]` — Google service account email +**title:** `typing.Optional[str]` — Storage title
@@ -15150,39 +15975,67 @@ client.export_storage.gcswif.validate(
-**google_wif_pool_id:** `typing.Optional[str]` — Google WIF pool ID +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
-
-
-**google_wif_provider_id:** `typing.Optional[str]` — Google WIF provider ID -
+
+
client.export_storage.gcs.validate(...)
-**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time - +#### 📝 Description + +
+
+ +
+
+ +Validate a specific GCS export storage connection. +
+
+#### 🔌 Usage +
-**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time - +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.export_storage.gcs.validate() + +``` +
+
+#### ⚙️ Parameters +
-**last_sync_job:** `typing.Optional[str]` — Last sync job ID +
+
+ +**bucket:** `typing.Optional[str]` — GCS bucket name
@@ -15190,7 +16043,7 @@ client.export_storage.gcswif.validate(
-**meta:** `typing.Optional[typing.Optional[typing.Any]]` +**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled.
@@ -15198,7 +16051,7 @@ client.export_storage.gcswif.validate(
-**prefix:** `typing.Optional[str]` — GCS bucket prefix +**description:** `typing.Optional[str]` — Storage description
@@ -15206,7 +16059,7 @@ client.export_storage.gcswif.validate(
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects +**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details.
@@ -15214,7 +16067,7 @@ client.export_storage.gcswif.validate(
-**status:** `typing.Optional[StatusC5AEnum]` +**google_project_id:** `typing.Optional[str]` — Google project ID
@@ -15222,7 +16075,7 @@ client.export_storage.gcswif.validate(
-**synchronizable:** `typing.Optional[bool]` +**id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated
@@ -15230,7 +16083,7 @@ client.export_storage.gcswif.validate(
-**title:** `typing.Optional[str]` — Cloud storage title +**prefix:** `typing.Optional[str]` — GCS bucket prefix
@@ -15238,7 +16091,7 @@ client.export_storage.gcswif.validate(
-**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync +**project:** `typing.Optional[int]` — Project ID
@@ -15246,7 +16099,7 @@ client.export_storage.gcswif.validate(
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs +**title:** `typing.Optional[str]` — Storage title
@@ -15266,7 +16119,7 @@ client.export_storage.gcswif.validate(
-
client.export_storage.gcswif.get(...) +
client.export_storage.gcs.get(...)
@@ -15278,7 +16131,7 @@ client.export_storage.gcswif.validate(
-Get a specific GCS export storage connection that was set up with WIF authentication. +Get a specific GCS export storage connection.
@@ -15298,7 +16151,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.gcswif.get( +client.export_storage.gcs.get( id=1, ) @@ -15336,7 +16189,7 @@ client.export_storage.gcswif.get(
-
client.export_storage.gcswif.delete(...) +
client.export_storage.gcs.delete(...)
@@ -15348,7 +16201,7 @@ client.export_storage.gcswif.get(
-Delete a specific GCS export storage connection that was set up with WIF authentication. +Delete a specific GCS export storage connection.
@@ -15368,7 +16221,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.gcswif.delete( +client.export_storage.gcs.delete( id=1, ) @@ -15406,7 +16259,7 @@ client.export_storage.gcswif.delete(
-
client.export_storage.gcswif.update(...) +
client.export_storage.gcs.update(...)
@@ -15418,7 +16271,7 @@ client.export_storage.gcswif.delete(
-Update a specific GCS export storage connection that was set up with WIF authentication. +Update a specific GCS export storage connection.
@@ -15438,7 +16291,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.gcswif.update( +client.export_storage.gcs.update( id=1, ) @@ -15472,7 +16325,7 @@ client.export_storage.gcswif.update(
-**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled +**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled.
@@ -15480,7 +16333,7 @@ client.export_storage.gcswif.update(
-**description:** `typing.Optional[str]` — Cloud storage description +**description:** `typing.Optional[str]` — Storage description
@@ -15488,7 +16341,7 @@ client.export_storage.gcswif.update(
-**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file +**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details.
@@ -15504,7 +16357,7 @@ client.export_storage.gcswif.update(
-**google_project_number:** `typing.Optional[str]` — Google project number +**prefix:** `typing.Optional[str]` — GCS bucket prefix
@@ -15512,7 +16365,7 @@ client.export_storage.gcswif.update(
-**google_service_account_email:** `typing.Optional[str]` — Google service account email +**project:** `typing.Optional[int]` — Project ID
@@ -15520,7 +16373,7 @@ client.export_storage.gcswif.update(
-**google_wif_pool_id:** `typing.Optional[str]` — Google WIF pool ID +**title:** `typing.Optional[str]` — Storage title
@@ -15528,103 +16381,69 @@ client.export_storage.gcswif.update(
-**google_wif_provider_id:** `typing.Optional[str]` — Google WIF provider ID +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
- -
-
- -**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time -
-
-
-**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time -
+
+
client.export_storage.gcs.sync(...)
-**last_sync_job:** `typing.Optional[str]` — Last sync job ID - -
-
+#### 📝 Description
-**meta:** `typing.Optional[typing.Optional[typing.Any]]` - -
-
-
-**prefix:** `typing.Optional[str]` — GCS bucket prefix - +Sync tasks from an GCS export storage connection.
- -
-
- -**project:** `typing.Optional[int]` — A unique integer value identifying this project. -
+#### 🔌 Usage +
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects - -
-
-
-**status:** `typing.Optional[StatusC5AEnum]` - -
-
+```python +from label_studio_sdk import LabelStudio -
-
+client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.export_storage.gcs.sync( + id=1, +) -**synchronizable:** `typing.Optional[bool]` - +```
- -
-
- -**title:** `typing.Optional[str]` — Cloud storage title -
+#### ⚙️ Parameters +
-**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync - -
-
-
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs +**id:** `int`
@@ -15644,7 +16463,8 @@ client.export_storage.gcswif.update(
-
client.export_storage.gcswif.sync(...) +## ExportStorage Gcswif +
client.export_storage.gcswif.list(...)
@@ -15656,7 +16476,13 @@ client.export_storage.gcswif.update(
-Sync tasks from an GCS WIF export storage. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get a list of all GCS export storage connections that were set up with WIF authentication.
@@ -15676,8 +16502,8 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.gcswif.sync( - id=1, +client.export_storage.gcswif.list( + project=1, ) ``` @@ -15694,7 +16520,15 @@ client.export_storage.gcswif.sync(
-**id:** `int` +**project:** `int` — Project ID + +
+
+ +
+
+ +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -15714,8 +16548,7 @@ client.export_storage.gcswif.sync(
-## ExportStorage Local -
client.export_storage.local.list(...) +
client.export_storage.gcswif.create(...)
@@ -15727,7 +16560,13 @@ client.export_storage.gcswif.sync(
-Get a list of all local file export storage connections. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Create an GCS export storage connection with WIF authentication to store annotations.
@@ -15747,7 +16586,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.local.list() +client.export_storage.gcswif.create( + project=1, +) ``` @@ -15763,7 +16604,7 @@ client.export_storage.local.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**project:** `int` — A unique integer value identifying this project.
@@ -15771,7 +16612,7 @@ client.export_storage.local.list()
-**project:** `typing.Optional[int]` — Project ID +**bucket:** `typing.Optional[str]` — GCS bucket name
@@ -15779,67 +16620,111 @@ client.export_storage.local.list()
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled
+ +
+
+ +**description:** `typing.Optional[str]` — Cloud storage description +
+
+
+**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file +
-
-
client.export_storage.local.create(...)
-#### 📝 Description +**google_project_id:** `typing.Optional[str]` — Google project ID + +
+
+**google_project_number:** `typing.Optional[str]` — Google project number + +
+
+
-Create a new local file export storage connection to store annotations. +**google_service_account_email:** `typing.Optional[str]` — Google service account email +
+ +
+
+ +**google_wif_pool_id:** `typing.Optional[str]` — Google WIF pool ID +
-#### 🔌 Usage -
+**google_wif_provider_id:** `typing.Optional[str]` — Google WIF provider ID + +
+
+
-```python -from label_studio_sdk import LabelStudio +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time + +
+
-client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.export_storage.local.create() +
+
-``` +**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time +
+ +
+
+ +**last_sync_job:** `typing.Optional[str]` — Last sync job ID +
-#### ⚙️ Parameters +
+
+ +**meta:** `typing.Optional[typing.Optional[typing.Any]]` + +
+
+**prefix:** `typing.Optional[str]` — GCS bucket prefix + +
+
+
-**description:** `typing.Optional[str]` — Storage description +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects
@@ -15847,7 +16732,7 @@ client.export_storage.local.create()
-**path:** `typing.Optional[str]` — Path to local directory +**status:** `typing.Optional[StatusC5AEnum]`
@@ -15855,7 +16740,7 @@ client.export_storage.local.create()
-**project:** `typing.Optional[int]` — Project ID +**synchronizable:** `typing.Optional[bool]`
@@ -15863,7 +16748,7 @@ client.export_storage.local.create()
-**regex_filter:** `typing.Optional[str]` — Regex for filtering objects +**title:** `typing.Optional[str]` — Cloud storage title
@@ -15871,7 +16756,7 @@ client.export_storage.local.create()
-**title:** `typing.Optional[str]` — Storage title +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync
@@ -15879,7 +16764,7 @@ client.export_storage.local.create()
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your directory contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs
@@ -15899,7 +16784,7 @@ client.export_storage.local.create()
-
client.export_storage.local.validate(...) +
client.export_storage.gcswif.validate(...)
@@ -15911,7 +16796,13 @@ client.export_storage.local.create()
-Validate a specific local file export storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Validate a specific GCS export storage connection that was set up with WIF authentication.
@@ -15931,7 +16822,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.local.validate() +client.export_storage.gcswif.validate( + project=1, +) ``` @@ -15947,7 +16840,7 @@ client.export_storage.local.validate()
-**description:** `typing.Optional[str]` — Storage description +**project:** `int` — A unique integer value identifying this project.
@@ -15955,7 +16848,7 @@ client.export_storage.local.validate()
-**id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated +**bucket:** `typing.Optional[str]` — GCS bucket name
@@ -15963,7 +16856,7 @@ client.export_storage.local.validate()
-**path:** `typing.Optional[str]` — Path to local directory +**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled
@@ -15971,7 +16864,7 @@ client.export_storage.local.validate()
-**project:** `typing.Optional[int]` — Project ID +**description:** `typing.Optional[str]` — Cloud storage description
@@ -15979,7 +16872,7 @@ client.export_storage.local.validate()
-**regex_filter:** `typing.Optional[str]` — Regex for filtering objects +**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file
@@ -15987,7 +16880,7 @@ client.export_storage.local.validate()
-**title:** `typing.Optional[str]` — Storage title +**google_project_id:** `typing.Optional[str]` — Google project ID
@@ -15995,7 +16888,7 @@ client.export_storage.local.validate()
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your directory contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**google_project_number:** `typing.Optional[str]` — Google project number
@@ -16003,69 +16896,111 @@ client.export_storage.local.validate()
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**google_service_account_email:** `typing.Optional[str]` — Google service account email
+ +
+
+ +**google_wif_pool_id:** `typing.Optional[str]` — Google WIF pool ID +
+
+
+**google_wif_provider_id:** `typing.Optional[str]` — Google WIF provider ID +
-
-
client.export_storage.local.get(...)
-#### 📝 Description +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time + +
+
+**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time + +
+
+
-Get a specific local file export storage connection. +**last_sync_job:** `typing.Optional[str]` — Last sync job ID +
+ +
+
+ +**meta:** `typing.Optional[typing.Optional[typing.Any]]` +
-#### 🔌 Usage -
+**prefix:** `typing.Optional[str]` — GCS bucket prefix + +
+
+
-```python -from label_studio_sdk import LabelStudio +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects + +
+
-client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.export_storage.local.get( - id=1, -) +
+
-``` +**status:** `typing.Optional[StatusC5AEnum]` +
+ +
+
+ +**synchronizable:** `typing.Optional[bool]` +
-#### ⚙️ Parameters +
+
+ +**title:** `typing.Optional[str]` — Cloud storage title + +
+
+**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync + +
+
+
-**id:** `int` +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs
@@ -16085,7 +17020,7 @@ client.export_storage.local.get(
-
client.export_storage.local.delete(...) +
client.export_storage.gcswif.get(...)
@@ -16097,7 +17032,13 @@ client.export_storage.local.get(
-Delete a specific local file export storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get a specific GCS export storage connection that was set up with WIF authentication.
@@ -16117,7 +17058,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.local.delete( +client.export_storage.gcswif.get( id=1, ) @@ -16155,7 +17096,7 @@ client.export_storage.local.delete(
-
client.export_storage.local.update(...) +
client.export_storage.gcswif.delete(...)
@@ -16167,7 +17108,13 @@ client.export_storage.local.delete(
-Update a specific local file export storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Delete a specific GCS export storage connection that was set up with WIF authentication.
@@ -16187,7 +17134,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.local.update( +client.export_storage.gcswif.delete( id=1, ) @@ -16213,15 +17160,75 @@ client.export_storage.local.update(
-**description:** `typing.Optional[str]` — Storage description +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
+ + + +
+ +
client.export_storage.gcswif.update(...)
-**path:** `typing.Optional[str]` — Path to local directory +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update a specific GCS export storage connection that was set up with WIF authentication. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.export_storage.gcswif.update( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int`
@@ -16229,7 +17236,7 @@ client.export_storage.local.update(
-**project:** `typing.Optional[int]` — Project ID +**bucket:** `typing.Optional[str]` — GCS bucket name
@@ -16237,7 +17244,7 @@ client.export_storage.local.update(
-**regex_filter:** `typing.Optional[str]` — Regex for filtering objects +**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled
@@ -16245,7 +17252,7 @@ client.export_storage.local.update(
-**title:** `typing.Optional[str]` — Storage title +**description:** `typing.Optional[str]` — Cloud storage description
@@ -16253,7 +17260,143 @@ client.export_storage.local.update(
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your directory contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file + +
+
+ +
+
+ +**google_project_id:** `typing.Optional[str]` — Google project ID + +
+
+ +
+
+ +**google_project_number:** `typing.Optional[str]` — Google project number + +
+
+ +
+
+ +**google_service_account_email:** `typing.Optional[str]` — Google service account email + +
+
+ +
+
+ +**google_wif_pool_id:** `typing.Optional[str]` — Google WIF pool ID + +
+
+ +
+
+ +**google_wif_provider_id:** `typing.Optional[str]` — Google WIF provider ID + +
+
+ +
+
+ +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time + +
+
+ +
+
+ +**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time + +
+
+ +
+
+ +**last_sync_job:** `typing.Optional[str]` — Last sync job ID + +
+
+ +
+
+ +**meta:** `typing.Optional[typing.Optional[typing.Any]]` + +
+
+ +
+
+ +**prefix:** `typing.Optional[str]` — GCS bucket prefix + +
+
+ +
+
+ +**project:** `typing.Optional[int]` — A unique integer value identifying this project. + +
+
+ +
+
+ +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects + +
+
+ +
+
+ +**status:** `typing.Optional[StatusC5AEnum]` + +
+
+ +
+
+ +**synchronizable:** `typing.Optional[bool]` + +
+
+ +
+
+ +**title:** `typing.Optional[str]` — Cloud storage title + +
+
+ +
+
+ +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync + +
+
+ +
+
+ +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs
@@ -16273,7 +17416,7 @@ client.export_storage.local.update(
-
client.export_storage.local.sync(...) +
client.export_storage.gcswif.sync(...)
@@ -16285,7 +17428,13 @@ client.export_storage.local.update(
-Sync tasks from a local file export storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Sync tasks from an GCS WIF export storage.
@@ -16305,7 +17454,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.local.sync( +client.export_storage.gcswif.sync( id=1, ) @@ -16343,8 +17492,8 @@ client.export_storage.local.sync(
-## ExportStorage Redis -
client.export_storage.redis.list(...) +## ExportStorage Local +
client.export_storage.local.list(...)
@@ -16356,7 +17505,7 @@ client.export_storage.local.sync(
-Get a list of all Redis export storage connections. +Get a list of all local file export storage connections.
@@ -16376,7 +17525,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.redis.list() +client.export_storage.local.list( + project=1, +) ``` @@ -16392,7 +17543,7 @@ client.export_storage.redis.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**project:** `int` — Project ID
@@ -16400,7 +17551,7 @@ client.export_storage.redis.list()
-**project:** `typing.Optional[int]` — Project ID +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -16420,7 +17571,7 @@ client.export_storage.redis.list()
-
client.export_storage.redis.create(...) +
client.export_storage.local.create(...)
@@ -16432,7 +17583,7 @@ client.export_storage.redis.list()
-Create a new Redis export storage connection to store annotations. +Create a new local file export storage connection to store annotations.
@@ -16452,7 +17603,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.redis.create() +client.export_storage.local.create() ``` @@ -16468,22 +17619,6 @@ client.export_storage.redis.create()
-**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled. - -
-
- -
-
- -**db:** `typing.Optional[int]` — Database ID of database to use - -
-
- -
-
- **description:** `typing.Optional[str]` — Storage description
@@ -16492,15 +17627,7 @@ client.export_storage.redis.create()
-**host:** `typing.Optional[str]` — Server Host IP (optional) - -
-
- -
-
- -**password:** `typing.Optional[str]` — Server Password (optional) +**path:** `typing.Optional[str]` — Path to local directory
@@ -16508,7 +17635,7 @@ client.export_storage.redis.create()
-**path:** `typing.Optional[str]` — Storage prefix (optional) +**project:** `typing.Optional[int]` — Project ID
@@ -16516,7 +17643,7 @@ client.export_storage.redis.create()
-**port:** `typing.Optional[str]` — Server Port (optional) +**regex_filter:** `typing.Optional[str]` — Regex for filtering objects
@@ -16524,7 +17651,7 @@ client.export_storage.redis.create()
-**project:** `typing.Optional[int]` — Project ID +**title:** `typing.Optional[str]` — Storage title
@@ -16532,7 +17659,7 @@ client.export_storage.redis.create()
-**title:** `typing.Optional[str]` — Storage title +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your directory contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -16552,7 +17679,7 @@ client.export_storage.redis.create()
-
client.export_storage.redis.validate(...) +
client.export_storage.local.validate(...)
@@ -16564,7 +17691,7 @@ client.export_storage.redis.create()
-Validate a specific Redis export storage connection. +Validate a specific local file export storage connection.
@@ -16584,7 +17711,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.redis.validate() +client.export_storage.local.validate() ``` @@ -16600,22 +17727,6 @@ client.export_storage.redis.validate()
-**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled. - -
-
- -
-
- -**db:** `typing.Optional[int]` — Database ID of database to use - -
-
- -
-
- **description:** `typing.Optional[str]` — Storage description
@@ -16624,14 +17735,6 @@ client.export_storage.redis.validate()
-**host:** `typing.Optional[str]` — Server Host IP (optional) - -
-
- -
-
- **id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated
@@ -16640,7 +17743,7 @@ client.export_storage.redis.validate()
-**password:** `typing.Optional[str]` — Server Password (optional) +**path:** `typing.Optional[str]` — Path to local directory
@@ -16648,7 +17751,7 @@ client.export_storage.redis.validate()
-**path:** `typing.Optional[str]` — Storage prefix (optional) +**project:** `typing.Optional[int]` — Project ID
@@ -16656,7 +17759,7 @@ client.export_storage.redis.validate()
-**port:** `typing.Optional[str]` — Server Port (optional) +**regex_filter:** `typing.Optional[str]` — Regex for filtering objects
@@ -16664,7 +17767,7 @@ client.export_storage.redis.validate()
-**project:** `typing.Optional[int]` — Project ID +**title:** `typing.Optional[str]` — Storage title
@@ -16672,7 +17775,7 @@ client.export_storage.redis.validate()
-**title:** `typing.Optional[str]` — Storage title +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your directory contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -16692,7 +17795,7 @@ client.export_storage.redis.validate()
-
client.export_storage.redis.get(...) +
client.export_storage.local.get(...)
@@ -16704,7 +17807,7 @@ client.export_storage.redis.validate()
-Get a specific Redis export storage connection. +Get a specific local file export storage connection.
@@ -16724,7 +17827,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.redis.get( +client.export_storage.local.get( id=1, ) @@ -16762,7 +17865,7 @@ client.export_storage.redis.get(
-
client.export_storage.redis.delete(...) +
client.export_storage.local.delete(...)
@@ -16774,7 +17877,7 @@ client.export_storage.redis.get(
-Delete a specific Redis export storage connection. +Delete a specific local file export storage connection.
@@ -16794,7 +17897,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.redis.delete( +client.export_storage.local.delete( id=1, ) @@ -16832,7 +17935,7 @@ client.export_storage.redis.delete(
-
client.export_storage.redis.update(...) +
client.export_storage.local.update(...)
@@ -16844,7 +17947,7 @@ client.export_storage.redis.delete(
-Update a specific Redis export storage connection. +Update a specific local file export storage connection.
@@ -16864,7 +17967,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.redis.update( +client.export_storage.local.update( id=1, ) @@ -16890,22 +17993,6 @@ client.export_storage.redis.update(
-**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled. - -
-
- -
-
- -**db:** `typing.Optional[int]` — Database ID of database to use - -
-
- -
-
- **description:** `typing.Optional[str]` — Storage description
@@ -16914,15 +18001,7 @@ client.export_storage.redis.update(
-**host:** `typing.Optional[str]` — Server Host IP (optional) - -
-
- -
-
- -**password:** `typing.Optional[str]` — Server Password (optional) +**path:** `typing.Optional[str]` — Path to local directory
@@ -16930,7 +18009,7 @@ client.export_storage.redis.update(
-**path:** `typing.Optional[str]` — Storage prefix (optional) +**project:** `typing.Optional[int]` — Project ID
@@ -16938,7 +18017,7 @@ client.export_storage.redis.update(
-**port:** `typing.Optional[str]` — Server Port (optional) +**regex_filter:** `typing.Optional[str]` — Regex for filtering objects
@@ -16946,7 +18025,7 @@ client.export_storage.redis.update(
-**project:** `typing.Optional[int]` — Project ID +**title:** `typing.Optional[str]` — Storage title
@@ -16954,7 +18033,7 @@ client.export_storage.redis.update(
-**title:** `typing.Optional[str]` — Storage title +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your directory contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -16974,7 +18053,7 @@ client.export_storage.redis.update(
-
client.export_storage.redis.sync(...) +
client.export_storage.local.sync(...)
@@ -16986,7 +18065,7 @@ client.export_storage.redis.update(
-Sync tasks from a Redis export storage connection. +Sync tasks from a local file export storage connection.
@@ -17006,7 +18085,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.redis.sync( +client.export_storage.local.sync( id=1, ) @@ -17044,8 +18123,8 @@ client.export_storage.redis.sync(
-## ExportStorage S3 -
client.export_storage.s3.list(...) +## ExportStorage Redis +
client.export_storage.redis.list(...)
@@ -17057,7 +18136,7 @@ client.export_storage.redis.sync(
-Get a list of all S3 export storage connections. +Get a list of all Redis export storage connections.
@@ -17077,7 +18156,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.s3.list() +client.export_storage.redis.list( + project=1, +) ``` @@ -17093,7 +18174,7 @@ client.export_storage.s3.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**project:** `int` — Project ID
@@ -17101,7 +18182,7 @@ client.export_storage.s3.list()
-**project:** `typing.Optional[int]` — Project ID +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -17121,7 +18202,7 @@ client.export_storage.s3.list()
-
client.export_storage.s3.create(...) +
client.export_storage.redis.create(...)
@@ -17133,7 +18214,7 @@ client.export_storage.s3.list()
-Create a new S3 export storage connection to store annotations. +Create a new Redis export storage connection to store annotations.
@@ -17153,7 +18234,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.s3.create() +client.export_storage.redis.create() ``` @@ -17169,15 +18250,7 @@ client.export_storage.s3.create()
-**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID - -
-
- -
-
- -**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY +**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled.
@@ -17185,7 +18258,7 @@ client.export_storage.s3.create()
-**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN +**db:** `typing.Optional[int]` — Database ID of database to use
@@ -17193,7 +18266,7 @@ client.export_storage.s3.create()
-**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID +**description:** `typing.Optional[str]` — Storage description
@@ -17201,7 +18274,7 @@ client.export_storage.s3.create()
-**bucket:** `typing.Optional[str]` — S3 bucket name +**host:** `typing.Optional[str]` — Server Host IP (optional)
@@ -17209,7 +18282,7 @@ client.export_storage.s3.create()
-**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled. +**password:** `typing.Optional[str]` — Server Password (optional)
@@ -17217,7 +18290,7 @@ client.export_storage.s3.create()
-**description:** `typing.Optional[str]` — Storage description +**path:** `typing.Optional[str]` — Storage prefix (optional)
@@ -17225,7 +18298,7 @@ client.export_storage.s3.create()
-**prefix:** `typing.Optional[str]` — S3 bucket prefix +**port:** `typing.Optional[str]` — Server Port (optional)
@@ -17241,22 +18314,6 @@ client.export_storage.s3.create()
-**region_name:** `typing.Optional[str]` — AWS Region - -
-
- -
-
- -**s3endpoint:** `typing.Optional[str]` — S3 Endpoint - -
-
- -
-
- **title:** `typing.Optional[str]` — Storage title
@@ -17277,7 +18334,7 @@ client.export_storage.s3.create()
-
client.export_storage.s3.validate(...) +
client.export_storage.redis.validate(...)
@@ -17289,7 +18346,7 @@ client.export_storage.s3.create()
-Validate a specific S3 export storage connection. +Validate a specific Redis export storage connection.
@@ -17309,7 +18366,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.s3.validate() +client.export_storage.redis.validate() ``` @@ -17325,7 +18382,7 @@ client.export_storage.s3.validate()
-**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID +**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled.
@@ -17333,7 +18390,7 @@ client.export_storage.s3.validate()
-**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY +**db:** `typing.Optional[int]` — Database ID of database to use
@@ -17341,7 +18398,7 @@ client.export_storage.s3.validate()
-**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN +**description:** `typing.Optional[str]` — Storage description
@@ -17349,7 +18406,7 @@ client.export_storage.s3.validate()
-**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID +**host:** `typing.Optional[str]` — Server Host IP (optional)
@@ -17357,7 +18414,7 @@ client.export_storage.s3.validate()
-**bucket:** `typing.Optional[str]` — S3 bucket name +**id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated
@@ -17365,7 +18422,7 @@ client.export_storage.s3.validate()
-**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled. +**password:** `typing.Optional[str]` — Server Password (optional)
@@ -17373,7 +18430,7 @@ client.export_storage.s3.validate()
-**description:** `typing.Optional[str]` — Storage description +**path:** `typing.Optional[str]` — Storage prefix (optional)
@@ -17381,7 +18438,7 @@ client.export_storage.s3.validate()
-**id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated +**port:** `typing.Optional[str]` — Server Port (optional)
@@ -17389,7 +18446,7 @@ client.export_storage.s3.validate()
-**prefix:** `typing.Optional[str]` — S3 bucket prefix +**project:** `typing.Optional[int]` — Project ID
@@ -17397,7 +18454,7 @@ client.export_storage.s3.validate()
-**project:** `typing.Optional[int]` — Project ID +**title:** `typing.Optional[str]` — Storage title
@@ -17405,23 +18462,69 @@ client.export_storage.s3.validate()
-**region_name:** `typing.Optional[str]` — AWS Region +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
+ + + + +
+
client.export_storage.redis.get(...)
-**s3endpoint:** `typing.Optional[str]` — S3 Endpoint - +#### 📝 Description + +
+
+ +
+
+ +Get a specific Redis export storage connection.
+
+
+ +#### 🔌 Usage
-**title:** `typing.Optional[str]` — Storage title +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.export_storage.redis.get( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int`
@@ -17441,7 +18544,7 @@ client.export_storage.s3.validate()
-
client.export_storage.s3.get(...) +
client.export_storage.redis.delete(...)
@@ -17453,7 +18556,7 @@ client.export_storage.s3.validate()
-Get a specific S3 export storage connection. +Delete a specific Redis export storage connection.
@@ -17473,7 +18576,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.s3.get( +client.export_storage.redis.delete( id=1, ) @@ -17511,7 +18614,7 @@ client.export_storage.s3.get(
-
client.export_storage.s3.delete(...) +
client.export_storage.redis.update(...)
@@ -17523,7 +18626,7 @@ client.export_storage.s3.get(
-Delete a specific S3 export storage connection. +Update a specific Redis export storage connection.
@@ -17543,7 +18646,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.s3.delete( +client.export_storage.redis.update( id=1, ) @@ -17569,6 +18672,78 @@ client.export_storage.s3.delete(
+**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled. + +
+
+ +
+
+ +**db:** `typing.Optional[int]` — Database ID of database to use + +
+
+ +
+
+ +**description:** `typing.Optional[str]` — Storage description + +
+
+ +
+
+ +**host:** `typing.Optional[str]` — Server Host IP (optional) + +
+
+ +
+
+ +**password:** `typing.Optional[str]` — Server Password (optional) + +
+
+ +
+
+ +**path:** `typing.Optional[str]` — Storage prefix (optional) + +
+
+ +
+
+ +**port:** `typing.Optional[str]` — Server Port (optional) + +
+
+ +
+
+ +**project:** `typing.Optional[int]` — Project ID + +
+
+ +
+
+ +**title:** `typing.Optional[str]` — Storage title + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -17581,7 +18756,7 @@ client.export_storage.s3.delete(
-
client.export_storage.s3.update(...) +
client.export_storage.redis.sync(...)
@@ -17593,7 +18768,7 @@ client.export_storage.s3.delete(
-Update a specific S3 export storage connection. +Sync tasks from a Redis export storage connection.
@@ -17613,7 +18788,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.s3.update( +client.export_storage.redis.sync( id=1, ) @@ -17639,87 +18814,70 @@ client.export_storage.s3.update(
-**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
- -
-
- -**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY -
-
-
-**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN -
+
+## ExportStorage S3 +
client.export_storage.s3.list(...)
-**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID - -
-
+#### 📝 Description
-**bucket:** `typing.Optional[str]` — S3 bucket name - -
-
-
-**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled. - +Get a list of all S3 export storage connections.
- -
-
- -**description:** `typing.Optional[str]` — Storage description -
+#### 🔌 Usage +
-**prefix:** `typing.Optional[str]` — S3 bucket prefix - -
-
-
-**project:** `typing.Optional[int]` — Project ID - +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.export_storage.s3.list( + project=1, +) + +``` +
+
+#### ⚙️ Parameters +
-**region_name:** `typing.Optional[str]` — AWS Region - -
-
-
-**s3endpoint:** `typing.Optional[str]` — S3 Endpoint +**project:** `int` — Project ID
@@ -17727,7 +18885,7 @@ client.export_storage.s3.update(
-**title:** `typing.Optional[str]` — Storage title +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -17747,7 +18905,7 @@ client.export_storage.s3.update(
-
client.export_storage.s3.sync(...) +
client.export_storage.s3.create(...)
@@ -17759,7 +18917,7 @@ client.export_storage.s3.update(
-Sync tasks from an S3 export storage connection. +Create a new S3 export storage connection to store annotations.
@@ -17779,9 +18937,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.s3.sync( - id=1, -) +client.export_storage.s3.create() ``` @@ -17797,7 +18953,7 @@ client.export_storage.s3.sync(
-**id:** `int` +**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID
@@ -17805,68 +18961,79 @@ client.export_storage.s3.sync(
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY
- -
+
+
+**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN +
-
-## ExportStorage S3S -
client.export_storage.s3s.list(...)
-#### 📝 Description +**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID + +
+
+**bucket:** `typing.Optional[str]` — S3 bucket name + +
+
+
-Get a list of all S3 export storage connections that were set up with IAM role access. -
-
+**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled. + -#### 🔌 Usage -
+**description:** `typing.Optional[str]` — Storage description + +
+
+
-```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.export_storage.s3s.list() - -``` +**prefix:** `typing.Optional[str]` — S3 bucket prefix +
+ +
+
+ +**project:** `typing.Optional[int]` — Project ID +
-#### ⚙️ Parameters -
+**region_name:** `typing.Optional[str]` — AWS Region + +
+
+
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**s3endpoint:** `typing.Optional[str]` — S3 Endpoint
@@ -17874,7 +19041,7 @@ client.export_storage.s3s.list()
-**project:** `typing.Optional[int]` — Project ID +**title:** `typing.Optional[str]` — Storage title
@@ -17894,7 +19061,7 @@ client.export_storage.s3s.list()
-
client.export_storage.s3s.create(...) +
client.export_storage.s3.validate(...)
@@ -17906,7 +19073,7 @@ client.export_storage.s3s.list()
-Create an S3 export storage connection with IAM role access to store annotations. +Validate a specific S3 export storage connection.
@@ -17926,10 +19093,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.s3s.create( - project=1, - role_arn="role_arn", -) +client.export_storage.s3.validate() ``` @@ -17945,7 +19109,7 @@ client.export_storage.s3s.create(
-**project:** `int` — A unique integer value identifying this project. +**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID
@@ -17953,7 +19117,7 @@ client.export_storage.s3s.create(
-**role_arn:** `str` — AWS RoleArn +**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY
@@ -17961,7 +19125,7 @@ client.export_storage.s3s.create(
-**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID +**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN
@@ -17969,7 +19133,7 @@ client.export_storage.s3s.create(
-**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY +**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID
@@ -17977,7 +19141,7 @@ client.export_storage.s3s.create(
-**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN +**bucket:** `typing.Optional[str]` — S3 bucket name
@@ -17985,7 +19149,7 @@ client.export_storage.s3s.create(
-**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID +**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled.
@@ -17993,7 +19157,7 @@ client.export_storage.s3s.create(
-**bucket:** `typing.Optional[str]` — S3 bucket name +**description:** `typing.Optional[str]` — Storage description
@@ -18001,7 +19165,7 @@ client.export_storage.s3s.create(
-**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled +**id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated
@@ -18009,7 +19173,7 @@ client.export_storage.s3s.create(
-**description:** `typing.Optional[str]` — Cloud storage description +**prefix:** `typing.Optional[str]` — S3 bucket prefix
@@ -18017,7 +19181,7 @@ client.export_storage.s3s.create(
-**external_id:** `typing.Optional[str]` — AWS ExternalId +**project:** `typing.Optional[int]` — Project ID
@@ -18025,7 +19189,7 @@ client.export_storage.s3s.create(
-**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time +**region_name:** `typing.Optional[str]` — AWS Region
@@ -18033,7 +19197,7 @@ client.export_storage.s3s.create(
-**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time +**s3endpoint:** `typing.Optional[str]` — S3 Endpoint
@@ -18041,7 +19205,7 @@ client.export_storage.s3s.create(
-**last_sync_job:** `typing.Optional[str]` — Last sync job ID +**title:** `typing.Optional[str]` — Storage title
@@ -18049,47 +19213,69 @@ client.export_storage.s3s.create(
-**legacy_auth:** `typing.Optional[bool]` +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
-
-
-**meta:** `typing.Optional[typing.Optional[typing.Any]]` -
+
+
client.export_storage.s3.get(...)
-**prefix:** `typing.Optional[str]` — S3 bucket prefix - -
-
+#### 📝 Description
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects - +
+
+ +Get a specific S3 export storage connection. +
+
+#### 🔌 Usage +
-**region_name:** `typing.Optional[str]` — AWS Region - +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.export_storage.s3.get( + id=1, +) + +``` +
+
+#### ⚙️ Parameters +
-**s3endpoint:** `typing.Optional[str]` — S3 Endpoint +
+
+ +**id:** `int`
@@ -18097,39 +19283,69 @@ client.export_storage.s3s.create(
-**status:** `typing.Optional[StatusC5AEnum]` +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
-
-
-**synchronizable:** `typing.Optional[bool]` -
+
+
client.export_storage.s3.delete(...)
-**title:** `typing.Optional[str]` — Cloud storage title - +#### 📝 Description + +
+
+ +
+
+ +Delete a specific S3 export storage connection. +
+
+#### 🔌 Usage +
-**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync - +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.export_storage.s3.delete( + id=1, +) + +``` +
+
+#### ⚙️ Parameters +
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs +
+
+ +**id:** `int`
@@ -18149,7 +19365,7 @@ client.export_storage.s3s.create(
-
client.export_storage.s3s.validate(...) +
client.export_storage.s3.update(...)
@@ -18161,7 +19377,7 @@ client.export_storage.s3s.create(
-Validate a specific S3 export storage connection that was set up with IAM role access. +Update a specific S3 export storage connection.
@@ -18181,9 +19397,8 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.s3s.validate( - project=1, - role_arn="role_arn", +client.export_storage.s3.update( + id=1, ) ``` @@ -18200,15 +19415,7 @@ client.export_storage.s3s.validate(
-**project:** `int` — A unique integer value identifying this project. - -
-
- -
-
- -**role_arn:** `str` — AWS RoleArn +**id:** `int`
@@ -18256,55 +19463,7 @@ client.export_storage.s3s.validate(
-**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled - -
-
- -
-
- -**description:** `typing.Optional[str]` — Cloud storage description - -
-
- -
-
- -**external_id:** `typing.Optional[str]` — AWS ExternalId - -
-
- -
-
- -**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time - -
-
- -
-
- -**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time - -
-
- -
-
- -**last_sync_job:** `typing.Optional[str]` — Last sync job ID - -
-
- -
-
- -**legacy_auth:** `typing.Optional[bool]` +**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled.
@@ -18312,7 +19471,7 @@ client.export_storage.s3s.validate(
-**meta:** `typing.Optional[typing.Optional[typing.Any]]` +**description:** `typing.Optional[str]` — Storage description
@@ -18328,7 +19487,7 @@ client.export_storage.s3s.validate(
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects +**project:** `typing.Optional[int]` — Project ID
@@ -18352,39 +19511,7 @@ client.export_storage.s3s.validate(
-**status:** `typing.Optional[StatusC5AEnum]` - -
-
- -
-
- -**synchronizable:** `typing.Optional[bool]` - -
-
- -
-
- -**title:** `typing.Optional[str]` — Cloud storage title - -
-
- -
-
- -**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync - -
-
- -
-
- -**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs +**title:** `typing.Optional[str]` — Storage title
@@ -18404,7 +19531,7 @@ client.export_storage.s3s.validate(
-
client.export_storage.s3s.get(...) +
client.export_storage.s3.sync(...)
@@ -18416,7 +19543,7 @@ client.export_storage.s3s.validate(
-Get a specific S3 export storage connection that was set up with IAM role access. +Sync tasks from an S3 export storage connection.
@@ -18436,7 +19563,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.s3s.get( +client.export_storage.s3.sync( id=1, ) @@ -18474,7 +19601,8 @@ client.export_storage.s3s.get(
-
client.export_storage.s3s.delete(...) +## ExportStorage S3S +
client.export_storage.s3s.list(...)
@@ -18486,7 +19614,13 @@ client.export_storage.s3s.get(
-Delete a specific S3 export storage connection that was set up with IAM role access. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get a list of all S3 export storage connections that were set up with IAM role access.
@@ -18506,8 +19640,8 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.s3s.delete( - id=1, +client.export_storage.s3s.list( + project=1, ) ``` @@ -18524,7 +19658,15 @@ client.export_storage.s3s.delete(
-**id:** `int` +**project:** `int` — Project ID + +
+
+ +
+
+ +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -18544,7 +19686,7 @@ client.export_storage.s3s.delete(
-
client.export_storage.s3s.update(...) +
client.export_storage.s3s.create(...)
@@ -18556,7 +19698,13 @@ client.export_storage.s3s.delete(
-Update a specific S3 export storage connection that was set up with IAM role access. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Create an S3 export storage connection with IAM role access to store annotations.
@@ -18576,8 +19724,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.s3s.update( - id=1, +client.export_storage.s3s.create( + project=1, + role_arn="role_arn", ) ``` @@ -18594,7 +19743,15 @@ client.export_storage.s3s.update(
-**id:** `int` +**project:** `int` — A unique integer value identifying this project. + +
+
+ +
+
+ +**role_arn:** `str` — AWS RoleArn
@@ -18714,14 +19871,6 @@ client.export_storage.s3s.update(
-**project:** `typing.Optional[int]` — A unique integer value identifying this project. - -
-
- -
-
- **regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects
@@ -18738,14 +19887,6 @@ client.export_storage.s3s.update(
-**role_arn:** `typing.Optional[str]` — AWS RoleArn - -
-
- -
-
- **s3endpoint:** `typing.Optional[str]` — S3 Endpoint
@@ -18806,7 +19947,7 @@ client.export_storage.s3s.update(
-
client.export_storage.s3s.sync(...) +
client.export_storage.s3s.validate(...)
@@ -18818,7 +19959,13 @@ client.export_storage.s3s.update(
-Sync tasks from an S3 export storage. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Validate a specific S3 export storage connection that was set up with IAM role access.
@@ -18838,8 +19985,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.export_storage.s3s.sync( - id=1, +client.export_storage.s3s.validate( + project=1, + role_arn="role_arn", ) ``` @@ -18856,7 +20004,7 @@ client.export_storage.s3s.sync(
-**id:** `int` +**project:** `int` — A unique integer value identifying this project.
@@ -18864,68 +20012,47 @@ client.export_storage.s3s.sync(
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**role_arn:** `str` — AWS RoleArn
- -
+
+
+**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID +
-
-## ImportStorage Azure -
client.import_storage.azure.list(...)
-#### 📝 Description - -
-
+**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY + +
+
-Get list of all Azure import storage connections. -
-
+**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN +
-#### 🔌 Usage -
-
-
- -```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.import_storage.azure.list() - -``` -
-
+**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID +
-#### ⚙️ Parameters -
-
-
- -**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**bucket:** `typing.Optional[str]` — S3 bucket name
@@ -18933,7 +20060,7 @@ client.import_storage.azure.list()
-**project:** `typing.Optional[int]` — Project ID +**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled
@@ -18941,67 +20068,47 @@ client.import_storage.azure.list()
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**description:** `typing.Optional[str]` — Cloud storage description
-
-
+
+
+**external_id:** `typing.Optional[str]` — AWS ExternalId +
-
-
client.import_storage.azure.create(...)
-#### 📝 Description - -
-
+**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time + +
+
-Create new Azure import storage -
-
+**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time +
-#### 🔌 Usage - -
-
-
-```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.import_storage.azure.create() - -``` -
-
+**last_sync_job:** `typing.Optional[str]` — Last sync job ID +
-#### ⚙️ Parameters -
-
-
- -**account_key:** `typing.Optional[str]` — Azure Blob account key +**legacy_auth:** `typing.Optional[bool]`
@@ -19009,7 +20116,7 @@ client.import_storage.azure.create()
-**account_name:** `typing.Optional[str]` — Azure Blob account name +**meta:** `typing.Optional[typing.Optional[typing.Any]]`
@@ -19017,7 +20124,7 @@ client.import_storage.azure.create()
-**container:** `typing.Optional[str]` — Azure blob container +**prefix:** `typing.Optional[str]` — S3 bucket prefix
@@ -19025,7 +20132,7 @@ client.import_storage.azure.create()
-**description:** `typing.Optional[str]` — Storage description +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects
@@ -19033,7 +20140,7 @@ client.import_storage.azure.create()
-**prefix:** `typing.Optional[str]` — Azure blob prefix name +**region_name:** `typing.Optional[str]` — AWS Region
@@ -19041,7 +20148,7 @@ client.import_storage.azure.create()
-**presign:** `typing.Optional[bool]` — Presign URLs for direct download +**s3endpoint:** `typing.Optional[str]` — S3 Endpoint
@@ -19049,7 +20156,7 @@ client.import_storage.azure.create()
-**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes +**status:** `typing.Optional[StatusC5AEnum]`
@@ -19057,7 +20164,7 @@ client.import_storage.azure.create()
-**project:** `typing.Optional[int]` — Project ID +**synchronizable:** `typing.Optional[bool]`
@@ -19065,7 +20172,7 @@ client.import_storage.azure.create()
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported. +**title:** `typing.Optional[str]` — Cloud storage title
@@ -19073,7 +20180,7 @@ client.import_storage.azure.create()
-**title:** `typing.Optional[str]` — Storage title +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync
@@ -19081,7 +20188,7 @@ client.import_storage.azure.create()
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs
@@ -19101,7 +20208,7 @@ client.import_storage.azure.create()
-
client.import_storage.azure.validate(...) +
client.export_storage.s3s.get(...)
@@ -19113,7 +20220,13 @@ client.import_storage.azure.create()
-Validate a specific Azure import storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get a specific S3 export storage connection that was set up with IAM role access.
@@ -19133,7 +20246,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.azure.validate() +client.export_storage.s3s.get( + id=1, +) ``` @@ -19149,7 +20264,7 @@ client.import_storage.azure.validate()
-**account_key:** `typing.Optional[str]` — Azure Blob account key +**id:** `int`
@@ -19157,87 +20272,75 @@ client.import_storage.azure.validate()
-**account_name:** `typing.Optional[str]` — Azure Blob account name +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
- -
-
- -**container:** `typing.Optional[str]` — Azure blob container -
-
-
-**description:** `typing.Optional[str]` — Storage description -
+
+
client.export_storage.s3s.delete(...)
-**id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated - -
-
+#### 📝 Description
-**prefix:** `typing.Optional[str]` — Azure blob prefix name - -
-
-
-**presign:** `typing.Optional[bool]` — Presign URLs for direct download - + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Delete a specific S3 export storage connection that was set up with IAM role access.
- -
-
- -**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes -
+#### 🔌 Usage +
-**project:** `typing.Optional[int]` — Project ID - -
-
-
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported. - +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.export_storage.s3s.delete( + id=1, +) + +```
+ + + +#### ⚙️ Parameters
-**title:** `typing.Optional[str]` — Storage title - -
-
-
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**id:** `int`
@@ -19257,7 +20360,7 @@ client.import_storage.azure.validate()
-
client.import_storage.azure.get(...) +
client.export_storage.s3s.update(...)
@@ -19269,7 +20372,13 @@ client.import_storage.azure.validate()
-Get a specific Azure import storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update a specific S3 export storage connection that was set up with IAM role access.
@@ -19289,7 +20398,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.azure.get( +client.export_storage.s3s.update( id=1, ) @@ -19315,69 +20424,47 @@ client.import_storage.azure.get(
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID
- -
+
+
+**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY +
-
-
client.import_storage.azure.delete(...)
-#### 📝 Description - -
-
+**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN + +
+
-Delete a specific Azure import storage connection. -
-
+**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID +
-#### 🔌 Usage - -
-
-
-```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.import_storage.azure.delete( - id=1, -) - -``` -
-
+**bucket:** `typing.Optional[str]` — S3 bucket name +
-#### ⚙️ Parameters - -
-
-
-**id:** `int` +**can_delete_objects:** `typing.Optional[bool]` — Deletion from storage enabled
@@ -19385,69 +20472,55 @@ client.import_storage.azure.delete(
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**description:** `typing.Optional[str]` — Cloud storage description
-
-
+
+
+**external_id:** `typing.Optional[str]` — AWS ExternalId +
-
-
client.import_storage.azure.update(...)
-#### 📝 Description - -
-
+**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time + +
+
-Update a specific Azure import storage connection. -
-
+**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time +
-#### 🔌 Usage -
-
-
- -```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.import_storage.azure.update( - id=1, -) - -``` -
-
+**last_sync_job:** `typing.Optional[str]` — Last sync job ID +
-#### ⚙️ Parameters -
+**legacy_auth:** `typing.Optional[bool]` + +
+
+
-**id:** `int` +**meta:** `typing.Optional[typing.Optional[typing.Any]]`
@@ -19455,7 +20528,7 @@ client.import_storage.azure.update(
-**account_key:** `typing.Optional[str]` — Azure Blob account key +**prefix:** `typing.Optional[str]` — S3 bucket prefix
@@ -19463,7 +20536,7 @@ client.import_storage.azure.update(
-**account_name:** `typing.Optional[str]` — Azure Blob account name +**project:** `typing.Optional[int]` — A unique integer value identifying this project.
@@ -19471,7 +20544,7 @@ client.import_storage.azure.update(
-**container:** `typing.Optional[str]` — Azure blob container +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects
@@ -19479,7 +20552,7 @@ client.import_storage.azure.update(
-**description:** `typing.Optional[str]` — Storage description +**region_name:** `typing.Optional[str]` — AWS Region
@@ -19487,7 +20560,7 @@ client.import_storage.azure.update(
-**prefix:** `typing.Optional[str]` — Azure blob prefix name +**role_arn:** `typing.Optional[str]` — AWS RoleArn
@@ -19495,7 +20568,7 @@ client.import_storage.azure.update(
-**presign:** `typing.Optional[bool]` — Presign URLs for direct download +**s3endpoint:** `typing.Optional[str]` — S3 Endpoint
@@ -19503,7 +20576,7 @@ client.import_storage.azure.update(
-**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes +**status:** `typing.Optional[StatusC5AEnum]`
@@ -19511,7 +20584,7 @@ client.import_storage.azure.update(
-**project:** `typing.Optional[int]` — Project ID +**synchronizable:** `typing.Optional[bool]`
@@ -19519,7 +20592,7 @@ client.import_storage.azure.update(
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported. +**title:** `typing.Optional[str]` — Cloud storage title
@@ -19527,7 +20600,7 @@ client.import_storage.azure.update(
-**title:** `typing.Optional[str]` — Storage title +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync
@@ -19535,7 +20608,7 @@ client.import_storage.azure.update(
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs
@@ -19555,7 +20628,7 @@ client.import_storage.azure.update(
-
client.import_storage.azure.sync(...) +
client.export_storage.s3s.sync(...)
@@ -19567,7 +20640,13 @@ client.import_storage.azure.update(
-Sync tasks from an Azure import storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Sync tasks from an S3 export storage.
@@ -19587,7 +20666,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.azure.sync( +client.export_storage.s3s.sync( id=1, ) @@ -19605,7 +20684,7 @@ client.import_storage.azure.sync(
-**id:** `int` — Storage ID +**id:** `int`
@@ -19625,8 +20704,8 @@ client.import_storage.azure.sync(
-## ImportStorage AzureSpi -
client.import_storage.azure_spi.list(...) +## ImportStorage Azure +
client.import_storage.azure.list(...)
@@ -19638,7 +20717,7 @@ client.import_storage.azure.sync(
-Get list of all Azure import storage connections set up with Service Principal authentication. +Get list of all Azure import storage connections.
@@ -19658,7 +20737,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.azure_spi.list() +client.import_storage.azure.list( + project=1, +) ``` @@ -19674,7 +20755,7 @@ client.import_storage.azure_spi.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**project:** `int` — Project ID
@@ -19682,7 +20763,7 @@ client.import_storage.azure_spi.list()
-**project:** `typing.Optional[int]` — Project ID +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -19702,7 +20783,7 @@ client.import_storage.azure_spi.list()
-
client.import_storage.azure_spi.create(...) +
client.import_storage.azure.create(...)
@@ -19714,7 +20795,7 @@ client.import_storage.azure_spi.list()
-Create Azure import storage with Service Principal authentication. +Create new Azure import storage
@@ -19734,9 +20815,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.azure_spi.create( - project=1, -) +client.import_storage.azure.create() ``` @@ -19752,7 +20831,7 @@ client.import_storage.azure_spi.create(
-**project:** `int` — A unique integer value identifying this project. +**account_key:** `typing.Optional[str]` — Azure Blob account key
@@ -19768,22 +20847,6 @@ client.import_storage.azure_spi.create(
-**client_id:** `typing.Optional[str]` — Azure Blob Service Principal Client ID - -
-
- -
-
- -**client_secret:** `typing.Optional[str]` — Azure Blob Service Principal Client Secret - -
-
- -
-
- **container:** `typing.Optional[str]` — Azure blob container
@@ -19792,39 +20855,7 @@ client.import_storage.azure_spi.create(
-**description:** `typing.Optional[str]` — Cloud storage description - -
-
- -
-
- -**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time - -
-
- -
-
- -**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time - -
-
- -
-
- -**last_sync_job:** `typing.Optional[str]` — Last sync job ID - -
-
- -
-
- -**meta:** `typing.Optional[typing.Optional[typing.Any]]` +**description:** `typing.Optional[str]` — Storage description
@@ -19840,39 +20871,7 @@ client.import_storage.azure_spi.create(
-**presign:** `typing.Optional[bool]` - -
-
- -
-
- -**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes) - -
-
- -
-
- -**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects - -
-
- -
-
- -**status:** `typing.Optional[StatusC5AEnum]` - -
-
- -
-
- -**synchronizable:** `typing.Optional[bool]` +**presign:** `typing.Optional[bool]` — Presign URLs for direct download
@@ -19880,7 +20879,7 @@ client.import_storage.azure_spi.create(
-**tenant_id:** `typing.Optional[str]` — Azure Tenant ID +**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes
@@ -19888,7 +20887,7 @@ client.import_storage.azure_spi.create(
-**title:** `typing.Optional[str]` — Cloud storage title +**project:** `typing.Optional[int]` — Project ID
@@ -19896,7 +20895,7 @@ client.import_storage.azure_spi.create(
-**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.
@@ -19904,7 +20903,7 @@ client.import_storage.azure_spi.create(
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs +**title:** `typing.Optional[str]` — Storage title
@@ -19912,7 +20911,7 @@ client.import_storage.azure_spi.create(
-**user_delegation_key:** `typing.Optional[str]` — User Delegation Key (Backend) +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -19932,7 +20931,7 @@ client.import_storage.azure_spi.create(
-
client.import_storage.azure_spi.validate(...) +
client.import_storage.azure.validate(...)
@@ -19944,7 +20943,7 @@ client.import_storage.azure_spi.create(
-Validate a specific Azure import storage connection that was set up with Service Principal authentication. +Validate a specific Azure import storage connection.
@@ -19964,9 +20963,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.azure_spi.validate( - project=1, -) +client.import_storage.azure.validate() ``` @@ -19982,7 +20979,7 @@ client.import_storage.azure_spi.validate(
-**project:** `int` — A unique integer value identifying this project. +**account_key:** `typing.Optional[str]` — Azure Blob account key
@@ -19998,7 +20995,7 @@ client.import_storage.azure_spi.validate(
-**client_id:** `typing.Optional[str]` — Azure Blob Service Principal Client ID +**container:** `typing.Optional[str]` — Azure blob container
@@ -20006,7 +21003,7 @@ client.import_storage.azure_spi.validate(
-**client_secret:** `typing.Optional[str]` — Azure Blob Service Principal Client Secret +**description:** `typing.Optional[str]` — Storage description
@@ -20014,7 +21011,7 @@ client.import_storage.azure_spi.validate(
-**container:** `typing.Optional[str]` — Azure blob container +**id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated
@@ -20022,7 +21019,7 @@ client.import_storage.azure_spi.validate(
-**description:** `typing.Optional[str]` — Cloud storage description +**prefix:** `typing.Optional[str]` — Azure blob prefix name
@@ -20030,7 +21027,7 @@ client.import_storage.azure_spi.validate(
-**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time +**presign:** `typing.Optional[bool]` — Presign URLs for direct download
@@ -20038,7 +21035,7 @@ client.import_storage.azure_spi.validate(
-**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time +**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes
@@ -20046,7 +21043,7 @@ client.import_storage.azure_spi.validate(
-**last_sync_job:** `typing.Optional[str]` — Last sync job ID +**project:** `typing.Optional[int]` — Project ID
@@ -20054,7 +21051,7 @@ client.import_storage.azure_spi.validate(
-**meta:** `typing.Optional[typing.Optional[typing.Any]]` +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.
@@ -20062,7 +21059,7 @@ client.import_storage.azure_spi.validate(
-**prefix:** `typing.Optional[str]` — Azure blob prefix name +**title:** `typing.Optional[str]` — Storage title
@@ -20070,7 +21067,7 @@ client.import_storage.azure_spi.validate(
-**presign:** `typing.Optional[bool]` +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -20078,71 +21075,69 @@ client.import_storage.azure_spi.validate(
-**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes) +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
-
-
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects -
+
+
client.import_storage.azure.get(...)
-**status:** `typing.Optional[StatusC5AEnum]` - -
-
+#### 📝 Description
-**synchronizable:** `typing.Optional[bool]` - -
-
-
-**tenant_id:** `typing.Optional[str]` — Azure Tenant ID - +Get a specific Azure import storage connection. +
+
+#### 🔌 Usage +
-**title:** `typing.Optional[str]` — Cloud storage title - -
-
-
-**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync - +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.azure.get( + id=1, +) + +``` +
+
+#### ⚙️ Parameters +
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs - -
-
-
-**user_delegation_key:** `typing.Optional[str]` — User Delegation Key (Backend) +**id:** `int`
@@ -20162,7 +21157,7 @@ client.import_storage.azure_spi.validate(
-
client.import_storage.azure_spi.get(...) +
client.import_storage.azure.delete(...)
@@ -20174,7 +21169,7 @@ client.import_storage.azure_spi.validate(
-Get a specific Azure import storage connection that was set up with Service Principal authentication. +Delete a specific Azure import storage connection.
@@ -20194,7 +21189,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.azure_spi.get( +client.import_storage.azure.delete( id=1, ) @@ -20232,7 +21227,7 @@ client.import_storage.azure_spi.get(
-
client.import_storage.azure_spi.delete(...) +
client.import_storage.azure.update(...)
@@ -20244,7 +21239,7 @@ client.import_storage.azure_spi.get(
-Delete a specific Azure import storage connection that was set up with Service Principal authentication. +Update a specific Azure import storage connection.
@@ -20264,7 +21259,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.azure_spi.delete( +client.import_storage.azure.update( id=1, ) @@ -20290,69 +21285,23 @@ client.import_storage.azure_spi.delete(
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**account_key:** `typing.Optional[str]` — Azure Blob account key -
-
- -
- - - - -
- -
client.import_storage.azure_spi.update(...) -
-
- -#### 📝 Description - -
-
- -
-
- -Update a specific Azure import storage connection that was set up with Service Principal authentication. -
-
-#### 🔌 Usage - -
-
-
-```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.import_storage.azure_spi.update( - id=1, -) - -``` -
-
+**account_name:** `typing.Optional[str]` — Azure Blob account name +
-#### ⚙️ Parameters -
-
-
- -**id:** `int` +**container:** `typing.Optional[str]` — Azure blob container
@@ -20360,7 +21309,7 @@ client.import_storage.azure_spi.update(
-**account_name:** `typing.Optional[str]` — Azure Blob account name +**description:** `typing.Optional[str]` — Storage description
@@ -20368,7 +21317,7 @@ client.import_storage.azure_spi.update(
-**client_id:** `typing.Optional[str]` — Azure Blob Service Principal Client ID +**prefix:** `typing.Optional[str]` — Azure blob prefix name
@@ -20376,7 +21325,7 @@ client.import_storage.azure_spi.update(
-**client_secret:** `typing.Optional[str]` — Azure Blob Service Principal Client Secret +**presign:** `typing.Optional[bool]` — Presign URLs for direct download
@@ -20384,7 +21333,7 @@ client.import_storage.azure_spi.update(
-**container:** `typing.Optional[str]` — Azure blob container +**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes
@@ -20392,7 +21341,7 @@ client.import_storage.azure_spi.update(
-**description:** `typing.Optional[str]` — Cloud storage description +**project:** `typing.Optional[int]` — Project ID
@@ -20400,7 +21349,7 @@ client.import_storage.azure_spi.update(
-**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.
@@ -20408,7 +21357,7 @@ client.import_storage.azure_spi.update(
-**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time +**title:** `typing.Optional[str]` — Storage title
@@ -20416,7 +21365,7 @@ client.import_storage.azure_spi.update(
-**last_sync_job:** `typing.Optional[str]` — Last sync job ID +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -20424,103 +21373,69 @@ client.import_storage.azure_spi.update(
-**meta:** `typing.Optional[typing.Optional[typing.Any]]` +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
- -
-
- -**prefix:** `typing.Optional[str]` — Azure blob prefix name -
-
-
-**presign:** `typing.Optional[bool]` -
+
+
client.import_storage.azure.sync(...)
-**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes) - -
-
+#### 📝 Description
-**project:** `typing.Optional[int]` — A unique integer value identifying this project. - -
-
-
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects - +Sync tasks from an Azure import storage connection.
- -
-
- -**status:** `typing.Optional[StatusC5AEnum]` -
+#### 🔌 Usage +
-**synchronizable:** `typing.Optional[bool]` - -
-
-
-**tenant_id:** `typing.Optional[str]` — Azure Tenant ID - -
-
+```python +from label_studio_sdk import LabelStudio -
-
+client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.azure.sync( + id=1, +) -**title:** `typing.Optional[str]` — Cloud storage title - +```
- -
-
- -**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync -
+#### ⚙️ Parameters +
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs - -
-
-
-**user_delegation_key:** `typing.Optional[str]` — User Delegation Key (Backend) +**id:** `int` — Storage ID
@@ -20540,7 +21455,8 @@ client.import_storage.azure_spi.update(
-
client.import_storage.azure_spi.sync(...) +## ImportStorage AzureSpi +
client.import_storage.azure_spi.list(...)
@@ -20552,7 +21468,13 @@ client.import_storage.azure_spi.update(
-Sync tasks from an Azure import storage connection that was set up with Service Principal authentication. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get list of all Azure import storage connections set up with Service Principal authentication.
@@ -20572,8 +21494,8 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.azure_spi.sync( - id=1, +client.import_storage.azure_spi.list( + project=1, ) ``` @@ -20590,7 +21512,15 @@ client.import_storage.azure_spi.sync(
-**id:** `int` +**project:** `int` — Project ID + +
+
+ +
+
+ +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -20610,8 +21540,7 @@ client.import_storage.azure_spi.sync(
-## ImportStorage Gcs -
client.import_storage.gcs.list(...) +
client.import_storage.azure_spi.create(...)
@@ -20623,7 +21552,13 @@ client.import_storage.azure_spi.sync(
-Get a list of all GCS import storage connections. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Create Azure import storage with Service Principal authentication.
@@ -20643,7 +21578,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.gcs.list() +client.import_storage.azure_spi.create( + project=1, +) ``` @@ -20659,7 +21596,7 @@ client.import_storage.gcs.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**project:** `int` — A unique integer value identifying this project.
@@ -20667,7 +21604,7 @@ client.import_storage.gcs.list()
-**project:** `typing.Optional[int]` — Project ID +**account_name:** `typing.Optional[str]` — Azure Blob account name
@@ -20675,67 +21612,79 @@ client.import_storage.gcs.list()
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**client_id:** `typing.Optional[str]` — Azure Blob Service Principal Client ID
- -
+
+
+**client_secret:** `typing.Optional[str]` — Azure Blob Service Principal Client Secret +
-
-
client.import_storage.gcs.create(...)
-#### 📝 Description +**container:** `typing.Optional[str]` — Azure blob container + +
+
+**description:** `typing.Optional[str]` — Cloud storage description + +
+
+
-Create a new GCS import storage connection. -
-
+**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time + -#### 🔌 Usage -
+**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time + +
+
+
-```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.import_storage.gcs.create() - -``` +**last_sync_job:** `typing.Optional[str]` — Last sync job ID +
+ +
+
+ +**meta:** `typing.Optional[typing.Optional[typing.Any]]` +
-#### ⚙️ Parameters -
+**prefix:** `typing.Optional[str]` — Azure blob prefix name + +
+
+
-**bucket:** `typing.Optional[str]` — GCS bucket name +**presign:** `typing.Optional[bool]`
@@ -20743,7 +21692,7 @@ client.import_storage.gcs.create()
-**description:** `typing.Optional[str]` — Storage description +**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes)
@@ -20751,7 +21700,7 @@ client.import_storage.gcs.create()
-**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details. +**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan
@@ -20759,7 +21708,7 @@ client.import_storage.gcs.create()
-**google_project_id:** `typing.Optional[str]` — Google project ID +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects
@@ -20767,7 +21716,7 @@ client.import_storage.gcs.create()
-**prefix:** `typing.Optional[str]` — GCS bucket prefix +**status:** `typing.Optional[StatusC5AEnum]`
@@ -20775,7 +21724,7 @@ client.import_storage.gcs.create()
-**presign:** `typing.Optional[bool]` — Presign URLs for direct download +**synchronizable:** `typing.Optional[bool]`
@@ -20783,7 +21732,7 @@ client.import_storage.gcs.create()
-**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes +**tenant_id:** `typing.Optional[str]` — Azure Tenant ID
@@ -20791,7 +21740,7 @@ client.import_storage.gcs.create()
-**project:** `typing.Optional[int]` — Project ID +**title:** `typing.Optional[str]` — Cloud storage title
@@ -20799,7 +21748,7 @@ client.import_storage.gcs.create()
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported. +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync
@@ -20807,7 +21756,7 @@ client.import_storage.gcs.create()
-**title:** `typing.Optional[str]` — Storage title +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs
@@ -20815,7 +21764,7 @@ client.import_storage.gcs.create()
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**user_delegation_key:** `typing.Optional[str]` — User Delegation Key (Backend)
@@ -20835,7 +21784,7 @@ client.import_storage.gcs.create()
-
client.import_storage.gcs.validate(...) +
client.import_storage.azure_spi.validate(...)
@@ -20847,7 +21796,13 @@ client.import_storage.gcs.create()
-Validate a specific GCS import storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Validate a specific Azure import storage connection that was set up with Service Principal authentication.
@@ -20867,7 +21822,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.gcs.validate() +client.import_storage.azure_spi.validate( + project=1, +) ``` @@ -20883,7 +21840,7 @@ client.import_storage.gcs.validate()
-**bucket:** `typing.Optional[str]` — GCS bucket name +**project:** `int` — A unique integer value identifying this project.
@@ -20891,7 +21848,7 @@ client.import_storage.gcs.validate()
-**description:** `typing.Optional[str]` — Storage description +**account_name:** `typing.Optional[str]` — Azure Blob account name
@@ -20899,7 +21856,7 @@ client.import_storage.gcs.validate()
-**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details. +**client_id:** `typing.Optional[str]` — Azure Blob Service Principal Client ID
@@ -20907,7 +21864,7 @@ client.import_storage.gcs.validate()
-**google_project_id:** `typing.Optional[str]` — Google project ID +**client_secret:** `typing.Optional[str]` — Azure Blob Service Principal Client Secret
@@ -20915,7 +21872,7 @@ client.import_storage.gcs.validate()
-**id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated +**container:** `typing.Optional[str]` — Azure blob container
@@ -20923,7 +21880,7 @@ client.import_storage.gcs.validate()
-**prefix:** `typing.Optional[str]` — GCS bucket prefix +**description:** `typing.Optional[str]` — Cloud storage description
@@ -20931,7 +21888,7 @@ client.import_storage.gcs.validate()
-**presign:** `typing.Optional[bool]` — Presign URLs for direct download +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time
@@ -20939,7 +21896,7 @@ client.import_storage.gcs.validate()
-**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes +**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time
@@ -20947,7 +21904,7 @@ client.import_storage.gcs.validate()
-**project:** `typing.Optional[int]` — Project ID +**last_sync_job:** `typing.Optional[str]` — Last sync job ID
@@ -20955,7 +21912,7 @@ client.import_storage.gcs.validate()
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported. +**meta:** `typing.Optional[typing.Optional[typing.Any]]`
@@ -20963,7 +21920,7 @@ client.import_storage.gcs.validate()
-**title:** `typing.Optional[str]` — Storage title +**prefix:** `typing.Optional[str]` — Azure blob prefix name
@@ -20971,7 +21928,7 @@ client.import_storage.gcs.validate()
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**presign:** `typing.Optional[bool]`
@@ -20979,69 +21936,79 @@ client.import_storage.gcs.validate()
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes)
- -
+
+
+**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan +
-
-
client.import_storage.gcs.get(...)
-#### 📝 Description +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects + +
+
+**status:** `typing.Optional[StatusC5AEnum]` + +
+
+
-Get a specific GCS import storage connection. -
-
+**synchronizable:** `typing.Optional[bool]` + -#### 🔌 Usage -
+**tenant_id:** `typing.Optional[str]` — Azure Tenant ID + +
+
+
-```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.import_storage.gcs.get( - id=1, -) - -``` +**title:** `typing.Optional[str]` — Cloud storage title +
+ +
+
+ +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync +
-#### ⚙️ Parameters -
+**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs + +
+
+
-**id:** `int` +**user_delegation_key:** `typing.Optional[str]` — User Delegation Key (Backend)
@@ -21061,7 +22028,7 @@ client.import_storage.gcs.get(
-
client.import_storage.gcs.delete(...) +
client.import_storage.azure_spi.get(...)
@@ -21073,7 +22040,13 @@ client.import_storage.gcs.get(
-Delete a specific GCS import storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get a specific Azure import storage connection that was set up with Service Principal authentication.
@@ -21093,7 +22066,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.gcs.delete( +client.import_storage.azure_spi.get( id=1, ) @@ -21131,7 +22104,7 @@ client.import_storage.gcs.delete(
-
client.import_storage.gcs.update(...) +
client.import_storage.azure_spi.delete(...)
@@ -21143,7 +22116,13 @@ client.import_storage.gcs.delete(
-Update a specific GCS import storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Delete a specific Azure import storage connection that was set up with Service Principal authentication.
@@ -21163,7 +22142,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.gcs.update( +client.import_storage.azure_spi.delete( id=1, ) @@ -21189,15 +22168,75 @@ client.import_storage.gcs.update(
-**bucket:** `typing.Optional[str]` — GCS bucket name +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
+ + + +
+ +
client.import_storage.azure_spi.update(...)
-**description:** `typing.Optional[str]` — Storage description +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update a specific Azure import storage connection that was set up with Service Principal authentication. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.azure_spi.update( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int`
@@ -21205,7 +22244,7 @@ client.import_storage.gcs.update(
-**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details. +**account_name:** `typing.Optional[str]` — Azure Blob account name
@@ -21213,7 +22252,7 @@ client.import_storage.gcs.update(
-**google_project_id:** `typing.Optional[str]` — Google project ID +**client_id:** `typing.Optional[str]` — Azure Blob Service Principal Client ID
@@ -21221,7 +22260,7 @@ client.import_storage.gcs.update(
-**prefix:** `typing.Optional[str]` — GCS bucket prefix +**client_secret:** `typing.Optional[str]` — Azure Blob Service Principal Client Secret
@@ -21229,7 +22268,7 @@ client.import_storage.gcs.update(
-**presign:** `typing.Optional[bool]` — Presign URLs for direct download +**container:** `typing.Optional[str]` — Azure blob container
@@ -21237,7 +22276,7 @@ client.import_storage.gcs.update(
-**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes +**description:** `typing.Optional[str]` — Cloud storage description
@@ -21245,7 +22284,7 @@ client.import_storage.gcs.update(
-**project:** `typing.Optional[int]` — Project ID +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time
@@ -21253,7 +22292,7 @@ client.import_storage.gcs.update(
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported. +**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time
@@ -21261,7 +22300,7 @@ client.import_storage.gcs.update(
-**title:** `typing.Optional[str]` — Storage title +**last_sync_job:** `typing.Optional[str]` — Last sync job ID
@@ -21269,7 +22308,111 @@ client.import_storage.gcs.update(
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**meta:** `typing.Optional[typing.Optional[typing.Any]]` + +
+
+ +
+
+ +**prefix:** `typing.Optional[str]` — Azure blob prefix name + +
+
+ +
+
+ +**presign:** `typing.Optional[bool]` + +
+
+ +
+
+ +**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes) + +
+
+ +
+
+ +**project:** `typing.Optional[int]` — A unique integer value identifying this project. + +
+
+ +
+
+ +**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan + +
+
+ +
+
+ +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects + +
+
+ +
+
+ +**status:** `typing.Optional[StatusC5AEnum]` + +
+
+ +
+
+ +**synchronizable:** `typing.Optional[bool]` + +
+
+ +
+
+ +**tenant_id:** `typing.Optional[str]` — Azure Tenant ID + +
+
+ +
+
+ +**title:** `typing.Optional[str]` — Cloud storage title + +
+
+ +
+
+ +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync + +
+
+ +
+
+ +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs + +
+
+ +
+
+ +**user_delegation_key:** `typing.Optional[str]` — User Delegation Key (Backend)
@@ -21289,7 +22432,7 @@ client.import_storage.gcs.update(
-
client.import_storage.gcs.sync(...) +
client.import_storage.azure_spi.sync(...)
@@ -21301,7 +22444,13 @@ client.import_storage.gcs.update(
-Sync tasks from a GCS import storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Sync tasks from an Azure import storage connection that was set up with Service Principal authentication.
@@ -21321,7 +22470,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.gcs.sync( +client.import_storage.azure_spi.sync( id=1, ) @@ -21339,7 +22488,7 @@ client.import_storage.gcs.sync(
-**id:** `int` — Storage ID +**id:** `int`
@@ -21359,8 +22508,8 @@ client.import_storage.gcs.sync(
-## ImportStorage Gcswif -
client.import_storage.gcswif.list(...) +## ImportStorage Databricks +
client.import_storage.databricks.list(...)
@@ -21372,7 +22521,13 @@ client.import_storage.gcs.sync(
-Get list of all GCS import storage connections set up with WIF authentication. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get list of all Databricks Files import storage connections.
@@ -21392,7 +22547,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.gcswif.list() +client.import_storage.databricks.list( + project=1, +) ``` @@ -21408,7 +22565,7 @@ client.import_storage.gcswif.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**project:** `int` — Project ID
@@ -21416,7 +22573,7 @@ client.import_storage.gcswif.list()
-**project:** `typing.Optional[int]` — Project ID +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -21436,7 +22593,7 @@ client.import_storage.gcswif.list()
-
client.import_storage.gcswif.create(...) +
client.import_storage.databricks.create(...)
@@ -21448,7 +22605,13 @@ client.import_storage.gcswif.list()
-Create GCS import storage with WIF. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Create a Databricks Files import storage connection.
@@ -21468,8 +22631,12 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.gcswif.create( +client.import_storage.databricks.create( + catalog="catalog", + host="host", project=1, + schema="schema", + volume="volume", ) ``` @@ -21486,7 +22653,7 @@ client.import_storage.gcswif.create(
-**project:** `int` — A unique integer value identifying this project. +**catalog:** `str` — UC catalog name
@@ -21494,7 +22661,7 @@ client.import_storage.gcswif.create(
-**bucket:** `typing.Optional[str]` — GCS bucket name +**host:** `str` — Databricks workspace base URL (https://...)
@@ -21502,7 +22669,7 @@ client.import_storage.gcswif.create(
-**description:** `typing.Optional[str]` — Cloud storage description +**project:** `int` — A unique integer value identifying this project.
@@ -21510,7 +22677,7 @@ client.import_storage.gcswif.create(
-**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file +**schema:** `str` — UC schema name
@@ -21518,7 +22685,7 @@ client.import_storage.gcswif.create(
-**google_project_id:** `typing.Optional[str]` — Google project ID +**volume:** `str` — UC volume name
@@ -21526,7 +22693,7 @@ client.import_storage.gcswif.create(
-**google_project_number:** `typing.Optional[str]` — Google project number +**description:** `typing.Optional[str]` — Cloud storage description
@@ -21534,7 +22701,7 @@ client.import_storage.gcswif.create(
-**google_service_account_email:** `typing.Optional[str]` — Google service account email +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time
@@ -21542,7 +22709,7 @@ client.import_storage.gcswif.create(
-**google_wif_pool_id:** `typing.Optional[str]` — Google WIF pool ID +**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time
@@ -21550,7 +22717,7 @@ client.import_storage.gcswif.create(
-**google_wif_provider_id:** `typing.Optional[str]` — Google WIF provider ID +**last_sync_job:** `typing.Optional[str]` — Last sync job ID
@@ -21558,7 +22725,7 @@ client.import_storage.gcswif.create(
-**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time +**meta:** `typing.Optional[typing.Optional[typing.Any]]`
@@ -21566,7 +22733,7 @@ client.import_storage.gcswif.create(
-**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time +**prefix:** `typing.Optional[str]` — Path under the volume
@@ -21574,7 +22741,7 @@ client.import_storage.gcswif.create(
-**last_sync_job:** `typing.Optional[str]` — Last sync job ID +**presign:** `typing.Optional[bool]` — Presign not supported; always proxied
@@ -21582,7 +22749,7 @@ client.import_storage.gcswif.create(
-**meta:** `typing.Optional[typing.Optional[typing.Any]]` +**presign_ttl:** `typing.Optional[int]` — Unused for Databricks; kept for compatibility
@@ -21590,7 +22757,7 @@ client.import_storage.gcswif.create(
-**prefix:** `typing.Optional[str]` — GCS bucket prefix +**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan
@@ -21598,7 +22765,7 @@ client.import_storage.gcswif.create(
-**presign:** `typing.Optional[bool]` +**regex_filter:** `typing.Optional[str]` — Regex for filtering objects
@@ -21606,7 +22773,7 @@ client.import_storage.gcswif.create(
-**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes) +**request_timeout_s:** `typing.Optional[int]`
@@ -21614,7 +22781,7 @@ client.import_storage.gcswif.create(
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects +**status:** `typing.Optional[StatusC5AEnum]`
@@ -21622,7 +22789,7 @@ client.import_storage.gcswif.create(
-**status:** `typing.Optional[StatusC5AEnum]` +**stream_chunk_bytes:** `typing.Optional[int]`
@@ -21646,6 +22813,14 @@ client.import_storage.gcswif.create(
+**token:** `typing.Optional[str]` + +
+
+ +
+
+ **traceback:** `typing.Optional[str]` — Traceback report for the last failed sync
@@ -21654,7 +22829,15 @@ client.import_storage.gcswif.create(
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs +**use_blob_urls:** `typing.Optional[bool]` — Generate blob URLs in tasks + +
+
+ +
+
+ +**verify_tls:** `typing.Optional[bool]` — Verify TLS certificates
@@ -21674,7 +22857,7 @@ client.import_storage.gcswif.create(
-
client.import_storage.gcswif.validate(...) +
client.import_storage.databricks.validate(...)
@@ -21686,7 +22869,13 @@ client.import_storage.gcswif.create(
-Validate a specific GCS import storage connection that was set up with WIF authentication. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Validate a specific Databricks Files import storage connection.
@@ -21706,8 +22895,12 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.gcswif.validate( +client.import_storage.databricks.validate( + catalog="catalog", + host="host", project=1, + schema="schema", + volume="volume", ) ``` @@ -21724,7 +22917,7 @@ client.import_storage.gcswif.validate(
-**project:** `int` — A unique integer value identifying this project. +**catalog:** `str` — UC catalog name
@@ -21732,7 +22925,7 @@ client.import_storage.gcswif.validate(
-**bucket:** `typing.Optional[str]` — GCS bucket name +**host:** `str` — Databricks workspace base URL (https://...)
@@ -21740,7 +22933,7 @@ client.import_storage.gcswif.validate(
-**description:** `typing.Optional[str]` — Cloud storage description +**project:** `int` — A unique integer value identifying this project.
@@ -21748,7 +22941,7 @@ client.import_storage.gcswif.validate(
-**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file +**schema:** `str` — UC schema name
@@ -21756,7 +22949,7 @@ client.import_storage.gcswif.validate(
-**google_project_id:** `typing.Optional[str]` — Google project ID +**volume:** `str` — UC volume name
@@ -21764,7 +22957,7 @@ client.import_storage.gcswif.validate(
-**google_project_number:** `typing.Optional[str]` — Google project number +**description:** `typing.Optional[str]` — Cloud storage description
@@ -21772,7 +22965,7 @@ client.import_storage.gcswif.validate(
-**google_service_account_email:** `typing.Optional[str]` — Google service account email +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time
@@ -21780,7 +22973,7 @@ client.import_storage.gcswif.validate(
-**google_wif_pool_id:** `typing.Optional[str]` — Google WIF pool ID +**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time
@@ -21788,7 +22981,7 @@ client.import_storage.gcswif.validate(
-**google_wif_provider_id:** `typing.Optional[str]` — Google WIF provider ID +**last_sync_job:** `typing.Optional[str]` — Last sync job ID
@@ -21796,7 +22989,7 @@ client.import_storage.gcswif.validate(
-**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time +**meta:** `typing.Optional[typing.Optional[typing.Any]]`
@@ -21804,7 +22997,7 @@ client.import_storage.gcswif.validate(
-**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time +**prefix:** `typing.Optional[str]` — Path under the volume
@@ -21812,7 +23005,7 @@ client.import_storage.gcswif.validate(
-**last_sync_job:** `typing.Optional[str]` — Last sync job ID +**presign:** `typing.Optional[bool]` — Presign not supported; always proxied
@@ -21820,7 +23013,7 @@ client.import_storage.gcswif.validate(
-**meta:** `typing.Optional[typing.Optional[typing.Any]]` +**presign_ttl:** `typing.Optional[int]` — Unused for Databricks; kept for compatibility
@@ -21828,7 +23021,7 @@ client.import_storage.gcswif.validate(
-**prefix:** `typing.Optional[str]` — GCS bucket prefix +**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan
@@ -21836,7 +23029,7 @@ client.import_storage.gcswif.validate(
-**presign:** `typing.Optional[bool]` +**regex_filter:** `typing.Optional[str]` — Regex for filtering objects
@@ -21844,7 +23037,7 @@ client.import_storage.gcswif.validate(
-**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes) +**request_timeout_s:** `typing.Optional[int]`
@@ -21852,7 +23045,7 @@ client.import_storage.gcswif.validate(
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects +**status:** `typing.Optional[StatusC5AEnum]`
@@ -21860,7 +23053,7 @@ client.import_storage.gcswif.validate(
-**status:** `typing.Optional[StatusC5AEnum]` +**stream_chunk_bytes:** `typing.Optional[int]`
@@ -21884,6 +23077,14 @@ client.import_storage.gcswif.validate(
+**token:** `typing.Optional[str]` + +
+
+ +
+
+ **traceback:** `typing.Optional[str]` — Traceback report for the last failed sync
@@ -21892,7 +23093,15 @@ client.import_storage.gcswif.validate(
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs +**use_blob_urls:** `typing.Optional[bool]` — Generate blob URLs in tasks + +
+
+ +
+
+ +**verify_tls:** `typing.Optional[bool]` — Verify TLS certificates
@@ -21912,7 +23121,7 @@ client.import_storage.gcswif.validate(
-
client.import_storage.gcswif.get(...) +
client.import_storage.databricks.get(...)
@@ -21924,7 +23133,13 @@ client.import_storage.gcswif.validate(
-Get a specific GCS import storage connection that was set up with WIF. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get a specific Databricks Files import storage connection.
@@ -21944,7 +23159,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.gcswif.get( +client.import_storage.databricks.get( id=1, ) @@ -21982,7 +23197,7 @@ client.import_storage.gcswif.get(
-
client.import_storage.gcswif.delete(...) +
client.import_storage.databricks.delete(...)
@@ -21994,7 +23209,13 @@ client.import_storage.gcswif.get(
-Delete a specific GCS import storage connection that was set up with WIF authentication. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Delete a specific Databricks Files import storage connection.
@@ -22014,7 +23235,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.gcswif.delete( +client.import_storage.databricks.delete( id=1, ) @@ -22052,7 +23273,7 @@ client.import_storage.gcswif.delete(
-
client.import_storage.gcswif.update(...) +
client.import_storage.databricks.update(...)
@@ -22064,7 +23285,13 @@ client.import_storage.gcswif.delete(
-Update a specific GCS import storage connection that was set up with WIF authentication. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update a specific Databricks Files import storage connection.
@@ -22084,7 +23311,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.gcswif.update( +client.import_storage.databricks.update( id=1, ) @@ -22110,7 +23337,7 @@ client.import_storage.gcswif.update(
-**bucket:** `typing.Optional[str]` — GCS bucket name +**catalog:** `typing.Optional[str]` — UC catalog name
@@ -22126,7 +23353,7 @@ client.import_storage.gcswif.update(
-**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file +**host:** `typing.Optional[str]` — Databricks workspace base URL (https://...)
@@ -22134,7 +23361,7 @@ client.import_storage.gcswif.update(
-**google_project_id:** `typing.Optional[str]` — Google project ID +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time
@@ -22142,7 +23369,7 @@ client.import_storage.gcswif.update(
-**google_project_number:** `typing.Optional[str]` — Google project number +**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time
@@ -22150,7 +23377,7 @@ client.import_storage.gcswif.update(
-**google_service_account_email:** `typing.Optional[str]` — Google service account email +**last_sync_job:** `typing.Optional[str]` — Last sync job ID
@@ -22158,7 +23385,7 @@ client.import_storage.gcswif.update(
-**google_wif_pool_id:** `typing.Optional[str]` — Google WIF pool ID +**meta:** `typing.Optional[typing.Optional[typing.Any]]`
@@ -22166,7 +23393,7 @@ client.import_storage.gcswif.update(
-**google_wif_provider_id:** `typing.Optional[str]` — Google WIF provider ID +**prefix:** `typing.Optional[str]` — Path under the volume
@@ -22174,7 +23401,7 @@ client.import_storage.gcswif.update(
-**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time +**presign:** `typing.Optional[bool]` — Presign not supported; always proxied
@@ -22182,7 +23409,7 @@ client.import_storage.gcswif.update(
-**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time +**presign_ttl:** `typing.Optional[int]` — Unused for Databricks; kept for compatibility
@@ -22190,7 +23417,7 @@ client.import_storage.gcswif.update(
-**last_sync_job:** `typing.Optional[str]` — Last sync job ID +**project:** `typing.Optional[int]` — A unique integer value identifying this project.
@@ -22198,7 +23425,7 @@ client.import_storage.gcswif.update(
-**meta:** `typing.Optional[typing.Optional[typing.Any]]` +**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan
@@ -22206,7 +23433,7 @@ client.import_storage.gcswif.update(
-**prefix:** `typing.Optional[str]` — GCS bucket prefix +**regex_filter:** `typing.Optional[str]` — Regex for filtering objects
@@ -22214,7 +23441,7 @@ client.import_storage.gcswif.update(
-**presign:** `typing.Optional[bool]` +**request_timeout_s:** `typing.Optional[int]`
@@ -22222,7 +23449,7 @@ client.import_storage.gcswif.update(
-**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes) +**schema:** `typing.Optional[str]` — UC schema name
@@ -22230,7 +23457,7 @@ client.import_storage.gcswif.update(
-**project:** `typing.Optional[int]` — A unique integer value identifying this project. +**status:** `typing.Optional[StatusC5AEnum]`
@@ -22238,7 +23465,7 @@ client.import_storage.gcswif.update(
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects +**stream_chunk_bytes:** `typing.Optional[int]`
@@ -22246,7 +23473,7 @@ client.import_storage.gcswif.update(
-**status:** `typing.Optional[StatusC5AEnum]` +**synchronizable:** `typing.Optional[bool]`
@@ -22254,7 +23481,7 @@ client.import_storage.gcswif.update(
-**synchronizable:** `typing.Optional[bool]` +**title:** `typing.Optional[str]` — Cloud storage title
@@ -22262,7 +23489,7 @@ client.import_storage.gcswif.update(
-**title:** `typing.Optional[str]` — Cloud storage title +**token:** `typing.Optional[str]`
@@ -22278,7 +23505,23 @@ client.import_storage.gcswif.update(
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs +**use_blob_urls:** `typing.Optional[bool]` — Generate blob URLs in tasks + +
+
+ +
+
+ +**verify_tls:** `typing.Optional[bool]` — Verify TLS certificates + +
+
+ +
+
+ +**volume:** `typing.Optional[str]` — UC volume name
@@ -22298,7 +23541,7 @@ client.import_storage.gcswif.update(
-
client.import_storage.gcswif.sync(...) +
client.import_storage.databricks.sync(...)
@@ -22310,7 +23553,13 @@ client.import_storage.gcswif.update(
-Sync tasks from an GCS import storage connection that was set up with WIF authentication. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Sync tasks from a Databricks Files import storage.
@@ -22330,7 +23579,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.gcswif.sync( +client.import_storage.databricks.sync( id=1, ) @@ -22368,8 +23617,8 @@ client.import_storage.gcswif.sync(
-## ImportStorage Local -
client.import_storage.local.list(...) +## ImportStorage Gcs +
client.import_storage.gcs.list(...)
@@ -22381,7 +23630,7 @@ client.import_storage.gcswif.sync(
-Get a list of all local file import storage connections. +Get a list of all GCS import storage connections.
@@ -22401,7 +23650,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.local.list() +client.import_storage.gcs.list( + project=1, +) ``` @@ -22417,7 +23668,7 @@ client.import_storage.local.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**project:** `int` — Project ID
@@ -22425,7 +23676,7 @@ client.import_storage.local.list()
-**project:** `typing.Optional[int]` — Project ID +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -22445,7 +23696,7 @@ client.import_storage.local.list()
-
client.import_storage.local.create(...) +
client.import_storage.gcs.create(...)
@@ -22457,7 +23708,7 @@ client.import_storage.local.list()
-Create a new local file import storage connection. +Create a new GCS import storage connection.
@@ -22477,7 +23728,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.local.create() +client.import_storage.gcs.create() ``` @@ -22493,6 +23744,14 @@ client.import_storage.local.create()
+**bucket:** `typing.Optional[str]` — GCS bucket name + +
+
+ +
+
+ **description:** `typing.Optional[str]` — Storage description
@@ -22501,7 +23760,39 @@ client.import_storage.local.create()
-**path:** `typing.Optional[str]` — Path to local directory +**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details. + +
+
+ +
+
+ +**google_project_id:** `typing.Optional[str]` — Google project ID + +
+
+ +
+
+ +**prefix:** `typing.Optional[str]` — GCS bucket prefix + +
+
+ +
+
+ +**presign:** `typing.Optional[bool]` — Presign URLs for direct download + +
+
+ +
+
+ +**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes
@@ -22517,7 +23808,7 @@ client.import_storage.local.create()
-**regex_filter:** `typing.Optional[str]` — Regex for filtering objects +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.
@@ -22533,7 +23824,7 @@ client.import_storage.local.create()
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your directory contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -22553,7 +23844,7 @@ client.import_storage.local.create()
-
client.import_storage.local.validate(...) +
client.import_storage.gcs.validate(...)
@@ -22565,7 +23856,7 @@ client.import_storage.local.create()
-Validate a specific local file import storage connection. +Validate a specific GCS import storage connection.
@@ -22585,7 +23876,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.local.validate() +client.import_storage.gcs.validate() ``` @@ -22601,6 +23892,14 @@ client.import_storage.local.validate()
+**bucket:** `typing.Optional[str]` — GCS bucket name + +
+
+ +
+
+ **description:** `typing.Optional[str]` — Storage description
@@ -22609,6 +23908,22 @@ client.import_storage.local.validate()
+**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details. + +
+
+ +
+
+ +**google_project_id:** `typing.Optional[str]` — Google project ID + +
+
+ +
+
+ **id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated
@@ -22617,7 +23932,23 @@ client.import_storage.local.validate()
-**path:** `typing.Optional[str]` — Path to local directory +**prefix:** `typing.Optional[str]` — GCS bucket prefix + +
+
+ +
+
+ +**presign:** `typing.Optional[bool]` — Presign URLs for direct download + +
+
+ +
+
+ +**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes
@@ -22633,7 +23964,7 @@ client.import_storage.local.validate()
-**regex_filter:** `typing.Optional[str]` — Regex for filtering objects +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.
@@ -22649,7 +23980,7 @@ client.import_storage.local.validate()
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your directory contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -22669,7 +24000,7 @@ client.import_storage.local.validate()
-
client.import_storage.local.get(...) +
client.import_storage.gcs.get(...)
@@ -22681,7 +24012,7 @@ client.import_storage.local.validate()
-Get a specific local file import storage connection. +Get a specific GCS import storage connection.
@@ -22701,7 +24032,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.local.get( +client.import_storage.gcs.get( id=1, ) @@ -22739,7 +24070,7 @@ client.import_storage.local.get(
-
client.import_storage.local.delete(...) +
client.import_storage.gcs.delete(...)
@@ -22751,7 +24082,7 @@ client.import_storage.local.get(
-Delete a specific local file import storage connection. +Delete a specific GCS import storage connection.
@@ -22771,7 +24102,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.local.delete( +client.import_storage.gcs.delete( id=1, ) @@ -22809,7 +24140,7 @@ client.import_storage.local.delete(
-
client.import_storage.local.update(...) +
client.import_storage.gcs.update(...)
@@ -22821,7 +24152,7 @@ client.import_storage.local.delete(
-Update a specific local file import storage connection. +Update a specific GCS import storage connection.
@@ -22841,7 +24172,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.local.update( +client.import_storage.gcs.update( id=1, ) @@ -22867,6 +24198,14 @@ client.import_storage.local.update(
+**bucket:** `typing.Optional[str]` — GCS bucket name + +
+
+ +
+
+ **description:** `typing.Optional[str]` — Storage description
@@ -22875,7 +24214,39 @@ client.import_storage.local.update(
-**path:** `typing.Optional[str]` — Path to local directory +**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file. Check official Google Cloud Authentication documentation for more details. + +
+
+ +
+
+ +**google_project_id:** `typing.Optional[str]` — Google project ID + +
+
+ +
+
+ +**prefix:** `typing.Optional[str]` — GCS bucket prefix + +
+
+ +
+
+ +**presign:** `typing.Optional[bool]` — Presign URLs for direct download + +
+
+ +
+
+ +**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes
@@ -22891,7 +24262,7 @@ client.import_storage.local.update(
-**regex_filter:** `typing.Optional[str]` — Regex for filtering objects +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.
@@ -22907,7 +24278,7 @@ client.import_storage.local.update(
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your directory contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -22927,7 +24298,7 @@ client.import_storage.local.update(
-
client.import_storage.local.sync(...) +
client.import_storage.gcs.sync(...)
@@ -22939,7 +24310,7 @@ client.import_storage.local.update(
-Sync tasks from a local file import storage connection. +Sync tasks from a GCS import storage connection.
@@ -22959,7 +24330,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.local.sync( +client.import_storage.gcs.sync( id=1, ) @@ -22997,8 +24368,8 @@ client.import_storage.local.sync(
-## ImportStorage Redis -
client.import_storage.redis.list(...) +## ImportStorage Gcswif +
client.import_storage.gcswif.list(...)
@@ -23010,7 +24381,13 @@ client.import_storage.local.sync(
-Get a list of all Redis import storage connections. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get list of all GCS import storage connections set up with WIF authentication.
@@ -23030,7 +24407,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.redis.list() +client.import_storage.gcswif.list( + project=1, +) ``` @@ -23046,7 +24425,7 @@ client.import_storage.redis.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**project:** `int` — Project ID
@@ -23054,7 +24433,7 @@ client.import_storage.redis.list()
-**project:** `typing.Optional[int]` — Project ID +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -23074,7 +24453,7 @@ client.import_storage.redis.list()
-
client.import_storage.redis.create(...) +
client.import_storage.gcswif.create(...)
@@ -23086,7 +24465,13 @@ client.import_storage.redis.list()
-Create a new Redis import storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Create GCS import storage with WIF.
@@ -23106,7 +24491,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.redis.create() +client.import_storage.gcswif.create( + project=1, +) ``` @@ -23122,7 +24509,7 @@ client.import_storage.redis.create()
-**description:** `typing.Optional[str]` — Storage description +**project:** `int` — A unique integer value identifying this project.
@@ -23130,7 +24517,7 @@ client.import_storage.redis.create()
-**host:** `typing.Optional[str]` — Server Host IP (optional) +**bucket:** `typing.Optional[str]` — GCS bucket name
@@ -23138,7 +24525,7 @@ client.import_storage.redis.create()
-**password:** `typing.Optional[str]` — Server Password (optional) +**description:** `typing.Optional[str]` — Cloud storage description
@@ -23146,7 +24533,7 @@ client.import_storage.redis.create()
-**path:** `typing.Optional[str]` — Storage prefix (optional) +**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file
@@ -23154,7 +24541,7 @@ client.import_storage.redis.create()
-**port:** `typing.Optional[str]` — Server Port (optional) +**google_project_id:** `typing.Optional[str]` — Google project ID
@@ -23162,7 +24549,7 @@ client.import_storage.redis.create()
-**project:** `typing.Optional[int]` — Project ID +**google_project_number:** `typing.Optional[str]` — Google project number
@@ -23170,7 +24557,7 @@ client.import_storage.redis.create()
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported. +**google_service_account_email:** `typing.Optional[str]` — Google service account email
@@ -23178,7 +24565,7 @@ client.import_storage.redis.create()
-**title:** `typing.Optional[str]` — Storage title +**google_wif_pool_id:** `typing.Optional[str]` — Google WIF pool ID
@@ -23186,7 +24573,7 @@ client.import_storage.redis.create()
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**google_wif_provider_id:** `typing.Optional[str]` — Google WIF provider ID
@@ -23194,67 +24581,39 @@ client.import_storage.redis.create()
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time
- -
- - - - -
-
client.import_storage.redis.validate(...)
-#### 📝 Description - -
-
+**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time + +
+
-Validate a specific Redis import storage connection. -
-
+**last_sync_job:** `typing.Optional[str]` — Last sync job ID +
-#### 🔌 Usage - -
-
-
-```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.import_storage.redis.validate() - -``` -
-
+**meta:** `typing.Optional[typing.Optional[typing.Any]]` +
-#### ⚙️ Parameters -
-
-
- -**description:** `typing.Optional[str]` — Storage description +**prefix:** `typing.Optional[str]` — GCS bucket prefix
@@ -23262,7 +24621,7 @@ client.import_storage.redis.validate()
-**host:** `typing.Optional[str]` — Server Host IP (optional) +**presign:** `typing.Optional[bool]`
@@ -23270,7 +24629,7 @@ client.import_storage.redis.validate()
-**id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated +**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes)
@@ -23278,7 +24637,7 @@ client.import_storage.redis.validate()
-**password:** `typing.Optional[str]` — Server Password (optional) +**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan over the bucket content
@@ -23286,7 +24645,7 @@ client.import_storage.redis.validate()
-**path:** `typing.Optional[str]` — Storage prefix (optional) +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects
@@ -23294,7 +24653,7 @@ client.import_storage.redis.validate()
-**port:** `typing.Optional[str]` — Server Port (optional) +**status:** `typing.Optional[StatusC5AEnum]`
@@ -23302,7 +24661,7 @@ client.import_storage.redis.validate()
-**project:** `typing.Optional[int]` — Project ID +**synchronizable:** `typing.Optional[bool]`
@@ -23310,7 +24669,7 @@ client.import_storage.redis.validate()
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported. +**title:** `typing.Optional[str]` — Cloud storage title
@@ -23318,7 +24677,7 @@ client.import_storage.redis.validate()
-**title:** `typing.Optional[str]` — Storage title +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync
@@ -23326,7 +24685,7 @@ client.import_storage.redis.validate()
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs
@@ -23346,7 +24705,7 @@ client.import_storage.redis.validate()
-
client.import_storage.redis.get(...) +
client.import_storage.gcswif.validate(...)
@@ -23358,7 +24717,13 @@ client.import_storage.redis.validate()
-Get a specific Redis import storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Validate a specific GCS import storage connection that was set up with WIF authentication.
@@ -23378,8 +24743,8 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.redis.get( - id=1, +client.import_storage.gcswif.validate( + project=1, ) ``` @@ -23396,7 +24761,7 @@ client.import_storage.redis.get(
-**id:** `int` +**project:** `int` — A unique integer value identifying this project.
@@ -23404,69 +24769,175 @@ client.import_storage.redis.get(
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**bucket:** `typing.Optional[str]` — GCS bucket name
+ +
+
+ +**description:** `typing.Optional[str]` — Cloud storage description +
+
+
+**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file +
-
-
client.import_storage.redis.delete(...)
-#### 📝 Description +**google_project_id:** `typing.Optional[str]` — Google project ID + +
+
+**google_project_number:** `typing.Optional[str]` — Google project number + +
+
+
-Delete a specific Redis import storage connection. +**google_service_account_email:** `typing.Optional[str]` — Google service account email +
+ +
+
+ +**google_wif_pool_id:** `typing.Optional[str]` — Google WIF pool ID +
-#### 🔌 Usage +
+
+ +**google_wif_provider_id:** `typing.Optional[str]` — Google WIF provider ID + +
+
+**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time + +
+
+
-```python -from label_studio_sdk import LabelStudio +**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time + +
+
-client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.import_storage.redis.delete( - id=1, -) +
+
-``` +**last_sync_job:** `typing.Optional[str]` — Last sync job ID + +
+
+ +
+
+ +**meta:** `typing.Optional[typing.Optional[typing.Any]]` +
+ +
+
+ +**prefix:** `typing.Optional[str]` — GCS bucket prefix +
-#### ⚙️ Parameters +
+
+ +**presign:** `typing.Optional[bool]` + +
+
+**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes) + +
+
+
-**id:** `int` +**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan over the bucket content + +
+
+ +
+
+ +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects + +
+
+ +
+
+ +**status:** `typing.Optional[StatusC5AEnum]` + +
+
+ +
+
+ +**synchronizable:** `typing.Optional[bool]` + +
+
+ +
+
+ +**title:** `typing.Optional[str]` — Cloud storage title + +
+
+ +
+
+ +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync + +
+
+ +
+
+ +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs
@@ -23486,7 +24957,7 @@ client.import_storage.redis.delete(
-
client.import_storage.redis.update(...) +
client.import_storage.gcswif.get(...)
@@ -23498,7 +24969,13 @@ client.import_storage.redis.delete(
-Update a specific Redis import storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get a specific GCS import storage connection that was set up with WIF.
@@ -23518,7 +24995,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.redis.update( +client.import_storage.gcswif.get( id=1, ) @@ -23544,78 +25021,6 @@ client.import_storage.redis.update(
-**description:** `typing.Optional[str]` — Storage description - -
-
- -
-
- -**host:** `typing.Optional[str]` — Server Host IP (optional) - -
-
- -
-
- -**password:** `typing.Optional[str]` — Server Password (optional) - -
-
- -
-
- -**path:** `typing.Optional[str]` — Storage prefix (optional) - -
-
- -
-
- -**port:** `typing.Optional[str]` — Server Port (optional) - -
-
- -
-
- -**project:** `typing.Optional[int]` — Project ID - -
-
- -
-
- -**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported. - -
-
- -
-
- -**title:** `typing.Optional[str]` — Storage title - -
-
- -
-
- -**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. - -
-
- -
-
- **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -23628,7 +25033,7 @@ client.import_storage.redis.update(
-
client.import_storage.redis.sync(...) +
client.import_storage.gcswif.delete(...)
@@ -23640,7 +25045,13 @@ client.import_storage.redis.update(
-Sync tasks from a Redis import storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Delete a specific GCS import storage connection that was set up with WIF authentication.
@@ -23660,7 +25071,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.redis.sync( +client.import_storage.gcswif.delete( id=1, ) @@ -23678,7 +25089,7 @@ client.import_storage.redis.sync(
-**id:** `int` — Storage ID +**id:** `int`
@@ -23698,8 +25109,7 @@ client.import_storage.redis.sync(
-## ImportStorage S3 -
client.import_storage.s3.list(...) +
client.import_storage.gcswif.update(...)
@@ -23711,7 +25121,13 @@ client.import_storage.redis.sync(
-Get a list of all S3 import storage connections. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update a specific GCS import storage connection that was set up with WIF authentication.
@@ -23731,7 +25147,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.s3.list() +client.import_storage.gcswif.update( + id=1, +) ``` @@ -23747,7 +25165,7 @@ client.import_storage.s3.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**id:** `int`
@@ -23755,7 +25173,7 @@ client.import_storage.s3.list()
-**project:** `typing.Optional[int]` — Project ID +**bucket:** `typing.Optional[str]` — GCS bucket name
@@ -23763,67 +25181,55 @@ client.import_storage.s3.list()
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**description:** `typing.Optional[str]` — Cloud storage description
- -
+
+
+**google_application_credentials:** `typing.Optional[str]` — The content of GOOGLE_APPLICATION_CREDENTIALS json file +
-
-
client.import_storage.s3.create(...)
-#### 📝 Description - -
-
+**google_project_id:** `typing.Optional[str]` — Google project ID + +
+
-Create new S3 import storage -
-
+**google_project_number:** `typing.Optional[str]` — Google project number +
-#### 🔌 Usage -
-
-
- -```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.import_storage.s3.create() - -``` -
-
+**google_service_account_email:** `typing.Optional[str]` — Google service account email +
-#### ⚙️ Parameters -
+**google_wif_pool_id:** `typing.Optional[str]` — Google WIF pool ID + +
+
+
-**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID +**google_wif_provider_id:** `typing.Optional[str]` — Google WIF provider ID
@@ -23831,7 +25237,7 @@ client.import_storage.s3.create()
-**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time
@@ -23839,7 +25245,7 @@ client.import_storage.s3.create()
-**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN +**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time
@@ -23847,7 +25253,7 @@ client.import_storage.s3.create()
-**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID +**last_sync_job:** `typing.Optional[str]` — Last sync job ID
@@ -23855,7 +25261,7 @@ client.import_storage.s3.create()
-**bucket:** `typing.Optional[str]` — S3 bucket name +**meta:** `typing.Optional[typing.Optional[typing.Any]]`
@@ -23863,7 +25269,7 @@ client.import_storage.s3.create()
-**description:** `typing.Optional[str]` — Storage description +**prefix:** `typing.Optional[str]` — GCS bucket prefix
@@ -23871,7 +25277,7 @@ client.import_storage.s3.create()
-**prefix:** `typing.Optional[str]` — S3 bucket prefix +**presign:** `typing.Optional[bool]`
@@ -23879,7 +25285,7 @@ client.import_storage.s3.create()
-**presign:** `typing.Optional[bool]` — Presign URLs for download +**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes)
@@ -23887,7 +25293,7 @@ client.import_storage.s3.create()
-**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes +**project:** `typing.Optional[int]` — A unique integer value identifying this project.
@@ -23895,7 +25301,7 @@ client.import_storage.s3.create()
-**project:** `typing.Optional[int]` — Project ID +**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan over the bucket content
@@ -23903,7 +25309,7 @@ client.import_storage.s3.create()
-**recursive_scan:** `typing.Optional[bool]` — Scan recursively +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects
@@ -23911,7 +25317,7 @@ client.import_storage.s3.create()
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported. +**status:** `typing.Optional[StatusC5AEnum]`
@@ -23919,7 +25325,7 @@ client.import_storage.s3.create()
-**region_name:** `typing.Optional[str]` — AWS Region +**synchronizable:** `typing.Optional[bool]`
@@ -23927,7 +25333,7 @@ client.import_storage.s3.create()
-**s3endpoint:** `typing.Optional[str]` — S3 Endpoint +**title:** `typing.Optional[str]` — Cloud storage title
@@ -23935,7 +25341,7 @@ client.import_storage.s3.create()
-**title:** `typing.Optional[str]` — Storage title +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync
@@ -23943,7 +25349,7 @@ client.import_storage.s3.create()
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs
@@ -23963,7 +25369,7 @@ client.import_storage.s3.create()
-
client.import_storage.s3.validate(...) +
client.import_storage.gcswif.sync(...)
@@ -23975,7 +25381,13 @@ client.import_storage.s3.create()
-Validate a specific S3 import storage connection. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Sync tasks from an GCS import storage connection that was set up with WIF authentication.
@@ -23995,7 +25407,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.s3.validate() +client.import_storage.gcswif.sync( + id=1, +) ``` @@ -24011,7 +25425,7 @@ client.import_storage.s3.validate()
-**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID +**id:** `int`
@@ -24019,47 +25433,70 @@ client.import_storage.s3.validate()
-**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
-
-
-**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN -
+
+## ImportStorage Local +
client.import_storage.local.list(...)
-**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID - -
-
+#### 📝 Description
-**bucket:** `typing.Optional[str]` — S3 bucket name - +
+
+ +Get a list of all local file import storage connections. +
+
+#### 🔌 Usage +
-**description:** `typing.Optional[str]` — Storage description - +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.local.list( + project=1, +) + +``` +
+
+#### ⚙️ Parameters +
-**id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated +
+
+ +**project:** `int` — Project ID
@@ -24067,7 +25504,7 @@ client.import_storage.s3.validate()
-**prefix:** `typing.Optional[str]` — S3 bucket prefix +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -24075,31 +25512,67 @@ client.import_storage.s3.validate()
-**presign:** `typing.Optional[bool]` — Presign URLs for download +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+ + + + +
+ +
client.import_storage.local.create(...) +
+
+ +#### 📝 Description
-**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes - +
+
+ +Create a new local file import storage connection.
+
+
+ +#### 🔌 Usage
-**project:** `typing.Optional[int]` — Project ID - +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.local.create() + +``` +
+
+#### ⚙️ Parameters +
-**recursive_scan:** `typing.Optional[bool]` — Scan recursively +
+
+ +**description:** `typing.Optional[str]` — Storage description
@@ -24107,7 +25580,7 @@ client.import_storage.s3.validate()
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported. +**path:** `typing.Optional[str]` — Path to local directory
@@ -24115,7 +25588,7 @@ client.import_storage.s3.validate()
-**region_name:** `typing.Optional[str]` — AWS Region +**project:** `typing.Optional[int]` — Project ID
@@ -24123,7 +25596,7 @@ client.import_storage.s3.validate()
-**s3endpoint:** `typing.Optional[str]` — S3 Endpoint +**regex_filter:** `typing.Optional[str]` — Regex for filtering objects
@@ -24139,7 +25612,7 @@ client.import_storage.s3.validate()
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your directory contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -24159,7 +25632,7 @@ client.import_storage.s3.validate()
-
client.import_storage.s3.get(...) +
client.import_storage.local.validate(...)
@@ -24171,7 +25644,7 @@ client.import_storage.s3.validate()
-Get a specific S3 import storage connection. +Validate a specific local file import storage connection.
@@ -24191,9 +25664,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.s3.get( - id=1, -) +client.import_storage.local.validate() ``` @@ -24209,7 +25680,55 @@ client.import_storage.s3.get(
-**id:** `int` +**description:** `typing.Optional[str]` — Storage description + +
+
+ +
+
+ +**id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated + +
+
+ +
+
+ +**path:** `typing.Optional[str]` — Path to local directory + +
+
+ +
+
+ +**project:** `typing.Optional[int]` — Project ID + +
+
+ +
+
+ +**regex_filter:** `typing.Optional[str]` — Regex for filtering objects + +
+
+ +
+
+ +**title:** `typing.Optional[str]` — Storage title + +
+
+ +
+
+ +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your directory contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -24229,7 +25748,7 @@ client.import_storage.s3.get(
-
client.import_storage.s3.delete(...) +
client.import_storage.local.get(...)
@@ -24241,7 +25760,7 @@ client.import_storage.s3.get(
-Delete a specific S3 import storage connection. +Get a specific local file import storage connection.
@@ -24261,7 +25780,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.s3.delete( +client.import_storage.local.get( id=1, ) @@ -24299,7 +25818,7 @@ client.import_storage.s3.delete(
-
client.import_storage.s3.update(...) +
client.import_storage.local.delete(...)
@@ -24311,7 +25830,7 @@ client.import_storage.s3.delete(
-Update a specific S3 import storage connection. +Delete a specific local file import storage connection.
@@ -24331,7 +25850,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.s3.update( +client.import_storage.local.delete( id=1, ) @@ -24357,79 +25876,69 @@ client.import_storage.s3.update(
-**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
- -
-
- -**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY -
-
-
-**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN -
+
+
client.import_storage.local.update(...)
-**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID - -
-
+#### 📝 Description
-**bucket:** `typing.Optional[str]` — S3 bucket name - -
-
-
-**description:** `typing.Optional[str]` — Storage description - +Update a specific local file import storage connection. +
+
+#### 🔌 Usage +
-**prefix:** `typing.Optional[str]` — S3 bucket prefix - -
-
-
-**presign:** `typing.Optional[bool]` — Presign URLs for download - +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.local.update( + id=1, +) + +``` +
+
+#### ⚙️ Parameters +
-**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes - -
-
-
-**project:** `typing.Optional[int]` — Project ID +**id:** `int`
@@ -24437,7 +25946,7 @@ client.import_storage.s3.update(
-**recursive_scan:** `typing.Optional[bool]` — Scan recursively +**description:** `typing.Optional[str]` — Storage description
@@ -24445,7 +25954,7 @@ client.import_storage.s3.update(
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported. +**path:** `typing.Optional[str]` — Path to local directory
@@ -24453,7 +25962,7 @@ client.import_storage.s3.update(
-**region_name:** `typing.Optional[str]` — AWS Region +**project:** `typing.Optional[int]` — Project ID
@@ -24461,7 +25970,7 @@ client.import_storage.s3.update(
-**s3endpoint:** `typing.Optional[str]` — S3 Endpoint +**regex_filter:** `typing.Optional[str]` — Regex for filtering objects
@@ -24477,7 +25986,7 @@ client.import_storage.s3.update(
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your directory contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -24497,7 +26006,7 @@ client.import_storage.s3.update(
-
client.import_storage.s3.sync(...) +
client.import_storage.local.sync(...)
@@ -24509,7 +26018,7 @@ client.import_storage.s3.update(
-Sync tasks from an S3 import storage connection. +Sync tasks from a local file import storage connection.
@@ -24529,7 +26038,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.s3.sync( +client.import_storage.local.sync( id=1, ) @@ -24567,8 +26076,8 @@ client.import_storage.s3.sync(
-## ImportStorage S3S -
client.import_storage.s3s.list(...) +## ImportStorage Redis +
client.import_storage.redis.list(...)
@@ -24580,7 +26089,7 @@ client.import_storage.s3.sync(
-Get list of all S3 import storage connections set up with IAM role access. +Get a list of all Redis import storage connections.
@@ -24600,7 +26109,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.s3s.list() +client.import_storage.redis.list( + project=1, +) ``` @@ -24616,7 +26127,7 @@ client.import_storage.s3s.list()
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**project:** `int` — Project ID
@@ -24624,7 +26135,7 @@ client.import_storage.s3s.list()
-**project:** `typing.Optional[int]` — Project ID +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -24644,7 +26155,7 @@ client.import_storage.s3s.list()
-
client.import_storage.s3s.create(...) +
client.import_storage.redis.create(...)
@@ -24656,7 +26167,7 @@ client.import_storage.s3s.list()
-Create S3 import storage with IAM role access. +Create a new Redis import storage connection.
@@ -24676,10 +26187,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.s3s.create( - project=1, - role_arn="role_arn", -) +client.import_storage.redis.create() ``` @@ -24695,7 +26203,7 @@ client.import_storage.s3s.create(
-**project:** `int` — A unique integer value identifying this project. +**description:** `typing.Optional[str]` — Storage description
@@ -24703,7 +26211,7 @@ client.import_storage.s3s.create(
-**role_arn:** `str` — AWS RoleArn +**host:** `typing.Optional[str]` — Server Host IP (optional)
@@ -24711,7 +26219,7 @@ client.import_storage.s3s.create(
-**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID +**password:** `typing.Optional[str]` — Server Password (optional)
@@ -24719,7 +26227,7 @@ client.import_storage.s3s.create(
-**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY +**path:** `typing.Optional[str]` — Storage prefix (optional)
@@ -24727,7 +26235,7 @@ client.import_storage.s3s.create(
-**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN +**port:** `typing.Optional[str]` — Server Port (optional)
@@ -24735,7 +26243,7 @@ client.import_storage.s3s.create(
-**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID +**project:** `typing.Optional[int]` — Project ID
@@ -24743,7 +26251,7 @@ client.import_storage.s3s.create(
-**bucket:** `typing.Optional[str]` — S3 bucket name +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.
@@ -24751,7 +26259,7 @@ client.import_storage.s3s.create(
-**description:** `typing.Optional[str]` — Cloud storage description +**title:** `typing.Optional[str]` — Storage title
@@ -24759,7 +26267,7 @@ client.import_storage.s3s.create(
-**external_id:** `typing.Optional[str]` — AWS ExternalId +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -24767,63 +26275,67 @@ client.import_storage.s3s.create(
-**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
-
-
-**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time -
+
+
client.import_storage.redis.validate(...)
-**last_sync_job:** `typing.Optional[str]` — Last sync job ID - -
-
+#### 📝 Description
-**legacy_auth:** `typing.Optional[bool]` - -
-
-
-**meta:** `typing.Optional[typing.Optional[typing.Any]]` - +Validate a specific Redis import storage connection. +
+
+#### 🔌 Usage +
-**prefix:** `typing.Optional[str]` — S3 bucket prefix - -
-
-
-**presign:** `typing.Optional[bool]` - +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.redis.validate() + +``` +
+
+#### ⚙️ Parameters +
-**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes) +
+
+ +**description:** `typing.Optional[str]` — Storage description
@@ -24831,7 +26343,7 @@ client.import_storage.s3s.create(
-**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan over the bucket content +**host:** `typing.Optional[str]` — Server Host IP (optional)
@@ -24839,7 +26351,7 @@ client.import_storage.s3s.create(
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects +**id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated
@@ -24847,7 +26359,7 @@ client.import_storage.s3s.create(
-**region_name:** `typing.Optional[str]` — AWS Region +**password:** `typing.Optional[str]` — Server Password (optional)
@@ -24855,7 +26367,7 @@ client.import_storage.s3s.create(
-**s3endpoint:** `typing.Optional[str]` — S3 Endpoint +**path:** `typing.Optional[str]` — Storage prefix (optional)
@@ -24863,7 +26375,7 @@ client.import_storage.s3s.create(
-**status:** `typing.Optional[StatusC5AEnum]` +**port:** `typing.Optional[str]` — Server Port (optional)
@@ -24871,7 +26383,7 @@ client.import_storage.s3s.create(
-**synchronizable:** `typing.Optional[bool]` +**project:** `typing.Optional[int]` — Project ID
@@ -24879,7 +26391,7 @@ client.import_storage.s3s.create(
-**title:** `typing.Optional[str]` — Cloud storage title +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.
@@ -24887,7 +26399,7 @@ client.import_storage.s3s.create(
-**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync +**title:** `typing.Optional[str]` — Storage title
@@ -24895,7 +26407,7 @@ client.import_storage.s3s.create(
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -24915,7 +26427,7 @@ client.import_storage.s3s.create(
-
client.import_storage.s3s.validate(...) +
client.import_storage.redis.get(...)
@@ -24927,7 +26439,7 @@ client.import_storage.s3s.create(
-Validate a specific S3 import storage connection that was set up with IAM role access. +Get a specific Redis import storage connection.
@@ -24947,9 +26459,8 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.s3s.validate( - project=1, - role_arn="role_arn", +client.import_storage.redis.get( + id=1, ) ``` @@ -24966,7 +26477,7 @@ client.import_storage.s3s.validate(
-**project:** `int` — A unique integer value identifying this project. +**id:** `int`
@@ -24974,71 +26485,69 @@ client.import_storage.s3s.validate(
-**role_arn:** `str` — AWS RoleArn +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
-
-
-**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID -
+
+
client.import_storage.redis.delete(...)
-**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY - -
-
+#### 📝 Description
-**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN - -
-
-
-**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID - +Delete a specific Redis import storage connection. +
+
+#### 🔌 Usage +
-**bucket:** `typing.Optional[str]` — S3 bucket name - -
-
-
-**description:** `typing.Optional[str]` — Cloud storage description - +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.redis.delete( + id=1, +) + +``` +
+
+#### ⚙️ Parameters +
-**external_id:** `typing.Optional[str]` — AWS ExternalId - -
-
-
-**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time +**id:** `int`
@@ -25046,55 +26555,69 @@ client.import_storage.s3s.validate(
-**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ + -
-
-**last_sync_job:** `typing.Optional[str]` — Last sync job ID -
+
+
client.import_storage.redis.update(...)
-**legacy_auth:** `typing.Optional[bool]` - -
-
+#### 📝 Description
-**meta:** `typing.Optional[typing.Optional[typing.Any]]` - -
-
-
-**prefix:** `typing.Optional[str]` — S3 bucket prefix - +Update a specific Redis import storage connection.
+ + + +#### 🔌 Usage
-**presign:** `typing.Optional[bool]` - +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.redis.update( + id=1, +) + +```
+
+
+ +#### ⚙️ Parameters
-**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes) +
+
+ +**id:** `int`
@@ -25102,7 +26625,7 @@ client.import_storage.s3s.validate(
-**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan over the bucket content +**description:** `typing.Optional[str]` — Storage description
@@ -25110,7 +26633,7 @@ client.import_storage.s3s.validate(
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects +**host:** `typing.Optional[str]` — Server Host IP (optional)
@@ -25118,7 +26641,7 @@ client.import_storage.s3s.validate(
-**region_name:** `typing.Optional[str]` — AWS Region +**password:** `typing.Optional[str]` — Server Password (optional)
@@ -25126,7 +26649,7 @@ client.import_storage.s3s.validate(
-**s3endpoint:** `typing.Optional[str]` — S3 Endpoint +**path:** `typing.Optional[str]` — Storage prefix (optional)
@@ -25134,7 +26657,7 @@ client.import_storage.s3s.validate(
-**status:** `typing.Optional[StatusC5AEnum]` +**port:** `typing.Optional[str]` — Server Port (optional)
@@ -25142,7 +26665,7 @@ client.import_storage.s3s.validate(
-**synchronizable:** `typing.Optional[bool]` +**project:** `typing.Optional[int]` — Project ID
@@ -25150,7 +26673,7 @@ client.import_storage.s3s.validate(
-**title:** `typing.Optional[str]` — Cloud storage title +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.
@@ -25158,7 +26681,7 @@ client.import_storage.s3s.validate(
-**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync +**title:** `typing.Optional[str]` — Storage title
@@ -25166,7 +26689,7 @@ client.import_storage.s3s.validate(
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -25186,7 +26709,7 @@ client.import_storage.s3s.validate(
-
client.import_storage.s3s.get(...) +
client.import_storage.redis.sync(...)
@@ -25198,7 +26721,7 @@ client.import_storage.s3s.validate(
-Get a specific S3 import storage connection that was set up with IAM role access. +Sync tasks from a Redis import storage connection.
@@ -25218,7 +26741,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.s3s.get( +client.import_storage.redis.sync( id=1, ) @@ -25236,7 +26759,7 @@ client.import_storage.s3s.get(
-**id:** `int` +**id:** `int` — Storage ID
@@ -25256,7 +26779,8 @@ client.import_storage.s3s.get(
-
client.import_storage.s3s.delete(...) +## ImportStorage S3 +
client.import_storage.s3.list(...)
@@ -25268,7 +26792,7 @@ client.import_storage.s3s.get(
-Delete a specific S3 import storage connection that was set up with IAM role access. +Get a list of all S3 import storage connections.
@@ -25288,8 +26812,8 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.s3s.delete( - id=1, +client.import_storage.s3.list( + project=1, ) ``` @@ -25306,7 +26830,15 @@ client.import_storage.s3s.delete(
-**id:** `int` +**project:** `int` — Project ID + +
+
+ +
+
+ +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -25326,7 +26858,7 @@ client.import_storage.s3s.delete(
-
client.import_storage.s3s.update(...) +
client.import_storage.s3.create(...)
@@ -25338,7 +26870,7 @@ client.import_storage.s3s.delete(
-Update a specific S3 import storage connection that was set up with IAM role access. +Create new S3 import storage
@@ -25358,9 +26890,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.s3s.update( - id=1, -) +client.import_storage.s3.create() ``` @@ -25376,14 +26906,6 @@ client.import_storage.s3s.update(
-**id:** `int` - -
-
- -
-
- **aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID
@@ -25424,7 +26946,7 @@ client.import_storage.s3s.update(
-**description:** `typing.Optional[str]` — Cloud storage description +**description:** `typing.Optional[str]` — Storage description
@@ -25432,7 +26954,7 @@ client.import_storage.s3s.update(
-**external_id:** `typing.Optional[str]` — AWS ExternalId +**prefix:** `typing.Optional[str]` — S3 bucket prefix
@@ -25440,7 +26962,7 @@ client.import_storage.s3s.update(
-**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time +**presign:** `typing.Optional[bool]` — Presign URLs for download
@@ -25448,7 +26970,7 @@ client.import_storage.s3s.update(
-**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time +**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes
@@ -25456,7 +26978,7 @@ client.import_storage.s3s.update(
-**last_sync_job:** `typing.Optional[str]` — Last sync job ID +**project:** `typing.Optional[int]` — Project ID
@@ -25464,7 +26986,7 @@ client.import_storage.s3s.update(
-**legacy_auth:** `typing.Optional[bool]` +**recursive_scan:** `typing.Optional[bool]` — Scan recursively
@@ -25472,7 +26994,155 @@ client.import_storage.s3s.update(
-**meta:** `typing.Optional[typing.Optional[typing.Any]]` +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported. + +
+
+ +
+
+ +**region_name:** `typing.Optional[str]` — AWS Region + +
+
+ +
+
+ +**s3endpoint:** `typing.Optional[str]` — S3 Endpoint + +
+
+ +
+
+ +**title:** `typing.Optional[str]` — Storage title + +
+
+ +
+
+ +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+ +
+ + + +
+
+ +
client.import_storage.s3.validate(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Validate a specific S3 import storage connection. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.s3.validate() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID + +
+
+ +
+
+ +**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY + +
+
+ +
+
+ +**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN + +
+
+ +
+
+ +**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID + +
+
+ +
+
+ +**bucket:** `typing.Optional[str]` — S3 bucket name + +
+
+ +
+
+ +**description:** `typing.Optional[str]` — Storage description + +
+
+ +
+
+ +**id:** `typing.Optional[int]` — Storage ID. If set, storage with specified ID will be updated
@@ -25488,7 +27158,7 @@ client.import_storage.s3s.update(
-**presign:** `typing.Optional[bool]` +**presign:** `typing.Optional[bool]` — Presign URLs for download
@@ -25496,7 +27166,7 @@ client.import_storage.s3s.update(
-**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes) +**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes
@@ -25504,7 +27174,7 @@ client.import_storage.s3s.update(
-**project:** `typing.Optional[int]` — A unique integer value identifying this project. +**project:** `typing.Optional[int]` — Project ID
@@ -25512,7 +27182,7 @@ client.import_storage.s3s.update(
-**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan over the bucket content +**recursive_scan:** `typing.Optional[bool]` — Scan recursively
@@ -25520,7 +27190,7 @@ client.import_storage.s3s.update(
-**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported.
@@ -25536,7 +27206,7 @@ client.import_storage.s3s.update(
-**role_arn:** `typing.Optional[str]` — AWS RoleArn +**s3endpoint:** `typing.Optional[str]` — S3 Endpoint
@@ -25544,7 +27214,7 @@ client.import_storage.s3s.update(
-**s3endpoint:** `typing.Optional[str]` — S3 Endpoint +**title:** `typing.Optional[str]` — Storage title
@@ -25552,7 +27222,7 @@ client.import_storage.s3s.update(
-**status:** `typing.Optional[StatusC5AEnum]` +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio.
@@ -25560,15 +27230,69 @@ client.import_storage.s3s.update(
-**synchronizable:** `typing.Optional[bool]` +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+ + +
+
+
+
client.import_storage.s3.get(...)
-**title:** `typing.Optional[str]` — Cloud storage title +#### 📝 Description + +
+
+ +
+
+ +Get a specific S3 import storage connection. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.s3.get( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int`
@@ -25576,15 +27300,69 @@ client.import_storage.s3s.update(
-**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+ +
+
+
+ +
client.import_storage.s3.delete(...)
-**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs +#### 📝 Description + +
+
+ +
+
+ +Delete a specific S3 import storage connection. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.s3.delete( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int`
@@ -25604,7 +27382,7 @@ client.import_storage.s3s.update(
-
client.import_storage.s3s.sync(...) +
client.import_storage.s3.update(...)
@@ -25616,7 +27394,7 @@ client.import_storage.s3s.update(
-Sync tasks from an S3 import storage connection that was set up with IAM role access. +Update a specific S3 import storage connection.
@@ -25636,7 +27414,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.import_storage.s3s.sync( +client.import_storage.s3.update( id=1, ) @@ -25662,6 +27440,134 @@ client.import_storage.s3s.sync(
+**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID + +
+
+ +
+
+ +**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY + +
+
+ +
+
+ +**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN + +
+
+ +
+
+ +**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID + +
+
+ +
+
+ +**bucket:** `typing.Optional[str]` — S3 bucket name + +
+
+ +
+
+ +**description:** `typing.Optional[str]` — Storage description + +
+
+ +
+
+ +**prefix:** `typing.Optional[str]` — S3 bucket prefix + +
+
+ +
+
+ +**presign:** `typing.Optional[bool]` — Presign URLs for download + +
+
+ +
+
+ +**presign_ttl:** `typing.Optional[int]` — Presign TTL in minutes + +
+
+ +
+
+ +**project:** `typing.Optional[int]` — Project ID + +
+
+ +
+
+ +**recursive_scan:** `typing.Optional[bool]` — Scan recursively + +
+
+ +
+
+ +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects. You must specify it otherwise no objects will be imported. + +
+
+ +
+
+ +**region_name:** `typing.Optional[str]` — AWS Region + +
+
+ +
+
+ +**s3endpoint:** `typing.Optional[str]` — S3 Endpoint + +
+
+ +
+
+ +**title:** `typing.Optional[str]` — Storage title + +
+
+ +
+
+ +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs. For example, if your bucket contains images, you can use this option to generate URLs for these images. If set to False, it will read the content of the file and load it into Label Studio. + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -25674,8 +27580,7 @@ client.import_storage.s3s.sync(
-## Organizations Invites -
client.organizations.invites.get_invite_link() +
client.import_storage.s3.sync(...)
@@ -25687,7 +27592,7 @@ client.import_storage.s3s.sync(
-Get invite link for organization +Sync tasks from an S3 import storage connection.
@@ -25707,7 +27612,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.organizations.invites.get_invite_link() +client.import_storage.s3.sync( + id=1, +) ``` @@ -25723,6 +27630,14 @@ client.organizations.invites.get_invite_link()
+**id:** `int` — Storage ID + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -25735,7 +27650,8 @@ client.organizations.invites.get_invite_link()
-
client.organizations.invites.revoke_invite(...) +## ImportStorage S3S +
client.import_storage.s3s.list(...)
@@ -25747,7 +27663,13 @@ client.organizations.invites.get_invite_link()
-Revoke invite to organization + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get list of all S3 import storage connections set up with IAM role access.
@@ -25767,8 +27689,8 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.organizations.invites.revoke_invite( - email="email", +client.import_storage.s3s.list( + project=1, ) ``` @@ -25785,7 +27707,15 @@ client.organizations.invites.revoke_invite(
-**email:** `str` +**project:** `int` — Project ID + +
+
+ +
+
+ +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -25805,7 +27735,7 @@ client.organizations.invites.revoke_invite(
-
client.organizations.invites.send_email(...) +
client.import_storage.s3s.create(...)
@@ -25817,7 +27747,13 @@ client.organizations.invites.revoke_invite(
-Send email with invite to organization + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Create S3 import storage with IAM role access.
@@ -25837,9 +27773,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.organizations.invites.send_email( - emails=["emails"], - role="role", +client.import_storage.s3s.create( + project=1, + role_arn="role_arn", ) ``` @@ -25856,7 +27792,3583 @@ client.organizations.invites.send_email(
-**emails:** `typing.Sequence[str]` +**project:** `int` — A unique integer value identifying this project. + +
+
+ +
+
+ +**role_arn:** `str` — AWS RoleArn + +
+
+ +
+
+ +**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID + +
+
+ +
+
+ +**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY + +
+
+ +
+
+ +**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN + +
+
+ +
+
+ +**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID + +
+
+ +
+
+ +**bucket:** `typing.Optional[str]` — S3 bucket name + +
+
+ +
+
+ +**description:** `typing.Optional[str]` — Cloud storage description + +
+
+ +
+
+ +**external_id:** `typing.Optional[str]` — AWS ExternalId + +
+
+ +
+
+ +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time + +
+
+ +
+
+ +**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time + +
+
+ +
+
+ +**last_sync_job:** `typing.Optional[str]` — Last sync job ID + +
+
+ +
+
+ +**legacy_auth:** `typing.Optional[bool]` + +
+
+ +
+
+ +**meta:** `typing.Optional[typing.Optional[typing.Any]]` + +
+
+ +
+
+ +**prefix:** `typing.Optional[str]` — S3 bucket prefix + +
+
+ +
+
+ +**presign:** `typing.Optional[bool]` + +
+
+ +
+
+ +**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes) + +
+
+ +
+
+ +**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan over the bucket content + +
+
+ +
+
+ +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects + +
+
+ +
+
+ +**region_name:** `typing.Optional[str]` — AWS Region + +
+
+ +
+
+ +**s3endpoint:** `typing.Optional[str]` — S3 Endpoint + +
+
+ +
+
+ +**status:** `typing.Optional[StatusC5AEnum]` + +
+
+ +
+
+ +**synchronizable:** `typing.Optional[bool]` + +
+
+ +
+
+ +**title:** `typing.Optional[str]` — Cloud storage title + +
+
+ +
+
+ +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync + +
+
+ +
+
+ +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+ +
+ + + + +
+ +
client.import_storage.s3s.validate(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Validate a specific S3 import storage connection that was set up with IAM role access. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.s3s.validate( + project=1, + role_arn="role_arn", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**project:** `int` — A unique integer value identifying this project. + +
+
+ +
+
+ +**role_arn:** `str` — AWS RoleArn + +
+
+ +
+
+ +**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID + +
+
+ +
+
+ +**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY + +
+
+ +
+
+ +**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN + +
+
+ +
+
+ +**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID + +
+
+ +
+
+ +**bucket:** `typing.Optional[str]` — S3 bucket name + +
+
+ +
+
+ +**description:** `typing.Optional[str]` — Cloud storage description + +
+
+ +
+
+ +**external_id:** `typing.Optional[str]` — AWS ExternalId + +
+
+ +
+
+ +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time + +
+
+ +
+
+ +**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time + +
+
+ +
+
+ +**last_sync_job:** `typing.Optional[str]` — Last sync job ID + +
+
+ +
+
+ +**legacy_auth:** `typing.Optional[bool]` + +
+
+ +
+
+ +**meta:** `typing.Optional[typing.Optional[typing.Any]]` + +
+
+ +
+
+ +**prefix:** `typing.Optional[str]` — S3 bucket prefix + +
+
+ +
+
+ +**presign:** `typing.Optional[bool]` + +
+
+ +
+
+ +**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes) + +
+
+ +
+
+ +**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan over the bucket content + +
+
+ +
+
+ +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects + +
+
+ +
+
+ +**region_name:** `typing.Optional[str]` — AWS Region + +
+
+ +
+
+ +**s3endpoint:** `typing.Optional[str]` — S3 Endpoint + +
+
+ +
+
+ +**status:** `typing.Optional[StatusC5AEnum]` + +
+
+ +
+
+ +**synchronizable:** `typing.Optional[bool]` + +
+
+ +
+
+ +**title:** `typing.Optional[str]` — Cloud storage title + +
+
+ +
+
+ +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync + +
+
+ +
+
+ +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.import_storage.s3s.get(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get a specific S3 import storage connection that was set up with IAM role access. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.s3s.get( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.import_storage.s3s.delete(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Delete a specific S3 import storage connection that was set up with IAM role access. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.s3s.delete( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.import_storage.s3s.update(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update a specific S3 import storage connection that was set up with IAM role access. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.s3s.update( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**aws_access_key_id:** `typing.Optional[str]` — AWS_ACCESS_KEY_ID + +
+
+ +
+
+ +**aws_secret_access_key:** `typing.Optional[str]` — AWS_SECRET_ACCESS_KEY + +
+
+ +
+
+ +**aws_session_token:** `typing.Optional[str]` — AWS_SESSION_TOKEN + +
+
+ +
+
+ +**aws_sse_kms_key_id:** `typing.Optional[str]` — AWS SSE KMS Key ID + +
+
+ +
+
+ +**bucket:** `typing.Optional[str]` — S3 bucket name + +
+
+ +
+
+ +**description:** `typing.Optional[str]` — Cloud storage description + +
+
+ +
+
+ +**external_id:** `typing.Optional[str]` — AWS ExternalId + +
+
+ +
+
+ +**last_sync:** `typing.Optional[dt.datetime]` — Last sync finished time + +
+
+ +
+
+ +**last_sync_count:** `typing.Optional[int]` — Count of tasks synced last time + +
+
+ +
+
+ +**last_sync_job:** `typing.Optional[str]` — Last sync job ID + +
+
+ +
+
+ +**legacy_auth:** `typing.Optional[bool]` + +
+
+ +
+
+ +**meta:** `typing.Optional[typing.Optional[typing.Any]]` + +
+
+ +
+
+ +**prefix:** `typing.Optional[str]` — S3 bucket prefix + +
+
+ +
+
+ +**presign:** `typing.Optional[bool]` + +
+
+ +
+
+ +**presign_ttl:** `typing.Optional[int]` — Presigned URLs TTL (in minutes) + +
+
+ +
+
+ +**project:** `typing.Optional[int]` — A unique integer value identifying this project. + +
+
+ +
+
+ +**recursive_scan:** `typing.Optional[bool]` — Perform recursive scan over the bucket content + +
+
+ +
+
+ +**regex_filter:** `typing.Optional[str]` — Cloud storage regex for filtering objects + +
+
+ +
+
+ +**region_name:** `typing.Optional[str]` — AWS Region + +
+
+ +
+
+ +**role_arn:** `typing.Optional[str]` — AWS RoleArn + +
+
+ +
+
+ +**s3endpoint:** `typing.Optional[str]` — S3 Endpoint + +
+
+ +
+
+ +**status:** `typing.Optional[StatusC5AEnum]` + +
+
+ +
+
+ +**synchronizable:** `typing.Optional[bool]` + +
+
+ +
+
+ +**title:** `typing.Optional[str]` — Cloud storage title + +
+
+ +
+
+ +**traceback:** `typing.Optional[str]` — Traceback report for the last failed sync + +
+
+ +
+
+ +**use_blob_urls:** `typing.Optional[bool]` — Interpret objects as BLOBs and generate URLs + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.import_storage.s3s.sync(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Sync tasks from an S3 import storage connection that was set up with IAM role access. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.import_storage.s3s.sync( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Organizations Invites +
client.organizations.invites.get_invite_link() +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Get invite link for organization +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.organizations.invites.get_invite_link() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.organizations.invites.revoke_invite(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Revoke invite to organization +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.organizations.invites.revoke_invite( + email="email", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**email:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.organizations.invites.send_email(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Send email with invite to organization +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.organizations.invites.send_email( + emails=["emails"], + role="OW", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**emails:** `typing.Sequence[str]` + +
+
+ +
+
+ +**role:** `Role9E7Enum` + +
+
+ +
+
+ +**projects:** `typing.Optional[typing.Sequence[int]]` + +
+
+ +
+
+ +**workspaces:** `typing.Optional[typing.Sequence[int]]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Organizations Members +
client.organizations.members.list(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Retrieve a list of all users and roles in a specific organization. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.organizations.members.list( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` — A unique integer value identifying this organization. + +
+
+ +
+
+ +**exclude_project_id:** `typing.Optional[int]` — Project ID to exclude users who are already associated with this project (direct members, workspace members, or implicit admin/owner access). + +
+
+ +
+
+ +**exclude_workspace_id:** `typing.Optional[int]` — Workspace ID to exclude users who are already associated with this workspace (direct workspace members or implicit admin/owner access). + +
+
+ +
+
+ +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. + +
+
+ +
+
+ +**page:** `typing.Optional[int]` — A page number within the paginated result set. + +
+
+ +
+
+ +**page_size:** `typing.Optional[int]` — Number of results to return per page. + +
+
+ +
+
+ +**search:** `typing.Optional[str]` — A search term. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.organizations.members.update(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update organization membership or role for a specific user ID. + +**User Rotation Best Practices for API Usage** + +To maintain compliance with our licensing terms and ensure optimal performance of HumanSignal's APIs, please consider the following guidelines when managing user assignments: + +* **Maintain a 7-Day Minimum Assignment**: Once a licensed seat is assigned to a user, maintain that assignment for at least seven consecutive days before rotating it to another user. + +* **Automate, Monitor, and Log Rotations**: Implement automated scheduling and logging mechanisms to track the timing of user rotations. This helps ensure that rotations adhere to the seven-day minimum period. + +* **Adhere to API Update Frequency and Wait Periods**: When updating user assignments via our APIs, follow the recommended frequency and wait period guidelines provided in the HumanSignal API documentation. Avoid sending rapid, successive requests that might overload the endpoint. Instead, incorporate appropriate delays between calls as specified in the documentation. + +* **Avoid Overloading the API Endpoint**: Design your integration to batch or schedule updates where possible, and implement backoff strategies if the API indicates rate limiting. This helps prevent service disruptions and ensures a smooth operation. + +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.organizations.members.update( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` — A unique integer value identifying this organization. + +
+
+ +
+
+ +**role:** `typing.Optional[Role9E7Enum]` + +
+
+ +
+
+ +**user_id:** `typing.Optional[int]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.organizations.members.get(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Get organization member details by user ID. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.organizations.members.get( + id=1, + user_pk=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**user_pk:** `int` — A unique integer value identifying the user to get organization details for. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.organizations.members.delete(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Soft delete a member from the organization. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.organizations.members.delete( + id=1, + user_pk=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**user_pk:** `int` — A unique integer value identifying the user to be deleted from the organization. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Organizations Permissions +
client.organizations.permissions.list(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+List all organization-level permission overrides for a given organization. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.organizations.permissions.list( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.organizations.permissions.create(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Create a new organization-level permission override for a given organization. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.organizations.permissions.create( + id=1, + permission="permission", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**permission:** `str` + +
+
+ +
+
+ +**roles:** `typing.Optional[typing.Sequence[Role9E7Enum]]` — Explicit roles that have this permission within the organization. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.organizations.permissions.get_options(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Retrieve the list of configurable permission options (label, tooltip, default role and allowed roles). +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.organizations.permissions.get_options( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.organizations.permissions.get(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Retrieve the organization-level permission override for a given permission key. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.organizations.permissions.get( + id=1, + permission="permission", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**permission:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.organizations.permissions.replace(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Replace the organization-level permission override for a given permission key. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.organizations.permissions.replace( + id=1, + permission_="permission", + permission="permission", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` — A unique integer value identifying this organization. + +
+
+ +
+
+ +**permission_:** `str` — Permission key to update within the organization. + +
+
+ +
+
+ +**permission:** `str` + +
+
+ +
+
+ +**roles:** `typing.Optional[typing.Sequence[Role9E7Enum]]` — Explicit roles that have this permission within the organization. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.organizations.permissions.delete(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Delete the organization-level permission override for a given permission key. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.organizations.permissions.delete( + id=1, + permission="permission", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**permission:** `str` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.organizations.permissions.update(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Partially update the organization-level permission override for a given permission key. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.organizations.permissions.update( + id=1, + permission="permission", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**permission:** `str` + +
+
+ +
+
+ +**patched_organization_permission_request_permission:** `typing.Optional[str]` + +
+
+ +
+
+ +**roles:** `typing.Optional[typing.Sequence[Role9E7Enum]]` — Explicit roles that have this permission within the organization. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Projects Roles +
client.projects.roles.list(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + List project roles for requested IDs for the current user + +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.roles.list() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**ids:** `typing.Optional[int]` + +
+
+ +
+
+ +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.projects.roles.add(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + Create project role for user allowing the user the same access level provided by organization role. + +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.roles.add( + project=1, + role="OW", + user=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**project:** `int` + +
+
+ +
+
+ +**role:** `Role9E7Enum` + +User role in project + +* `OW` - Owner +* `AD` - Administrator +* `MA` - Manager +* `RE` - Reviewer +* `AN` - Annotator +* `DI` - Deactivated +* `NO` - Not Activated + +
+
+ +
+
+ +**user:** `int` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.projects.roles.remove(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + Remove project role for user allowing the user the same access level provided by organization role. + +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.roles.remove( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` — A unique integer value identifying this project role. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.projects.roles.get(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + List users and their project level roles for a given project. + If user is not listed here and is a member of the project then they would behave as assigned role in organization. + +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.roles.get( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Projects Exports +
client.projects.exports.list_formats(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Retrieve the available export formats for the current project by ID. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.exports.list_formats( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` — A unique integer value identifying this project. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.projects.exports.list(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Returns a list of exported files for a specific project by ID. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.exports.list( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` — A unique integer value identifying this project. + +
+
+ +
+
+ +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.projects.exports.create(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Create a new export request to start a background task and generate an export file for a specific project by ID. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.exports.create( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` — A unique integer value identifying this project. + +
+
+ +
+
+ +**annotation_filter_options:** `typing.Optional[LseAnnotationFilterOptionsRequest]` + +
+
+ +
+
+ +**converted_formats:** `typing.Optional[typing.Sequence[ConvertedFormatRequest]]` + +
+
+ +
+
+ +**counters:** `typing.Optional[typing.Optional[typing.Any]]` + +
+
+ +
+
+ +**created_by:** `typing.Optional[UserSimpleRequest]` + +
+
+ +
+
+ +**finished_at:** `typing.Optional[dt.datetime]` — Complete or fail time + +
+
+ +
+
+ +**md5:** `typing.Optional[str]` + +
+
+ +
+
+ +**serialization_options:** `typing.Optional[SerializationOptionsRequest]` + +
+
+ +
+
+ +**status:** `typing.Optional[Status7BfEnum]` + +
+
+ +
+
+ +**task_filter_options:** `typing.Optional[LseTaskFilterOptionsRequest]` + +
+
+ +
+
+ +**title:** `typing.Optional[str]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.projects.exports.get(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Retrieve information about an export file by export ID for a specific project. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.exports.get( + export_pk=1, + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**export_pk:** `int` — Primary key identifying the export file. + +
+
+ +
+
+ +**id:** `int` — A unique integer value identifying this project. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.projects.exports.delete(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Delete an export file by specified export ID. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.exports.delete( + export_pk=1, + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**export_pk:** `int` — Primary key identifying the export file. + +
+
+ +
+
+ +**id:** `int` — A unique integer value identifying this project. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.projects.exports.convert(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Convert export snapshot to selected format +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.exports.convert( + export_pk=1, + id=1, + export_type="export_type", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**export_pk:** `int` — Primary key identifying the export file. + +
+
+ +
+
+ +**id:** `int` — A unique integer value identifying this project. + +
+
+ +
+
+ +**export_type:** `str` — Export file format. + +
+
+ +
+
+ +**download_resources:** `typing.Optional[bool]` — Download resources in converter. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Projects Members +
client.projects.members.add(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Add a member to a specific project. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.members.add( + id=1, + user=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**user:** `int` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.projects.members.remove(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Remove a member from a specific project. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.members.remove( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Projects Metrics +
client.projects.metrics.get(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get the current metrics configuration for a project. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.metrics.get( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.projects.metrics.update(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update metrics strategy and parameters for a project. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.metrics.update( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**additional_params:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` + +
+
+ +
+
+ +**agreement_threshold:** `typing.Optional[int]` + +
+
+ +
+
+ +**max_additional_annotators_assignable:** `typing.Optional[int]` + +
+
+ +
+
+ +**metric_name:** `typing.Optional[str]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Projects Stats +
client.projects.stats.model_version_annotator_agreement(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get agreement between a given model version and all annotators in the project for overlapping tasks. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.stats.model_version_annotator_agreement( + id=1, + model_version="model_version", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int`
@@ -25864,7 +31376,7 @@ client.organizations.invites.send_email(
-**role:** `str` +**model_version:** `str`
@@ -25884,8 +31396,7 @@ client.organizations.invites.send_email(
-## Organizations Members -
client.organizations.members.list(...) +
client.projects.stats.model_version_ground_truth_agreement(...)
@@ -25897,7 +31408,13 @@ client.organizations.invites.send_email(
-Retrieve a list of all users and roles in a specific organization. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get agreement between a given model version and ground truth annotations in the project for overlapping tasks.
@@ -25917,8 +31434,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.organizations.members.list( +client.projects.stats.model_version_ground_truth_agreement( id=1, + model_version="model_version", ) ``` @@ -25935,39 +31453,7 @@ client.organizations.members.list(
-**id:** `int` — A unique integer value identifying this organization. - -
-
- -
-
- -**exclude_project_id:** `typing.Optional[int]` — Project ID to exclude users who are already associated with this project (direct members, workspace members, or implicit admin/owner access). - -
-
- -
-
- -**exclude_workspace_id:** `typing.Optional[int]` — Workspace ID to exclude users who are already associated with this workspace (direct workspace members or implicit admin/owner access). - -
-
- -
-
- -**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. - -
-
- -
-
- -**page:** `typing.Optional[int]` — A page number within the paginated result set. +**id:** `int`
@@ -25975,7 +31461,7 @@ client.organizations.members.list(
-**page_size:** `typing.Optional[int]` — Number of results to return per page. +**model_version:** `str`
@@ -25983,7 +31469,7 @@ client.organizations.members.list(
-**search:** `typing.Optional[str]` — A search term. +**per_label:** `typing.Optional[bool]` — Calculate agreement per label
@@ -26003,7 +31489,7 @@ client.organizations.members.list(
-
client.organizations.members.update(...) +
client.projects.stats.model_version_prediction_agreement(...)
@@ -26015,20 +31501,13 @@ client.organizations.members.list(
-Update organization membership or role for a specific user ID. - -**User Rotation Best Practices for API Usage** - -To maintain compliance with our licensing terms and ensure optimal performance of HumanSignal's APIs, please consider the following guidelines when managing user assignments: - -* **Maintain a 7-Day Minimum Assignment**: Once a licensed seat is assigned to a user, maintain that assignment for at least seven consecutive days before rotating it to another user. - -* **Automate, Monitor, and Log Rotations**: Implement automated scheduling and logging mechanisms to track the timing of user rotations. This helps ensure that rotations adhere to the seven-day minimum period. - -* **Adhere to API Update Frequency and Wait Periods**: When updating user assignments via our APIs, follow the recommended frequency and wait period guidelines provided in the HumanSignal API documentation. Avoid sending rapid, successive requests that might overload the endpoint. Instead, incorporate appropriate delays between calls as specified in the documentation. - -* **Avoid Overloading the API Endpoint**: Design your integration to batch or schedule updates where possible, and implement backoff strategies if the API indicates rate limiting. This helps prevent service disruptions and ensures a smooth operation. - + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get agreement between a given model version and all other model versions in the project for overlapping tasks.
@@ -26048,8 +31527,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.organizations.members.update( +client.projects.stats.model_version_prediction_agreement( id=1, + model_version="model_version", ) ``` @@ -26066,7 +31546,7 @@ client.organizations.members.update(
-**id:** `int` — A unique integer value identifying this organization. +**id:** `int`
@@ -26074,7 +31554,7 @@ client.organizations.members.update(
-**role:** `typing.Optional[Role9E7Enum]` +**model_version:** `str`
@@ -26082,7 +31562,7 @@ client.organizations.members.update(
-**user_id:** `typing.Optional[int]` +**per_label:** `typing.Optional[bool]` — Calculate agreement per label
@@ -26102,7 +31582,7 @@ client.organizations.members.update(
-
client.organizations.members.get(...) +
client.projects.stats.iaa(...)
@@ -26114,7 +31594,13 @@ client.organizations.members.update(
-Get organization member details by user ID. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get Inter-Annotator Agreement (IAA) matrix for a project, showing agreement between all annotators.
@@ -26134,9 +31620,8 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.organizations.members.get( +client.projects.stats.iaa( id=1, - user_pk=1, ) ``` @@ -26161,7 +31646,31 @@ client.organizations.members.get(
-**user_pk:** `int` — A unique integer value identifying the user to get organization details for. +**expand:** `typing.Optional[str]` — Comma-separated list of fields to expand + +
+
+ +
+
+ +**per_label:** `typing.Optional[bool]` — Calculate IAA per label + +
+
+ +
+
+ +**std:** `typing.Optional[bool]` — Include standard deviation in results + +
+
+ +
+
+ +**task:** `typing.Optional[str]` — Comma-separated list of task IDs to filter by
@@ -26181,7 +31690,7 @@ client.organizations.members.get(
-
client.organizations.members.delete(...) +
client.projects.stats.users_ground_truth_agreement(...)
@@ -26193,7 +31702,13 @@ client.organizations.members.get(
-Soft delete a member from the organization. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get ground truth agreement statistics for multiple users within a project.
@@ -26213,9 +31728,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.organizations.members.delete( +client.projects.stats.users_ground_truth_agreement( id=1, - user_pk=1, + ids="ids", ) ``` @@ -26240,7 +31755,15 @@ client.organizations.members.delete(
-**user_pk:** `int` — A unique integer value identifying the user to be deleted from the organization. +**ids:** `str` — Comma separated list of user IDs to get ground truth agreement for + +
+
+ +
+
+ +**per_label:** `typing.Optional[bool]` — Per label
@@ -26260,8 +31783,7 @@ client.organizations.members.delete(
-## Projects Exports -
client.projects.exports.list_formats(...) +
client.projects.stats.agreement_annotator(...)
@@ -26273,7 +31795,13 @@ client.organizations.members.delete(
-Retrieve the available export formats for the current project by ID. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get agreement statistics for a specific annotator within a project.
@@ -26293,8 +31821,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.exports.list_formats( +client.projects.stats.agreement_annotator( id=1, + user_id=1, ) ``` @@ -26311,7 +31840,15 @@ client.projects.exports.list_formats(
-**id:** `int` — A unique integer value identifying this project. +**id:** `int` + +
+
+ +
+
+ +**user_id:** `int`
@@ -26331,7 +31868,7 @@ client.projects.exports.list_formats(
-
client.projects.exports.list(...) +
client.projects.stats.agreement_annotators(...)
@@ -26343,7 +31880,13 @@ client.projects.exports.list_formats(
-Returns a list of exported files for a specific project by ID. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get agreement statistics for multiple annotators within a project.
@@ -26363,8 +31906,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.exports.list( +client.projects.stats.agreement_annotators( id=1, + ids="ids", ) ``` @@ -26381,7 +31925,7 @@ client.projects.exports.list(
-**id:** `int` — A unique integer value identifying this project. +**id:** `int`
@@ -26389,7 +31933,7 @@ client.projects.exports.list(
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**ids:** `str` — Comma separated list of annotator user IDs to get agreement scores for
@@ -26409,7 +31953,7 @@ client.projects.exports.list(
-
client.projects.exports.create(...) +
client.projects.stats.data_filters(...)
@@ -26421,7 +31965,13 @@ client.projects.exports.list(
-Create a new export request to start a background task and generate an export file for a specific project by ID. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get statistics about user data filters and their usage within a project.
@@ -26441,7 +31991,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.exports.create( +client.projects.stats.data_filters( id=1, ) @@ -26459,87 +32009,7 @@ client.projects.exports.create(
-**id:** `int` — A unique integer value identifying this project. - -
-
- -
-
- -**annotation_filter_options:** `typing.Optional[LseAnnotationFilterOptionsRequest]` - -
-
- -
-
- -**converted_formats:** `typing.Optional[typing.Sequence[ConvertedFormatRequest]]` - -
-
- -
-
- -**counters:** `typing.Optional[typing.Optional[typing.Any]]` - -
-
- -
-
- -**created_by:** `typing.Optional[UserSimpleRequest]` - -
-
- -
-
- -**finished_at:** `typing.Optional[dt.datetime]` — Complete or fail time - -
-
- -
-
- -**md5:** `typing.Optional[str]` - -
-
- -
-
- -**serialization_options:** `typing.Optional[SerializationOptionsRequest]` - -
-
- -
-
- -**status:** `typing.Optional[Status7BfEnum]` - -
-
- -
-
- -**task_filter_options:** `typing.Optional[LseTaskFilterOptionsRequest]` - -
-
- -
-
- -**title:** `typing.Optional[str]` +**id:** `int`
@@ -26559,7 +32029,7 @@ client.projects.exports.create(
-
client.projects.exports.get(...) +
client.projects.stats.finished_tasks(...)
@@ -26571,7 +32041,13 @@ client.projects.exports.create(
-Retrieve information about an export file by export ID for a specific project. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get statistics about finished tasks for a project.
@@ -26591,8 +32067,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.exports.get( - export_pk=1, +client.projects.stats.finished_tasks( id=1, ) @@ -26610,7 +32085,7 @@ client.projects.exports.get(
-**export_pk:** `int` — Primary key identifying the export file. +**id:** `int`
@@ -26618,7 +32093,7 @@ client.projects.exports.get(
-**id:** `int` — A unique integer value identifying this project. +**user_pk:** `typing.Optional[int]` — User ID to filter statistics by (optional)
@@ -26638,7 +32113,7 @@ client.projects.exports.get(
-
client.projects.exports.delete(...) +
client.projects.stats.lead_time(...)
@@ -26650,7 +32125,13 @@ client.projects.exports.get(
-Delete an export file by specified export ID. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get lead time statistics across the project, including average annotation time.
@@ -26670,8 +32151,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.exports.delete( - export_pk=1, +client.projects.stats.lead_time( id=1, ) @@ -26689,15 +32169,7 @@ client.projects.exports.delete(
-**export_pk:** `int` — Primary key identifying the export file. - -
-
- -
-
- -**id:** `int` — A unique integer value identifying this project. +**id:** `int`
@@ -26717,7 +32189,7 @@ client.projects.exports.delete(
-
client.projects.exports.convert(...) +
client.projects.stats.total_agreement(...)
@@ -26729,7 +32201,15 @@ client.projects.exports.delete(
-Convert export snapshot to selected format + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Overall or per-label total agreement across the project. + +NOTE: due to an open issue in Fern, SDK clients will raise ApiError upon handling a 204 response. As a workaround, wrap call to this function in a try-except block.
@@ -26749,10 +32229,8 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.exports.convert( - export_pk=1, +client.projects.stats.total_agreement( id=1, - export_type="export_type", ) ``` @@ -26769,23 +32247,7 @@ client.projects.exports.convert(
-**export_pk:** `int` — Primary key identifying the export file. - -
-
- -
-
- -**id:** `int` — A unique integer value identifying this project. - -
-
- -
-
- -**export_type:** `str` — Export file format. +**id:** `int`
@@ -26793,7 +32255,7 @@ client.projects.exports.convert(
-**download_resources:** `typing.Optional[bool]` — Download resources in converter. +**per_label:** `typing.Optional[bool]` — Return agreement per label
@@ -26813,8 +32275,7 @@ client.projects.exports.convert(
-## Projects Members -
client.projects.members.get(...) +
client.projects.stats.update_stats(...)
@@ -26826,7 +32287,13 @@ client.projects.exports.convert(
-Retrieve the members for a specific project. Optionally filter by user IDs (comma-separated). + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Start stats recalculation for given project
@@ -26846,7 +32313,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.members.get( +client.projects.stats.update_stats( id=1, ) @@ -26872,7 +32339,7 @@ client.projects.members.get(
-**user_ids:** `typing.Optional[str]` — Comma-separated list of user IDs to include. Example: user_ids=1,2,3 +**stat_type:** `typing.Optional[str]` — Stat type to recalculate. Possible values: label, stats
@@ -26892,8 +32359,7 @@ client.projects.members.get(
-## Projects Metrics -
client.projects.metrics.get(...) +
client.projects.stats.users_prediction_agreement(...)
@@ -26905,7 +32371,13 @@ client.projects.members.get(
-Get the current metrics configuration for a project. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get prediction agreement statistics for multiple annotators within a project.
@@ -26925,8 +32397,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.metrics.get( +client.projects.stats.users_prediction_agreement( id=1, + ids="ids", ) ``` @@ -26951,6 +32424,22 @@ client.projects.metrics.get(
+**ids:** `str` — Comma separated list of annotator user IDs to get agreement scores for + +
+
+ +
+
+ +**per_label:** `typing.Optional[bool]` — Per label + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -26963,7 +32452,7 @@ client.projects.metrics.get(
-
client.projects.metrics.update(...) +
client.projects.stats.users_review_score(...)
@@ -26975,7 +32464,13 @@ client.projects.metrics.get(
-Update metrics strategy and parameters for a project. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get review score and performance score statistics for multiple annotators within a project.
@@ -26995,8 +32490,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.metrics.update( +client.projects.stats.users_review_score( id=1, + ids="ids", ) ``` @@ -27021,15 +32517,7 @@ client.projects.metrics.update(
-**additional_params:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` - -
-
- -
-
- -**agreement_threshold:** `typing.Optional[int]` +**ids:** `str` — Comma separated list of annotator user IDs to get review scores for
@@ -27037,15 +32525,7 @@ client.projects.metrics.update(
-**max_additional_annotators_assignable:** `typing.Optional[int]` - -
-
- -
-
- -**metric_name:** `typing.Optional[str]` +**per_label:** `typing.Optional[bool]` — Per label
@@ -27065,8 +32545,7 @@ client.projects.metrics.update(
-## Projects Stats -
client.projects.stats.iaa(...) +
client.projects.stats.user_prediction_agreement(...)
@@ -27078,7 +32557,13 @@ client.projects.metrics.update(
-Get Inter-Annotator Agreement (IAA) matrix for a project, showing agreement between all annotators. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get prediction agreement statistics for a specific user within a project.
@@ -27098,8 +32583,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.stats.iaa( +client.projects.stats.user_prediction_agreement( id=1, + user_pk=1, ) ``` @@ -27124,7 +32610,7 @@ client.projects.stats.iaa(
-**expand:** `typing.Optional[str]` — Comma-separated list of fields to expand +**user_pk:** `int`
@@ -27132,7 +32618,7 @@ client.projects.stats.iaa(
-**per_label:** `typing.Optional[bool]` — Calculate IAA per label +**per_label:** `typing.Optional[bool]` — Calculate agreement per label
@@ -27140,15 +32626,92 @@ client.projects.stats.iaa(
-**std:** `typing.Optional[bool]` — Include standard deviation in results +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
+ + + + +
+
client.projects.stats.user_review_score(...)
-**task:** `typing.Optional[str]` — Comma-separated list of task IDs to filter by +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get review score statistics for a specific user within a project. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.stats.user_review_score( + id=1, + user_pk=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**user_pk:** `int` + +
+
+ +
+
+ +**per_label:** `typing.Optional[bool]` — Calculate agreement per label
@@ -27168,7 +32731,7 @@ client.projects.stats.iaa(
-
client.projects.stats.total_agreement(...) +
client.projects.stats.user_ground_truth_agreement(...)
@@ -27180,9 +32743,13 @@ client.projects.stats.iaa(
-Overall or per-label total agreement across the project. - -NOTE: due to an open issue in Fern, SDK clients will raise ApiError upon handling a 204 response. As a workaround, wrap call to this function in a try-except block. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get ground truth agreement statistics for a specific user within a project.
@@ -27202,8 +32769,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.stats.total_agreement( +client.projects.stats.user_ground_truth_agreement( id=1, + user_pk=1, ) ``` @@ -27228,7 +32796,15 @@ client.projects.stats.total_agreement(
-**per_label:** `typing.Optional[bool]` — Return agreement per label +**user_pk:** `int` + +
+
+ +
+
+ +**per_label:** `typing.Optional[bool]` — Calculate agreement per label
@@ -27261,6 +32837,12 @@ client.projects.stats.total_agreement(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Assign multiple users to a collection of tasks within a specific project.
@@ -27371,6 +32953,12 @@ client.projects.assignments.bulk_assign(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a list of tasks and assignees for those tasks for a specific project.
@@ -27450,6 +33038,12 @@ client.projects.assignments.list(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Assign a user to a task in a specific project.
@@ -27547,6 +33141,12 @@ client.projects.assignments.assign(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Remove assignees for a task within a specific project.
@@ -27642,6 +33242,12 @@ client.projects.assignments.delete(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update the assignee for a task in a specific project.
@@ -27740,6 +33346,12 @@ client.projects.assignments.update(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a list of all pauses.
@@ -27835,6 +33447,12 @@ client.projects.pauses.list(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new pause entry.
@@ -27939,6 +33557,12 @@ Reason for pausing
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific pause by ID.
@@ -28027,6 +33651,12 @@ client.projects.pauses.get(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific pause by ID.
@@ -28115,6 +33745,12 @@ client.projects.pauses.delete(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Partially update a pause entry by ID.
@@ -28228,6 +33864,12 @@ Reason for pausing
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Assign project members in bulk.
@@ -28339,6 +33981,12 @@ client.projects.members.bulk.post(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Unassign project members in bulk. Allows the same request body as bulk assign.
@@ -28418,6 +34066,12 @@ client.projects.members.bulk.delete(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve the members for a specific project.
@@ -28469,31 +34123,209 @@ for page in response.iter_pages():
-**ids:** `typing.Optional[str]` — Comma-separated list of user IDs to filter by +**ids:** `typing.Optional[str]` — Comma-separated list of user IDs to filter by + +
+
+ +
+
+ +**implicit:** `typing.Optional[bool]` — Include/Exclude implicit project members in the results. If not provided, explicit + implicit members are returned. + +
+
+ +
+
+ +**no_annotators:** `typing.Optional[bool]` — Exclude annotators from the results + +
+
+ +
+
+ +**page:** `typing.Optional[int]` — A page number within the paginated result set. + +
+
+ +
+
+ +**page_size:** `typing.Optional[int]` — Number of results to return per page. + +
+
+ +
+
+ +**search:** `typing.Optional[str]` — Search term for filtering members by name, email, or username + +
+
+ +
+
+ +**with_deleted:** `typing.Optional[bool]` — Include deleted members in the results + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+ +
+ + + + +
+ +## Projects Metrics Custom +
client.projects.metrics.custom.get_lambda(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get the AWS Lambda code for the custom metric configured for this project. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.metrics.custom.get_lambda( + id=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+ + +
+
+
+
client.projects.metrics.custom.update_lambda(...)
-**implicit:** `typing.Optional[bool]` — Include/Exclude implicit project members in the results. If not provided, explicit + implicit members are returned. - +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Create or update the AWS Lambda function used for custom metrics in this project.
+
+
+ +#### 🔌 Usage
-**no_annotators:** `typing.Optional[bool]` — Exclude annotators from the results - +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.projects.metrics.custom.update_lambda( + id=1, + code="code", +) + +``` +
+
+#### ⚙️ Parameters +
-**page:** `typing.Optional[int]` — A page number within the paginated result set. +
+
+ +**id:** `int`
@@ -28501,7 +34333,7 @@ for page in response.iter_pages():
-**page_size:** `typing.Optional[int]` — Number of results to return per page. +**code:** `str`
@@ -28509,7 +34341,7 @@ for page in response.iter_pages():
-**search:** `typing.Optional[str]` — Search term for filtering members by name, email, or username +**region:** `typing.Optional[str]`
@@ -28517,7 +34349,7 @@ for page in response.iter_pages():
-**with_deleted:** `typing.Optional[bool]` — Include deleted members in the results +**role:** `typing.Optional[str]`
@@ -28537,8 +34369,7 @@ for page in response.iter_pages():
-## Projects Metrics Custom -
client.projects.metrics.custom.get_lambda(...) +
client.projects.metrics.custom.logs(...)
@@ -28550,7 +34381,13 @@ for page in response.iter_pages():
-Get the AWS Lambda code for the custom metric configured for this project. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get AWS lambda logs for project, including filtering by start and end dates
@@ -28570,7 +34407,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.metrics.custom.get_lambda( +client.projects.metrics.custom.logs( id=1, ) @@ -28596,6 +34433,30 @@ client.projects.metrics.custom.get_lambda(
+**end_date:** `typing.Optional[str]` — End date for AWS logs filtering in format %Y-%m-%d + +
+
+ +
+
+ +**limit:** `typing.Optional[int]` — Limit the number of logs to return + +
+
+ +
+
+ +**start_date:** `typing.Optional[str]` — Start date for AWS logs filtering in format %Y-%m-%d + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -28608,7 +34469,7 @@ client.projects.metrics.custom.get_lambda(
-
client.projects.metrics.custom.update_lambda(...) +
client.projects.metrics.custom.check_function(...)
@@ -28620,7 +34481,13 @@ client.projects.metrics.custom.get_lambda(
-Create or update the AWS Lambda function used for custom metrics in this project. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Validate custom matching function code for the project.
@@ -28640,7 +34507,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.metrics.custom.update_lambda( +client.projects.metrics.custom.check_function( id=1, code="code", ) @@ -28675,22 +34542,6 @@ client.projects.metrics.custom.update_lambda(
-**region:** `typing.Optional[str]` - -
-
- -
-
- -**role:** `typing.Optional[str]` - -
-
- -
-
- **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -28703,7 +34554,8 @@ client.projects.metrics.custom.update_lambda(
-
client.projects.metrics.custom.logs(...) +## Prompts Indicators +
client.prompts.indicators.list(...)
@@ -28715,7 +34567,13 @@ client.projects.metrics.custom.update_lambda(
-Get AWS lambda logs for project, including filtering by start and end dates + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get key indicators for the Prompt dashboard.
@@ -28735,7 +34593,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.metrics.custom.logs( +client.prompts.indicators.list( id=1, ) @@ -28761,30 +34619,6 @@ client.projects.metrics.custom.logs(
-**end_date:** `typing.Optional[str]` — End date for AWS logs filtering in format %Y-%m-%d - -
-
- -
-
- -**limit:** `typing.Optional[int]` — Limit the number of logs to return - -
-
- -
-
- -**start_date:** `typing.Optional[str]` — Start date for AWS logs filtering in format %Y-%m-%d - -
-
- -
-
- **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -28797,7 +34631,7 @@ client.projects.metrics.custom.logs(
-
client.projects.metrics.custom.check_function(...) +
client.prompts.indicators.get(...)
@@ -28809,7 +34643,13 @@ client.projects.metrics.custom.logs(
-Validate custom matching function code for the project. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get a specific key indicator for the Prompt dashboard.
@@ -28829,9 +34669,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.projects.metrics.custom.check_function( +client.prompts.indicators.get( id=1, - code="code", + indicator_key="indicator_key", ) ``` @@ -28856,7 +34696,7 @@ client.projects.metrics.custom.check_function(
-**code:** `str` +**indicator_key:** `str`
@@ -28876,8 +34716,8 @@ client.projects.metrics.custom.check_function(
-## Prompts Indicators -
client.prompts.indicators.list(...) +## Prompts Versions +
client.prompts.versions.get_default_version_name(...)
@@ -28889,7 +34729,13 @@ client.projects.metrics.custom.check_function(
-Get key indicators for the Prompt dashboard. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get default prompt version name
@@ -28909,7 +34755,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.prompts.indicators.list( +client.prompts.versions.get_default_version_name( id=1, ) @@ -28947,7 +34793,7 @@ client.prompts.indicators.list(
-
client.prompts.indicators.get(...) +
client.prompts.versions.list(...)
@@ -28959,7 +34805,13 @@ client.prompts.indicators.list(
-Get a specific key indicator for the Prompt dashboard. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+List all versions of a prompt.
@@ -28979,9 +34831,8 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.prompts.indicators.get( - id=1, - indicator_key="indicator_key", +client.prompts.versions.list( + prompt_id=1, ) ``` @@ -28998,7 +34849,7 @@ client.prompts.indicators.get(
-**id:** `int` +**prompt_id:** `int`
@@ -29006,7 +34857,7 @@ client.prompts.indicators.get(
-**indicator_key:** `str` +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results.
@@ -29026,8 +34877,7 @@ client.prompts.indicators.get(
-## Prompts Versions -
client.prompts.versions.get_default_version_name(...) +
client.prompts.versions.create(...)
@@ -29039,7 +34889,13 @@ client.prompts.indicators.get(
-Get default prompt version name + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Create a new version of a prompt.
@@ -29059,8 +34915,11 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.prompts.versions.get_default_version_name( - id=1, +client.prompts.versions.create( + prompt_id=1, + prompt="prompt", + provider_model_id="provider_model_id", + title="title", ) ``` @@ -29077,7 +34936,7 @@ client.prompts.versions.get_default_version_name(
-**id:** `int` +**prompt_id:** `int`
@@ -29085,70 +34944,39 @@ client.prompts.versions.get_default_version_name(
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**prompt:** `str` — Prompt to execute
- -
- - - -
- -
client.prompts.versions.list(...)
-#### 📝 Description - -
-
+**provider_model_id:** `str` — The model ID to use within the given provider, e.g. gpt-3.5 + +
+
-List all versions of a prompt. -
-
+**title:** `str` — Model name +
-#### 🔌 Usage - -
-
-
-```python -from label_studio_sdk import LabelStudio - -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.prompts.versions.list( - prompt_id_=1, - prompt_id=1, -) - -``` -
-
+**model_provider_connection:** `typing.Optional[int]` +
-#### ⚙️ Parameters - -
-
-
-**prompt_id_:** `int` +**organization:** `typing.Optional[int]`
@@ -29156,7 +34984,7 @@ client.prompts.versions.list(
-**prompt_id:** `int` — A unique integer value identifying the model ID to list versions for. +**parent_model:** `typing.Optional[int]` — Parent model interface ID
@@ -29164,7 +34992,17 @@ client.prompts.versions.list(
-**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. +**provider:** `typing.Optional[ProviderEnum]` + +The model provider to use e.g. OpenAI + +* `OpenAI` - OpenAI +* `AzureOpenAI` - AzureOpenAI +* `AzureAIFoundry` - AzureAIFoundry +* `VertexAI` - VertexAI +* `Gemini` - Gemini +* `Anthropic` - Anthropic +* `Custom` - Custom
@@ -29184,7 +35022,7 @@ client.prompts.versions.list(
-
client.prompts.versions.create(...) +
client.prompts.versions.get(...)
@@ -29196,7 +35034,13 @@ client.prompts.versions.list(
-Create a new version of a prompt. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Retrieve a specific prompt of a model.
@@ -29216,11 +35060,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.prompts.versions.create( +client.prompts.versions.get( prompt_id=1, - prompt="prompt", - provider_model_id="provider_model_id", - title="title", + version_id=1, ) ``` @@ -29245,7 +35087,7 @@ client.prompts.versions.create(
-**prompt:** `str` — Prompt to execute +**version_id:** `int`
@@ -29253,39 +35095,76 @@ client.prompts.versions.create(
-**provider_model_id:** `str` — The model ID to use within the given provider, e.g. gpt-3.5 +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
-
-
-**title:** `str` — Model name -
+
+
client.prompts.versions.delete(...)
-**model_provider_connection:** `typing.Optional[int]` - +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Delete a prompt version by ID
+
+
+ +#### 🔌 Usage
-**organization:** `typing.Optional[int]` - +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.prompts.versions.delete( + prompt_id=1, + version_id=1, +) + +``` +
+
+#### ⚙️ Parameters +
-**parent_model:** `typing.Optional[int]` — Parent model interface ID +
+
+ +**prompt_id:** `int`
@@ -29293,17 +35172,7 @@ client.prompts.versions.create(
-**provider:** `typing.Optional[ProviderEnum]` - -The model provider to use e.g. OpenAI - -* `OpenAI` - OpenAI -* `AzureOpenAI` - AzureOpenAI -* `AzureAIFoundry` - AzureAIFoundry -* `VertexAI` - VertexAI -* `Gemini` - Gemini -* `Anthropic` - Anthropic -* `Custom` - Custom +**version_id:** `int`
@@ -29323,7 +35192,7 @@ The model provider to use e.g. OpenAI
-
client.prompts.versions.get(...) +
client.prompts.versions.update(...)
@@ -29335,7 +35204,13 @@ The model provider to use e.g. OpenAI
-Retrieve a specific prompt of a model. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update a specific prompt version by ID.
@@ -29355,7 +35230,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.prompts.versions.get( +client.prompts.versions.update( prompt_id=1, version_id=1, ) @@ -29390,70 +35265,57 @@ client.prompts.versions.get(
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**model_provider_connection:** `typing.Optional[int]`
- -
+
+
+**organization:** `typing.Optional[int]` +
-
-
client.prompts.versions.delete(...)
-#### 📝 Description - -
-
+**parent_model:** `typing.Optional[int]` — Parent model interface ID + +
+
-Delete a prompt version by ID -
-
+**prompt:** `typing.Optional[str]` — Prompt to execute +
-#### 🔌 Usage - -
-
-
-```python -from label_studio_sdk import LabelStudio +**provider:** `typing.Optional[ProviderEnum]` -client = LabelStudio( - api_key="YOUR_API_KEY", -) -client.prompts.versions.delete( - prompt_id=1, - version_id=1, -) +The model provider to use e.g. OpenAI -``` -
-
+* `OpenAI` - OpenAI +* `AzureOpenAI` - AzureOpenAI +* `AzureAIFoundry` - AzureAIFoundry +* `VertexAI` - VertexAI +* `Gemini` - Gemini +* `Anthropic` - Anthropic +* `Custom` - Custom +
-#### ⚙️ Parameters -
-
-
- -**prompt_id:** `int` +**provider_model_id:** `typing.Optional[str]` — The model ID to use within the given provider, e.g. gpt-3.5
@@ -29461,7 +35323,7 @@ client.prompts.versions.delete(
-**version_id:** `int` +**title:** `typing.Optional[str]` — Model name
@@ -29481,7 +35343,7 @@ client.prompts.versions.delete(
-
client.prompts.versions.update(...) +
client.prompts.versions.cost_estimate(...)
@@ -29493,7 +35355,13 @@ client.prompts.versions.delete(
-Update a specific prompt version by ID. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get an estimate of the cost for making an inference run on the selected Prompt Version and Project/ProjectSubset
@@ -29513,7 +35381,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.prompts.versions.update( +client.prompts.versions.cost_estimate( prompt_id=1, version_id=1, ) @@ -29548,49 +35416,76 @@ client.prompts.versions.update(
-**model_provider_connection:** `typing.Optional[int]` +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
-
-
-**organization:** `typing.Optional[int]` -
+
+
client.prompts.versions.get_refined_prompt(...)
-**parent_model:** `typing.Optional[int]` — Parent model interface ID - +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get the refined prompt based on the `refinement_job_id`. +
+
+#### 🔌 Usage +
-**prompt:** `typing.Optional[str]` — Prompt to execute - +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.prompts.versions.get_refined_prompt( + prompt_id=1, + version_id=1, +) + +``` +
+
+#### ⚙️ Parameters +
-**provider:** `typing.Optional[ProviderEnum]` - -The model provider to use e.g. OpenAI +
+
-* `OpenAI` - OpenAI -* `AzureOpenAI` - AzureOpenAI -* `AzureAIFoundry` - AzureAIFoundry -* `VertexAI` - VertexAI -* `Gemini` - Gemini -* `Anthropic` - Anthropic -* `Custom` - Custom +**prompt_id:** `int`
@@ -29598,7 +35493,7 @@ The model provider to use e.g. OpenAI
-**provider_model_id:** `typing.Optional[str]` — The model ID to use within the given provider, e.g. gpt-3.5 +**version_id:** `int`
@@ -29606,7 +35501,7 @@ The model provider to use e.g. OpenAI
-**title:** `typing.Optional[str]` — Model name +**refinement_job_id:** `typing.Optional[str]` — Refinement Job ID acquired from the `POST /api/prompts/{prompt_id}/versions/{version_id}/refine` endpoint
@@ -29626,7 +35521,7 @@ The model provider to use e.g. OpenAI
-
client.prompts.versions.cost_estimate(...) +
client.prompts.versions.refine_prompt(...)
@@ -29638,7 +35533,13 @@ The model provider to use e.g. OpenAI
-Get an estimate of the cost for making an inference run on the selected Prompt Version and Project/ProjectSubset + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Refine a prompt version using a teacher model and save the refined prompt as a new version.
@@ -29658,9 +35559,12 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.prompts.versions.cost_estimate( +client.prompts.versions.refine_prompt( prompt_id=1, version_id=1, + project_id=1, + teacher_model_name="teacher_model_name", + teacher_model_provider_connection_id=1, ) ``` @@ -29693,6 +35597,38 @@ client.prompts.versions.cost_estimate(
+**project_id:** `int` — Project ID to target the refined prompt for + +
+
+ +
+
+ +**teacher_model_name:** `str` — Name of the model to use to refine the prompt + +
+
+ +
+
+ +**teacher_model_provider_connection_id:** `int` — Model Provider Connection ID to use to refine the prompt + +
+
+ +
+
+ +**async_:** `typing.Optional[bool]` — Whether to run the refinement asynchronously + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -29705,7 +35641,8 @@ client.prompts.versions.cost_estimate(
-
client.prompts.versions.get_refined_prompt(...) +## Prompts Runs +
client.prompts.runs.list(...)
@@ -29717,7 +35654,13 @@ client.prompts.versions.cost_estimate(
-Get the refined prompt based on the `refinement_job_id`. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get information (status, metadata, etc) about an existing inference run
@@ -29737,7 +35680,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.prompts.versions.get_refined_prompt( +client.prompts.runs.list( prompt_id=1, version_id=1, ) @@ -29772,7 +35715,31 @@ client.prompts.versions.get_refined_prompt(
-**refinement_job_id:** `typing.Optional[str]` — Refinement Job ID acquired from the `POST /api/prompts/{prompt_id}/versions/{version_id}/refine` endpoint +**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. + +
+
+ +
+
+ +**parent_model:** `typing.Optional[int]` — The ID of the parent model for this Inference Run + +
+
+ +
+
+ +**project:** `typing.Optional[int]` — The ID of the project this Inference Run makes predictions on + +
+
+ +
+
+ +**project_subset:** `typing.Optional[RunsListRequestProjectSubset]` — Defines which tasks are operated on (e.g. HasGT will only operate on tasks with a ground truth annotation, but All will operate on all records)
@@ -29792,7 +35759,7 @@ client.prompts.versions.get_refined_prompt(
-
client.prompts.versions.refine_prompt(...) +
client.prompts.runs.create(...)
@@ -29804,7 +35771,13 @@ client.prompts.versions.get_refined_prompt(
-Refine a prompt version using a teacher model and save the refined prompt as a new version. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Run a prompt inference.
@@ -29824,12 +35797,10 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.prompts.versions.refine_prompt( +client.prompts.runs.create( prompt_id=1, version_id=1, - project_id=1, - teacher_model_name="teacher_model_name", - teacher_model_provider_connection_id=1, + project=1, ) ``` @@ -29862,7 +35833,7 @@ client.prompts.versions.refine_prompt(
-**project_id:** `int` — Project ID to target the refined prompt for +**project:** `int`
@@ -29870,7 +35841,7 @@ client.prompts.versions.refine_prompt(
-**teacher_model_name:** `str` — Name of the model to use to refine the prompt +**job_id:** `typing.Optional[str]` — Job ID for inference job for a ModelRun e.g. Adala job ID
@@ -29878,7 +35849,7 @@ client.prompts.versions.refine_prompt(
-**teacher_model_provider_connection_id:** `int` — Model Provider Connection ID to use to refine the prompt +**organization:** `typing.Optional[int]`
@@ -29886,7 +35857,39 @@ client.prompts.versions.refine_prompt(
-**async_:** `typing.Optional[bool]` — Whether to run the refinement asynchronously +**predictions_updated_at:** `typing.Optional[dt.datetime]` + +
+
+ +
+
+ +**project_subset:** `typing.Optional[ProjectSubsetEnum]` + +
+
+ +
+
+ +**total_correct_predictions:** `typing.Optional[int]` + +
+
+ +
+
+ +**total_predictions:** `typing.Optional[int]` + +
+
+ +
+
+ +**total_tasks:** `typing.Optional[int]`
@@ -29906,8 +35909,7 @@ client.prompts.versions.refine_prompt(
-## Prompts Runs -
client.prompts.runs.list(...) +
client.prompts.runs.cancel(...)
@@ -29919,7 +35921,13 @@ client.prompts.versions.refine_prompt(
-Get information (status, metadata, etc) about an existing inference run + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Cancel the inference run for the given api
@@ -29939,7 +35947,8 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.prompts.runs.list( +client.prompts.runs.cancel( + inference_run_id=1, prompt_id=1, version_id=1, ) @@ -29958,31 +35967,7 @@ client.prompts.runs.list(
-**prompt_id:** `int` - -
-
- -
-
- -**version_id:** `int` - -
-
- -
-
- -**ordering:** `typing.Optional[str]` — Which field to use when ordering the results. - -
-
- -
-
- -**parent_model:** `typing.Optional[int]` — The ID of the parent model for this Inference Run +**inference_run_id:** `int`
@@ -29990,7 +35975,7 @@ client.prompts.runs.list(
-**project:** `typing.Optional[int]` — The ID of the project this Inference Run makes predictions on +**prompt_id:** `int`
@@ -29998,7 +35983,7 @@ client.prompts.runs.list(
-**project_subset:** `typing.Optional[RunsListRequestProjectSubset]` — Defines which tasks are operated on (e.g. HasGT will only operate on tasks with a ground truth annotation, but All will operate on all records) +**version_id:** `int`
@@ -30018,7 +36003,8 @@ client.prompts.runs.list(
-
client.prompts.runs.create(...) +## Sso Saml +
client.sso.saml.get()
@@ -30030,7 +36016,13 @@ client.prompts.runs.list(
-Run a prompt inference. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Retrieve SAML2 settings for the currently active organization.
@@ -30050,11 +36042,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.prompts.runs.create( - prompt_id=1, - version_id=1, - project=1, -) +client.sso.saml.get() ``` @@ -30070,63 +36058,83 @@ client.prompts.runs.create(
-**prompt_id:** `int` +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
-
-
-**version_id:** `int` -
+
+
client.sso.saml.update(...)
-**project:** `int` - -
-
+#### 📝 Description
-**job_id:** `typing.Optional[str]` — Job ID for inference job for a ModelRun e.g. Adala job ID - -
-
-
-**organization:** `typing.Optional[int]` - + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update SAML2 settings for the currently active organization.
+ + + +#### 🔌 Usage
-**predictions_updated_at:** `typing.Optional[dt.datetime]` - -
-
-
-**project_subset:** `typing.Optional[ProjectSubsetEnum]` - +```python +from label_studio_sdk import LabelStudio, ProjectGroupRequest + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.sso.saml.update( + projects_groups=[ + ProjectGroupRequest( + group="groups_test", + project_id=42, + role="Inherit", + ) + ], + roles_groups=[["Administrator", "groups_test"]], + workspaces_groups=[["Default workspace", "groups_test"]], +) + +``` +
+
+#### ⚙️ Parameters +
-**total_correct_predictions:** `typing.Optional[int]` +
+
+ +**projects_groups:** `typing.Optional[typing.Sequence[ProjectGroupRequest]]`
@@ -30134,7 +36142,7 @@ client.prompts.runs.create(
-**total_predictions:** `typing.Optional[int]` +**roles_groups:** `typing.Optional[typing.Sequence[typing.Sequence[str]]]`
@@ -30142,7 +36150,7 @@ client.prompts.runs.create(
-**total_tasks:** `typing.Optional[int]` +**workspaces_groups:** `typing.Optional[typing.Sequence[typing.Sequence[str]]]`
@@ -30162,8 +36170,8 @@ client.prompts.runs.create(
-## Sso Saml -
client.sso.saml.get() +## Sso Scim +
client.sso.scim.get()
@@ -30175,7 +36183,13 @@ client.prompts.runs.create(
-Retrieve SAML2 settings for the currently active organization. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Retrieve SCIM settings for the currently active organization.
@@ -30195,7 +36209,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.sso.saml.get() +client.sso.scim.get() ``` @@ -30223,7 +36237,7 @@ client.sso.saml.get()
-
client.sso.saml.update(...) +
client.sso.scim.update(...)
@@ -30235,7 +36249,13 @@ client.sso.saml.get()
-Update SAML2 settings for the currently active organization. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Update SCIM settings for the currently active organization.
@@ -30255,7 +36275,7 @@ from label_studio_sdk import LabelStudio, ProjectGroupRequest client = LabelStudio( api_key="YOUR_API_KEY", ) -client.sso.saml.update( +client.sso.scim.update( projects_groups=[ ProjectGroupRequest( group="groups_test", @@ -30317,8 +36337,8 @@ client.sso.saml.update(
-## Sso Scim -
client.sso.scim.get() +## Workspaces Members +
client.workspaces.members.list(...)
@@ -30330,7 +36350,13 @@ client.sso.saml.update(
-Retrieve SCIM settings for the currently active organization. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Get a list of all members in a specific workspace.
@@ -30350,7 +36376,9 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.sso.scim.get() +client.workspaces.members.list( + id=1, +) ``` @@ -30366,6 +36394,14 @@ client.sso.scim.get()
+**id:** `int` + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -30378,7 +36414,7 @@ client.sso.scim.get()
-
client.sso.scim.update(...) +
client.workspaces.members.create(...)
@@ -30390,7 +36426,13 @@ client.sso.scim.get()
-Update SCIM settings for the currently active organization. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Add a new workspace member by user ID.
@@ -30405,21 +36447,14 @@ Update SCIM settings for the currently active organization.
```python -from label_studio_sdk import LabelStudio, ProjectGroupRequest +from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.sso.scim.update( - projects_groups=[ - ProjectGroupRequest( - group="groups_test", - project_id=42, - role="Inherit", - ) - ], - roles_groups=[["Administrator", "groups_test"]], - workspaces_groups=[["Default workspace", "groups_test"]], +client.workspaces.members.create( + id=1, + user=1, ) ``` @@ -30436,7 +36471,7 @@ client.sso.scim.update(
-**projects_groups:** `typing.Optional[typing.Sequence[ProjectGroupRequest]]` +**id:** `int`
@@ -30444,7 +36479,7 @@ client.sso.scim.update(
-**roles_groups:** `typing.Optional[typing.Sequence[typing.Sequence[str]]]` +**user:** `int` — User ID
@@ -30452,7 +36487,7 @@ client.sso.scim.update(
-**workspaces_groups:** `typing.Optional[typing.Sequence[typing.Sequence[str]]]` +**workspace:** `typing.Optional[int]` — Workspace ID
@@ -30472,8 +36507,7 @@ client.sso.scim.update(
-## Workspaces Members -
client.workspaces.members.list(...) +
client.workspaces.members.delete(...)
@@ -30485,7 +36519,13 @@ client.sso.scim.update(
-Get a list of all members in a specific workspace. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Remove a specific member by ID from a workspace. This endpoint expects an object like `{"user_id": 123}`.
@@ -30505,7 +36545,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.workspaces.members.list( +client.workspaces.members.delete( id=1, ) @@ -30543,7 +36583,8 @@ client.workspaces.members.list(
-
client.workspaces.members.create(...) +## Workspaces Projects +
client.workspaces.projects.list(...)
@@ -30555,7 +36596,13 @@ client.workspaces.members.list(
-Add a new workspace member by user ID. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Retrieve a list of all projects in a specific workspace.
@@ -30575,9 +36622,8 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.workspaces.members.create( +client.workspaces.projects.list( id=1, - user=1, ) ``` @@ -30602,15 +36648,84 @@ client.workspaces.members.create(
-**user:** `int` — User ID +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
+ + + + +
+
client.workspaces.projects.add(...)
-**workspace:** `typing.Optional[int]` — Workspace ID +#### 📝 Description + +
+
+ +
+
+ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Add a project to a specific workspace. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from label_studio_sdk import LabelStudio + +client = LabelStudio( + api_key="YOUR_API_KEY", +) +client.workspaces.projects.add( + id=1, + project=1, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**id:** `int` + +
+
+ +
+
+ +**project:** `int`
@@ -30630,7 +36745,7 @@ client.workspaces.members.create(
-
client.workspaces.members.delete(...) +
client.workspaces.projects.remove(...)
@@ -30642,7 +36757,13 @@ client.workspaces.members.create(
-Remove a specific member by ID from a workspace. This endpoint expects an object like `{"user_id": 123}`. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+Remove a project from a specific workspace.
@@ -30662,7 +36783,7 @@ from label_studio_sdk import LabelStudio client = LabelStudio( api_key="YOUR_API_KEY", ) -client.workspaces.members.delete( +client.workspaces.projects.remove( id=1, ) @@ -30713,6 +36834,12 @@ client.workspaces.members.delete(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Assign workspace members in bulk.
@@ -30808,6 +36935,12 @@ client.workspaces.members.bulk.post(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Unassign workspace members in bulk. Allows the same request body as bulk assign.
@@ -30879,6 +37012,12 @@ client.workspaces.members.bulk.delete(
+ + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve the members for a specific workspace.
diff --git a/src/label_studio_sdk/__init__.py b/src/label_studio_sdk/__init__.py index d6ac4c687..0f2fe8c54 100644 --- a/src/label_studio_sdk/__init__.py +++ b/src/label_studio_sdk/__init__.py @@ -35,20 +35,23 @@ BillingFlags, BillingInfoResponse, BlankEnum, - Blueprint, BlueprintList, BudgetResetPeriodEnum, + CancelModelRunResponse, ChildFilter, Comment, CommentRequest, CommentSerializerWithExpandedUser, + ConfigurablePermissionOption, ConvertedFormat, ConvertedFormatRequest, CountLimit, - CustomScriptsEditableByEnum, + DatabricksExportStorage, + DatabricksExportStorageRequest, + DatabricksImportStorage, + DatabricksImportStorageRequest, + Default165Enum, DefaultRole, - DefaultRoleCustomScriptsEditableBy, - DefaultRoleEnum, EditionEnum, Export, FileUpload, @@ -78,12 +81,15 @@ LseFieldsTrialRole, LseKeyIndicatorValue, LseOrganization, - LseOrganizationCustomScriptsEditableBy, LseOrganizationMemberList, LseProject, + LseProjectCounts, LseProjectCreate, LseProjectCreateSampling, LseProjectCreateSkipQueue, + LseProjectResponse, + LseProjectResponseSampling, + LseProjectResponseSkipQueue, LseProjectSampling, LseProjectSkipQueue, LseProjectUpdate, @@ -132,17 +138,22 @@ ModelRunStatusEnum, NullEnum, OnboardingStateEnum, + Options165Enum, OrganizationBilling, OrganizationId, OrganizationInvite, OrganizationMember, OrganizationMembership, + OrganizationPermission, + OrganizationPermissionRequest, PaginatedAllRolesProjectListList, PaginatedAnnotationHistoryList, PaginatedLseOrganizationMemberListList, + PaginatedLseProjectCountsList, PaginatedLseUserList, PaginatedPaginatedProjectMemberList, PaginatedProjectMember, + PaginatedProjectSubsetTasksResponseList, PaginatedRoleBasedTaskList, Pause, PauseRequest, @@ -155,10 +166,15 @@ ProjectImport, ProjectLabelConfig, ProjectLabelConfigRequest, + ProjectMember, ProjectMemberBulkAssignRolesRequest, + ProjectRole, ProjectSampling, ProjectSkipQueue, ProjectSubsetEnum, + ProjectSubsetItem, + ProjectSubsetTaskItem, + ProjectSubsetTasksResponse, ProjectTemplate, ProjectTemplateRequest, PromptsStatusEnum, @@ -173,8 +189,11 @@ ReviewSettingsRequest, ReviewSettingsRequestRequeueRejectedTasksMode, ReviewSettingsRequestReviewCriteria, + ReviewSettingsRequestSampling, ReviewSettingsRequeueRejectedTasksMode, ReviewSettingsReviewCriteria, + ReviewSettingsSampling, + ReviewSettingsSamplingEnum, ReviewedEnum, Role9E7Enum, RoleBasedTask, @@ -182,7 +201,7 @@ S3ImportStorage, SamlSettings, SamlSettingsUpdate, - SamplingEnum, + SamplingDe5Enum, ScimSettings, ScimSettingsUpdate, ScopeEnum, @@ -235,7 +254,6 @@ annotation_reviews, annotations, billing, - blueprints, comments, export_storage, files, @@ -273,6 +291,7 @@ ActionsCreateRequestSelectedItemsIncluded, ActionsListResponseItem, ActionsListResponseItemDialog, + ActionsListResponseItemPermission, ) from .activity_logs import ActivityLogsListRequestMethod from .annotation_history import AnnotationHistoryDeleteResponse @@ -283,15 +302,14 @@ from .import_storage import ImportStorageListTypesResponseItem from .ml import MlCreateRequestAuthMethod, MlListModelVersionsResponse, MlUpdateRequestAuthMethod from .model_providers import ModelProvidersListModelProviderChoicesResponse -from .organizations import PatchedDefaultRoleRequestCustomScriptsEditableBy from .projects import ( LseProjectCreateRequestSampling, LseProjectCreateRequestSkipQueue, PatchedLseProjectUpdateRequestSampling, PatchedLseProjectUpdateRequestSkipQueue, ProjectsDuplicateResponse, + ProjectsImportPredictionsResponse, ProjectsImportTasksResponse, - ProjectsListRequestFilter, ) from .prompts import PromptsCompatibleProjectsRequestProjectType from .tasks import TasksListRequestFields @@ -350,6 +368,7 @@ "ActionsEnum", "ActionsListResponseItem", "ActionsListResponseItemDialog", + "ActionsListResponseItemPermission", "ActivityLog", "ActivityLogResponse", "ActivityLogsListRequestMethod", @@ -388,21 +407,24 @@ "BillingFlags", "BillingInfoResponse", "BlankEnum", - "Blueprint", "BlueprintList", "BudgetResetPeriodEnum", + "CancelModelRunResponse", "ChildFilter", "Client", "Comment", "CommentRequest", "CommentSerializerWithExpandedUser", + "ConfigurablePermissionOption", "ConvertedFormat", "ConvertedFormatRequest", "CountLimit", - "CustomScriptsEditableByEnum", + "DatabricksExportStorage", + "DatabricksExportStorageRequest", + "DatabricksImportStorage", + "DatabricksImportStorageRequest", + "Default165Enum", "DefaultRole", - "DefaultRoleCustomScriptsEditableBy", - "DefaultRoleEnum", "EditionEnum", "Export", "ExportStorageListTypesResponseItem", @@ -438,14 +460,17 @@ "LseFieldsTrialRole", "LseKeyIndicatorValue", "LseOrganization", - "LseOrganizationCustomScriptsEditableBy", "LseOrganizationMemberList", "LseProject", + "LseProjectCounts", "LseProjectCreate", "LseProjectCreateRequestSampling", "LseProjectCreateRequestSkipQueue", "LseProjectCreateSampling", "LseProjectCreateSkipQueue", + "LseProjectResponse", + "LseProjectResponseSampling", + "LseProjectResponseSkipQueue", "LseProjectSampling", "LseProjectSkipQueue", "LseProjectUpdate", @@ -500,19 +525,23 @@ "NotFoundError", "NullEnum", "OnboardingStateEnum", + "Options165Enum", "OrganizationBilling", "OrganizationId", "OrganizationInvite", "OrganizationMember", "OrganizationMembership", + "OrganizationPermission", + "OrganizationPermissionRequest", "PaginatedAllRolesProjectListList", "PaginatedAnnotationHistoryList", "PaginatedLseOrganizationMemberListList", + "PaginatedLseProjectCountsList", "PaginatedLseUserList", "PaginatedPaginatedProjectMemberList", "PaginatedProjectMember", + "PaginatedProjectSubsetTasksResponseList", "PaginatedRoleBasedTaskList", - "PatchedDefaultRoleRequestCustomScriptsEditableBy", "PatchedLseProjectUpdateRequestSampling", "PatchedLseProjectUpdateRequestSkipQueue", "Pause", @@ -526,15 +555,20 @@ "ProjectImport", "ProjectLabelConfig", "ProjectLabelConfigRequest", + "ProjectMember", "ProjectMemberBulkAssignRolesRequest", + "ProjectRole", "ProjectSampling", "ProjectSkipQueue", "ProjectSubsetEnum", + "ProjectSubsetItem", + "ProjectSubsetTaskItem", + "ProjectSubsetTasksResponse", "ProjectTemplate", "ProjectTemplateRequest", "ProjectsDuplicateResponse", + "ProjectsImportPredictionsResponse", "ProjectsImportTasksResponse", - "ProjectsListRequestFilter", "PromptsCompatibleProjectsRequestProjectType", "PromptsStatusEnum", "ProviderEnum", @@ -548,8 +582,11 @@ "ReviewSettingsRequest", "ReviewSettingsRequestRequeueRejectedTasksMode", "ReviewSettingsRequestReviewCriteria", + "ReviewSettingsRequestSampling", "ReviewSettingsRequeueRejectedTasksMode", "ReviewSettingsReviewCriteria", + "ReviewSettingsSampling", + "ReviewSettingsSamplingEnum", "ReviewedEnum", "Role9E7Enum", "RoleBasedTask", @@ -557,7 +594,7 @@ "S3ImportStorage", "SamlSettings", "SamlSettingsUpdate", - "SamplingEnum", + "SamplingDe5Enum", "ScimSettings", "ScimSettingsUpdate", "ScopeEnum", @@ -637,7 +674,6 @@ "annotation_reviews", "annotations", "billing", - "blueprints", "comments", "export_storage", "files", diff --git a/src/label_studio_sdk/actions/__init__.py b/src/label_studio_sdk/actions/__init__.py index 4ae776910..dc9fc2a14 100644 --- a/src/label_studio_sdk/actions/__init__.py +++ b/src/label_studio_sdk/actions/__init__.py @@ -14,6 +14,7 @@ ActionsCreateRequestSelectedItemsIncluded, ActionsListResponseItem, ActionsListResponseItemDialog, + ActionsListResponseItemPermission, ) __all__ = [ @@ -30,4 +31,5 @@ "ActionsCreateRequestSelectedItemsIncluded", "ActionsListResponseItem", "ActionsListResponseItemDialog", + "ActionsListResponseItemPermission", ] diff --git a/src/label_studio_sdk/actions/types/__init__.py b/src/label_studio_sdk/actions/types/__init__.py index 06d908df8..36bc01b51 100644 --- a/src/label_studio_sdk/actions/types/__init__.py +++ b/src/label_studio_sdk/actions/types/__init__.py @@ -13,6 +13,7 @@ from .actions_create_request_selected_items_included import ActionsCreateRequestSelectedItemsIncluded from .actions_list_response_item import ActionsListResponseItem from .actions_list_response_item_dialog import ActionsListResponseItemDialog +from .actions_list_response_item_permission import ActionsListResponseItemPermission __all__ = [ "ActionsCreateRequestFilters", @@ -28,4 +29,5 @@ "ActionsCreateRequestSelectedItemsIncluded", "ActionsListResponseItem", "ActionsListResponseItemDialog", + "ActionsListResponseItemPermission", ] diff --git a/src/label_studio_sdk/actions/types/actions_list_response_item.py b/src/label_studio_sdk/actions/types/actions_list_response_item.py index 9934b183b..db72c1342 100644 --- a/src/label_studio_sdk/actions/types/actions_list_response_item.py +++ b/src/label_studio_sdk/actions/types/actions_list_response_item.py @@ -3,6 +3,7 @@ from ...core.unchecked_base_model import UncheckedBaseModel import typing from .actions_list_response_item_dialog import ActionsListResponseItemDialog +from .actions_list_response_item_permission import ActionsListResponseItemPermission from ...core.pydantic_utilities import IS_PYDANTIC_V2 import pydantic @@ -12,7 +13,7 @@ class ActionsListResponseItem(UncheckedBaseModel): experimental: typing.Optional[bool] = None id: typing.Optional[str] = None order: typing.Optional[int] = None - permission: typing.Optional[str] = None + permission: typing.Optional[ActionsListResponseItemPermission] = None title: typing.Optional[str] = None if IS_PYDANTIC_V2: diff --git a/src/label_studio_sdk/actions/types/actions_list_response_item_permission.py b/src/label_studio_sdk/actions/types/actions_list_response_item_permission.py new file mode 100644 index 000000000..e9747cf09 --- /dev/null +++ b/src/label_studio_sdk/actions/types/actions_list_response_item_permission.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ActionsListResponseItemPermission = typing.Union[str, typing.List[str]] diff --git a/src/label_studio_sdk/activity_logs/client.py b/src/label_studio_sdk/activity_logs/client.py index fa1c710fe..39d04a6b0 100644 --- a/src/label_studio_sdk/activity_logs/client.py +++ b/src/label_studio_sdk/activity_logs/client.py @@ -32,6 +32,12 @@ def list( request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[ActivityLogResponse]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve activity logs filtered by workspace, project, user, HTTP method, date range or search query. Parameters @@ -145,6 +151,12 @@ async def list( request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[ActivityLogResponse]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve activity logs filtered by workspace, project, user, HTTP method, date range or search query. Parameters diff --git a/src/label_studio_sdk/annotation_history/client.py b/src/label_studio_sdk/annotation_history/client.py index 6565de665..6b12135cc 100644 --- a/src/label_studio_sdk/annotation_history/client.py +++ b/src/label_studio_sdk/annotation_history/client.py @@ -25,6 +25,12 @@ def list( request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[AnnotationHistory]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List annotation history items for an annotation. Annotation history logs all actions performed with annotations, such as: imports, submits, updates, reviews, and more. Users can view annotation history items in the Annotation History panel during labeling. Parameters @@ -84,6 +90,12 @@ def delete( request_options: typing.Optional[RequestOptions] = None, ) -> AnnotationHistoryDeleteResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete all annotation history items for a specific annotation, task or project. This method is available only for users with administrator roles. Parameters @@ -147,6 +159,12 @@ def list_for_project( request_options: typing.Optional[RequestOptions] = None, ) -> PaginatedAnnotationHistoryList: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all annotation history items for the project with pagination. Parameters @@ -214,6 +232,12 @@ async def list( request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[AnnotationHistory]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List annotation history items for an annotation. Annotation history logs all actions performed with annotations, such as: imports, submits, updates, reviews, and more. Users can view annotation history items in the Annotation History panel during labeling. Parameters @@ -281,6 +305,12 @@ async def delete( request_options: typing.Optional[RequestOptions] = None, ) -> AnnotationHistoryDeleteResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete all annotation history items for a specific annotation, task or project. This method is available only for users with administrator roles. Parameters @@ -352,6 +382,12 @@ async def list_for_project( request_options: typing.Optional[RequestOptions] = None, ) -> PaginatedAnnotationHistoryList: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all annotation history items for the project with pagination. Parameters diff --git a/src/label_studio_sdk/annotation_reviews/client.py b/src/label_studio_sdk/annotation_reviews/client.py index ce1118bbc..c37b294d8 100644 --- a/src/label_studio_sdk/annotation_reviews/client.py +++ b/src/label_studio_sdk/annotation_reviews/client.py @@ -28,6 +28,12 @@ def list( request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[AnnotationReview]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all reviews for a specific annotation ID. Parameters @@ -94,6 +100,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> AnnotationReview: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a review for a specific annotation ID. Parameters @@ -170,6 +182,12 @@ def create( def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> AnnotationReview: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific review by ID for an annotation. Parameters @@ -217,6 +235,12 @@ def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = Non def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a review by ID Parameters @@ -269,6 +293,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> AnnotationReview: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific review by ID. Parameters @@ -357,6 +387,12 @@ async def list( request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[AnnotationReview]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all reviews for a specific annotation ID. Parameters @@ -431,6 +467,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> AnnotationReview: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a review for a specific annotation ID. Parameters @@ -515,6 +557,12 @@ async def main() -> None: async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> AnnotationReview: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific review by ID for an annotation. Parameters @@ -570,6 +618,12 @@ async def main() -> None: async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a review by ID Parameters @@ -630,6 +684,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> AnnotationReview: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific review by ID. Parameters diff --git a/src/label_studio_sdk/base_client.py b/src/label_studio_sdk/base_client.py index 97c219e18..a3ae28d4b 100644 --- a/src/label_studio_sdk/base_client.py +++ b/src/label_studio_sdk/base_client.py @@ -11,7 +11,6 @@ from .annotation_reviews.client import AnnotationReviewsClient from .annotations.client import AnnotationsClient from .billing.client import BillingClient -from .blueprints.client import BlueprintsClient from .comments.client import CommentsClient from .users.client import UsersClient from .actions.client import ActionsClient @@ -40,7 +39,6 @@ from .annotation_reviews.client import AsyncAnnotationReviewsClient from .annotations.client import AsyncAnnotationsClient from .billing.client import AsyncBillingClient -from .blueprints.client import AsyncBlueprintsClient from .comments.client import AsyncCommentsClient from .users.client import AsyncUsersClient from .actions.client import AsyncActionsClient @@ -132,7 +130,6 @@ def __init__( self.annotation_reviews = AnnotationReviewsClient(client_wrapper=self._client_wrapper) self.annotations = AnnotationsClient(client_wrapper=self._client_wrapper) self.billing = BillingClient(client_wrapper=self._client_wrapper) - self.blueprints = BlueprintsClient(client_wrapper=self._client_wrapper) self.comments = CommentsClient(client_wrapper=self._client_wrapper) self.users = UsersClient(client_wrapper=self._client_wrapper) self.actions = ActionsClient(client_wrapper=self._client_wrapper) @@ -224,7 +221,6 @@ def __init__( self.annotation_reviews = AsyncAnnotationReviewsClient(client_wrapper=self._client_wrapper) self.annotations = AsyncAnnotationsClient(client_wrapper=self._client_wrapper) self.billing = AsyncBillingClient(client_wrapper=self._client_wrapper) - self.blueprints = AsyncBlueprintsClient(client_wrapper=self._client_wrapper) self.comments = AsyncCommentsClient(client_wrapper=self._client_wrapper) self.users = AsyncUsersClient(client_wrapper=self._client_wrapper) self.actions = AsyncActionsClient(client_wrapper=self._client_wrapper) diff --git a/src/label_studio_sdk/billing/client.py b/src/label_studio_sdk/billing/client.py index 3384bd56a..68d847ef3 100644 --- a/src/label_studio_sdk/billing/client.py +++ b/src/label_studio_sdk/billing/client.py @@ -16,6 +16,12 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def info(self, *, request_options: typing.Optional[RequestOptions] = None) -> BillingInfoResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve billing checks and feature flags for the active organization. Parameters @@ -63,6 +69,12 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def info(self, *, request_options: typing.Optional[RequestOptions] = None) -> BillingInfoResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve billing checks and feature flags for the active organization. Parameters diff --git a/src/label_studio_sdk/blueprints/client.py b/src/label_studio_sdk/blueprints/client.py deleted file mode 100644 index 20f1d8b17..000000000 --- a/src/label_studio_sdk/blueprints/client.py +++ /dev/null @@ -1,272 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing -from ..core.client_wrapper import SyncClientWrapper -from ..core.request_options import RequestOptions -from ..types.blueprint import Blueprint -from ..core.unchecked_base_model import construct_type -from json.decoder import JSONDecodeError -from ..core.api_error import ApiError -from ..core.jsonable_encoder import jsonable_encoder -from ..core.client_wrapper import AsyncClientWrapper - -# this is used as the default value for optional parameters -OMIT = typing.cast(typing.Any, ...) - - -class BlueprintsClient: - def __init__(self, *, client_wrapper: SyncClientWrapper): - self._client_wrapper = client_wrapper - - def create( - self, - *, - project: int, - created_by: typing.Optional[int] = OMIT, - description: typing.Optional[str] = OMIT, - label_config: typing.Optional[str] = OMIT, - title: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> Blueprint: - """ - Create a new blueprint - - Parameters - ---------- - project : int - - created_by : typing.Optional[int] - - description : typing.Optional[str] - Project description - - label_config : typing.Optional[str] - Labeling configuration in XML format - - title : typing.Optional[str] - Blueprint name. Must be between 3 and 50 characters long. - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - Blueprint - - - Examples - -------- - from label_studio_sdk import LabelStudio - - client = LabelStudio( - api_key="YOUR_API_KEY", - ) - client.blueprints.create( - project=1, - ) - """ - _response = self._client_wrapper.httpx_client.request( - "api/blueprints/", - method="POST", - json={ - "created_by": created_by, - "description": description, - "label_config": label_config, - "project": project, - "title": title, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - return typing.cast( - Blueprint, - construct_type( - type_=Blueprint, # type: ignore - object_=_response.json(), - ), - ) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, body=_response.text) - raise ApiError(status_code=_response.status_code, body=_response_json) - - def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None: - """ - Delete a blueprint by ID - - Parameters - ---------- - id : str - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - None - - Examples - -------- - from label_studio_sdk import LabelStudio - - client = LabelStudio( - api_key="YOUR_API_KEY", - ) - client.blueprints.delete( - id="id", - ) - """ - _response = self._client_wrapper.httpx_client.request( - f"api/blueprints/{jsonable_encoder(id)}/", - method="DELETE", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - return - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, body=_response.text) - raise ApiError(status_code=_response.status_code, body=_response_json) - - -class AsyncBlueprintsClient: - def __init__(self, *, client_wrapper: AsyncClientWrapper): - self._client_wrapper = client_wrapper - - async def create( - self, - *, - project: int, - created_by: typing.Optional[int] = OMIT, - description: typing.Optional[str] = OMIT, - label_config: typing.Optional[str] = OMIT, - title: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> Blueprint: - """ - Create a new blueprint - - Parameters - ---------- - project : int - - created_by : typing.Optional[int] - - description : typing.Optional[str] - Project description - - label_config : typing.Optional[str] - Labeling configuration in XML format - - title : typing.Optional[str] - Blueprint name. Must be between 3 and 50 characters long. - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - Blueprint - - - Examples - -------- - import asyncio - - from label_studio_sdk import AsyncLabelStudio - - client = AsyncLabelStudio( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.blueprints.create( - project=1, - ) - - - asyncio.run(main()) - """ - _response = await self._client_wrapper.httpx_client.request( - "api/blueprints/", - method="POST", - json={ - "created_by": created_by, - "description": description, - "label_config": label_config, - "project": project, - "title": title, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - return typing.cast( - Blueprint, - construct_type( - type_=Blueprint, # type: ignore - object_=_response.json(), - ), - ) - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, body=_response.text) - raise ApiError(status_code=_response.status_code, body=_response_json) - - async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None: - """ - Delete a blueprint by ID - - Parameters - ---------- - id : str - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - None - - Examples - -------- - import asyncio - - from label_studio_sdk import AsyncLabelStudio - - client = AsyncLabelStudio( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.blueprints.delete( - id="id", - ) - - - asyncio.run(main()) - """ - _response = await self._client_wrapper.httpx_client.request( - f"api/blueprints/{jsonable_encoder(id)}/", - method="DELETE", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - return - _response_json = _response.json() - except JSONDecodeError: - raise ApiError(status_code=_response.status_code, body=_response.text) - raise ApiError(status_code=_response.status_code, body=_response_json) diff --git a/src/label_studio_sdk/comments/client.py b/src/label_studio_sdk/comments/client.py index 4213d8538..795331843 100644 --- a/src/label_studio_sdk/comments/client.py +++ b/src/label_studio_sdk/comments/client.py @@ -30,6 +30,12 @@ def list( request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[MaybeExpandedComment]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all comments for a specific annotation ID. Parameters @@ -104,6 +110,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> MaybeExpandedComment: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a comment for a specific annotation ID. Parameters @@ -185,6 +197,12 @@ def export( request_options: typing.Optional[RequestOptions] = None, ) -> typing.Iterator[bytes]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Export comments to CSV file Parameters @@ -243,6 +261,12 @@ def get( request_options: typing.Optional[RequestOptions] = None, ) -> MaybeExpandedComment: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific comment by ID for an annotation. Parameters @@ -301,6 +325,12 @@ def delete( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a comment by ID Parameters @@ -358,6 +388,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> MaybeExpandedComment: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific comment by ID. Parameters @@ -451,6 +487,12 @@ async def list( request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[MaybeExpandedComment]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all comments for a specific annotation ID. Parameters @@ -533,6 +575,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> MaybeExpandedComment: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a comment for a specific annotation ID. Parameters @@ -622,6 +670,12 @@ async def export( request_options: typing.Optional[RequestOptions] = None, ) -> typing.AsyncIterator[bytes]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Export comments to CSV file Parameters @@ -680,6 +734,12 @@ async def get( request_options: typing.Optional[RequestOptions] = None, ) -> MaybeExpandedComment: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific comment by ID for an annotation. Parameters @@ -746,6 +806,12 @@ async def delete( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a comment by ID Parameters @@ -811,6 +877,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> MaybeExpandedComment: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific comment by ID. Parameters diff --git a/src/label_studio_sdk/export_storage/__init__.py b/src/label_studio_sdk/export_storage/__init__.py index 0fbe3a0f2..29d63c2ca 100644 --- a/src/label_studio_sdk/export_storage/__init__.py +++ b/src/label_studio_sdk/export_storage/__init__.py @@ -1,6 +1,17 @@ # This file was auto-generated by Fern from our API Definition. from .types import ExportStorageListTypesResponseItem -from . import azure, azure_spi, gcs, gcswif, local, redis, s3, s3s +from . import azure, azure_spi, databricks, gcs, gcswif, local, redis, s3, s3s -__all__ = ["ExportStorageListTypesResponseItem", "azure", "azure_spi", "gcs", "gcswif", "local", "redis", "s3", "s3s"] +__all__ = [ + "ExportStorageListTypesResponseItem", + "azure", + "azure_spi", + "databricks", + "gcs", + "gcswif", + "local", + "redis", + "s3", + "s3s", +] diff --git a/src/label_studio_sdk/export_storage/azure/client.py b/src/label_studio_sdk/export_storage/azure/client.py index ff98d0b76..5e41c45f6 100644 --- a/src/label_studio_sdk/export_storage/azure/client.py +++ b/src/label_studio_sdk/export_storage/azure/client.py @@ -21,8 +21,8 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[AzureBlobExportStorage]: """ @@ -30,12 +30,12 @@ def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -51,7 +51,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.export_storage.azure.list() + client.export_storage.azure.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/export/azure", @@ -494,8 +496,8 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[AzureBlobExportStorage]: """ @@ -503,12 +505,12 @@ async def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -529,7 +531,9 @@ async def list( async def main() -> None: - await client.export_storage.azure.list() + await client.export_storage.azure.list( + project=1, + ) asyncio.run(main()) diff --git a/src/label_studio_sdk/export_storage/azure_spi/client.py b/src/label_studio_sdk/export_storage/azure_spi/client.py index f46af9625..697a8b8b2 100644 --- a/src/label_studio_sdk/export_storage/azure_spi/client.py +++ b/src/label_studio_sdk/export_storage/azure_spi/client.py @@ -23,21 +23,27 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[AzureServicePrincipalExportStorage]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all Azure export storage connections that were set up with Service Principal authentication. Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -53,7 +59,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.export_storage.azure_spi.list() + client.export_storage.azure_spi.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/export/azure_spi", @@ -104,6 +112,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> AzureServicePrincipalExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create an Azure export storage connection with Service Principal authentication to store annotations. Parameters @@ -252,6 +266,12 @@ def validate( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific Azure export storage connection that was set up with Service Principal authentication. Parameters @@ -371,6 +391,12 @@ def get( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> AzureServicePrincipalExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific Azure export storage connection that was set up with Service Principal authentication. Parameters @@ -417,6 +443,12 @@ def get( def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific Azure export storage connection that was set up with Service Principal authentication. Parameters @@ -481,6 +513,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> AzureServicePrincipalExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific Azure export storage connection that was set up with Service Principal authentication. Parameters @@ -612,6 +650,12 @@ def sync( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> AzureServicePrincipalExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an Azure SPI export storage. Parameters @@ -664,21 +708,27 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[AzureServicePrincipalExportStorage]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all Azure export storage connections that were set up with Service Principal authentication. Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -699,7 +749,9 @@ async def list( async def main() -> None: - await client.export_storage.azure_spi.list() + await client.export_storage.azure_spi.list( + project=1, + ) asyncio.run(main()) @@ -753,6 +805,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> AzureServicePrincipalExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create an Azure export storage connection with Service Principal authentication to store annotations. Parameters @@ -909,6 +967,12 @@ async def validate( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific Azure export storage connection that was set up with Service Principal authentication. Parameters @@ -1036,6 +1100,12 @@ async def get( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> AzureServicePrincipalExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific Azure export storage connection that was set up with Service Principal authentication. Parameters @@ -1090,6 +1160,12 @@ async def main() -> None: async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific Azure export storage connection that was set up with Service Principal authentication. Parameters @@ -1162,6 +1238,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> AzureServicePrincipalExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific Azure export storage connection that was set up with Service Principal authentication. Parameters @@ -1301,6 +1383,12 @@ async def sync( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> AzureServicePrincipalExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an Azure SPI export storage. Parameters diff --git a/src/label_studio_sdk/export_storage/client.py b/src/label_studio_sdk/export_storage/client.py index 387ed54fa..0c071011c 100644 --- a/src/label_studio_sdk/export_storage/client.py +++ b/src/label_studio_sdk/export_storage/client.py @@ -3,6 +3,7 @@ from ..core.client_wrapper import SyncClientWrapper from .azure.client import AzureClient from .azure_spi.client import AzureSpiClient +from .databricks.client import DatabricksClient from .gcs.client import GcsClient from .gcswif.client import GcswifClient from .local.client import LocalClient @@ -18,6 +19,7 @@ from ..core.client_wrapper import AsyncClientWrapper from .azure.client import AsyncAzureClient from .azure_spi.client import AsyncAzureSpiClient +from .databricks.client import AsyncDatabricksClient from .gcs.client import AsyncGcsClient from .gcswif.client import AsyncGcswifClient from .local.client import AsyncLocalClient @@ -31,6 +33,7 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper self.azure = AzureClient(client_wrapper=self._client_wrapper) self.azure_spi = AzureSpiClient(client_wrapper=self._client_wrapper) + self.databricks = DatabricksClient(client_wrapper=self._client_wrapper) self.gcs = GcsClient(client_wrapper=self._client_wrapper) self.gcswif = GcswifClient(client_wrapper=self._client_wrapper) self.local = LocalClient(client_wrapper=self._client_wrapper) @@ -88,6 +91,7 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper self.azure = AsyncAzureClient(client_wrapper=self._client_wrapper) self.azure_spi = AsyncAzureSpiClient(client_wrapper=self._client_wrapper) + self.databricks = AsyncDatabricksClient(client_wrapper=self._client_wrapper) self.gcs = AsyncGcsClient(client_wrapper=self._client_wrapper) self.gcswif = AsyncGcswifClient(client_wrapper=self._client_wrapper) self.local = AsyncLocalClient(client_wrapper=self._client_wrapper) diff --git a/src/label_studio_sdk/blueprints/__init__.py b/src/label_studio_sdk/export_storage/databricks/__init__.py similarity index 100% rename from src/label_studio_sdk/blueprints/__init__.py rename to src/label_studio_sdk/export_storage/databricks/__init__.py diff --git a/src/label_studio_sdk/export_storage/databricks/client.py b/src/label_studio_sdk/export_storage/databricks/client.py new file mode 100644 index 000000000..3213481cc --- /dev/null +++ b/src/label_studio_sdk/export_storage/databricks/client.py @@ -0,0 +1,1494 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from ...core.client_wrapper import SyncClientWrapper +from ...core.request_options import RequestOptions +from ...types.databricks_export_storage import DatabricksExportStorage +from ...core.unchecked_base_model import construct_type +from json.decoder import JSONDecodeError +from ...core.api_error import ApiError +import datetime as dt +from ...types.status_c5a_enum import StatusC5AEnum +from ...core.jsonable_encoder import jsonable_encoder +from ...core.client_wrapper import AsyncClientWrapper + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class DatabricksClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def list( + self, + *, + project: int, + ordering: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.List[DatabricksExportStorage]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a list of all Databricks Files export storage connections. + + Parameters + ---------- + project : int + Project ID + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[DatabricksExportStorage] + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.export_storage.databricks.list( + project=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + "api/storages/export/databricks", + method="GET", + params={ + "ordering": ordering, + "project": project, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[DatabricksExportStorage], + construct_type( + type_=typing.List[DatabricksExportStorage], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def create( + self, + *, + catalog: str, + host: str, + project: int, + schema: str, + volume: str, + can_delete_objects: typing.Optional[bool] = OMIT, + description: typing.Optional[str] = OMIT, + last_sync: typing.Optional[dt.datetime] = OMIT, + last_sync_count: typing.Optional[int] = OMIT, + last_sync_job: typing.Optional[str] = OMIT, + meta: typing.Optional[typing.Optional[typing.Any]] = OMIT, + prefix: typing.Optional[str] = OMIT, + regex_filter: typing.Optional[str] = OMIT, + request_timeout_s: typing.Optional[int] = OMIT, + status: typing.Optional[StatusC5AEnum] = OMIT, + stream_chunk_bytes: typing.Optional[int] = OMIT, + synchronizable: typing.Optional[bool] = OMIT, + title: typing.Optional[str] = OMIT, + token: typing.Optional[str] = OMIT, + traceback: typing.Optional[str] = OMIT, + use_blob_urls: typing.Optional[bool] = OMIT, + verify_tls: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> DatabricksExportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a Databricks Files export storage connection. + + Parameters + ---------- + catalog : str + UC catalog name + + host : str + Databricks workspace base URL (https://...) + + project : int + A unique integer value identifying this project. + + schema : str + UC schema name + + volume : str + UC volume name + + can_delete_objects : typing.Optional[bool] + Deletion from storage enabled + + description : typing.Optional[str] + Cloud storage description + + last_sync : typing.Optional[dt.datetime] + Last sync finished time + + last_sync_count : typing.Optional[int] + Count of tasks synced last time + + last_sync_job : typing.Optional[str] + Last sync job ID + + meta : typing.Optional[typing.Optional[typing.Any]] + + prefix : typing.Optional[str] + Export path prefix under the volume + + regex_filter : typing.Optional[str] + Regex for filtering objects + + request_timeout_s : typing.Optional[int] + + status : typing.Optional[StatusC5AEnum] + + stream_chunk_bytes : typing.Optional[int] + + synchronizable : typing.Optional[bool] + + title : typing.Optional[str] + Cloud storage title + + token : typing.Optional[str] + + traceback : typing.Optional[str] + Traceback report for the last failed sync + + use_blob_urls : typing.Optional[bool] + Generate blob URLs in tasks + + verify_tls : typing.Optional[bool] + Verify TLS certificates + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksExportStorage + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.export_storage.databricks.create( + catalog="catalog", + host="host", + project=1, + schema="schema", + volume="volume", + ) + """ + _response = self._client_wrapper.httpx_client.request( + "api/storages/export/databricks", + method="POST", + json={ + "can_delete_objects": can_delete_objects, + "catalog": catalog, + "description": description, + "host": host, + "last_sync": last_sync, + "last_sync_count": last_sync_count, + "last_sync_job": last_sync_job, + "meta": meta, + "prefix": prefix, + "project": project, + "regex_filter": regex_filter, + "request_timeout_s": request_timeout_s, + "schema": schema, + "status": status, + "stream_chunk_bytes": stream_chunk_bytes, + "synchronizable": synchronizable, + "title": title, + "token": token, + "traceback": traceback, + "use_blob_urls": use_blob_urls, + "verify_tls": verify_tls, + "volume": volume, + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksExportStorage, + construct_type( + type_=DatabricksExportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def validate( + self, + *, + catalog: str, + host: str, + project: int, + schema: str, + volume: str, + can_delete_objects: typing.Optional[bool] = OMIT, + description: typing.Optional[str] = OMIT, + last_sync: typing.Optional[dt.datetime] = OMIT, + last_sync_count: typing.Optional[int] = OMIT, + last_sync_job: typing.Optional[str] = OMIT, + meta: typing.Optional[typing.Optional[typing.Any]] = OMIT, + prefix: typing.Optional[str] = OMIT, + regex_filter: typing.Optional[str] = OMIT, + request_timeout_s: typing.Optional[int] = OMIT, + status: typing.Optional[StatusC5AEnum] = OMIT, + stream_chunk_bytes: typing.Optional[int] = OMIT, + synchronizable: typing.Optional[bool] = OMIT, + title: typing.Optional[str] = OMIT, + token: typing.Optional[str] = OMIT, + traceback: typing.Optional[str] = OMIT, + use_blob_urls: typing.Optional[bool] = OMIT, + verify_tls: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate a specific Databricks Files export storage connection. + + Parameters + ---------- + catalog : str + UC catalog name + + host : str + Databricks workspace base URL (https://...) + + project : int + A unique integer value identifying this project. + + schema : str + UC schema name + + volume : str + UC volume name + + can_delete_objects : typing.Optional[bool] + Deletion from storage enabled + + description : typing.Optional[str] + Cloud storage description + + last_sync : typing.Optional[dt.datetime] + Last sync finished time + + last_sync_count : typing.Optional[int] + Count of tasks synced last time + + last_sync_job : typing.Optional[str] + Last sync job ID + + meta : typing.Optional[typing.Optional[typing.Any]] + + prefix : typing.Optional[str] + Export path prefix under the volume + + regex_filter : typing.Optional[str] + Regex for filtering objects + + request_timeout_s : typing.Optional[int] + + status : typing.Optional[StatusC5AEnum] + + stream_chunk_bytes : typing.Optional[int] + + synchronizable : typing.Optional[bool] + + title : typing.Optional[str] + Cloud storage title + + token : typing.Optional[str] + + traceback : typing.Optional[str] + Traceback report for the last failed sync + + use_blob_urls : typing.Optional[bool] + Generate blob URLs in tasks + + verify_tls : typing.Optional[bool] + Verify TLS certificates + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.export_storage.databricks.validate( + catalog="catalog", + host="host", + project=1, + schema="schema", + volume="volume", + ) + """ + _response = self._client_wrapper.httpx_client.request( + "api/storages/export/databricks/validate", + method="POST", + json={ + "can_delete_objects": can_delete_objects, + "catalog": catalog, + "description": description, + "host": host, + "last_sync": last_sync, + "last_sync_count": last_sync_count, + "last_sync_job": last_sync_job, + "meta": meta, + "prefix": prefix, + "project": project, + "regex_filter": regex_filter, + "request_timeout_s": request_timeout_s, + "schema": schema, + "status": status, + "stream_chunk_bytes": stream_chunk_bytes, + "synchronizable": synchronizable, + "title": title, + "token": token, + "traceback": traceback, + "use_blob_urls": use_blob_urls, + "verify_tls": verify_tls, + "volume": volume, + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> DatabricksExportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific Databricks Files export storage connection. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksExportStorage + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.export_storage.databricks.get( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/storages/export/databricks/{jsonable_encoder(id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksExportStorage, + construct_type( + type_=DatabricksExportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific Databricks Files export storage connection. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.export_storage.databricks.delete( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/storages/export/databricks/{jsonable_encoder(id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def update( + self, + id: int, + *, + can_delete_objects: typing.Optional[bool] = OMIT, + catalog: typing.Optional[str] = OMIT, + description: typing.Optional[str] = OMIT, + host: typing.Optional[str] = OMIT, + last_sync: typing.Optional[dt.datetime] = OMIT, + last_sync_count: typing.Optional[int] = OMIT, + last_sync_job: typing.Optional[str] = OMIT, + meta: typing.Optional[typing.Optional[typing.Any]] = OMIT, + prefix: typing.Optional[str] = OMIT, + project: typing.Optional[int] = OMIT, + regex_filter: typing.Optional[str] = OMIT, + request_timeout_s: typing.Optional[int] = OMIT, + schema: typing.Optional[str] = OMIT, + status: typing.Optional[StatusC5AEnum] = OMIT, + stream_chunk_bytes: typing.Optional[int] = OMIT, + synchronizable: typing.Optional[bool] = OMIT, + title: typing.Optional[str] = OMIT, + token: typing.Optional[str] = OMIT, + traceback: typing.Optional[str] = OMIT, + use_blob_urls: typing.Optional[bool] = OMIT, + verify_tls: typing.Optional[bool] = OMIT, + volume: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> DatabricksExportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific Databricks Files export storage connection. + + Parameters + ---------- + id : int + + can_delete_objects : typing.Optional[bool] + Deletion from storage enabled + + catalog : typing.Optional[str] + UC catalog name + + description : typing.Optional[str] + Cloud storage description + + host : typing.Optional[str] + Databricks workspace base URL (https://...) + + last_sync : typing.Optional[dt.datetime] + Last sync finished time + + last_sync_count : typing.Optional[int] + Count of tasks synced last time + + last_sync_job : typing.Optional[str] + Last sync job ID + + meta : typing.Optional[typing.Optional[typing.Any]] + + prefix : typing.Optional[str] + Export path prefix under the volume + + project : typing.Optional[int] + A unique integer value identifying this project. + + regex_filter : typing.Optional[str] + Regex for filtering objects + + request_timeout_s : typing.Optional[int] + + schema : typing.Optional[str] + UC schema name + + status : typing.Optional[StatusC5AEnum] + + stream_chunk_bytes : typing.Optional[int] + + synchronizable : typing.Optional[bool] + + title : typing.Optional[str] + Cloud storage title + + token : typing.Optional[str] + + traceback : typing.Optional[str] + Traceback report for the last failed sync + + use_blob_urls : typing.Optional[bool] + Generate blob URLs in tasks + + verify_tls : typing.Optional[bool] + Verify TLS certificates + + volume : typing.Optional[str] + UC volume name + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksExportStorage + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.export_storage.databricks.update( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/storages/export/databricks/{jsonable_encoder(id)}", + method="PATCH", + json={ + "can_delete_objects": can_delete_objects, + "catalog": catalog, + "description": description, + "host": host, + "last_sync": last_sync, + "last_sync_count": last_sync_count, + "last_sync_job": last_sync_job, + "meta": meta, + "prefix": prefix, + "project": project, + "regex_filter": regex_filter, + "request_timeout_s": request_timeout_s, + "schema": schema, + "status": status, + "stream_chunk_bytes": stream_chunk_bytes, + "synchronizable": synchronizable, + "title": title, + "token": token, + "traceback": traceback, + "use_blob_urls": use_blob_urls, + "verify_tls": verify_tls, + "volume": volume, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksExportStorage, + construct_type( + type_=DatabricksExportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def sync(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> DatabricksExportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Export annotations to a Databricks Files storage. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksExportStorage + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.export_storage.databricks.sync( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/storages/export/databricks/{jsonable_encoder(id)}/sync", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksExportStorage, + construct_type( + type_=DatabricksExportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + +class AsyncDatabricksClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def list( + self, + *, + project: int, + ordering: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.List[DatabricksExportStorage]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a list of all Databricks Files export storage connections. + + Parameters + ---------- + project : int + Project ID + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[DatabricksExportStorage] + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.export_storage.databricks.list( + project=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + "api/storages/export/databricks", + method="GET", + params={ + "ordering": ordering, + "project": project, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[DatabricksExportStorage], + construct_type( + type_=typing.List[DatabricksExportStorage], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def create( + self, + *, + catalog: str, + host: str, + project: int, + schema: str, + volume: str, + can_delete_objects: typing.Optional[bool] = OMIT, + description: typing.Optional[str] = OMIT, + last_sync: typing.Optional[dt.datetime] = OMIT, + last_sync_count: typing.Optional[int] = OMIT, + last_sync_job: typing.Optional[str] = OMIT, + meta: typing.Optional[typing.Optional[typing.Any]] = OMIT, + prefix: typing.Optional[str] = OMIT, + regex_filter: typing.Optional[str] = OMIT, + request_timeout_s: typing.Optional[int] = OMIT, + status: typing.Optional[StatusC5AEnum] = OMIT, + stream_chunk_bytes: typing.Optional[int] = OMIT, + synchronizable: typing.Optional[bool] = OMIT, + title: typing.Optional[str] = OMIT, + token: typing.Optional[str] = OMIT, + traceback: typing.Optional[str] = OMIT, + use_blob_urls: typing.Optional[bool] = OMIT, + verify_tls: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> DatabricksExportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a Databricks Files export storage connection. + + Parameters + ---------- + catalog : str + UC catalog name + + host : str + Databricks workspace base URL (https://...) + + project : int + A unique integer value identifying this project. + + schema : str + UC schema name + + volume : str + UC volume name + + can_delete_objects : typing.Optional[bool] + Deletion from storage enabled + + description : typing.Optional[str] + Cloud storage description + + last_sync : typing.Optional[dt.datetime] + Last sync finished time + + last_sync_count : typing.Optional[int] + Count of tasks synced last time + + last_sync_job : typing.Optional[str] + Last sync job ID + + meta : typing.Optional[typing.Optional[typing.Any]] + + prefix : typing.Optional[str] + Export path prefix under the volume + + regex_filter : typing.Optional[str] + Regex for filtering objects + + request_timeout_s : typing.Optional[int] + + status : typing.Optional[StatusC5AEnum] + + stream_chunk_bytes : typing.Optional[int] + + synchronizable : typing.Optional[bool] + + title : typing.Optional[str] + Cloud storage title + + token : typing.Optional[str] + + traceback : typing.Optional[str] + Traceback report for the last failed sync + + use_blob_urls : typing.Optional[bool] + Generate blob URLs in tasks + + verify_tls : typing.Optional[bool] + Verify TLS certificates + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksExportStorage + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.export_storage.databricks.create( + catalog="catalog", + host="host", + project=1, + schema="schema", + volume="volume", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + "api/storages/export/databricks", + method="POST", + json={ + "can_delete_objects": can_delete_objects, + "catalog": catalog, + "description": description, + "host": host, + "last_sync": last_sync, + "last_sync_count": last_sync_count, + "last_sync_job": last_sync_job, + "meta": meta, + "prefix": prefix, + "project": project, + "regex_filter": regex_filter, + "request_timeout_s": request_timeout_s, + "schema": schema, + "status": status, + "stream_chunk_bytes": stream_chunk_bytes, + "synchronizable": synchronizable, + "title": title, + "token": token, + "traceback": traceback, + "use_blob_urls": use_blob_urls, + "verify_tls": verify_tls, + "volume": volume, + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksExportStorage, + construct_type( + type_=DatabricksExportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def validate( + self, + *, + catalog: str, + host: str, + project: int, + schema: str, + volume: str, + can_delete_objects: typing.Optional[bool] = OMIT, + description: typing.Optional[str] = OMIT, + last_sync: typing.Optional[dt.datetime] = OMIT, + last_sync_count: typing.Optional[int] = OMIT, + last_sync_job: typing.Optional[str] = OMIT, + meta: typing.Optional[typing.Optional[typing.Any]] = OMIT, + prefix: typing.Optional[str] = OMIT, + regex_filter: typing.Optional[str] = OMIT, + request_timeout_s: typing.Optional[int] = OMIT, + status: typing.Optional[StatusC5AEnum] = OMIT, + stream_chunk_bytes: typing.Optional[int] = OMIT, + synchronizable: typing.Optional[bool] = OMIT, + title: typing.Optional[str] = OMIT, + token: typing.Optional[str] = OMIT, + traceback: typing.Optional[str] = OMIT, + use_blob_urls: typing.Optional[bool] = OMIT, + verify_tls: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate a specific Databricks Files export storage connection. + + Parameters + ---------- + catalog : str + UC catalog name + + host : str + Databricks workspace base URL (https://...) + + project : int + A unique integer value identifying this project. + + schema : str + UC schema name + + volume : str + UC volume name + + can_delete_objects : typing.Optional[bool] + Deletion from storage enabled + + description : typing.Optional[str] + Cloud storage description + + last_sync : typing.Optional[dt.datetime] + Last sync finished time + + last_sync_count : typing.Optional[int] + Count of tasks synced last time + + last_sync_job : typing.Optional[str] + Last sync job ID + + meta : typing.Optional[typing.Optional[typing.Any]] + + prefix : typing.Optional[str] + Export path prefix under the volume + + regex_filter : typing.Optional[str] + Regex for filtering objects + + request_timeout_s : typing.Optional[int] + + status : typing.Optional[StatusC5AEnum] + + stream_chunk_bytes : typing.Optional[int] + + synchronizable : typing.Optional[bool] + + title : typing.Optional[str] + Cloud storage title + + token : typing.Optional[str] + + traceback : typing.Optional[str] + Traceback report for the last failed sync + + use_blob_urls : typing.Optional[bool] + Generate blob URLs in tasks + + verify_tls : typing.Optional[bool] + Verify TLS certificates + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.export_storage.databricks.validate( + catalog="catalog", + host="host", + project=1, + schema="schema", + volume="volume", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + "api/storages/export/databricks/validate", + method="POST", + json={ + "can_delete_objects": can_delete_objects, + "catalog": catalog, + "description": description, + "host": host, + "last_sync": last_sync, + "last_sync_count": last_sync_count, + "last_sync_job": last_sync_job, + "meta": meta, + "prefix": prefix, + "project": project, + "regex_filter": regex_filter, + "request_timeout_s": request_timeout_s, + "schema": schema, + "status": status, + "stream_chunk_bytes": stream_chunk_bytes, + "synchronizable": synchronizable, + "title": title, + "token": token, + "traceback": traceback, + "use_blob_urls": use_blob_urls, + "verify_tls": verify_tls, + "volume": volume, + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> DatabricksExportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific Databricks Files export storage connection. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksExportStorage + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.export_storage.databricks.get( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/storages/export/databricks/{jsonable_encoder(id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksExportStorage, + construct_type( + type_=DatabricksExportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific Databricks Files export storage connection. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.export_storage.databricks.delete( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/storages/export/databricks/{jsonable_encoder(id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def update( + self, + id: int, + *, + can_delete_objects: typing.Optional[bool] = OMIT, + catalog: typing.Optional[str] = OMIT, + description: typing.Optional[str] = OMIT, + host: typing.Optional[str] = OMIT, + last_sync: typing.Optional[dt.datetime] = OMIT, + last_sync_count: typing.Optional[int] = OMIT, + last_sync_job: typing.Optional[str] = OMIT, + meta: typing.Optional[typing.Optional[typing.Any]] = OMIT, + prefix: typing.Optional[str] = OMIT, + project: typing.Optional[int] = OMIT, + regex_filter: typing.Optional[str] = OMIT, + request_timeout_s: typing.Optional[int] = OMIT, + schema: typing.Optional[str] = OMIT, + status: typing.Optional[StatusC5AEnum] = OMIT, + stream_chunk_bytes: typing.Optional[int] = OMIT, + synchronizable: typing.Optional[bool] = OMIT, + title: typing.Optional[str] = OMIT, + token: typing.Optional[str] = OMIT, + traceback: typing.Optional[str] = OMIT, + use_blob_urls: typing.Optional[bool] = OMIT, + verify_tls: typing.Optional[bool] = OMIT, + volume: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> DatabricksExportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific Databricks Files export storage connection. + + Parameters + ---------- + id : int + + can_delete_objects : typing.Optional[bool] + Deletion from storage enabled + + catalog : typing.Optional[str] + UC catalog name + + description : typing.Optional[str] + Cloud storage description + + host : typing.Optional[str] + Databricks workspace base URL (https://...) + + last_sync : typing.Optional[dt.datetime] + Last sync finished time + + last_sync_count : typing.Optional[int] + Count of tasks synced last time + + last_sync_job : typing.Optional[str] + Last sync job ID + + meta : typing.Optional[typing.Optional[typing.Any]] + + prefix : typing.Optional[str] + Export path prefix under the volume + + project : typing.Optional[int] + A unique integer value identifying this project. + + regex_filter : typing.Optional[str] + Regex for filtering objects + + request_timeout_s : typing.Optional[int] + + schema : typing.Optional[str] + UC schema name + + status : typing.Optional[StatusC5AEnum] + + stream_chunk_bytes : typing.Optional[int] + + synchronizable : typing.Optional[bool] + + title : typing.Optional[str] + Cloud storage title + + token : typing.Optional[str] + + traceback : typing.Optional[str] + Traceback report for the last failed sync + + use_blob_urls : typing.Optional[bool] + Generate blob URLs in tasks + + verify_tls : typing.Optional[bool] + Verify TLS certificates + + volume : typing.Optional[str] + UC volume name + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksExportStorage + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.export_storage.databricks.update( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/storages/export/databricks/{jsonable_encoder(id)}", + method="PATCH", + json={ + "can_delete_objects": can_delete_objects, + "catalog": catalog, + "description": description, + "host": host, + "last_sync": last_sync, + "last_sync_count": last_sync_count, + "last_sync_job": last_sync_job, + "meta": meta, + "prefix": prefix, + "project": project, + "regex_filter": regex_filter, + "request_timeout_s": request_timeout_s, + "schema": schema, + "status": status, + "stream_chunk_bytes": stream_chunk_bytes, + "synchronizable": synchronizable, + "title": title, + "token": token, + "traceback": traceback, + "use_blob_urls": use_blob_urls, + "verify_tls": verify_tls, + "volume": volume, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksExportStorage, + construct_type( + type_=DatabricksExportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def sync( + self, id: int, *, request_options: typing.Optional[RequestOptions] = None + ) -> DatabricksExportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Export annotations to a Databricks Files storage. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksExportStorage + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.export_storage.databricks.sync( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/storages/export/databricks/{jsonable_encoder(id)}/sync", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksExportStorage, + construct_type( + type_=DatabricksExportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) diff --git a/src/label_studio_sdk/export_storage/gcs/client.py b/src/label_studio_sdk/export_storage/gcs/client.py index 1ce654e97..bda9d15cc 100644 --- a/src/label_studio_sdk/export_storage/gcs/client.py +++ b/src/label_studio_sdk/export_storage/gcs/client.py @@ -21,8 +21,8 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[GcsExportStorage]: """ @@ -30,12 +30,12 @@ def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -51,7 +51,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.export_storage.gcs.list() + client.export_storage.gcs.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/export/gcs", @@ -494,8 +496,8 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[GcsExportStorage]: """ @@ -503,12 +505,12 @@ async def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -529,7 +531,9 @@ async def list( async def main() -> None: - await client.export_storage.gcs.list() + await client.export_storage.gcs.list( + project=1, + ) asyncio.run(main()) diff --git a/src/label_studio_sdk/export_storage/gcswif/client.py b/src/label_studio_sdk/export_storage/gcswif/client.py index cb4a1d3b0..e02c26854 100644 --- a/src/label_studio_sdk/export_storage/gcswif/client.py +++ b/src/label_studio_sdk/export_storage/gcswif/client.py @@ -23,21 +23,27 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[GcswifExportStorage]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all GCS export storage connections that were set up with WIF authentication. Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -53,7 +59,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.export_storage.gcswif.list() + client.export_storage.gcswif.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/export/gcswif", @@ -105,6 +113,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> GcswifExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create an GCS export storage connection with WIF authentication to store annotations. Parameters @@ -258,6 +272,12 @@ def validate( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific GCS export storage connection that was set up with WIF authentication. Parameters @@ -379,6 +399,12 @@ def validate( def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> GcswifExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific GCS export storage connection that was set up with WIF authentication. Parameters @@ -425,6 +451,12 @@ def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = Non def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific GCS export storage connection that was set up with WIF authentication. Parameters @@ -490,6 +522,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> GcswifExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific GCS export storage connection that was set up with WIF authentication. Parameters @@ -623,6 +661,12 @@ def update( def sync(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> GcswifExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an GCS WIF export storage. Parameters @@ -675,21 +719,27 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[GcswifExportStorage]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all GCS export storage connections that were set up with WIF authentication. Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -710,7 +760,9 @@ async def list( async def main() -> None: - await client.export_storage.gcswif.list() + await client.export_storage.gcswif.list( + project=1, + ) asyncio.run(main()) @@ -765,6 +817,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> GcswifExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create an GCS export storage connection with WIF authentication to store annotations. Parameters @@ -926,6 +984,12 @@ async def validate( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific GCS export storage connection that was set up with WIF authentication. Parameters @@ -1055,6 +1119,12 @@ async def main() -> None: async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> GcswifExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific GCS export storage connection that was set up with WIF authentication. Parameters @@ -1109,6 +1179,12 @@ async def main() -> None: async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific GCS export storage connection that was set up with WIF authentication. Parameters @@ -1182,6 +1258,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> GcswifExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific GCS export storage connection that was set up with WIF authentication. Parameters @@ -1323,6 +1405,12 @@ async def main() -> None: async def sync(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> GcswifExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an GCS WIF export storage. Parameters diff --git a/src/label_studio_sdk/export_storage/local/client.py b/src/label_studio_sdk/export_storage/local/client.py index ae55c6fe3..14eacac10 100644 --- a/src/label_studio_sdk/export_storage/local/client.py +++ b/src/label_studio_sdk/export_storage/local/client.py @@ -21,8 +21,8 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[LocalFilesExportStorage]: """ @@ -30,12 +30,12 @@ def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -51,7 +51,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.export_storage.local.list() + client.export_storage.local.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/export/localfiles", @@ -464,8 +466,8 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[LocalFilesExportStorage]: """ @@ -473,12 +475,12 @@ async def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -499,7 +501,9 @@ async def list( async def main() -> None: - await client.export_storage.local.list() + await client.export_storage.local.list( + project=1, + ) asyncio.run(main()) diff --git a/src/label_studio_sdk/export_storage/redis/client.py b/src/label_studio_sdk/export_storage/redis/client.py index 30684bc96..5893e39bd 100644 --- a/src/label_studio_sdk/export_storage/redis/client.py +++ b/src/label_studio_sdk/export_storage/redis/client.py @@ -21,8 +21,8 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[RedisExportStorage]: """ @@ -30,12 +30,12 @@ def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -51,7 +51,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.export_storage.redis.list() + client.export_storage.redis.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/export/redis", @@ -509,8 +511,8 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[RedisExportStorage]: """ @@ -518,12 +520,12 @@ async def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -544,7 +546,9 @@ async def list( async def main() -> None: - await client.export_storage.redis.list() + await client.export_storage.redis.list( + project=1, + ) asyncio.run(main()) diff --git a/src/label_studio_sdk/export_storage/s3/client.py b/src/label_studio_sdk/export_storage/s3/client.py index 1f72b5258..91134e979 100644 --- a/src/label_studio_sdk/export_storage/s3/client.py +++ b/src/label_studio_sdk/export_storage/s3/client.py @@ -21,8 +21,8 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[S3ExportStorage]: """ @@ -30,12 +30,12 @@ def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -51,7 +51,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.export_storage.s3.list() + client.export_storage.s3.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/export/s3", @@ -554,8 +556,8 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[S3ExportStorage]: """ @@ -563,12 +565,12 @@ async def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -589,7 +591,9 @@ async def list( async def main() -> None: - await client.export_storage.s3.list() + await client.export_storage.s3.list( + project=1, + ) asyncio.run(main()) diff --git a/src/label_studio_sdk/export_storage/s3s/client.py b/src/label_studio_sdk/export_storage/s3s/client.py index e2c3e18ff..ef2656e41 100644 --- a/src/label_studio_sdk/export_storage/s3s/client.py +++ b/src/label_studio_sdk/export_storage/s3s/client.py @@ -23,21 +23,27 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[LseS3ExportStorage]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all S3 export storage connections that were set up with IAM role access. Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -53,7 +59,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.export_storage.s3s.list() + client.export_storage.s3s.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/export/s3s", @@ -108,6 +116,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> LseS3ExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create an S3 export storage connection with IAM role access to store annotations. Parameters @@ -276,6 +290,12 @@ def validate( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific S3 export storage connection that was set up with IAM role access. Parameters @@ -409,6 +429,12 @@ def validate( def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> LseS3ExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific S3 export storage connection that was set up with IAM role access. Parameters @@ -455,6 +481,12 @@ def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = Non def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific S3 export storage connection that was set up with IAM role access. Parameters @@ -523,6 +555,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> LseS3ExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific S3 export storage connection that was set up with IAM role access. Parameters @@ -667,6 +705,12 @@ def update( def sync(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> LseS3ExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an S3 export storage. Parameters @@ -719,21 +763,27 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[LseS3ExportStorage]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all S3 export storage connections that were set up with IAM role access. Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -754,7 +804,9 @@ async def list( async def main() -> None: - await client.export_storage.s3s.list() + await client.export_storage.s3s.list( + project=1, + ) asyncio.run(main()) @@ -812,6 +864,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> LseS3ExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create an S3 export storage connection with IAM role access to store annotations. Parameters @@ -988,6 +1046,12 @@ async def validate( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific S3 export storage connection that was set up with IAM role access. Parameters @@ -1129,6 +1193,12 @@ async def main() -> None: async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> LseS3ExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific S3 export storage connection that was set up with IAM role access. Parameters @@ -1183,6 +1253,12 @@ async def main() -> None: async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific S3 export storage connection that was set up with IAM role access. Parameters @@ -1259,6 +1335,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> LseS3ExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific S3 export storage connection that was set up with IAM role access. Parameters @@ -1411,6 +1493,12 @@ async def main() -> None: async def sync(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> LseS3ExportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an S3 export storage. Parameters diff --git a/src/label_studio_sdk/import_storage/__init__.py b/src/label_studio_sdk/import_storage/__init__.py index 0d66ae1b9..9b35fe8bf 100644 --- a/src/label_studio_sdk/import_storage/__init__.py +++ b/src/label_studio_sdk/import_storage/__init__.py @@ -1,6 +1,17 @@ # This file was auto-generated by Fern from our API Definition. from .types import ImportStorageListTypesResponseItem -from . import azure, azure_spi, gcs, gcswif, local, redis, s3, s3s +from . import azure, azure_spi, databricks, gcs, gcswif, local, redis, s3, s3s -__all__ = ["ImportStorageListTypesResponseItem", "azure", "azure_spi", "gcs", "gcswif", "local", "redis", "s3", "s3s"] +__all__ = [ + "ImportStorageListTypesResponseItem", + "azure", + "azure_spi", + "databricks", + "gcs", + "gcswif", + "local", + "redis", + "s3", + "s3s", +] diff --git a/src/label_studio_sdk/import_storage/azure/client.py b/src/label_studio_sdk/import_storage/azure/client.py index bf31f88bd..f363650b2 100644 --- a/src/label_studio_sdk/import_storage/azure/client.py +++ b/src/label_studio_sdk/import_storage/azure/client.py @@ -21,8 +21,8 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[AzureBlobImportStorage]: """ @@ -30,12 +30,12 @@ def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -51,7 +51,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.import_storage.azure.list() + client.import_storage.azure.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/azure/", @@ -540,8 +542,8 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[AzureBlobImportStorage]: """ @@ -549,12 +551,12 @@ async def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -575,7 +577,9 @@ async def list( async def main() -> None: - await client.import_storage.azure.list() + await client.import_storage.azure.list( + project=1, + ) asyncio.run(main()) diff --git a/src/label_studio_sdk/import_storage/azure_spi/client.py b/src/label_studio_sdk/import_storage/azure_spi/client.py index 2dcc6a22d..fde8f0de8 100644 --- a/src/label_studio_sdk/import_storage/azure_spi/client.py +++ b/src/label_studio_sdk/import_storage/azure_spi/client.py @@ -23,21 +23,27 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[AzureServicePrincipalImportStorage]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get list of all Azure import storage connections set up with Service Principal authentication. Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -53,7 +59,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.import_storage.azure_spi.list() + client.import_storage.azure_spi.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/azure_spi/", @@ -94,6 +102,7 @@ def create( prefix: typing.Optional[str] = OMIT, presign: typing.Optional[bool] = OMIT, presign_ttl: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, regex_filter: typing.Optional[str] = OMIT, status: typing.Optional[StatusC5AEnum] = OMIT, synchronizable: typing.Optional[bool] = OMIT, @@ -105,6 +114,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> AzureServicePrincipalImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create Azure import storage with Service Principal authentication. Parameters @@ -146,6 +161,9 @@ def create( presign_ttl : typing.Optional[int] Presigned URLs TTL (in minutes) + recursive_scan : typing.Optional[bool] + Perform recursive scan + regex_filter : typing.Optional[str] Cloud storage regex for filtering objects @@ -204,6 +222,7 @@ def create( "presign": presign, "presign_ttl": presign_ttl, "project": project, + "recursive_scan": recursive_scan, "regex_filter": regex_filter, "status": status, "synchronizable": synchronizable, @@ -246,6 +265,7 @@ def validate( prefix: typing.Optional[str] = OMIT, presign: typing.Optional[bool] = OMIT, presign_ttl: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, regex_filter: typing.Optional[str] = OMIT, status: typing.Optional[StatusC5AEnum] = OMIT, synchronizable: typing.Optional[bool] = OMIT, @@ -257,6 +277,12 @@ def validate( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific Azure import storage connection that was set up with Service Principal authentication. Parameters @@ -298,6 +324,9 @@ def validate( presign_ttl : typing.Optional[int] Presigned URLs TTL (in minutes) + recursive_scan : typing.Optional[bool] + Perform recursive scan + regex_filter : typing.Optional[str] Cloud storage regex for filtering objects @@ -355,6 +384,7 @@ def validate( "presign": presign, "presign_ttl": presign_ttl, "project": project, + "recursive_scan": recursive_scan, "regex_filter": regex_filter, "status": status, "synchronizable": synchronizable, @@ -379,6 +409,12 @@ def get( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> AzureServicePrincipalImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific Azure import storage connection that was set up with Service Principal authentication. Parameters @@ -425,6 +461,12 @@ def get( def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific Azure import storage connection that was set up with Service Principal authentication. Parameters @@ -479,6 +521,7 @@ def update( presign: typing.Optional[bool] = OMIT, presign_ttl: typing.Optional[int] = OMIT, project: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, regex_filter: typing.Optional[str] = OMIT, status: typing.Optional[StatusC5AEnum] = OMIT, synchronizable: typing.Optional[bool] = OMIT, @@ -490,6 +533,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> AzureServicePrincipalImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific Azure import storage connection that was set up with Service Principal authentication. Parameters @@ -533,6 +582,9 @@ def update( project : typing.Optional[int] A unique integer value identifying this project. + recursive_scan : typing.Optional[bool] + Perform recursive scan + regex_filter : typing.Optional[str] Cloud storage regex for filtering objects @@ -591,6 +643,7 @@ def update( "presign": presign, "presign_ttl": presign_ttl, "project": project, + "recursive_scan": recursive_scan, "regex_filter": regex_filter, "status": status, "synchronizable": synchronizable, @@ -624,6 +677,12 @@ def sync( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> AzureServicePrincipalImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an Azure import storage connection that was set up with Service Principal authentication. Parameters @@ -676,21 +735,27 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[AzureServicePrincipalImportStorage]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get list of all Azure import storage connections set up with Service Principal authentication. Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -711,7 +776,9 @@ async def list( async def main() -> None: - await client.import_storage.azure_spi.list() + await client.import_storage.azure_spi.list( + project=1, + ) asyncio.run(main()) @@ -755,6 +822,7 @@ async def create( prefix: typing.Optional[str] = OMIT, presign: typing.Optional[bool] = OMIT, presign_ttl: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, regex_filter: typing.Optional[str] = OMIT, status: typing.Optional[StatusC5AEnum] = OMIT, synchronizable: typing.Optional[bool] = OMIT, @@ -766,6 +834,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> AzureServicePrincipalImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create Azure import storage with Service Principal authentication. Parameters @@ -807,6 +881,9 @@ async def create( presign_ttl : typing.Optional[int] Presigned URLs TTL (in minutes) + recursive_scan : typing.Optional[bool] + Perform recursive scan + regex_filter : typing.Optional[str] Cloud storage regex for filtering objects @@ -873,6 +950,7 @@ async def main() -> None: "presign": presign, "presign_ttl": presign_ttl, "project": project, + "recursive_scan": recursive_scan, "regex_filter": regex_filter, "status": status, "synchronizable": synchronizable, @@ -915,6 +993,7 @@ async def validate( prefix: typing.Optional[str] = OMIT, presign: typing.Optional[bool] = OMIT, presign_ttl: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, regex_filter: typing.Optional[str] = OMIT, status: typing.Optional[StatusC5AEnum] = OMIT, synchronizable: typing.Optional[bool] = OMIT, @@ -926,6 +1005,12 @@ async def validate( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific Azure import storage connection that was set up with Service Principal authentication. Parameters @@ -967,6 +1052,9 @@ async def validate( presign_ttl : typing.Optional[int] Presigned URLs TTL (in minutes) + recursive_scan : typing.Optional[bool] + Perform recursive scan + regex_filter : typing.Optional[str] Cloud storage regex for filtering objects @@ -1032,6 +1120,7 @@ async def main() -> None: "presign": presign, "presign_ttl": presign_ttl, "project": project, + "recursive_scan": recursive_scan, "regex_filter": regex_filter, "status": status, "synchronizable": synchronizable, @@ -1056,6 +1145,12 @@ async def get( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> AzureServicePrincipalImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific Azure import storage connection that was set up with Service Principal authentication. Parameters @@ -1110,6 +1205,12 @@ async def main() -> None: async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific Azure import storage connection that was set up with Service Principal authentication. Parameters @@ -1172,6 +1273,7 @@ async def update( presign: typing.Optional[bool] = OMIT, presign_ttl: typing.Optional[int] = OMIT, project: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, regex_filter: typing.Optional[str] = OMIT, status: typing.Optional[StatusC5AEnum] = OMIT, synchronizable: typing.Optional[bool] = OMIT, @@ -1183,6 +1285,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> AzureServicePrincipalImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific Azure import storage connection that was set up with Service Principal authentication. Parameters @@ -1226,6 +1334,9 @@ async def update( project : typing.Optional[int] A unique integer value identifying this project. + recursive_scan : typing.Optional[bool] + Perform recursive scan + regex_filter : typing.Optional[str] Cloud storage regex for filtering objects @@ -1292,6 +1403,7 @@ async def main() -> None: "presign": presign, "presign_ttl": presign_ttl, "project": project, + "recursive_scan": recursive_scan, "regex_filter": regex_filter, "status": status, "synchronizable": synchronizable, @@ -1325,6 +1437,12 @@ async def sync( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> AzureServicePrincipalImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an Azure import storage connection that was set up with Service Principal authentication. Parameters diff --git a/src/label_studio_sdk/import_storage/client.py b/src/label_studio_sdk/import_storage/client.py index 887f77cde..da9134cae 100644 --- a/src/label_studio_sdk/import_storage/client.py +++ b/src/label_studio_sdk/import_storage/client.py @@ -3,6 +3,7 @@ from ..core.client_wrapper import SyncClientWrapper from .azure.client import AzureClient from .azure_spi.client import AzureSpiClient +from .databricks.client import DatabricksClient from .gcs.client import GcsClient from .gcswif.client import GcswifClient from .local.client import LocalClient @@ -18,6 +19,7 @@ from ..core.client_wrapper import AsyncClientWrapper from .azure.client import AsyncAzureClient from .azure_spi.client import AsyncAzureSpiClient +from .databricks.client import AsyncDatabricksClient from .gcs.client import AsyncGcsClient from .gcswif.client import AsyncGcswifClient from .local.client import AsyncLocalClient @@ -31,6 +33,7 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper self.azure = AzureClient(client_wrapper=self._client_wrapper) self.azure_spi = AzureSpiClient(client_wrapper=self._client_wrapper) + self.databricks = DatabricksClient(client_wrapper=self._client_wrapper) self.gcs = GcsClient(client_wrapper=self._client_wrapper) self.gcswif = GcswifClient(client_wrapper=self._client_wrapper) self.local = LocalClient(client_wrapper=self._client_wrapper) @@ -88,6 +91,7 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper self.azure = AsyncAzureClient(client_wrapper=self._client_wrapper) self.azure_spi = AsyncAzureSpiClient(client_wrapper=self._client_wrapper) + self.databricks = AsyncDatabricksClient(client_wrapper=self._client_wrapper) self.gcs = AsyncGcsClient(client_wrapper=self._client_wrapper) self.gcswif = AsyncGcswifClient(client_wrapper=self._client_wrapper) self.local = AsyncLocalClient(client_wrapper=self._client_wrapper) diff --git a/src/label_studio_sdk/import_storage/databricks/__init__.py b/src/label_studio_sdk/import_storage/databricks/__init__.py new file mode 100644 index 000000000..f3ea2659b --- /dev/null +++ b/src/label_studio_sdk/import_storage/databricks/__init__.py @@ -0,0 +1,2 @@ +# This file was auto-generated by Fern from our API Definition. + diff --git a/src/label_studio_sdk/import_storage/databricks/client.py b/src/label_studio_sdk/import_storage/databricks/client.py new file mode 100644 index 000000000..a71e8a6b6 --- /dev/null +++ b/src/label_studio_sdk/import_storage/databricks/client.py @@ -0,0 +1,1554 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from ...core.client_wrapper import SyncClientWrapper +from ...core.request_options import RequestOptions +from ...types.databricks_import_storage import DatabricksImportStorage +from ...core.unchecked_base_model import construct_type +from json.decoder import JSONDecodeError +from ...core.api_error import ApiError +import datetime as dt +from ...types.status_c5a_enum import StatusC5AEnum +from ...core.jsonable_encoder import jsonable_encoder +from ...core.client_wrapper import AsyncClientWrapper + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class DatabricksClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def list( + self, + *, + project: int, + ordering: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.List[DatabricksImportStorage]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get list of all Databricks Files import storage connections. + + Parameters + ---------- + project : int + Project ID + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[DatabricksImportStorage] + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.import_storage.databricks.list( + project=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + "api/storages/databricks/", + method="GET", + params={ + "ordering": ordering, + "project": project, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[DatabricksImportStorage], + construct_type( + type_=typing.List[DatabricksImportStorage], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def create( + self, + *, + catalog: str, + host: str, + project: int, + schema: str, + volume: str, + description: typing.Optional[str] = OMIT, + last_sync: typing.Optional[dt.datetime] = OMIT, + last_sync_count: typing.Optional[int] = OMIT, + last_sync_job: typing.Optional[str] = OMIT, + meta: typing.Optional[typing.Optional[typing.Any]] = OMIT, + prefix: typing.Optional[str] = OMIT, + presign: typing.Optional[bool] = OMIT, + presign_ttl: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, + regex_filter: typing.Optional[str] = OMIT, + request_timeout_s: typing.Optional[int] = OMIT, + status: typing.Optional[StatusC5AEnum] = OMIT, + stream_chunk_bytes: typing.Optional[int] = OMIT, + synchronizable: typing.Optional[bool] = OMIT, + title: typing.Optional[str] = OMIT, + token: typing.Optional[str] = OMIT, + traceback: typing.Optional[str] = OMIT, + use_blob_urls: typing.Optional[bool] = OMIT, + verify_tls: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> DatabricksImportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a Databricks Files import storage connection. + + Parameters + ---------- + catalog : str + UC catalog name + + host : str + Databricks workspace base URL (https://...) + + project : int + A unique integer value identifying this project. + + schema : str + UC schema name + + volume : str + UC volume name + + description : typing.Optional[str] + Cloud storage description + + last_sync : typing.Optional[dt.datetime] + Last sync finished time + + last_sync_count : typing.Optional[int] + Count of tasks synced last time + + last_sync_job : typing.Optional[str] + Last sync job ID + + meta : typing.Optional[typing.Optional[typing.Any]] + + prefix : typing.Optional[str] + Path under the volume + + presign : typing.Optional[bool] + Presign not supported; always proxied + + presign_ttl : typing.Optional[int] + Unused for Databricks; kept for compatibility + + recursive_scan : typing.Optional[bool] + Perform recursive scan + + regex_filter : typing.Optional[str] + Regex for filtering objects + + request_timeout_s : typing.Optional[int] + + status : typing.Optional[StatusC5AEnum] + + stream_chunk_bytes : typing.Optional[int] + + synchronizable : typing.Optional[bool] + + title : typing.Optional[str] + Cloud storage title + + token : typing.Optional[str] + + traceback : typing.Optional[str] + Traceback report for the last failed sync + + use_blob_urls : typing.Optional[bool] + Generate blob URLs in tasks + + verify_tls : typing.Optional[bool] + Verify TLS certificates + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksImportStorage + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.import_storage.databricks.create( + catalog="catalog", + host="host", + project=1, + schema="schema", + volume="volume", + ) + """ + _response = self._client_wrapper.httpx_client.request( + "api/storages/databricks/", + method="POST", + json={ + "catalog": catalog, + "description": description, + "host": host, + "last_sync": last_sync, + "last_sync_count": last_sync_count, + "last_sync_job": last_sync_job, + "meta": meta, + "prefix": prefix, + "presign": presign, + "presign_ttl": presign_ttl, + "project": project, + "recursive_scan": recursive_scan, + "regex_filter": regex_filter, + "request_timeout_s": request_timeout_s, + "schema": schema, + "status": status, + "stream_chunk_bytes": stream_chunk_bytes, + "synchronizable": synchronizable, + "title": title, + "token": token, + "traceback": traceback, + "use_blob_urls": use_blob_urls, + "verify_tls": verify_tls, + "volume": volume, + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksImportStorage, + construct_type( + type_=DatabricksImportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def validate( + self, + *, + catalog: str, + host: str, + project: int, + schema: str, + volume: str, + description: typing.Optional[str] = OMIT, + last_sync: typing.Optional[dt.datetime] = OMIT, + last_sync_count: typing.Optional[int] = OMIT, + last_sync_job: typing.Optional[str] = OMIT, + meta: typing.Optional[typing.Optional[typing.Any]] = OMIT, + prefix: typing.Optional[str] = OMIT, + presign: typing.Optional[bool] = OMIT, + presign_ttl: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, + regex_filter: typing.Optional[str] = OMIT, + request_timeout_s: typing.Optional[int] = OMIT, + status: typing.Optional[StatusC5AEnum] = OMIT, + stream_chunk_bytes: typing.Optional[int] = OMIT, + synchronizable: typing.Optional[bool] = OMIT, + title: typing.Optional[str] = OMIT, + token: typing.Optional[str] = OMIT, + traceback: typing.Optional[str] = OMIT, + use_blob_urls: typing.Optional[bool] = OMIT, + verify_tls: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate a specific Databricks Files import storage connection. + + Parameters + ---------- + catalog : str + UC catalog name + + host : str + Databricks workspace base URL (https://...) + + project : int + A unique integer value identifying this project. + + schema : str + UC schema name + + volume : str + UC volume name + + description : typing.Optional[str] + Cloud storage description + + last_sync : typing.Optional[dt.datetime] + Last sync finished time + + last_sync_count : typing.Optional[int] + Count of tasks synced last time + + last_sync_job : typing.Optional[str] + Last sync job ID + + meta : typing.Optional[typing.Optional[typing.Any]] + + prefix : typing.Optional[str] + Path under the volume + + presign : typing.Optional[bool] + Presign not supported; always proxied + + presign_ttl : typing.Optional[int] + Unused for Databricks; kept for compatibility + + recursive_scan : typing.Optional[bool] + Perform recursive scan + + regex_filter : typing.Optional[str] + Regex for filtering objects + + request_timeout_s : typing.Optional[int] + + status : typing.Optional[StatusC5AEnum] + + stream_chunk_bytes : typing.Optional[int] + + synchronizable : typing.Optional[bool] + + title : typing.Optional[str] + Cloud storage title + + token : typing.Optional[str] + + traceback : typing.Optional[str] + Traceback report for the last failed sync + + use_blob_urls : typing.Optional[bool] + Generate blob URLs in tasks + + verify_tls : typing.Optional[bool] + Verify TLS certificates + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.import_storage.databricks.validate( + catalog="catalog", + host="host", + project=1, + schema="schema", + volume="volume", + ) + """ + _response = self._client_wrapper.httpx_client.request( + "api/storages/databricks/validate", + method="POST", + json={ + "catalog": catalog, + "description": description, + "host": host, + "last_sync": last_sync, + "last_sync_count": last_sync_count, + "last_sync_job": last_sync_job, + "meta": meta, + "prefix": prefix, + "presign": presign, + "presign_ttl": presign_ttl, + "project": project, + "recursive_scan": recursive_scan, + "regex_filter": regex_filter, + "request_timeout_s": request_timeout_s, + "schema": schema, + "status": status, + "stream_chunk_bytes": stream_chunk_bytes, + "synchronizable": synchronizable, + "title": title, + "token": token, + "traceback": traceback, + "use_blob_urls": use_blob_urls, + "verify_tls": verify_tls, + "volume": volume, + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> DatabricksImportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific Databricks Files import storage connection. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksImportStorage + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.import_storage.databricks.get( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/storages/databricks/{jsonable_encoder(id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksImportStorage, + construct_type( + type_=DatabricksImportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific Databricks Files import storage connection. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.import_storage.databricks.delete( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/storages/databricks/{jsonable_encoder(id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def update( + self, + id: int, + *, + catalog: typing.Optional[str] = OMIT, + description: typing.Optional[str] = OMIT, + host: typing.Optional[str] = OMIT, + last_sync: typing.Optional[dt.datetime] = OMIT, + last_sync_count: typing.Optional[int] = OMIT, + last_sync_job: typing.Optional[str] = OMIT, + meta: typing.Optional[typing.Optional[typing.Any]] = OMIT, + prefix: typing.Optional[str] = OMIT, + presign: typing.Optional[bool] = OMIT, + presign_ttl: typing.Optional[int] = OMIT, + project: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, + regex_filter: typing.Optional[str] = OMIT, + request_timeout_s: typing.Optional[int] = OMIT, + schema: typing.Optional[str] = OMIT, + status: typing.Optional[StatusC5AEnum] = OMIT, + stream_chunk_bytes: typing.Optional[int] = OMIT, + synchronizable: typing.Optional[bool] = OMIT, + title: typing.Optional[str] = OMIT, + token: typing.Optional[str] = OMIT, + traceback: typing.Optional[str] = OMIT, + use_blob_urls: typing.Optional[bool] = OMIT, + verify_tls: typing.Optional[bool] = OMIT, + volume: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> DatabricksImportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific Databricks Files import storage connection. + + Parameters + ---------- + id : int + + catalog : typing.Optional[str] + UC catalog name + + description : typing.Optional[str] + Cloud storage description + + host : typing.Optional[str] + Databricks workspace base URL (https://...) + + last_sync : typing.Optional[dt.datetime] + Last sync finished time + + last_sync_count : typing.Optional[int] + Count of tasks synced last time + + last_sync_job : typing.Optional[str] + Last sync job ID + + meta : typing.Optional[typing.Optional[typing.Any]] + + prefix : typing.Optional[str] + Path under the volume + + presign : typing.Optional[bool] + Presign not supported; always proxied + + presign_ttl : typing.Optional[int] + Unused for Databricks; kept for compatibility + + project : typing.Optional[int] + A unique integer value identifying this project. + + recursive_scan : typing.Optional[bool] + Perform recursive scan + + regex_filter : typing.Optional[str] + Regex for filtering objects + + request_timeout_s : typing.Optional[int] + + schema : typing.Optional[str] + UC schema name + + status : typing.Optional[StatusC5AEnum] + + stream_chunk_bytes : typing.Optional[int] + + synchronizable : typing.Optional[bool] + + title : typing.Optional[str] + Cloud storage title + + token : typing.Optional[str] + + traceback : typing.Optional[str] + Traceback report for the last failed sync + + use_blob_urls : typing.Optional[bool] + Generate blob URLs in tasks + + verify_tls : typing.Optional[bool] + Verify TLS certificates + + volume : typing.Optional[str] + UC volume name + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksImportStorage + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.import_storage.databricks.update( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/storages/databricks/{jsonable_encoder(id)}", + method="PATCH", + json={ + "catalog": catalog, + "description": description, + "host": host, + "last_sync": last_sync, + "last_sync_count": last_sync_count, + "last_sync_job": last_sync_job, + "meta": meta, + "prefix": prefix, + "presign": presign, + "presign_ttl": presign_ttl, + "project": project, + "recursive_scan": recursive_scan, + "regex_filter": regex_filter, + "request_timeout_s": request_timeout_s, + "schema": schema, + "status": status, + "stream_chunk_bytes": stream_chunk_bytes, + "synchronizable": synchronizable, + "title": title, + "token": token, + "traceback": traceback, + "use_blob_urls": use_blob_urls, + "verify_tls": verify_tls, + "volume": volume, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksImportStorage, + construct_type( + type_=DatabricksImportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def sync(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> DatabricksImportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Sync tasks from a Databricks Files import storage. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksImportStorage + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.import_storage.databricks.sync( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/storages/databricks/{jsonable_encoder(id)}/sync", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksImportStorage, + construct_type( + type_=DatabricksImportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + +class AsyncDatabricksClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def list( + self, + *, + project: int, + ordering: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.List[DatabricksImportStorage]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get list of all Databricks Files import storage connections. + + Parameters + ---------- + project : int + Project ID + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[DatabricksImportStorage] + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.import_storage.databricks.list( + project=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + "api/storages/databricks/", + method="GET", + params={ + "ordering": ordering, + "project": project, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[DatabricksImportStorage], + construct_type( + type_=typing.List[DatabricksImportStorage], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def create( + self, + *, + catalog: str, + host: str, + project: int, + schema: str, + volume: str, + description: typing.Optional[str] = OMIT, + last_sync: typing.Optional[dt.datetime] = OMIT, + last_sync_count: typing.Optional[int] = OMIT, + last_sync_job: typing.Optional[str] = OMIT, + meta: typing.Optional[typing.Optional[typing.Any]] = OMIT, + prefix: typing.Optional[str] = OMIT, + presign: typing.Optional[bool] = OMIT, + presign_ttl: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, + regex_filter: typing.Optional[str] = OMIT, + request_timeout_s: typing.Optional[int] = OMIT, + status: typing.Optional[StatusC5AEnum] = OMIT, + stream_chunk_bytes: typing.Optional[int] = OMIT, + synchronizable: typing.Optional[bool] = OMIT, + title: typing.Optional[str] = OMIT, + token: typing.Optional[str] = OMIT, + traceback: typing.Optional[str] = OMIT, + use_blob_urls: typing.Optional[bool] = OMIT, + verify_tls: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> DatabricksImportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a Databricks Files import storage connection. + + Parameters + ---------- + catalog : str + UC catalog name + + host : str + Databricks workspace base URL (https://...) + + project : int + A unique integer value identifying this project. + + schema : str + UC schema name + + volume : str + UC volume name + + description : typing.Optional[str] + Cloud storage description + + last_sync : typing.Optional[dt.datetime] + Last sync finished time + + last_sync_count : typing.Optional[int] + Count of tasks synced last time + + last_sync_job : typing.Optional[str] + Last sync job ID + + meta : typing.Optional[typing.Optional[typing.Any]] + + prefix : typing.Optional[str] + Path under the volume + + presign : typing.Optional[bool] + Presign not supported; always proxied + + presign_ttl : typing.Optional[int] + Unused for Databricks; kept for compatibility + + recursive_scan : typing.Optional[bool] + Perform recursive scan + + regex_filter : typing.Optional[str] + Regex for filtering objects + + request_timeout_s : typing.Optional[int] + + status : typing.Optional[StatusC5AEnum] + + stream_chunk_bytes : typing.Optional[int] + + synchronizable : typing.Optional[bool] + + title : typing.Optional[str] + Cloud storage title + + token : typing.Optional[str] + + traceback : typing.Optional[str] + Traceback report for the last failed sync + + use_blob_urls : typing.Optional[bool] + Generate blob URLs in tasks + + verify_tls : typing.Optional[bool] + Verify TLS certificates + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksImportStorage + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.import_storage.databricks.create( + catalog="catalog", + host="host", + project=1, + schema="schema", + volume="volume", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + "api/storages/databricks/", + method="POST", + json={ + "catalog": catalog, + "description": description, + "host": host, + "last_sync": last_sync, + "last_sync_count": last_sync_count, + "last_sync_job": last_sync_job, + "meta": meta, + "prefix": prefix, + "presign": presign, + "presign_ttl": presign_ttl, + "project": project, + "recursive_scan": recursive_scan, + "regex_filter": regex_filter, + "request_timeout_s": request_timeout_s, + "schema": schema, + "status": status, + "stream_chunk_bytes": stream_chunk_bytes, + "synchronizable": synchronizable, + "title": title, + "token": token, + "traceback": traceback, + "use_blob_urls": use_blob_urls, + "verify_tls": verify_tls, + "volume": volume, + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksImportStorage, + construct_type( + type_=DatabricksImportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def validate( + self, + *, + catalog: str, + host: str, + project: int, + schema: str, + volume: str, + description: typing.Optional[str] = OMIT, + last_sync: typing.Optional[dt.datetime] = OMIT, + last_sync_count: typing.Optional[int] = OMIT, + last_sync_job: typing.Optional[str] = OMIT, + meta: typing.Optional[typing.Optional[typing.Any]] = OMIT, + prefix: typing.Optional[str] = OMIT, + presign: typing.Optional[bool] = OMIT, + presign_ttl: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, + regex_filter: typing.Optional[str] = OMIT, + request_timeout_s: typing.Optional[int] = OMIT, + status: typing.Optional[StatusC5AEnum] = OMIT, + stream_chunk_bytes: typing.Optional[int] = OMIT, + synchronizable: typing.Optional[bool] = OMIT, + title: typing.Optional[str] = OMIT, + token: typing.Optional[str] = OMIT, + traceback: typing.Optional[str] = OMIT, + use_blob_urls: typing.Optional[bool] = OMIT, + verify_tls: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Validate a specific Databricks Files import storage connection. + + Parameters + ---------- + catalog : str + UC catalog name + + host : str + Databricks workspace base URL (https://...) + + project : int + A unique integer value identifying this project. + + schema : str + UC schema name + + volume : str + UC volume name + + description : typing.Optional[str] + Cloud storage description + + last_sync : typing.Optional[dt.datetime] + Last sync finished time + + last_sync_count : typing.Optional[int] + Count of tasks synced last time + + last_sync_job : typing.Optional[str] + Last sync job ID + + meta : typing.Optional[typing.Optional[typing.Any]] + + prefix : typing.Optional[str] + Path under the volume + + presign : typing.Optional[bool] + Presign not supported; always proxied + + presign_ttl : typing.Optional[int] + Unused for Databricks; kept for compatibility + + recursive_scan : typing.Optional[bool] + Perform recursive scan + + regex_filter : typing.Optional[str] + Regex for filtering objects + + request_timeout_s : typing.Optional[int] + + status : typing.Optional[StatusC5AEnum] + + stream_chunk_bytes : typing.Optional[int] + + synchronizable : typing.Optional[bool] + + title : typing.Optional[str] + Cloud storage title + + token : typing.Optional[str] + + traceback : typing.Optional[str] + Traceback report for the last failed sync + + use_blob_urls : typing.Optional[bool] + Generate blob URLs in tasks + + verify_tls : typing.Optional[bool] + Verify TLS certificates + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.import_storage.databricks.validate( + catalog="catalog", + host="host", + project=1, + schema="schema", + volume="volume", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + "api/storages/databricks/validate", + method="POST", + json={ + "catalog": catalog, + "description": description, + "host": host, + "last_sync": last_sync, + "last_sync_count": last_sync_count, + "last_sync_job": last_sync_job, + "meta": meta, + "prefix": prefix, + "presign": presign, + "presign_ttl": presign_ttl, + "project": project, + "recursive_scan": recursive_scan, + "regex_filter": regex_filter, + "request_timeout_s": request_timeout_s, + "schema": schema, + "status": status, + "stream_chunk_bytes": stream_chunk_bytes, + "synchronizable": synchronizable, + "title": title, + "token": token, + "traceback": traceback, + "use_blob_urls": use_blob_urls, + "verify_tls": verify_tls, + "volume": volume, + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> DatabricksImportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get a specific Databricks Files import storage connection. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksImportStorage + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.import_storage.databricks.get( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/storages/databricks/{jsonable_encoder(id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksImportStorage, + construct_type( + type_=DatabricksImportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete a specific Databricks Files import storage connection. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.import_storage.databricks.delete( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/storages/databricks/{jsonable_encoder(id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def update( + self, + id: int, + *, + catalog: typing.Optional[str] = OMIT, + description: typing.Optional[str] = OMIT, + host: typing.Optional[str] = OMIT, + last_sync: typing.Optional[dt.datetime] = OMIT, + last_sync_count: typing.Optional[int] = OMIT, + last_sync_job: typing.Optional[str] = OMIT, + meta: typing.Optional[typing.Optional[typing.Any]] = OMIT, + prefix: typing.Optional[str] = OMIT, + presign: typing.Optional[bool] = OMIT, + presign_ttl: typing.Optional[int] = OMIT, + project: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, + regex_filter: typing.Optional[str] = OMIT, + request_timeout_s: typing.Optional[int] = OMIT, + schema: typing.Optional[str] = OMIT, + status: typing.Optional[StatusC5AEnum] = OMIT, + stream_chunk_bytes: typing.Optional[int] = OMIT, + synchronizable: typing.Optional[bool] = OMIT, + title: typing.Optional[str] = OMIT, + token: typing.Optional[str] = OMIT, + traceback: typing.Optional[str] = OMIT, + use_blob_urls: typing.Optional[bool] = OMIT, + verify_tls: typing.Optional[bool] = OMIT, + volume: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> DatabricksImportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update a specific Databricks Files import storage connection. + + Parameters + ---------- + id : int + + catalog : typing.Optional[str] + UC catalog name + + description : typing.Optional[str] + Cloud storage description + + host : typing.Optional[str] + Databricks workspace base URL (https://...) + + last_sync : typing.Optional[dt.datetime] + Last sync finished time + + last_sync_count : typing.Optional[int] + Count of tasks synced last time + + last_sync_job : typing.Optional[str] + Last sync job ID + + meta : typing.Optional[typing.Optional[typing.Any]] + + prefix : typing.Optional[str] + Path under the volume + + presign : typing.Optional[bool] + Presign not supported; always proxied + + presign_ttl : typing.Optional[int] + Unused for Databricks; kept for compatibility + + project : typing.Optional[int] + A unique integer value identifying this project. + + recursive_scan : typing.Optional[bool] + Perform recursive scan + + regex_filter : typing.Optional[str] + Regex for filtering objects + + request_timeout_s : typing.Optional[int] + + schema : typing.Optional[str] + UC schema name + + status : typing.Optional[StatusC5AEnum] + + stream_chunk_bytes : typing.Optional[int] + + synchronizable : typing.Optional[bool] + + title : typing.Optional[str] + Cloud storage title + + token : typing.Optional[str] + + traceback : typing.Optional[str] + Traceback report for the last failed sync + + use_blob_urls : typing.Optional[bool] + Generate blob URLs in tasks + + verify_tls : typing.Optional[bool] + Verify TLS certificates + + volume : typing.Optional[str] + UC volume name + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksImportStorage + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.import_storage.databricks.update( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/storages/databricks/{jsonable_encoder(id)}", + method="PATCH", + json={ + "catalog": catalog, + "description": description, + "host": host, + "last_sync": last_sync, + "last_sync_count": last_sync_count, + "last_sync_job": last_sync_job, + "meta": meta, + "prefix": prefix, + "presign": presign, + "presign_ttl": presign_ttl, + "project": project, + "recursive_scan": recursive_scan, + "regex_filter": regex_filter, + "request_timeout_s": request_timeout_s, + "schema": schema, + "status": status, + "stream_chunk_bytes": stream_chunk_bytes, + "synchronizable": synchronizable, + "title": title, + "token": token, + "traceback": traceback, + "use_blob_urls": use_blob_urls, + "verify_tls": verify_tls, + "volume": volume, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksImportStorage, + construct_type( + type_=DatabricksImportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def sync( + self, id: int, *, request_options: typing.Optional[RequestOptions] = None + ) -> DatabricksImportStorage: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Sync tasks from a Databricks Files import storage. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + DatabricksImportStorage + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.import_storage.databricks.sync( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/storages/databricks/{jsonable_encoder(id)}/sync", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + DatabricksImportStorage, + construct_type( + type_=DatabricksImportStorage, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) diff --git a/src/label_studio_sdk/import_storage/gcs/client.py b/src/label_studio_sdk/import_storage/gcs/client.py index 08c63bdf8..faf08e42f 100644 --- a/src/label_studio_sdk/import_storage/gcs/client.py +++ b/src/label_studio_sdk/import_storage/gcs/client.py @@ -21,8 +21,8 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[GcsImportStorage]: """ @@ -30,12 +30,12 @@ def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -51,7 +51,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.import_storage.gcs.list() + client.import_storage.gcs.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/gcs/", @@ -540,8 +542,8 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[GcsImportStorage]: """ @@ -549,12 +551,12 @@ async def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -575,7 +577,9 @@ async def list( async def main() -> None: - await client.import_storage.gcs.list() + await client.import_storage.gcs.list( + project=1, + ) asyncio.run(main()) diff --git a/src/label_studio_sdk/import_storage/gcswif/client.py b/src/label_studio_sdk/import_storage/gcswif/client.py index 9fd522546..84e859b32 100644 --- a/src/label_studio_sdk/import_storage/gcswif/client.py +++ b/src/label_studio_sdk/import_storage/gcswif/client.py @@ -23,21 +23,27 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[GcswifImportStorage]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get list of all GCS import storage connections set up with WIF authentication. Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -53,7 +59,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.import_storage.gcswif.list() + client.import_storage.gcswif.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/gcswif/", @@ -97,6 +105,7 @@ def create( prefix: typing.Optional[str] = OMIT, presign: typing.Optional[bool] = OMIT, presign_ttl: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, regex_filter: typing.Optional[str] = OMIT, status: typing.Optional[StatusC5AEnum] = OMIT, synchronizable: typing.Optional[bool] = OMIT, @@ -106,6 +115,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> GcswifImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create GCS import storage with WIF. Parameters @@ -156,6 +171,9 @@ def create( presign_ttl : typing.Optional[int] Presigned URLs TTL (in minutes) + recursive_scan : typing.Optional[bool] + Perform recursive scan over the bucket content + regex_filter : typing.Optional[str] Cloud storage regex for filtering objects @@ -211,6 +229,7 @@ def create( "presign": presign, "presign_ttl": presign_ttl, "project": project, + "recursive_scan": recursive_scan, "regex_filter": regex_filter, "status": status, "synchronizable": synchronizable, @@ -254,6 +273,7 @@ def validate( prefix: typing.Optional[str] = OMIT, presign: typing.Optional[bool] = OMIT, presign_ttl: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, regex_filter: typing.Optional[str] = OMIT, status: typing.Optional[StatusC5AEnum] = OMIT, synchronizable: typing.Optional[bool] = OMIT, @@ -263,6 +283,12 @@ def validate( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific GCS import storage connection that was set up with WIF authentication. Parameters @@ -313,6 +339,9 @@ def validate( presign_ttl : typing.Optional[int] Presigned URLs TTL (in minutes) + recursive_scan : typing.Optional[bool] + Perform recursive scan over the bucket content + regex_filter : typing.Optional[str] Cloud storage regex for filtering objects @@ -367,6 +396,7 @@ def validate( "presign": presign, "presign_ttl": presign_ttl, "project": project, + "recursive_scan": recursive_scan, "regex_filter": regex_filter, "status": status, "synchronizable": synchronizable, @@ -387,6 +417,12 @@ def validate( def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> GcswifImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific GCS import storage connection that was set up with WIF. Parameters @@ -433,6 +469,12 @@ def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = Non def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific GCS import storage connection that was set up with WIF authentication. Parameters @@ -490,6 +532,7 @@ def update( presign: typing.Optional[bool] = OMIT, presign_ttl: typing.Optional[int] = OMIT, project: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, regex_filter: typing.Optional[str] = OMIT, status: typing.Optional[StatusC5AEnum] = OMIT, synchronizable: typing.Optional[bool] = OMIT, @@ -499,6 +542,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> GcswifImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific GCS import storage connection that was set up with WIF authentication. Parameters @@ -551,6 +600,9 @@ def update( project : typing.Optional[int] A unique integer value identifying this project. + recursive_scan : typing.Optional[bool] + Perform recursive scan over the bucket content + regex_filter : typing.Optional[str] Cloud storage regex for filtering objects @@ -606,6 +658,7 @@ def update( "presign": presign, "presign_ttl": presign_ttl, "project": project, + "recursive_scan": recursive_scan, "regex_filter": regex_filter, "status": status, "synchronizable": synchronizable, @@ -635,6 +688,12 @@ def update( def sync(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> GcswifImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an GCS import storage connection that was set up with WIF authentication. Parameters @@ -687,21 +746,27 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[GcswifImportStorage]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get list of all GCS import storage connections set up with WIF authentication. Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -722,7 +787,9 @@ async def list( async def main() -> None: - await client.import_storage.gcswif.list() + await client.import_storage.gcswif.list( + project=1, + ) asyncio.run(main()) @@ -769,6 +836,7 @@ async def create( prefix: typing.Optional[str] = OMIT, presign: typing.Optional[bool] = OMIT, presign_ttl: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, regex_filter: typing.Optional[str] = OMIT, status: typing.Optional[StatusC5AEnum] = OMIT, synchronizable: typing.Optional[bool] = OMIT, @@ -778,6 +846,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> GcswifImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create GCS import storage with WIF. Parameters @@ -828,6 +902,9 @@ async def create( presign_ttl : typing.Optional[int] Presigned URLs TTL (in minutes) + recursive_scan : typing.Optional[bool] + Perform recursive scan over the bucket content + regex_filter : typing.Optional[str] Cloud storage regex for filtering objects @@ -891,6 +968,7 @@ async def main() -> None: "presign": presign, "presign_ttl": presign_ttl, "project": project, + "recursive_scan": recursive_scan, "regex_filter": regex_filter, "status": status, "synchronizable": synchronizable, @@ -934,6 +1012,7 @@ async def validate( prefix: typing.Optional[str] = OMIT, presign: typing.Optional[bool] = OMIT, presign_ttl: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, regex_filter: typing.Optional[str] = OMIT, status: typing.Optional[StatusC5AEnum] = OMIT, synchronizable: typing.Optional[bool] = OMIT, @@ -943,6 +1022,12 @@ async def validate( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific GCS import storage connection that was set up with WIF authentication. Parameters @@ -993,6 +1078,9 @@ async def validate( presign_ttl : typing.Optional[int] Presigned URLs TTL (in minutes) + recursive_scan : typing.Optional[bool] + Perform recursive scan over the bucket content + regex_filter : typing.Optional[str] Cloud storage regex for filtering objects @@ -1055,6 +1143,7 @@ async def main() -> None: "presign": presign, "presign_ttl": presign_ttl, "project": project, + "recursive_scan": recursive_scan, "regex_filter": regex_filter, "status": status, "synchronizable": synchronizable, @@ -1075,6 +1164,12 @@ async def main() -> None: async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> GcswifImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific GCS import storage connection that was set up with WIF. Parameters @@ -1129,6 +1224,12 @@ async def main() -> None: async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific GCS import storage connection that was set up with WIF authentication. Parameters @@ -1194,6 +1295,7 @@ async def update( presign: typing.Optional[bool] = OMIT, presign_ttl: typing.Optional[int] = OMIT, project: typing.Optional[int] = OMIT, + recursive_scan: typing.Optional[bool] = OMIT, regex_filter: typing.Optional[str] = OMIT, status: typing.Optional[StatusC5AEnum] = OMIT, synchronizable: typing.Optional[bool] = OMIT, @@ -1203,6 +1305,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> GcswifImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific GCS import storage connection that was set up with WIF authentication. Parameters @@ -1255,6 +1363,9 @@ async def update( project : typing.Optional[int] A unique integer value identifying this project. + recursive_scan : typing.Optional[bool] + Perform recursive scan over the bucket content + regex_filter : typing.Optional[str] Cloud storage regex for filtering objects @@ -1318,6 +1429,7 @@ async def main() -> None: "presign": presign, "presign_ttl": presign_ttl, "project": project, + "recursive_scan": recursive_scan, "regex_filter": regex_filter, "status": status, "synchronizable": synchronizable, @@ -1347,6 +1459,12 @@ async def main() -> None: async def sync(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> GcswifImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an GCS import storage connection that was set up with WIF authentication. Parameters diff --git a/src/label_studio_sdk/import_storage/local/client.py b/src/label_studio_sdk/import_storage/local/client.py index 94bbd5ff6..863305372 100644 --- a/src/label_studio_sdk/import_storage/local/client.py +++ b/src/label_studio_sdk/import_storage/local/client.py @@ -21,8 +21,8 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[LocalFilesImportStorage]: """ @@ -30,12 +30,12 @@ def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -51,7 +51,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.import_storage.local.list() + client.import_storage.local.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/localfiles/", @@ -465,8 +467,8 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[LocalFilesImportStorage]: """ @@ -474,12 +476,12 @@ async def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -500,7 +502,9 @@ async def list( async def main() -> None: - await client.import_storage.local.list() + await client.import_storage.local.list( + project=1, + ) asyncio.run(main()) diff --git a/src/label_studio_sdk/import_storage/redis/client.py b/src/label_studio_sdk/import_storage/redis/client.py index c3d44bd64..b0b053a91 100644 --- a/src/label_studio_sdk/import_storage/redis/client.py +++ b/src/label_studio_sdk/import_storage/redis/client.py @@ -21,8 +21,8 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[RedisImportStorage]: """ @@ -30,12 +30,12 @@ def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -51,7 +51,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.import_storage.redis.list() + client.import_storage.redis.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/redis/", @@ -510,8 +512,8 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[RedisImportStorage]: """ @@ -519,12 +521,12 @@ async def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -545,7 +547,9 @@ async def list( async def main() -> None: - await client.import_storage.redis.list() + await client.import_storage.redis.list( + project=1, + ) asyncio.run(main()) diff --git a/src/label_studio_sdk/import_storage/s3/client.py b/src/label_studio_sdk/import_storage/s3/client.py index 045afea0a..5625c04f0 100644 --- a/src/label_studio_sdk/import_storage/s3/client.py +++ b/src/label_studio_sdk/import_storage/s3/client.py @@ -21,8 +21,8 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[S3ImportStorage]: """ @@ -30,12 +30,12 @@ def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -51,7 +51,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.import_storage.s3.list() + client.import_storage.s3.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/s3/", @@ -615,8 +617,8 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[S3ImportStorage]: """ @@ -624,12 +626,12 @@ async def list( Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -650,7 +652,9 @@ async def list( async def main() -> None: - await client.import_storage.s3.list() + await client.import_storage.s3.list( + project=1, + ) asyncio.run(main()) diff --git a/src/label_studio_sdk/import_storage/s3s/client.py b/src/label_studio_sdk/import_storage/s3s/client.py index 90706b349..ef530a84a 100644 --- a/src/label_studio_sdk/import_storage/s3s/client.py +++ b/src/label_studio_sdk/import_storage/s3s/client.py @@ -23,21 +23,27 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[LseS3ImportStorage]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get list of all S3 import storage connections set up with IAM role access. Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -53,7 +59,9 @@ def list( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.import_storage.s3s.list() + client.import_storage.s3s.list( + project=1, + ) """ _response = self._client_wrapper.httpx_client.request( "api/storages/s3s/", @@ -110,6 +118,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> LseS3ImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create S3 import storage with IAM role access. Parameters @@ -287,6 +301,12 @@ def validate( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific S3 import storage connection that was set up with IAM role access. Parameters @@ -427,6 +447,12 @@ def validate( def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> LseS3ImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific S3 import storage connection that was set up with IAM role access. Parameters @@ -473,6 +499,12 @@ def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = Non def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific S3 import storage connection that was set up with IAM role access. Parameters @@ -543,6 +575,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> LseS3ImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific S3 import storage connection that was set up with IAM role access. Parameters @@ -694,6 +732,12 @@ def update( def sync(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> LseS3ImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an S3 import storage connection that was set up with IAM role access. Parameters @@ -746,21 +790,27 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, + project: int, ordering: typing.Optional[str] = None, - project: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[LseS3ImportStorage]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get list of all S3 import storage connections set up with IAM role access. Parameters ---------- + project : int + Project ID + ordering : typing.Optional[str] Which field to use when ordering the results. - project : typing.Optional[int] - Project ID - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -781,7 +831,9 @@ async def list( async def main() -> None: - await client.import_storage.s3s.list() + await client.import_storage.s3s.list( + project=1, + ) asyncio.run(main()) @@ -841,6 +893,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> LseS3ImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create S3 import storage with IAM role access. Parameters @@ -1026,6 +1084,12 @@ async def validate( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate a specific S3 import storage connection that was set up with IAM role access. Parameters @@ -1174,6 +1238,12 @@ async def main() -> None: async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> LseS3ImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific S3 import storage connection that was set up with IAM role access. Parameters @@ -1228,6 +1298,12 @@ async def main() -> None: async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific S3 import storage connection that was set up with IAM role access. Parameters @@ -1306,6 +1382,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> LseS3ImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific S3 import storage connection that was set up with IAM role access. Parameters @@ -1465,6 +1547,12 @@ async def main() -> None: async def sync(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> LseS3ImportStorage: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Sync tasks from an S3 import storage connection that was set up with IAM role access. Parameters diff --git a/src/label_studio_sdk/ml/client.py b/src/label_studio_sdk/ml/client.py index bb079d7fb..374bcb41a 100644 --- a/src/label_studio_sdk/ml/client.py +++ b/src/label_studio_sdk/ml/client.py @@ -465,7 +465,13 @@ def predict_all_tasks( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ - Note: not available in the community edition of Label Studio. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create predictions for all tasks using a specific ML backend so that you can set up an active learning strategy based on the confidence or uncertainty scores associated with the predictions. Creating predictions requires a Label Studio ML backend set up and configured for your project. @@ -1130,7 +1136,13 @@ async def predict_all_tasks( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ - Note: not available in the community edition of Label Studio. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create predictions for all tasks using a specific ML backend so that you can set up an active learning strategy based on the confidence or uncertainty scores associated with the predictions. Creating predictions requires a Label Studio ML backend set up and configured for your project. diff --git a/src/label_studio_sdk/model_providers/client.py b/src/label_studio_sdk/model_providers/client.py index 8aea3731a..3a960e5f2 100644 --- a/src/label_studio_sdk/model_providers/client.py +++ b/src/label_studio_sdk/model_providers/client.py @@ -25,6 +25,12 @@ def list( self, *, ordering: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[ModelProviderConnection]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all model provider connections. Parameters @@ -89,6 +95,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> ModelProviderConnection: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new model provider connection. Parameters @@ -182,6 +194,12 @@ def list_model_provider_choices( self, *, request_options: typing.Optional[RequestOptions] = None ) -> ModelProvidersListModelProviderChoicesResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all possible model provider choices Parameters @@ -224,6 +242,12 @@ def list_model_provider_choices( def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> ModelProviderConnection: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific model provider connection. Parameters @@ -270,6 +294,12 @@ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = Non def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a model provider connection by ID Parameters @@ -326,6 +356,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> ModelProviderConnection: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific model provider connection by ID. Parameters @@ -431,6 +467,12 @@ async def list( self, *, ordering: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[ModelProviderConnection]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all model provider connections. Parameters @@ -503,6 +545,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> ModelProviderConnection: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new model provider connection. Parameters @@ -604,6 +652,12 @@ async def list_model_provider_choices( self, *, request_options: typing.Optional[RequestOptions] = None ) -> ModelProvidersListModelProviderChoicesResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all possible model provider choices Parameters @@ -654,6 +708,12 @@ async def main() -> None: async def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> ModelProviderConnection: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific model provider connection. Parameters @@ -708,6 +768,12 @@ async def main() -> None: async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a model provider connection by ID Parameters @@ -772,6 +838,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> ModelProviderConnection: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific model provider connection by ID. Parameters diff --git a/src/label_studio_sdk/organizations/__init__.py b/src/label_studio_sdk/organizations/__init__.py index faea629fa..0bf50d560 100644 --- a/src/label_studio_sdk/organizations/__init__.py +++ b/src/label_studio_sdk/organizations/__init__.py @@ -1,6 +1,5 @@ # This file was auto-generated by Fern from our API Definition. -from .types import PatchedDefaultRoleRequestCustomScriptsEditableBy -from . import invites, members +from . import invites, members, permissions -__all__ = ["PatchedDefaultRoleRequestCustomScriptsEditableBy", "invites", "members"] +__all__ = ["invites", "members", "permissions"] diff --git a/src/label_studio_sdk/organizations/client.py b/src/label_studio_sdk/organizations/client.py index eaebaacbc..f1a58564f 100644 --- a/src/label_studio_sdk/organizations/client.py +++ b/src/label_studio_sdk/organizations/client.py @@ -4,6 +4,7 @@ from ..core.client_wrapper import SyncClientWrapper from .invites.client import InvitesClient from .members.client import MembersClient +from .permissions.client import PermissionsClient from ..core.request_options import RequestOptions from ..types.organization_invite import OrganizationInvite from ..core.unchecked_base_model import construct_type @@ -16,15 +17,12 @@ from ..errors.forbidden_error import ForbiddenError from ..errors.not_found_error import NotFoundError import datetime as dt -from .types.patched_default_role_request_custom_scripts_editable_by import ( - PatchedDefaultRoleRequestCustomScriptsEditableBy, -) -from ..types.default_role_enum import DefaultRoleEnum +from ..types.role9e7enum import Role9E7Enum from ..types.default_role import DefaultRole -from ..core.serialization import convert_and_respect_annotation_metadata from ..core.client_wrapper import AsyncClientWrapper from .invites.client import AsyncInvitesClient from .members.client import AsyncMembersClient +from .permissions.client import AsyncPermissionsClient # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -35,6 +33,7 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper self.invites = InvitesClient(client_wrapper=self._client_wrapper) self.members = MembersClient(client_wrapper=self._client_wrapper) + self.permissions = PermissionsClient(client_wrapper=self._client_wrapper) def reset_token(self, *, request_options: typing.Optional[RequestOptions] = None) -> OrganizationInvite: """ @@ -182,7 +181,6 @@ def update( *, contact_info: typing.Optional[str] = OMIT, created_by: typing.Optional[int] = OMIT, - custom_scripts_editable_by: typing.Optional[str] = OMIT, custom_scripts_enabled: typing.Optional[bool] = OMIT, email_notification_settings: typing.Optional[typing.Optional[typing.Any]] = OMIT, embed_domains: typing.Optional[typing.Sequence[typing.Dict[str, str]]] = OMIT, @@ -192,7 +190,13 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> LseOrganization: """ - Update organization details including title, embed domains, and custom scripts settings. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update organization details including title, embed domains, and Plugins settings. Parameters ---------- @@ -202,8 +206,6 @@ def update( created_by : typing.Optional[int] - custom_scripts_editable_by : typing.Optional[str] - custom_scripts_enabled : typing.Optional[bool] email_notification_settings : typing.Optional[typing.Optional[typing.Any]] @@ -241,7 +243,6 @@ def update( json={ "contact_info": contact_info, "created_by": created_by, - "custom_scripts_editable_by": custom_scripts_editable_by, "custom_scripts_enabled": custom_scripts_enabled, "email_notification_settings": email_notification_settings, "embed_domains": embed_domains, @@ -304,9 +305,8 @@ def update_default_role( id: int, *, annotator_reviewer_firewall_enabled_at: typing.Optional[dt.datetime] = OMIT, - custom_scripts_editable_by: typing.Optional[PatchedDefaultRoleRequestCustomScriptsEditableBy] = OMIT, custom_scripts_enabled_at: typing.Optional[dt.datetime] = OMIT, - default_role: typing.Optional[DefaultRoleEnum] = OMIT, + default_role: typing.Optional[Role9E7Enum] = OMIT, email_notification_settings: typing.Optional[typing.Optional[typing.Any]] = OMIT, embed_domains: typing.Optional[typing.Optional[typing.Any]] = OMIT, embed_settings: typing.Optional[typing.Optional[typing.Any]] = OMIT, @@ -318,6 +318,12 @@ def update_default_role( request_options: typing.Optional[RequestOptions] = None, ) -> DefaultRole: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update the default role for members of a specific organization. Parameters @@ -327,16 +333,10 @@ def update_default_role( annotator_reviewer_firewall_enabled_at : typing.Optional[dt.datetime] Set to current time to restrict data sharing between annotators and reviewers in the label stream, review stream, and notifications (which will be disabled). In these settings, information about annotator and reviewer identity is suppressed in the UI. - custom_scripts_editable_by : typing.Optional[PatchedDefaultRoleRequestCustomScriptsEditableBy] - Set the minimum user role that can edit custom scripts in the UI. - - * `AD` - Administrator - * `MA` - Manager - custom_scripts_enabled_at : typing.Optional[dt.datetime] - Set to current time to enabled custom scripts for this organization. Can only be enabled if no organization members are active members of any other organizations; otherwise an error will be raised. If this occurs, contact the LEAP team for assistance with enabling custom scripts. + Set to current time to enable custom scripts (Plugins) for this organization. Can only be enabled if no organization members are active members of any other organizations; otherwise an error will be raised. If this occurs, contact the LEAP team for assistance with enabling custom scripts (Plugins). - default_role : typing.Optional[DefaultRoleEnum] + default_role : typing.Optional[Role9E7Enum] Default membership role for invited users * `OW` - Owner @@ -391,11 +391,6 @@ def update_default_role( method="PATCH", json={ "annotator_reviewer_firewall_enabled_at": annotator_reviewer_firewall_enabled_at, - "custom_scripts_editable_by": convert_and_respect_annotation_metadata( - object_=custom_scripts_editable_by, - annotation=PatchedDefaultRoleRequestCustomScriptsEditableBy, - direction="write", - ), "custom_scripts_enabled_at": custom_scripts_enabled_at, "default_role": default_role, "email_notification_settings": email_notification_settings, @@ -433,6 +428,7 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper self.invites = AsyncInvitesClient(client_wrapper=self._client_wrapper) self.members = AsyncMembersClient(client_wrapper=self._client_wrapper) + self.permissions = AsyncPermissionsClient(client_wrapper=self._client_wrapper) async def reset_token(self, *, request_options: typing.Optional[RequestOptions] = None) -> OrganizationInvite: """ @@ -604,7 +600,6 @@ async def update( *, contact_info: typing.Optional[str] = OMIT, created_by: typing.Optional[int] = OMIT, - custom_scripts_editable_by: typing.Optional[str] = OMIT, custom_scripts_enabled: typing.Optional[bool] = OMIT, email_notification_settings: typing.Optional[typing.Optional[typing.Any]] = OMIT, embed_domains: typing.Optional[typing.Sequence[typing.Dict[str, str]]] = OMIT, @@ -614,7 +609,13 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> LseOrganization: """ - Update organization details including title, embed domains, and custom scripts settings. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Update organization details including title, embed domains, and Plugins settings. Parameters ---------- @@ -624,8 +625,6 @@ async def update( created_by : typing.Optional[int] - custom_scripts_editable_by : typing.Optional[str] - custom_scripts_enabled : typing.Optional[bool] email_notification_settings : typing.Optional[typing.Optional[typing.Any]] @@ -671,7 +670,6 @@ async def main() -> None: json={ "contact_info": contact_info, "created_by": created_by, - "custom_scripts_editable_by": custom_scripts_editable_by, "custom_scripts_enabled": custom_scripts_enabled, "email_notification_settings": email_notification_settings, "embed_domains": embed_domains, @@ -734,9 +732,8 @@ async def update_default_role( id: int, *, annotator_reviewer_firewall_enabled_at: typing.Optional[dt.datetime] = OMIT, - custom_scripts_editable_by: typing.Optional[PatchedDefaultRoleRequestCustomScriptsEditableBy] = OMIT, custom_scripts_enabled_at: typing.Optional[dt.datetime] = OMIT, - default_role: typing.Optional[DefaultRoleEnum] = OMIT, + default_role: typing.Optional[Role9E7Enum] = OMIT, email_notification_settings: typing.Optional[typing.Optional[typing.Any]] = OMIT, embed_domains: typing.Optional[typing.Optional[typing.Any]] = OMIT, embed_settings: typing.Optional[typing.Optional[typing.Any]] = OMIT, @@ -748,6 +745,12 @@ async def update_default_role( request_options: typing.Optional[RequestOptions] = None, ) -> DefaultRole: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update the default role for members of a specific organization. Parameters @@ -757,16 +760,10 @@ async def update_default_role( annotator_reviewer_firewall_enabled_at : typing.Optional[dt.datetime] Set to current time to restrict data sharing between annotators and reviewers in the label stream, review stream, and notifications (which will be disabled). In these settings, information about annotator and reviewer identity is suppressed in the UI. - custom_scripts_editable_by : typing.Optional[PatchedDefaultRoleRequestCustomScriptsEditableBy] - Set the minimum user role that can edit custom scripts in the UI. - - * `AD` - Administrator - * `MA` - Manager - custom_scripts_enabled_at : typing.Optional[dt.datetime] - Set to current time to enabled custom scripts for this organization. Can only be enabled if no organization members are active members of any other organizations; otherwise an error will be raised. If this occurs, contact the LEAP team for assistance with enabling custom scripts. + Set to current time to enable custom scripts (Plugins) for this organization. Can only be enabled if no organization members are active members of any other organizations; otherwise an error will be raised. If this occurs, contact the LEAP team for assistance with enabling custom scripts (Plugins). - default_role : typing.Optional[DefaultRoleEnum] + default_role : typing.Optional[Role9E7Enum] Default membership role for invited users * `OW` - Owner @@ -829,11 +826,6 @@ async def main() -> None: method="PATCH", json={ "annotator_reviewer_firewall_enabled_at": annotator_reviewer_firewall_enabled_at, - "custom_scripts_editable_by": convert_and_respect_annotation_metadata( - object_=custom_scripts_editable_by, - annotation=PatchedDefaultRoleRequestCustomScriptsEditableBy, - direction="write", - ), "custom_scripts_enabled_at": custom_scripts_enabled_at, "default_role": default_role, "email_notification_settings": email_notification_settings, diff --git a/src/label_studio_sdk/organizations/invites/client.py b/src/label_studio_sdk/organizations/invites/client.py index e70cf89b4..2d75bd6d1 100644 --- a/src/label_studio_sdk/organizations/invites/client.py +++ b/src/label_studio_sdk/organizations/invites/client.py @@ -8,6 +8,7 @@ from ...errors.forbidden_error import ForbiddenError from json.decoder import JSONDecodeError from ...core.api_error import ApiError +from ...types.role9e7enum import Role9E7Enum from ...core.client_wrapper import AsyncClientWrapper # this is used as the default value for optional parameters @@ -72,6 +73,12 @@ def get_invite_link(self, *, request_options: typing.Optional[RequestOptions] = def revoke_invite(self, *, email: str, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Revoke invite to organization Parameters @@ -117,16 +124,32 @@ def revoke_invite(self, *, email: str, request_options: typing.Optional[RequestO raise ApiError(status_code=_response.status_code, body=_response_json) def send_email( - self, *, emails: typing.Sequence[str], role: str, request_options: typing.Optional[RequestOptions] = None + self, + *, + emails: typing.Sequence[str], + role: Role9E7Enum, + projects: typing.Optional[typing.Sequence[int]] = OMIT, + workspaces: typing.Optional[typing.Sequence[int]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Send email with invite to organization Parameters ---------- emails : typing.Sequence[str] - role : str + role : Role9E7Enum + + projects : typing.Optional[typing.Sequence[int]] + + workspaces : typing.Optional[typing.Sequence[int]] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -144,7 +167,7 @@ def send_email( ) client.organizations.invites.send_email( emails=["emails"], - role="role", + role="OW", ) """ _response = self._client_wrapper.httpx_client.request( @@ -152,7 +175,9 @@ def send_email( method="POST", json={ "emails": emails, + "projects": projects, "role": role, + "workspaces": workspaces, }, headers={ "content-type": "application/json", @@ -245,6 +270,12 @@ async def main() -> None: async def revoke_invite(self, *, email: str, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Revoke invite to organization Parameters @@ -298,16 +329,32 @@ async def main() -> None: raise ApiError(status_code=_response.status_code, body=_response_json) async def send_email( - self, *, emails: typing.Sequence[str], role: str, request_options: typing.Optional[RequestOptions] = None + self, + *, + emails: typing.Sequence[str], + role: Role9E7Enum, + projects: typing.Optional[typing.Sequence[int]] = OMIT, + workspaces: typing.Optional[typing.Sequence[int]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Send email with invite to organization Parameters ---------- emails : typing.Sequence[str] - role : str + role : Role9E7Enum + + projects : typing.Optional[typing.Sequence[int]] + + workspaces : typing.Optional[typing.Sequence[int]] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -330,7 +377,7 @@ async def send_email( async def main() -> None: await client.organizations.invites.send_email( emails=["emails"], - role="role", + role="OW", ) @@ -341,7 +388,9 @@ async def main() -> None: method="POST", json={ "emails": emails, + "projects": projects, "role": role, + "workspaces": workspaces, }, headers={ "content-type": "application/json", diff --git a/src/label_studio_sdk/organizations/members/client.py b/src/label_studio_sdk/organizations/members/client.py index f89c51114..35020fe5a 100644 --- a/src/label_studio_sdk/organizations/members/client.py +++ b/src/label_studio_sdk/organizations/members/client.py @@ -37,6 +37,12 @@ def list( request_options: typing.Optional[RequestOptions] = None, ) -> PaginatedLseOrganizationMemberListList: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a list of all users and roles in a specific organization. Parameters @@ -117,6 +123,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> LseOrganizationMemberList: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update organization membership or role for a specific user ID. **User Rotation Best Practices for API Usage** @@ -329,6 +341,12 @@ async def list( request_options: typing.Optional[RequestOptions] = None, ) -> PaginatedLseOrganizationMemberListList: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a list of all users and roles in a specific organization. Parameters @@ -417,6 +435,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> LseOrganizationMemberList: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update organization membership or role for a specific user ID. **User Rotation Best Practices for API Usage** diff --git a/src/label_studio_sdk/organizations/permissions/__init__.py b/src/label_studio_sdk/organizations/permissions/__init__.py new file mode 100644 index 000000000..f3ea2659b --- /dev/null +++ b/src/label_studio_sdk/organizations/permissions/__init__.py @@ -0,0 +1,2 @@ +# This file was auto-generated by Fern from our API Definition. + diff --git a/src/label_studio_sdk/organizations/permissions/client.py b/src/label_studio_sdk/organizations/permissions/client.py new file mode 100644 index 000000000..288181e95 --- /dev/null +++ b/src/label_studio_sdk/organizations/permissions/client.py @@ -0,0 +1,1221 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from ...core.client_wrapper import SyncClientWrapper +from ...core.request_options import RequestOptions +from ...types.organization_permission import OrganizationPermission +from ...core.jsonable_encoder import jsonable_encoder +from ...core.unchecked_base_model import construct_type +from json.decoder import JSONDecodeError +from ...core.api_error import ApiError +from ...types.role9e7enum import Role9E7Enum +from ...errors.bad_request_error import BadRequestError +from ...errors.forbidden_error import ForbiddenError +from ...types.configurable_permission_option import ConfigurablePermissionOption +from ...errors.not_found_error import NotFoundError +from ...core.client_wrapper import AsyncClientWrapper + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class PermissionsClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def list( + self, id: int, *, ordering: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None + ) -> typing.List[OrganizationPermission]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all organization-level permission overrides for a given organization. + + Parameters + ---------- + id : int + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[OrganizationPermission] + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.organizations.permissions.list( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/organizations/{jsonable_encoder(id)}/permissions", + method="GET", + params={ + "ordering": ordering, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[OrganizationPermission], + construct_type( + type_=typing.List[OrganizationPermission], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def create( + self, + id: int, + *, + permission: str, + roles: typing.Optional[typing.Sequence[Role9E7Enum]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> OrganizationPermission: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new organization-level permission override for a given organization. + + Parameters + ---------- + id : int + + permission : str + + roles : typing.Optional[typing.Sequence[Role9E7Enum]] + Explicit roles that have this permission within the organization. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + OrganizationPermission + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.organizations.permissions.create( + id=1, + permission="permission", + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/organizations/{jsonable_encoder(id)}/permissions", + method="POST", + json={ + "permission": permission, + "roles": roles, + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + OrganizationPermission, + construct_type( + type_=OrganizationPermission, # type: ignore + object_=_response.json(), + ), + ) + if _response.status_code == 400: + raise BadRequestError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 403: + raise ForbiddenError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def get_options( + self, id: int, *, ordering: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None + ) -> typing.List[ConfigurablePermissionOption]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve the list of configurable permission options (label, tooltip, default role and allowed roles). + + Parameters + ---------- + id : int + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[ConfigurablePermissionOption] + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.organizations.permissions.get_options( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/organizations/{jsonable_encoder(id)}/permissions/options", + method="GET", + params={ + "ordering": ordering, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[ConfigurablePermissionOption], + construct_type( + type_=typing.List[ConfigurablePermissionOption], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def get( + self, id: int, permission: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> OrganizationPermission: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve the organization-level permission override for a given permission key. + + Parameters + ---------- + id : int + + permission : str + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + OrganizationPermission + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.organizations.permissions.get( + id=1, + permission="permission", + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/organizations/{jsonable_encoder(id)}/permissions/{jsonable_encoder(permission)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + OrganizationPermission, + construct_type( + type_=OrganizationPermission, # type: ignore + object_=_response.json(), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 404: + raise NotFoundError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def replace( + self, + id: int, + permission_: str, + *, + permission: str, + roles: typing.Optional[typing.Sequence[Role9E7Enum]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> OrganizationPermission: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Replace the organization-level permission override for a given permission key. + + Parameters + ---------- + id : int + A unique integer value identifying this organization. + + permission_ : str + Permission key to update within the organization. + + permission : str + + roles : typing.Optional[typing.Sequence[Role9E7Enum]] + Explicit roles that have this permission within the organization. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + OrganizationPermission + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.organizations.permissions.replace( + id=1, + permission_="permission", + permission="permission", + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/organizations/{jsonable_encoder(id)}/permissions/{jsonable_encoder(permission_)}", + method="PUT", + json={ + "permission": permission, + "roles": roles, + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + OrganizationPermission, + construct_type( + type_=OrganizationPermission, # type: ignore + object_=_response.json(), + ), + ) + if _response.status_code == 400: + raise BadRequestError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 403: + raise ForbiddenError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 404: + raise NotFoundError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def delete(self, id: int, permission: str, *, request_options: typing.Optional[RequestOptions] = None) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete the organization-level permission override for a given permission key. + + Parameters + ---------- + id : int + + permission : str + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.organizations.permissions.delete( + id=1, + permission="permission", + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/organizations/{jsonable_encoder(id)}/permissions/{jsonable_encoder(permission)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return + if _response.status_code == 403: + raise ForbiddenError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 404: + raise NotFoundError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def update( + self, + id: int, + permission: str, + *, + patched_organization_permission_request_permission: typing.Optional[str] = OMIT, + roles: typing.Optional[typing.Sequence[Role9E7Enum]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> OrganizationPermission: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Partially update the organization-level permission override for a given permission key. + + Parameters + ---------- + id : int + + permission : str + + patched_organization_permission_request_permission : typing.Optional[str] + + roles : typing.Optional[typing.Sequence[Role9E7Enum]] + Explicit roles that have this permission within the organization. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + OrganizationPermission + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.organizations.permissions.update( + id=1, + permission="permission", + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/organizations/{jsonable_encoder(id)}/permissions/{jsonable_encoder(permission)}", + method="PATCH", + json={ + "permission": patched_organization_permission_request_permission, + "roles": roles, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + OrganizationPermission, + construct_type( + type_=OrganizationPermission, # type: ignore + object_=_response.json(), + ), + ) + if _response.status_code == 400: + raise BadRequestError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 403: + raise ForbiddenError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 404: + raise NotFoundError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + +class AsyncPermissionsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def list( + self, id: int, *, ordering: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None + ) -> typing.List[OrganizationPermission]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ List all organization-level permission overrides for a given organization. + + Parameters + ---------- + id : int + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[OrganizationPermission] + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.organizations.permissions.list( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/organizations/{jsonable_encoder(id)}/permissions", + method="GET", + params={ + "ordering": ordering, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[OrganizationPermission], + construct_type( + type_=typing.List[OrganizationPermission], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def create( + self, + id: int, + *, + permission: str, + roles: typing.Optional[typing.Sequence[Role9E7Enum]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> OrganizationPermission: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Create a new organization-level permission override for a given organization. + + Parameters + ---------- + id : int + + permission : str + + roles : typing.Optional[typing.Sequence[Role9E7Enum]] + Explicit roles that have this permission within the organization. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + OrganizationPermission + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.organizations.permissions.create( + id=1, + permission="permission", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/organizations/{jsonable_encoder(id)}/permissions", + method="POST", + json={ + "permission": permission, + "roles": roles, + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + OrganizationPermission, + construct_type( + type_=OrganizationPermission, # type: ignore + object_=_response.json(), + ), + ) + if _response.status_code == 400: + raise BadRequestError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 403: + raise ForbiddenError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def get_options( + self, id: int, *, ordering: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None + ) -> typing.List[ConfigurablePermissionOption]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve the list of configurable permission options (label, tooltip, default role and allowed roles). + + Parameters + ---------- + id : int + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[ConfigurablePermissionOption] + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.organizations.permissions.get_options( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/organizations/{jsonable_encoder(id)}/permissions/options", + method="GET", + params={ + "ordering": ordering, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[ConfigurablePermissionOption], + construct_type( + type_=typing.List[ConfigurablePermissionOption], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def get( + self, id: int, permission: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> OrganizationPermission: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve the organization-level permission override for a given permission key. + + Parameters + ---------- + id : int + + permission : str + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + OrganizationPermission + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.organizations.permissions.get( + id=1, + permission="permission", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/organizations/{jsonable_encoder(id)}/permissions/{jsonable_encoder(permission)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + OrganizationPermission, + construct_type( + type_=OrganizationPermission, # type: ignore + object_=_response.json(), + ), + ) + if _response.status_code == 403: + raise ForbiddenError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 404: + raise NotFoundError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def replace( + self, + id: int, + permission_: str, + *, + permission: str, + roles: typing.Optional[typing.Sequence[Role9E7Enum]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> OrganizationPermission: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Replace the organization-level permission override for a given permission key. + + Parameters + ---------- + id : int + A unique integer value identifying this organization. + + permission_ : str + Permission key to update within the organization. + + permission : str + + roles : typing.Optional[typing.Sequence[Role9E7Enum]] + Explicit roles that have this permission within the organization. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + OrganizationPermission + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.organizations.permissions.replace( + id=1, + permission_="permission", + permission="permission", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/organizations/{jsonable_encoder(id)}/permissions/{jsonable_encoder(permission_)}", + method="PUT", + json={ + "permission": permission, + "roles": roles, + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + OrganizationPermission, + construct_type( + type_=OrganizationPermission, # type: ignore + object_=_response.json(), + ), + ) + if _response.status_code == 400: + raise BadRequestError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 403: + raise ForbiddenError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 404: + raise NotFoundError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def delete( + self, id: int, permission: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Delete the organization-level permission override for a given permission key. + + Parameters + ---------- + id : int + + permission : str + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.organizations.permissions.delete( + id=1, + permission="permission", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/organizations/{jsonable_encoder(id)}/permissions/{jsonable_encoder(permission)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return + if _response.status_code == 403: + raise ForbiddenError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 404: + raise NotFoundError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def update( + self, + id: int, + permission: str, + *, + patched_organization_permission_request_permission: typing.Optional[str] = OMIT, + roles: typing.Optional[typing.Sequence[Role9E7Enum]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> OrganizationPermission: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Partially update the organization-level permission override for a given permission key. + + Parameters + ---------- + id : int + + permission : str + + patched_organization_permission_request_permission : typing.Optional[str] + + roles : typing.Optional[typing.Sequence[Role9E7Enum]] + Explicit roles that have this permission within the organization. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + OrganizationPermission + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.organizations.permissions.update( + id=1, + permission="permission", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/organizations/{jsonable_encoder(id)}/permissions/{jsonable_encoder(permission)}", + method="PATCH", + json={ + "permission": patched_organization_permission_request_permission, + "roles": roles, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + OrganizationPermission, + construct_type( + type_=OrganizationPermission, # type: ignore + object_=_response.json(), + ), + ) + if _response.status_code == 400: + raise BadRequestError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 403: + raise ForbiddenError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + if _response.status_code == 404: + raise NotFoundError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) diff --git a/src/label_studio_sdk/organizations/types/__init__.py b/src/label_studio_sdk/organizations/types/__init__.py deleted file mode 100644 index 885594eaf..000000000 --- a/src/label_studio_sdk/organizations/types/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -from .patched_default_role_request_custom_scripts_editable_by import PatchedDefaultRoleRequestCustomScriptsEditableBy - -__all__ = ["PatchedDefaultRoleRequestCustomScriptsEditableBy"] diff --git a/src/label_studio_sdk/organizations/types/patched_default_role_request_custom_scripts_editable_by.py b/src/label_studio_sdk/organizations/types/patched_default_role_request_custom_scripts_editable_by.py deleted file mode 100644 index 2008fb24f..000000000 --- a/src/label_studio_sdk/organizations/types/patched_default_role_request_custom_scripts_editable_by.py +++ /dev/null @@ -1,7 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing -from ...types.custom_scripts_editable_by_enum import CustomScriptsEditableByEnum -from ...types.null_enum import NullEnum - -PatchedDefaultRoleRequestCustomScriptsEditableBy = typing.Union[CustomScriptsEditableByEnum, NullEnum] diff --git a/src/label_studio_sdk/project_templates/client.py b/src/label_studio_sdk/project_templates/client.py index 902160f37..c51b00f83 100644 --- a/src/label_studio_sdk/project_templates/client.py +++ b/src/label_studio_sdk/project_templates/client.py @@ -23,6 +23,12 @@ def list( self, *, ordering: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[ProjectTemplate]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all project templates for an organization. Parameters @@ -87,6 +93,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> ProjectTemplate: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a project template for an organization. Parameters @@ -100,7 +112,7 @@ def create( created_by : typing.Optional[int] custom_script : typing.Optional[str] - custom script for projects created from this template + custom script (Plugin) for projects created from this template description : typing.Optional[str] @@ -173,6 +185,12 @@ def create( def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> ProjectTemplate: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific project template by ID for an organization. Parameters @@ -219,6 +237,12 @@ def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = Non def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific project template by ID for an organization. Parameters @@ -275,6 +299,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> ProjectTemplate: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update the details of a specific project template by ID for an organization. Parameters @@ -286,7 +316,7 @@ def update( created_by : typing.Optional[int] custom_script : typing.Optional[str] - custom script for projects created from this template + custom script (Plugin) for projects created from this template description : typing.Optional[str] @@ -373,6 +403,12 @@ def create_project_from_template( request_options: typing.Optional[RequestOptions] = None, ) -> LseProject: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a project from a specific project template by ID for an organization. Parameters @@ -446,6 +482,12 @@ async def list( self, *, ordering: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[ProjectTemplate]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all project templates for an organization. Parameters @@ -518,6 +560,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> ProjectTemplate: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a project template for an organization. Parameters @@ -531,7 +579,7 @@ async def create( created_by : typing.Optional[int] custom_script : typing.Optional[str] - custom script for projects created from this template + custom script (Plugin) for projects created from this template description : typing.Optional[str] @@ -612,6 +660,12 @@ async def main() -> None: async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> ProjectTemplate: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific project template by ID for an organization. Parameters @@ -666,6 +720,12 @@ async def main() -> None: async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific project template by ID for an organization. Parameters @@ -730,6 +790,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> ProjectTemplate: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update the details of a specific project template by ID for an organization. Parameters @@ -741,7 +807,7 @@ async def update( created_by : typing.Optional[int] custom_script : typing.Optional[str] - custom script for projects created from this template + custom script (Plugin) for projects created from this template description : typing.Optional[str] @@ -836,6 +902,12 @@ async def create_project_from_template( request_options: typing.Optional[RequestOptions] = None, ) -> LseProject: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a project from a specific project template by ID for an organization. Parameters diff --git a/src/label_studio_sdk/projects/__init__.py b/src/label_studio_sdk/projects/__init__.py index e9a3bbac5..50e9cc7ac 100644 --- a/src/label_studio_sdk/projects/__init__.py +++ b/src/label_studio_sdk/projects/__init__.py @@ -6,10 +6,10 @@ PatchedLseProjectUpdateRequestSampling, PatchedLseProjectUpdateRequestSkipQueue, ProjectsDuplicateResponse, + ProjectsImportPredictionsResponse, ProjectsImportTasksResponse, - ProjectsListRequestFilter, ) -from . import assignments, exports, members, metrics, pauses, stats +from . import assignments, exports, members, metrics, pauses, roles, stats from .assignments import ( AssignmentsAssignRequestType, AssignmentsBulkAssignRequestFilters, @@ -28,13 +28,38 @@ ) from .exports import ExportsConvertResponse from .stats import ( + StatsAgreementAnnotatorResponse, + StatsAgreementAnnotatorsResponse, + StatsDataFiltersResponse, + StatsDataFiltersResponseUserFilters, + StatsDataFiltersResponseUserFiltersStatsItem, + StatsFinishedTasksResponse, StatsIaaResponse, StatsIaaResponseCommonTasks, StatsIaaResponseIaa, StatsIaaResponseStd, + StatsLeadTimeResponse, + StatsLeadTimeResponseLeadTimeStatsItem, + StatsModelVersionAnnotatorAgreementResponse, + StatsModelVersionGroundTruthAgreementResponse, + StatsModelVersionPredictionAgreementResponse, StatsTotalAgreementResponse, StatsTotalAgreementResponseOne, StatsTotalAgreementResponseZero, + StatsUserGroundTruthAgreementResponse, + StatsUserGroundTruthAgreementResponseAgreement, + StatsUserPredictionAgreementResponse, + StatsUserPredictionAgreementResponseAveragePredictionAgreementPerUser, + StatsUserReviewScoreResponse, + StatsUserReviewScoreResponsePerformanceScore, + StatsUserReviewScoreResponseReviewScore, + StatsUsersGroundTruthAgreementResponse, + StatsUsersGroundTruthAgreementResponseAgreementValue, + StatsUsersPredictionAgreementResponse, + StatsUsersPredictionAgreementResponseAgreementValue, + StatsUsersReviewScoreResponse, + StatsUsersReviewScoreResponsePerformanceScoreValue, + StatsUsersReviewScoreResponseReviewScoreValue, ) __all__ = [ @@ -58,19 +83,45 @@ "PatchedLseProjectUpdateRequestSampling", "PatchedLseProjectUpdateRequestSkipQueue", "ProjectsDuplicateResponse", + "ProjectsImportPredictionsResponse", "ProjectsImportTasksResponse", - "ProjectsListRequestFilter", + "StatsAgreementAnnotatorResponse", + "StatsAgreementAnnotatorsResponse", + "StatsDataFiltersResponse", + "StatsDataFiltersResponseUserFilters", + "StatsDataFiltersResponseUserFiltersStatsItem", + "StatsFinishedTasksResponse", "StatsIaaResponse", "StatsIaaResponseCommonTasks", "StatsIaaResponseIaa", "StatsIaaResponseStd", + "StatsLeadTimeResponse", + "StatsLeadTimeResponseLeadTimeStatsItem", + "StatsModelVersionAnnotatorAgreementResponse", + "StatsModelVersionGroundTruthAgreementResponse", + "StatsModelVersionPredictionAgreementResponse", "StatsTotalAgreementResponse", "StatsTotalAgreementResponseOne", "StatsTotalAgreementResponseZero", + "StatsUserGroundTruthAgreementResponse", + "StatsUserGroundTruthAgreementResponseAgreement", + "StatsUserPredictionAgreementResponse", + "StatsUserPredictionAgreementResponseAveragePredictionAgreementPerUser", + "StatsUserReviewScoreResponse", + "StatsUserReviewScoreResponsePerformanceScore", + "StatsUserReviewScoreResponseReviewScore", + "StatsUsersGroundTruthAgreementResponse", + "StatsUsersGroundTruthAgreementResponseAgreementValue", + "StatsUsersPredictionAgreementResponse", + "StatsUsersPredictionAgreementResponseAgreementValue", + "StatsUsersReviewScoreResponse", + "StatsUsersReviewScoreResponsePerformanceScoreValue", + "StatsUsersReviewScoreResponseReviewScoreValue", "assignments", "exports", "members", "metrics", "pauses", + "roles", "stats", ] diff --git a/src/label_studio_sdk/projects/assignments/client.py b/src/label_studio_sdk/projects/assignments/client.py index 87c84c1d1..360d74b12 100644 --- a/src/label_studio_sdk/projects/assignments/client.py +++ b/src/label_studio_sdk/projects/assignments/client.py @@ -38,6 +38,12 @@ def bulk_assign( request_options: typing.Optional[RequestOptions] = None, ) -> AssignmentsBulkAssignResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Assign multiple users to a collection of tasks within a specific project. Parameters @@ -130,6 +136,12 @@ def list( self, id: int, task_pk: int, *, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[TaskAssignment]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a list of tasks and assignees for those tasks for a specific project. Parameters @@ -189,6 +201,12 @@ def assign( request_options: typing.Optional[RequestOptions] = None, ) -> TaskAssignment: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Assign a user to a task in a specific project. Parameters @@ -264,6 +282,12 @@ def delete( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Remove assignees for a task within a specific project. Parameters @@ -326,6 +350,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> TaskAssignment: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update the assignee for a task in a specific project. Parameters @@ -407,6 +437,12 @@ async def bulk_assign( request_options: typing.Optional[RequestOptions] = None, ) -> AssignmentsBulkAssignResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Assign multiple users to a collection of tasks within a specific project. Parameters @@ -507,6 +543,12 @@ async def list( self, id: int, task_pk: int, *, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[TaskAssignment]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a list of tasks and assignees for those tasks for a specific project. Parameters @@ -574,6 +616,12 @@ async def assign( request_options: typing.Optional[RequestOptions] = None, ) -> TaskAssignment: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Assign a user to a task in a specific project. Parameters @@ -657,6 +705,12 @@ async def delete( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Remove assignees for a task within a specific project. Parameters @@ -727,6 +781,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> TaskAssignment: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update the assignee for a task in a specific project. Parameters diff --git a/src/label_studio_sdk/projects/client.py b/src/label_studio_sdk/projects/client.py index d26c2207c..25c725b9e 100644 --- a/src/label_studio_sdk/projects/client.py +++ b/src/label_studio_sdk/projects/client.py @@ -2,13 +2,13 @@ import typing from ..core.client_wrapper import SyncClientWrapper +from .roles.client import RolesClient from .exports.client import ExportsClient from .members.client import MembersClient from .metrics.client import MetricsClient from .stats.client import StatsClient from .assignments.client import AssignmentsClient from .pauses.client import PausesClient -from .types.projects_list_request_filter import ProjectsListRequestFilter from ..core.request_options import RequestOptions from ..core.pagination import SyncPager from ..types.all_roles_project_list import AllRolesProjectList @@ -22,20 +22,25 @@ from .types.lse_project_create_request_skip_queue import LseProjectCreateRequestSkipQueue from ..types.lse_project_create import LseProjectCreate from ..core.serialization import convert_and_respect_annotation_metadata -from ..types.project import Project +from ..types.paginated_lse_project_counts_list import PaginatedLseProjectCountsList +from ..types.lse_project_response import LseProjectResponse from ..core.jsonable_encoder import jsonable_encoder from ..types.assignment_settings_request import AssignmentSettingsRequest from ..types.review_settings_request import ReviewSettingsRequest from .types.patched_lse_project_update_request_sampling import PatchedLseProjectUpdateRequestSampling from .types.patched_lse_project_update_request_skip_queue import PatchedLseProjectUpdateRequestSkipQueue from ..types.lse_project_update import LseProjectUpdate +from ..types.user_simple import UserSimple from ..types.mode_enum import ModeEnum from .types.projects_duplicate_response import ProjectsDuplicateResponse from ..types.import_api_request import ImportApiRequest from .types.projects_import_tasks_response import ProjectsImportTasksResponse from ..errors.bad_request_error import BadRequestError +from ..types.prediction_request import PredictionRequest +from .types.projects_import_predictions_response import ProjectsImportPredictionsResponse from ..types.project_label_config import ProjectLabelConfig from ..core.client_wrapper import AsyncClientWrapper +from .roles.client import AsyncRolesClient from .exports.client import AsyncExportsClient from .members.client import AsyncMembersClient from .metrics.client import AsyncMetricsClient @@ -51,6 +56,7 @@ class ProjectsClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper + self.roles = RolesClient(client_wrapper=self._client_wrapper) self.exports = ExportsClient(client_wrapper=self._client_wrapper) self.members = MembersClient(client_wrapper=self._client_wrapper) self.metrics = MetricsClient(client_wrapper=self._client_wrapper) @@ -61,15 +67,16 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def list( self, *, - filter: typing.Optional[ProjectsListRequestFilter] = None, + filter: typing.Optional[str] = None, ids: typing.Optional[str] = None, include: typing.Optional[str] = None, members_limit: typing.Optional[int] = None, ordering: typing.Optional[str] = None, page: typing.Optional[int] = None, page_size: typing.Optional[int] = None, + search: typing.Optional[str] = None, title: typing.Optional[str] = None, - workspaces: typing.Optional[int] = None, + workspaces: typing.Optional[float] = None, request_options: typing.Optional[RequestOptions] = None, ) -> SyncPager[AllRolesProjectList]: """ @@ -77,17 +84,17 @@ def list( Parameters ---------- - filter : typing.Optional[ProjectsListRequestFilter] + filter : typing.Optional[str] Filter projects by pinned status. Use 'pinned_only' to return only pinned projects, 'exclude_pinned' to return only non-pinned projects, or 'all' to return all projects. ids : typing.Optional[str] - ids + Filter id by in list include : typing.Optional[str] Comma-separated list of count fields to include in the response to optimize performance. Available fields: task_number, finished_task_number, total_predictions_number, total_annotations_number, num_tasks_with_annotations, useful_annotation_number, ground_truth_number, skipped_annotations_number. If not specified, all count fields are included. members_limit : typing.Optional[int] - Maximum number of members to return. + Maximum number of members to return ordering : typing.Optional[str] Which field to use when ordering the results. @@ -98,11 +105,14 @@ def list( page_size : typing.Optional[int] Number of results to return per page. + search : typing.Optional[str] + Search term for project title and description + title : typing.Optional[str] - title + Filter title by contains (case-insensitive) - workspaces : typing.Optional[int] - workspaces + workspaces : typing.Optional[float] + Filter workspaces by exact match request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -138,6 +148,7 @@ def list( "ordering": ordering, "page": page, "page_size": page_size, + "search": search, "title": title, "workspaces": workspaces, }, @@ -161,6 +172,7 @@ def list( ordering=ordering, page=page + 1, page_size=page_size, + search=search, title=title, workspaces=workspaces, request_options=request_options, @@ -267,6 +279,7 @@ def create( If set, the annotator can view model predictions show_ground_truth_first : typing.Optional[bool] + Onboarding mode (true): show ground truth tasks first in the labeling stream show_instruction : typing.Optional[bool] Show instructions to the annotator before they start @@ -366,7 +379,106 @@ def create( raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) - def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> Project: + def list_counts( + self, + *, + filter: typing.Optional[str] = None, + ids: typing.Optional[str] = None, + include: typing.Optional[str] = None, + ordering: typing.Optional[str] = None, + page: typing.Optional[int] = None, + page_size: typing.Optional[int] = None, + search: typing.Optional[str] = None, + title: typing.Optional[str] = None, + workspaces: typing.Optional[float] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> PaginatedLseProjectCountsList: + """ + Returns a list of projects with their counts. For example, task_number which is the total task number in project + + Parameters + ---------- + filter : typing.Optional[str] + Filter projects by pinned status. Use 'pinned_only' to return only pinned projects, 'exclude_pinned' to return only non-pinned projects, or 'all' to return all projects. + + ids : typing.Optional[str] + Filter id by in list + + include : typing.Optional[str] + Comma-separated list of count fields to include in the response to optimize performance. Available fields: task_number, finished_task_number, total_predictions_number, total_annotations_number, num_tasks_with_annotations, useful_annotation_number, ground_truth_number, skipped_annotations_number. If not specified, all count fields are included. + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + page : typing.Optional[int] + A page number within the paginated result set. + + page_size : typing.Optional[int] + Number of results to return per page. + + search : typing.Optional[str] + Search term for project title and description + + title : typing.Optional[str] + Filter title by contains (case-insensitive) + + workspaces : typing.Optional[float] + Filter workspaces by exact match + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + PaginatedLseProjectCountsList + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.list_counts() + """ + _response = self._client_wrapper.httpx_client.request( + "api/projects/counts/", + method="GET", + params={ + "filter": filter, + "ids": ids, + "include": include, + "ordering": ordering, + "page": page, + "page_size": page_size, + "search": search, + "title": title, + "workspaces": workspaces, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + PaginatedLseProjectCountsList, + construct_type( + type_=PaginatedLseProjectCountsList, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def get( + self, + id: int, + *, + members_limit: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> LseProjectResponse: """ Retrieve information about a project by project ID. @@ -374,13 +486,16 @@ def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = Non ---------- id : int + members_limit : typing.Optional[int] + Maximum number of members to return + request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - Project - Project information + LseProjectResponse + Project information. Not all fields are available for all roles. Examples -------- @@ -396,14 +511,17 @@ def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = Non _response = self._client_wrapper.httpx_client.request( f"api/projects/{jsonable_encoder(id)}/", method="GET", + params={ + "members_limit": members_limit, + }, request_options=request_options, ) try: if 200 <= _response.status_code < 300: return typing.cast( - Project, + LseProjectResponse, construct_type( - type_=Project, # type: ignore + type_=LseProjectResponse, # type: ignore object_=_response.json(), ), ) @@ -455,6 +573,8 @@ def update( self, id: int, *, + members_limit: typing.Optional[int] = None, + agreement_threshold: typing.Optional[str] = OMIT, annotation_limit_count: typing.Optional[int] = OMIT, annotation_limit_percent: typing.Optional[str] = OMIT, annotator_evaluation_minimum_score: typing.Optional[str] = OMIT, @@ -473,6 +593,7 @@ def update( is_draft: typing.Optional[bool] = OMIT, is_published: typing.Optional[bool] = OMIT, label_config: typing.Optional[str] = OMIT, + max_additional_annotators_assignable: typing.Optional[int] = OMIT, maximum_annotations: typing.Optional[int] = OMIT, min_annotations_to_start_training: typing.Optional[int] = OMIT, model_version: typing.Optional[str] = OMIT, @@ -505,6 +626,12 @@ def update( ---------- id : int + members_limit : typing.Optional[int] + Maximum number of members to return + + agreement_threshold : typing.Optional[str] + Minimum percent agreement threshold for which minimum number of annotators must agree + annotation_limit_count : typing.Optional[int] annotation_limit_percent : typing.Optional[str] @@ -550,6 +677,9 @@ def update( label_config : typing.Optional[str] Label config in XML format. See more about it in documentation + max_additional_annotators_assignable : typing.Optional[int] + Maximum number of additional annotators that can be assigned to a low agreement task + maximum_annotations : typing.Optional[int] Maximum number of annotations for one task. If the number of annotations per task is equal or greater to this value, the task is completed (is_labeled=True) @@ -584,6 +714,7 @@ def update( If set, the annotator can view model predictions show_ground_truth_first : typing.Optional[bool] + Onboarding mode (true): show ground truth tasks first in the labeling stream show_instruction : typing.Optional[bool] Show instructions to the annotator before they start @@ -630,7 +761,11 @@ def update( _response = self._client_wrapper.httpx_client.request( f"api/projects/{jsonable_encoder(id)}/", method="PATCH", + params={ + "members_limit": members_limit, + }, json={ + "agreement_threshold": agreement_threshold, "annotation_limit_count": annotation_limit_count, "annotation_limit_percent": annotation_limit_percent, "annotator_evaluation_minimum_score": annotator_evaluation_minimum_score, @@ -653,6 +788,7 @@ def update( "is_draft": is_draft, "is_published": is_published, "label_config": label_config, + "max_additional_annotators_assignable": max_additional_annotators_assignable, "maximum_annotations": maximum_annotations, "min_annotations_to_start_training": min_annotations_to_start_training, "model_version": model_version, @@ -703,6 +839,54 @@ def update( raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) + def list_unique_annotators( + self, id: int, *, request_options: typing.Optional[RequestOptions] = None + ) -> typing.List[UserSimple]: + """ + Return unique users who have submitted annotations in the specified project. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[UserSimple] + List of annotator users + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.list_unique_annotators( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/annotators/", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[UserSimple], + construct_type( + type_=typing.List[UserSimple], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + def duplicate( self, id: int, @@ -714,6 +898,12 @@ def duplicate( request_options: typing.Optional[RequestOptions] = None, ) -> ProjectsDuplicateResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Make a copy of project. Parameters @@ -924,6 +1114,81 @@ def import_tasks( raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) + def import_predictions( + self, + id: int, + *, + request: typing.Sequence[PredictionRequest], + request_options: typing.Optional[RequestOptions] = None, + ) -> ProjectsImportPredictionsResponse: + """ + Import model predictions for tasks in the specified project. + + Parameters + ---------- + id : int + A unique integer value identifying this project. + + request : typing.Sequence[PredictionRequest] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ProjectsImportPredictionsResponse + Predictions successfully imported + + Examples + -------- + from label_studio_sdk import LabelStudio, PredictionRequest + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.import_predictions( + id=1, + request=[ + PredictionRequest( + result=[{"key": "value"}], + task=1, + ) + ], + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/import/predictions", + method="POST", + json=convert_and_respect_annotation_metadata( + object_=request, annotation=typing.Sequence[PredictionRequest], direction="write" + ), + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + ProjectsImportPredictionsResponse, + construct_type( + type_=ProjectsImportPredictionsResponse, # type: ignore + object_=_response.json(), + ), + ) + if _response.status_code == 400: + raise BadRequestError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + def validate_label_config( self, id: int, *, label_config: str, request_options: typing.Optional[RequestOptions] = None ) -> ProjectLabelConfig: @@ -985,6 +1250,7 @@ def validate_label_config( class AsyncProjectsClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper + self.roles = AsyncRolesClient(client_wrapper=self._client_wrapper) self.exports = AsyncExportsClient(client_wrapper=self._client_wrapper) self.members = AsyncMembersClient(client_wrapper=self._client_wrapper) self.metrics = AsyncMetricsClient(client_wrapper=self._client_wrapper) @@ -995,15 +1261,16 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def list( self, *, - filter: typing.Optional[ProjectsListRequestFilter] = None, + filter: typing.Optional[str] = None, ids: typing.Optional[str] = None, include: typing.Optional[str] = None, members_limit: typing.Optional[int] = None, ordering: typing.Optional[str] = None, page: typing.Optional[int] = None, page_size: typing.Optional[int] = None, + search: typing.Optional[str] = None, title: typing.Optional[str] = None, - workspaces: typing.Optional[int] = None, + workspaces: typing.Optional[float] = None, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncPager[AllRolesProjectList]: """ @@ -1011,17 +1278,17 @@ async def list( Parameters ---------- - filter : typing.Optional[ProjectsListRequestFilter] + filter : typing.Optional[str] Filter projects by pinned status. Use 'pinned_only' to return only pinned projects, 'exclude_pinned' to return only non-pinned projects, or 'all' to return all projects. ids : typing.Optional[str] - ids + Filter id by in list include : typing.Optional[str] Comma-separated list of count fields to include in the response to optimize performance. Available fields: task_number, finished_task_number, total_predictions_number, total_annotations_number, num_tasks_with_annotations, useful_annotation_number, ground_truth_number, skipped_annotations_number. If not specified, all count fields are included. members_limit : typing.Optional[int] - Maximum number of members to return. + Maximum number of members to return ordering : typing.Optional[str] Which field to use when ordering the results. @@ -1032,11 +1299,14 @@ async def list( page_size : typing.Optional[int] Number of results to return per page. + search : typing.Optional[str] + Search term for project title and description + title : typing.Optional[str] - title + Filter title by contains (case-insensitive) - workspaces : typing.Optional[int] - workspaces + workspaces : typing.Optional[float] + Filter workspaces by exact match request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1080,6 +1350,7 @@ async def main() -> None: "ordering": ordering, "page": page, "page_size": page_size, + "search": search, "title": title, "workspaces": workspaces, }, @@ -1103,6 +1374,7 @@ async def main() -> None: ordering=ordering, page=page + 1, page_size=page_size, + search=search, title=title, workspaces=workspaces, request_options=request_options, @@ -1209,6 +1481,7 @@ async def create( If set, the annotator can view model predictions show_ground_truth_first : typing.Optional[bool] + Onboarding mode (true): show ground truth tasks first in the labeling stream show_instruction : typing.Optional[bool] Show instructions to the annotator before they start @@ -1316,7 +1589,114 @@ async def main() -> None: raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) - async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> Project: + async def list_counts( + self, + *, + filter: typing.Optional[str] = None, + ids: typing.Optional[str] = None, + include: typing.Optional[str] = None, + ordering: typing.Optional[str] = None, + page: typing.Optional[int] = None, + page_size: typing.Optional[int] = None, + search: typing.Optional[str] = None, + title: typing.Optional[str] = None, + workspaces: typing.Optional[float] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> PaginatedLseProjectCountsList: + """ + Returns a list of projects with their counts. For example, task_number which is the total task number in project + + Parameters + ---------- + filter : typing.Optional[str] + Filter projects by pinned status. Use 'pinned_only' to return only pinned projects, 'exclude_pinned' to return only non-pinned projects, or 'all' to return all projects. + + ids : typing.Optional[str] + Filter id by in list + + include : typing.Optional[str] + Comma-separated list of count fields to include in the response to optimize performance. Available fields: task_number, finished_task_number, total_predictions_number, total_annotations_number, num_tasks_with_annotations, useful_annotation_number, ground_truth_number, skipped_annotations_number. If not specified, all count fields are included. + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + page : typing.Optional[int] + A page number within the paginated result set. + + page_size : typing.Optional[int] + Number of results to return per page. + + search : typing.Optional[str] + Search term for project title and description + + title : typing.Optional[str] + Filter title by contains (case-insensitive) + + workspaces : typing.Optional[float] + Filter workspaces by exact match + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + PaginatedLseProjectCountsList + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.list_counts() + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + "api/projects/counts/", + method="GET", + params={ + "filter": filter, + "ids": ids, + "include": include, + "ordering": ordering, + "page": page, + "page_size": page_size, + "search": search, + "title": title, + "workspaces": workspaces, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + PaginatedLseProjectCountsList, + construct_type( + type_=PaginatedLseProjectCountsList, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def get( + self, + id: int, + *, + members_limit: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> LseProjectResponse: """ Retrieve information about a project by project ID. @@ -1324,13 +1704,16 @@ async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] ---------- id : int + members_limit : typing.Optional[int] + Maximum number of members to return + request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - Project - Project information + LseProjectResponse + Project information. Not all fields are available for all roles. Examples -------- @@ -1354,14 +1737,17 @@ async def main() -> None: _response = await self._client_wrapper.httpx_client.request( f"api/projects/{jsonable_encoder(id)}/", method="GET", + params={ + "members_limit": members_limit, + }, request_options=request_options, ) try: if 200 <= _response.status_code < 300: return typing.cast( - Project, + LseProjectResponse, construct_type( - type_=Project, # type: ignore + type_=LseProjectResponse, # type: ignore object_=_response.json(), ), ) @@ -1421,6 +1807,8 @@ async def update( self, id: int, *, + members_limit: typing.Optional[int] = None, + agreement_threshold: typing.Optional[str] = OMIT, annotation_limit_count: typing.Optional[int] = OMIT, annotation_limit_percent: typing.Optional[str] = OMIT, annotator_evaluation_minimum_score: typing.Optional[str] = OMIT, @@ -1439,6 +1827,7 @@ async def update( is_draft: typing.Optional[bool] = OMIT, is_published: typing.Optional[bool] = OMIT, label_config: typing.Optional[str] = OMIT, + max_additional_annotators_assignable: typing.Optional[int] = OMIT, maximum_annotations: typing.Optional[int] = OMIT, min_annotations_to_start_training: typing.Optional[int] = OMIT, model_version: typing.Optional[str] = OMIT, @@ -1471,6 +1860,12 @@ async def update( ---------- id : int + members_limit : typing.Optional[int] + Maximum number of members to return + + agreement_threshold : typing.Optional[str] + Minimum percent agreement threshold for which minimum number of annotators must agree + annotation_limit_count : typing.Optional[int] annotation_limit_percent : typing.Optional[str] @@ -1516,6 +1911,9 @@ async def update( label_config : typing.Optional[str] Label config in XML format. See more about it in documentation + max_additional_annotators_assignable : typing.Optional[int] + Maximum number of additional annotators that can be assigned to a low agreement task + maximum_annotations : typing.Optional[int] Maximum number of annotations for one task. If the number of annotations per task is equal or greater to this value, the task is completed (is_labeled=True) @@ -1550,6 +1948,7 @@ async def update( If set, the annotator can view model predictions show_ground_truth_first : typing.Optional[bool] + Onboarding mode (true): show ground truth tasks first in the labeling stream show_instruction : typing.Optional[bool] Show instructions to the annotator before they start @@ -1604,7 +2003,11 @@ async def main() -> None: _response = await self._client_wrapper.httpx_client.request( f"api/projects/{jsonable_encoder(id)}/", method="PATCH", + params={ + "members_limit": members_limit, + }, json={ + "agreement_threshold": agreement_threshold, "annotation_limit_count": annotation_limit_count, "annotation_limit_percent": annotation_limit_percent, "annotator_evaluation_minimum_score": annotator_evaluation_minimum_score, @@ -1627,6 +2030,7 @@ async def main() -> None: "is_draft": is_draft, "is_published": is_published, "label_config": label_config, + "max_additional_annotators_assignable": max_additional_annotators_assignable, "maximum_annotations": maximum_annotations, "min_annotations_to_start_training": min_annotations_to_start_training, "model_version": model_version, @@ -1677,6 +2081,62 @@ async def main() -> None: raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) + async def list_unique_annotators( + self, id: int, *, request_options: typing.Optional[RequestOptions] = None + ) -> typing.List[UserSimple]: + """ + Return unique users who have submitted annotations in the specified project. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[UserSimple] + List of annotator users + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.list_unique_annotators( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/annotators/", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[UserSimple], + construct_type( + type_=typing.List[UserSimple], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + async def duplicate( self, id: int, @@ -1688,6 +2148,12 @@ async def duplicate( request_options: typing.Optional[RequestOptions] = None, ) -> ProjectsDuplicateResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Make a copy of project. Parameters @@ -1914,6 +2380,89 @@ async def main() -> None: raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) + async def import_predictions( + self, + id: int, + *, + request: typing.Sequence[PredictionRequest], + request_options: typing.Optional[RequestOptions] = None, + ) -> ProjectsImportPredictionsResponse: + """ + Import model predictions for tasks in the specified project. + + Parameters + ---------- + id : int + A unique integer value identifying this project. + + request : typing.Sequence[PredictionRequest] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ProjectsImportPredictionsResponse + Predictions successfully imported + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio, PredictionRequest + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.import_predictions( + id=1, + request=[ + PredictionRequest( + result=[{"key": "value"}], + task=1, + ) + ], + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/import/predictions", + method="POST", + json=convert_and_respect_annotation_metadata( + object_=request, annotation=typing.Sequence[PredictionRequest], direction="write" + ), + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + ProjectsImportPredictionsResponse, + construct_type( + type_=ProjectsImportPredictionsResponse, # type: ignore + object_=_response.json(), + ), + ) + if _response.status_code == 400: + raise BadRequestError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + async def validate_label_config( self, id: int, *, label_config: str, request_options: typing.Optional[RequestOptions] = None ) -> ProjectLabelConfig: diff --git a/src/label_studio_sdk/projects/members/bulk/client.py b/src/label_studio_sdk/projects/members/bulk/client.py index c09ba179a..623bb162b 100644 --- a/src/label_studio_sdk/projects/members/bulk/client.py +++ b/src/label_studio_sdk/projects/members/bulk/client.py @@ -33,6 +33,12 @@ def post( request_options: typing.Optional[RequestOptions] = None, ) -> BulkPostResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Assign project members in bulk. Parameters @@ -108,6 +114,12 @@ def delete( self, id: int, *, search: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None ) -> BulkDeleteResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Unassign project members in bulk. Allows the same request body as bulk assign. Parameters @@ -175,6 +187,12 @@ async def post( request_options: typing.Optional[RequestOptions] = None, ) -> BulkPostResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Assign project members in bulk. Parameters @@ -258,6 +276,12 @@ async def delete( self, id: int, *, search: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None ) -> BulkDeleteResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Unassign project members in bulk. Allows the same request body as bulk assign. Parameters diff --git a/src/label_studio_sdk/projects/members/client.py b/src/label_studio_sdk/projects/members/client.py index ca4a4c4a8..2d0ee38b5 100644 --- a/src/label_studio_sdk/projects/members/client.py +++ b/src/label_studio_sdk/projects/members/client.py @@ -1,11 +1,11 @@ # This file was auto-generated by Fern from our API Definition. +import typing from ...core.client_wrapper import SyncClientWrapper from .bulk.client import BulkClient from .paginated.client import PaginatedClient -import typing from ...core.request_options import RequestOptions -from ...types.lse_user import LseUser +from ...types.project_member import ProjectMember from ...core.jsonable_encoder import jsonable_encoder from ...core.unchecked_base_model import construct_type from json.decoder import JSONDecodeError @@ -14,6 +14,9 @@ from .bulk.client import AsyncBulkClient from .paginated.client import AsyncPaginatedClient +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + class MembersClient: def __init__(self, *, client_wrapper: SyncClientWrapper): @@ -21,26 +24,29 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): self.bulk = BulkClient(client_wrapper=self._client_wrapper) self.paginated = PaginatedClient(client_wrapper=self._client_wrapper) - def get( - self, id: int, *, user_ids: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None - ) -> typing.List[LseUser]: + def add(self, id: int, *, user: int, request_options: typing.Optional[RequestOptions] = None) -> ProjectMember: """ - Retrieve the members for a specific project. Optionally filter by user IDs (comma-separated). + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Add a member to a specific project. Parameters ---------- id : int - user_ids : typing.Optional[str] - Comma-separated list of user IDs to include. Example: user_ids=1,2,3 + user : int request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - typing.List[LseUser] - List of users with membership information + ProjectMember + Examples -------- @@ -49,24 +55,29 @@ def get( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.projects.members.get( + client.projects.members.add( id=1, + user=1, ) """ _response = self._client_wrapper.httpx_client.request( f"api/projects/{jsonable_encoder(id)}/members/", - method="GET", - params={ - "user_ids": user_ids, + method="POST", + json={ + "user": user, + }, + headers={ + "content-type": "application/json", }, request_options=request_options, + omit=OMIT, ) try: if 200 <= _response.status_code < 300: return typing.cast( - typing.List[LseUser], + ProjectMember, construct_type( - type_=typing.List[LseUser], # type: ignore + type_=ProjectMember, # type: ignore object_=_response.json(), ), ) @@ -75,6 +86,51 @@ def get( raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) + def remove(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Remove a member from a specific project. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.members.remove( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/members/", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + class AsyncMembersClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -82,26 +138,31 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): self.bulk = AsyncBulkClient(client_wrapper=self._client_wrapper) self.paginated = AsyncPaginatedClient(client_wrapper=self._client_wrapper) - async def get( - self, id: int, *, user_ids: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None - ) -> typing.List[LseUser]: + async def add( + self, id: int, *, user: int, request_options: typing.Optional[RequestOptions] = None + ) -> ProjectMember: """ - Retrieve the members for a specific project. Optionally filter by user IDs (comma-separated). + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Add a member to a specific project. Parameters ---------- id : int - user_ids : typing.Optional[str] - Comma-separated list of user IDs to include. Example: user_ids=1,2,3 + user : int request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - typing.List[LseUser] - List of users with membership information + ProjectMember + Examples -------- @@ -115,8 +176,9 @@ async def get( async def main() -> None: - await client.projects.members.get( + await client.projects.members.add( id=1, + user=1, ) @@ -124,18 +186,22 @@ async def main() -> None: """ _response = await self._client_wrapper.httpx_client.request( f"api/projects/{jsonable_encoder(id)}/members/", - method="GET", - params={ - "user_ids": user_ids, + method="POST", + json={ + "user": user, + }, + headers={ + "content-type": "application/json", }, request_options=request_options, + omit=OMIT, ) try: if 200 <= _response.status_code < 300: return typing.cast( - typing.List[LseUser], + ProjectMember, construct_type( - type_=typing.List[LseUser], # type: ignore + type_=ProjectMember, # type: ignore object_=_response.json(), ), ) @@ -143,3 +209,56 @@ async def main() -> None: except JSONDecodeError: raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) + + async def remove(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Remove a member from a specific project. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.members.remove( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/members/", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) diff --git a/src/label_studio_sdk/projects/members/paginated/client.py b/src/label_studio_sdk/projects/members/paginated/client.py index a395ff750..26839b6e5 100644 --- a/src/label_studio_sdk/projects/members/paginated/client.py +++ b/src/label_studio_sdk/projects/members/paginated/client.py @@ -32,6 +32,12 @@ def list( request_options: typing.Optional[RequestOptions] = None, ) -> SyncPager[PaginatedProjectMember]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve the members for a specific project. Parameters @@ -145,6 +151,12 @@ async def list( request_options: typing.Optional[RequestOptions] = None, ) -> AsyncPager[PaginatedProjectMember]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve the members for a specific project. Parameters diff --git a/src/label_studio_sdk/projects/metrics/client.py b/src/label_studio_sdk/projects/metrics/client.py index fa39e9b00..c20d3a5d9 100644 --- a/src/label_studio_sdk/projects/metrics/client.py +++ b/src/label_studio_sdk/projects/metrics/client.py @@ -23,6 +23,12 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> MetricParam: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get the current metrics configuration for a project. Parameters @@ -78,6 +84,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> MetricParam: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update metrics strategy and parameters for a project. Parameters @@ -148,6 +160,12 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> MetricParam: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get the current metrics configuration for a project. Parameters @@ -211,6 +229,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> MetricParam: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update metrics strategy and parameters for a project. Parameters diff --git a/src/label_studio_sdk/projects/metrics/custom/client.py b/src/label_studio_sdk/projects/metrics/custom/client.py index af03bad01..d73031935 100644 --- a/src/label_studio_sdk/projects/metrics/custom/client.py +++ b/src/label_studio_sdk/projects/metrics/custom/client.py @@ -23,6 +23,12 @@ def get_lambda( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> CustomGetLambdaResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get the AWS Lambda code for the custom metric configured for this project. Parameters @@ -77,6 +83,12 @@ def update_lambda( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create or update the AWS Lambda function used for custom metrics in this project. Parameters @@ -150,6 +162,12 @@ def logs( request_options: typing.Optional[RequestOptions] = None, ) -> typing.Dict[str, typing.Optional[typing.Any]]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get AWS lambda logs for project, including filtering by start and end dates Parameters @@ -210,6 +228,12 @@ def logs( def check_function(self, id: int, *, code: str, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate custom matching function code for the project. Parameters @@ -266,6 +290,12 @@ async def get_lambda( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> CustomGetLambdaResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get the AWS Lambda code for the custom metric configured for this project. Parameters @@ -328,6 +358,12 @@ async def update_lambda( request_options: typing.Optional[RequestOptions] = None, ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create or update the AWS Lambda function used for custom metrics in this project. Parameters @@ -409,6 +445,12 @@ async def logs( request_options: typing.Optional[RequestOptions] = None, ) -> typing.Dict[str, typing.Optional[typing.Any]]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get AWS lambda logs for project, including filtering by start and end dates Parameters @@ -479,6 +521,12 @@ async def check_function( self, id: int, *, code: str, request_options: typing.Optional[RequestOptions] = None ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Validate custom matching function code for the project. Parameters diff --git a/src/label_studio_sdk/projects/pauses/client.py b/src/label_studio_sdk/projects/pauses/client.py index f390ea67f..92fb05bd2 100644 --- a/src/label_studio_sdk/projects/pauses/client.py +++ b/src/label_studio_sdk/projects/pauses/client.py @@ -29,6 +29,12 @@ def list( request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[Pause]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a list of all pauses. Parameters @@ -96,6 +102,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> Pause: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new pause entry. Parameters @@ -165,6 +177,12 @@ def get( self, id: str, project_pk: int, user_pk: int, *, request_options: typing.Optional[RequestOptions] = None ) -> Pause: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific pause by ID. Parameters @@ -219,6 +237,12 @@ def delete( self, id: str, project_pk: int, user_pk: int, *, request_options: typing.Optional[RequestOptions] = None ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific pause by ID. Parameters @@ -273,6 +297,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> Pause: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Partially update a pause entry by ID. Parameters @@ -358,6 +388,12 @@ async def list( request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[Pause]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a list of all pauses. Parameters @@ -433,6 +469,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> Pause: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new pause entry. Parameters @@ -510,6 +552,12 @@ async def get( self, id: str, project_pk: int, user_pk: int, *, request_options: typing.Optional[RequestOptions] = None ) -> Pause: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific pause by ID. Parameters @@ -572,6 +620,12 @@ async def delete( self, id: str, project_pk: int, user_pk: int, *, request_options: typing.Optional[RequestOptions] = None ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific pause by ID. Parameters @@ -634,6 +688,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> Pause: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Partially update a pause entry by ID. Parameters diff --git a/src/label_studio_sdk/projects/roles/__init__.py b/src/label_studio_sdk/projects/roles/__init__.py new file mode 100644 index 000000000..f3ea2659b --- /dev/null +++ b/src/label_studio_sdk/projects/roles/__init__.py @@ -0,0 +1,2 @@ +# This file was auto-generated by Fern from our API Definition. + diff --git a/src/label_studio_sdk/projects/roles/client.py b/src/label_studio_sdk/projects/roles/client.py new file mode 100644 index 000000000..9ab519f0d --- /dev/null +++ b/src/label_studio_sdk/projects/roles/client.py @@ -0,0 +1,555 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from ...core.client_wrapper import SyncClientWrapper +from ...core.request_options import RequestOptions +from ...types.project_role import ProjectRole +from ...core.unchecked_base_model import construct_type +from json.decoder import JSONDecodeError +from ...core.api_error import ApiError +from ...types.role9e7enum import Role9E7Enum +from ...core.jsonable_encoder import jsonable_encoder +from ...core.client_wrapper import AsyncClientWrapper + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class RolesClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def list( + self, + *, + ids: typing.Optional[int] = None, + ordering: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.List[ProjectRole]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + List project roles for requested IDs for the current user + + + Parameters + ---------- + ids : typing.Optional[int] + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[ProjectRole] + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.roles.list() + """ + _response = self._client_wrapper.httpx_client.request( + "api/projects/roles/", + method="GET", + params={ + "ids": ids, + "ordering": ordering, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[ProjectRole], + construct_type( + type_=typing.List[ProjectRole], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def add( + self, *, project: int, role: Role9E7Enum, user: int, request_options: typing.Optional[RequestOptions] = None + ) -> ProjectRole: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + Create project role for user allowing the user the same access level provided by organization role. + + + Parameters + ---------- + project : int + + role : Role9E7Enum + User role in project + + * `OW` - Owner + * `AD` - Administrator + * `MA` - Manager + * `RE` - Reviewer + * `AN` - Annotator + * `DI` - Deactivated + * `NO` - Not Activated + + user : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ProjectRole + Role created + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.roles.add( + project=1, + role="OW", + user=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + "api/projects/roles/", + method="POST", + json={ + "project": project, + "role": role, + "user": user, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + ProjectRole, + construct_type( + type_=ProjectRole, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def remove(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + Remove project role for user allowing the user the same access level provided by organization role. + + + Parameters + ---------- + id : int + A unique integer value identifying this project role. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.roles.remove( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/roles/{jsonable_encoder(id)}/", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[ProjectRole]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + List users and their project level roles for a given project. + If user is not listed here and is a member of the project then they would behave as assigned role in organization. + + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[ProjectRole] + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.roles.get( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/roles", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[ProjectRole], + construct_type( + type_=typing.List[ProjectRole], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + +class AsyncRolesClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def list( + self, + *, + ids: typing.Optional[int] = None, + ordering: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.List[ProjectRole]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + List project roles for requested IDs for the current user + + + Parameters + ---------- + ids : typing.Optional[int] + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[ProjectRole] + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.roles.list() + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + "api/projects/roles/", + method="GET", + params={ + "ids": ids, + "ordering": ordering, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[ProjectRole], + construct_type( + type_=typing.List[ProjectRole], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def add( + self, *, project: int, role: Role9E7Enum, user: int, request_options: typing.Optional[RequestOptions] = None + ) -> ProjectRole: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + Create project role for user allowing the user the same access level provided by organization role. + + + Parameters + ---------- + project : int + + role : Role9E7Enum + User role in project + + * `OW` - Owner + * `AD` - Administrator + * `MA` - Manager + * `RE` - Reviewer + * `AN` - Annotator + * `DI` - Deactivated + * `NO` - Not Activated + + user : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ProjectRole + Role created + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.roles.add( + project=1, + role="OW", + user=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + "api/projects/roles/", + method="POST", + json={ + "project": project, + "role": role, + "user": user, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + ProjectRole, + construct_type( + type_=ProjectRole, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def remove(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + Remove project role for user allowing the user the same access level provided by organization role. + + + Parameters + ---------- + id : int + A unique integer value identifying this project role. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.roles.remove( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/roles/{jsonable_encoder(id)}/", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def get( + self, id: int, *, request_options: typing.Optional[RequestOptions] = None + ) -> typing.List[ProjectRole]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + List users and their project level roles for a given project. + If user is not listed here and is a member of the project then they would behave as assigned role in organization. + + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[ProjectRole] + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.roles.get( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/roles", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[ProjectRole], + construct_type( + type_=typing.List[ProjectRole], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) diff --git a/src/label_studio_sdk/projects/stats/__init__.py b/src/label_studio_sdk/projects/stats/__init__.py index 581602a85..32ba4ef6f 100644 --- a/src/label_studio_sdk/projects/stats/__init__.py +++ b/src/label_studio_sdk/projects/stats/__init__.py @@ -1,21 +1,71 @@ # This file was auto-generated by Fern from our API Definition. from .types import ( + StatsAgreementAnnotatorResponse, + StatsAgreementAnnotatorsResponse, + StatsDataFiltersResponse, + StatsDataFiltersResponseUserFilters, + StatsDataFiltersResponseUserFiltersStatsItem, + StatsFinishedTasksResponse, StatsIaaResponse, StatsIaaResponseCommonTasks, StatsIaaResponseIaa, StatsIaaResponseStd, + StatsLeadTimeResponse, + StatsLeadTimeResponseLeadTimeStatsItem, + StatsModelVersionAnnotatorAgreementResponse, + StatsModelVersionGroundTruthAgreementResponse, + StatsModelVersionPredictionAgreementResponse, StatsTotalAgreementResponse, StatsTotalAgreementResponseOne, StatsTotalAgreementResponseZero, + StatsUserGroundTruthAgreementResponse, + StatsUserGroundTruthAgreementResponseAgreement, + StatsUserPredictionAgreementResponse, + StatsUserPredictionAgreementResponseAveragePredictionAgreementPerUser, + StatsUserReviewScoreResponse, + StatsUserReviewScoreResponsePerformanceScore, + StatsUserReviewScoreResponseReviewScore, + StatsUsersGroundTruthAgreementResponse, + StatsUsersGroundTruthAgreementResponseAgreementValue, + StatsUsersPredictionAgreementResponse, + StatsUsersPredictionAgreementResponseAgreementValue, + StatsUsersReviewScoreResponse, + StatsUsersReviewScoreResponsePerformanceScoreValue, + StatsUsersReviewScoreResponseReviewScoreValue, ) __all__ = [ + "StatsAgreementAnnotatorResponse", + "StatsAgreementAnnotatorsResponse", + "StatsDataFiltersResponse", + "StatsDataFiltersResponseUserFilters", + "StatsDataFiltersResponseUserFiltersStatsItem", + "StatsFinishedTasksResponse", "StatsIaaResponse", "StatsIaaResponseCommonTasks", "StatsIaaResponseIaa", "StatsIaaResponseStd", + "StatsLeadTimeResponse", + "StatsLeadTimeResponseLeadTimeStatsItem", + "StatsModelVersionAnnotatorAgreementResponse", + "StatsModelVersionGroundTruthAgreementResponse", + "StatsModelVersionPredictionAgreementResponse", "StatsTotalAgreementResponse", "StatsTotalAgreementResponseOne", "StatsTotalAgreementResponseZero", + "StatsUserGroundTruthAgreementResponse", + "StatsUserGroundTruthAgreementResponseAgreement", + "StatsUserPredictionAgreementResponse", + "StatsUserPredictionAgreementResponseAveragePredictionAgreementPerUser", + "StatsUserReviewScoreResponse", + "StatsUserReviewScoreResponsePerformanceScore", + "StatsUserReviewScoreResponseReviewScore", + "StatsUsersGroundTruthAgreementResponse", + "StatsUsersGroundTruthAgreementResponseAgreementValue", + "StatsUsersPredictionAgreementResponse", + "StatsUsersPredictionAgreementResponseAgreementValue", + "StatsUsersReviewScoreResponse", + "StatsUsersReviewScoreResponsePerformanceScoreValue", + "StatsUsersReviewScoreResponseReviewScoreValue", ] diff --git a/src/label_studio_sdk/projects/stats/client.py b/src/label_studio_sdk/projects/stats/client.py index adb673a7e..689891eb4 100644 --- a/src/label_studio_sdk/projects/stats/client.py +++ b/src/label_studio_sdk/projects/stats/client.py @@ -3,12 +3,26 @@ from ...core.client_wrapper import SyncClientWrapper import typing from ...core.request_options import RequestOptions -from .types.stats_iaa_response import StatsIaaResponse +from .types.stats_model_version_annotator_agreement_response import StatsModelVersionAnnotatorAgreementResponse from ...core.jsonable_encoder import jsonable_encoder from ...core.unchecked_base_model import construct_type from json.decoder import JSONDecodeError from ...core.api_error import ApiError +from .types.stats_model_version_ground_truth_agreement_response import StatsModelVersionGroundTruthAgreementResponse +from .types.stats_model_version_prediction_agreement_response import StatsModelVersionPredictionAgreementResponse +from .types.stats_iaa_response import StatsIaaResponse +from .types.stats_users_ground_truth_agreement_response import StatsUsersGroundTruthAgreementResponse +from .types.stats_agreement_annotator_response import StatsAgreementAnnotatorResponse +from .types.stats_agreement_annotators_response import StatsAgreementAnnotatorsResponse +from .types.stats_data_filters_response import StatsDataFiltersResponse +from .types.stats_finished_tasks_response import StatsFinishedTasksResponse +from .types.stats_lead_time_response import StatsLeadTimeResponse from .types.stats_total_agreement_response import StatsTotalAgreementResponse +from .types.stats_users_prediction_agreement_response import StatsUsersPredictionAgreementResponse +from .types.stats_users_review_score_response import StatsUsersReviewScoreResponse +from .types.stats_user_prediction_agreement_response import StatsUserPredictionAgreementResponse +from .types.stats_user_review_score_response import StatsUserReviewScoreResponse +from .types.stats_user_ground_truth_agreement_response import StatsUserGroundTruthAgreementResponse from ...core.client_wrapper import AsyncClientWrapper @@ -16,42 +30,96 @@ class StatsClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def iaa( + def model_version_annotator_agreement( + self, id: int, model_version: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> StatsModelVersionAnnotatorAgreementResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement between a given model version and all annotators in the project for overlapping tasks. + + Parameters + ---------- + id : int + + model_version : str + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsModelVersionAnnotatorAgreementResponse + Model-version overall agreement vs annotators + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.stats.model_version_annotator_agreement( + id=1, + model_version="model_version", + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/model-stats/{jsonable_encoder(model_version)}/agreement", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsModelVersionAnnotatorAgreementResponse, + construct_type( + type_=StatsModelVersionAnnotatorAgreementResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def model_version_ground_truth_agreement( self, id: int, + model_version: str, *, - expand: typing.Optional[str] = None, per_label: typing.Optional[bool] = None, - std: typing.Optional[bool] = None, - task: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> StatsIaaResponse: + ) -> StatsModelVersionGroundTruthAgreementResponse: """ - Get Inter-Annotator Agreement (IAA) matrix for a project, showing agreement between all annotators. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement between a given model version and ground truth annotations in the project for overlapping tasks. Parameters ---------- id : int - expand : typing.Optional[str] - Comma-separated list of fields to expand + model_version : str per_label : typing.Optional[bool] - Calculate IAA per label - - std : typing.Optional[bool] - Include standard deviation in results - - task : typing.Optional[str] - Comma-separated list of task IDs to filter by + Calculate agreement per label request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - StatsIaaResponse - Inter-Annotator Agreement matrix + StatsModelVersionGroundTruthAgreementResponse + Model-version ground truth agreement Examples -------- @@ -60,27 +128,25 @@ def iaa( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.projects.stats.iaa( + client.projects.stats.model_version_ground_truth_agreement( id=1, + model_version="model_version", ) """ _response = self._client_wrapper.httpx_client.request( - f"api/projects/{jsonable_encoder(id)}/stats/IAA", + f"api/projects/{jsonable_encoder(id)}/model-stats/{jsonable_encoder(model_version)}/agreement-groundtruth", method="GET", params={ - "expand": expand, "per_label": per_label, - "std": std, - "task": task, }, request_options=request_options, ) try: if 200 <= _response.status_code < 300: return typing.cast( - StatsIaaResponse, + StatsModelVersionGroundTruthAgreementResponse, construct_type( - type_=StatsIaaResponse, # type: ignore + type_=StatsModelVersionGroundTruthAgreementResponse, # type: ignore object_=_response.json(), ), ) @@ -89,32 +155,39 @@ def iaa( raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) - def total_agreement( + def model_version_prediction_agreement( self, id: int, + model_version: str, *, per_label: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> StatsTotalAgreementResponse: + ) -> StatsModelVersionPredictionAgreementResponse: """ - Overall or per-label total agreement across the project. - - NOTE: due to an open issue in Fern, SDK clients will raise ApiError upon handling a 204 response. As a workaround, wrap call to this function in a try-except block. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement between a given model version and all other model versions in the project for overlapping tasks. Parameters ---------- id : int + model_version : str + per_label : typing.Optional[bool] - Return agreement per label + Calculate agreement per label request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - StatsTotalAgreementResponse - Total agreement + StatsModelVersionPredictionAgreementResponse + Model-version prediction agreement Examples -------- @@ -123,12 +196,13 @@ def total_agreement( client = LabelStudio( api_key="YOUR_API_KEY", ) - client.projects.stats.total_agreement( + client.projects.stats.model_version_prediction_agreement( id=1, + model_version="model_version", ) """ _response = self._client_wrapper.httpx_client.request( - f"api/projects/{jsonable_encoder(id)}/stats/total_agreement", + f"api/projects/{jsonable_encoder(id)}/model-stats/{jsonable_encoder(model_version)}/prediction", method="GET", params={ "per_label": per_label, @@ -138,9 +212,9 @@ def total_agreement( try: if 200 <= _response.status_code < 300: return typing.cast( - StatsTotalAgreementResponse, + StatsModelVersionPredictionAgreementResponse, construct_type( - type_=StatsTotalAgreementResponse, # type: ignore + type_=StatsModelVersionPredictionAgreementResponse, # type: ignore object_=_response.json(), ), ) @@ -149,12 +223,7 @@ def total_agreement( raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) - -class AsyncStatsClient: - def __init__(self, *, client_wrapper: AsyncClientWrapper): - self._client_wrapper = client_wrapper - - async def iaa( + def iaa( self, id: int, *, @@ -165,6 +234,12 @@ async def iaa( request_options: typing.Optional[RequestOptions] = None, ) -> StatsIaaResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get Inter-Annotator Agreement (IAA) matrix for a project, showing agreement between all annotators. Parameters @@ -193,24 +268,16 @@ async def iaa( Examples -------- - import asyncio - - from label_studio_sdk import AsyncLabelStudio + from label_studio_sdk import LabelStudio - client = AsyncLabelStudio( + client = LabelStudio( api_key="YOUR_API_KEY", ) - - - async def main() -> None: - await client.projects.stats.iaa( - id=1, - ) - - - asyncio.run(main()) + client.projects.stats.iaa( + id=1, + ) """ - _response = await self._client_wrapper.httpx_client.request( + _response = self._client_wrapper.httpx_client.request( f"api/projects/{jsonable_encoder(id)}/stats/IAA", method="GET", params={ @@ -235,66 +302,2069 @@ async def main() -> None: raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) - async def total_agreement( + def users_ground_truth_agreement( self, id: int, *, + ids: str, per_label: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> StatsTotalAgreementResponse: + ) -> StatsUsersGroundTruthAgreementResponse: """ - Overall or per-label total agreement across the project. - - NOTE: due to an open issue in Fern, SDK clients will raise ApiError upon handling a 204 response. As a workaround, wrap call to this function in a try-except block. + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get ground truth agreement statistics for multiple users within a project. Parameters ---------- id : int + ids : str + Comma separated list of user IDs to get ground truth agreement for + per_label : typing.Optional[bool] - Return agreement per label + Per label request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - StatsTotalAgreementResponse - Total agreement + StatsUsersGroundTruthAgreementResponse + Ground truth agreement statistics for multiple users Examples -------- - import asyncio + from label_studio_sdk import LabelStudio - from label_studio_sdk import AsyncLabelStudio + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.stats.users_ground_truth_agreement( + id=1, + ids="ids", + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/agreement-groundtruth", + method="GET", + params={ + "ids": ids, + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsUsersGroundTruthAgreementResponse, + construct_type( + type_=StatsUsersGroundTruthAgreementResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) - client = AsyncLabelStudio( + def agreement_annotator( + self, id: int, user_id: int, *, request_options: typing.Optional[RequestOptions] = None + ) -> StatsAgreementAnnotatorResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement statistics for a specific annotator within a project. + + Parameters + ---------- + id : int + + user_id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsAgreementAnnotatorResponse + Individual annotator agreement statistics + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( api_key="YOUR_API_KEY", ) + client.projects.stats.agreement_annotator( + id=1, + user_id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/agreement_annotator/{jsonable_encoder(user_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsAgreementAnnotatorResponse, + construct_type( + type_=StatsAgreementAnnotatorResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + def agreement_annotators( + self, id: int, *, ids: str, request_options: typing.Optional[RequestOptions] = None + ) -> StatsAgreementAnnotatorsResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement statistics for multiple annotators within a project. - async def main() -> None: - await client.projects.stats.total_agreement( - id=1, - ) + Parameters + ---------- + id : int + ids : str + Comma separated list of annotator user IDs to get agreement scores for - asyncio.run(main()) + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsAgreementAnnotatorsResponse + Multiple annotator agreement statistics + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.stats.agreement_annotators( + id=1, + ids="ids", + ) """ - _response = await self._client_wrapper.httpx_client.request( - f"api/projects/{jsonable_encoder(id)}/stats/total_agreement", + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/agreement_annotators", method="GET", params={ - "per_label": per_label, + "ids": ids, }, request_options=request_options, ) try: if 200 <= _response.status_code < 300: return typing.cast( - StatsTotalAgreementResponse, + StatsAgreementAnnotatorsResponse, construct_type( - type_=StatsTotalAgreementResponse, # type: ignore + type_=StatsAgreementAnnotatorsResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def data_filters( + self, id: int, *, request_options: typing.Optional[RequestOptions] = None + ) -> StatsDataFiltersResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get statistics about user data filters and their usage within a project. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsDataFiltersResponse + User data filter statistics + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.stats.data_filters( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/data_filter", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsDataFiltersResponse, + construct_type( + type_=StatsDataFiltersResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def finished_tasks( + self, id: int, *, user_pk: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None + ) -> StatsFinishedTasksResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get statistics about finished tasks for a project. + + Parameters + ---------- + id : int + + user_pk : typing.Optional[int] + User ID to filter statistics by (optional) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsFinishedTasksResponse + Finished tasks statistics + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.stats.finished_tasks( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/finished", + method="GET", + params={ + "user_pk": user_pk, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsFinishedTasksResponse, + construct_type( + type_=StatsFinishedTasksResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def lead_time(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> StatsLeadTimeResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get lead time statistics across the project, including average annotation time. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsLeadTimeResponse + Lead time statistics + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.stats.lead_time( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/lead_time", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsLeadTimeResponse, + construct_type( + type_=StatsLeadTimeResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def total_agreement( + self, + id: int, + *, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsTotalAgreementResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overall or per-label total agreement across the project. + + NOTE: due to an open issue in Fern, SDK clients will raise ApiError upon handling a 204 response. As a workaround, wrap call to this function in a try-except block. + + Parameters + ---------- + id : int + + per_label : typing.Optional[bool] + Return agreement per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsTotalAgreementResponse + Total agreement + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.stats.total_agreement( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/total_agreement", + method="GET", + params={ + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsTotalAgreementResponse, + construct_type( + type_=StatsTotalAgreementResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def update_stats( + self, + id: int, + *, + stat_type: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.Dict[str, typing.Optional[typing.Any]]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Start stats recalculation for given project + + Parameters + ---------- + id : int + + stat_type : typing.Optional[str] + Stat type to recalculate. Possible values: label, stats + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.Dict[str, typing.Optional[typing.Any]] + Successful response returns job id + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.stats.update_stats( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/update-stats", + method="GET", + params={ + "stat_type": stat_type, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.Dict[str, typing.Optional[typing.Any]], + construct_type( + type_=typing.Dict[str, typing.Optional[typing.Any]], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def users_prediction_agreement( + self, + id: int, + *, + ids: str, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsUsersPredictionAgreementResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get prediction agreement statistics for multiple annotators within a project. + + Parameters + ---------- + id : int + + ids : str + Comma separated list of annotator user IDs to get agreement scores for + + per_label : typing.Optional[bool] + Per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsUsersPredictionAgreementResponse + Prediction agreement statistics for multiple annotators + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.stats.users_prediction_agreement( + id=1, + ids="ids", + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/user-stats/prediction", + method="GET", + params={ + "ids": ids, + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsUsersPredictionAgreementResponse, + construct_type( + type_=StatsUsersPredictionAgreementResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def users_review_score( + self, + id: int, + *, + ids: str, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsUsersReviewScoreResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get review score and performance score statistics for multiple annotators within a project. + + Parameters + ---------- + id : int + + ids : str + Comma separated list of annotator user IDs to get review scores for + + per_label : typing.Optional[bool] + Per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsUsersReviewScoreResponse + Review scores and performance scores for multiple annotators + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.stats.users_review_score( + id=1, + ids="ids", + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/user-stats/review_score", + method="GET", + params={ + "ids": ids, + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsUsersReviewScoreResponse, + construct_type( + type_=StatsUsersReviewScoreResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def user_prediction_agreement( + self, + id: int, + user_pk: int, + *, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsUserPredictionAgreementResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get prediction agreement statistics for a specific user within a project. + + Parameters + ---------- + id : int + + user_pk : int + + per_label : typing.Optional[bool] + Calculate agreement per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsUserPredictionAgreementResponse + Individual user prediction agreement statistics + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.stats.user_prediction_agreement( + id=1, + user_pk=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/user-stats/{jsonable_encoder(user_pk)}/prediction", + method="GET", + params={ + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsUserPredictionAgreementResponse, + construct_type( + type_=StatsUserPredictionAgreementResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def user_review_score( + self, + id: int, + user_pk: int, + *, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsUserReviewScoreResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get review score statistics for a specific user within a project. + + Parameters + ---------- + id : int + + user_pk : int + + per_label : typing.Optional[bool] + Calculate agreement per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsUserReviewScoreResponse + Individual user review score statistics + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.stats.user_review_score( + id=1, + user_pk=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/user-stats/{jsonable_encoder(user_pk)}/review_score", + method="GET", + params={ + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsUserReviewScoreResponse, + construct_type( + type_=StatsUserReviewScoreResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def user_ground_truth_agreement( + self, + id: int, + user_pk: int, + *, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsUserGroundTruthAgreementResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get ground truth agreement statistics for a specific user within a project. + + Parameters + ---------- + id : int + + user_pk : int + + per_label : typing.Optional[bool] + Calculate agreement per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsUserGroundTruthAgreementResponse + Individual user ground truth agreement statistics + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.projects.stats.user_ground_truth_agreement( + id=1, + user_pk=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/users/{jsonable_encoder(user_pk)}/stats/agreement-groundtruth", + method="GET", + params={ + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsUserGroundTruthAgreementResponse, + construct_type( + type_=StatsUserGroundTruthAgreementResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + +class AsyncStatsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def model_version_annotator_agreement( + self, id: int, model_version: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> StatsModelVersionAnnotatorAgreementResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement between a given model version and all annotators in the project for overlapping tasks. + + Parameters + ---------- + id : int + + model_version : str + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsModelVersionAnnotatorAgreementResponse + Model-version overall agreement vs annotators + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.model_version_annotator_agreement( + id=1, + model_version="model_version", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/model-stats/{jsonable_encoder(model_version)}/agreement", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsModelVersionAnnotatorAgreementResponse, + construct_type( + type_=StatsModelVersionAnnotatorAgreementResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def model_version_ground_truth_agreement( + self, + id: int, + model_version: str, + *, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsModelVersionGroundTruthAgreementResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement between a given model version and ground truth annotations in the project for overlapping tasks. + + Parameters + ---------- + id : int + + model_version : str + + per_label : typing.Optional[bool] + Calculate agreement per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsModelVersionGroundTruthAgreementResponse + Model-version ground truth agreement + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.model_version_ground_truth_agreement( + id=1, + model_version="model_version", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/model-stats/{jsonable_encoder(model_version)}/agreement-groundtruth", + method="GET", + params={ + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsModelVersionGroundTruthAgreementResponse, + construct_type( + type_=StatsModelVersionGroundTruthAgreementResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def model_version_prediction_agreement( + self, + id: int, + model_version: str, + *, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsModelVersionPredictionAgreementResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement between a given model version and all other model versions in the project for overlapping tasks. + + Parameters + ---------- + id : int + + model_version : str + + per_label : typing.Optional[bool] + Calculate agreement per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsModelVersionPredictionAgreementResponse + Model-version prediction agreement + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.model_version_prediction_agreement( + id=1, + model_version="model_version", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/model-stats/{jsonable_encoder(model_version)}/prediction", + method="GET", + params={ + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsModelVersionPredictionAgreementResponse, + construct_type( + type_=StatsModelVersionPredictionAgreementResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def iaa( + self, + id: int, + *, + expand: typing.Optional[str] = None, + per_label: typing.Optional[bool] = None, + std: typing.Optional[bool] = None, + task: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsIaaResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get Inter-Annotator Agreement (IAA) matrix for a project, showing agreement between all annotators. + + Parameters + ---------- + id : int + + expand : typing.Optional[str] + Comma-separated list of fields to expand + + per_label : typing.Optional[bool] + Calculate IAA per label + + std : typing.Optional[bool] + Include standard deviation in results + + task : typing.Optional[str] + Comma-separated list of task IDs to filter by + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsIaaResponse + Inter-Annotator Agreement matrix + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.iaa( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/IAA", + method="GET", + params={ + "expand": expand, + "per_label": per_label, + "std": std, + "task": task, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsIaaResponse, + construct_type( + type_=StatsIaaResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def users_ground_truth_agreement( + self, + id: int, + *, + ids: str, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsUsersGroundTruthAgreementResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get ground truth agreement statistics for multiple users within a project. + + Parameters + ---------- + id : int + + ids : str + Comma separated list of user IDs to get ground truth agreement for + + per_label : typing.Optional[bool] + Per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsUsersGroundTruthAgreementResponse + Ground truth agreement statistics for multiple users + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.users_ground_truth_agreement( + id=1, + ids="ids", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/agreement-groundtruth", + method="GET", + params={ + "ids": ids, + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsUsersGroundTruthAgreementResponse, + construct_type( + type_=StatsUsersGroundTruthAgreementResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def agreement_annotator( + self, id: int, user_id: int, *, request_options: typing.Optional[RequestOptions] = None + ) -> StatsAgreementAnnotatorResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement statistics for a specific annotator within a project. + + Parameters + ---------- + id : int + + user_id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsAgreementAnnotatorResponse + Individual annotator agreement statistics + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.agreement_annotator( + id=1, + user_id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/agreement_annotator/{jsonable_encoder(user_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsAgreementAnnotatorResponse, + construct_type( + type_=StatsAgreementAnnotatorResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def agreement_annotators( + self, id: int, *, ids: str, request_options: typing.Optional[RequestOptions] = None + ) -> StatsAgreementAnnotatorsResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get agreement statistics for multiple annotators within a project. + + Parameters + ---------- + id : int + + ids : str + Comma separated list of annotator user IDs to get agreement scores for + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsAgreementAnnotatorsResponse + Multiple annotator agreement statistics + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.agreement_annotators( + id=1, + ids="ids", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/agreement_annotators", + method="GET", + params={ + "ids": ids, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsAgreementAnnotatorsResponse, + construct_type( + type_=StatsAgreementAnnotatorsResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def data_filters( + self, id: int, *, request_options: typing.Optional[RequestOptions] = None + ) -> StatsDataFiltersResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get statistics about user data filters and their usage within a project. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsDataFiltersResponse + User data filter statistics + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.data_filters( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/data_filter", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsDataFiltersResponse, + construct_type( + type_=StatsDataFiltersResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def finished_tasks( + self, id: int, *, user_pk: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None + ) -> StatsFinishedTasksResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get statistics about finished tasks for a project. + + Parameters + ---------- + id : int + + user_pk : typing.Optional[int] + User ID to filter statistics by (optional) + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsFinishedTasksResponse + Finished tasks statistics + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.finished_tasks( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/finished", + method="GET", + params={ + "user_pk": user_pk, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsFinishedTasksResponse, + construct_type( + type_=StatsFinishedTasksResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def lead_time( + self, id: int, *, request_options: typing.Optional[RequestOptions] = None + ) -> StatsLeadTimeResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get lead time statistics across the project, including average annotation time. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsLeadTimeResponse + Lead time statistics + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.lead_time( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/lead_time", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsLeadTimeResponse, + construct_type( + type_=StatsLeadTimeResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def total_agreement( + self, + id: int, + *, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsTotalAgreementResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Overall or per-label total agreement across the project. + + NOTE: due to an open issue in Fern, SDK clients will raise ApiError upon handling a 204 response. As a workaround, wrap call to this function in a try-except block. + + Parameters + ---------- + id : int + + per_label : typing.Optional[bool] + Return agreement per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsTotalAgreementResponse + Total agreement + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.total_agreement( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/stats/total_agreement", + method="GET", + params={ + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsTotalAgreementResponse, + construct_type( + type_=StatsTotalAgreementResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def update_stats( + self, + id: int, + *, + stat_type: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.Dict[str, typing.Optional[typing.Any]]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Start stats recalculation for given project + + Parameters + ---------- + id : int + + stat_type : typing.Optional[str] + Stat type to recalculate. Possible values: label, stats + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.Dict[str, typing.Optional[typing.Any]] + Successful response returns job id + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.update_stats( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/update-stats", + method="GET", + params={ + "stat_type": stat_type, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.Dict[str, typing.Optional[typing.Any]], + construct_type( + type_=typing.Dict[str, typing.Optional[typing.Any]], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def users_prediction_agreement( + self, + id: int, + *, + ids: str, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsUsersPredictionAgreementResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get prediction agreement statistics for multiple annotators within a project. + + Parameters + ---------- + id : int + + ids : str + Comma separated list of annotator user IDs to get agreement scores for + + per_label : typing.Optional[bool] + Per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsUsersPredictionAgreementResponse + Prediction agreement statistics for multiple annotators + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.users_prediction_agreement( + id=1, + ids="ids", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/user-stats/prediction", + method="GET", + params={ + "ids": ids, + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsUsersPredictionAgreementResponse, + construct_type( + type_=StatsUsersPredictionAgreementResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def users_review_score( + self, + id: int, + *, + ids: str, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsUsersReviewScoreResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get review score and performance score statistics for multiple annotators within a project. + + Parameters + ---------- + id : int + + ids : str + Comma separated list of annotator user IDs to get review scores for + + per_label : typing.Optional[bool] + Per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsUsersReviewScoreResponse + Review scores and performance scores for multiple annotators + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.users_review_score( + id=1, + ids="ids", + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/user-stats/review_score", + method="GET", + params={ + "ids": ids, + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsUsersReviewScoreResponse, + construct_type( + type_=StatsUsersReviewScoreResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def user_prediction_agreement( + self, + id: int, + user_pk: int, + *, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsUserPredictionAgreementResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get prediction agreement statistics for a specific user within a project. + + Parameters + ---------- + id : int + + user_pk : int + + per_label : typing.Optional[bool] + Calculate agreement per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsUserPredictionAgreementResponse + Individual user prediction agreement statistics + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.user_prediction_agreement( + id=1, + user_pk=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/user-stats/{jsonable_encoder(user_pk)}/prediction", + method="GET", + params={ + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsUserPredictionAgreementResponse, + construct_type( + type_=StatsUserPredictionAgreementResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def user_review_score( + self, + id: int, + user_pk: int, + *, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsUserReviewScoreResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get review score statistics for a specific user within a project. + + Parameters + ---------- + id : int + + user_pk : int + + per_label : typing.Optional[bool] + Calculate agreement per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsUserReviewScoreResponse + Individual user review score statistics + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.user_review_score( + id=1, + user_pk=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/user-stats/{jsonable_encoder(user_pk)}/review_score", + method="GET", + params={ + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsUserReviewScoreResponse, + construct_type( + type_=StatsUserReviewScoreResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def user_ground_truth_agreement( + self, + id: int, + user_pk: int, + *, + per_label: typing.Optional[bool] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> StatsUserGroundTruthAgreementResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Get ground truth agreement statistics for a specific user within a project. + + Parameters + ---------- + id : int + + user_pk : int + + per_label : typing.Optional[bool] + Calculate agreement per label + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + StatsUserGroundTruthAgreementResponse + Individual user ground truth agreement statistics + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.projects.stats.user_ground_truth_agreement( + id=1, + user_pk=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(id)}/users/{jsonable_encoder(user_pk)}/stats/agreement-groundtruth", + method="GET", + params={ + "per_label": per_label, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + StatsUserGroundTruthAgreementResponse, + construct_type( + type_=StatsUserGroundTruthAgreementResponse, # type: ignore object_=_response.json(), ), ) diff --git a/src/label_studio_sdk/projects/stats/types/__init__.py b/src/label_studio_sdk/projects/stats/types/__init__.py index 6c85c31f5..b8f62df69 100644 --- a/src/label_studio_sdk/projects/stats/types/__init__.py +++ b/src/label_studio_sdk/projects/stats/types/__init__.py @@ -1,19 +1,77 @@ # This file was auto-generated by Fern from our API Definition. +from .stats_agreement_annotator_response import StatsAgreementAnnotatorResponse +from .stats_agreement_annotators_response import StatsAgreementAnnotatorsResponse +from .stats_data_filters_response import StatsDataFiltersResponse +from .stats_data_filters_response_user_filters import StatsDataFiltersResponseUserFilters +from .stats_data_filters_response_user_filters_stats_item import StatsDataFiltersResponseUserFiltersStatsItem +from .stats_finished_tasks_response import StatsFinishedTasksResponse from .stats_iaa_response import StatsIaaResponse from .stats_iaa_response_common_tasks import StatsIaaResponseCommonTasks from .stats_iaa_response_iaa import StatsIaaResponseIaa from .stats_iaa_response_std import StatsIaaResponseStd +from .stats_lead_time_response import StatsLeadTimeResponse +from .stats_lead_time_response_lead_time_stats_item import StatsLeadTimeResponseLeadTimeStatsItem +from .stats_model_version_annotator_agreement_response import StatsModelVersionAnnotatorAgreementResponse +from .stats_model_version_ground_truth_agreement_response import StatsModelVersionGroundTruthAgreementResponse +from .stats_model_version_prediction_agreement_response import StatsModelVersionPredictionAgreementResponse from .stats_total_agreement_response import StatsTotalAgreementResponse from .stats_total_agreement_response_one import StatsTotalAgreementResponseOne from .stats_total_agreement_response_zero import StatsTotalAgreementResponseZero +from .stats_user_ground_truth_agreement_response import StatsUserGroundTruthAgreementResponse +from .stats_user_ground_truth_agreement_response_agreement import StatsUserGroundTruthAgreementResponseAgreement +from .stats_user_prediction_agreement_response import StatsUserPredictionAgreementResponse +from .stats_user_prediction_agreement_response_average_prediction_agreement_per_user import ( + StatsUserPredictionAgreementResponseAveragePredictionAgreementPerUser, +) +from .stats_user_review_score_response import StatsUserReviewScoreResponse +from .stats_user_review_score_response_performance_score import StatsUserReviewScoreResponsePerformanceScore +from .stats_user_review_score_response_review_score import StatsUserReviewScoreResponseReviewScore +from .stats_users_ground_truth_agreement_response import StatsUsersGroundTruthAgreementResponse +from .stats_users_ground_truth_agreement_response_agreement_value import ( + StatsUsersGroundTruthAgreementResponseAgreementValue, +) +from .stats_users_prediction_agreement_response import StatsUsersPredictionAgreementResponse +from .stats_users_prediction_agreement_response_agreement_value import ( + StatsUsersPredictionAgreementResponseAgreementValue, +) +from .stats_users_review_score_response import StatsUsersReviewScoreResponse +from .stats_users_review_score_response_performance_score_value import ( + StatsUsersReviewScoreResponsePerformanceScoreValue, +) +from .stats_users_review_score_response_review_score_value import StatsUsersReviewScoreResponseReviewScoreValue __all__ = [ + "StatsAgreementAnnotatorResponse", + "StatsAgreementAnnotatorsResponse", + "StatsDataFiltersResponse", + "StatsDataFiltersResponseUserFilters", + "StatsDataFiltersResponseUserFiltersStatsItem", + "StatsFinishedTasksResponse", "StatsIaaResponse", "StatsIaaResponseCommonTasks", "StatsIaaResponseIaa", "StatsIaaResponseStd", + "StatsLeadTimeResponse", + "StatsLeadTimeResponseLeadTimeStatsItem", + "StatsModelVersionAnnotatorAgreementResponse", + "StatsModelVersionGroundTruthAgreementResponse", + "StatsModelVersionPredictionAgreementResponse", "StatsTotalAgreementResponse", "StatsTotalAgreementResponseOne", "StatsTotalAgreementResponseZero", + "StatsUserGroundTruthAgreementResponse", + "StatsUserGroundTruthAgreementResponseAgreement", + "StatsUserPredictionAgreementResponse", + "StatsUserPredictionAgreementResponseAveragePredictionAgreementPerUser", + "StatsUserReviewScoreResponse", + "StatsUserReviewScoreResponsePerformanceScore", + "StatsUserReviewScoreResponseReviewScore", + "StatsUsersGroundTruthAgreementResponse", + "StatsUsersGroundTruthAgreementResponseAgreementValue", + "StatsUsersPredictionAgreementResponse", + "StatsUsersPredictionAgreementResponseAgreementValue", + "StatsUsersReviewScoreResponse", + "StatsUsersReviewScoreResponsePerformanceScoreValue", + "StatsUsersReviewScoreResponseReviewScoreValue", ] diff --git a/src/label_studio_sdk/projects/stats/types/stats_agreement_annotator_response.py b/src/label_studio_sdk/projects/stats/types/stats_agreement_annotator_response.py new file mode 100644 index 000000000..2b349891f --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_agreement_annotator_response.py @@ -0,0 +1,26 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing_extensions +import typing +from ....core.serialization import FieldMetadata +import pydantic +from ....core.pydantic_utilities import IS_PYDANTIC_V2 + + +class StatsAgreementAnnotatorResponse(UncheckedBaseModel): + agreement_per_annotator: typing_extensions.Annotated[ + typing.Optional[float], FieldMetadata(alias="Agreement_per_annotator") + ] = pydantic.Field(default=None) + """ + Agreement score for the annotator (0-1) + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_agreement_annotators_response.py b/src/label_studio_sdk/projects/stats/types/stats_agreement_annotators_response.py new file mode 100644 index 000000000..8b9e01318 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_agreement_annotators_response.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +import pydantic +from ....core.pydantic_utilities import IS_PYDANTIC_V2 + + +class StatsAgreementAnnotatorsResponse(UncheckedBaseModel): + agreement: typing.Dict[str, float] = pydantic.Field() + """ + Mapping of annotator ID to their agreement score (0-1) or null if no data + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_data_filters_response.py b/src/label_studio_sdk/projects/stats/types/stats_data_filters_response.py new file mode 100644 index 000000000..acefc57bc --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_data_filters_response.py @@ -0,0 +1,23 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +from .stats_data_filters_response_user_filters import StatsDataFiltersResponseUserFilters +import pydantic +from ....core.pydantic_utilities import IS_PYDANTIC_V2 + + +class StatsDataFiltersResponse(UncheckedBaseModel): + user_filters: typing.Optional[StatsDataFiltersResponseUserFilters] = pydantic.Field(default=None) + """ + Data filter statistics by user and model + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_data_filters_response_user_filters.py b/src/label_studio_sdk/projects/stats/types/stats_data_filters_response_user_filters.py new file mode 100644 index 000000000..d1937add9 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_data_filters_response_user_filters.py @@ -0,0 +1,34 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +from .stats_data_filters_response_user_filters_stats_item import StatsDataFiltersResponseUserFiltersStatsItem +import pydantic +from ....core.pydantic_utilities import IS_PYDANTIC_V2 + + +class StatsDataFiltersResponseUserFilters(UncheckedBaseModel): + """ + Data filter statistics by user and model + """ + + stats: typing.Optional[typing.List[StatsDataFiltersResponseUserFiltersStatsItem]] = pydantic.Field(default=None) + """ + List of filter configurations for users and models + """ + + tasks_with_annotations: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field( + default=None + ) + """ + Default filter tab for tasks with annotations + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_data_filters_response_user_filters_stats_item.py b/src/label_studio_sdk/projects/stats/types/stats_data_filters_response_user_filters_stats_item.py new file mode 100644 index 000000000..5839cd96c --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_data_filters_response_user_filters_stats_item.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +import pydantic +from ....core.pydantic_utilities import IS_PYDANTIC_V2 + + +class StatsDataFiltersResponseUserFiltersStatsItem(UncheckedBaseModel): + id: typing.Optional[str] = pydantic.Field(default=None) + """ + User ID or model version identifier (e.g., "model:1.0") + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_finished_tasks_response.py b/src/label_studio_sdk/projects/stats/types/stats_finished_tasks_response.py new file mode 100644 index 000000000..65e7cdb7a --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_finished_tasks_response.py @@ -0,0 +1,32 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +import pydantic +from ....core.pydantic_utilities import IS_PYDANTIC_V2 + + +class StatsFinishedTasksResponse(UncheckedBaseModel): + finished: typing.Optional[int] = pydantic.Field(default=None) + """ + Number of finished tasks + """ + + id: typing.Optional[int] = pydantic.Field(default=None) + """ + User ID + """ + + progress: typing.Optional[int] = pydantic.Field(default=None) + """ + Progress percentage (0-100) + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_lead_time_response.py b/src/label_studio_sdk/projects/stats/types/stats_lead_time_response.py new file mode 100644 index 000000000..d0175fb94 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_lead_time_response.py @@ -0,0 +1,23 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +from .stats_lead_time_response_lead_time_stats_item import StatsLeadTimeResponseLeadTimeStatsItem +import pydantic +from ....core.pydantic_utilities import IS_PYDANTIC_V2 + + +class StatsLeadTimeResponse(UncheckedBaseModel): + lead_time_stats: typing.Optional[typing.List[StatsLeadTimeResponseLeadTimeStatsItem]] = pydantic.Field(default=None) + """ + Lead time statistics including mean, median, and distribution + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_lead_time_response_lead_time_stats_item.py b/src/label_studio_sdk/projects/stats/types/stats_lead_time_response_lead_time_stats_item.py new file mode 100644 index 000000000..d4fbca4b2 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_lead_time_response_lead_time_stats_item.py @@ -0,0 +1,37 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +import pydantic +from ....core.pydantic_utilities import IS_PYDANTIC_V2 + + +class StatsLeadTimeResponseLeadTimeStatsItem(UncheckedBaseModel): + mean_time: typing.Optional[float] = pydantic.Field(default=None) + """ + Average lead time for the user + """ + + median_time: typing.Optional[float] = pydantic.Field(default=None) + """ + Median lead time for the user + """ + + sum_lead_time: typing.Optional[float] = pydantic.Field(default=None) + """ + Total lead time for the user + """ + + user_id: typing.Optional[int] = pydantic.Field(default=None) + """ + User ID + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_model_version_annotator_agreement_response.py b/src/label_studio_sdk/projects/stats/types/stats_model_version_annotator_agreement_response.py new file mode 100644 index 000000000..5a45f78af --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_model_version_annotator_agreement_response.py @@ -0,0 +1,19 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +from ....core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class StatsModelVersionAnnotatorAgreementResponse(UncheckedBaseModel): + agreement: typing.Optional[float] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_model_version_ground_truth_agreement_response.py b/src/label_studio_sdk/projects/stats/types/stats_model_version_ground_truth_agreement_response.py new file mode 100644 index 000000000..ae057d26f --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_model_version_ground_truth_agreement_response.py @@ -0,0 +1,19 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +from ....core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class StatsModelVersionGroundTruthAgreementResponse(UncheckedBaseModel): + agreement: typing.Optional[float] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_model_version_prediction_agreement_response.py b/src/label_studio_sdk/projects/stats/types/stats_model_version_prediction_agreement_response.py new file mode 100644 index 000000000..835943204 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_model_version_prediction_agreement_response.py @@ -0,0 +1,19 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +from ....core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class StatsModelVersionPredictionAgreementResponse(UncheckedBaseModel): + average_prediction_agreement_per_model: typing.Optional[float] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_user_ground_truth_agreement_response.py b/src/label_studio_sdk/projects/stats/types/stats_user_ground_truth_agreement_response.py new file mode 100644 index 000000000..cf78669ea --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_user_ground_truth_agreement_response.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +from .stats_user_ground_truth_agreement_response_agreement import StatsUserGroundTruthAgreementResponseAgreement +from ....core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class StatsUserGroundTruthAgreementResponse(UncheckedBaseModel): + agreement: typing.Optional[StatsUserGroundTruthAgreementResponseAgreement] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_user_ground_truth_agreement_response_agreement.py b/src/label_studio_sdk/projects/stats/types/stats_user_ground_truth_agreement_response_agreement.py new file mode 100644 index 000000000..e96b04a42 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_user_ground_truth_agreement_response_agreement.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +StatsUserGroundTruthAgreementResponseAgreement = typing.Union[float, typing.Dict[str, float]] diff --git a/src/label_studio_sdk/projects/stats/types/stats_user_prediction_agreement_response.py b/src/label_studio_sdk/projects/stats/types/stats_user_prediction_agreement_response.py new file mode 100644 index 000000000..71efcb3d3 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_user_prediction_agreement_response.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +from .stats_user_prediction_agreement_response_average_prediction_agreement_per_user import ( + StatsUserPredictionAgreementResponseAveragePredictionAgreementPerUser, +) +from ....core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class StatsUserPredictionAgreementResponse(UncheckedBaseModel): + average_prediction_agreement_per_user: typing.Optional[ + StatsUserPredictionAgreementResponseAveragePredictionAgreementPerUser + ] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_user_prediction_agreement_response_average_prediction_agreement_per_user.py b/src/label_studio_sdk/projects/stats/types/stats_user_prediction_agreement_response_average_prediction_agreement_per_user.py new file mode 100644 index 000000000..553a16b31 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_user_prediction_agreement_response_average_prediction_agreement_per_user.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +StatsUserPredictionAgreementResponseAveragePredictionAgreementPerUser = typing.Union[float, typing.Dict[str, float]] diff --git a/src/label_studio_sdk/projects/stats/types/stats_user_review_score_response.py b/src/label_studio_sdk/projects/stats/types/stats_user_review_score_response.py new file mode 100644 index 000000000..de7dcf7e9 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_user_review_score_response.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +from .stats_user_review_score_response_performance_score import StatsUserReviewScoreResponsePerformanceScore +from .stats_user_review_score_response_review_score import StatsUserReviewScoreResponseReviewScore +from ....core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class StatsUserReviewScoreResponse(UncheckedBaseModel): + performance_score: typing.Optional[StatsUserReviewScoreResponsePerformanceScore] = None + review_score: typing.Optional[StatsUserReviewScoreResponseReviewScore] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_user_review_score_response_performance_score.py b/src/label_studio_sdk/projects/stats/types/stats_user_review_score_response_performance_score.py new file mode 100644 index 000000000..cca02c711 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_user_review_score_response_performance_score.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +StatsUserReviewScoreResponsePerformanceScore = typing.Union[float, typing.Dict[str, float]] diff --git a/src/label_studio_sdk/projects/stats/types/stats_user_review_score_response_review_score.py b/src/label_studio_sdk/projects/stats/types/stats_user_review_score_response_review_score.py new file mode 100644 index 000000000..75909433d --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_user_review_score_response_review_score.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +StatsUserReviewScoreResponseReviewScore = typing.Union[float, typing.Dict[str, float]] diff --git a/src/label_studio_sdk/projects/stats/types/stats_users_ground_truth_agreement_response.py b/src/label_studio_sdk/projects/stats/types/stats_users_ground_truth_agreement_response.py new file mode 100644 index 000000000..d48aaafc7 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_users_ground_truth_agreement_response.py @@ -0,0 +1,27 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +from .stats_users_ground_truth_agreement_response_agreement_value import ( + StatsUsersGroundTruthAgreementResponseAgreementValue, +) +import pydantic +from ....core.pydantic_utilities import IS_PYDANTIC_V2 + + +class StatsUsersGroundTruthAgreementResponse(UncheckedBaseModel): + agreement: typing.Optional[typing.Dict[str, StatsUsersGroundTruthAgreementResponseAgreementValue]] = pydantic.Field( + default=None + ) + """ + Dictionary mapping user IDs to their ground truth agreement scores + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_users_ground_truth_agreement_response_agreement_value.py b/src/label_studio_sdk/projects/stats/types/stats_users_ground_truth_agreement_response_agreement_value.py new file mode 100644 index 000000000..176b94728 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_users_ground_truth_agreement_response_agreement_value.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +StatsUsersGroundTruthAgreementResponseAgreementValue = typing.Union[float, typing.Dict[str, float]] diff --git a/src/label_studio_sdk/projects/stats/types/stats_users_prediction_agreement_response.py b/src/label_studio_sdk/projects/stats/types/stats_users_prediction_agreement_response.py new file mode 100644 index 000000000..bc431ddeb --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_users_prediction_agreement_response.py @@ -0,0 +1,27 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +from .stats_users_prediction_agreement_response_agreement_value import ( + StatsUsersPredictionAgreementResponseAgreementValue, +) +import pydantic +from ....core.pydantic_utilities import IS_PYDANTIC_V2 + + +class StatsUsersPredictionAgreementResponse(UncheckedBaseModel): + agreement: typing.Optional[typing.Dict[str, StatsUsersPredictionAgreementResponseAgreementValue]] = pydantic.Field( + default=None + ) + """ + Dictionary mapping user IDs to their prediction agreement scores + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_users_prediction_agreement_response_agreement_value.py b/src/label_studio_sdk/projects/stats/types/stats_users_prediction_agreement_response_agreement_value.py new file mode 100644 index 000000000..7bc134f98 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_users_prediction_agreement_response_agreement_value.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +StatsUsersPredictionAgreementResponseAgreementValue = typing.Union[float, typing.Dict[str, float]] diff --git a/src/label_studio_sdk/projects/stats/types/stats_users_review_score_response.py b/src/label_studio_sdk/projects/stats/types/stats_users_review_score_response.py new file mode 100644 index 000000000..cb53d99b0 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_users_review_score_response.py @@ -0,0 +1,35 @@ +# This file was auto-generated by Fern from our API Definition. + +from ....core.unchecked_base_model import UncheckedBaseModel +import typing +from .stats_users_review_score_response_performance_score_value import ( + StatsUsersReviewScoreResponsePerformanceScoreValue, +) +import pydantic +from .stats_users_review_score_response_review_score_value import StatsUsersReviewScoreResponseReviewScoreValue +from ....core.pydantic_utilities import IS_PYDANTIC_V2 + + +class StatsUsersReviewScoreResponse(UncheckedBaseModel): + performance_score: typing.Optional[typing.Dict[str, StatsUsersReviewScoreResponsePerformanceScoreValue]] = ( + pydantic.Field(default=None) + ) + """ + Performance scores mapped by annotator ID + """ + + review_score: typing.Optional[typing.Dict[str, StatsUsersReviewScoreResponseReviewScoreValue]] = pydantic.Field( + default=None + ) + """ + Review scores mapped by annotator ID + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/stats/types/stats_users_review_score_response_performance_score_value.py b/src/label_studio_sdk/projects/stats/types/stats_users_review_score_response_performance_score_value.py new file mode 100644 index 000000000..fe6c93926 --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_users_review_score_response_performance_score_value.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +StatsUsersReviewScoreResponsePerformanceScoreValue = typing.Union[float, typing.Dict[str, float]] diff --git a/src/label_studio_sdk/projects/stats/types/stats_users_review_score_response_review_score_value.py b/src/label_studio_sdk/projects/stats/types/stats_users_review_score_response_review_score_value.py new file mode 100644 index 000000000..8c8adbdce --- /dev/null +++ b/src/label_studio_sdk/projects/stats/types/stats_users_review_score_response_review_score_value.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +StatsUsersReviewScoreResponseReviewScoreValue = typing.Union[float, typing.Dict[str, float]] diff --git a/src/label_studio_sdk/projects/types/__init__.py b/src/label_studio_sdk/projects/types/__init__.py index 3150776e6..f029aea91 100644 --- a/src/label_studio_sdk/projects/types/__init__.py +++ b/src/label_studio_sdk/projects/types/__init__.py @@ -5,8 +5,8 @@ from .patched_lse_project_update_request_sampling import PatchedLseProjectUpdateRequestSampling from .patched_lse_project_update_request_skip_queue import PatchedLseProjectUpdateRequestSkipQueue from .projects_duplicate_response import ProjectsDuplicateResponse +from .projects_import_predictions_response import ProjectsImportPredictionsResponse from .projects_import_tasks_response import ProjectsImportTasksResponse -from .projects_list_request_filter import ProjectsListRequestFilter __all__ = [ "LseProjectCreateRequestSampling", @@ -14,6 +14,6 @@ "PatchedLseProjectUpdateRequestSampling", "PatchedLseProjectUpdateRequestSkipQueue", "ProjectsDuplicateResponse", + "ProjectsImportPredictionsResponse", "ProjectsImportTasksResponse", - "ProjectsListRequestFilter", ] diff --git a/src/label_studio_sdk/projects/types/lse_project_create_request_sampling.py b/src/label_studio_sdk/projects/types/lse_project_create_request_sampling.py index 04e070a9b..5134a0dbc 100644 --- a/src/label_studio_sdk/projects/types/lse_project_create_request_sampling.py +++ b/src/label_studio_sdk/projects/types/lse_project_create_request_sampling.py @@ -1,7 +1,7 @@ # This file was auto-generated by Fern from our API Definition. import typing -from ...types.sampling_enum import SamplingEnum +from ...types.sampling_de5enum import SamplingDe5Enum from ...types.null_enum import NullEnum -LseProjectCreateRequestSampling = typing.Union[SamplingEnum, NullEnum] +LseProjectCreateRequestSampling = typing.Union[SamplingDe5Enum, NullEnum] diff --git a/src/label_studio_sdk/projects/types/patched_lse_project_update_request_sampling.py b/src/label_studio_sdk/projects/types/patched_lse_project_update_request_sampling.py index ce868747d..1788f3c1f 100644 --- a/src/label_studio_sdk/projects/types/patched_lse_project_update_request_sampling.py +++ b/src/label_studio_sdk/projects/types/patched_lse_project_update_request_sampling.py @@ -1,7 +1,7 @@ # This file was auto-generated by Fern from our API Definition. import typing -from ...types.sampling_enum import SamplingEnum +from ...types.sampling_de5enum import SamplingDe5Enum from ...types.null_enum import NullEnum -PatchedLseProjectUpdateRequestSampling = typing.Union[SamplingEnum, NullEnum] +PatchedLseProjectUpdateRequestSampling = typing.Union[SamplingDe5Enum, NullEnum] diff --git a/src/label_studio_sdk/projects/types/projects_import_predictions_response.py b/src/label_studio_sdk/projects/types/projects_import_predictions_response.py new file mode 100644 index 000000000..a0954f47c --- /dev/null +++ b/src/label_studio_sdk/projects/types/projects_import_predictions_response.py @@ -0,0 +1,26 @@ +# This file was auto-generated by Fern from our API Definition. + +from ...core.unchecked_base_model import UncheckedBaseModel +import typing +import pydantic +from ...core.pydantic_utilities import IS_PYDANTIC_V2 + + +class ProjectsImportPredictionsResponse(UncheckedBaseModel): + """ + Import result + """ + + created: typing.Optional[int] = pydantic.Field(default=None) + """ + Number of predictions created + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/projects/types/projects_list_request_filter.py b/src/label_studio_sdk/projects/types/projects_list_request_filter.py deleted file mode 100644 index b2211d5d9..000000000 --- a/src/label_studio_sdk/projects/types/projects_list_request_filter.py +++ /dev/null @@ -1,5 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -ProjectsListRequestFilter = typing.Union[typing.Literal["all", "exclude_pinned", "pinned_only"], typing.Any] diff --git a/src/label_studio_sdk/prompts/client.py b/src/label_studio_sdk/prompts/client.py index 15852d99c..673b1300b 100644 --- a/src/label_studio_sdk/prompts/client.py +++ b/src/label_studio_sdk/prompts/client.py @@ -11,6 +11,10 @@ from json.decoder import JSONDecodeError from ..core.api_error import ApiError from ..types.batch_predictions import BatchPredictions +from ..types.paginated_project_subset_tasks_response_list import PaginatedProjectSubsetTasksResponseList +from ..core.jsonable_encoder import jsonable_encoder +from ..errors.bad_request_error import BadRequestError +from ..types.project_subset_item import ProjectSubsetItem from ..types.model_interface_serializer_get import ModelInterfaceSerializerGet from ..types.user_simple_request import UserSimpleRequest from ..types.skill_name_enum import SkillNameEnum @@ -18,7 +22,6 @@ from ..core.serialization import convert_and_respect_annotation_metadata from .types.prompts_compatible_projects_request_project_type import PromptsCompatibleProjectsRequestProjectType from ..types.paginated_all_roles_project_list_list import PaginatedAllRolesProjectListList -from ..core.jsonable_encoder import jsonable_encoder from ..core.client_wrapper import AsyncClientWrapper from .indicators.client import AsyncIndicatorsClient from .versions.client import AsyncVersionsClient @@ -45,6 +48,12 @@ def batch_failed_predictions( request_options: typing.Optional[RequestOptions] = None, ) -> BatchFailedPredictions: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new batch of failed predictions. Parameters @@ -119,6 +128,12 @@ def batch_predictions( request_options: typing.Optional[RequestOptions] = None, ) -> BatchPredictions: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new batch prediction. Parameters @@ -183,6 +198,178 @@ def batch_predictions( raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) + def subset_tasks( + self, + project_pk: int, + *, + include_total: typing.Optional[bool] = None, + model_run: typing.Optional[int] = None, + ordering: typing.Optional[str] = None, + page: typing.Optional[int] = None, + page_size: typing.Optional[int] = None, + parent_model: typing.Optional[int] = None, + project_subset: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> PaginatedProjectSubsetTasksResponseList: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + Provides list of tasks, based on project subset. Includes predictions for tasks. For the 'HasGT' subset, accuracy metrics will also be provided. + + + Parameters + ---------- + project_pk : int + + include_total : typing.Optional[bool] + If true (default), includes task_count in response; if false, omits it. + + model_run : typing.Optional[int] + A unique ID of a ModelRun + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + page : typing.Optional[int] + A page number within the paginated result set. + + page_size : typing.Optional[int] + Number of results to return per page. + + parent_model : typing.Optional[int] + The ID of the parent model (ModelInterface) for this Inference Run + + project_subset : typing.Optional[str] + The project subset to retrieve tasks for + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + PaginatedProjectSubsetTasksResponseList + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.prompts.subset_tasks( + project_pk=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(project_pk)}/subset-tasks", + method="GET", + params={ + "include_total": include_total, + "model_run": model_run, + "ordering": ordering, + "page": page, + "page_size": page_size, + "parent_model": parent_model, + "project_subset": project_subset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + PaginatedProjectSubsetTasksResponseList, + construct_type( + type_=PaginatedProjectSubsetTasksResponseList, # type: ignore + object_=_response.json(), + ), + ) + if _response.status_code == 400: + raise BadRequestError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def subsets( + self, + project_pk: int, + *, + ordering: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.List[ProjectSubsetItem]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + Provides list of available subsets for a project along with count of tasks in each subset + + + Parameters + ---------- + project_pk : int + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[ProjectSubsetItem] + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.prompts.subsets( + project_pk=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(project_pk)}/subsets", + method="GET", + params={ + "ordering": ordering, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[ProjectSubsetItem], + construct_type( + type_=typing.List[ProjectSubsetItem], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + def list( self, *, ordering: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[ModelInterfaceSerializerGet]: @@ -247,6 +434,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> ModelInterface: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new prompt. Parameters @@ -391,6 +584,12 @@ def compatible_projects( def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> ModelInterfaceSerializerGet: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific prompt. Parameters @@ -437,6 +636,12 @@ def get(self, id: str, *, request_options: typing.Optional[RequestOptions] = Non def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a prompt by ID Parameters @@ -489,6 +694,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> ModelInterface: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific prompt by ID. Parameters @@ -586,6 +797,12 @@ async def batch_failed_predictions( request_options: typing.Optional[RequestOptions] = None, ) -> BatchFailedPredictions: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new batch of failed predictions. Parameters @@ -668,6 +885,12 @@ async def batch_predictions( request_options: typing.Optional[RequestOptions] = None, ) -> BatchPredictions: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new batch prediction. Parameters @@ -740,6 +963,194 @@ async def main() -> None: raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) + async def subset_tasks( + self, + project_pk: int, + *, + include_total: typing.Optional[bool] = None, + model_run: typing.Optional[int] = None, + ordering: typing.Optional[str] = None, + page: typing.Optional[int] = None, + page_size: typing.Optional[int] = None, + parent_model: typing.Optional[int] = None, + project_subset: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> PaginatedProjectSubsetTasksResponseList: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + Provides list of tasks, based on project subset. Includes predictions for tasks. For the 'HasGT' subset, accuracy metrics will also be provided. + + + Parameters + ---------- + project_pk : int + + include_total : typing.Optional[bool] + If true (default), includes task_count in response; if false, omits it. + + model_run : typing.Optional[int] + A unique ID of a ModelRun + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + page : typing.Optional[int] + A page number within the paginated result set. + + page_size : typing.Optional[int] + Number of results to return per page. + + parent_model : typing.Optional[int] + The ID of the parent model (ModelInterface) for this Inference Run + + project_subset : typing.Optional[str] + The project subset to retrieve tasks for + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + PaginatedProjectSubsetTasksResponseList + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.prompts.subset_tasks( + project_pk=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(project_pk)}/subset-tasks", + method="GET", + params={ + "include_total": include_total, + "model_run": model_run, + "ordering": ordering, + "page": page, + "page_size": page_size, + "parent_model": parent_model, + "project_subset": project_subset, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + PaginatedProjectSubsetTasksResponseList, + construct_type( + type_=PaginatedProjectSubsetTasksResponseList, # type: ignore + object_=_response.json(), + ), + ) + if _response.status_code == 400: + raise BadRequestError( + typing.cast( + typing.Optional[typing.Any], + construct_type( + type_=typing.Optional[typing.Any], # type: ignore + object_=_response.json(), + ), + ) + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def subsets( + self, + project_pk: int, + *, + ordering: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.List[ProjectSubsetItem]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ + Provides list of available subsets for a project along with count of tasks in each subset + + + Parameters + ---------- + project_pk : int + + ordering : typing.Optional[str] + Which field to use when ordering the results. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[ProjectSubsetItem] + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.prompts.subsets( + project_pk=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/projects/{jsonable_encoder(project_pk)}/subsets", + method="GET", + params={ + "ordering": ordering, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[ProjectSubsetItem], + construct_type( + type_=typing.List[ProjectSubsetItem], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + async def list( self, *, ordering: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[ModelInterfaceSerializerGet]: @@ -812,6 +1223,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> ModelInterface: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new prompt. Parameters @@ -974,6 +1391,12 @@ async def get( self, id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> ModelInterfaceSerializerGet: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific prompt. Parameters @@ -1028,6 +1451,12 @@ async def main() -> None: async def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a prompt by ID Parameters @@ -1088,6 +1517,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> ModelInterface: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific prompt by ID. Parameters diff --git a/src/label_studio_sdk/prompts/indicators/client.py b/src/label_studio_sdk/prompts/indicators/client.py index cefed90ae..a90a7444c 100644 --- a/src/label_studio_sdk/prompts/indicators/client.py +++ b/src/label_studio_sdk/prompts/indicators/client.py @@ -20,6 +20,12 @@ def list( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[IndicatorsListResponseItem]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get key indicators for the Prompt dashboard. Parameters @@ -68,6 +74,12 @@ def get( self, id: int, indicator_key: str, *, request_options: typing.Optional[RequestOptions] = None ) -> LseKeyIndicatorValue: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific key indicator for the Prompt dashboard. Parameters @@ -124,6 +136,12 @@ async def list( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[IndicatorsListResponseItem]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get key indicators for the Prompt dashboard. Parameters @@ -180,6 +198,12 @@ async def get( self, id: int, indicator_key: str, *, request_options: typing.Optional[RequestOptions] = None ) -> LseKeyIndicatorValue: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a specific key indicator for the Prompt dashboard. Parameters diff --git a/src/label_studio_sdk/prompts/runs/client.py b/src/label_studio_sdk/prompts/runs/client.py index 3fdf84074..dd732f348 100644 --- a/src/label_studio_sdk/prompts/runs/client.py +++ b/src/label_studio_sdk/prompts/runs/client.py @@ -11,6 +11,7 @@ from ...core.api_error import ApiError import datetime as dt from ...types.project_subset_enum import ProjectSubsetEnum +from ...types.cancel_model_run_response import CancelModelRunResponse from ...core.client_wrapper import AsyncClientWrapper # this is used as the default value for optional parameters @@ -33,6 +34,12 @@ def list( request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[ModelRun]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get information (status, metadata, etc) about an existing inference run Parameters @@ -114,6 +121,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> ModelRun: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Run a prompt inference. Parameters @@ -193,6 +206,71 @@ def create( raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) + def cancel( + self, + inference_run_id: int, + prompt_id: int, + version_id: int, + *, + request_options: typing.Optional[RequestOptions] = None, + ) -> CancelModelRunResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Cancel the inference run for the given api + + Parameters + ---------- + inference_run_id : int + + prompt_id : int + + version_id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CancelModelRunResponse + + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.prompts.runs.cancel( + inference_run_id=1, + prompt_id=1, + version_id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/prompts/{jsonable_encoder(prompt_id)}/versions/{jsonable_encoder(version_id)}/inference-runs/{jsonable_encoder(inference_run_id)}/cancel", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + CancelModelRunResponse, + construct_type( + type_=CancelModelRunResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + class AsyncRunsClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -210,6 +288,12 @@ async def list( request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[ModelRun]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get information (status, metadata, etc) about an existing inference run Parameters @@ -299,6 +383,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> ModelRun: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Run a prompt inference. Parameters @@ -385,3 +475,76 @@ async def main() -> None: except JSONDecodeError: raise ApiError(status_code=_response.status_code, body=_response.text) raise ApiError(status_code=_response.status_code, body=_response_json) + + async def cancel( + self, + inference_run_id: int, + prompt_id: int, + version_id: int, + *, + request_options: typing.Optional[RequestOptions] = None, + ) -> CancelModelRunResponse: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Cancel the inference run for the given api + + Parameters + ---------- + inference_run_id : int + + prompt_id : int + + version_id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CancelModelRunResponse + + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.prompts.runs.cancel( + inference_run_id=1, + prompt_id=1, + version_id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/prompts/{jsonable_encoder(prompt_id)}/versions/{jsonable_encoder(version_id)}/inference-runs/{jsonable_encoder(inference_run_id)}/cancel", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + CancelModelRunResponse, + construct_type( + type_=CancelModelRunResponse, # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) diff --git a/src/label_studio_sdk/prompts/versions/client.py b/src/label_studio_sdk/prompts/versions/client.py index 641b8b08d..66356d462 100644 --- a/src/label_studio_sdk/prompts/versions/client.py +++ b/src/label_studio_sdk/prompts/versions/client.py @@ -23,6 +23,12 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def get_default_version_name(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get default prompt version name Parameters @@ -62,21 +68,23 @@ def get_default_version_name(self, id: int, *, request_options: typing.Optional[ def list( self, - prompt_id_: int, - *, prompt_id: int, + *, ordering: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[ThirdPartyModelVersion]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all versions of a prompt. Parameters ---------- - prompt_id_ : int - prompt_id : int - A unique integer value identifying the model ID to list versions for. ordering : typing.Optional[str] Which field to use when ordering the results. @@ -97,16 +105,14 @@ def list( api_key="YOUR_API_KEY", ) client.prompts.versions.list( - prompt_id_=1, prompt_id=1, ) """ _response = self._client_wrapper.httpx_client.request( - f"api/prompts/{jsonable_encoder(prompt_id_)}/versions", + f"api/prompts/{jsonable_encoder(prompt_id)}/versions", method="GET", params={ "ordering": ordering, - "prompt_id": prompt_id, }, request_options=request_options, ) @@ -138,6 +144,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> ThirdPartyModelVersion: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new version of a prompt. Parameters @@ -226,6 +238,12 @@ def get( self, prompt_id: int, version_id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> ThirdPartyModelVersion: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific prompt of a model. Parameters @@ -277,6 +295,12 @@ def delete( self, prompt_id: int, version_id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a prompt version by ID Parameters @@ -332,6 +356,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> ThirdPartyModelVersion: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific prompt version by ID. Parameters @@ -423,6 +453,12 @@ def cost_estimate( self, prompt_id: int, version_id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> InferenceRunCostEstimate: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get an estimate of the cost for making an inference run on the selected Prompt Version and Project/ProjectSubset Parameters @@ -479,6 +515,12 @@ def get_refined_prompt( request_options: typing.Optional[RequestOptions] = None, ) -> RefinedPromptResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get the refined prompt based on the `refinement_job_id`. Parameters @@ -544,6 +586,12 @@ def refine_prompt( request_options: typing.Optional[RequestOptions] = None, ) -> RefinedPromptResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Refine a prompt version using a teacher model and save the refined prompt as a new version. Parameters @@ -627,6 +675,12 @@ async def get_default_version_name( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get default prompt version name Parameters @@ -674,21 +728,23 @@ async def main() -> None: async def list( self, - prompt_id_: int, - *, prompt_id: int, + *, ordering: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[ThirdPartyModelVersion]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all versions of a prompt. Parameters ---------- - prompt_id_ : int - prompt_id : int - A unique integer value identifying the model ID to list versions for. ordering : typing.Optional[str] Which field to use when ordering the results. @@ -714,7 +770,6 @@ async def list( async def main() -> None: await client.prompts.versions.list( - prompt_id_=1, prompt_id=1, ) @@ -722,11 +777,10 @@ async def main() -> None: asyncio.run(main()) """ _response = await self._client_wrapper.httpx_client.request( - f"api/prompts/{jsonable_encoder(prompt_id_)}/versions", + f"api/prompts/{jsonable_encoder(prompt_id)}/versions", method="GET", params={ "ordering": ordering, - "prompt_id": prompt_id, }, request_options=request_options, ) @@ -758,6 +812,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> ThirdPartyModelVersion: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new version of a prompt. Parameters @@ -854,6 +914,12 @@ async def get( self, prompt_id: int, version_id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> ThirdPartyModelVersion: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve a specific prompt of a model. Parameters @@ -913,6 +979,12 @@ async def delete( self, prompt_id: int, version_id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a prompt version by ID Parameters @@ -976,6 +1048,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> ThirdPartyModelVersion: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update a specific prompt version by ID. Parameters @@ -1075,6 +1153,12 @@ async def cost_estimate( self, prompt_id: int, version_id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> InferenceRunCostEstimate: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get an estimate of the cost for making an inference run on the selected Prompt Version and Project/ProjectSubset Parameters @@ -1139,6 +1223,12 @@ async def get_refined_prompt( request_options: typing.Optional[RequestOptions] = None, ) -> RefinedPromptResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get the refined prompt based on the `refinement_job_id`. Parameters @@ -1212,6 +1302,12 @@ async def refine_prompt( request_options: typing.Optional[RequestOptions] = None, ) -> RefinedPromptResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Refine a prompt version using a teacher model and save the refined prompt as a new version. Parameters diff --git a/src/label_studio_sdk/sso/saml/client.py b/src/label_studio_sdk/sso/saml/client.py index a3aed198b..18162b1d3 100644 --- a/src/label_studio_sdk/sso/saml/client.py +++ b/src/label_studio_sdk/sso/saml/client.py @@ -22,6 +22,12 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> SamlSettings: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve SAML2 settings for the currently active organization. Parameters @@ -71,6 +77,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> SamlSettingsUpdate: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update SAML2 settings for the currently active organization. Parameters @@ -145,6 +157,12 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> SamlSettings: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve SAML2 settings for the currently active organization. Parameters @@ -202,6 +220,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> SamlSettingsUpdate: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update SAML2 settings for the currently active organization. Parameters diff --git a/src/label_studio_sdk/sso/scim/client.py b/src/label_studio_sdk/sso/scim/client.py index 47c8c56cd..18d9ef24c 100644 --- a/src/label_studio_sdk/sso/scim/client.py +++ b/src/label_studio_sdk/sso/scim/client.py @@ -22,6 +22,12 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> ScimSettings: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve SCIM settings for the currently active organization. Parameters @@ -71,6 +77,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> ScimSettingsUpdate: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update SCIM settings for the currently active organization. Parameters @@ -145,6 +157,12 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> ScimSettings: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve SCIM settings for the currently active organization. Parameters @@ -202,6 +220,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> ScimSettingsUpdate: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update SCIM settings for the currently active organization. Parameters diff --git a/src/label_studio_sdk/tasks/client.py b/src/label_studio_sdk/tasks/client.py index 1c50065ee..ad1569005 100644 --- a/src/label_studio_sdk/tasks/client.py +++ b/src/label_studio_sdk/tasks/client.py @@ -372,7 +372,8 @@ def create( api_key="YOUR_API_KEY", ) client.tasks.create( - data={"key": "value"}, + data={"image": "https://example.com/image.jpg", "text": "Hello, world!"}, + project=1, ) """ _response = self._client_wrapper.httpx_client.request( @@ -518,6 +519,7 @@ def update( last_comment_updated_at: typing.Optional[dt.datetime] = OMIT, meta: typing.Optional[typing.Optional[typing.Any]] = OMIT, overlap: typing.Optional[int] = OMIT, + precomputed_agreement: typing.Optional[float] = OMIT, predictions_score: typing.Optional[float] = OMIT, project: typing.Optional[int] = OMIT, reviewed: typing.Optional[bool] = OMIT, @@ -564,6 +566,9 @@ def update( overlap : typing.Optional[int] Number of distinct annotators that processed the current task + precomputed_agreement : typing.Optional[float] + Average agreement score for the task + predictions_score : typing.Optional[float] project : typing.Optional[int] @@ -617,6 +622,7 @@ def update( "last_comment_updated_at": last_comment_updated_at, "meta": meta, "overlap": overlap, + "precomputed_agreement": precomputed_agreement, "predictions_score": predictions_score, "project": project, "reviewed": reviewed, @@ -1203,7 +1209,11 @@ async def create( async def main() -> None: await client.tasks.create( - data={"key": "value"}, + data={ + "image": "https://example.com/image.jpg", + "text": "Hello, world!", + }, + project=1, ) @@ -1368,6 +1378,7 @@ async def update( last_comment_updated_at: typing.Optional[dt.datetime] = OMIT, meta: typing.Optional[typing.Optional[typing.Any]] = OMIT, overlap: typing.Optional[int] = OMIT, + precomputed_agreement: typing.Optional[float] = OMIT, predictions_score: typing.Optional[float] = OMIT, project: typing.Optional[int] = OMIT, reviewed: typing.Optional[bool] = OMIT, @@ -1414,6 +1425,9 @@ async def update( overlap : typing.Optional[int] Number of distinct annotators that processed the current task + precomputed_agreement : typing.Optional[float] + Average agreement score for the task + predictions_score : typing.Optional[float] project : typing.Optional[int] @@ -1475,6 +1489,7 @@ async def main() -> None: "last_comment_updated_at": last_comment_updated_at, "meta": meta, "overlap": overlap, + "precomputed_agreement": precomputed_agreement, "predictions_score": predictions_score, "project": project, "reviewed": reviewed, diff --git a/src/label_studio_sdk/types/__init__.py b/src/label_studio_sdk/types/__init__.py index e63feb006..39c5e2cb5 100644 --- a/src/label_studio_sdk/types/__init__.py +++ b/src/label_studio_sdk/types/__init__.py @@ -36,20 +36,23 @@ from .billing_flags import BillingFlags from .billing_info_response import BillingInfoResponse from .blank_enum import BlankEnum -from .blueprint import Blueprint from .blueprint_list import BlueprintList from .budget_reset_period_enum import BudgetResetPeriodEnum +from .cancel_model_run_response import CancelModelRunResponse from .child_filter import ChildFilter from .comment import Comment from .comment_request import CommentRequest from .comment_serializer_with_expanded_user import CommentSerializerWithExpandedUser +from .configurable_permission_option import ConfigurablePermissionOption from .converted_format import ConvertedFormat from .converted_format_request import ConvertedFormatRequest from .count_limit import CountLimit -from .custom_scripts_editable_by_enum import CustomScriptsEditableByEnum +from .databricks_export_storage import DatabricksExportStorage +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 .default_role_enum import DefaultRoleEnum from .edition_enum import EditionEnum from .export import Export from .file_upload import FileUpload @@ -79,12 +82,15 @@ from .lse_fields_trial_role import LseFieldsTrialRole from .lse_key_indicator_value import LseKeyIndicatorValue from .lse_organization import LseOrganization -from .lse_organization_custom_scripts_editable_by import LseOrganizationCustomScriptsEditableBy from .lse_organization_member_list import LseOrganizationMemberList from .lse_project import LseProject +from .lse_project_counts import LseProjectCounts from .lse_project_create import LseProjectCreate from .lse_project_create_sampling import LseProjectCreateSampling from .lse_project_create_skip_queue import LseProjectCreateSkipQueue +from .lse_project_response import LseProjectResponse +from .lse_project_response_sampling import LseProjectResponseSampling +from .lse_project_response_skip_queue import LseProjectResponseSkipQueue from .lse_project_sampling import LseProjectSampling from .lse_project_skip_queue import LseProjectSkipQueue from .lse_project_update import LseProjectUpdate @@ -133,17 +139,22 @@ 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 from .organization_member import OrganizationMember from .organization_membership import OrganizationMembership +from .organization_permission import OrganizationPermission +from .organization_permission_request import OrganizationPermissionRequest from .paginated_all_roles_project_list_list import PaginatedAllRolesProjectListList from .paginated_annotation_history_list import PaginatedAnnotationHistoryList from .paginated_lse_organization_member_list_list import PaginatedLseOrganizationMemberListList +from .paginated_lse_project_counts_list import PaginatedLseProjectCountsList from .paginated_lse_user_list import PaginatedLseUserList from .paginated_paginated_project_member_list import PaginatedPaginatedProjectMemberList from .paginated_project_member import PaginatedProjectMember +from .paginated_project_subset_tasks_response_list import PaginatedProjectSubsetTasksResponseList from .paginated_role_based_task_list import PaginatedRoleBasedTaskList from .pause import Pause from .pause_request import PauseRequest @@ -156,10 +167,15 @@ from .project_import import ProjectImport from .project_label_config import ProjectLabelConfig from .project_label_config_request import ProjectLabelConfigRequest +from .project_member import ProjectMember from .project_member_bulk_assign_roles_request import ProjectMemberBulkAssignRolesRequest +from .project_role import ProjectRole from .project_sampling import ProjectSampling from .project_skip_queue import ProjectSkipQueue from .project_subset_enum import ProjectSubsetEnum +from .project_subset_item import ProjectSubsetItem +from .project_subset_task_item import ProjectSubsetTaskItem +from .project_subset_tasks_response import ProjectSubsetTasksResponse from .project_template import ProjectTemplate from .project_template_request import ProjectTemplateRequest from .prompts_status_enum import PromptsStatusEnum @@ -174,8 +190,11 @@ from .review_settings_request import ReviewSettingsRequest from .review_settings_request_requeue_rejected_tasks_mode import ReviewSettingsRequestRequeueRejectedTasksMode from .review_settings_request_review_criteria import ReviewSettingsRequestReviewCriteria +from .review_settings_request_sampling import ReviewSettingsRequestSampling from .review_settings_requeue_rejected_tasks_mode import ReviewSettingsRequeueRejectedTasksMode from .review_settings_review_criteria import ReviewSettingsReviewCriteria +from .review_settings_sampling import ReviewSettingsSampling +from .review_settings_sampling_enum import ReviewSettingsSamplingEnum from .reviewed_enum import ReviewedEnum from .role9e7enum import Role9E7Enum from .role_based_task import RoleBasedTask @@ -183,7 +202,7 @@ from .s3import_storage import S3ImportStorage from .saml_settings import SamlSettings from .saml_settings_update import SamlSettingsUpdate -from .sampling_enum import SamplingEnum +from .sampling_de5enum import SamplingDe5Enum from .scim_settings import ScimSettings from .scim_settings_update import ScimSettingsUpdate from .scope_enum import ScopeEnum @@ -256,20 +275,23 @@ "BillingFlags", "BillingInfoResponse", "BlankEnum", - "Blueprint", "BlueprintList", "BudgetResetPeriodEnum", + "CancelModelRunResponse", "ChildFilter", "Comment", "CommentRequest", "CommentSerializerWithExpandedUser", + "ConfigurablePermissionOption", "ConvertedFormat", "ConvertedFormatRequest", "CountLimit", - "CustomScriptsEditableByEnum", + "DatabricksExportStorage", + "DatabricksExportStorageRequest", + "DatabricksImportStorage", + "DatabricksImportStorageRequest", + "Default165Enum", "DefaultRole", - "DefaultRoleCustomScriptsEditableBy", - "DefaultRoleEnum", "EditionEnum", "Export", "FileUpload", @@ -299,12 +321,15 @@ "LseFieldsTrialRole", "LseKeyIndicatorValue", "LseOrganization", - "LseOrganizationCustomScriptsEditableBy", "LseOrganizationMemberList", "LseProject", + "LseProjectCounts", "LseProjectCreate", "LseProjectCreateSampling", "LseProjectCreateSkipQueue", + "LseProjectResponse", + "LseProjectResponseSampling", + "LseProjectResponseSkipQueue", "LseProjectSampling", "LseProjectSkipQueue", "LseProjectUpdate", @@ -353,17 +378,22 @@ "ModelRunStatusEnum", "NullEnum", "OnboardingStateEnum", + "Options165Enum", "OrganizationBilling", "OrganizationId", "OrganizationInvite", "OrganizationMember", "OrganizationMembership", + "OrganizationPermission", + "OrganizationPermissionRequest", "PaginatedAllRolesProjectListList", "PaginatedAnnotationHistoryList", "PaginatedLseOrganizationMemberListList", + "PaginatedLseProjectCountsList", "PaginatedLseUserList", "PaginatedPaginatedProjectMemberList", "PaginatedProjectMember", + "PaginatedProjectSubsetTasksResponseList", "PaginatedRoleBasedTaskList", "Pause", "PauseRequest", @@ -376,10 +406,15 @@ "ProjectImport", "ProjectLabelConfig", "ProjectLabelConfigRequest", + "ProjectMember", "ProjectMemberBulkAssignRolesRequest", + "ProjectRole", "ProjectSampling", "ProjectSkipQueue", "ProjectSubsetEnum", + "ProjectSubsetItem", + "ProjectSubsetTaskItem", + "ProjectSubsetTasksResponse", "ProjectTemplate", "ProjectTemplateRequest", "PromptsStatusEnum", @@ -394,8 +429,11 @@ "ReviewSettingsRequest", "ReviewSettingsRequestRequeueRejectedTasksMode", "ReviewSettingsRequestReviewCriteria", + "ReviewSettingsRequestSampling", "ReviewSettingsRequeueRejectedTasksMode", "ReviewSettingsReviewCriteria", + "ReviewSettingsSampling", + "ReviewSettingsSamplingEnum", "ReviewedEnum", "Role9E7Enum", "RoleBasedTask", @@ -403,7 +441,7 @@ "S3ImportStorage", "SamlSettings", "SamlSettingsUpdate", - "SamplingEnum", + "SamplingDe5Enum", "ScimSettings", "ScimSettingsUpdate", "ScopeEnum", diff --git a/src/label_studio_sdk/types/activity_log.py b/src/label_studio_sdk/types/activity_log.py index 4044f6174..8ff5ec8c9 100644 --- a/src/label_studio_sdk/types/activity_log.py +++ b/src/label_studio_sdk/types/activity_log.py @@ -34,6 +34,7 @@ class ActivityLog(UncheckedBaseModel): response_code: str user_agent: typing.Optional[str] = None user_id: int + user_session: typing.Optional[str] = None workspace_owner_id: typing.Optional[int] = pydantic.Field(default=None) """ Owner id of workspace where action performed diff --git a/src/label_studio_sdk/types/all_roles_project_list.py b/src/label_studio_sdk/types/all_roles_project_list.py index 2d2dea964..8c5430e60 100644 --- a/src/label_studio_sdk/types/all_roles_project_list.py +++ b/src/label_studio_sdk/types/all_roles_project_list.py @@ -2,9 +2,9 @@ from ..core.unchecked_base_model import UncheckedBaseModel import typing +import pydantic from .assignment_settings import AssignmentSettings from .blueprint_list import BlueprintList -import pydantic import datetime as dt from .user_simple import UserSimple from .review_settings import ReviewSettings @@ -19,7 +19,12 @@ class AllRolesProjectList(UncheckedBaseModel): make sure, that you use correct one(Project.objects.with_counts()) """ - allow_stream: str + agreement_threshold: typing.Optional[str] = pydantic.Field(default=None) + """ + Minimum percent agreement threshold for which minimum number of annotators must agree + """ + + allow_stream: bool annotation_limit_count: typing.Optional[int] = None annotation_limit_percent: typing.Optional[str] = None annotator_evaluation_minimum_score: typing.Optional[str] = None @@ -97,6 +102,11 @@ class AllRolesProjectList(UncheckedBaseModel): Label config in XML format. See more about it in documentation """ + max_additional_annotators_assignable: typing.Optional[int] = pydantic.Field(default=None) + """ + Maximum number of additional annotators that can be assigned to a low agreement task + """ + maximum_annotations: typing.Optional[int] = pydantic.Field(default=None) """ Maximum number of annotations for one task. If the number of annotations per task is equal or greater to this value, the task is completed (is_labeled=True) @@ -114,7 +124,7 @@ class AllRolesProjectList(UncheckedBaseModel): Machine learning model version """ - num_tasks_with_annotations: str + num_tasks_with_annotations: typing.Optional[int] = None organization: typing.Optional[int] = None overlap_cohort_percentage: typing.Optional[int] = None parsed_label_config: typing.Optional[typing.Any] = None @@ -125,11 +135,11 @@ class AllRolesProjectList(UncheckedBaseModel): """ prompts: str - queue_done: str - queue_left: str + queue_done: int + queue_left: int queue_total: str - ready: str - rejected: str + ready: bool + rejected: int require_comment_on_skip: typing.Optional[bool] = None reveal_preannotations_interactively: typing.Optional[bool] = pydantic.Field(default=None) """ @@ -137,9 +147,9 @@ class AllRolesProjectList(UncheckedBaseModel): """ review_settings: ReviewSettings - review_total_tasks: str - reviewed_number: str - reviewer_queue_total: str + review_total_tasks: int + reviewed_number: int + reviewer_queue_total: int sampling: typing.Optional[AllRolesProjectListSampling] = None show_annotation_history: typing.Optional[bool] = pydantic.Field(default=None) """ @@ -151,7 +161,11 @@ class AllRolesProjectList(UncheckedBaseModel): If set, the annotator can view model predictions """ - show_ground_truth_first: typing.Optional[bool] = None + show_ground_truth_first: typing.Optional[bool] = pydantic.Field(default=None) + """ + Onboarding mode (true): show ground truth tasks first in the labeling stream + """ + show_instruction: typing.Optional[bool] = pydantic.Field(default=None) """ Show instructions to the annotator before they start @@ -183,7 +197,7 @@ class AllRolesProjectList(UncheckedBaseModel): total_annotations_number: str total_predictions_number: int - useful_annotation_number: str + useful_annotation_number: typing.Optional[int] = None workspace: str workspace_title: str diff --git a/src/label_studio_sdk/types/all_roles_project_list_sampling.py b/src/label_studio_sdk/types/all_roles_project_list_sampling.py index c92dcee55..6d7c3a27a 100644 --- a/src/label_studio_sdk/types/all_roles_project_list_sampling.py +++ b/src/label_studio_sdk/types/all_roles_project_list_sampling.py @@ -1,7 +1,7 @@ # This file was auto-generated by Fern from our API Definition. import typing -from .sampling_enum import SamplingEnum +from .sampling_de5enum import SamplingDe5Enum from .null_enum import NullEnum -AllRolesProjectListSampling = typing.Union[SamplingEnum, NullEnum] +AllRolesProjectListSampling = typing.Union[SamplingDe5Enum, NullEnum] diff --git a/src/label_studio_sdk/types/annotation.py b/src/label_studio_sdk/types/annotation.py index 916167ca9..531b53821 100644 --- a/src/label_studio_sdk/types/annotation.py +++ b/src/label_studio_sdk/types/annotation.py @@ -10,10 +10,10 @@ class Annotation(UncheckedBaseModel): """ - A ModelSerializer that takes additional arguments for - "fields", "omit" and "expand" in order to - control which fields are displayed, and whether to replace simple - values with complex, nested serializations + Annotation Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. """ bulk_created: typing.Optional[bool] = pydantic.Field(default=None) @@ -99,6 +99,7 @@ class Annotation(UncheckedBaseModel): List of annotation results for the task """ + state: str task: typing.Optional[int] = pydantic.Field(default=None) """ Corresponding task for this annotation diff --git a/src/label_studio_sdk/types/annotation_request.py b/src/label_studio_sdk/types/annotation_request.py index 0fac166d7..cbeb6ddf0 100644 --- a/src/label_studio_sdk/types/annotation_request.py +++ b/src/label_studio_sdk/types/annotation_request.py @@ -10,10 +10,10 @@ class AnnotationRequest(UncheckedBaseModel): """ - A ModelSerializer that takes additional arguments for - "fields", "omit" and "expand" in order to - control which fields are displayed, and whether to replace simple - values with complex, nested serializations + Annotation Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. """ bulk_created: typing.Optional[bool] = pydantic.Field(default=None) diff --git a/src/label_studio_sdk/types/annotation_review.py b/src/label_studio_sdk/types/annotation_review.py index ebf9b5b80..b5f50d4da 100644 --- a/src/label_studio_sdk/types/annotation_review.py +++ b/src/label_studio_sdk/types/annotation_review.py @@ -9,10 +9,14 @@ class AnnotationReview(UncheckedBaseModel): """ - A ModelSerializer that takes additional arguments for - "fields", "omit" and "expand" in order to - control which fields are displayed, and whether to replace simple - values with complex, nested serializations + AnnotationReview Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) """ accepted: typing.Optional[bool] = pydantic.Field(default=None) @@ -50,6 +54,7 @@ class AnnotationReview(UncheckedBaseModel): remove_from_queue: typing.Optional[bool] = None result: typing.Optional[typing.Optional[typing.Any]] = None started_at: typing.Optional[dt.datetime] = None + state: str if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/label_studio_sdk/types/annotation_review_request.py b/src/label_studio_sdk/types/annotation_review_request.py index ad2a6ad0d..797f6cb51 100644 --- a/src/label_studio_sdk/types/annotation_review_request.py +++ b/src/label_studio_sdk/types/annotation_review_request.py @@ -9,10 +9,14 @@ class AnnotationReviewRequest(UncheckedBaseModel): """ - A ModelSerializer that takes additional arguments for - "fields", "omit" and "expand" in order to - control which fields are displayed, and whether to replace simple - values with complex, nested serializations + AnnotationReview Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) """ accepted: typing.Optional[bool] = pydantic.Field(default=None) diff --git a/src/label_studio_sdk/types/azure_blob_import_storage.py b/src/label_studio_sdk/types/azure_blob_import_storage.py index 65cf56cb4..0a5fe833e 100644 --- a/src/label_studio_sdk/types/azure_blob_import_storage.py +++ b/src/label_studio_sdk/types/azure_blob_import_storage.py @@ -67,6 +67,11 @@ class AzureBlobImportStorage(UncheckedBaseModel): A unique integer value identifying this project. """ + recursive_scan: typing.Optional[bool] = pydantic.Field(default=None) + """ + Perform recursive scan over the container content + """ + regex_filter: typing.Optional[str] = pydantic.Field(default=None) """ Cloud storage regex for filtering objects diff --git a/src/label_studio_sdk/types/azure_service_principal_import_storage.py b/src/label_studio_sdk/types/azure_service_principal_import_storage.py index 72b915bbe..b70c09bc7 100644 --- a/src/label_studio_sdk/types/azure_service_principal_import_storage.py +++ b/src/label_studio_sdk/types/azure_service_principal_import_storage.py @@ -72,6 +72,11 @@ class AzureServicePrincipalImportStorage(UncheckedBaseModel): A unique integer value identifying this project. """ + recursive_scan: typing.Optional[bool] = pydantic.Field(default=None) + """ + Perform recursive scan + """ + regex_filter: typing.Optional[str] = pydantic.Field(default=None) """ Cloud storage regex for filtering objects diff --git a/src/label_studio_sdk/types/azure_service_principal_import_storage_request.py b/src/label_studio_sdk/types/azure_service_principal_import_storage_request.py index ddf5ea445..626970cb6 100644 --- a/src/label_studio_sdk/types/azure_service_principal_import_storage_request.py +++ b/src/label_studio_sdk/types/azure_service_principal_import_storage_request.py @@ -66,6 +66,11 @@ class AzureServicePrincipalImportStorageRequest(UncheckedBaseModel): A unique integer value identifying this project. """ + recursive_scan: typing.Optional[bool] = pydantic.Field(default=None) + """ + Perform recursive scan + """ + regex_filter: typing.Optional[str] = pydantic.Field(default=None) """ Cloud storage regex for filtering objects diff --git a/src/label_studio_sdk/types/billing_flags.py b/src/label_studio_sdk/types/billing_flags.py index 2b818143f..1f3b4f786 100644 --- a/src/label_studio_sdk/types/billing_flags.py +++ b/src/label_studio_sdk/types/billing_flags.py @@ -15,6 +15,7 @@ class BillingFlags(UncheckedBaseModel): allow_data_credentials: bool allow_invite_people: bool allow_invite_project_experts: bool + allow_nda: bool allow_organization_webhooks: bool allow_sso: bool allow_storage_proxy: bool @@ -24,10 +25,10 @@ class BillingFlags(UncheckedBaseModel): disable_members_page: bool disable_project_imports: bool early_adopter: bool + email_configured: bool embed_domains: typing.Optional[typing.List[typing.Dict[str, typing.Optional[typing.Any]]]] = None embed_enabled: bool embed_settings: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - hide_storage_settings_for_manager: bool manual_role_management: bool manual_workspace_management: bool secure_mode: bool diff --git a/src/label_studio_sdk/types/blueprint.py b/src/label_studio_sdk/types/blueprint.py deleted file mode 100644 index 1ab2a859d..000000000 --- a/src/label_studio_sdk/types/blueprint.py +++ /dev/null @@ -1,41 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -from ..core.unchecked_base_model import UncheckedBaseModel -import datetime as dt -import typing -import pydantic -from ..core.pydantic_utilities import IS_PYDANTIC_V2 - - -class Blueprint(UncheckedBaseModel): - created_at: dt.datetime - created_by: typing.Optional[int] = None - description: typing.Optional[str] = pydantic.Field(default=None) - """ - Project description - """ - - id: int - label_config: typing.Optional[str] = pydantic.Field(default=None) - """ - Labeling configuration in XML format - """ - - project: int - share_id: str - short_url: str - title: typing.Optional[str] = pydantic.Field(default=None) - """ - Blueprint name. Must be between 3 and 50 characters long. - """ - - updated_at: dt.datetime - - if IS_PYDANTIC_V2: - model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 - else: - - class Config: - frozen = True - smart_union = True - extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/cancel_model_run_response.py b/src/label_studio_sdk/types/cancel_model_run_response.py new file mode 100644 index 000000000..8db748797 --- /dev/null +++ b/src/label_studio_sdk/types/cancel_model_run_response.py @@ -0,0 +1,19 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +import typing +import pydantic + + +class CancelModelRunResponse(UncheckedBaseModel): + detail: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/comment.py b/src/label_studio_sdk/types/comment.py index 53923fa2d..2c888110b 100644 --- a/src/label_studio_sdk/types/comment.py +++ b/src/label_studio_sdk/types/comment.py @@ -8,6 +8,17 @@ class Comment(UncheckedBaseModel): + """ + Comment Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) + """ + annotation: typing.Optional[int] = None classifications: typing.Optional[typing.Optional[typing.Any]] = None created_at: dt.datetime = pydantic.Field() @@ -34,6 +45,7 @@ class Comment(UncheckedBaseModel): Resolving time """ + state: str task: typing.Optional[int] = None text: typing.Optional[str] = pydantic.Field(default=None) """ diff --git a/src/label_studio_sdk/types/comment_request.py b/src/label_studio_sdk/types/comment_request.py index d2435f1b0..089ec5227 100644 --- a/src/label_studio_sdk/types/comment_request.py +++ b/src/label_studio_sdk/types/comment_request.py @@ -7,6 +7,17 @@ class CommentRequest(UncheckedBaseModel): + """ + Comment Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) + """ + annotation: typing.Optional[int] = None classifications: typing.Optional[typing.Optional[typing.Any]] = None draft: typing.Optional[int] = None diff --git a/src/label_studio_sdk/types/comment_serializer_with_expanded_user.py b/src/label_studio_sdk/types/comment_serializer_with_expanded_user.py index a9a1e8157..9fc2a824e 100644 --- a/src/label_studio_sdk/types/comment_serializer_with_expanded_user.py +++ b/src/label_studio_sdk/types/comment_serializer_with_expanded_user.py @@ -9,6 +9,17 @@ class CommentSerializerWithExpandedUser(UncheckedBaseModel): + """ + Comment Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) + """ + annotation: typing.Optional[int] = None classifications: typing.Optional[typing.Optional[typing.Any]] = None created_at: dt.datetime = pydantic.Field() @@ -31,6 +42,7 @@ class CommentSerializerWithExpandedUser(UncheckedBaseModel): Resolving time """ + state: str task: typing.Optional[int] = None text: typing.Optional[str] = pydantic.Field(default=None) """ diff --git a/src/label_studio_sdk/types/configurable_permission_option.py b/src/label_studio_sdk/types/configurable_permission_option.py new file mode 100644 index 000000000..e4b1a0e5e --- /dev/null +++ b/src/label_studio_sdk/types/configurable_permission_option.py @@ -0,0 +1,25 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +import typing +from .role9e7enum import Role9E7Enum +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class ConfigurablePermissionOption(UncheckedBaseModel): + default: typing.List[Role9E7Enum] + group: typing.Optional[str] = None + label: typing.Optional[str] = None + options: typing.List[Role9E7Enum] + permission: 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 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/custom_scripts_editable_by_enum.py b/src/label_studio_sdk/types/custom_scripts_editable_by_enum.py deleted file mode 100644 index 29481daab..000000000 --- a/src/label_studio_sdk/types/custom_scripts_editable_by_enum.py +++ /dev/null @@ -1,5 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -CustomScriptsEditableByEnum = typing.Union[typing.Literal["AD", "MA"], typing.Any] diff --git a/src/label_studio_sdk/types/databricks_export_storage.py b/src/label_studio_sdk/types/databricks_export_storage.py new file mode 100644 index 000000000..41cc3db83 --- /dev/null +++ b/src/label_studio_sdk/types/databricks_export_storage.py @@ -0,0 +1,113 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +import typing +import pydantic +import datetime as dt +import typing_extensions +from ..core.serialization import FieldMetadata +from .status_c5a_enum import StatusC5AEnum +from ..core.pydantic_utilities import IS_PYDANTIC_V2 + + +class DatabricksExportStorage(UncheckedBaseModel): + can_delete_objects: typing.Optional[bool] = pydantic.Field(default=None) + """ + Deletion from storage enabled + """ + + catalog: str = pydantic.Field() + """ + UC catalog name + """ + + created_at: dt.datetime = pydantic.Field() + """ + Creation time + """ + + description: typing.Optional[str] = pydantic.Field(default=None) + """ + Cloud storage description + """ + + host: str = pydantic.Field() + """ + Databricks workspace base URL (https://...) + """ + + id: int + last_sync: typing.Optional[dt.datetime] = pydantic.Field(default=None) + """ + Last sync finished time + """ + + last_sync_count: typing.Optional[int] = pydantic.Field(default=None) + """ + Count of tasks synced last time + """ + + last_sync_job: typing.Optional[str] = pydantic.Field(default=None) + """ + Last sync job ID + """ + + meta: typing.Optional[typing.Optional[typing.Any]] = None + prefix: typing.Optional[str] = pydantic.Field(default=None) + """ + Export path prefix under the volume + """ + + project: int = pydantic.Field() + """ + A unique integer value identifying this project. + """ + + regex_filter: typing.Optional[str] = pydantic.Field(default=None) + """ + Regex for filtering objects + """ + + request_timeout_s: typing.Optional[int] = None + schema_: typing_extensions.Annotated[str, FieldMetadata(alias="schema")] = pydantic.Field() + """ + UC schema name + """ + + status: typing.Optional[StatusC5AEnum] = None + stream_chunk_bytes: typing.Optional[int] = None + synchronizable: typing.Optional[bool] = None + title: typing.Optional[str] = pydantic.Field(default=None) + """ + Cloud storage title + """ + + traceback: typing.Optional[str] = pydantic.Field(default=None) + """ + Traceback report for the last failed sync + """ + + type: str + use_blob_urls: typing.Optional[bool] = pydantic.Field(default=None) + """ + Generate blob URLs in tasks + """ + + verify_tls: typing.Optional[bool] = pydantic.Field(default=None) + """ + Verify TLS certificates + """ + + volume: str = pydantic.Field() + """ + UC volume name + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/databricks_export_storage_request.py b/src/label_studio_sdk/types/databricks_export_storage_request.py new file mode 100644 index 000000000..165e8cd3d --- /dev/null +++ b/src/label_studio_sdk/types/databricks_export_storage_request.py @@ -0,0 +1,107 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +import typing +import pydantic +import datetime as dt +import typing_extensions +from ..core.serialization import FieldMetadata +from .status_c5a_enum import StatusC5AEnum +from ..core.pydantic_utilities import IS_PYDANTIC_V2 + + +class DatabricksExportStorageRequest(UncheckedBaseModel): + can_delete_objects: typing.Optional[bool] = pydantic.Field(default=None) + """ + Deletion from storage enabled + """ + + catalog: str = pydantic.Field() + """ + UC catalog name + """ + + description: typing.Optional[str] = pydantic.Field(default=None) + """ + Cloud storage description + """ + + host: str = pydantic.Field() + """ + Databricks workspace base URL (https://...) + """ + + last_sync: typing.Optional[dt.datetime] = pydantic.Field(default=None) + """ + Last sync finished time + """ + + last_sync_count: typing.Optional[int] = pydantic.Field(default=None) + """ + Count of tasks synced last time + """ + + last_sync_job: typing.Optional[str] = pydantic.Field(default=None) + """ + Last sync job ID + """ + + meta: typing.Optional[typing.Optional[typing.Any]] = None + prefix: typing.Optional[str] = pydantic.Field(default=None) + """ + Export path prefix under the volume + """ + + project: int = pydantic.Field() + """ + A unique integer value identifying this project. + """ + + regex_filter: typing.Optional[str] = pydantic.Field(default=None) + """ + Regex for filtering objects + """ + + request_timeout_s: typing.Optional[int] = None + schema_: typing_extensions.Annotated[str, FieldMetadata(alias="schema")] = pydantic.Field() + """ + UC schema name + """ + + status: typing.Optional[StatusC5AEnum] = None + stream_chunk_bytes: typing.Optional[int] = None + synchronizable: typing.Optional[bool] = None + title: typing.Optional[str] = pydantic.Field(default=None) + """ + Cloud storage title + """ + + token: typing.Optional[str] = None + traceback: typing.Optional[str] = pydantic.Field(default=None) + """ + Traceback report for the last failed sync + """ + + use_blob_urls: typing.Optional[bool] = pydantic.Field(default=None) + """ + Generate blob URLs in tasks + """ + + verify_tls: typing.Optional[bool] = pydantic.Field(default=None) + """ + Verify TLS certificates + """ + + volume: str = pydantic.Field() + """ + UC volume name + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/databricks_import_storage.py b/src/label_studio_sdk/types/databricks_import_storage.py new file mode 100644 index 000000000..b64c6002b --- /dev/null +++ b/src/label_studio_sdk/types/databricks_import_storage.py @@ -0,0 +1,123 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +import pydantic +import datetime as dt +import typing +import typing_extensions +from ..core.serialization import FieldMetadata +from .status_c5a_enum import StatusC5AEnum +from ..core.pydantic_utilities import IS_PYDANTIC_V2 + + +class DatabricksImportStorage(UncheckedBaseModel): + catalog: str = pydantic.Field() + """ + UC catalog name + """ + + created_at: dt.datetime = pydantic.Field() + """ + Creation time + """ + + description: typing.Optional[str] = pydantic.Field(default=None) + """ + Cloud storage description + """ + + host: str = pydantic.Field() + """ + Databricks workspace base URL (https://...) + """ + + id: int + last_sync: typing.Optional[dt.datetime] = pydantic.Field(default=None) + """ + Last sync finished time + """ + + last_sync_count: typing.Optional[int] = pydantic.Field(default=None) + """ + Count of tasks synced last time + """ + + last_sync_job: typing.Optional[str] = pydantic.Field(default=None) + """ + Last sync job ID + """ + + meta: typing.Optional[typing.Optional[typing.Any]] = None + prefix: typing.Optional[str] = pydantic.Field(default=None) + """ + Path under the volume + """ + + presign: typing.Optional[bool] = pydantic.Field(default=None) + """ + Presign not supported; always proxied + """ + + presign_ttl: typing.Optional[int] = pydantic.Field(default=None) + """ + Unused for Databricks; kept for compatibility + """ + + project: int = pydantic.Field() + """ + A unique integer value identifying this project. + """ + + recursive_scan: typing.Optional[bool] = pydantic.Field(default=None) + """ + Perform recursive scan + """ + + regex_filter: typing.Optional[str] = pydantic.Field(default=None) + """ + Regex for filtering objects + """ + + request_timeout_s: typing.Optional[int] = None + schema_: typing_extensions.Annotated[str, FieldMetadata(alias="schema")] = pydantic.Field() + """ + UC schema name + """ + + status: typing.Optional[StatusC5AEnum] = None + stream_chunk_bytes: typing.Optional[int] = None + synchronizable: typing.Optional[bool] = None + title: typing.Optional[str] = pydantic.Field(default=None) + """ + Cloud storage title + """ + + traceback: typing.Optional[str] = pydantic.Field(default=None) + """ + Traceback report for the last failed sync + """ + + type: str + use_blob_urls: typing.Optional[bool] = pydantic.Field(default=None) + """ + Generate blob URLs in tasks + """ + + verify_tls: typing.Optional[bool] = pydantic.Field(default=None) + """ + Verify TLS certificates + """ + + volume: str = pydantic.Field() + """ + UC volume name + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/databricks_import_storage_request.py b/src/label_studio_sdk/types/databricks_import_storage_request.py new file mode 100644 index 000000000..f5e65b32c --- /dev/null +++ b/src/label_studio_sdk/types/databricks_import_storage_request.py @@ -0,0 +1,117 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +import pydantic +import typing +import datetime as dt +import typing_extensions +from ..core.serialization import FieldMetadata +from .status_c5a_enum import StatusC5AEnum +from ..core.pydantic_utilities import IS_PYDANTIC_V2 + + +class DatabricksImportStorageRequest(UncheckedBaseModel): + catalog: str = pydantic.Field() + """ + UC catalog name + """ + + description: typing.Optional[str] = pydantic.Field(default=None) + """ + Cloud storage description + """ + + host: str = pydantic.Field() + """ + Databricks workspace base URL (https://...) + """ + + last_sync: typing.Optional[dt.datetime] = pydantic.Field(default=None) + """ + Last sync finished time + """ + + last_sync_count: typing.Optional[int] = pydantic.Field(default=None) + """ + Count of tasks synced last time + """ + + last_sync_job: typing.Optional[str] = pydantic.Field(default=None) + """ + Last sync job ID + """ + + meta: typing.Optional[typing.Optional[typing.Any]] = None + prefix: typing.Optional[str] = pydantic.Field(default=None) + """ + Path under the volume + """ + + presign: typing.Optional[bool] = pydantic.Field(default=None) + """ + Presign not supported; always proxied + """ + + presign_ttl: typing.Optional[int] = pydantic.Field(default=None) + """ + Unused for Databricks; kept for compatibility + """ + + project: int = pydantic.Field() + """ + A unique integer value identifying this project. + """ + + recursive_scan: typing.Optional[bool] = pydantic.Field(default=None) + """ + Perform recursive scan + """ + + regex_filter: typing.Optional[str] = pydantic.Field(default=None) + """ + Regex for filtering objects + """ + + request_timeout_s: typing.Optional[int] = None + schema_: typing_extensions.Annotated[str, FieldMetadata(alias="schema")] = pydantic.Field() + """ + UC schema name + """ + + status: typing.Optional[StatusC5AEnum] = None + stream_chunk_bytes: typing.Optional[int] = None + synchronizable: typing.Optional[bool] = None + title: typing.Optional[str] = pydantic.Field(default=None) + """ + Cloud storage title + """ + + token: typing.Optional[str] = None + traceback: typing.Optional[str] = pydantic.Field(default=None) + """ + Traceback report for the last failed sync + """ + + use_blob_urls: typing.Optional[bool] = pydantic.Field(default=None) + """ + Generate blob URLs in tasks + """ + + verify_tls: typing.Optional[bool] = pydantic.Field(default=None) + """ + Verify TLS certificates + """ + + volume: str = pydantic.Field() + """ + UC volume name + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow 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/default_role.py b/src/label_studio_sdk/types/default_role.py index fe031178a..135054f16 100644 --- a/src/label_studio_sdk/types/default_role.py +++ b/src/label_studio_sdk/types/default_role.py @@ -4,8 +4,7 @@ import typing import datetime as dt import pydantic -from .default_role_custom_scripts_editable_by import DefaultRoleCustomScriptsEditableBy -from .default_role_enum import DefaultRoleEnum +from .role9e7enum import Role9E7Enum from ..core.pydantic_utilities import IS_PYDANTIC_V2 @@ -15,20 +14,12 @@ class DefaultRole(UncheckedBaseModel): Set to current time to restrict data sharing between annotators and reviewers in the label stream, review stream, and notifications (which will be disabled). In these settings, information about annotator and reviewer identity is suppressed in the UI. """ - custom_scripts_editable_by: typing.Optional[DefaultRoleCustomScriptsEditableBy] = pydantic.Field(default=None) - """ - Set the minimum user role that can edit custom scripts in the UI. - - * `AD` - Administrator - * `MA` - Manager - """ - custom_scripts_enabled_at: typing.Optional[dt.datetime] = pydantic.Field(default=None) """ - Set to current time to enabled custom scripts for this organization. Can only be enabled if no organization members are active members of any other organizations; otherwise an error will be raised. If this occurs, contact the LEAP team for assistance with enabling custom scripts. + Set to current time to enable custom scripts (Plugins) for this organization. Can only be enabled if no organization members are active members of any other organizations; otherwise an error will be raised. If this occurs, contact the LEAP team for assistance with enabling custom scripts (Plugins). """ - default_role: typing.Optional[DefaultRoleEnum] = pydantic.Field(default=None) + default_role: typing.Optional[Role9E7Enum] = pydantic.Field(default=None) """ Default membership role for invited users diff --git a/src/label_studio_sdk/types/default_role_custom_scripts_editable_by.py b/src/label_studio_sdk/types/default_role_custom_scripts_editable_by.py deleted file mode 100644 index e22ee2a88..000000000 --- a/src/label_studio_sdk/types/default_role_custom_scripts_editable_by.py +++ /dev/null @@ -1,7 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing -from .custom_scripts_editable_by_enum import CustomScriptsEditableByEnum -from .null_enum import NullEnum - -DefaultRoleCustomScriptsEditableBy = typing.Union[CustomScriptsEditableByEnum, NullEnum] diff --git a/src/label_studio_sdk/types/default_role_enum.py b/src/label_studio_sdk/types/default_role_enum.py deleted file mode 100644 index 37e91a29c..000000000 --- a/src/label_studio_sdk/types/default_role_enum.py +++ /dev/null @@ -1,5 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -DefaultRoleEnum = typing.Union[typing.Literal["OW", "AD", "MA", "RE", "AN", "DI", "NO"], typing.Any] diff --git a/src/label_studio_sdk/types/gcs_import_storage.py b/src/label_studio_sdk/types/gcs_import_storage.py index 9b5700f3e..d1bf42bb7 100644 --- a/src/label_studio_sdk/types/gcs_import_storage.py +++ b/src/label_studio_sdk/types/gcs_import_storage.py @@ -67,6 +67,11 @@ class GcsImportStorage(UncheckedBaseModel): A unique integer value identifying this project. """ + recursive_scan: typing.Optional[bool] = pydantic.Field(default=None) + """ + Perform recursive scan over the bucket content + """ + regex_filter: typing.Optional[str] = pydantic.Field(default=None) """ Cloud storage regex for filtering objects diff --git a/src/label_studio_sdk/types/gcswif_import_storage.py b/src/label_studio_sdk/types/gcswif_import_storage.py index 99d3204e1..b2c784a76 100644 --- a/src/label_studio_sdk/types/gcswif_import_storage.py +++ b/src/label_studio_sdk/types/gcswif_import_storage.py @@ -87,6 +87,11 @@ class GcswifImportStorage(UncheckedBaseModel): A unique integer value identifying this project. """ + recursive_scan: typing.Optional[bool] = pydantic.Field(default=None) + """ + Perform recursive scan over the bucket content + """ + regex_filter: typing.Optional[str] = pydantic.Field(default=None) """ Cloud storage regex for filtering objects diff --git a/src/label_studio_sdk/types/gcswif_import_storage_request.py b/src/label_studio_sdk/types/gcswif_import_storage_request.py index 1517240f3..eb1d1c04a 100644 --- a/src/label_studio_sdk/types/gcswif_import_storage_request.py +++ b/src/label_studio_sdk/types/gcswif_import_storage_request.py @@ -81,6 +81,11 @@ class GcswifImportStorageRequest(UncheckedBaseModel): A unique integer value identifying this project. """ + recursive_scan: typing.Optional[bool] = pydantic.Field(default=None) + """ + Perform recursive scan over the bucket content + """ + regex_filter: typing.Optional[str] = pydantic.Field(default=None) """ Cloud storage regex for filtering objects diff --git a/src/label_studio_sdk/types/import_api_request.py b/src/label_studio_sdk/types/import_api_request.py index 31432dace..9294f4b89 100644 --- a/src/label_studio_sdk/types/import_api_request.py +++ b/src/label_studio_sdk/types/import_api_request.py @@ -52,6 +52,11 @@ class ImportApiRequest(UncheckedBaseModel): Number of distinct annotators that processed the current task """ + precomputed_agreement: typing.Optional[float] = pydantic.Field(default=None) + """ + Average agreement score for the task + """ + predictions: typing.Optional[typing.List[PredictionRequest]] = None total_annotations: typing.Optional[int] = pydantic.Field(default=None) """ diff --git a/src/label_studio_sdk/types/local_files_import_storage.py b/src/label_studio_sdk/types/local_files_import_storage.py index 4e3cd4f9e..f9f89fb20 100644 --- a/src/label_studio_sdk/types/local_files_import_storage.py +++ b/src/label_studio_sdk/types/local_files_import_storage.py @@ -46,6 +46,11 @@ class LocalFilesImportStorage(UncheckedBaseModel): A unique integer value identifying this project. """ + recursive_scan: typing.Optional[bool] = pydantic.Field(default=None) + """ + Perform recursive scan over the directory content + """ + regex_filter: typing.Optional[str] = pydantic.Field(default=None) """ Regex for filtering objects diff --git a/src/label_studio_sdk/types/lse_organization.py b/src/label_studio_sdk/types/lse_organization.py index cfd182c7c..9a91c3d25 100644 --- a/src/label_studio_sdk/types/lse_organization.py +++ b/src/label_studio_sdk/types/lse_organization.py @@ -4,25 +4,16 @@ from .organization_billing import OrganizationBilling import datetime as dt import typing -from .lse_organization_custom_scripts_editable_by import LseOrganizationCustomScriptsEditableBy +from .role9e7enum import Role9E7Enum import pydantic -from .default_role_enum import DefaultRoleEnum from ..core.pydantic_utilities import IS_PYDANTIC_V2 class LseOrganization(UncheckedBaseModel): billing: OrganizationBilling created_at: dt.datetime - custom_scripts_editable_by: typing.Optional[LseOrganizationCustomScriptsEditableBy] = pydantic.Field(default=None) - """ - Set the minimum user role that can edit custom scripts in the UI. - - * `AD` - Administrator - * `MA` - Manager - """ - custom_scripts_enabled: str - default_role: typing.Optional[DefaultRoleEnum] = pydantic.Field(default=None) + default_role: typing.Optional[Role9E7Enum] = pydantic.Field(default=None) """ Default membership role for invited users diff --git a/src/label_studio_sdk/types/lse_organization_custom_scripts_editable_by.py b/src/label_studio_sdk/types/lse_organization_custom_scripts_editable_by.py deleted file mode 100644 index d4f8a55c7..000000000 --- a/src/label_studio_sdk/types/lse_organization_custom_scripts_editable_by.py +++ /dev/null @@ -1,7 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing -from .custom_scripts_editable_by_enum import CustomScriptsEditableByEnum -from .null_enum import NullEnum - -LseOrganizationCustomScriptsEditableBy = typing.Union[CustomScriptsEditableByEnum, NullEnum] diff --git a/src/label_studio_sdk/types/lse_project.py b/src/label_studio_sdk/types/lse_project.py index 29b04970d..62cdc27e1 100644 --- a/src/label_studio_sdk/types/lse_project.py +++ b/src/label_studio_sdk/types/lse_project.py @@ -2,8 +2,8 @@ from ..core.unchecked_base_model import UncheckedBaseModel import typing -from .assignment_settings import AssignmentSettings import pydantic +from .assignment_settings import AssignmentSettings import datetime as dt from .user_simple import UserSimple from .review_settings import ReviewSettings @@ -18,6 +18,11 @@ class LseProject(UncheckedBaseModel): make sure, that you use correct one(Project.objects.with_counts()) """ + agreement_threshold: typing.Optional[str] = pydantic.Field(default=None) + """ + Minimum percent agreement threshold for which minimum number of annotators must agree + """ + annotation_limit_count: typing.Optional[int] = None annotation_limit_percent: typing.Optional[str] = None annotator_evaluation_minimum_score: typing.Optional[str] = None @@ -97,6 +102,11 @@ class LseProject(UncheckedBaseModel): Label config in XML format. See more about it in documentation """ + max_additional_annotators_assignable: typing.Optional[int] = pydantic.Field(default=None) + """ + Maximum number of additional annotators that can be assigned to a low agreement task + """ + maximum_annotations: typing.Optional[int] = pydantic.Field(default=None) """ Maximum number of annotations for one task. If the number of annotations per task is equal or greater to this value, the task is completed (is_labeled=True) @@ -114,11 +124,7 @@ class LseProject(UncheckedBaseModel): Machine learning model version """ - num_tasks_with_annotations: int = pydantic.Field() - """ - Tasks with annotations count - """ - + num_tasks_with_annotations: typing.Optional[int] = None organization: typing.Optional[int] = None overlap_cohort_percentage: typing.Optional[int] = None parsed_label_config: typing.Optional[typing.Any] = None @@ -151,7 +157,11 @@ class LseProject(UncheckedBaseModel): If set, the annotator can view model predictions """ - show_ground_truth_first: typing.Optional[bool] = None + show_ground_truth_first: typing.Optional[bool] = pydantic.Field(default=None) + """ + Onboarding mode (true): show ground truth tasks first in the labeling stream + """ + show_instruction: typing.Optional[bool] = pydantic.Field(default=None) """ Show instructions to the annotator before they start diff --git a/src/label_studio_sdk/types/lse_project_counts.py b/src/label_studio_sdk/types/lse_project_counts.py new file mode 100644 index 000000000..68f489530 --- /dev/null +++ b/src/label_studio_sdk/types/lse_project_counts.py @@ -0,0 +1,46 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +import pydantic +import typing +from ..core.pydantic_utilities import IS_PYDANTIC_V2 + + +class LseProjectCounts(UncheckedBaseModel): + """ + Serializer get numbers from project queryset annotation, + make sure, that you use correct one(Project.objects.with_counts()) + """ + + finished_task_number: int + ground_truth_number: int = pydantic.Field() + """ + Honeypot annotation number in project + """ + + id: int + num_tasks_with_annotations: typing.Optional[int] = None + queue_done: int + queue_left: int + queue_total: str + rejected: int + review_total_tasks: int + reviewed_number: int + skipped_annotations_number: str + task_number: int = pydantic.Field() + """ + Total task number in project + """ + + total_annotations_number: str + total_predictions_number: int + useful_annotation_number: typing.Optional[int] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/lse_project_create.py b/src/label_studio_sdk/types/lse_project_create.py index 5072f749c..c18785584 100644 --- a/src/label_studio_sdk/types/lse_project_create.py +++ b/src/label_studio_sdk/types/lse_project_create.py @@ -126,7 +126,11 @@ class LseProjectCreate(UncheckedBaseModel): If set, the annotator can view model predictions """ - show_ground_truth_first: typing.Optional[bool] = None + show_ground_truth_first: typing.Optional[bool] = pydantic.Field(default=None) + """ + Onboarding mode (true): show ground truth tasks first in the labeling stream + """ + show_instruction: typing.Optional[bool] = pydantic.Field(default=None) """ Show instructions to the annotator before they start diff --git a/src/label_studio_sdk/types/lse_project_create_sampling.py b/src/label_studio_sdk/types/lse_project_create_sampling.py index 41ade7ac7..9979401ba 100644 --- a/src/label_studio_sdk/types/lse_project_create_sampling.py +++ b/src/label_studio_sdk/types/lse_project_create_sampling.py @@ -1,7 +1,7 @@ # This file was auto-generated by Fern from our API Definition. import typing -from .sampling_enum import SamplingEnum +from .sampling_de5enum import SamplingDe5Enum from .null_enum import NullEnum -LseProjectCreateSampling = typing.Union[SamplingEnum, NullEnum] +LseProjectCreateSampling = typing.Union[SamplingDe5Enum, NullEnum] diff --git a/src/label_studio_sdk/types/lse_project_response.py b/src/label_studio_sdk/types/lse_project_response.py new file mode 100644 index 000000000..d6d104030 --- /dev/null +++ b/src/label_studio_sdk/types/lse_project_response.py @@ -0,0 +1,221 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +import typing +import pydantic +from .assignment_settings import AssignmentSettings +import datetime as dt +from .user_simple import UserSimple +from .review_settings import ReviewSettings +from .lse_project_response_sampling import LseProjectResponseSampling +from .lse_project_response_skip_queue import LseProjectResponseSkipQueue +from ..core.pydantic_utilities import IS_PYDANTIC_V2 + + +class LseProjectResponse(UncheckedBaseModel): + """ + Serializer for project response, combining all the serializers for different roles. Don't use it except for Spectacular/Fern definitions. + """ + + agreement_threshold: typing.Optional[str] = pydantic.Field(default=None) + """ + Minimum percent agreement threshold for which minimum number of annotators must agree + """ + + allow_stream: bool + annotation_limit_count: typing.Optional[int] = None + annotation_limit_percent: typing.Optional[str] = None + annotator_evaluation_minimum_score: typing.Optional[str] = None + annotator_evaluation_minimum_tasks: typing.Optional[int] = None + assignment_settings: AssignmentSettings + color: typing.Optional[str] = None + comment_classification_config: typing.Optional[str] = None + config_has_control_tags: bool = pydantic.Field() + """ + Flag to detect is project ready for labeling + """ + + config_suitable_for_bulk_annotation: bool = pydantic.Field() + """ + Flag to detect is project ready for bulk annotation + """ + + control_weights: typing.Optional[typing.Optional[typing.Any]] = None + created_at: dt.datetime + created_by: typing.Optional[UserSimple] = pydantic.Field(default=None) + """ + Project owner + """ + + custom_script: typing.Optional[str] = None + custom_task_lock_ttl: typing.Optional[int] = pydantic.Field(default=None) + """ + TTL in seconds for task reservations, on new and existing tasks + """ + + data_types: typing.Optional[typing.Any] = None + description: typing.Optional[str] = pydantic.Field(default=None) + """ + Project description + """ + + duplication_done: typing.Optional[bool] = None + duplication_status: typing.Optional[str] = None + enable_empty_annotation: typing.Optional[bool] = pydantic.Field(default=None) + """ + Allow annotators to submit empty annotations + """ + + evaluate_predictions_automatically: typing.Optional[bool] = pydantic.Field(default=None) + """ + Retrieve and display predictions when loading a task + """ + + expert_instruction: typing.Optional[str] = pydantic.Field(default=None) + """ + Labeling instructions in HTML format + """ + + finished_task_number: int = pydantic.Field() + """ + Finished tasks + """ + + ground_truth_number: int = pydantic.Field() + """ + Honeypot annotation number in project + """ + + id: int + is_draft: typing.Optional[bool] = pydantic.Field(default=None) + """ + Whether or not the project is in the middle of being created + """ + + is_published: typing.Optional[bool] = pydantic.Field(default=None) + """ + Whether or not the project is published to annotators + """ + + label_config: typing.Optional[str] = pydantic.Field(default=None) + """ + Label config in XML format. See more about it in documentation + """ + + max_additional_annotators_assignable: typing.Optional[int] = pydantic.Field(default=None) + """ + Maximum number of additional annotators that can be assigned to a low agreement task + """ + + maximum_annotations: typing.Optional[int] = pydantic.Field(default=None) + """ + Maximum number of annotations for one task. If the number of annotations per task is equal or greater to this value, the task is completed (is_labeled=True) + """ + + members: str + members_count: int + min_annotations_to_start_training: typing.Optional[int] = pydantic.Field(default=None) + """ + Minimum number of completed tasks after which model training is started + """ + + model_version: typing.Optional[str] = pydantic.Field(default=None) + """ + Machine learning model version + """ + + num_tasks_with_annotations: int + organization: typing.Optional[int] = None + overlap_cohort_percentage: typing.Optional[int] = None + parsed_label_config: typing.Optional[typing.Any] = None + pause_on_failed_annotator_evaluation: typing.Optional[bool] = None + pinned_at: typing.Optional[dt.datetime] = pydantic.Field(default=None) + """ + Pinned date and time + """ + + prompts: str + queue_done: int + queue_left: int + queue_total: int + ready: bool + rejected: int + require_comment_on_skip: typing.Optional[bool] = None + reveal_preannotations_interactively: typing.Optional[bool] = pydantic.Field(default=None) + """ + Reveal pre-annotations interactively + """ + + review_settings: ReviewSettings + review_total_tasks: int + reviewed_number: int + reviewer_queue_total: int + sampling: typing.Optional[LseProjectResponseSampling] = None + show_annotation_history: typing.Optional[bool] = pydantic.Field(default=None) + """ + Show annotation history to annotator + """ + + show_collab_predictions: typing.Optional[bool] = pydantic.Field(default=None) + """ + If set, the annotator can view model predictions + """ + + show_ground_truth_first: typing.Optional[bool] = pydantic.Field(default=None) + """ + Onboarding mode (true): show ground truth tasks first in the labeling stream + """ + + show_instruction: typing.Optional[bool] = pydantic.Field(default=None) + """ + Show instructions to the annotator before they start + """ + + show_overlap_first: typing.Optional[bool] = None + show_skip_button: typing.Optional[bool] = pydantic.Field(default=None) + """ + Show a skip button in interface and allow annotators to skip the task + """ + + show_unused_data_columns_to_annotators: typing.Optional[bool] = None + skip_queue: typing.Optional[LseProjectResponseSkipQueue] = None + skipped_annotations_number: int + start_training_on_annotation_update: bool = pydantic.Field() + """ + Start model training after any annotations are submitted or updated + """ + + task_data_login: typing.Optional[str] = pydantic.Field(default=None) + """ + Task data credentials: login + """ + + task_data_password: typing.Optional[str] = pydantic.Field(default=None) + """ + Task data credentials: password + """ + + task_number: int = pydantic.Field() + """ + Total task number in project + """ + + title: typing.Optional[str] = pydantic.Field(default=None) + """ + Project name. Must be between 3 and 50 characters long. + """ + + total_annotations_number: int + total_predictions_number: typing.Optional[int] = None + useful_annotation_number: typing.Optional[int] = None + workspace: str + workspace_title: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/lse_project_response_sampling.py b/src/label_studio_sdk/types/lse_project_response_sampling.py new file mode 100644 index 000000000..14a82d194 --- /dev/null +++ b/src/label_studio_sdk/types/lse_project_response_sampling.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from .sampling_de5enum import SamplingDe5Enum +from .null_enum import NullEnum + +LseProjectResponseSampling = typing.Union[SamplingDe5Enum, NullEnum] diff --git a/src/label_studio_sdk/types/lse_project_response_skip_queue.py b/src/label_studio_sdk/types/lse_project_response_skip_queue.py new file mode 100644 index 000000000..5656448a1 --- /dev/null +++ b/src/label_studio_sdk/types/lse_project_response_skip_queue.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from .skip_queue_enum import SkipQueueEnum +from .null_enum import NullEnum + +LseProjectResponseSkipQueue = typing.Union[SkipQueueEnum, NullEnum] diff --git a/src/label_studio_sdk/types/lse_project_sampling.py b/src/label_studio_sdk/types/lse_project_sampling.py index fa58a1f30..383addf49 100644 --- a/src/label_studio_sdk/types/lse_project_sampling.py +++ b/src/label_studio_sdk/types/lse_project_sampling.py @@ -1,7 +1,7 @@ # This file was auto-generated by Fern from our API Definition. import typing -from .sampling_enum import SamplingEnum +from .sampling_de5enum import SamplingDe5Enum from .null_enum import NullEnum -LseProjectSampling = typing.Union[SamplingEnum, NullEnum] +LseProjectSampling = typing.Union[SamplingDe5Enum, NullEnum] diff --git a/src/label_studio_sdk/types/lse_project_update.py b/src/label_studio_sdk/types/lse_project_update.py index 2f7417a74..88b5d005a 100644 --- a/src/label_studio_sdk/types/lse_project_update.py +++ b/src/label_studio_sdk/types/lse_project_update.py @@ -2,8 +2,8 @@ from ..core.unchecked_base_model import UncheckedBaseModel import typing -from .assignment_settings import AssignmentSettings import pydantic +from .assignment_settings import AssignmentSettings import datetime as dt from .user_simple import UserSimple from .review_settings import ReviewSettings @@ -18,6 +18,11 @@ class LseProjectUpdate(UncheckedBaseModel): make sure, that you use correct one(Project.objects.with_counts()) """ + agreement_threshold: typing.Optional[str] = pydantic.Field(default=None) + """ + Minimum percent agreement threshold for which minimum number of annotators must agree + """ + annotation_limit_count: typing.Optional[int] = None annotation_limit_percent: typing.Optional[str] = None annotator_evaluation_minimum_score: typing.Optional[str] = None @@ -94,6 +99,11 @@ class LseProjectUpdate(UncheckedBaseModel): Label config in XML format. See more about it in documentation """ + max_additional_annotators_assignable: typing.Optional[int] = pydantic.Field(default=None) + """ + Maximum number of additional annotators that can be assigned to a low agreement task + """ + maximum_annotations: typing.Optional[int] = pydantic.Field(default=None) """ Maximum number of annotations for one task. If the number of annotations per task is equal or greater to this value, the task is completed (is_labeled=True) @@ -144,7 +154,11 @@ class LseProjectUpdate(UncheckedBaseModel): If set, the annotator can view model predictions """ - show_ground_truth_first: typing.Optional[bool] = None + show_ground_truth_first: typing.Optional[bool] = pydantic.Field(default=None) + """ + Onboarding mode (true): show ground truth tasks first in the labeling stream + """ + show_instruction: typing.Optional[bool] = pydantic.Field(default=None) """ Show instructions to the annotator before they start diff --git a/src/label_studio_sdk/types/lse_project_update_sampling.py b/src/label_studio_sdk/types/lse_project_update_sampling.py index 0763b90e4..206e123f2 100644 --- a/src/label_studio_sdk/types/lse_project_update_sampling.py +++ b/src/label_studio_sdk/types/lse_project_update_sampling.py @@ -1,7 +1,7 @@ # This file was auto-generated by Fern from our API Definition. import typing -from .sampling_enum import SamplingEnum +from .sampling_de5enum import SamplingDe5Enum from .null_enum import NullEnum -LseProjectUpdateSampling = typing.Union[SamplingEnum, NullEnum] +LseProjectUpdateSampling = typing.Union[SamplingDe5Enum, NullEnum] diff --git a/src/label_studio_sdk/types/lse_task.py b/src/label_studio_sdk/types/lse_task.py index 2d945fc25..bf926c9b0 100644 --- a/src/label_studio_sdk/types/lse_task.py +++ b/src/label_studio_sdk/types/lse_task.py @@ -11,7 +11,7 @@ class LseTask(UncheckedBaseModel): """ - Task Serializer with project scheme configs validation + Data Manager Task Serializer with FSM state support. """ agreement: str @@ -72,6 +72,11 @@ class LseTask(UncheckedBaseModel): Number of distinct annotators that processed the current task """ + precomputed_agreement: typing.Optional[float] = pydantic.Field(default=None) + """ + Average agreement score for the task + """ + predictions: typing.List[LseTaskPredictionsItem] = pydantic.Field() """ Predictions for this task @@ -85,11 +90,18 @@ class LseTask(UncheckedBaseModel): Project ID for this task """ + review_time: int = pydantic.Field() + """ + Calculate total review time for this task from MetricInTimeBucket records. + Returns time in seconds. + """ + reviewed: typing.Optional[bool] = None reviewers: typing.List[typing.Dict[str, typing.Optional[typing.Any]]] reviewers_count: int reviews_accepted: typing.Optional[int] = None reviews_rejected: typing.Optional[int] = None + state: str storage_filename: str total_annotations: typing.Optional[int] = None total_predictions: typing.Optional[int] = None diff --git a/src/label_studio_sdk/types/lse_task_serializer_for_annotators.py b/src/label_studio_sdk/types/lse_task_serializer_for_annotators.py index 1771d45f3..55586f855 100644 --- a/src/label_studio_sdk/types/lse_task_serializer_for_annotators.py +++ b/src/label_studio_sdk/types/lse_task_serializer_for_annotators.py @@ -11,7 +11,7 @@ class LseTaskSerializerForAnnotators(UncheckedBaseModel): """ - Task Serializer with project scheme configs validation + Data Manager Task Serializer with FSM state support. """ annotations: str diff --git a/src/label_studio_sdk/types/lse_task_serializer_for_reviewers.py b/src/label_studio_sdk/types/lse_task_serializer_for_reviewers.py index eeea92c75..1552890bc 100644 --- a/src/label_studio_sdk/types/lse_task_serializer_for_reviewers.py +++ b/src/label_studio_sdk/types/lse_task_serializer_for_reviewers.py @@ -11,7 +11,7 @@ class LseTaskSerializerForReviewers(UncheckedBaseModel): """ - Task Serializer with project scheme configs validation + Data Manager Task Serializer with FSM state support. """ agreement: str @@ -72,6 +72,11 @@ class LseTaskSerializerForReviewers(UncheckedBaseModel): Number of distinct annotators that processed the current task """ + precomputed_agreement: typing.Optional[float] = pydantic.Field(default=None) + """ + Average agreement score for the task + """ + predictions: typing.List[LseTaskSerializerForReviewersPredictionsItem] = pydantic.Field() """ Predictions for this task @@ -85,11 +90,18 @@ class LseTaskSerializerForReviewers(UncheckedBaseModel): Project ID for this task """ + review_time: int = pydantic.Field() + """ + Calculate total review time for this task from MetricInTimeBucket records. + Returns time in seconds. + """ + reviewed: typing.Optional[bool] = None reviewers: typing.List[typing.Dict[str, typing.Optional[typing.Any]]] reviewers_count: int reviews_accepted: typing.Optional[int] = None reviews_rejected: typing.Optional[int] = None + state: str storage_filename: str total_annotations: typing.Optional[int] = None total_predictions: typing.Optional[int] = None diff --git a/src/label_studio_sdk/types/lse_user.py b/src/label_studio_sdk/types/lse_user.py index 5f146708c..b374650e2 100644 --- a/src/label_studio_sdk/types/lse_user.py +++ b/src/label_studio_sdk/types/lse_user.py @@ -35,6 +35,7 @@ class LseUser(UncheckedBaseModel): last_name: typing.Optional[str] = None lse_fields: LseFields org_membership: typing.List[OrganizationMembership] + organization_membership: OrganizationMembership pause: str phone: typing.Optional[str] = None username: str diff --git a/src/label_studio_sdk/types/lse_user_api.py b/src/label_studio_sdk/types/lse_user_api.py index b7ca5dd85..8ac956e36 100644 --- a/src/label_studio_sdk/types/lse_user_api.py +++ b/src/label_studio_sdk/types/lse_user_api.py @@ -33,6 +33,7 @@ class LseUserApi(UncheckedBaseModel): last_activity: dt.datetime last_name: typing.Optional[str] = None org_membership: typing.List[OrganizationMembership] + organization_membership: OrganizationMembership phone: typing.Optional[str] = None username: str 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 new file mode 100644 index 000000000..01220cfb8 --- /dev/null +++ b/src/label_studio_sdk/types/organization_permission.py @@ -0,0 +1,34 @@ +# This file was auto-generated by Fern from our API Definition. + +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: typing.List[Default165Enum] + group: typing.Optional[str] = None + id: int + label: typing.Optional[str] = None + options: typing.List[Options165Enum] + organization: int + permission: str + roles: typing.Optional[typing.List[Role9E7Enum]] = pydantic.Field(default=None) + """ + Explicit roles that have this permission within the organization. + """ + + 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 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/organization_permission_request.py b/src/label_studio_sdk/types/organization_permission_request.py new file mode 100644 index 000000000..6f333242a --- /dev/null +++ b/src/label_studio_sdk/types/organization_permission_request.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +import typing +from .role9e7enum import Role9E7Enum +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2 + + +class OrganizationPermissionRequest(UncheckedBaseModel): + permission: str + roles: typing.Optional[typing.List[Role9E7Enum]] = pydantic.Field(default=None) + """ + Explicit roles that have this permission within the organization. + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/paginated_lse_project_counts_list.py b/src/label_studio_sdk/types/paginated_lse_project_counts_list.py new file mode 100644 index 000000000..172ae23ac --- /dev/null +++ b/src/label_studio_sdk/types/paginated_lse_project_counts_list.py @@ -0,0 +1,23 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +import typing +from .lse_project_counts import LseProjectCounts +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class PaginatedLseProjectCountsList(UncheckedBaseModel): + count: int + next: typing.Optional[str] = None + previous: typing.Optional[str] = None + results: typing.List[LseProjectCounts] + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/paginated_project_member.py b/src/label_studio_sdk/types/paginated_project_member.py index aaa72a4ed..5ae248237 100644 --- a/src/label_studio_sdk/types/paginated_project_member.py +++ b/src/label_studio_sdk/types/paginated_project_member.py @@ -35,6 +35,7 @@ class PaginatedProjectMember(UncheckedBaseModel): last_name: typing.Optional[str] = None lse_fields: LseFields org_membership: typing.List[OrganizationMembership] + organization_membership: OrganizationMembership pause: str phone: typing.Optional[str] = None project_role: str diff --git a/src/label_studio_sdk/types/paginated_project_subset_tasks_response_list.py b/src/label_studio_sdk/types/paginated_project_subset_tasks_response_list.py new file mode 100644 index 000000000..47937908f --- /dev/null +++ b/src/label_studio_sdk/types/paginated_project_subset_tasks_response_list.py @@ -0,0 +1,23 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +import typing +from .project_subset_tasks_response import ProjectSubsetTasksResponse +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class PaginatedProjectSubsetTasksResponseList(UncheckedBaseModel): + count: int + next: typing.Optional[str] = None + previous: typing.Optional[str] = None + results: typing.List[ProjectSubsetTasksResponse] + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/project.py b/src/label_studio_sdk/types/project.py index 8560ddd5d..8cc0d394a 100644 --- a/src/label_studio_sdk/types/project.py +++ b/src/label_studio_sdk/types/project.py @@ -126,7 +126,11 @@ class Project(UncheckedBaseModel): If set, the annotator can view model predictions """ - show_ground_truth_first: typing.Optional[bool] = None + show_ground_truth_first: typing.Optional[bool] = pydantic.Field(default=None) + """ + Onboarding mode (true): show ground truth tasks first in the labeling stream + """ + show_instruction: typing.Optional[bool] = pydantic.Field(default=None) """ Show instructions to the annotator before they start diff --git a/src/label_studio_sdk/types/project_member.py b/src/label_studio_sdk/types/project_member.py new file mode 100644 index 000000000..352202892 --- /dev/null +++ b/src/label_studio_sdk/types/project_member.py @@ -0,0 +1,19 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +import typing +import pydantic + + +class ProjectMember(UncheckedBaseModel): + user: int + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/project_role.py b/src/label_studio_sdk/types/project_role.py new file mode 100644 index 000000000..5479cac28 --- /dev/null +++ b/src/label_studio_sdk/types/project_role.py @@ -0,0 +1,35 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +from .role9e7enum import Role9E7Enum +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +import typing + + +class ProjectRole(UncheckedBaseModel): + id: int + project: int + role: Role9E7Enum = pydantic.Field() + """ + User role in project + + * `OW` - Owner + * `AD` - Administrator + * `MA` - Manager + * `RE` - Reviewer + * `AN` - Annotator + * `DI` - Deactivated + * `NO` - Not Activated + """ + + user: int + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/project_sampling.py b/src/label_studio_sdk/types/project_sampling.py index ee1079d71..a3aab25e4 100644 --- a/src/label_studio_sdk/types/project_sampling.py +++ b/src/label_studio_sdk/types/project_sampling.py @@ -1,7 +1,7 @@ # This file was auto-generated by Fern from our API Definition. import typing -from .sampling_enum import SamplingEnum +from .sampling_de5enum import SamplingDe5Enum from .null_enum import NullEnum -ProjectSampling = typing.Union[SamplingEnum, NullEnum] +ProjectSampling = typing.Union[SamplingDe5Enum, NullEnum] diff --git a/src/label_studio_sdk/types/project_subset_item.py b/src/label_studio_sdk/types/project_subset_item.py new file mode 100644 index 000000000..1fcb35ec2 --- /dev/null +++ b/src/label_studio_sdk/types/project_subset_item.py @@ -0,0 +1,21 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +import typing +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class ProjectSubsetItem(UncheckedBaseModel): + columns_schema: typing.Optional[typing.List[typing.Dict[str, typing.Optional[typing.Any]]]] = None + count: int + subset: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/project_subset_task_item.py b/src/label_studio_sdk/types/project_subset_task_item.py new file mode 100644 index 000000000..dd418752b --- /dev/null +++ b/src/label_studio_sdk/types/project_subset_task_item.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +import typing +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +import pydantic + + +class ProjectSubsetTaskItem(UncheckedBaseModel): + data: typing.Dict[str, typing.Optional[typing.Any]] + error: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + ground_truth: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + id: typing.Optional[int] = None + prediction: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + score: typing.Optional[float] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/project_subset_tasks_response.py b/src/label_studio_sdk/types/project_subset_tasks_response.py new file mode 100644 index 000000000..21c24cece --- /dev/null +++ b/src/label_studio_sdk/types/project_subset_tasks_response.py @@ -0,0 +1,27 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.unchecked_base_model import UncheckedBaseModel +import typing +import pydantic +from .project_subset_task_item import ProjectSubsetTaskItem +from ..core.pydantic_utilities import IS_PYDANTIC_V2 + + +class ProjectSubsetTasksResponse(UncheckedBaseModel): + next_cursor: typing.Optional[str] = None + previous_cursor: typing.Optional[str] = None + task_count: typing.Optional[int] = pydantic.Field(default=None) + """ + Present only when include_total=true + """ + + task_result_list: typing.List[ProjectSubsetTaskItem] + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/label_studio_sdk/types/project_template.py b/src/label_studio_sdk/types/project_template.py index eddd5cfb0..c764b789f 100644 --- a/src/label_studio_sdk/types/project_template.py +++ b/src/label_studio_sdk/types/project_template.py @@ -13,7 +13,7 @@ class ProjectTemplate(UncheckedBaseModel): created_by: typing.Optional[int] = None custom_script: typing.Optional[str] = pydantic.Field(default=None) """ - custom script for projects created from this template + custom script (Plugin) for projects created from this template """ description: typing.Optional[str] = None diff --git a/src/label_studio_sdk/types/project_template_request.py b/src/label_studio_sdk/types/project_template_request.py index c55507957..da28bf05d 100644 --- a/src/label_studio_sdk/types/project_template_request.py +++ b/src/label_studio_sdk/types/project_template_request.py @@ -11,7 +11,7 @@ class ProjectTemplateRequest(UncheckedBaseModel): created_by: typing.Optional[int] = None custom_script: typing.Optional[str] = pydantic.Field(default=None) """ - custom script for projects created from this template + custom script (Plugin) for projects created from this template """ description: typing.Optional[str] = None diff --git a/src/label_studio_sdk/types/review_settings.py b/src/label_studio_sdk/types/review_settings.py index 9ccfd0605..afb39d3ee 100644 --- a/src/label_studio_sdk/types/review_settings.py +++ b/src/label_studio_sdk/types/review_settings.py @@ -5,6 +5,7 @@ import pydantic from .review_settings_requeue_rejected_tasks_mode import ReviewSettingsRequeueRejectedTasksMode from .review_settings_review_criteria import ReviewSettingsReviewCriteria +from .review_settings_sampling import ReviewSettingsSampling from ..core.pydantic_utilities import IS_PYDANTIC_V2 @@ -54,6 +55,19 @@ class ReviewSettings(UncheckedBaseModel): When set True, review queue is built only from manually assigned tasks """ + review_task_limit_percent: typing.Optional[str] = pydantic.Field(default=None) + """ + Percent of tasks to include in review stream (0-100). Null/0 disables. + """ + + sampling: typing.Optional[ReviewSettingsSampling] = pydantic.Field(default=None) + """ + Task sampling strategy in the review stream (by task id or random) + + * `task_id` - By Task ID + * `random` - Random + """ + show_agreement_to_reviewers: typing.Optional[bool] = pydantic.Field(default=None) """ Show the agreement column to reviewers diff --git a/src/label_studio_sdk/types/review_settings_request.py b/src/label_studio_sdk/types/review_settings_request.py index e42a24869..7faf2f0f0 100644 --- a/src/label_studio_sdk/types/review_settings_request.py +++ b/src/label_studio_sdk/types/review_settings_request.py @@ -5,6 +5,7 @@ import pydantic from .review_settings_request_requeue_rejected_tasks_mode import ReviewSettingsRequestRequeueRejectedTasksMode from .review_settings_request_review_criteria import ReviewSettingsRequestReviewCriteria +from .review_settings_request_sampling import ReviewSettingsRequestSampling from ..core.pydantic_utilities import IS_PYDANTIC_V2 @@ -54,6 +55,19 @@ class ReviewSettingsRequest(UncheckedBaseModel): When set True, review queue is built only from manually assigned tasks """ + review_task_limit_percent: typing.Optional[str] = pydantic.Field(default=None) + """ + Percent of tasks to include in review stream (0-100). Null/0 disables. + """ + + sampling: typing.Optional[ReviewSettingsRequestSampling] = pydantic.Field(default=None) + """ + Task sampling strategy in the review stream (by task id or random) + + * `task_id` - By Task ID + * `random` - Random + """ + show_agreement_to_reviewers: typing.Optional[bool] = pydantic.Field(default=None) """ Show the agreement column to reviewers diff --git a/src/label_studio_sdk/types/review_settings_request_sampling.py b/src/label_studio_sdk/types/review_settings_request_sampling.py new file mode 100644 index 000000000..5187b391f --- /dev/null +++ b/src/label_studio_sdk/types/review_settings_request_sampling.py @@ -0,0 +1,8 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from .review_settings_sampling_enum import ReviewSettingsSamplingEnum +from .blank_enum import BlankEnum +from .null_enum import NullEnum + +ReviewSettingsRequestSampling = typing.Union[ReviewSettingsSamplingEnum, BlankEnum, NullEnum] diff --git a/src/label_studio_sdk/types/review_settings_sampling.py b/src/label_studio_sdk/types/review_settings_sampling.py new file mode 100644 index 000000000..d9cdeb1af --- /dev/null +++ b/src/label_studio_sdk/types/review_settings_sampling.py @@ -0,0 +1,8 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from .review_settings_sampling_enum import ReviewSettingsSamplingEnum +from .blank_enum import BlankEnum +from .null_enum import NullEnum + +ReviewSettingsSampling = typing.Union[ReviewSettingsSamplingEnum, BlankEnum, NullEnum] diff --git a/src/label_studio_sdk/types/review_settings_sampling_enum.py b/src/label_studio_sdk/types/review_settings_sampling_enum.py new file mode 100644 index 000000000..95f6eb83f --- /dev/null +++ b/src/label_studio_sdk/types/review_settings_sampling_enum.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ReviewSettingsSamplingEnum = typing.Union[typing.Literal["task_id", "random"], typing.Any] diff --git a/src/label_studio_sdk/types/sampling_enum.py b/src/label_studio_sdk/types/sampling_de5enum.py similarity index 84% rename from src/label_studio_sdk/types/sampling_enum.py rename to src/label_studio_sdk/types/sampling_de5enum.py index b94881c72..37b7ea282 100644 --- a/src/label_studio_sdk/types/sampling_enum.py +++ b/src/label_studio_sdk/types/sampling_de5enum.py @@ -2,6 +2,6 @@ import typing -SamplingEnum = typing.Union[ +SamplingDe5Enum = typing.Union[ typing.Literal["Sequential sampling", "Uniform sampling", "Uncertainty sampling"], typing.Any ] diff --git a/src/label_studio_sdk/types/task_assignment.py b/src/label_studio_sdk/types/task_assignment.py index 0d0d18c03..b1d0304a6 100644 --- a/src/label_studio_sdk/types/task_assignment.py +++ b/src/label_studio_sdk/types/task_assignment.py @@ -9,6 +9,17 @@ class TaskAssignment(UncheckedBaseModel): + """ + TaskAssignment Serializer with FSM state support. + + Note: The 'state' field will be populated from the queryset annotation + if present, preventing N+1 queries. Use .with_state() on your queryset. + + The state field display is controlled by both: + - fflag_feat_fit_568_finite_state_management (FSM background calculations) + - fflag_feat_fit_710_fsm_state_fields (state field display in APIs) + """ + assignee: int = pydantic.Field() """ Assigned user @@ -20,6 +31,7 @@ class TaskAssignment(UncheckedBaseModel): """ id: int + state: str task: int = pydantic.Field() """ Assigned task diff --git a/src/label_studio_sdk/types/who_am_i_user.py b/src/label_studio_sdk/types/who_am_i_user.py index ac7418cbc..91648ab49 100644 --- a/src/label_studio_sdk/types/who_am_i_user.py +++ b/src/label_studio_sdk/types/who_am_i_user.py @@ -35,7 +35,9 @@ class WhoAmIUser(UncheckedBaseModel): last_name: typing.Optional[str] = None lse_fields: WhoAmILseFields org_membership: typing.List[OrganizationMembership] + organization_membership: OrganizationMembership pause: str + permissions: typing.List[str] phone: typing.Optional[str] = None username: str diff --git a/src/label_studio_sdk/users/client.py b/src/label_studio_sdk/users/client.py index fbd446a6f..dd4947ba4 100644 --- a/src/label_studio_sdk/users/client.py +++ b/src/label_studio_sdk/users/client.py @@ -26,6 +26,12 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def get_current_user(self, *, request_options: typing.Optional[RequestOptions] = None) -> LseUserApi: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get info about the currently authenticated user. Parameters @@ -84,6 +90,12 @@ def update_current_user( request_options: typing.Optional[RequestOptions] = None, ) -> LseUserApi: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update details for the currently authenticated user. Parameters @@ -739,6 +751,12 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def get_current_user(self, *, request_options: typing.Optional[RequestOptions] = None) -> LseUserApi: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get info about the currently authenticated user. Parameters @@ -805,6 +823,12 @@ async def update_current_user( request_options: typing.Optional[RequestOptions] = None, ) -> LseUserApi: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update details for the currently authenticated user. Parameters diff --git a/src/label_studio_sdk/workspaces/__init__.py b/src/label_studio_sdk/workspaces/__init__.py index ff24acaa4..21c06996f 100644 --- a/src/label_studio_sdk/workspaces/__init__.py +++ b/src/label_studio_sdk/workspaces/__init__.py @@ -1,5 +1,5 @@ # This file was auto-generated by Fern from our API Definition. -from . import members +from . import members, projects -__all__ = ["members"] +__all__ = ["members", "projects"] diff --git a/src/label_studio_sdk/workspaces/client.py b/src/label_studio_sdk/workspaces/client.py index e7a0a5f71..0b9a6d7c3 100644 --- a/src/label_studio_sdk/workspaces/client.py +++ b/src/label_studio_sdk/workspaces/client.py @@ -3,6 +3,7 @@ import typing from ..core.client_wrapper import SyncClientWrapper from .members.client import MembersClient +from .projects.client import ProjectsClient from ..core.request_options import RequestOptions from ..types.workspace import Workspace from ..core.unchecked_base_model import construct_type @@ -11,6 +12,7 @@ from ..core.jsonable_encoder import jsonable_encoder from ..core.client_wrapper import AsyncClientWrapper from .members.client import AsyncMembersClient +from .projects.client import AsyncProjectsClient # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -20,6 +22,7 @@ class WorkspacesClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper self.members = MembersClient(client_wrapper=self._client_wrapper) + self.projects = ProjectsClient(client_wrapper=self._client_wrapper) def list( self, @@ -29,6 +32,12 @@ def list( request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[Workspace]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all workspaces for your organization. Workspaces in Label Studio let you organize your projects and users into separate spaces. This is useful for managing different teams, departments, or projects within your organization. For more information, see the [Workspaces documentation](https://docs.humansignal.com/workspaces). Parameters @@ -90,6 +99,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> Workspace: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new workspace. Workspaces in Label Studio let you organize your projects and users into separate spaces. This is useful for managing different teams, departments, or projects within your organization. For more information, see the [Workspaces documentation](https://docs.humansignal.com/workspaces). Parameters @@ -159,6 +174,12 @@ def create( def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> Workspace: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve details for a specific workspace by ID. Parameters @@ -205,6 +226,12 @@ def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = Non def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific workspace by ID. Parameters @@ -254,6 +281,12 @@ def update( request_options: typing.Optional[RequestOptions] = None, ) -> Workspace: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update settings for a specific workspace by ID. Parameters @@ -328,6 +361,7 @@ class AsyncWorkspacesClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper self.members = AsyncMembersClient(client_wrapper=self._client_wrapper) + self.projects = AsyncProjectsClient(client_wrapper=self._client_wrapper) async def list( self, @@ -337,6 +371,12 @@ async def list( request_options: typing.Optional[RequestOptions] = None, ) -> typing.List[Workspace]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
List all workspaces for your organization. Workspaces in Label Studio let you organize your projects and users into separate spaces. This is useful for managing different teams, departments, or projects within your organization. For more information, see the [Workspaces documentation](https://docs.humansignal.com/workspaces). Parameters @@ -406,6 +446,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> Workspace: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Create a new workspace. Workspaces in Label Studio let you organize your projects and users into separate spaces. This is useful for managing different teams, departments, or projects within your organization. For more information, see the [Workspaces documentation](https://docs.humansignal.com/workspaces). Parameters @@ -483,6 +529,12 @@ async def main() -> None: async def get(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> Workspace: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve details for a specific workspace by ID. Parameters @@ -537,6 +589,12 @@ async def main() -> None: async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Delete a specific workspace by ID. Parameters @@ -594,6 +652,12 @@ async def update( request_options: typing.Optional[RequestOptions] = None, ) -> Workspace: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Update settings for a specific workspace by ID. Parameters diff --git a/src/label_studio_sdk/workspaces/members/bulk/client.py b/src/label_studio_sdk/workspaces/members/bulk/client.py index 5b38c4b8d..bfe74751d 100644 --- a/src/label_studio_sdk/workspaces/members/bulk/client.py +++ b/src/label_studio_sdk/workspaces/members/bulk/client.py @@ -29,6 +29,12 @@ def post( request_options: typing.Optional[RequestOptions] = None, ) -> BulkPostResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Assign workspace members in bulk. Parameters @@ -91,6 +97,12 @@ def post( def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> BulkDeleteResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Unassign workspace members in bulk. Allows the same request body as bulk assign. Parameters @@ -150,6 +162,12 @@ async def post( request_options: typing.Optional[RequestOptions] = None, ) -> BulkPostResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Assign workspace members in bulk. Parameters @@ -220,6 +238,12 @@ async def main() -> None: async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> BulkDeleteResponse: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Unassign workspace members in bulk. Allows the same request body as bulk assign. Parameters diff --git a/src/label_studio_sdk/workspaces/members/client.py b/src/label_studio_sdk/workspaces/members/client.py index 3fe780b19..e13efd663 100644 --- a/src/label_studio_sdk/workspaces/members/client.py +++ b/src/label_studio_sdk/workspaces/members/client.py @@ -29,6 +29,12 @@ def list( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[WorkspaceMemberList]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all members in a specific workspace. Parameters @@ -82,6 +88,12 @@ def create( request_options: typing.Optional[RequestOptions] = None, ) -> WorkspaceMemberCreate: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Add a new workspace member by user ID. Parameters @@ -143,6 +155,12 @@ def create( def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Remove a specific member by ID from a workspace. This endpoint expects an object like `{"user_id": 123}`. Parameters @@ -191,6 +209,12 @@ async def list( self, id: int, *, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[WorkspaceMemberList]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Get a list of all members in a specific workspace. Parameters @@ -252,6 +276,12 @@ async def create( request_options: typing.Optional[RequestOptions] = None, ) -> WorkspaceMemberCreate: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Add a new workspace member by user ID. Parameters @@ -321,6 +351,12 @@ async def main() -> None: async def delete(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Remove a specific member by ID from a workspace. This endpoint expects an object like `{"user_id": 123}`. Parameters diff --git a/src/label_studio_sdk/workspaces/members/paginated/client.py b/src/label_studio_sdk/workspaces/members/paginated/client.py index d7377bedf..d0efc5170 100644 --- a/src/label_studio_sdk/workspaces/members/paginated/client.py +++ b/src/label_studio_sdk/workspaces/members/paginated/client.py @@ -29,6 +29,12 @@ def list( request_options: typing.Optional[RequestOptions] = None, ) -> SyncPager[LseUser]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve the members for a specific workspace. Parameters @@ -124,6 +130,12 @@ async def list( request_options: typing.Optional[RequestOptions] = None, ) -> AsyncPager[LseUser]: """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
Retrieve the members for a specific workspace. Parameters diff --git a/src/label_studio_sdk/workspaces/projects/__init__.py b/src/label_studio_sdk/workspaces/projects/__init__.py new file mode 100644 index 000000000..f3ea2659b --- /dev/null +++ b/src/label_studio_sdk/workspaces/projects/__init__.py @@ -0,0 +1,2 @@ +# This file was auto-generated by Fern from our API Definition. + diff --git a/src/label_studio_sdk/workspaces/projects/client.py b/src/label_studio_sdk/workspaces/projects/client.py new file mode 100644 index 000000000..40a700e42 --- /dev/null +++ b/src/label_studio_sdk/workspaces/projects/client.py @@ -0,0 +1,352 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from ...core.client_wrapper import SyncClientWrapper +from ...core.request_options import RequestOptions +from ...types.project import Project +from ...core.jsonable_encoder import jsonable_encoder +from ...core.unchecked_base_model import construct_type +from json.decoder import JSONDecodeError +from ...core.api_error import ApiError +from ...core.client_wrapper import AsyncClientWrapper + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class ProjectsClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def list(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[Project]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a list of all projects in a specific workspace. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[Project] + Projects list + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.workspaces.projects.list( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/workspaces/{jsonable_encoder(id)}/projects/", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[Project], + construct_type( + type_=typing.List[Project], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def add(self, id: int, *, project: int, request_options: typing.Optional[RequestOptions] = None) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Add a project to a specific workspace. + + Parameters + ---------- + id : int + + project : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.workspaces.projects.add( + id=1, + project=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/workspaces/{jsonable_encoder(id)}/projects/", + method="POST", + json={ + "project": project, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + def remove(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Remove a project from a specific workspace. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + from label_studio_sdk import LabelStudio + + client = LabelStudio( + api_key="YOUR_API_KEY", + ) + client.workspaces.projects.remove( + id=1, + ) + """ + _response = self._client_wrapper.httpx_client.request( + f"api/workspaces/{jsonable_encoder(id)}/projects/", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + +class AsyncProjectsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def list(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[Project]: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Retrieve a list of all projects in a specific workspace. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[Project] + Projects list + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.workspaces.projects.list( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/workspaces/{jsonable_encoder(id)}/projects/", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return typing.cast( + typing.List[Project], + construct_type( + type_=typing.List[Project], # type: ignore + object_=_response.json(), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def add(self, id: int, *, project: int, request_options: typing.Optional[RequestOptions] = None) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Add a project to a specific workspace. + + Parameters + ---------- + id : int + + project : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.workspaces.projects.add( + id=1, + project=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/workspaces/{jsonable_encoder(id)}/projects/", + method="POST", + json={ + "project": project, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) + + async def remove(self, id: int, *, request_options: typing.Optional[RequestOptions] = None) -> None: + """ + + Label Studio Enterprise badge +

+ This endpoint is not available in Label Studio Community Edition. [Learn more about Label Studio Enterprise](https://humansignal.com/goenterprise) +

+
+ Remove a project from a specific workspace. + + Parameters + ---------- + id : int + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + None + + Examples + -------- + import asyncio + + from label_studio_sdk import AsyncLabelStudio + + client = AsyncLabelStudio( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.workspaces.projects.remove( + id=1, + ) + + + asyncio.run(main()) + """ + _response = await self._client_wrapper.httpx_client.request( + f"api/workspaces/{jsonable_encoder(id)}/projects/", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + return + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, body=_response.text) + raise ApiError(status_code=_response.status_code, body=_response_json) diff --git a/tests/export_storage/test_azure.py b/tests/export_storage/test_azure.py index 4ab874e64..a6bdbeef4 100644 --- a/tests/export_storage/test_azure.py +++ b/tests/export_storage/test_azure.py @@ -58,10 +58,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.export_storage.azure.list() + response = client.export_storage.azure.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.export_storage.azure.list() + async_response = await async_client.export_storage.azure.list(project=1) validate_response(async_response, expected_response, expected_types) diff --git a/tests/export_storage/test_azure_spi.py b/tests/export_storage/test_azure_spi.py index 29c899c60..17994bfe6 100644 --- a/tests/export_storage/test_azure_spi.py +++ b/tests/export_storage/test_azure_spi.py @@ -64,10 +64,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.export_storage.azure_spi.list() + response = client.export_storage.azure_spi.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.export_storage.azure_spi.list() + async_response = await async_client.export_storage.azure_spi.list(project=1) validate_response(async_response, expected_response, expected_types) diff --git a/tests/export_storage/test_databricks.py b/tests/export_storage/test_databricks.py new file mode 100644 index 000000000..ecc6f56da --- /dev/null +++ b/tests/export_storage/test_databricks.py @@ -0,0 +1,347 @@ +# This file was auto-generated by Fern from our API Definition. + +from label_studio_sdk import LabelStudio +from label_studio_sdk import AsyncLabelStudio +import typing +from ..utilities import validate_response + + +async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = [ + { + "can_delete_objects": True, + "catalog": "catalog", + "created_at": "2024-01-15T09:30:00Z", + "description": "description", + "host": "host", + "id": 1, + "last_sync": "2024-01-15T09:30:00Z", + "last_sync_count": 1, + "last_sync_job": "last_sync_job", + "meta": {"key": "value"}, + "prefix": "prefix", + "project": 1, + "regex_filter": "regex_filter", + "request_timeout_s": 1, + "schema": "schema", + "status": "initialized", + "stream_chunk_bytes": 1, + "synchronizable": True, + "title": "title", + "traceback": "traceback", + "type": "type", + "use_blob_urls": True, + "verify_tls": True, + "volume": "volume", + } + ] + expected_types: typing.Tuple[typing.Any, typing.Any] = ( + "list", + { + 0: { + "can_delete_objects": None, + "catalog": None, + "created_at": "datetime", + "description": None, + "host": None, + "id": "integer", + "last_sync": "datetime", + "last_sync_count": "integer", + "last_sync_job": None, + "meta": None, + "prefix": None, + "project": "integer", + "regex_filter": None, + "request_timeout_s": "integer", + "schema": None, + "status": None, + "stream_chunk_bytes": "integer", + "synchronizable": None, + "title": None, + "traceback": None, + "type": None, + "use_blob_urls": None, + "verify_tls": None, + "volume": None, + } + }, + ) + response = client.export_storage.databricks.list(project=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.export_storage.databricks.list(project=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "can_delete_objects": True, + "catalog": "catalog", + "created_at": "2024-01-15T09:30:00Z", + "description": "description", + "host": "host", + "id": 1, + "last_sync": "2024-01-15T09:30:00Z", + "last_sync_count": 1, + "last_sync_job": "last_sync_job", + "meta": {"key": "value"}, + "prefix": "prefix", + "project": 1, + "regex_filter": "regex_filter", + "request_timeout_s": 1, + "schema": "schema", + "status": "initialized", + "stream_chunk_bytes": 1, + "synchronizable": True, + "title": "title", + "traceback": "traceback", + "type": "type", + "use_blob_urls": True, + "verify_tls": True, + "volume": "volume", + } + expected_types: typing.Any = { + "can_delete_objects": None, + "catalog": None, + "created_at": "datetime", + "description": None, + "host": None, + "id": "integer", + "last_sync": "datetime", + "last_sync_count": "integer", + "last_sync_job": None, + "meta": None, + "prefix": None, + "project": "integer", + "regex_filter": None, + "request_timeout_s": "integer", + "schema": None, + "status": None, + "stream_chunk_bytes": "integer", + "synchronizable": None, + "title": None, + "traceback": None, + "type": None, + "use_blob_urls": None, + "verify_tls": None, + "volume": None, + } + response = client.export_storage.databricks.create( + catalog="catalog", host="host", project=1, schema="schema", volume="volume" + ) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.export_storage.databricks.create( + catalog="catalog", host="host", project=1, schema="schema", volume="volume" + ) + validate_response(async_response, expected_response, expected_types) + + +async def test_validate(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + # Type ignore to avoid mypy complaining about the function not being meant to return a value + assert ( + client.export_storage.databricks.validate( + catalog="catalog", host="host", project=1, schema="schema", volume="volume" + ) # type: ignore[func-returns-value] + is None + ) + + assert ( + await async_client.export_storage.databricks.validate( + catalog="catalog", host="host", project=1, schema="schema", volume="volume" + ) # type: ignore[func-returns-value] + is None + ) + + +async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "can_delete_objects": True, + "catalog": "catalog", + "created_at": "2024-01-15T09:30:00Z", + "description": "description", + "host": "host", + "id": 1, + "last_sync": "2024-01-15T09:30:00Z", + "last_sync_count": 1, + "last_sync_job": "last_sync_job", + "meta": {"key": "value"}, + "prefix": "prefix", + "project": 1, + "regex_filter": "regex_filter", + "request_timeout_s": 1, + "schema": "schema", + "status": "initialized", + "stream_chunk_bytes": 1, + "synchronizable": True, + "title": "title", + "traceback": "traceback", + "type": "type", + "use_blob_urls": True, + "verify_tls": True, + "volume": "volume", + } + expected_types: typing.Any = { + "can_delete_objects": None, + "catalog": None, + "created_at": "datetime", + "description": None, + "host": None, + "id": "integer", + "last_sync": "datetime", + "last_sync_count": "integer", + "last_sync_job": None, + "meta": None, + "prefix": None, + "project": "integer", + "regex_filter": None, + "request_timeout_s": "integer", + "schema": None, + "status": None, + "stream_chunk_bytes": "integer", + "synchronizable": None, + "title": None, + "traceback": None, + "type": None, + "use_blob_urls": None, + "verify_tls": None, + "volume": None, + } + response = client.export_storage.databricks.get(id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.export_storage.databricks.get(id=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_delete(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + # Type ignore to avoid mypy complaining about the function not being meant to return a value + assert ( + client.export_storage.databricks.delete(id=1) # type: ignore[func-returns-value] + is None + ) + + assert ( + await async_client.export_storage.databricks.delete(id=1) # type: ignore[func-returns-value] + is None + ) + + +async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "can_delete_objects": True, + "catalog": "catalog", + "created_at": "2024-01-15T09:30:00Z", + "description": "description", + "host": "host", + "id": 1, + "last_sync": "2024-01-15T09:30:00Z", + "last_sync_count": 1, + "last_sync_job": "last_sync_job", + "meta": {"key": "value"}, + "prefix": "prefix", + "project": 1, + "regex_filter": "regex_filter", + "request_timeout_s": 1, + "schema": "schema", + "status": "initialized", + "stream_chunk_bytes": 1, + "synchronizable": True, + "title": "title", + "traceback": "traceback", + "type": "type", + "use_blob_urls": True, + "verify_tls": True, + "volume": "volume", + } + expected_types: typing.Any = { + "can_delete_objects": None, + "catalog": None, + "created_at": "datetime", + "description": None, + "host": None, + "id": "integer", + "last_sync": "datetime", + "last_sync_count": "integer", + "last_sync_job": None, + "meta": None, + "prefix": None, + "project": "integer", + "regex_filter": None, + "request_timeout_s": "integer", + "schema": None, + "status": None, + "stream_chunk_bytes": "integer", + "synchronizable": None, + "title": None, + "traceback": None, + "type": None, + "use_blob_urls": None, + "verify_tls": None, + "volume": None, + } + response = client.export_storage.databricks.update(id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.export_storage.databricks.update(id=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_sync(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "can_delete_objects": True, + "catalog": "catalog", + "created_at": "2024-01-15T09:30:00Z", + "description": "description", + "host": "host", + "id": 1, + "last_sync": "2024-01-15T09:30:00Z", + "last_sync_count": 1, + "last_sync_job": "last_sync_job", + "meta": {"key": "value"}, + "prefix": "prefix", + "project": 1, + "regex_filter": "regex_filter", + "request_timeout_s": 1, + "schema": "schema", + "status": "initialized", + "stream_chunk_bytes": 1, + "synchronizable": True, + "title": "title", + "traceback": "traceback", + "type": "type", + "use_blob_urls": True, + "verify_tls": True, + "volume": "volume", + } + expected_types: typing.Any = { + "can_delete_objects": None, + "catalog": None, + "created_at": "datetime", + "description": None, + "host": None, + "id": "integer", + "last_sync": "datetime", + "last_sync_count": "integer", + "last_sync_job": None, + "meta": None, + "prefix": None, + "project": "integer", + "regex_filter": None, + "request_timeout_s": "integer", + "schema": None, + "status": None, + "stream_chunk_bytes": "integer", + "synchronizable": None, + "title": None, + "traceback": None, + "type": None, + "use_blob_urls": None, + "verify_tls": None, + "volume": None, + } + response = client.export_storage.databricks.sync(id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.export_storage.databricks.sync(id=1) + validate_response(async_response, expected_response, expected_types) diff --git a/tests/export_storage/test_gcs.py b/tests/export_storage/test_gcs.py index aca0c7f56..5cc240b8d 100644 --- a/tests/export_storage/test_gcs.py +++ b/tests/export_storage/test_gcs.py @@ -58,10 +58,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.export_storage.gcs.list() + response = client.export_storage.gcs.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.export_storage.gcs.list() + async_response = await async_client.export_storage.gcs.list(project=1) validate_response(async_response, expected_response, expected_types) diff --git a/tests/export_storage/test_gcswif.py b/tests/export_storage/test_gcswif.py index eab72e819..00196887d 100644 --- a/tests/export_storage/test_gcswif.py +++ b/tests/export_storage/test_gcswif.py @@ -66,10 +66,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.export_storage.gcswif.list() + response = client.export_storage.gcswif.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.export_storage.gcswif.list() + async_response = await async_client.export_storage.gcswif.list(project=1) validate_response(async_response, expected_response, expected_types) diff --git a/tests/export_storage/test_local.py b/tests/export_storage/test_local.py index 206e4f682..0d3e3de38 100644 --- a/tests/export_storage/test_local.py +++ b/tests/export_storage/test_local.py @@ -52,10 +52,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.export_storage.local.list() + response = client.export_storage.local.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.export_storage.local.list() + async_response = await async_client.export_storage.local.list(project=1) validate_response(async_response, expected_response, expected_types) diff --git a/tests/export_storage/test_redis.py b/tests/export_storage/test_redis.py index 1486f83a7..873807d93 100644 --- a/tests/export_storage/test_redis.py +++ b/tests/export_storage/test_redis.py @@ -60,10 +60,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.export_storage.redis.list() + response = client.export_storage.redis.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.export_storage.redis.list() + async_response = await async_client.export_storage.redis.list(project=1) validate_response(async_response, expected_response, expected_types) diff --git a/tests/export_storage/test_s3.py b/tests/export_storage/test_s3.py index 1f1f29ce0..33163e35c 100644 --- a/tests/export_storage/test_s3.py +++ b/tests/export_storage/test_s3.py @@ -66,10 +66,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.export_storage.s3.list() + response = client.export_storage.s3.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.export_storage.s3.list() + async_response = await async_client.export_storage.s3.list(project=1) validate_response(async_response, expected_response, expected_types) diff --git a/tests/export_storage/test_s3s.py b/tests/export_storage/test_s3s.py index dfae7d9fe..31c521019 100644 --- a/tests/export_storage/test_s3s.py +++ b/tests/export_storage/test_s3s.py @@ -72,10 +72,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.export_storage.s3s.list() + response = client.export_storage.s3s.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.export_storage.s3s.list() + async_response = await async_client.export_storage.s3s.list(project=1) validate_response(async_response, expected_response, expected_types) diff --git a/tests/import_storage/test_azure.py b/tests/import_storage/test_azure.py index c531ff055..9b181def8 100644 --- a/tests/import_storage/test_azure.py +++ b/tests/import_storage/test_azure.py @@ -23,6 +23,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -50,6 +51,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -60,10 +62,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.import_storage.azure.list() + response = client.import_storage.azure.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.import_storage.azure.list() + async_response = await async_client.import_storage.azure.list(project=1) validate_response(async_response, expected_response, expected_types) @@ -83,6 +85,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -106,6 +109,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -150,6 +154,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -173,6 +178,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -217,6 +223,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -240,6 +247,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -271,6 +279,7 @@ async def test_sync(client: LabelStudio, async_client: AsyncLabelStudio) -> None "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -294,6 +303,7 @@ async def test_sync(client: LabelStudio, async_client: AsyncLabelStudio) -> None "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, diff --git a/tests/import_storage/test_azure_spi.py b/tests/import_storage/test_azure_spi.py index 0a98ba502..bcd9238bf 100644 --- a/tests/import_storage/test_azure_spi.py +++ b/tests/import_storage/test_azure_spi.py @@ -24,6 +24,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -54,6 +55,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -66,10 +68,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.import_storage.azure_spi.list() + response = client.import_storage.azure_spi.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.import_storage.azure_spi.list() + async_response = await async_client.import_storage.azure_spi.list(project=1) validate_response(async_response, expected_response, expected_types) @@ -90,6 +92,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -116,6 +119,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -163,6 +167,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -189,6 +194,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -236,6 +242,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -262,6 +269,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -296,6 +304,7 @@ async def test_sync(client: LabelStudio, async_client: AsyncLabelStudio) -> None "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -322,6 +331,7 @@ async def test_sync(client: LabelStudio, async_client: AsyncLabelStudio) -> None "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, diff --git a/tests/import_storage/test_databricks.py b/tests/import_storage/test_databricks.py new file mode 100644 index 000000000..1a0b61bf2 --- /dev/null +++ b/tests/import_storage/test_databricks.py @@ -0,0 +1,367 @@ +# This file was auto-generated by Fern from our API Definition. + +from label_studio_sdk import LabelStudio +from label_studio_sdk import AsyncLabelStudio +import typing +from ..utilities import validate_response + + +async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = [ + { + "catalog": "catalog", + "created_at": "2024-01-15T09:30:00Z", + "description": "description", + "host": "host", + "id": 1, + "last_sync": "2024-01-15T09:30:00Z", + "last_sync_count": 1, + "last_sync_job": "last_sync_job", + "meta": {"key": "value"}, + "prefix": "prefix", + "presign": True, + "presign_ttl": 1, + "project": 1, + "recursive_scan": True, + "regex_filter": "regex_filter", + "request_timeout_s": 1, + "schema": "schema", + "status": "initialized", + "stream_chunk_bytes": 1, + "synchronizable": True, + "title": "title", + "traceback": "traceback", + "type": "type", + "use_blob_urls": True, + "verify_tls": True, + "volume": "volume", + } + ] + expected_types: typing.Tuple[typing.Any, typing.Any] = ( + "list", + { + 0: { + "catalog": None, + "created_at": "datetime", + "description": None, + "host": None, + "id": "integer", + "last_sync": "datetime", + "last_sync_count": "integer", + "last_sync_job": None, + "meta": None, + "prefix": None, + "presign": None, + "presign_ttl": "integer", + "project": "integer", + "recursive_scan": None, + "regex_filter": None, + "request_timeout_s": "integer", + "schema": None, + "status": None, + "stream_chunk_bytes": "integer", + "synchronizable": None, + "title": None, + "traceback": None, + "type": None, + "use_blob_urls": None, + "verify_tls": None, + "volume": None, + } + }, + ) + response = client.import_storage.databricks.list(project=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.import_storage.databricks.list(project=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "catalog": "catalog", + "created_at": "2024-01-15T09:30:00Z", + "description": "description", + "host": "host", + "id": 1, + "last_sync": "2024-01-15T09:30:00Z", + "last_sync_count": 1, + "last_sync_job": "last_sync_job", + "meta": {"key": "value"}, + "prefix": "prefix", + "presign": True, + "presign_ttl": 1, + "project": 1, + "recursive_scan": True, + "regex_filter": "regex_filter", + "request_timeout_s": 1, + "schema": "schema", + "status": "initialized", + "stream_chunk_bytes": 1, + "synchronizable": True, + "title": "title", + "traceback": "traceback", + "type": "type", + "use_blob_urls": True, + "verify_tls": True, + "volume": "volume", + } + expected_types: typing.Any = { + "catalog": None, + "created_at": "datetime", + "description": None, + "host": None, + "id": "integer", + "last_sync": "datetime", + "last_sync_count": "integer", + "last_sync_job": None, + "meta": None, + "prefix": None, + "presign": None, + "presign_ttl": "integer", + "project": "integer", + "recursive_scan": None, + "regex_filter": None, + "request_timeout_s": "integer", + "schema": None, + "status": None, + "stream_chunk_bytes": "integer", + "synchronizable": None, + "title": None, + "traceback": None, + "type": None, + "use_blob_urls": None, + "verify_tls": None, + "volume": None, + } + response = client.import_storage.databricks.create( + catalog="catalog", host="host", project=1, schema="schema", volume="volume" + ) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.import_storage.databricks.create( + catalog="catalog", host="host", project=1, schema="schema", volume="volume" + ) + validate_response(async_response, expected_response, expected_types) + + +async def test_validate(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + # Type ignore to avoid mypy complaining about the function not being meant to return a value + assert ( + client.import_storage.databricks.validate( + catalog="catalog", host="host", project=1, schema="schema", volume="volume" + ) # type: ignore[func-returns-value] + is None + ) + + assert ( + await async_client.import_storage.databricks.validate( + catalog="catalog", host="host", project=1, schema="schema", volume="volume" + ) # type: ignore[func-returns-value] + is None + ) + + +async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "catalog": "catalog", + "created_at": "2024-01-15T09:30:00Z", + "description": "description", + "host": "host", + "id": 1, + "last_sync": "2024-01-15T09:30:00Z", + "last_sync_count": 1, + "last_sync_job": "last_sync_job", + "meta": {"key": "value"}, + "prefix": "prefix", + "presign": True, + "presign_ttl": 1, + "project": 1, + "recursive_scan": True, + "regex_filter": "regex_filter", + "request_timeout_s": 1, + "schema": "schema", + "status": "initialized", + "stream_chunk_bytes": 1, + "synchronizable": True, + "title": "title", + "traceback": "traceback", + "type": "type", + "use_blob_urls": True, + "verify_tls": True, + "volume": "volume", + } + expected_types: typing.Any = { + "catalog": None, + "created_at": "datetime", + "description": None, + "host": None, + "id": "integer", + "last_sync": "datetime", + "last_sync_count": "integer", + "last_sync_job": None, + "meta": None, + "prefix": None, + "presign": None, + "presign_ttl": "integer", + "project": "integer", + "recursive_scan": None, + "regex_filter": None, + "request_timeout_s": "integer", + "schema": None, + "status": None, + "stream_chunk_bytes": "integer", + "synchronizable": None, + "title": None, + "traceback": None, + "type": None, + "use_blob_urls": None, + "verify_tls": None, + "volume": None, + } + response = client.import_storage.databricks.get(id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.import_storage.databricks.get(id=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_delete(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + # Type ignore to avoid mypy complaining about the function not being meant to return a value + assert ( + client.import_storage.databricks.delete(id=1) # type: ignore[func-returns-value] + is None + ) + + assert ( + await async_client.import_storage.databricks.delete(id=1) # type: ignore[func-returns-value] + is None + ) + + +async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "catalog": "catalog", + "created_at": "2024-01-15T09:30:00Z", + "description": "description", + "host": "host", + "id": 1, + "last_sync": "2024-01-15T09:30:00Z", + "last_sync_count": 1, + "last_sync_job": "last_sync_job", + "meta": {"key": "value"}, + "prefix": "prefix", + "presign": True, + "presign_ttl": 1, + "project": 1, + "recursive_scan": True, + "regex_filter": "regex_filter", + "request_timeout_s": 1, + "schema": "schema", + "status": "initialized", + "stream_chunk_bytes": 1, + "synchronizable": True, + "title": "title", + "traceback": "traceback", + "type": "type", + "use_blob_urls": True, + "verify_tls": True, + "volume": "volume", + } + expected_types: typing.Any = { + "catalog": None, + "created_at": "datetime", + "description": None, + "host": None, + "id": "integer", + "last_sync": "datetime", + "last_sync_count": "integer", + "last_sync_job": None, + "meta": None, + "prefix": None, + "presign": None, + "presign_ttl": "integer", + "project": "integer", + "recursive_scan": None, + "regex_filter": None, + "request_timeout_s": "integer", + "schema": None, + "status": None, + "stream_chunk_bytes": "integer", + "synchronizable": None, + "title": None, + "traceback": None, + "type": None, + "use_blob_urls": None, + "verify_tls": None, + "volume": None, + } + response = client.import_storage.databricks.update(id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.import_storage.databricks.update(id=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_sync(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "catalog": "catalog", + "created_at": "2024-01-15T09:30:00Z", + "description": "description", + "host": "host", + "id": 1, + "last_sync": "2024-01-15T09:30:00Z", + "last_sync_count": 1, + "last_sync_job": "last_sync_job", + "meta": {"key": "value"}, + "prefix": "prefix", + "presign": True, + "presign_ttl": 1, + "project": 1, + "recursive_scan": True, + "regex_filter": "regex_filter", + "request_timeout_s": 1, + "schema": "schema", + "status": "initialized", + "stream_chunk_bytes": 1, + "synchronizable": True, + "title": "title", + "traceback": "traceback", + "type": "type", + "use_blob_urls": True, + "verify_tls": True, + "volume": "volume", + } + expected_types: typing.Any = { + "catalog": None, + "created_at": "datetime", + "description": None, + "host": None, + "id": "integer", + "last_sync": "datetime", + "last_sync_count": "integer", + "last_sync_job": None, + "meta": None, + "prefix": None, + "presign": None, + "presign_ttl": "integer", + "project": "integer", + "recursive_scan": None, + "regex_filter": None, + "request_timeout_s": "integer", + "schema": None, + "status": None, + "stream_chunk_bytes": "integer", + "synchronizable": None, + "title": None, + "traceback": None, + "type": None, + "use_blob_urls": None, + "verify_tls": None, + "volume": None, + } + response = client.import_storage.databricks.sync(id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.import_storage.databricks.sync(id=1) + validate_response(async_response, expected_response, expected_types) diff --git a/tests/import_storage/test_gcs.py b/tests/import_storage/test_gcs.py index 0ddbda076..028b8d28e 100644 --- a/tests/import_storage/test_gcs.py +++ b/tests/import_storage/test_gcs.py @@ -23,6 +23,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -50,6 +51,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -60,10 +62,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.import_storage.gcs.list() + response = client.import_storage.gcs.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.import_storage.gcs.list() + async_response = await async_client.import_storage.gcs.list(project=1) validate_response(async_response, expected_response, expected_types) @@ -83,6 +85,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -106,6 +109,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -150,6 +154,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -173,6 +178,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -217,6 +223,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -240,6 +247,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -271,6 +279,7 @@ async def test_sync(client: LabelStudio, async_client: AsyncLabelStudio) -> None "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -294,6 +303,7 @@ async def test_sync(client: LabelStudio, async_client: AsyncLabelStudio) -> None "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, diff --git a/tests/import_storage/test_gcswif.py b/tests/import_storage/test_gcswif.py index 530f7b291..b169ab051 100644 --- a/tests/import_storage/test_gcswif.py +++ b/tests/import_storage/test_gcswif.py @@ -27,6 +27,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -58,6 +59,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -68,10 +70,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.import_storage.gcswif.list() + response = client.import_storage.gcswif.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.import_storage.gcswif.list() + async_response = await async_client.import_storage.gcswif.list(project=1) validate_response(async_response, expected_response, expected_types) @@ -95,6 +97,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -122,6 +125,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -170,6 +174,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -197,6 +202,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -245,6 +251,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -272,6 +279,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -307,6 +315,7 @@ async def test_sync(client: LabelStudio, async_client: AsyncLabelStudio) -> None "presign": True, "presign_ttl": 1, "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -334,6 +343,7 @@ async def test_sync(client: LabelStudio, async_client: AsyncLabelStudio) -> None "presign": None, "presign_ttl": "integer", "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, diff --git a/tests/import_storage/test_local.py b/tests/import_storage/test_local.py index 0829644b7..e3d3fcb6a 100644 --- a/tests/import_storage/test_local.py +++ b/tests/import_storage/test_local.py @@ -18,6 +18,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "meta": {"key": "value"}, "path": "path", "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -40,6 +41,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "meta": None, "path": None, "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -50,10 +52,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.import_storage.local.list() + response = client.import_storage.local.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.import_storage.local.list() + async_response = await async_client.import_storage.local.list(project=1) validate_response(async_response, expected_response, expected_types) @@ -68,6 +70,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "meta": {"key": "value"}, "path": "path", "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -86,6 +89,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "meta": None, "path": None, "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -125,6 +129,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "meta": {"key": "value"}, "path": "path", "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -143,6 +148,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "meta": None, "path": None, "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -182,6 +188,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "meta": {"key": "value"}, "path": "path", "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -200,6 +207,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "meta": None, "path": None, "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, @@ -226,6 +234,7 @@ async def test_sync(client: LabelStudio, async_client: AsyncLabelStudio) -> None "meta": {"key": "value"}, "path": "path", "project": 1, + "recursive_scan": True, "regex_filter": "regex_filter", "status": "initialized", "synchronizable": True, @@ -244,6 +253,7 @@ async def test_sync(client: LabelStudio, async_client: AsyncLabelStudio) -> None "meta": None, "path": None, "project": "integer", + "recursive_scan": None, "regex_filter": None, "status": None, "synchronizable": None, diff --git a/tests/import_storage/test_redis.py b/tests/import_storage/test_redis.py index 62714bb8a..23794607b 100644 --- a/tests/import_storage/test_redis.py +++ b/tests/import_storage/test_redis.py @@ -58,10 +58,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.import_storage.redis.list() + response = client.import_storage.redis.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.import_storage.redis.list() + async_response = await async_client.import_storage.redis.list(project=1) validate_response(async_response, expected_response, expected_types) diff --git a/tests/import_storage/test_s3.py b/tests/import_storage/test_s3.py index 505e0a2b6..e530e008a 100644 --- a/tests/import_storage/test_s3.py +++ b/tests/import_storage/test_s3.py @@ -70,10 +70,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.import_storage.s3.list() + response = client.import_storage.s3.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.import_storage.s3.list() + async_response = await async_client.import_storage.s3.list(project=1) validate_response(async_response, expected_response, expected_types) diff --git a/tests/import_storage/test_s3s.py b/tests/import_storage/test_s3s.py index adde2563d..3a6f7ac80 100644 --- a/tests/import_storage/test_s3s.py +++ b/tests/import_storage/test_s3s.py @@ -76,10 +76,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.import_storage.s3s.list() + response = client.import_storage.s3s.list(project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.import_storage.s3s.list() + async_response = await async_client.import_storage.s3s.list(project=1) validate_response(async_response, expected_response, expected_types) diff --git a/tests/organizations/test_invites.py b/tests/organizations/test_invites.py index a4e357542..10f464f24 100644 --- a/tests/organizations/test_invites.py +++ b/tests/organizations/test_invites.py @@ -32,11 +32,11 @@ async def test_revoke_invite(client: LabelStudio, async_client: AsyncLabelStudio async def test_send_email(client: LabelStudio, async_client: AsyncLabelStudio) -> None: # Type ignore to avoid mypy complaining about the function not being meant to return a value assert ( - client.organizations.invites.send_email(emails=["emails"], role="role") # type: ignore[func-returns-value] + client.organizations.invites.send_email(emails=["emails"], role="OW") # type: ignore[func-returns-value] is None ) assert ( - await async_client.organizations.invites.send_email(emails=["emails"], role="role") # type: ignore[func-returns-value] + await async_client.organizations.invites.send_email(emails=["emails"], role="OW") # type: ignore[func-returns-value] is None ) diff --git a/tests/organizations/test_permissions.py b/tests/organizations/test_permissions.py new file mode 100644 index 000000000..49d00226e --- /dev/null +++ b/tests/organizations/test_permissions.py @@ -0,0 +1,209 @@ +# This file was auto-generated by Fern from our API Definition. + +from label_studio_sdk import LabelStudio +from label_studio_sdk import AsyncLabelStudio +import typing +from ..utilities import validate_response + + +async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = [ + { + "default": ["OW"], + "group": "group", + "id": 1, + "label": "label", + "options": ["OW"], + "organization": 1, + "permission": "permission", + "roles": ["OW"], + "tooltip": "tooltip", + } + ] + expected_types: typing.Tuple[typing.Any, typing.Any] = ( + "list", + { + 0: { + "default": ("list", {0: None}), + "group": None, + "id": "integer", + "label": None, + "options": ("list", {0: None}), + "organization": "integer", + "permission": None, + "roles": ("list", {0: None}), + "tooltip": None, + } + }, + ) + response = client.organizations.permissions.list(id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.organizations.permissions.list(id=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "default": ["OW"], + "group": "group", + "id": 1, + "label": "label", + "options": ["OW"], + "organization": 1, + "permission": "permission", + "roles": ["OW"], + "tooltip": "tooltip", + } + expected_types: typing.Any = { + "default": ("list", {0: None}), + "group": None, + "id": "integer", + "label": None, + "options": ("list", {0: None}), + "organization": "integer", + "permission": None, + "roles": ("list", {0: None}), + "tooltip": None, + } + response = client.organizations.permissions.create(id=1, permission="permission") + validate_response(response, expected_response, expected_types) + + async_response = await async_client.organizations.permissions.create(id=1, permission="permission") + validate_response(async_response, expected_response, expected_types) + + +async def test_get_options(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = [ + { + "default": ["OW"], + "group": "group", + "label": "label", + "options": ["OW"], + "permission": "permission", + "tooltip": "tooltip", + } + ] + expected_types: typing.Tuple[typing.Any, typing.Any] = ( + "list", + { + 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) + + async_response = await async_client.organizations.permissions.get_options(id=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "default": ["OW"], + "group": "group", + "id": 1, + "label": "label", + "options": ["OW"], + "organization": 1, + "permission": "permission", + "roles": ["OW"], + "tooltip": "tooltip", + } + expected_types: typing.Any = { + "default": ("list", {0: None}), + "group": None, + "id": "integer", + "label": None, + "options": ("list", {0: None}), + "organization": "integer", + "permission": None, + "roles": ("list", {0: None}), + "tooltip": None, + } + response = client.organizations.permissions.get(id=1, permission="permission") + validate_response(response, expected_response, expected_types) + + async_response = await async_client.organizations.permissions.get(id=1, permission="permission") + validate_response(async_response, expected_response, expected_types) + + +async def test_replace(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "default": ["OW"], + "group": "group", + "id": 1, + "label": "label", + "options": ["OW"], + "organization": 1, + "permission": "permission", + "roles": ["OW"], + "tooltip": "tooltip", + } + expected_types: typing.Any = { + "default": ("list", {0: None}), + "group": None, + "id": "integer", + "label": None, + "options": ("list", {0: None}), + "organization": "integer", + "permission": None, + "roles": ("list", {0: None}), + "tooltip": None, + } + response = client.organizations.permissions.replace(id=1, permission_="permission", permission="permission") + validate_response(response, expected_response, expected_types) + + async_response = await async_client.organizations.permissions.replace( + id=1, permission_="permission", permission="permission" + ) + validate_response(async_response, expected_response, expected_types) + + +async def test_delete(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + # Type ignore to avoid mypy complaining about the function not being meant to return a value + assert ( + client.organizations.permissions.delete(id=1, permission="permission") # type: ignore[func-returns-value] + is None + ) + + assert ( + await async_client.organizations.permissions.delete(id=1, permission="permission") # type: ignore[func-returns-value] + is None + ) + + +async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "default": ["OW"], + "group": "group", + "id": 1, + "label": "label", + "options": ["OW"], + "organization": 1, + "permission": "permission", + "roles": ["OW"], + "tooltip": "tooltip", + } + expected_types: typing.Any = { + "default": ("list", {0: None}), + "group": None, + "id": "integer", + "label": None, + "options": ("list", {0: None}), + "organization": "integer", + "permission": None, + "roles": ("list", {0: None}), + "tooltip": None, + } + response = client.organizations.permissions.update(id=1, permission="permission") + validate_response(response, expected_response, expected_types) + + async_response = await async_client.organizations.permissions.update(id=1, permission="permission") + validate_response(async_response, expected_response, expected_types) diff --git a/tests/projects/test_assignments.py b/tests/projects/test_assignments.py index 4bc0d6e9c..0be4be8ce 100644 --- a/tests/projects/test_assignments.py +++ b/tests/projects/test_assignments.py @@ -23,11 +23,20 @@ async def test_bulk_assign(client: LabelStudio, async_client: AsyncLabelStudio) async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = [ - {"assignee": 1, "created_at": "2024-01-15T09:30:00Z", "id": 1, "task": 1, "type": "AN"} + {"assignee": 1, "created_at": "2024-01-15T09:30:00Z", "id": 1, "state": "state", "task": 1, "type": "AN"} ] expected_types: typing.Tuple[typing.Any, typing.Any] = ( "list", - {0: {"assignee": "integer", "created_at": "datetime", "id": "integer", "task": "integer", "type": None}}, + { + 0: { + "assignee": "integer", + "created_at": "datetime", + "id": "integer", + "state": None, + "task": "integer", + "type": None, + } + }, ) response = client.projects.assignments.list(id=1, task_pk=1) validate_response(response, expected_response, expected_types) @@ -41,6 +50,7 @@ async def test_assign(client: LabelStudio, async_client: AsyncLabelStudio) -> No "assignee": 1, "created_at": "2024-01-15T09:30:00Z", "id": 1, + "state": "state", "task": 1, "type": "AN", } @@ -48,6 +58,7 @@ async def test_assign(client: LabelStudio, async_client: AsyncLabelStudio) -> No "assignee": "integer", "created_at": "datetime", "id": "integer", + "state": None, "task": "integer", "type": None, } @@ -76,6 +87,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "assignee": 1, "created_at": "2024-01-15T09:30:00Z", "id": 1, + "state": "state", "task": 1, "type": "AN", } @@ -83,6 +95,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "assignee": "integer", "created_at": "datetime", "id": "integer", + "state": None, "task": "integer", "type": None, } diff --git a/tests/projects/test_members.py b/tests/projects/test_members.py index 330af2695..f132deae0 100644 --- a/tests/projects/test_members.py +++ b/tests/projects/test_members.py @@ -6,82 +6,24 @@ from ..utilities import validate_response -async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: - expected_response: typing.Any = [ - { - "active_organization": 1, - "active_organization_meta": "active_organization_meta", - "allow_newsletters": True, - "avatar": "avatar", - "custom_hotkeys": {"key": "value"}, - "date_joined": "2024-01-15T09:30:00Z", - "email": "email", - "first_name": "first_name", - "id": 1, - "initials": "initials", - "last_activity": "2024-01-15T09:30:00Z", - "last_name": "last_name", - "lse_fields": { - "email_notification_settings": "email_notification_settings", - "invite_activated": True, - "invite_expired": "invite_expired", - "invite_expired_at": "invite_expired_at", - "invited_at": "2024-01-15T09:30:00Z", - "invited_by": 1, - "onboarding_state": "not_started", - "social_auth_finished": True, - "trial_company": "trial_company", - "trial_experience_labeling": "trial_experience_labeling", - "trial_license_enterprise": True, - "trial_models_in_production": "trial_models_in_production", - "trial_role": "annotator", - }, - "org_membership": [{"active": "active", "organization_id": 1, "role": "role"}], - "pause": "pause", - "phone": "phone", - "username": "username", - } - ] - expected_types: typing.Tuple[typing.Any, typing.Any] = ( - "list", - { - 0: { - "active_organization": "integer", - "active_organization_meta": None, - "allow_newsletters": None, - "avatar": None, - "custom_hotkeys": None, - "date_joined": "datetime", - "email": None, - "first_name": None, - "id": "integer", - "initials": None, - "last_activity": "datetime", - "last_name": None, - "lse_fields": { - "email_notification_settings": None, - "invite_activated": None, - "invite_expired": None, - "invite_expired_at": None, - "invited_at": "datetime", - "invited_by": "integer", - "onboarding_state": None, - "social_auth_finished": None, - "trial_company": None, - "trial_experience_labeling": None, - "trial_license_enterprise": None, - "trial_models_in_production": None, - "trial_role": None, - }, - "org_membership": ("list", {0: {"active": None, "organization_id": "integer", "role": None}}), - "pause": None, - "phone": None, - "username": None, - } - }, - ) - response = client.projects.members.get(id=1) +async def test_add(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"user": 1} + expected_types: typing.Any = {"user": "integer"} + response = client.projects.members.add(id=1, user=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.projects.members.get(id=1) + async_response = await async_client.projects.members.add(id=1, user=1) validate_response(async_response, expected_response, expected_types) + + +async def test_remove(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + # Type ignore to avoid mypy complaining about the function not being meant to return a value + assert ( + client.projects.members.remove(id=1) # type: ignore[func-returns-value] + is None + ) + + assert ( + await async_client.projects.members.remove(id=1) # type: ignore[func-returns-value] + is None + ) diff --git a/tests/projects/test_roles.py b/tests/projects/test_roles.py new file mode 100644 index 000000000..26355e74d --- /dev/null +++ b/tests/projects/test_roles.py @@ -0,0 +1,55 @@ +# This file was auto-generated by Fern from our API Definition. + +from label_studio_sdk import LabelStudio +from label_studio_sdk import AsyncLabelStudio +import typing +from ..utilities import validate_response + + +async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = [{"id": 1, "project": 1, "role": "OW", "user": 1}] + expected_types: typing.Tuple[typing.Any, typing.Any] = ( + "list", + {0: {"id": "integer", "project": "integer", "role": None, "user": "integer"}}, + ) + response = client.projects.roles.list() + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.roles.list() + validate_response(async_response, expected_response, expected_types) + + +async def test_add(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"id": 1, "project": 1, "role": "OW", "user": 1} + expected_types: typing.Any = {"id": "integer", "project": "integer", "role": None, "user": "integer"} + response = client.projects.roles.add(project=1, role="OW", user=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.roles.add(project=1, role="OW", user=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_remove(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + # Type ignore to avoid mypy complaining about the function not being meant to return a value + assert ( + client.projects.roles.remove(id=1) # type: ignore[func-returns-value] + is None + ) + + assert ( + await async_client.projects.roles.remove(id=1) # type: ignore[func-returns-value] + is None + ) + + +async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = [{"id": 1, "project": 1, "role": "OW", "user": 1}] + expected_types: typing.Tuple[typing.Any, typing.Any] = ( + "list", + {0: {"id": "integer", "project": "integer", "role": None, "user": "integer"}}, + ) + response = client.projects.roles.get(id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.roles.get(id=1) + validate_response(async_response, expected_response, expected_types) diff --git a/tests/projects/test_stats.py b/tests/projects/test_stats.py index f1e74a60a..dc9949b78 100644 --- a/tests/projects/test_stats.py +++ b/tests/projects/test_stats.py @@ -6,6 +6,42 @@ from ..utilities import validate_response +async def test_model_version_annotator_agreement(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"agreement": 1.1} + expected_types: typing.Any = {"agreement": None} + response = client.projects.stats.model_version_annotator_agreement(id=1, model_version="model_version") + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.model_version_annotator_agreement( + id=1, model_version="model_version" + ) + validate_response(async_response, expected_response, expected_types) + + +async def test_model_version_ground_truth_agreement(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"agreement": 1.1} + expected_types: typing.Any = {"agreement": None} + response = client.projects.stats.model_version_ground_truth_agreement(id=1, model_version="model_version") + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.model_version_ground_truth_agreement( + id=1, model_version="model_version" + ) + validate_response(async_response, expected_response, expected_types) + + +async def test_model_version_prediction_agreement(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"average_prediction_agreement_per_model": 1.1} + expected_types: typing.Any = {"average_prediction_agreement_per_model": None} + response = client.projects.stats.model_version_prediction_agreement(id=1, model_version="model_version") + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.model_version_prediction_agreement( + id=1, model_version="model_version" + ) + validate_response(async_response, expected_response, expected_types) + + async def test_iaa(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = { "IAA": [[1, 0.5], [0.5, 1]], @@ -29,6 +65,75 @@ async def test_iaa(client: LabelStudio, async_client: AsyncLabelStudio) -> None: validate_response(async_response, expected_response, expected_types) +async def test_users_ground_truth_agreement(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"agreement": {"key": 1.1}} + expected_types: typing.Any = {"agreement": ("dict", {0: (None, None)})} + response = client.projects.stats.users_ground_truth_agreement(id=1, ids="ids") + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.users_ground_truth_agreement(id=1, ids="ids") + validate_response(async_response, expected_response, expected_types) + + +async def test_agreement_annotator(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"Agreement_per_annotator": 1.1} + expected_types: typing.Any = {"Agreement_per_annotator": None} + response = client.projects.stats.agreement_annotator(id=1, user_id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.agreement_annotator(id=1, user_id=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_agreement_annotators(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"agreement": {"key": 1.1}} + expected_types: typing.Any = {"agreement": ("dict", {0: (None, None)})} + response = client.projects.stats.agreement_annotators(id=1, ids="ids") + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.agreement_annotators(id=1, ids="ids") + validate_response(async_response, expected_response, expected_types) + + +async def test_data_filters(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"user_filters": {"stats": [{}], "tasks_with_annotations": {"key": "value"}}} + expected_types: typing.Any = { + "user_filters": {"stats": ("list", {0: {}}), "tasks_with_annotations": ("dict", {0: (None, None)})} + } + response = client.projects.stats.data_filters(id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.data_filters(id=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_finished_tasks(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"finished": 1, "id": 1, "progress": 1} + expected_types: typing.Any = {"finished": "integer", "id": "integer", "progress": "integer"} + response = client.projects.stats.finished_tasks(id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.finished_tasks(id=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_lead_time(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "lead_time_stats": [{"mean_time": 1.1, "median_time": 1.1, "sum_lead_time": 1.1, "user_id": 1}] + } + expected_types: typing.Any = { + "lead_time_stats": ( + "list", + {0: {"mean_time": None, "median_time": None, "sum_lead_time": None, "user_id": "integer"}}, + ) + } + response = client.projects.stats.lead_time(id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.lead_time(id=1) + validate_response(async_response, expected_response, expected_types) + + async def test_total_agreement(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = {"total_agreement": 1.1} expected_types: typing.Any = {"total_agreement": None} @@ -37,3 +142,66 @@ async def test_total_agreement(client: LabelStudio, async_client: AsyncLabelStud async_response = await async_client.projects.stats.total_agreement(id=1) validate_response(async_response, expected_response, expected_types) + + +async def test_update_stats(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"key": "value"} + expected_types: typing.Tuple[typing.Any, typing.Any] = ("dict", {0: (None, None)}) + response = client.projects.stats.update_stats(id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.update_stats(id=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_users_prediction_agreement(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"agreement": {"key": 1.1}} + expected_types: typing.Any = {"agreement": ("dict", {0: (None, None)})} + response = client.projects.stats.users_prediction_agreement(id=1, ids="ids") + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.users_prediction_agreement(id=1, ids="ids") + validate_response(async_response, expected_response, expected_types) + + +async def test_users_review_score(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"performance_score": {"key": 1.1}, "review_score": {"key": 1.1}} + expected_types: typing.Any = { + "performance_score": ("dict", {0: (None, None)}), + "review_score": ("dict", {0: (None, None)}), + } + response = client.projects.stats.users_review_score(id=1, ids="ids") + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.users_review_score(id=1, ids="ids") + validate_response(async_response, expected_response, expected_types) + + +async def test_user_prediction_agreement(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"average_prediction_agreement_per_user": 1.1} + expected_types: typing.Any = {"average_prediction_agreement_per_user": None} + response = client.projects.stats.user_prediction_agreement(id=1, user_pk=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.user_prediction_agreement(id=1, user_pk=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_user_review_score(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"performance_score": 1.1, "review_score": 1.1} + expected_types: typing.Any = {"performance_score": None, "review_score": None} + response = client.projects.stats.user_review_score(id=1, user_pk=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.user_review_score(id=1, user_pk=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_user_ground_truth_agreement(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"agreement": 1.1} + expected_types: typing.Any = {"agreement": None} + response = client.projects.stats.user_ground_truth_agreement(id=1, user_pk=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.stats.user_ground_truth_agreement(id=1, user_pk=1) + validate_response(async_response, expected_response, expected_types) diff --git a/tests/prompts/test_runs.py b/tests/prompts/test_runs.py index a42f776cd..cc00dcd4a 100644 --- a/tests/prompts/test_runs.py +++ b/tests/prompts/test_runs.py @@ -95,3 +95,13 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No async_response = await async_client.prompts.runs.create(prompt_id=1, version_id=1, project=1) validate_response(async_response, expected_response, expected_types) + + +async def test_cancel(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"detail": "detail"} + expected_types: typing.Any = {"detail": None} + response = client.prompts.runs.cancel(inference_run_id=1, prompt_id=1, version_id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.prompts.runs.cancel(inference_run_id=1, prompt_id=1, version_id=1) + validate_response(async_response, expected_response, expected_types) diff --git a/tests/prompts/test_versions.py b/tests/prompts/test_versions.py index 06a4c79a1..b240ce8da 100644 --- a/tests/prompts/test_versions.py +++ b/tests/prompts/test_versions.py @@ -61,10 +61,10 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non } }, ) - response = client.prompts.versions.list(prompt_id_=1, prompt_id=1) + response = client.prompts.versions.list(prompt_id=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.prompts.versions.list(prompt_id_=1, prompt_id=1) + async_response = await async_client.prompts.versions.list(prompt_id=1) validate_response(async_response, expected_response, expected_types) diff --git a/tests/test_annotation_reviews.py b/tests/test_annotation_reviews.py index 5dd23235d..ae93310b4 100644 --- a/tests/test_annotation_reviews.py +++ b/tests/test_annotation_reviews.py @@ -20,6 +20,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "remove_from_queue": True, "result": {"key": "value"}, "started_at": "2024-01-15T09:30:00Z", + "state": "state", } ] expected_types: typing.Tuple[typing.Any, typing.Any] = ( @@ -37,6 +38,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "remove_from_queue": None, "result": None, "started_at": "datetime", + "state": None, } }, ) @@ -60,6 +62,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "remove_from_queue": True, "result": {"key": "value"}, "started_at": "2024-01-15T09:30:00Z", + "state": "state", } expected_types: typing.Any = { "accepted": None, @@ -73,6 +76,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "remove_from_queue": None, "result": None, "started_at": "datetime", + "state": None, } response = client.annotation_reviews.create(annotation=1) validate_response(response, expected_response, expected_types) @@ -94,6 +98,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "remove_from_queue": True, "result": {"key": "value"}, "started_at": "2024-01-15T09:30:00Z", + "state": "state", } expected_types: typing.Any = { "accepted": None, @@ -107,6 +112,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "remove_from_queue": None, "result": None, "started_at": "datetime", + "state": None, } response = client.annotation_reviews.get(id=1) validate_response(response, expected_response, expected_types) @@ -141,6 +147,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "remove_from_queue": True, "result": {"key": "value"}, "started_at": "2024-01-15T09:30:00Z", + "state": "state", } expected_types: typing.Any = { "accepted": None, @@ -154,6 +161,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "remove_from_queue": None, "result": None, "started_at": "datetime", + "state": None, } response = client.annotation_reviews.update(id=1) validate_response(response, expected_response, expected_types) diff --git a/tests/test_annotations.py b/tests/test_annotations.py index 045edcd98..a01c0006c 100644 --- a/tests/test_annotations.py +++ b/tests/test_annotations.py @@ -51,6 +51,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: }, } ], + "state": "state", "task": 1, "updated_at": "2024-01-15T09:30:00Z", "updated_by": 1, @@ -89,6 +90,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: ) }, ), + "state": None, "task": "integer", "updated_at": "datetime", "updated_by": "integer", @@ -149,6 +151,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No }, } ], + "state": "state", "task": 1, "updated_at": "2024-01-15T09:30:00Z", "updated_by": 1, @@ -187,6 +190,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No ) }, ), + "state": None, "task": "integer", "updated_at": "datetime", "updated_by": "integer", @@ -262,6 +266,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "parent_prediction": 1, "project": 1, "result": [{"key": "value"}], + "state": "state", "task": 1, "updated_at": "2024-01-15T09:30:00Z", "updated_by": 1, @@ -288,6 +293,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "parent_prediction": "integer", "project": "integer", "result": ("list", {0: ("dict", {0: (None, None)})}), + "state": None, "task": "integer", "updated_at": "datetime", "updated_by": "integer", @@ -337,6 +343,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No }, } ], + "state": "state", "task": 1, "updated_at": "2024-01-15T09:30:00Z", "updated_by": 1, @@ -375,6 +382,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No ) }, ), + "state": None, "task": "integer", "updated_at": "datetime", "updated_by": "integer", diff --git a/tests/test_billing.py b/tests/test_billing.py index eb52f077d..819c0eb9a 100644 --- a/tests/test_billing.py +++ b/tests/test_billing.py @@ -37,6 +37,7 @@ async def test_info(client: LabelStudio, async_client: AsyncLabelStudio) -> None "allow_data_credentials": True, "allow_invite_people": True, "allow_invite_project_experts": True, + "allow_nda": True, "allow_organization_webhooks": True, "allow_sso": False, "allow_storage_proxy": True, @@ -46,10 +47,10 @@ async def test_info(client: LabelStudio, async_client: AsyncLabelStudio) -> None "disable_members_page": False, "disable_project_imports": False, "early_adopter": False, + "email_configured": True, "embed_domains": [{"domain": "http://localhost:3000"}, {"domain": "https://example.com"}], "embed_enabled": False, "embed_settings": {"public_verify_alg": ["RS256"], "public_verify_key": "...."}, - "hide_storage_settings_for_manager": False, "manual_role_management": False, "manual_workspace_management": False, "secure_mode": False, @@ -87,6 +88,7 @@ async def test_info(client: LabelStudio, async_client: AsyncLabelStudio) -> None "allow_data_credentials": None, "allow_invite_people": None, "allow_invite_project_experts": None, + "allow_nda": None, "allow_organization_webhooks": None, "allow_sso": None, "allow_storage_proxy": None, @@ -96,10 +98,10 @@ async def test_info(client: LabelStudio, async_client: AsyncLabelStudio) -> None "disable_members_page": None, "disable_project_imports": None, "early_adopter": None, + "email_configured": None, "embed_domains": ("list", {0: ("dict", {0: (None, None)}), 1: ("dict", {0: (None, None)})}), "embed_enabled": None, "embed_settings": ("dict", {0: (None, None), 1: (None, None)}), - "hide_storage_settings_for_manager": None, "manual_role_management": None, "manual_workspace_management": None, "secure_mode": None, diff --git a/tests/test_blueprints.py b/tests/test_blueprints.py deleted file mode 100644 index 761d4b5d8..000000000 --- a/tests/test_blueprints.py +++ /dev/null @@ -1,51 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -from label_studio_sdk import LabelStudio -from label_studio_sdk import AsyncLabelStudio -import typing -from .utilities import validate_response - - -async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> None: - expected_response: typing.Any = { - "created_at": "2024-01-15T09:30:00Z", - "created_by": 1, - "description": "description", - "id": 1, - "label_config": "label_config", - "project": 1, - "share_id": "share_id", - "short_url": "short_url", - "title": "title", - "updated_at": "2024-01-15T09:30:00Z", - } - expected_types: typing.Any = { - "created_at": "datetime", - "created_by": "integer", - "description": None, - "id": "integer", - "label_config": None, - "project": "integer", - "share_id": None, - "short_url": None, - "title": None, - "updated_at": "datetime", - } - response = client.blueprints.create(project=1) - validate_response(response, expected_response, expected_types) - - async_response = await async_client.blueprints.create(project=1) - validate_response(async_response, expected_response, expected_types) - - -async def test_delete(client: LabelStudio, async_client: AsyncLabelStudio) -> None: - # Type ignore to avoid mypy complaining about the function not being meant to return a value - assert ( - client.blueprints.delete(id="id") # type: ignore[func-returns-value] - is None - ) - - assert ( - await async_client.blueprints.delete(id="id") # type: ignore[func-returns-value] - is None - ) diff --git a/tests/test_comments.py b/tests/test_comments.py index 9fa613bfc..14d34a796 100644 --- a/tests/test_comments.py +++ b/tests/test_comments.py @@ -19,6 +19,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "project": 1, "region_ref": {"key": "value"}, "resolved_at": "2024-01-15T09:30:00Z", + "state": "state", "task": 1, "text": "text", "updated_at": "2024-01-15T09:30:00Z", @@ -38,6 +39,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "project": "integer", "region_ref": None, "resolved_at": "datetime", + "state": None, "task": "integer", "text": None, "updated_at": "datetime", @@ -63,6 +65,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "project": 1, "region_ref": {"key": "value"}, "resolved_at": "2024-01-15T09:30:00Z", + "state": "state", "task": 1, "text": "text", "updated_at": "2024-01-15T09:30:00Z", @@ -78,6 +81,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "project": "integer", "region_ref": None, "resolved_at": "datetime", + "state": None, "task": "integer", "text": None, "updated_at": "datetime", @@ -101,6 +105,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "project": 1, "region_ref": {"key": "value"}, "resolved_at": "2024-01-15T09:30:00Z", + "state": "state", "task": 1, "text": "text", "updated_at": "2024-01-15T09:30:00Z", @@ -116,6 +121,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "project": "integer", "region_ref": None, "resolved_at": "datetime", + "state": None, "task": "integer", "text": None, "updated_at": "datetime", @@ -152,6 +158,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "project": 1, "region_ref": {"key": "value"}, "resolved_at": "2024-01-15T09:30:00Z", + "state": "state", "task": 1, "text": "text", "updated_at": "2024-01-15T09:30:00Z", @@ -167,6 +174,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "project": "integer", "region_ref": None, "resolved_at": "datetime", + "state": None, "task": "integer", "text": None, "updated_at": "datetime", diff --git a/tests/test_organizations.py b/tests/test_organizations.py index c446f342b..c9c944a10 100644 --- a/tests/test_organizations.py +++ b/tests/test_organizations.py @@ -38,7 +38,6 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "manual_workspace_management": "manual_workspace_management", }, "created_at": "2024-01-15T09:30:00Z", - "custom_scripts_editable_by": "AD", "custom_scripts_enabled": "custom_scripts_enabled", "default_role": "OW", "email_notification_settings": "email_notification_settings", @@ -52,7 +51,6 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_types: typing.Any = { "billing": {"manual_role_management": None, "manual_workspace_management": None}, "created_at": "datetime", - "custom_scripts_editable_by": None, "custom_scripts_enabled": None, "default_role": None, "email_notification_settings": None, @@ -77,7 +75,6 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "manual_workspace_management": "manual_workspace_management", }, "created_at": "2024-01-15T09:30:00Z", - "custom_scripts_editable_by": "AD", "custom_scripts_enabled": "custom_scripts_enabled", "default_role": "OW", "email_notification_settings": "email_notification_settings", @@ -91,7 +88,6 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No expected_types: typing.Any = { "billing": {"manual_role_management": None, "manual_workspace_management": None}, "created_at": "datetime", - "custom_scripts_editable_by": None, "custom_scripts_enabled": None, "default_role": None, "email_notification_settings": None, @@ -112,7 +108,6 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No async def test_update_default_role(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = { "annotator_reviewer_firewall_enabled_at": "2024-01-15T09:30:00Z", - "custom_scripts_editable_by": "AD", "custom_scripts_enabled_at": "2024-01-15T09:30:00Z", "default_role": "OW", "email_notification_settings": {"key": "value"}, @@ -126,7 +121,6 @@ async def test_update_default_role(client: LabelStudio, async_client: AsyncLabel } expected_types: typing.Any = { "annotator_reviewer_firewall_enabled_at": "datetime", - "custom_scripts_editable_by": None, "custom_scripts_enabled_at": "datetime", "default_role": None, "email_notification_settings": None, diff --git a/tests/test_project_templates.py b/tests/test_project_templates.py index 2c8855bfc..21a14bc8e 100644 --- a/tests/test_project_templates.py +++ b/tests/test_project_templates.py @@ -188,6 +188,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No async def test_create_project_from_template(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = { + "agreement_threshold": "agreement_threshold", "annotation_limit_count": 1, "annotation_limit_percent": "annotation_limit_percent", "annotator_evaluation_minimum_score": "annotator_evaluation_minimum_score", @@ -221,6 +222,7 @@ async def test_create_project_from_template(client: LabelStudio, async_client: A "is_draft": True, "is_published": True, "label_config": "label_config", + "max_additional_annotators_assignable": 1, "maximum_annotations": 1, "members": "members", "members_count": 1, @@ -249,6 +251,8 @@ async def test_create_project_from_template(client: LabelStudio, async_client: A "require_comment_on_reject": True, "review_criteria": "all", "review_only_manual_assignments": True, + "review_task_limit_percent": "review_task_limit_percent", + "sampling": "task_id", "show_agreement_to_reviewers": True, "show_data_manager_to_reviewers": True, "show_instruction": True, @@ -277,6 +281,7 @@ async def test_create_project_from_template(client: LabelStudio, async_client: A "workspace_title": "workspace_title", } expected_types: typing.Any = { + "agreement_threshold": None, "annotation_limit_count": "integer", "annotation_limit_percent": None, "annotator_evaluation_minimum_score": None, @@ -304,6 +309,7 @@ async def test_create_project_from_template(client: LabelStudio, async_client: A "is_draft": None, "is_published": None, "label_config": None, + "max_additional_annotators_assignable": "integer", "maximum_annotations": "integer", "members": None, "members_count": "integer", @@ -332,6 +338,8 @@ async def test_create_project_from_template(client: LabelStudio, async_client: A "require_comment_on_reject": None, "review_criteria": None, "review_only_manual_assignments": None, + "review_task_limit_percent": None, + "sampling": None, "show_agreement_to_reviewers": None, "show_data_manager_to_reviewers": None, "show_instruction": None, diff --git a/tests/test_projects.py b/tests/test_projects.py index cc1f3c3be..5aa8e8d8a 100644 --- a/tests/test_projects.py +++ b/tests/test_projects.py @@ -4,6 +4,7 @@ from label_studio_sdk import AsyncLabelStudio import typing from .utilities import validate_response +from label_studio_sdk import PredictionRequest async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> None: @@ -114,41 +115,143 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No validate_response(async_response, expected_response, expected_types) +async def test_list_counts(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "count": 123, + "next": "http://api.example.org/accounts/?page=4", + "previous": "http://api.example.org/accounts/?page=2", + "results": [ + { + "finished_task_number": 1, + "ground_truth_number": 1, + "id": 1, + "num_tasks_with_annotations": 1, + "queue_done": 1, + "queue_left": 1, + "queue_total": "queue_total", + "rejected": 1, + "review_total_tasks": 1, + "reviewed_number": 1, + "skipped_annotations_number": "skipped_annotations_number", + "task_number": 1, + "total_annotations_number": "total_annotations_number", + "total_predictions_number": 1, + "useful_annotation_number": 1, + } + ], + } + expected_types: typing.Any = { + "count": "integer", + "next": None, + "previous": None, + "results": ( + "list", + { + 0: { + "finished_task_number": "integer", + "ground_truth_number": "integer", + "id": "integer", + "num_tasks_with_annotations": "integer", + "queue_done": "integer", + "queue_left": "integer", + "queue_total": None, + "rejected": "integer", + "review_total_tasks": "integer", + "reviewed_number": "integer", + "skipped_annotations_number": None, + "task_number": "integer", + "total_annotations_number": None, + "total_predictions_number": "integer", + "useful_annotation_number": "integer", + } + }, + ), + } + response = client.projects.list_counts() + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.list_counts() + validate_response(async_response, expected_response, expected_types) + + async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = { - "color": "#FF0000", + "agreement_threshold": "agreement_threshold", + "allow_stream": True, + "annotation_limit_count": 1, + "annotation_limit_percent": "annotation_limit_percent", + "annotator_evaluation_minimum_score": "annotator_evaluation_minimum_score", + "annotator_evaluation_minimum_tasks": 1, + "assignment_settings": {"id": 1, "label_stream_task_distribution": "auto_distribution", "project": 1}, + "color": "color", + "comment_classification_config": "comment_classification_config", "config_has_control_tags": True, "config_suitable_for_bulk_annotation": True, - "control_weights": {}, - "created_at": "2023-08-24T14:15:22Z", + "control_weights": {"key": "value"}, + "created_at": "2024-01-15T09:30:00Z", "created_by": { "avatar": "avatar", - "email": "manager@humansignal.com", - "first_name": "Jo", + "email": "email", + "first_name": "first_name", "id": 1, - "last_name": "Doe", + "last_name": "last_name", }, - "description": "My first project", + "custom_script": "custom_script", + "custom_task_lock_ttl": 1, + "data_types": {"key": "value"}, + "description": "description", + "duplication_done": True, + "duplication_status": "duplication_status", "enable_empty_annotation": True, - "evaluate_predictions_automatically": False, - "expert_instruction": "Label all cats", - "finished_task_number": 10, - "ground_truth_number": 5, + "evaluate_predictions_automatically": True, + "expert_instruction": "expert_instruction", + "finished_task_number": 1, + "ground_truth_number": 1, "id": 1, - "is_draft": False, + "is_draft": True, "is_published": True, - "label_config": "[...]", + "label_config": "label_config", + "max_additional_annotators_assignable": 1, "maximum_annotations": 1, - "min_annotations_to_start_training": 0, - "model_version": "1.0.0", - "num_tasks_with_annotations": 10, + "members": "members", + "members_count": 1, + "min_annotations_to_start_training": 1, + "model_version": "model_version", + "num_tasks_with_annotations": 1, "organization": 1, - "overlap_cohort_percentage": 100, - "parsed_label_config": '{"tag": {...}}', - "pinned_at": "2023-08-24T14:15:22Z", - "queue_done": 100, - "queue_total": 10, + "overlap_cohort_percentage": 1, + "parsed_label_config": {"key": "value"}, + "pause_on_failed_annotator_evaluation": True, + "pinned_at": "2024-01-15T09:30:00Z", + "prompts": "prompts", + "queue_done": 1, + "queue_left": 1, + "queue_total": 1, + "ready": True, + "rejected": 1, + "require_comment_on_skip": True, "reveal_preannotations_interactively": True, + "review_settings": { + "anonymize_annotations": True, + "id": 1, + "instruction": "instruction", + "only_finished_tasks": True, + "project": 1, + "requeue_rejected_tasks_mode": "requeue", + "requeue_rejected_tasks_to_annotator": True, + "require_comment_on_reject": True, + "review_criteria": "all", + "review_only_manual_assignments": True, + "review_task_limit_percent": "review_task_limit_percent", + "sampling": "task_id", + "show_agreement_to_reviewers": True, + "show_data_manager_to_reviewers": True, + "show_instruction": True, + "show_unused_data_columns_to_reviewers": True, + }, + "review_total_tasks": 1, + "reviewed_number": 1, + "reviewer_queue_total": 1, "sampling": "Sequential sampling", "show_annotation_history": True, "show_collab_predictions": True, @@ -156,25 +259,41 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "show_instruction": True, "show_overlap_first": True, "show_skip_button": True, + "show_unused_data_columns_to_annotators": True, "skip_queue": "REQUEUE_FOR_ME", - "skipped_annotations_number": 0, + "skipped_annotations_number": 1, "start_training_on_annotation_update": True, - "task_data_login": "user", - "task_data_password": "secret", - "task_number": 100, - "title": "My project", - "total_annotations_number": 10, - "total_predictions_number": 0, - "useful_annotation_number": 10, + "task_data_login": "task_data_login", + "task_data_password": "task_data_password", + "task_number": 1, + "title": "title", + "total_annotations_number": 1, + "total_predictions_number": 1, + "useful_annotation_number": 1, + "workspace": "workspace", + "workspace_title": "workspace_title", } expected_types: typing.Any = { + "agreement_threshold": None, + "allow_stream": None, + "annotation_limit_count": "integer", + "annotation_limit_percent": None, + "annotator_evaluation_minimum_score": None, + "annotator_evaluation_minimum_tasks": "integer", + "assignment_settings": {"id": "integer", "label_stream_task_distribution": None, "project": "integer"}, "color": None, + "comment_classification_config": None, "config_has_control_tags": None, "config_suitable_for_bulk_annotation": None, "control_weights": None, "created_at": "datetime", "created_by": {"avatar": None, "email": None, "first_name": None, "id": "integer", "last_name": None}, + "custom_script": None, + "custom_task_lock_ttl": "integer", + "data_types": None, "description": None, + "duplication_done": None, + "duplication_status": None, "enable_empty_annotation": None, "evaluate_predictions_automatically": None, "expert_instruction": None, @@ -184,17 +303,47 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "is_draft": None, "is_published": None, "label_config": None, + "max_additional_annotators_assignable": "integer", "maximum_annotations": "integer", + "members": None, + "members_count": "integer", "min_annotations_to_start_training": "integer", "model_version": None, "num_tasks_with_annotations": "integer", "organization": "integer", "overlap_cohort_percentage": "integer", "parsed_label_config": None, + "pause_on_failed_annotator_evaluation": None, "pinned_at": "datetime", + "prompts": None, "queue_done": "integer", + "queue_left": "integer", "queue_total": "integer", + "ready": None, + "rejected": "integer", + "require_comment_on_skip": None, "reveal_preannotations_interactively": None, + "review_settings": { + "anonymize_annotations": None, + "id": "integer", + "instruction": None, + "only_finished_tasks": None, + "project": "integer", + "requeue_rejected_tasks_mode": None, + "requeue_rejected_tasks_to_annotator": None, + "require_comment_on_reject": None, + "review_criteria": None, + "review_only_manual_assignments": None, + "review_task_limit_percent": None, + "sampling": None, + "show_agreement_to_reviewers": None, + "show_data_manager_to_reviewers": None, + "show_instruction": None, + "show_unused_data_columns_to_reviewers": None, + }, + "review_total_tasks": "integer", + "reviewed_number": "integer", + "reviewer_queue_total": "integer", "sampling": None, "show_annotation_history": None, "show_collab_predictions": None, @@ -202,6 +351,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "show_instruction": None, "show_overlap_first": None, "show_skip_button": None, + "show_unused_data_columns_to_annotators": None, "skip_queue": None, "skipped_annotations_number": "integer", "start_training_on_annotation_update": None, @@ -212,6 +362,8 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "total_annotations_number": "integer", "total_predictions_number": "integer", "useful_annotation_number": "integer", + "workspace": None, + "workspace_title": None, } response = client.projects.get(id=1) validate_response(response, expected_response, expected_types) @@ -235,6 +387,7 @@ async def test_delete(client: LabelStudio, async_client: AsyncLabelStudio) -> No async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = { + "agreement_threshold": "agreement_threshold", "annotation_limit_count": 1, "annotation_limit_percent": "annotation_limit_percent", "annotator_evaluation_minimum_score": "annotator_evaluation_minimum_score", @@ -265,6 +418,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "is_draft": True, "is_published": True, "label_config": "label_config", + "max_additional_annotators_assignable": 1, "maximum_annotations": 1, "min_annotations_to_start_training": 1, "model_version": "model_version", @@ -290,6 +444,8 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "require_comment_on_reject": True, "review_criteria": "all", "review_only_manual_assignments": True, + "review_task_limit_percent": "review_task_limit_percent", + "sampling": "task_id", "show_agreement_to_reviewers": True, "show_data_manager_to_reviewers": True, "show_instruction": True, @@ -317,6 +473,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "workspace_title": "workspace_title", } expected_types: typing.Any = { + "agreement_threshold": None, "annotation_limit_count": "integer", "annotation_limit_percent": None, "annotator_evaluation_minimum_score": None, @@ -341,6 +498,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "is_draft": None, "is_published": None, "label_config": None, + "max_additional_annotators_assignable": "integer", "maximum_annotations": "integer", "min_annotations_to_start_training": "integer", "model_version": None, @@ -366,6 +524,8 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "require_comment_on_reject": None, "review_criteria": None, "review_only_manual_assignments": None, + "review_task_limit_percent": None, + "sampling": None, "show_agreement_to_reviewers": None, "show_data_manager_to_reviewers": None, "show_instruction": None, @@ -399,6 +559,21 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No validate_response(async_response, expected_response, expected_types) +async def test_list_unique_annotators(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = [ + {"avatar": "avatar", "email": "email", "first_name": "first_name", "id": 1, "last_name": "last_name"} + ] + expected_types: typing.Tuple[typing.Any, typing.Any] = ( + "list", + {0: {"avatar": None, "email": None, "first_name": None, "id": "integer", "last_name": None}}, + ) + response = client.projects.list_unique_annotators(id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.list_unique_annotators(id=1) + validate_response(async_response, expected_response, expected_types) + + async def test_duplicate(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = {"id": 1} expected_types: typing.Any = {"id": "integer"} @@ -437,6 +612,18 @@ async def test_import_tasks(client: LabelStudio, async_client: AsyncLabelStudio) validate_response(async_response, expected_response, expected_types) +async def test_import_predictions(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = {"created": 1} + expected_types: typing.Any = {"created": "integer"} + response = client.projects.import_predictions(id=1, request=[PredictionRequest(result=[{"key": "value"}], task=1)]) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.projects.import_predictions( + id=1, request=[PredictionRequest(result=[{"key": "value"}], task=1)] + ) + validate_response(async_response, expected_response, expected_types) + + async def test_validate_label_config(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = {"label_config": "label_config"} expected_types: typing.Any = {"label_config": None} diff --git a/tests/test_prompts.py b/tests/test_prompts.py index d64449c92..c346e2c11 100644 --- a/tests/test_prompts.py +++ b/tests/test_prompts.py @@ -26,6 +26,56 @@ async def test_batch_predictions(client: LabelStudio, async_client: AsyncLabelSt validate_response(async_response, expected_response, expected_types) +async def test_subset_tasks(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = { + "count": 123, + "next": "http://api.example.org/accounts/?page=4", + "previous": "http://api.example.org/accounts/?page=2", + "results": [ + { + "next_cursor": "next_cursor", + "previous_cursor": "previous_cursor", + "task_count": 1, + "task_result_list": [{"data": {"key": "value"}}], + } + ], + } + expected_types: typing.Any = { + "count": "integer", + "next": None, + "previous": None, + "results": ( + "list", + { + 0: { + "next_cursor": None, + "previous_cursor": None, + "task_count": "integer", + "task_result_list": ("list", {0: {"data": ("dict", {0: (None, None)})}}), + } + }, + ), + } + response = client.prompts.subset_tasks(project_pk=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.prompts.subset_tasks(project_pk=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_subsets(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = [{"columns_schema": [{"key": "value"}], "count": 1, "subset": "subset"}] + expected_types: typing.Tuple[typing.Any, typing.Any] = ( + "list", + {0: {"columns_schema": ("list", {0: ("dict", {0: (None, None)})}), "count": "integer", "subset": None}}, + ) + response = client.prompts.subsets(project_pk=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.prompts.subsets(project_pk=1) + validate_response(async_response, expected_response, expected_types) + + async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> None: expected_response: typing.Any = [ { @@ -120,7 +170,8 @@ async def test_compatible_projects(client: LabelStudio, async_client: AsyncLabel "previous": "http://api.example.org/accounts/?page=2", "results": [ { - "allow_stream": "allow_stream", + "agreement_threshold": "agreement_threshold", + "allow_stream": True, "annotation_limit_count": 1, "annotation_limit_percent": "annotation_limit_percent", "annotator_evaluation_minimum_score": "annotator_evaluation_minimum_score", @@ -152,29 +203,30 @@ async def test_compatible_projects(client: LabelStudio, async_client: AsyncLabel "is_draft": True, "is_published": True, "label_config": "label_config", + "max_additional_annotators_assignable": 1, "maximum_annotations": 1, "members": "members", "members_count": 1, "min_annotations_to_start_training": 1, "model_version": "model_version", - "num_tasks_with_annotations": "num_tasks_with_annotations", + "num_tasks_with_annotations": 1, "organization": 1, "overlap_cohort_percentage": 1, "parsed_label_config": {"key": "value"}, "pause_on_failed_annotator_evaluation": True, "pinned_at": "2024-01-15T09:30:00Z", "prompts": "prompts", - "queue_done": "queue_done", - "queue_left": "queue_left", + "queue_done": 1, + "queue_left": 1, "queue_total": "queue_total", - "ready": "ready", - "rejected": "rejected", + "ready": True, + "rejected": 1, "require_comment_on_skip": True, "reveal_preannotations_interactively": True, "review_settings": {"id": 1, "requeue_rejected_tasks_to_annotator": True}, - "review_total_tasks": "review_total_tasks", - "reviewed_number": "reviewed_number", - "reviewer_queue_total": "reviewer_queue_total", + "review_total_tasks": 1, + "reviewed_number": 1, + "reviewer_queue_total": 1, "sampling": "Sequential sampling", "show_annotation_history": True, "show_collab_predictions": True, @@ -190,7 +242,7 @@ async def test_compatible_projects(client: LabelStudio, async_client: AsyncLabel "title": "title", "total_annotations_number": "total_annotations_number", "total_predictions_number": 1, - "useful_annotation_number": "useful_annotation_number", + "useful_annotation_number": 1, "workspace": "workspace", "workspace_title": "workspace_title", } @@ -204,6 +256,7 @@ async def test_compatible_projects(client: LabelStudio, async_client: AsyncLabel "list", { 0: { + "agreement_threshold": None, "allow_stream": None, "annotation_limit_count": "integer", "annotation_limit_percent": None, @@ -237,29 +290,30 @@ async def test_compatible_projects(client: LabelStudio, async_client: AsyncLabel "is_draft": None, "is_published": None, "label_config": None, + "max_additional_annotators_assignable": "integer", "maximum_annotations": "integer", "members": None, "members_count": "integer", "min_annotations_to_start_training": "integer", "model_version": None, - "num_tasks_with_annotations": None, + "num_tasks_with_annotations": "integer", "organization": "integer", "overlap_cohort_percentage": "integer", "parsed_label_config": None, "pause_on_failed_annotator_evaluation": None, "pinned_at": "datetime", "prompts": None, - "queue_done": None, - "queue_left": None, + "queue_done": "integer", + "queue_left": "integer", "queue_total": None, "ready": None, - "rejected": None, + "rejected": "integer", "require_comment_on_skip": None, "reveal_preannotations_interactively": None, "review_settings": {"id": "integer", "requeue_rejected_tasks_to_annotator": None}, - "review_total_tasks": None, - "reviewed_number": None, - "reviewer_queue_total": None, + "review_total_tasks": "integer", + "reviewed_number": "integer", + "reviewer_queue_total": "integer", "sampling": None, "show_annotation_history": None, "show_collab_predictions": None, @@ -275,7 +329,7 @@ async def test_compatible_projects(client: LabelStudio, async_client: AsyncLabel "title": None, "total_annotations_number": None, "total_predictions_number": "integer", - "useful_annotation_number": None, + "useful_annotation_number": "integer", "workspace": None, "workspace_title": None, } diff --git a/tests/test_tasks.py b/tests/test_tasks.py index cff84d376..6063cf1f6 100644 --- a/tests/test_tasks.py +++ b/tests/test_tasks.py @@ -81,29 +81,20 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "annotations": "annotations", "annotations_ids": "annotations_ids", "annotations_results": "annotations_results", - "annotators": [1, 1], + "annotators": [1], "annotators_count": 1, "avg_lead_time": 1.1, "cancelled_annotations": 1, - "comment_authors": [{"comment_authors": {"key": "value"}}, {"comment_authors": {"key": "value"}}], + "comment_authors": [{"key": "value"}], "comment_authors_count": 1, - "comment_count": 2147483647, + "comment_count": 1, "comments": "comments", "completed_at": "2024-01-15T09:30:00Z", "created_at": "2024-01-15T09:30:00Z", "data": {"key": "value"}, "draft_exists": True, "drafts": [ - { - "created_at": "2024-01-15T09:30:00Z", - "result": [{"result": {"key": "value"}}, {"result": {"key": "value"}}], - "updated_at": "2024-01-15T09:30:00Z", - }, - { - "created_at": "2024-01-15T09:30:00Z", - "result": [{"result": {"key": "value"}}, {"result": {"key": "value"}}], - "updated_at": "2024-01-15T09:30:00Z", - }, + {"created_at": "2024-01-15T09:30:00Z", "result": [{"key": "value"}], "updated_at": "2024-01-15T09:30:00Z"} ], "file_upload": "file_upload", "ground_truth": True, @@ -112,46 +103,38 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "is_labeled": True, "last_comment_updated_at": "2024-01-15T09:30:00Z", "meta": {"key": "value"}, - "overlap": 2147483647, + "overlap": 1, + "precomputed_agreement": 1.1, "predictions": [ { "created_at": "2024-01-15T09:30:00Z", - "model": {"model": {"key": "value"}}, - "model_run": {"model_run": {"key": "value"}}, - "model_version": "model_version", - "project": 1, - "result": [{"result": {"key": "value"}}, {"result": {"key": "value"}}], - "score": 1.1, - "task": 1, - "updated_at": "2024-01-15T09:30:00Z", - }, - { - "created_at": "2024-01-15T09:30:00Z", - "model": {"model": {"key": "value"}}, - "model_run": {"model_run": {"key": "value"}}, + "model": {"key": "value"}, + "model_run": {"key": "value"}, "model_version": "model_version", "project": 1, - "result": [{"result": {"key": "value"}}, {"result": {"key": "value"}}], + "result": [{"key": "value"}], "score": 1.1, "task": 1, "updated_at": "2024-01-15T09:30:00Z", - }, + } ], "predictions_model_versions": "predictions_model_versions", "predictions_results": "predictions_results", "predictions_score": 1.1, "project": 1, + "review_time": 1, "reviewed": True, - "reviewers": [{"reviewers": {"key": "value"}}, {"reviewers": {"key": "value"}}], + "reviewers": [{"key": "value"}], "reviewers_count": 1, "reviews_accepted": 1, "reviews_rejected": 1, + "state": "state", "storage_filename": "storage_filename", "total_annotations": 1, "total_predictions": 1, - "unresolved_comment_count": 2147483647, + "unresolved_comment_count": 1, "updated_at": "2024-01-15T09:30:00Z", - "updated_by": [{"updated_by": {"key": "value"}}, {"updated_by": {"key": "value"}}], + "updated_by": [{"key": "value"}], } expected_types: typing.Any = { "agreement": None, @@ -159,11 +142,11 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "annotations": None, "annotations_ids": None, "annotations_results": None, - "annotators": ("list", {0: "integer", 1: "integer"}), + "annotators": ("list", {0: "integer"}), "annotators_count": "integer", "avg_lead_time": None, "cancelled_annotations": "integer", - "comment_authors": ("list", {0: ("dict", {0: (None, None)}), 1: ("dict", {0: (None, None)})}), + "comment_authors": ("list", {0: ("dict", {0: (None, None)})}), "comment_authors_count": "integer", "comment_count": "integer", "comments": None, @@ -176,14 +159,9 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No { 0: { "created_at": "datetime", - "result": ("list", {0: ("dict", {0: (None, None)}), 1: ("dict", {0: (None, None)})}), - "updated_at": "datetime", - }, - 1: { - "created_at": "datetime", - "result": ("list", {0: ("dict", {0: (None, None)}), 1: ("dict", {0: (None, None)})}), + "result": ("list", {0: ("dict", {0: (None, None)})}), "updated_at": "datetime", - }, + } }, ), "file_upload": None, @@ -194,6 +172,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "last_comment_updated_at": "datetime", "meta": None, "overlap": "integer", + "precomputed_agreement": None, "predictions": ( "list", { @@ -203,44 +182,37 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "model_run": ("dict", {0: (None, None)}), "model_version": None, "project": "integer", - "result": ("list", {0: ("dict", {0: (None, None)}), 1: ("dict", {0: (None, None)})}), - "score": None, - "task": "integer", - "updated_at": "datetime", - }, - 1: { - "created_at": "datetime", - "model": ("dict", {0: (None, None)}), - "model_run": ("dict", {0: (None, None)}), - "model_version": None, - "project": "integer", - "result": ("list", {0: ("dict", {0: (None, None)}), 1: ("dict", {0: (None, None)})}), + "result": ("list", {0: ("dict", {0: (None, None)})}), "score": None, "task": "integer", "updated_at": "datetime", - }, + } }, ), "predictions_model_versions": None, "predictions_results": None, "predictions_score": None, "project": "integer", + "review_time": "integer", "reviewed": None, - "reviewers": ("list", {0: ("dict", {0: (None, None)}), 1: ("dict", {0: (None, None)})}), + "reviewers": ("list", {0: ("dict", {0: (None, None)})}), "reviewers_count": "integer", "reviews_accepted": "integer", "reviews_rejected": "integer", + "state": None, "storage_filename": None, "total_annotations": "integer", "total_predictions": "integer", "unresolved_comment_count": "integer", "updated_at": "datetime", - "updated_by": ("list", {0: ("dict", {0: (None, None)}), 1: ("dict", {0: (None, None)})}), + "updated_by": ("list", {0: ("dict", {0: (None, None)})}), } - response = client.tasks.create(data={"key": "value"}) + response = client.tasks.create(data={"image": "https://example.com/image.jpg", "text": "Hello, world!"}, project=1) validate_response(response, expected_response, expected_types) - async_response = await async_client.tasks.create(data={"key": "value"}) + async_response = await async_client.tasks.create( + data={"image": "https://example.com/image.jpg", "text": "Hello, world!"}, project=1 + ) validate_response(async_response, expected_response, expected_types) @@ -274,6 +246,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "last_comment_updated_at": "2024-01-15T09:30:00Z", "meta": {"key": "value"}, "overlap": 1, + "precomputed_agreement": 1.1, "predictions": [ { "created_at": "2024-01-15T09:30:00Z", @@ -291,11 +264,13 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "predictions_results": "predictions_results", "predictions_score": 1.1, "project": 1, + "review_time": 1, "reviewed": True, "reviewers": [{"key": "value"}], "reviewers_count": 1, "reviews_accepted": 1, "reviews_rejected": 1, + "state": "state", "storage_filename": "storage_filename", "total_annotations": 1, "total_predictions": 1, @@ -339,6 +314,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "last_comment_updated_at": "datetime", "meta": None, "overlap": "integer", + "precomputed_agreement": None, "predictions": ( "list", { @@ -359,11 +335,13 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "predictions_results": None, "predictions_score": None, "project": "integer", + "review_time": "integer", "reviewed": None, "reviewers": ("list", {0: ("dict", {0: (None, None)})}), "reviewers_count": "integer", "reviews_accepted": "integer", "reviews_rejected": "integer", + "state": None, "storage_filename": None, "total_annotations": "integer", "total_predictions": "integer", @@ -421,6 +399,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "last_comment_updated_at": "2024-01-15T09:30:00Z", "meta": {"key": "value"}, "overlap": 1, + "precomputed_agreement": 1.1, "predictions": [ { "created_at": "2024-01-15T09:30:00Z", @@ -438,11 +417,13 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "predictions_results": "predictions_results", "predictions_score": 1.1, "project": 1, + "review_time": 1, "reviewed": True, "reviewers": [{"key": "value"}], "reviewers_count": 1, "reviews_accepted": 1, "reviews_rejected": 1, + "state": "state", "storage_filename": "storage_filename", "total_annotations": 1, "total_predictions": 1, @@ -486,6 +467,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "last_comment_updated_at": "datetime", "meta": None, "overlap": "integer", + "precomputed_agreement": None, "predictions": ( "list", { @@ -506,11 +488,13 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "predictions_results": None, "predictions_score": None, "project": "integer", + "review_time": "integer", "reviewed": None, "reviewers": ("list", {0: ("dict", {0: (None, None)})}), "reviewers_count": "integer", "reviews_accepted": "integer", "reviews_rejected": "integer", + "state": None, "storage_filename": None, "total_annotations": "integer", "total_predictions": "integer", diff --git a/tests/test_users.py b/tests/test_users.py index 2c1ba3a18..6d3a0cbd0 100644 --- a/tests/test_users.py +++ b/tests/test_users.py @@ -21,6 +21,7 @@ async def test_get_current_user(client: LabelStudio, async_client: AsyncLabelStu "last_activity": "2024-01-15T09:30:00Z", "last_name": "last_name", "org_membership": [{"active": "active", "organization_id": 1, "role": "role"}], + "organization_membership": {"active": "active", "organization_id": 1, "role": "role"}, "phone": "phone", "username": "username", } @@ -38,6 +39,7 @@ async def test_get_current_user(client: LabelStudio, async_client: AsyncLabelStu "last_activity": "datetime", "last_name": None, "org_membership": ("list", {0: {"active": None, "organization_id": "integer", "role": None}}), + "organization_membership": {"active": None, "organization_id": "integer", "role": None}, "phone": None, "username": None, } @@ -63,6 +65,7 @@ async def test_update_current_user(client: LabelStudio, async_client: AsyncLabel "last_activity": "2024-01-15T09:30:00Z", "last_name": "last_name", "org_membership": [{"active": "active", "organization_id": 1, "role": "role"}], + "organization_membership": {"active": "active", "organization_id": 1, "role": "role"}, "phone": "phone", "username": "username", } @@ -80,6 +83,7 @@ async def test_update_current_user(client: LabelStudio, async_client: AsyncLabel "last_activity": "datetime", "last_name": None, "org_membership": ("list", {0: {"active": None, "organization_id": "integer", "role": None}}), + "organization_membership": {"active": None, "organization_id": "integer", "role": None}, "phone": None, "username": None, } @@ -161,7 +165,9 @@ async def test_whoami(client: LabelStudio, async_client: AsyncLabelStudio) -> No "trial_role": "annotator", }, "org_membership": [{"active": "active", "organization_id": 1, "role": "role"}], + "organization_membership": {"active": "active", "organization_id": 1, "role": "role"}, "pause": "pause", + "permissions": ["permissions"], "phone": "phone", "username": "username", } @@ -195,7 +201,9 @@ async def test_whoami(client: LabelStudio, async_client: AsyncLabelStudio) -> No "trial_role": None, }, "org_membership": ("list", {0: {"active": None, "organization_id": "integer", "role": None}}), + "organization_membership": {"active": None, "organization_id": "integer", "role": None}, "pause": None, + "permissions": ("list", {0: None}), "phone": None, "username": None, } @@ -222,6 +230,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "last_activity": "2024-01-15T09:30:00Z", "last_name": "last_name", "org_membership": [{"active": "active", "organization_id": 1, "role": "role"}], + "organization_membership": {"active": "active", "organization_id": 1, "role": "role"}, "phone": "phone", "username": "username", } @@ -243,6 +252,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "last_activity": "datetime", "last_name": None, "org_membership": ("list", {0: {"active": None, "organization_id": "integer", "role": None}}), + "organization_membership": {"active": None, "organization_id": "integer", "role": None}, "phone": None, "username": None, } @@ -285,6 +295,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "trial_role": "annotator", }, "org_membership": [{"active": "active", "organization_id": 1, "role": "role"}], + "organization_membership": {"active": "active", "organization_id": 1, "role": "role"}, "pause": "pause", "phone": "phone", "username": "username", @@ -318,6 +329,7 @@ async def test_create(client: LabelStudio, async_client: AsyncLabelStudio) -> No "trial_role": None, }, "org_membership": ("list", {0: {"active": None, "organization_id": "integer", "role": None}}), + "organization_membership": {"active": None, "organization_id": "integer", "role": None}, "pause": None, "phone": None, "username": None, @@ -359,6 +371,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "trial_role": "annotator", }, "org_membership": [{"active": "active", "organization_id": 1, "role": "role"}], + "organization_membership": {"active": "active", "organization_id": 1, "role": "role"}, "pause": "pause", "phone": "phone", "username": "username", @@ -392,6 +405,7 @@ async def test_get(client: LabelStudio, async_client: AsyncLabelStudio) -> None: "trial_role": None, }, "org_membership": ("list", {0: {"active": None, "organization_id": "integer", "role": None}}), + "organization_membership": {"active": None, "organization_id": "integer", "role": None}, "pause": None, "phone": None, "username": None, @@ -446,6 +460,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "trial_role": "annotator", }, "org_membership": [{"active": "active", "organization_id": 1, "role": "role"}], + "organization_membership": {"active": "active", "organization_id": 1, "role": "role"}, "pause": "pause", "phone": "phone", "username": "username", @@ -479,6 +494,7 @@ async def test_update(client: LabelStudio, async_client: AsyncLabelStudio) -> No "trial_role": None, }, "org_membership": ("list", {0: {"active": None, "organization_id": "integer", "role": None}}), + "organization_membership": {"active": None, "organization_id": "integer", "role": None}, "pause": None, "phone": None, "username": None, diff --git a/tests/workspaces/test_members.py b/tests/workspaces/test_members.py index e20d22bfc..d4926043a 100644 --- a/tests/workspaces/test_members.py +++ b/tests/workspaces/test_members.py @@ -28,6 +28,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "invite_expired_at": "invite_expired_at", }, "org_membership": [{"active": "active", "organization_id": 1, "role": "role"}], + "organization_membership": {"active": "active", "organization_id": 1, "role": "role"}, "pause": "pause", "phone": "phone", "username": "username", @@ -58,6 +59,7 @@ async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> Non "invite_expired_at": None, }, "org_membership": ("list", {0: {"active": None, "organization_id": "integer", "role": None}}), + "organization_membership": {"active": None, "organization_id": "integer", "role": None}, "pause": None, "phone": None, "username": None, diff --git a/tests/workspaces/test_projects.py b/tests/workspaces/test_projects.py new file mode 100644 index 000000000..4b900858f --- /dev/null +++ b/tests/workspaces/test_projects.py @@ -0,0 +1,145 @@ +# This file was auto-generated by Fern from our API Definition. + +from label_studio_sdk import LabelStudio +from label_studio_sdk import AsyncLabelStudio +import typing +from ..utilities import validate_response + + +async def test_list_(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + expected_response: typing.Any = [ + { + "color": "color", + "config_has_control_tags": True, + "config_suitable_for_bulk_annotation": True, + "control_weights": {"key": "value"}, + "created_at": "2024-01-15T09:30:00Z", + "created_by": { + "avatar": "avatar", + "email": "email", + "first_name": "first_name", + "id": 1, + "last_name": "last_name", + }, + "description": "description", + "enable_empty_annotation": True, + "evaluate_predictions_automatically": True, + "expert_instruction": "expert_instruction", + "finished_task_number": 1, + "ground_truth_number": 1, + "id": 1, + "is_draft": True, + "is_published": True, + "label_config": "label_config", + "maximum_annotations": 1, + "min_annotations_to_start_training": 1, + "model_version": "model_version", + "num_tasks_with_annotations": 1, + "organization": 1, + "overlap_cohort_percentage": 1, + "parsed_label_config": {"key": "value"}, + "pinned_at": "2024-01-15T09:30:00Z", + "queue_done": 1, + "queue_total": 1, + "reveal_preannotations_interactively": True, + "sampling": "Sequential sampling", + "show_annotation_history": True, + "show_collab_predictions": True, + "show_ground_truth_first": True, + "show_instruction": True, + "show_overlap_first": True, + "show_skip_button": True, + "skip_queue": "REQUEUE_FOR_ME", + "skipped_annotations_number": 1, + "start_training_on_annotation_update": True, + "task_data_login": "task_data_login", + "task_data_password": "task_data_password", + "task_number": 1, + "title": "title", + "total_annotations_number": 1, + "total_predictions_number": 1, + "useful_annotation_number": 1, + } + ] + expected_types: typing.Tuple[typing.Any, typing.Any] = ( + "list", + { + 0: { + "color": None, + "config_has_control_tags": None, + "config_suitable_for_bulk_annotation": None, + "control_weights": None, + "created_at": "datetime", + "created_by": {"avatar": None, "email": None, "first_name": None, "id": "integer", "last_name": None}, + "description": None, + "enable_empty_annotation": None, + "evaluate_predictions_automatically": None, + "expert_instruction": None, + "finished_task_number": "integer", + "ground_truth_number": "integer", + "id": "integer", + "is_draft": None, + "is_published": None, + "label_config": None, + "maximum_annotations": "integer", + "min_annotations_to_start_training": "integer", + "model_version": None, + "num_tasks_with_annotations": "integer", + "organization": "integer", + "overlap_cohort_percentage": "integer", + "parsed_label_config": None, + "pinned_at": "datetime", + "queue_done": "integer", + "queue_total": "integer", + "reveal_preannotations_interactively": None, + "sampling": None, + "show_annotation_history": None, + "show_collab_predictions": None, + "show_ground_truth_first": None, + "show_instruction": None, + "show_overlap_first": None, + "show_skip_button": None, + "skip_queue": None, + "skipped_annotations_number": "integer", + "start_training_on_annotation_update": None, + "task_data_login": None, + "task_data_password": None, + "task_number": "integer", + "title": None, + "total_annotations_number": "integer", + "total_predictions_number": "integer", + "useful_annotation_number": "integer", + } + }, + ) + response = client.workspaces.projects.list(id=1) + validate_response(response, expected_response, expected_types) + + async_response = await async_client.workspaces.projects.list(id=1) + validate_response(async_response, expected_response, expected_types) + + +async def test_add(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + # Type ignore to avoid mypy complaining about the function not being meant to return a value + assert ( + client.workspaces.projects.add(id=1, project=1) # type: ignore[func-returns-value] + is None + ) + + assert ( + await async_client.workspaces.projects.add(id=1, project=1) # type: ignore[func-returns-value] + is None + ) + + +async def test_remove(client: LabelStudio, async_client: AsyncLabelStudio) -> None: + # Type ignore to avoid mypy complaining about the function not being meant to return a value + assert ( + client.workspaces.projects.remove(id=1) # type: ignore[func-returns-value] + is None + ) + + assert ( + await async_client.workspaces.projects.remove(id=1) # type: ignore[func-returns-value] + is None + )