Chore: Fixed links #1085
Chore: Fixed links #1085
1 errors, 7 fail, 4 skipped, 277 pass in 21m 51s
Annotations
Check warning on line 0 in datasets.test_users
github-actions / SDK integration test report
test_add_users_to_dataset[ssh-key-authentication-firebase-user] (datasets.test_users) failed
./encord-backend/projects/sdk-integration-tests/integration-test-report-python3_13.xml [took 6s]
Raw output
encord.exceptions.AuthorisationError: You are not authorised to access this asset. timestamp='2026-03-11T17:24:35.353907+00:00' trace_id='4511e3041bd04b70b2f4f0368491ed12' span_id='1' domain='https://dev.api.encord.com/'
ephemeral_cord_dataset_client = <encord.dataset.Dataset object at 0x7f0ab4838cb0>
@pytest.mark.parametrize("account_type", [AccountTypeEnum.FIREBASE, AccountTypeEnum.SERVICE], indirect=True)
def test_add_users_to_dataset(
ephemeral_cord_dataset_client: EncordClientDataset | Dataset,
) -> None:
> res = ephemeral_cord_dataset_client.add_users([TEST_USER_EMAIL_1], DatasetUserRole.USER)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sdk_integration_tests/tests/datasets/test_users.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.12/site-packages/encord/dataset.py:183: in add_users
return self._client.add_users(user_emails, user_role)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/client.py:276: in add_users
users = self._querier.basic_setter(DatasetUsers, self._querier.resource_id, payload=payload)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/http/querier.py:120: in basic_setter
res, context = self._execute(request, retryable=retryable)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/http/querier.py:208: in _execute
check_error_response(response, context, extra_payload)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
response = ['AUTHORISATION_ERROR']
context = RequestContext(timestamp='2026-03-11T17:24:35.353907+00:00', trace_id='4511e3041bd04b70b2f4f0368491ed12', span_id='1', domain='https://dev.api.encord.com/')
payload = 'User(s) testuser1@cord.tech are not members of your organisation.'
def check_error_response(response, context: Optional[RequestContext] = None, payload: Any = 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)
E encord.exceptions.AuthorisationError: You are not authorised to access this asset. timestamp='2026-03-11T17:24:35.353907+00:00' trace_id='4511e3041bd04b70b2f4f0368491ed12' span_id='1' domain='https://dev.api.encord.com/'
.venv/lib/python3.12/site-packages/encord/http/error_utils.py:64: AuthorisationError
Check warning on line 0 in datasets.test_users
github-actions / SDK integration test report
test_add_users_to_dataset[ssh-key-authentication-service-account] (datasets.test_users) failed
./encord-backend/projects/sdk-integration-tests/integration-test-report-python3_13.xml [took 1s]
Raw output
encord.exceptions.AuthorisationError: You are not authorised to access this asset. timestamp='2026-03-11T17:24:41.676844+00:00' trace_id='8a3791e14cae4e36a092c0e6d72a1cc7' span_id='1' domain='https://dev.api.encord.com/'
ephemeral_cord_dataset_client = <encord.dataset.Dataset object at 0x7f0ab482cb90>
@pytest.mark.parametrize("account_type", [AccountTypeEnum.FIREBASE, AccountTypeEnum.SERVICE], indirect=True)
def test_add_users_to_dataset(
ephemeral_cord_dataset_client: EncordClientDataset | Dataset,
) -> None:
> res = ephemeral_cord_dataset_client.add_users([TEST_USER_EMAIL_1], DatasetUserRole.USER)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sdk_integration_tests/tests/datasets/test_users.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.12/site-packages/encord/dataset.py:183: in add_users
return self._client.add_users(user_emails, user_role)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/client.py:276: in add_users
users = self._querier.basic_setter(DatasetUsers, self._querier.resource_id, payload=payload)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/http/querier.py:120: in basic_setter
res, context = self._execute(request, retryable=retryable)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/http/querier.py:208: in _execute
check_error_response(response, context, extra_payload)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
response = ['AUTHORISATION_ERROR']
context = RequestContext(timestamp='2026-03-11T17:24:41.676844+00:00', trace_id='8a3791e14cae4e36a092c0e6d72a1cc7', span_id='1', domain='https://dev.api.encord.com/')
payload = 'User(s) testuser1@cord.tech are not members of your organisation.'
def check_error_response(response, context: Optional[RequestContext] = None, payload: Any = 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)
E encord.exceptions.AuthorisationError: You are not authorised to access this asset. timestamp='2026-03-11T17:24:41.676844+00:00' trace_id='8a3791e14cae4e36a092c0e6d72a1cc7' span_id='1' domain='https://dev.api.encord.com/'
.venv/lib/python3.12/site-packages/encord/http/error_utils.py:64: AuthorisationError
Check warning on line 0 in projects.test_editor_logs
github-actions / SDK integration test report
test_read_logs_works (projects.test_editor_logs) failed
./encord-backend/projects/sdk-integration-tests/integration-test-report-python3_13.xml [took 2s]
Raw output
AssertionError: Expected to find editor logs after insertion
assert 0 == 3
+ where 0 = len([])
ephemeral_user_client = <encord.user_client.EncordUserClient object at 0x7fb8ddc22d80>
ephemeral_project_hash = 'c2bf71d8-d33f-43e3-9d38-cc1d97e10a45'
@pytest.mark.skipif(ENCORD_VERSION < "0.1.179", reason="Editor logs feature only available from this version")
def test_read_logs_works(ephemeral_user_client: EncordUserClient, ephemeral_project_hash: str) -> None:
user_bearer_token = get_firebase_bearer_token(USER_EMAIL, PASSWORD)
project = ephemeral_user_client.get_project(ephemeral_project_hash)
start_time = get_utc_datetime_now() - timedelta(days=29)
end_time = get_utc_datetime_now()
logs = project.get_editor_logs(start_time=start_time, end_time=end_time)
assert len(list(logs)) == 0, "No logs have been added"
# Insert some test editor logs using the API directly
original_logs = _insert_test_editor_logs(ephemeral_user_client, ephemeral_project_hash, user_bearer_token)
start_time = get_utc_datetime_now() - timedelta(days=29)
end_time = get_utc_datetime_now()
logs = project.get_editor_logs(start_time=start_time, end_time=end_time)
log_list = list(logs)
# Verify that logs were inserted
for i, log in enumerate(log_list):
assert_log_equality(log, original_logs[i], project)
> assert len(log_list) == 3, "Expected to find editor logs after insertion"
E AssertionError: Expected to find editor logs after insertion
E assert 0 == 3
E + where 0 = len([])
src/sdk_integration_tests/tests/projects/test_editor_logs.py:46: AssertionError
Check failure on line 0 in projects.test_shadow_data
github-actions / SDK integration test report
test_shadow_data_project (projects.test_shadow_data) with error
./encord-backend/projects/sdk-integration-tests/integration-test-report-python3_13.xml [took 8s]
Raw output
failed on setup with "encord.exceptions.AuthorisationError: You are not authorised to access this asset. timestamp='2026-03-11T17:35:05.812620+00:00' trace_id='3dc7b36bb8e1438db90769b5da4b7e07' span_id='1' domain='https://dev.api.encord.com/'"
failed on teardown with "encord.exceptions.InvalidArgumentsError: Failed to delete ontology that is being used by projects timestamp='2026-03-11T17:35:06.924696+00:00' trace_id='0d36256397154b4aaae84ea9be17bb5e' span_id='1' domain='https://dev.api.encord.com'"
ephemeral_user_client = <encord.user_client.EncordUserClient object at 0x7fb8e51d2240>
ephemeral_ontology = <encord.ontology.Ontology object at 0x7fb8dd5a5910>
source_data_project_hash = '559b03d1-a5f2-48ca-b074-b8297a12593c'
shadow_dataset_with_data_hash = '44574bef-7481-468b-8452-89975f8d0551'
@pytest.fixture(name="shadow_data_project_hash")
def get_shadow_data_project_hash(
ephemeral_user_client: EncordUserClient,
ephemeral_ontology: Ontology,
source_data_project_hash: str,
shadow_dataset_with_data_hash: str,
) -> Iterator[str]:
shadow_project_hash = ephemeral_user_client.create_project(
project_title=SHADOW_PROJECT_TITLE,
dataset_hashes=[shadow_dataset_with_data_hash],
ontology_hash=ephemeral_ontology.ontology_hash,
workflow_settings=BenchmarkQaWorkflowSettings(source_projects=[source_data_project_hash]),
)
logger.info("Created the shadow project %s", shadow_project_hash)
project_client = ephemeral_user_client.get_project(shadow_project_hash)
> project_client.add_users([TEST_USER_EMAIL_1, TEST_USER_EMAIL_2], ProjectUserRole.ANNOTATOR)
src/sdk_integration_tests/tests/projects/test_shadow_data.py:106:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.12/site-packages/encord/project.py:299: in add_users
return self._client.add_users(user_emails, user_role)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/client.py:882: in add_users
users = self._querier.basic_setter(ProjectUsers, self._querier.resource_id, payload=payload)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/http/querier.py:120: in basic_setter
res, context = self._execute(request, retryable=retryable)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/http/querier.py:208: in _execute
check_error_response(response, context, extra_payload)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
response = ['AUTHORISATION_ERROR']
context = RequestContext(timestamp='2026-03-11T17:35:05.812620+00:00', trace_id='3dc7b36bb8e1438db90769b5da4b7e07', span_id='1', domain='https://dev.api.encord.com/')
payload = 'User(s) testuser2@cord.tech, testuser1@cord.tech are not members of your organisation.'
def check_error_response(response, context: Optional[RequestContext] = None, payload: Any = 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)
E encord.exceptions.AuthorisationError: You are not authorised to access this asset. timestamp='2026-03-11T17:35:05.812620+00:00' trace_id='3dc7b36bb8e1438db90769b5da4b7e07' span_id='1' domain='https://dev.api.encord.com/'
.venv/lib/python3.12/site-packages/encord/http/error_utils.py:64: AuthorisationError
ephemeral_user_client = <encord.user_client.EncordUserClient object at 0x7fb8e51d2240>
@pytest.fixture
def ephemeral_ontology(ephemeral_user_client: EncordUserClient) -> Iterator[Ontology]:
uniq = str(uuid.uuid4())
structure = OntologyStructure.from_dict(EPHEMERAL_ONTOLOGY_STRUCTURE_DICT)
ontology = ephemeral_user_client.create_ontology(f"SDK test ontology {uniq}", "template description", structure)
yield ontology
try:
# from public/entity_handlers/project.py :
#
# as we're currently in the transition phase where SDK is not fully aware of the
# ontologies as separate entities, let's emulate old behavior for SDK-managed projects:
# if you create one then delete one, then the ontology we create behind the scenes is
# treated as a "child object" and is deleted if the project is.
#
> ephemeral_user_client._api_client.delete(f"ontologies/{ontology.ontology_hash}", params=None)
src/sdk_integration_tests/tests/conftest.py:351:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:105: in delete
return self._request_without_payload("DELETE", path, params, result_type, allow_none=allow_none)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:221: in _request_without_payload
return self._request(
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:256: in _request
self._handle_error(res, context)
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:302: in _handle_error
raise e
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:295: in _handle_error
handle_error_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
status_code = 400
response_headers = {'date': 'Wed, 11 Mar 2026 17:35:06 GMT', 'Content-Length': '188', 'content-type': 'application/json', 'via': '1.1 goo...; includeSubDomains', 'x-content-type-options': 'nosniff', 'Alt-Svc': 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000'}
message = 'Failed to delete ontology that is being used by projects'
context = RequestContext(timestamp='2026-03-11T17:35:06.924696+00:00', trace_id='0d36256397154b4aaae84ea9be17bb5e', span_id='1', domain='https://dev.api.encord.com')
def handle_error_response(status_code: int, response_headers: Mapping[str, str], message=None, context=None):
"""Checks server response.
Called if HTTP response status code is an error response.
"""
if status_code == HTTP_UNAUTHORIZED:
raise AuthenticationError(
message or "You are not authenticated to access the Encord platform.", context=context
)
if status_code == HTTP_FORBIDDEN:
raise AuthorisationError(message or "You are not authorised to access this asset.", context=context)
if status_code == HTTP_NOT_FOUND:
raise ResourceNotFoundError("The requested resource was not found.", context=context)
if status_code == HTTP_METHOD_NOT_ALLOWED:
raise MethodNotAllowedError("HTTP method is not allowed.", context=context)
if status_code == HTTP_BAD_REQUEST:
> raise InvalidArgumentsError(message or "Provided payload is invalid and can't be processed.", context=context)
E encord.exceptions.InvalidArgumentsError: Failed to delete ontology that is being used by projects timestamp='2026-03-11T17:35:06.924696+00:00' trace_id='0d36256397154b4aaae84ea9be17bb5e' span_id='1' domain='https://dev.api.encord.com'
.venv/lib/python3.12/site-packages/encord/http/v2/error_utils.py:43: InvalidArgumentsError
Check warning on line 0 in projects.test_users
github-actions / SDK integration test report
test_add_users_to_project[ssh-key-authentication-firebase-user] (projects.test_users) failed
./encord-backend/projects/sdk-integration-tests/integration-test-report-python3_13.xml [took 0s]
Raw output
encord.exceptions.AuthorisationError: You are not authorised to access this asset. timestamp='2026-03-11T17:35:32.352887+00:00' trace_id='f7caf453c353434cbf7cdc2760aa5d7e' span_id='1' domain='https://dev.api.encord.com/'
ephemeral_user_client = <encord.user_client.EncordUserClient object at 0x7fb8ea3ea930>
get_project_client = <function get_ssh_project_client at 0x7fb8ea3e47c0>
@pytest.mark.parametrize("account_type", [AccountTypeEnum.FIREBASE, AccountTypeEnum.SERVICE], indirect=True)
def test_add_users_to_project(
ephemeral_user_client: EncordUserClient,
get_project_client: Callable[[Any, str], EncordClientProject | Project],
) -> None:
user_client = ephemeral_user_client
project_hash = user_client.create_project("test project with dataset", [], "")
client = get_project_client(user_client, project_hash)
> users = client.add_users([TEST_USER_EMAIL_1], ProjectUserRole.ANNOTATOR)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sdk_integration_tests/tests/projects/test_users.py:23:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.12/site-packages/encord/project.py:299: in add_users
return self._client.add_users(user_emails, user_role)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/client.py:882: in add_users
users = self._querier.basic_setter(ProjectUsers, self._querier.resource_id, payload=payload)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/http/querier.py:120: in basic_setter
res, context = self._execute(request, retryable=retryable)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/http/querier.py:208: in _execute
check_error_response(response, context, extra_payload)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
response = ['AUTHORISATION_ERROR']
context = RequestContext(timestamp='2026-03-11T17:35:32.352887+00:00', trace_id='f7caf453c353434cbf7cdc2760aa5d7e', span_id='1', domain='https://dev.api.encord.com/')
payload = 'User(s) testuser1@cord.tech are not members of your organisation.'
def check_error_response(response, context: Optional[RequestContext] = None, payload: Any = 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)
E encord.exceptions.AuthorisationError: You are not authorised to access this asset. timestamp='2026-03-11T17:35:32.352887+00:00' trace_id='f7caf453c353434cbf7cdc2760aa5d7e' span_id='1' domain='https://dev.api.encord.com/'
.venv/lib/python3.12/site-packages/encord/http/error_utils.py:64: AuthorisationError
Check warning on line 0 in projects.test_users
github-actions / SDK integration test report
test_add_users_to_project[ssh-key-authentication-service-account] (projects.test_users) failed
./encord-backend/projects/sdk-integration-tests/integration-test-report-python3_13.xml [took 1s]
Raw output
encord.exceptions.AuthorisationError: You are not authorised to access this asset. timestamp='2026-03-11T17:35:33.334500+00:00' trace_id='cbe15b9783f2426192ad0288ba75d9b6' span_id='1' domain='https://dev.api.encord.com/'
ephemeral_user_client = <encord.user_client.EncordUserClient object at 0x7fb8dd79ecc0>
get_project_client = <function get_ssh_project_client at 0x7fb8ea3e47c0>
@pytest.mark.parametrize("account_type", [AccountTypeEnum.FIREBASE, AccountTypeEnum.SERVICE], indirect=True)
def test_add_users_to_project(
ephemeral_user_client: EncordUserClient,
get_project_client: Callable[[Any, str], EncordClientProject | Project],
) -> None:
user_client = ephemeral_user_client
project_hash = user_client.create_project("test project with dataset", [], "")
client = get_project_client(user_client, project_hash)
> users = client.add_users([TEST_USER_EMAIL_1], ProjectUserRole.ANNOTATOR)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/sdk_integration_tests/tests/projects/test_users.py:23:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.12/site-packages/encord/project.py:299: in add_users
return self._client.add_users(user_emails, user_role)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/client.py:882: in add_users
users = self._querier.basic_setter(ProjectUsers, self._querier.resource_id, payload=payload)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/http/querier.py:120: in basic_setter
res, context = self._execute(request, retryable=retryable)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/encord/http/querier.py:208: in _execute
check_error_response(response, context, extra_payload)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
response = ['AUTHORISATION_ERROR']
context = RequestContext(timestamp='2026-03-11T17:35:33.334500+00:00', trace_id='cbe15b9783f2426192ad0288ba75d9b6', span_id='1', domain='https://dev.api.encord.com/')
payload = 'User(s) testuser1@cord.tech are not members of your organisation.'
def check_error_response(response, context: Optional[RequestContext] = None, payload: Any = 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)
E encord.exceptions.AuthorisationError: You are not authorised to access this asset. timestamp='2026-03-11T17:35:33.334500+00:00' trace_id='cbe15b9783f2426192ad0288ba75d9b6' span_id='1' domain='https://dev.api.encord.com/'
.venv/lib/python3.12/site-packages/encord/http/error_utils.py:64: AuthorisationError
Check warning on line 0 in storage.test_storage_items_listing
github-actions / SDK integration test report
test_storage_item_crud (storage.test_storage_items_listing) failed
./encord-backend/projects/sdk-integration-tests/integration-test-report-python3_13.xml [took 18s]
Raw output
encord.exceptions.UnknownException: Unknown error timestamp='2026-03-11T17:41:38.189007+00:00' trace_id='770c4bfa76624de3aac9488fade8978f' span_id='1' domain='https://dev.api.encord.com'
storage_folder = <encord.storage.StorageFolder object at 0x7f3ce5726840>
extra_folder = <encord.storage.StorageFolder object at 0x7f3ce5494500>
video_in_folder = UUID('019cddfd-293c-7943-af44-6c01671ea111')
images_in_folder = [UUID('019cddfd-43e2-76d1-a846-4b3fd03e7e74'), UUID('019cddfd-5463-7cf1-a147-dbc787f17c11'), UUID('019cddfd-5a44-7850-8c85-0d200d89434e')]
ephemeral_user_client = <encord.user_client.EncordUserClient object at 0x7f3ce5698950>
def test_storage_item_crud(
storage_folder: StorageFolder,
extra_folder: StorageFolder,
video_in_folder: UUID,
images_in_folder: list[UUID],
ephemeral_user_client: EncordUserClient,
) -> None:
video_item = ephemeral_user_client.get_storage_item(video_in_folder)
new_item_name = "new item name"
video_item.update(name=new_item_name)
updated_item = ephemeral_user_client.get_storage_item(video_item.uuid)
assert updated_item.name == new_item_name
assert video_item.name == new_item_name
assert video_item.description == ""
updated_item_client_metadata = {"new": "metadata"}
video_item.update(client_metadata=updated_item_client_metadata)
updated_item = ephemeral_user_client.get_storage_item(video_item.uuid)
assert updated_item.client_metadata == updated_item_client_metadata
assert video_item.client_metadata == updated_item_client_metadata
> video_item.update(name=VIDEO_FILE_NAME, client_metadata={})
src/sdk_integration_tests/tests/storage/test_storage_items_listing.py:358:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.12/site-packages/encord/storage.py:1956: in update
self._orm_item = self._api_client.patch(
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:154: in patch
return self._request_with_payload(
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:200: in _request_with_payload
return self._request(
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:256: in _request
self._handle_error(res, context)
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:302: in _handle_error
raise e
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:295: in _handle_error
handle_error_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
status_code = 500
response_headers = {'date': 'Wed, 11 Mar 2026 17:41:37 GMT', 'Content-Length': '192', 'content-type': 'application/json', 'via': '1.1 goo...; includeSubDomains', 'x-content-type-options': 'nosniff', 'Alt-Svc': 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000'}
message = 'Unknown error'
context = RequestContext(timestamp='2026-03-11T17:41:38.189007+00:00', trace_id='770c4bfa76624de3aac9488fade8978f', span_id='1', domain='https://dev.api.encord.com')
def handle_error_response(status_code: int, response_headers: Mapping[str, str], message=None, context=None):
"""Checks server response.
Called if HTTP response status code is an error response.
"""
if status_code == HTTP_UNAUTHORIZED:
raise AuthenticationError(
message or "You are not authenticated to access the Encord platform.", context=context
)
if status_code == HTTP_FORBIDDEN:
raise AuthorisationError(message or "You are not authorised to access this asset.", context=context)
if status_code == HTTP_NOT_FOUND:
raise ResourceNotFoundError("The requested resource was not found.", context=context)
if status_code == HTTP_METHOD_NOT_ALLOWED:
raise MethodNotAllowedError("HTTP method is not allowed.", context=context)
if status_code == HTTP_BAD_REQUEST:
raise InvalidArgumentsError(message or "Provided payload is invalid and can't be processed.", context=context)
if status_code == HTTP_PAYLOAD_TOO_LARGE:
raise PayloadTooLargeError(
message or "Request payload is too large and exceeds the maximum allowed size.", context=context
)
if status_code == HTTP_TOO_MANY_REQUESTS:
retry_after_header = response_headers.get("Retry-After", "")
retry_after = int(retry_after_header) if retry_after_header.isdigit() else None
raise RateLimitExceededError(retry_after=retry_after, context=context)
> raise UnknownException(message or "An unknown error occurred.", context=context)
E encord.exceptions.UnknownException: Unknown error timestamp='2026-03-11T17:41:38.189007+00:00' trace_id='770c4bfa76624de3aac9488fade8978f' span_id='1' domain='https://dev.api.encord.com'
.venv/lib/python3.12/site-packages/encord/http/v2/error_utils.py:55: UnknownException
Check warning on line 0 in storage.test_storage_items_listing
github-actions / SDK integration test report
test_storage_item_reset_client_metadata (storage.test_storage_items_listing) failed
./encord-backend/projects/sdk-integration-tests/integration-test-report-python3_13.xml [took 5s]
Raw output
encord.exceptions.UnknownException: Unknown error timestamp='2026-03-11T17:41:39.511899+00:00' trace_id='88ece23edc964d8b83097788b453b8d5' span_id='1' domain='https://dev.api.encord.com'
video_in_folder = UUID('019cddfd-5fb7-7750-96b6-4906529acacb')
ephemeral_user_client = <encord.user_client.EncordUserClient object at 0x7fb713fab3e0>
def test_storage_item_reset_client_metadata(
video_in_folder: UUID,
ephemeral_user_client: EncordUserClient,
) -> None:
video_item = ephemeral_user_client.get_storage_item(video_in_folder)
video_item.update(client_metadata=CLIENT_METADATA)
> video_item.update(client_metadata={})
src/sdk_integration_tests/tests/storage/test_storage_items_listing.py:540:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv/lib/python3.12/site-packages/encord/storage.py:1956: in update
self._orm_item = self._api_client.patch(
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:154: in patch
return self._request_with_payload(
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:200: in _request_with_payload
return self._request(
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:256: in _request
self._handle_error(res, context)
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:302: in _handle_error
raise e
.venv/lib/python3.12/site-packages/encord/http/v2/api_client.py:295: in _handle_error
handle_error_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
status_code = 500
response_headers = {'date': 'Wed, 11 Mar 2026 17:41:38 GMT', 'Content-Length': '192', 'content-type': 'application/json', 'via': '1.1 goo...; includeSubDomains', 'x-content-type-options': 'nosniff', 'Alt-Svc': 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000'}
message = 'Unknown error'
context = RequestContext(timestamp='2026-03-11T17:41:39.511899+00:00', trace_id='88ece23edc964d8b83097788b453b8d5', span_id='1', domain='https://dev.api.encord.com')
def handle_error_response(status_code: int, response_headers: Mapping[str, str], message=None, context=None):
"""Checks server response.
Called if HTTP response status code is an error response.
"""
if status_code == HTTP_UNAUTHORIZED:
raise AuthenticationError(
message or "You are not authenticated to access the Encord platform.", context=context
)
if status_code == HTTP_FORBIDDEN:
raise AuthorisationError(message or "You are not authorised to access this asset.", context=context)
if status_code == HTTP_NOT_FOUND:
raise ResourceNotFoundError("The requested resource was not found.", context=context)
if status_code == HTTP_METHOD_NOT_ALLOWED:
raise MethodNotAllowedError("HTTP method is not allowed.", context=context)
if status_code == HTTP_BAD_REQUEST:
raise InvalidArgumentsError(message or "Provided payload is invalid and can't be processed.", context=context)
if status_code == HTTP_PAYLOAD_TOO_LARGE:
raise PayloadTooLargeError(
message or "Request payload is too large and exceeds the maximum allowed size.", context=context
)
if status_code == HTTP_TOO_MANY_REQUESTS:
retry_after_header = response_headers.get("Retry-After", "")
retry_after = int(retry_after_header) if retry_after_header.isdigit() else None
raise RateLimitExceededError(retry_after=retry_after, context=context)
> raise UnknownException(message or "An unknown error occurred.", context=context)
E encord.exceptions.UnknownException: Unknown error timestamp='2026-03-11T17:41:39.511899+00:00' trace_id='88ece23edc964d8b83097788b453b8d5' span_id='1' domain='https://dev.api.encord.com'
.venv/lib/python3.12/site-packages/encord/http/v2/error_utils.py:55: UnknownException