41 from rql.utils import rqlvar_maker |
41 from rql.utils import rqlvar_maker |
42 |
42 |
43 from cubicweb import (CW_MIGRATION_MAP, QueryError, |
43 from cubicweb import (CW_MIGRATION_MAP, QueryError, |
44 UnknownEid, AuthenticationError, ExecutionError, |
44 UnknownEid, AuthenticationError, ExecutionError, |
45 BadConnectionId, ValidationError, |
45 BadConnectionId, ValidationError, |
46 UniqueTogetherError, onevent) |
46 UniqueTogetherError, onevent, ViolatedConstraint) |
47 from cubicweb import cwvreg, schema, server |
47 from cubicweb import cwvreg, schema, server |
48 from cubicweb.server import ShuttingDown, utils, hook, querier, sources |
48 from cubicweb.server import ShuttingDown, utils, hook, querier, sources |
49 from cubicweb.server.session import Session, InternalManager |
49 from cubicweb.server.session import Session, InternalManager |
50 |
50 |
51 NO_CACHE_RELATIONS = set( [('owned_by', 'object'), |
51 NO_CACHE_RELATIONS = set( [('owned_by', 'object'), |
925 if cnx.is_hook_category_activated('integrity'): |
925 if cnx.is_hook_category_activated('integrity'): |
926 edited.check(creation=True) |
926 edited.check(creation=True) |
927 self.add_info(cnx, entity, source, extid) |
927 self.add_info(cnx, entity, source, extid) |
928 try: |
928 try: |
929 source.add_entity(cnx, entity) |
929 source.add_entity(cnx, entity) |
930 except UniqueTogetherError as exc: |
930 except (UniqueTogetherError, ViolatedConstraint) as exc: |
931 userhdlr = cnx.vreg['adapters'].select( |
931 userhdlr = cnx.vreg['adapters'].select( |
932 'IUserFriendlyError', cnx, entity=entity, exc=exc) |
932 'IUserFriendlyError', cnx, entity=entity, exc=exc) |
933 userhdlr.raise_user_exception() |
933 userhdlr.raise_user_exception() |
934 edited.saved = entity._cw_is_saved = True |
934 edited.saved = entity._cw_is_saved = True |
935 # trigger after_add_entity after after_add_relation |
935 # trigger after_add_entity after after_add_relation |
988 if cnx.is_hook_category_activated('integrity'): |
988 if cnx.is_hook_category_activated('integrity'): |
989 edited.check() |
989 edited.check() |
990 try: |
990 try: |
991 source.update_entity(cnx, entity) |
991 source.update_entity(cnx, entity) |
992 edited.saved = True |
992 edited.saved = True |
993 except UniqueTogetherError as exc: |
993 except (UniqueTogetherError, ViolatedConstraint) as exc: |
994 userhdlr = cnx.vreg['adapters'].select( |
994 userhdlr = cnx.vreg['adapters'].select( |
995 'IUserFriendlyError', cnx, entity=entity, exc=exc) |
995 'IUserFriendlyError', cnx, entity=entity, exc=exc) |
996 userhdlr.raise_user_exception() |
996 userhdlr.raise_user_exception() |
997 self.system_source.update_info(cnx, entity, need_fti_update) |
997 self.system_source.update_info(cnx, entity, need_fti_update) |
998 if not only_inline_rels: |
998 if not only_inline_rels: |