diff --git a/src/superannotate/lib/core/service_types.py b/src/superannotate/lib/core/service_types.py index 96228deed..158867c63 100644 --- a/src/superannotate/lib/core/service_types.py +++ b/src/superannotate/lib/core/service_types.py @@ -115,7 +115,10 @@ def __init__( except Exception: response_json = dict() if not response.ok: - data["_error"] = response_json.get("error", "Unknown Error") + error = response_json.get("error") + if not error: + error = response_json.get("errors", "Unknown Error") + data["_error"] = error super().__init__(**data) return if dispatcher: diff --git a/src/superannotate/lib/core/usecases/custom_fields.py b/src/superannotate/lib/core/usecases/custom_fields.py index 8e81d1a34..241b6e182 100644 --- a/src/superannotate/lib/core/usecases/custom_fields.py +++ b/src/superannotate/lib/core/usecases/custom_fields.py @@ -30,13 +30,10 @@ def execute(self) -> Response: if response.ok: self._response.data = response.data else: - errors = [response.error] - if errors: - separator = "\n- " - report = separator + separator.join(errors) - else: - report = response.error - self._response.errors = report + error = response.error + if isinstance(error, list): + error = "-" + "\n-".join(error) + self._response.errors = error return self._response diff --git a/tests/integration/custom_fields/test_custom_schema.py b/tests/integration/custom_fields/test_custom_schema.py index 34b9e79ea..733bfdca4 100644 --- a/tests/integration/custom_fields/test_custom_schema.py +++ b/tests/integration/custom_fields/test_custom_schema.py @@ -1,5 +1,6 @@ import copy +from src.superannotate import AppException from src.superannotate import SAClient from tests.integration.base import BaseTestCase @@ -106,3 +107,34 @@ def test_get_item_metadata_without_custom_metadata(self): sa.attach_items(self.PROJECT_NAME, [{"name": item_name, "url": item_name}]) item = sa.get_item_metadata(self.PROJECT_NAME, item_name) assert "custom_metadata" not in item + + def test_create_invalid(self): + INVALID_SCHEMA = { + "date": {"type": "sring", "format": "date"}, + "date1": {"type": "string", "format": "dat"}, + "patient_sex": {"type": "string", "enum": [2, "female"]}, + "date_enum": {"type": "string", "format": "date", "enum": ["2022-03-29", "2022-03-29", "2022-05-29"]}, + "date_enum1": {"type": "string", "format": "date", "enum": "2022-03-29"}, + "date_enum2": {"type": "string", "format": "date", "enu": ["2022-03-29"]}, + "medical_specialist": {"type": "string", "format": "email"}, + "medical_specialist1": {"type": "string", "format": "email", "enum": ["email1@gmail.com", "2022-03-29"]}, + "counts": {"type": "numbe"}, + "age_min": {"type": "number", "minimum": "min"}, + "age_range": {"type": "number", "minimum": 30, "maximum": 20, "enum": [20, 23, 120, 12.5, 0.5, -12.3]}, + "age_enum": {"type": "number", "enum": ["string", "string1", "string2"]} + } + error_msg = ( + "-Not supported field type for date.\n" + "-Spec value type of date1 is not valid.\n" + "-Spec value type of patient_sex is not valid.\n" + "-Spec values of date_enum should be unique.\n" + "-Spec value type of date_enum1 is not valid.\n" + "-Spec value type of medical_specialist1 is not valid.\n" + "-Not supported field type for counts.\n" + "-Spec value type of age_min is not valid.\n" + "-Maximum spec value of age_range can not be less than minimum value.\n" + "-Minimum spec value of age_range can not be higher than maximum value.\n" + "-Spec value type of age_enum is not valid." + ) + with self.assertRaisesRegexp(AppException, error_msg): + sa.create_custom_fields(self.PROJECT_NAME, INVALID_SCHEMA)