Org-wide and filtered access to cloud integrations (#831) #794
5 fail, 7 skipped, 272 pass in 20m 17s
Annotations
Check warning on line 0 in storage.test_storage_folder_upload
github-actions / SDK integration test report
test_dataset_cloud_upload_invalid_json (storage.test_storage_folder_upload) failed
integration-test-report-python3_11.xml/integration-test-report-python3_11.xml
Raw output
temp_mirror_dataset = <encord.dataset.Dataset object at 0x7fc661ff0910>
ephemeral_user_client = <encord.user_client.EncordUserClient object at 0x7fc66213e450>
def test_dataset_cloud_upload_invalid_json(
temp_mirror_dataset: Dataset,
ephemeral_user_client: EncordUserClient,
) -> None:
integration_id = _get_integration_id(
ephemeral_user_client,
GCP_STORAGE_TEST_PARAMS.integration_title,
)
with pytest.raises(encord.exceptions.InvalidArgumentsError):
> temp_mirror_dataset.add_private_data_to_dataset_start(
integration_id,
{"videos": [{"objectUrl": GCP_STORAGE_TEST_PARAMS.video_links[0]}], "extraKey": "not allowed"},
ignore_errors=True,
folder=None,
)
src/sdk_integration_tests/tests/storage/test_storage_folder_upload.py:988:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.11/site-packages/encord/dataset.py:443: in add_private_data_to_dataset_start
return self._client.add_private_data_to_dataset_start(integration_id, private_files, ignore_errors, folder_uuid)
.venv/lib/python3.11/site-packages/encord/client.py:724: in add_private_data_to_dataset_start
process_hash = self._querier.basic_setter(
.venv/lib/python3.11/site-packages/encord/http/querier.py:119: in basic_setter
res, context = self._execute(request, retryable=retryable)
.venv/lib/python3.11/site-packages/encord/http/querier.py:204: in _execute
check_error_response(response, context, extra_payload)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
response = ['UNKNOWN_ERROR']
context = RequestContext(timestamp='2025-01-07T17:58:23.285282+00:00', trace_id='a334a622659a497581d284a9fd61e017', span_id='1')
payload = None
def check_error_response(response, context=None, payload=None):
"""
Checks server response.
Called if HTTP response status code is an error response.
"""
if response == AUTHENTICATION_ERROR:
raise AuthenticationError("You are not authenticated to access the Encord platform.", context=context)
if response == AUTHORISATION_ERROR:
raise AuthorisationError("You are not authorised to access this asset.", context=context)
if response == RESOURCE_NOT_FOUND_ERROR:
if payload:
raise ResourceNotFoundError(payload, context=context)
raise ResourceNotFoundError("The requested resource was not found in the database.", context=context)
if response == METHOD_NOT_ALLOWED_ERROR:
raise MethodNotAllowedError("HTTP method is not allowed.", context=context)
if response == UNKNOWN_ERROR:
> raise UnknownException("An unknown error occurred.", context=context)
E encord.exceptions.UnknownException: An unknown error occurred. timestamp='2025-01-07T17:58:23.285282+00:00' trace_id='a334a622659a497581d284a9fd61e017' span_id='1'
.venv/lib/python3.11/site-packages/encord/http/error_utils.py:73: UnknownException
Check warning on line 0 in user_client.test_cloud_integrations
github-actions / SDK integration test report
test_get_cloud_integrations_org_wide_not_allowed (user_client.test_cloud_integrations) failed
integration-test-report-python3_11.xml/integration-test-report-python3_11.xml
Raw output
ephemeral_user_client_non_org_user = <encord.user_client.EncordUserClient object at 0x7fc661a44c10>
@pytest.mark.skipif(
"include_org_access" not in inspect.signature(EncordUserClient.get_cloud_integrations).parameters,
reason="Org-wide access to cloud integrations is not supported by this version of SDK",
)
def test_get_cloud_integrations_org_wide_not_allowed(
ephemeral_user_client_non_org_user: EncordUserClient,
) -> None:
> with pytest.raises(AuthorisationError):
E Failed: DID NOT RAISE <class 'encord.exceptions.AuthorisationError'>
src/sdk_integration_tests/tests/user_client/test_cloud_integrations.py:103: Failed
Check warning on line 0 in user_client.test_cloud_integrations
github-actions / SDK integration test report
test_get_cloud_integrations_org_wide_user_client (user_client.test_cloud_integrations) failed
integration-test-report-python3_11.xml/integration-test-report-python3_11.xml
Raw output
ephemeral_user_client = <encord.user_client.EncordUserClient object at 0x7faf7b702d90>
@pytest.mark.skipif(
"include_org_access" not in inspect.signature(EncordUserClient.get_cloud_integrations).parameters,
reason="Org-wide access to cloud integrations is not supported by this version of SDK",
)
def test_get_cloud_integrations_org_wide_user_client(
ephemeral_user_client: EncordUserClient,
) -> None:
org_integrations = ephemeral_user_client.get_cloud_integrations(include_org_access=True) # type: ignore[call-arg, unused-ignore]
user_integrations = ephemeral_user_client.get_cloud_integrations(include_org_access=False) # type: ignore[call-arg, unused-ignore]
> assert len(org_integrations) > len(user_integrations)
E AssertionError: assert 6 > 6
E + where 6 = len([CloudIntegration(id='09af44ae-dc62-45e4-9635-09e05c478988', title='Direct Access Test Integration Not Client Side Only'), CloudIntegration(id='393e5373-6f28-4c9e-ae54-f759713fb7ed', title='Direct Access Test Integration Client Side Only'), CloudIntegration(id='08f5f8b5-9398-4cab-868a-9677cb097369', title='AWS-ENCORD-BUCKET-INTEGRATION'), CloudIntegration(id='a3aef476-1dfb-41bc-b6e3-0a7a0cf3ffe8', title='AWS Test SDK'), CloudIntegration(id='719ee2e7-f8fd-426e-882f-4614c603906c', title='GCP SDK Testing Integration'), CloudIntegration(id='52209c15-4e93-412d-a05c-6772add83245', title='Azure Test Integration')])
E + and 6 = len([CloudIntegration(id='09af44ae-dc62-45e4-9635-09e05c478988', title='Direct Access Test Integration Not Client Side Only'), CloudIntegration(id='393e5373-6f28-4c9e-ae54-f759713fb7ed', title='Direct Access Test Integration Client Side Only'), CloudIntegration(id='08f5f8b5-9398-4cab-868a-9677cb097369', title='AWS-ENCORD-BUCKET-INTEGRATION'), CloudIntegration(id='a3aef476-1dfb-41bc-b6e3-0a7a0cf3ffe8', title='AWS Test SDK'), CloudIntegration(id='719ee2e7-f8fd-426e-882f-4614c603906c', title='GCP SDK Testing Integration'), CloudIntegration(id='52209c15-4e93-412d-a05c-6772add83245', title='Azure Test Integration')])
src/sdk_integration_tests/tests/user_client/test_cloud_integrations.py:85: AssertionError
Check warning on line 0 in user_client.test_cvat_integration
github-actions / SDK integration test report
test_cvat_project_creation[labelled-False-service-account] (user_client.test_cvat_integration) failed
integration-test-report-python3_11.xml/integration-test-report-python3_11.xml
Raw output
review_mode = <ReviewMode.LABELLED: 'labelled'>, should_fail = False
ephemeral_user_client = <encord.user_client.EncordUserClient object at 0x7faf7bf1c150>
@pytest.mark.parametrize("account_type", [AccountTypeEnum.FIREBASE, AccountTypeEnum.SERVICE], indirect=True)
@pytest.mark.parametrize("should_fail", [False, True])
@pytest.mark.parametrize("review_mode", [ReviewMode.UNLABELLED, ReviewMode.LABELLED])
def test_cvat_project_creation(
review_mode: ReviewMode,
should_fail: bool,
ephemeral_user_client: EncordUserClient,
) -> None:
cur_dir = Path(__file__).resolve().parent
data_folder = cur_dir / "data" / "cvat project"
with TemporaryDirectory() as _tmp_dir_path:
tmp_dir_path = Path(_tmp_dir_path)
tmp_cvat_path = (tmp_dir_path / "cvat").resolve()
shutil.copytree(data_folder, tmp_cvat_path)
if should_fail:
with open(tmp_cvat_path / "annotations.xml") as f:
annotations_str = f.read()
with open(tmp_cvat_path / "annotations.xml", "w") as f:
f.write(
annotations_str.replace(
"<name>My Text attribute</name>",
"<name>Invalid</name>",
)
)
> ret = ephemeral_user_client.create_project_from_cvat(
LocalImport(file_path=str(tmp_cvat_path)),
"CVAT imported baking dataset",
review_mode,
timeout_seconds=120,
)
src/sdk_integration_tests/tests/user_client/test_cvat_integration.py:45:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.11/site-packages/encord/user_client.py:781: in create_project_from_cvat
return self.create_project_from_cvat_get_result(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <encord.user_client.EncordUserClient object at 0x7faf7bf1c150>
cvat_import_uuid = UUID('4d6aaf92-867a-426a-9593-51df7765008b')
def create_project_from_cvat_get_result(
self,
cvat_import_uuid: UUID,
*,
timeout_seconds: int = 1 * 24 * 60 * 60, # 1 day
) -> Union[CvatImporterSuccess, CvatImporterError]:
"""
Check the status and get the result of a CVAT import process. This is the second part of the
two-step import process.
Args:
cvat_import_uuid:
The UUID returned by create_project_from_cvat_start.
timeout_seconds:
Maximum time in seconds to wait for the import to complete. Defaults to 24 hours.
The method will poll the server periodically during this time.
Returns:
Union[CvatImporterSuccess, CvatImporterError]: The result of the import process.
- CvatImporterSuccess: Contains project_hash, dataset_hash, and any issues if the import succeeded.
- CvatImporterError: Contains any issues if the import failed.
Raises:
ValueError:
If the server returns an unexpected status or invalid response structure.
"""
failed_requests_count = 0
polling_start_timestamp = time.perf_counter()
while True:
try:
polling_elapsed_seconds = ceil(time.perf_counter() - polling_start_timestamp)
polling_available_seconds = max(0, timeout_seconds - polling_elapsed_seconds)
log.info(f"create_project_from_cvat_get_result started polling call {polling_elapsed_seconds=}")
tmp_res = self._api_client.get(
f"projects/cvat-import/{cvat_import_uuid}",
params=CvatImportGetResultParams(
timeout_seconds=min(
polling_available_seconds,
CVAT_LONG_POLLING_MAX_REQUEST_TIME_SECONDS,
),
),
result_type=CvatImportGetResultResponse,
)
if tmp_res.status == CvatImportGetResultLongPollingStatus.DONE:
log.info(f"cvat import job completed with cvat_import_uuid={cvat_import_uuid}.")
polling_elapsed_seconds = ceil(time.perf_counter() - polling_start_timestamp)
polling_available_seconds = max(0, timeout_seconds - polling_elapsed_seconds)
if polling_available_seconds == 0 or tmp_res.status in [
CvatImportGetResultLongPollingStatus.DONE,
CvatImportGetResultLongPollingStatus.ERROR,
]:
res = tmp_res
break
failed_requests_count = 0
except (requests.exceptions.RequestException, encord.exceptions.RequestException):
failed_requests_count += 1
if failed_requests_count >= CVAT_LONG_POLLING_RESPONSE_RETRY_N:
raise
time.sleep(CVAT_LONG_POLLING_SLEEP_ON_FAILURE_SECONDS)
if res.status == CvatImportGetResultLongPollingStatus.DONE:
if res.project_uuid is None:
raise ValueError(f"{res.project_uuid=}, res.project_uuid should not be None with DONE status")
if res.issues is None:
raise ValueError(f"{res.issues=}, res.issues should not be None with DONE status")
return CvatImporterSuccess(
project_hash=str(res.project_uuid),
dataset_hash=str(list(self.get_project(res.project_uuid).list_datasets())[0]),
issues=Issues.from_dict(res.issues),
)
elif res.status == CvatImportGetResultLongPollingStatus.ERROR:
if res.issues is None:
raise ValueError(f"{res.issues=}, res.issues should not be None with DONE status")
return CvatImporterError(
issues=Issues.from_dict(res.issues),
)
else:
> raise ValueError(f"{res.status=}, only DONE and ERROR status is expected after successful long polling")
E ValueError: res.status=<CvatImportGetResultLongPollingStatus.PENDING: 'PENDING'>, only DONE and ERROR status is expected after successful long polling
.venv/lib/python3.11/site-packages/encord/user_client.py:737: ValueError
Check warning on line 0 in user_client.test_cvat_integration
github-actions / SDK integration test report
test_cvat_project_creation[labelled-True-firebase-user] (user_client.test_cvat_integration) failed
integration-test-report-python3_11.xml/integration-test-report-python3_11.xml
Raw output
review_mode = <ReviewMode.LABELLED: 'labelled'>, should_fail = True
ephemeral_user_client = <encord.user_client.EncordUserClient object at 0x7fc661ff37d0>
@pytest.mark.parametrize("account_type", [AccountTypeEnum.FIREBASE, AccountTypeEnum.SERVICE], indirect=True)
@pytest.mark.parametrize("should_fail", [False, True])
@pytest.mark.parametrize("review_mode", [ReviewMode.UNLABELLED, ReviewMode.LABELLED])
def test_cvat_project_creation(
review_mode: ReviewMode,
should_fail: bool,
ephemeral_user_client: EncordUserClient,
) -> None:
cur_dir = Path(__file__).resolve().parent
data_folder = cur_dir / "data" / "cvat project"
with TemporaryDirectory() as _tmp_dir_path:
tmp_dir_path = Path(_tmp_dir_path)
tmp_cvat_path = (tmp_dir_path / "cvat").resolve()
shutil.copytree(data_folder, tmp_cvat_path)
if should_fail:
with open(tmp_cvat_path / "annotations.xml") as f:
annotations_str = f.read()
with open(tmp_cvat_path / "annotations.xml", "w") as f:
f.write(
annotations_str.replace(
"<name>My Text attribute</name>",
"<name>Invalid</name>",
)
)
> ret = ephemeral_user_client.create_project_from_cvat(
LocalImport(file_path=str(tmp_cvat_path)),
"CVAT imported baking dataset",
review_mode,
timeout_seconds=120,
)
src/sdk_integration_tests/tests/user_client/test_cvat_integration.py:45:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.11/site-packages/encord/user_client.py:781: in create_project_from_cvat
return self.create_project_from_cvat_get_result(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <encord.user_client.EncordUserClient object at 0x7fc661ff37d0>
cvat_import_uuid = UUID('f45a1fdb-789c-4f2d-9f08-c49bec680324')
def create_project_from_cvat_get_result(
self,
cvat_import_uuid: UUID,
*,
timeout_seconds: int = 1 * 24 * 60 * 60, # 1 day
) -> Union[CvatImporterSuccess, CvatImporterError]:
"""
Check the status and get the result of a CVAT import process. This is the second part of the
two-step import process.
Args:
cvat_import_uuid:
The UUID returned by create_project_from_cvat_start.
timeout_seconds:
Maximum time in seconds to wait for the import to complete. Defaults to 24 hours.
The method will poll the server periodically during this time.
Returns:
Union[CvatImporterSuccess, CvatImporterError]: The result of the import process.
- CvatImporterSuccess: Contains project_hash, dataset_hash, and any issues if the import succeeded.
- CvatImporterError: Contains any issues if the import failed.
Raises:
ValueError:
If the server returns an unexpected status or invalid response structure.
"""
failed_requests_count = 0
polling_start_timestamp = time.perf_counter()
while True:
try:
polling_elapsed_seconds = ceil(time.perf_counter() - polling_start_timestamp)
polling_available_seconds = max(0, timeout_seconds - polling_elapsed_seconds)
log.info(f"create_project_from_cvat_get_result started polling call {polling_elapsed_seconds=}")
tmp_res = self._api_client.get(
f"projects/cvat-import/{cvat_import_uuid}",
params=CvatImportGetResultParams(
timeout_seconds=min(
polling_available_seconds,
CVAT_LONG_POLLING_MAX_REQUEST_TIME_SECONDS,
),
),
result_type=CvatImportGetResultResponse,
)
if tmp_res.status == CvatImportGetResultLongPollingStatus.DONE:
log.info(f"cvat import job completed with cvat_import_uuid={cvat_import_uuid}.")
polling_elapsed_seconds = ceil(time.perf_counter() - polling_start_timestamp)
polling_available_seconds = max(0, timeout_seconds - polling_elapsed_seconds)
if polling_available_seconds == 0 or tmp_res.status in [
CvatImportGetResultLongPollingStatus.DONE,
CvatImportGetResultLongPollingStatus.ERROR,
]:
res = tmp_res
break
failed_requests_count = 0
except (requests.exceptions.RequestException, encord.exceptions.RequestException):
failed_requests_count += 1
if failed_requests_count >= CVAT_LONG_POLLING_RESPONSE_RETRY_N:
raise
time.sleep(CVAT_LONG_POLLING_SLEEP_ON_FAILURE_SECONDS)
if res.status == CvatImportGetResultLongPollingStatus.DONE:
if res.project_uuid is None:
raise ValueError(f"{res.project_uuid=}, res.project_uuid should not be None with DONE status")
if res.issues is None:
raise ValueError(f"{res.issues=}, res.issues should not be None with DONE status")
return CvatImporterSuccess(
project_hash=str(res.project_uuid),
dataset_hash=str(list(self.get_project(res.project_uuid).list_datasets())[0]),
issues=Issues.from_dict(res.issues),
)
elif res.status == CvatImportGetResultLongPollingStatus.ERROR:
if res.issues is None:
raise ValueError(f"{res.issues=}, res.issues should not be None with DONE status")
return CvatImporterError(
issues=Issues.from_dict(res.issues),
)
else:
> raise ValueError(f"{res.status=}, only DONE and ERROR status is expected after successful long polling")
E ValueError: res.status=<CvatImportGetResultLongPollingStatus.PENDING: 'PENDING'>, only DONE and ERROR status is expected after successful long polling
.venv/lib/python3.11/site-packages/encord/user_client.py:737: ValueError
Check notice on line 0 in .github
github-actions / SDK integration test report
7 skipped tests found
There are 7 skipped tests, see "Raw output" for the full list of skipped tests.
Raw output
projects.test_index ‑ test_collection_update[NEW_NAME-None]
projects.test_index ‑ test_collection_update[None-NEW DESC]
projects.test_index ‑ test_collections
projects.test_index ‑ test_preset_integration_test
projects.test_index ‑ test_preset_update[NEW_NAME-None-None]
projects.test_index ‑ test_preset_update[None-NEW DESC-None]
projects.test_index ‑ test_preset_update[None-None-update_filter_preset2]
Check notice on line 0 in .github
github-actions / SDK integration test report
284 tests found
There are 284 tests, see "Raw output" for the full list of tests.
Raw output
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[False-0-_input0-False-False-False-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[False-1-_input1-False-False-False-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[False-10-_input10-False-False-True-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[False-2-_input2-False-False-False-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[False-3-_input3-True-False-False-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[False-4-_input4-False-True-False-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[False-5-_input5-True-True-False-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[False-6-_input6-True-False-True-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[False-7-_input7-False-True-True-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[False-8-_input8-True-True-True-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[False-9-_input9-False-False-True-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[True-0-_input0-False-False-False-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[True-1-_input1-False-False-False-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[True-10-_input10-False-False-True-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[True-2-_input2-False-False-False-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[True-3-_input3-True-False-False-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[True-4-_input4-False-True-False-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[True-5-_input5-True-True-False-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[True-6-_input6-True-False-True-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[True-7-_input7-False-True-True-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[True-8-_input8-True-True-True-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_add_private_data_to_dataset[True-9-_input9-False-False-True-ssh-key-authentication]
datasets.test_cloud_integrations ‑ test_get_cloud_integration_ids_for_aws_and_gcp_dataset[ssh-key-authentication]
datasets.test_dataset_accessors ‑ test_client_metadata_for_cloud_upload_ssh_access[False-assert_client_metadatas_are_none]
datasets.test_dataset_accessors ‑ test_client_metadata_for_cloud_upload_ssh_access[True-assert_client_metadatas_are_present]
datasets.test_dataset_accessors ‑ test_data_row_for_dicom[ssh-key-authentication]
datasets.test_dataset_accessors ‑ test_data_row_for_native_image[ssh-key-authentication]
datasets.test_dataset_accessors ‑ test_data_row_for_native_image_group[ssh-key-authentication]
datasets.test_dataset_accessors ‑ test_data_row_for_video[ssh-key-authentication]
datasets.test_dataset_accessors ‑ test_data_row_for_video_image_group[ssh-key-authentication]
datasets.test_dataset_accessors ‑ test_dataset_data_rows_filtered[ssh-key-authentication]
datasets.test_dataset_groups ‑ test_add_group_to_dataset[firebase-user]
datasets.test_dataset_groups ‑ test_add_group_to_dataset[service-account]
datasets.test_dataset_groups ‑ test_list_dataset_groups[firebase-user]
datasets.test_dataset_groups ‑ test_list_dataset_groups[service-account]
datasets.test_dataset_groups ‑ test_remove_group_from_dataset[firebase-user]
datasets.test_dataset_groups ‑ test_remove_group_from_dataset[service-account]
datasets.test_dataset_helpers ‑ test_obtain_re_encode_video_status_and_re_encoded_link[ssh-key-authentication]
datasets.test_dataset_helpers ‑ test_run_ocr[ssh-key-authentication]
datasets.test_dicom_series ‑ test_dicom_series_title_update_after_upload[ssh-key-authentication]
datasets.test_dicom_series ‑ test_upload_dicom_series[ssh-key-authentication]
datasets.test_dynamic_datasets ‑ test_cannot_upload_to_dynamic_dataset
datasets.test_dynamic_datasets ‑ test_link_to_dynamic_dataset[ssh-key-authentication]
datasets.test_image_group ‑ test_create_image_group[ssh-key-authentication-False]
datasets.test_image_group ‑ test_create_image_group[ssh-key-authentication-True]
datasets.test_image_group ‑ test_create_image_group_old_api_without_long_polling[ssh-key-authentication-False-firebase-user]
datasets.test_image_group ‑ test_create_image_group_old_api_without_long_polling[ssh-key-authentication-False-service-account]
datasets.test_image_group ‑ test_create_image_group_old_api_without_long_polling[ssh-key-authentication-True-firebase-user]
datasets.test_image_group ‑ test_create_image_group_old_api_without_long_polling[ssh-key-authentication-True-service-account]
datasets.test_image_group ‑ test_image_title_update_after_upload[ssh-key-authentication]
datasets.test_native_image ‑ test_image_title_update_after_upload[ssh-key-authentication]
datasets.test_native_image ‑ test_upload_native_image[ssh-key-authentication]
datasets.test_native_image ‑ test_upload_native_image_old_api_without_long_polling[ssh-key-authentication-firebase-user]
datasets.test_native_image ‑ test_upload_native_image_old_api_without_long_polling[ssh-key-authentication-service-account]
datasets.test_nifti ‑ test_upload_nifti
datasets.test_user_client_datasets ‑ test_create_dataset_backwards_compatible[firebase-user]
datasets.test_user_client_datasets ‑ test_create_dataset_backwards_compatible[service-account]
datasets.test_user_client_datasets ‑ test_create_dataset_old_api[False-0-firebase-user]
datasets.test_user_client_datasets ‑ test_create_dataset_old_api[False-0-service-account]
datasets.test_user_client_datasets ‑ test_create_dataset_old_api[False-1-firebase-user]
datasets.test_user_client_datasets ‑ test_create_dataset_old_api[False-1-service-account]
datasets.test_user_client_datasets ‑ test_create_dataset_old_api[True-0-firebase-user]
datasets.test_user_client_datasets ‑ test_create_dataset_old_api[True-0-service-account]
datasets.test_user_client_datasets ‑ test_create_dataset_old_api[True-1-firebase-user]
datasets.test_user_client_datasets ‑ test_create_dataset_old_api[True-1-service-account]
datasets.test_user_client_datasets ‑ test_create_dataset_private_deprecated[firebase-user]
datasets.test_user_client_datasets ‑ test_create_dataset_private_deprecated[service-account]
datasets.test_user_client_datasets ‑ test_create_dataset_simple[ssh-key-authentication-firebase-user]
datasets.test_user_client_datasets ‑ test_create_dataset_simple[ssh-key-authentication-service-account]
datasets.test_user_client_datasets ‑ test_get_dataset[ssh-key-authentication-firebase-user]
datasets.test_user_client_datasets ‑ test_get_dataset[ssh-key-authentication-service-account]
datasets.test_user_client_datasets ‑ test_get_dataset_client[firebase-user]
datasets.test_user_client_datasets ‑ test_get_dataset_client[service-account]
datasets.test_user_client_datasets ‑ test_get_datasets[firebase-user]
datasets.test_user_client_datasets ‑ test_get_datasets[service-account]
datasets.test_user_client_datasets ‑ test_get_datasets_include_org_access
datasets.test_user_client_datasets ‑ test_get_datasets_old_api[firebase-user]
datasets.test_user_client_datasets ‑ test_get_datasets_old_api[service-account]
datasets.test_users ‑ test_add_users_to_dataset[ssh-key-authentication-firebase-user]
datasets.test_users ‑ test_add_users_to_dataset[ssh-key-authentication-service-account]
datasets.test_users ‑ test_dataset_access_controls[firebase-user]
datasets.test_users ‑ test_dataset_access_controls[service-account]
datasets.test_users ‑ test_projects_access_controls[0-firebase-user]
datasets.test_users ‑ test_projects_access_controls[0-service-account]
datasets.test_users ‑ test_projects_access_controls[1-firebase-user]
datasets.test_users ‑ test_projects_access_controls[1-service-account]
datasets.test_videos ‑ test_delete_multiple_videos_from_dataset[ssh-key-authentication]
datasets.test_videos ‑ test_delete_video_from_dataset[ssh-key-authentication]
datasets.test_videos ‑ test_delete_video_with_same_changed_name[ssh-key-authentication]
datasets.test_videos ‑ test_delete_video_with_same_initial_name[ssh-key-authentication]
datasets.test_videos ‑ test_upload_multiple_videos[ssh-key-authentication]
datasets.test_videos ‑ test_upload_video[ssh-key-authentication]
datasets.test_videos ‑ test_upload_video_old_api_without_long_polling[ssh-key-authentication]
datasets.test_videos ‑ test_video_set_title_on_upload[ssh-key-authentication]
datasets.test_videos ‑ test_video_title_update_after_upload[ssh-key-authentication]
ontology.test_ontology_crud ‑ test_ontology_save[firebase-user]
ontology.test_ontology_crud ‑ test_ontology_save[service-account]
ontology.test_ontology_groups ‑ test_add_group_to_ontology[firebase-user]
ontology.test_ontology_groups ‑ test_add_group_to_ontology[service-account]
ontology.test_ontology_groups ‑ test_list_ontology_groups[firebase-user]
ontology.test_ontology_groups ‑ test_list_ontology_groups[service-account]
ontology.test_ontology_groups ‑ test_remove_group_from_ontology[firebase-user]
ontology.test_ontology_groups ‑ test_remove_group_from_ontology[service-account]
projects.test_cloud_integrations ‑ test_get_cloud_integration_ids_for_aws_and_gcp_project[ssh-key-authentication]
projects.test_datasets ‑ test_add_datasets_to_project[ssh-key-authentication]
projects.test_datasets ‑ test_remove_datasets_from_project[ssh-key-authentication]
projects.test_index ‑ test_collection_update[NEW_NAME-None]
projects.test_index ‑ test_collection_update[None-NEW DESC]
projects.test_index ‑ test_collections
projects.test_index ‑ test_preset_integration_test
projects.test_index ‑ test_preset_update[NEW_NAME-None-None]
projects.test_index ‑ test_preset_update[None-NEW DESC-None]
projects.test_index ‑ test_preset_update[None-None-update_filter_preset2]
projects.test_label_row_v2 ‑ test_add_labels_audio
projects.test_label_row_v2 ‑ test_add_labels_dicom
projects.test_label_row_v2 ‑ test_add_labels_image_group
projects.test_label_row_v2 ‑ test_add_labels_native_image
projects.test_label_row_v2 ‑ test_add_labels_video
projects.test_label_row_v2 ‑ test_adding_labels_with_object_answers
projects.test_label_row_v2 ‑ test_bundled_label_create
projects.test_label_row_v2 ‑ test_bundled_label_update
projects.test_label_row_v2 ‑ test_coco_import_labels
projects.test_label_row_v2 ‑ test_filter_labels_by_data_title
projects.test_label_row_v2 ‑ test_filter_labels_by_task_status
projects.test_label_row_v2 ‑ test_filter_not_created_labels_by_edited_date
projects.test_label_row_v2 ‑ test_filter_real_labels_by_edited_date
projects.test_label_row_v2 ‑ test_initiate_labelling
projects.test_label_row_v2 ‑ test_labels_interpolation
projects.test_label_row_v2 ‑ test_list_labels_row_metadata
projects.test_labels ‑ test_adapt_dicom_label_row[ssh-key-authentication]
projects.test_labels ‑ test_adapt_image_group_label_row[ssh-key-authentication]
projects.test_labels ‑ test_adapt_native_image_label_row[ssh-key-authentication]
projects.test_labels ‑ test_adapt_video_label_row[ssh-key-authentication]
projects.test_labels ‑ test_create_label_row[ssh-key-authentication]
projects.test_labels ‑ test_get_label_logs[ssh-key-authentication]
projects.test_labels ‑ test_get_label_row[ssh-key-authentication]
projects.test_labels ‑ test_get_multiple_filtered_label_rows[ssh-key-authentication]
projects.test_labels ‑ test_get_multiple_label_rows[ssh-key-authentication]
projects.test_labels ‑ test_get_no_label_rows[ssh-key-authentication]
projects.test_labels ‑ test_get_one_label_rows[ssh-key-authentication]
projects.test_labels ‑ test_get_too_many_label_rows[ssh-key-authentication]
projects.test_labels ‑ test_image_group_get_label_row[False]
projects.test_labels ‑ test_image_group_get_label_row[True]
projects.test_labels ‑ test_list_label_rows[ssh-key-authentication]
projects.test_labels ‑ test_list_label_rows_new_fields[ssh-key-authentication]
projects.test_labels ‑ test_request_one_wrong_label_row[ssh-key-authentication]
projects.test_labels ‑ test_save_label_row[ssh-key-authentication]
projects.test_labels ‑ test_save_label_row_empty_labels[ssh-key-authentication]
projects.test_labels ‑ test_save_label_row_validate_on_save[invalid-labels-ssh-key-authentication]
projects.test_labels ‑ test_save_label_row_validate_on_save[valid-labels-ssh-key-authentication]
projects.test_labels ‑ test_save_label_row_validation_results[invalid-labels-ssh-key-authentication]
projects.test_labels ‑ test_save_label_row_validation_results[valid-labels-ssh-key-authentication]
projects.test_models_crud ‑ test_create_model_row[ssh-key-authentication]
projects.test_models_crud ‑ test_list_models[ssh-key-authentication]
projects.test_models_train_inference ‑ test_classification_train_inference_ssh_access_using_cpu[False]
projects.test_models_train_inference ‑ test_classification_train_inference_ssh_access_using_cpu[True]
projects.test_models_train_inference ‑ test_instance_segmentation_train_inference_ssh_access
projects.test_models_train_inference ‑ test_object_detection_train_inference_ssh_key_access
projects.test_ontology ‑ test_create_and_edit_ontology[ssh-key-authentication-firebase-user]
projects.test_ontology ‑ test_create_and_edit_ontology[ssh-key-authentication-service-account]
projects.test_ontology ‑ test_create_ontology_rotated_box[ssh-key-authentication-firebase-user]
projects.test_ontology ‑ test_create_ontology_rotated_box[ssh-key-authentication-service-account]
projects.test_ontology ‑ test_get_ontologies[ssh-key-authentication-firebase-user]
projects.test_ontology ‑ test_get_ontologies[ssh-key-authentication-service-account]
projects.test_ontology ‑ test_get_ontologies_include_org_access
projects.test_ontology ‑ test_get_ontology[ssh-key-authentication-firebase-user]
projects.test_ontology ‑ test_get_ontology[ssh-key-authentication-service-account]
projects.test_ontology ‑ test_legacy_ontology_crud[ssh-key-authentication]
projects.test_ontology ‑ test_save_ontology[ssh-key-authentication]
projects.test_ontology ‑ test_show_empty_project_ontology[ssh-key-authentication-firebase-user]
projects.test_ontology ‑ test_show_empty_project_ontology[ssh-key-authentication-service-account]
projects.test_ontology ‑ test_update_existing_ontology[ssh-key-authentication-firebase-user]
projects.test_ontology ‑ test_update_existing_ontology[ssh-key-authentication-service-account]
projects.test_project ‑ test_return_404_when_wrong_data_item_uuid_in_right_project[firebase-user]
projects.test_project ‑ test_return_404_when_wrong_data_item_uuid_in_right_project[service-account]
projects.test_project_accessors ‑ test_get_project_orm[ssh-key-authentication]
projects.test_project_accessors ‑ test_project_client_accessors[ssh-key-authentication]
projects.test_project_groups ‑ test_add_group_to_project[firebase-user]
projects.test_project_groups ‑ test_add_group_to_project[service-account]
projects.test_project_groups ‑ test_list_project_groups[firebase-user]
projects.test_project_groups ‑ test_list_project_groups[service-account]
projects.test_project_groups ‑ test_remove_group_from_project[firebase-user]
projects.test_project_groups ‑ test_remove_group_from_project[service-account]
projects.test_shadow_data ‑ test_shadow_data_project
projects.test_skeleton_template ‑ test_create_skeleton_instance[invalid-input]
projects.test_skeleton_template ‑ test_create_skeleton_instance[valid-input]
projects.test_skeleton_template ‑ test_ontology_containing_skeleton_template
projects.test_tms2_related ‑ test_workflow_labelling_can_be_completed
projects.test_tms2_related ‑ test_workflow_labelling_can_be_reopened
projects.test_tms2_related ‑ test_workflow_nodes_exposed_in_label_row_v2
projects.test_tms2_related ‑ test_workflow_non_tms_project_raises_on_reopen
projects.test_tms2_related ‑ test_workflow_non_tms_project_shown_correctly
projects.test_tms2_related ‑ test_workflow_project_raises_on_set_label_status
projects.test_tms2_related ‑ test_workflow_project_raises_on_submit_label_row_for_review
projects.test_tms2_related ‑ test_workflow_server_side_filter_empty_for_pre_workflow_projects
projects.test_tms2_related ‑ test_workflow_server_side_filter_works
projects.test_user_client_projects ‑ test_create_and_copy_project[firebase-user]
projects.test_user_client_projects ‑ test_create_and_copy_project[service-account]
projects.test_user_client_projects ‑ test_create_project_with_no_datasets[firebase-user]
projects.test_user_client_projects ‑ test_create_project_with_no_datasets[service-account]
projects.test_user_client_projects ‑ test_get_project_client[firebase-user]
projects.test_user_client_projects ‑ test_get_project_client[service-account]
projects.test_user_client_projects ‑ test_get_projects[ssh-key-authentication-firebase-user]
projects.test_user_client_projects ‑ test_get_projects[ssh-key-authentication-service-account]
projects.test_user_client_projects ‑ test_list_projects
projects.test_users ‑ test_add_users_to_project[ssh-key-authentication-firebase-user]
projects.test_users ‑ test_add_users_to_project[ssh-key-authentication-service-account]
storage.test_storage_folder_groups ‑ test_storage_folder_groups_manipulation
storage.test_storage_folder_upload ‑ test_dataset_cloud_upload_cancel_job[integration0-False-False]
storage.test_storage_folder_upload ‑ test_dataset_cloud_upload_cancel_job[integration1-False-True]
storage.test_storage_folder_upload ‑ test_dataset_cloud_upload_cancel_job[integration2-True-False]
storage.test_storage_folder_upload ‑ test_dataset_cloud_upload_cancel_job[integration3-True-True]
storage.test_storage_folder_upload ‑ test_dataset_cloud_upload_invalid_json
storage.test_storage_folder_upload ‑ test_gcp_cloud_upload_via_dynamic_dataset
storage.test_storage_folder_upload ‑ test_storage_folder_cloud_upload_cancel_job[integration0-False-False]
storage.test_storage_folder_upload ‑ test_storage_folder_cloud_upload_cancel_job[integration1-False-True]
storage.test_storage_folder_upload ‑ test_storage_folder_cloud_upload_cancel_job[integration2-True-False]
storage.test_storage_folder_upload ‑ test_storage_folder_cloud_upload_cancel_job[integration3-True-True]
storage.test_storage_folder_upload ‑ test_storage_folder_cloud_upload_image_group_with_image_metadata
storage.test_storage_folder_upload ‑ test_storage_folder_create_dicom_series
storage.test_storage_folder_upload ‑ test_storage_folder_create_image_group
storage.test_storage_folder_upload ‑ test_storage_folder_create_image_sequence
storage.test_storage_folder_upload ‑ test_storage_folder_gcp_cloud_upload
storage.test_storage_folder_upload ‑ test_storage_folder_gcp_cloud_upload_readable_errors
storage.test_storage_folder_upload ‑ test_storage_folder_upload_audio
storage.test_storage_folder_upload ‑ test_storage_folder_upload_image
storage.test_storage_folder_upload ‑ test_storage_folder_upload_images_with_image_metadata
storage.test_storage_folder_upload ‑ test_storage_folder_upload_metadata_upsert
storage.test_storage_folder_upload ‑ test_storage_folder_upload_pdf
storage.test_storage_folder_upload ‑ test_storage_folder_upload_text
storage.test_storage_folder_upload ‑ test_storage_folder_upload_texts_via_struct_param
storage.test_storage_folder_upload ‑ test_storage_folder_upload_video
storage.test_storage_folder_upload ‑ test_upload_dicom_series_via_dynamic_dataset
storage.test_storage_folder_upload ‑ test_upload_image_group_via_dynamic_dataset
storage.test_storage_folder_upload ‑ test_upload_image_via_dynamic_dataset
storage.test_storage_folder_upload ‑ test_upload_video_via_dynamic_dataset
storage.test_storage_folder_upload_direct_access_dicom_series ‑ test_storage_folder_upload_direct_access_dicom_series
storage.test_storage_folders_crud ‑ test_create_delete_storage_folder_with_parent
storage.test_storage_folders_crud ‑ test_create_update_delete_storage_folder
storage.test_storage_folders_crud ‑ test_get_folder_authorisation_error
storage.test_storage_folders_crud ‑ test_move_storage_folder
storage.test_storage_folders_crud ‑ test_update_folders_bundled
storage.test_storage_folders_listing ‑ test_storage_folder_find_folders_recursively
storage.test_storage_folders_listing ‑ test_storage_folder_list_subfolders
storage.test_storage_folders_listing ‑ test_storage_folders_list_top_level
storage.test_storage_folders_listing ‑ test_storage_folders_search
storage.test_storage_items_listing ‑ test_storage_find_items
storage.test_storage_items_listing ‑ test_storage_find_items_recursively
storage.test_storage_items_listing ‑ test_storage_folder_list_items
storage.test_storage_items_listing ‑ test_storage_get_items_bulk
storage.test_storage_items_listing ‑ test_storage_item_adjust_client_metadata_without_refetch
storage.test_storage_items_listing ‑ test_storage_item_bulk_updates
storage.test_storage_items_listing ‑ test_storage_item_crud
storage.test_storage_items_listing ‑ test_storage_item_move_with_sync_dataset
storage.test_storage_items_listing ‑ test_storage_item_reset_client_metadata
storage.test_storage_migrator ‑ test_storage_migration_integrations
storage.test_storage_migrator ‑ test_storage_migration_urls
storage.test_storage_video_operations ‑ test_reencode_video
user_client.test_cloud_integrations ‑ test_get_cloud_integration_ids_for_aws_and_gcp_user_client[False]
user_client.test_cloud_integrations ‑ test_get_cloud_integration_ids_for_aws_and_gcp_user_client[True]
user_client.test_cloud_integrations ‑ test_get_cloud_integrations_filters_user_client
user_client.test_cloud_integrations ‑ test_get_cloud_integrations_org_wide_not_allowed
user_client.test_cloud_integrations ‑ test_get_cloud_integrations_org_wide_user_client
user_client.test_cvat_integration ‑ test_cvat_project_creation[labelled-False-firebase-user]
user_client.test_cvat_integration ‑ test_cvat_project_creation[labelled-False-service-account]
user_client.test_cvat_integration ‑ test_cvat_project_creation[labelled-True-firebase-user]
user_client.test_cvat_integration ‑ test_cvat_project_creation[labelled-True-service-account]
user_client.test_cvat_integration ‑ test_cvat_project_creation[unlabelled-False-firebase-user]
user_client.test_cvat_integration ‑ test_cvat_project_creation[unlabelled-False-service-account]
user_client.test_cvat_integration ‑ test_cvat_project_creation[unlabelled-True-firebase-user]
user_client.test_cvat_integration ‑ test_cvat_project_creation[unlabelled-True-service-account]
user_client.test_deid_dicom_files ‑ test_deidentify_dicom_files_private[0-storage_test_params0-True-DeidentifyRedactTextMode.REDACT_ALL_TEXT-save_conditions0-None]
user_client.test_deid_dicom_files ‑ test_deidentify_dicom_files_private[1-storage_test_params1-True-DeidentifyRedactTextMode.REDACT_ALL_TEXT-save_conditions1-None]
user_client.test_deid_dicom_files ‑ test_deidentify_dicom_files_private[2-storage_test_params2-True-DeidentifyRedactTextMode.REDACT_ALL_TEXT-save_conditions2-None]
user_client.test_deid_dicom_files ‑ test_deidentify_dicom_files_private[3-storage_test_params3-True-DeidentifyRedactTextMode.REDACT_ALL_TEXT-save_conditions3-https://storage.cloud.google.com/sdk-test-bucket/deid-prefix]
user_client.test_deid_dicom_files ‑ test_deidentify_dicom_files_private[4-storage_test_params4-True-DeidentifyRedactTextMode.REDACT_ALL_TEXT-save_conditions4-None]
user_client.test_deid_dicom_files ‑ test_deidentify_dicom_files_private[5-storage_test_params5-False-DeidentifyRedactTextMode.REDACT_NO_TEXT-None-https://sdk-tests.s3.eu-west-2.amazonaws.com/deid-prefix/]
user_client.test_deid_dicom_files ‑ test_deidentify_dicom_files_private[6-storage_test_params6-True-DeidentifyRedactTextMode.REDACT_SENSITIVE_TEXT-save_conditions6-https://cordteststoragetwo.blob.core.windows.net/sdk-test-bucket/deid-prefix/nested/]
user_client.test_groups ‑ test_list_groups[firebase-user]
user_client.test_groups ‑ test_list_groups[service-account]
workflows.test_workflows ‑ test_enumerate_workflow_stage_get_tasks
workflows.test_workflows ‑ test_enumerate_workflow_stages
workflows.test_workflows ‑ test_workflow_submit_all_annotation_tasks_in_bulk
workflows.test_workflows ‑ test_workflow_submit_annotation_task