diff --git a/src/caosdb/common/models.py b/src/caosdb/common/models.py index 31a442006b5de7b9d168c80cb10930c108760252..122fa1db0f88df6dcb014b4dcba206ca5c0f6efa 100644 --- a/src/caosdb/common/models.py +++ b/src/caosdb/common/models.py @@ -46,13 +46,16 @@ from caosdb.common.utils import uuid, xml2str from caosdb.configuration import get_config from caosdb.connection.connection import get_connection from caosdb.connection.encode import MultipartParam, multipart_encode -from caosdb.exceptions import (AmbiguityException, AuthorizationException, +from caosdb.exceptions import (AmbiguityException, + AuthorizationException, CaosDBException, ConnectionException, - ConsistencyError, + ConsistencyError, ContainerError, EntityDoesNotExistError, EntityError, - EntityHasNoDatatypeError, TransactionError, - UniqueNamesError, UnqualifiedParentsError, - UnqualifiedPropertiesError, URITooLongException) + EntityHasNoDatatypeError, + TransactionError, UniqueNamesError, + UnqualifiedParentsError, + UnqualifiedPropertiesError, + URITooLongException) from lxml import etree from .datatype import is_reference @@ -3700,7 +3703,7 @@ def _evaluate_and_add_error(parent_error, ent): if err.code is not None: if int(err.code) == 101: # ent doesn't exist new_exc = EntityDoesNotExistError(entity=ent, - error=err)) + error=err) elif int(err.code) == 110: # ent has no data type new_exc=EntityHasNoDatatypeError(entity = ent, error = err) @@ -3727,7 +3730,7 @@ def _evaluate_and_add_error(parent_error, ent): new_exc = EntityError(entity=ent, error=err) else: # No error code causes a general EntityError, too new_exc = EntityError(entity=ent, error=err) - parent_err.add_error(new_exc) + parent_error.add_error(new_exc) # Check for possible errors in parents and properties that # weren't detected up to here if not found114: @@ -3735,28 +3738,29 @@ def _evaluate_and_add_error(parent_error, ent): for prop in ent.get_properties(): dummy_err = _evaluate_and_add_error(dummy_err, prop) if dummy_err.get_errors(): - parent_err.add_error(dummy_err) + parent_error.add_error(dummy_err) if not found116: dummy_err = EntityError(entity=ent) for par in ent.get_parents(): dummy_err = _evaluate_and_add_error(dummy_err, par) if dummy_err.get_errors(): - parent_err.add_error(dummy_err) + parent_error.add_error(dummy_err) elif isinstance(ent, Container): - for err in ent.get_errors(): - cont_err = ContainerError(entity=ent, error=err) - for elt in ent: - cont_err = _evaluate_and_add_error(cont_err, elt) - parent_err.add_error(cont_err) + if ent.get_errors() is not None: + for err in ent.get_errors(): + cont_err = ContainerError(entity=ent, error=err) + for elt in ent: + cont_err = _evaluate_and_add_error(cont_err, elt) + parent_error.add_error(cont_err) # Cover possibility that the container doesn't have an error # but still contains entities that do - if not ent.get_errors(): + else: dummy_err = ContainerError(entity=ent) for elt in ent: dummy_err = _evaluate_and_add_error(dummy_err, elt) if dummy_err.get_errors(): - parent_err.add_error(dummy_err) + parent_error.add_error(dummy_err) else: raise TypeError("Parameter ent is to be an Entity or a Container")