# HG changeset patch # User Sylvain Thénault # Date 1253111815 -7200 # Node ID 65618fd34548cfebd65bc887081393c43a0ccc65 # Parent 280080eadb22e7cfcd255a620aa9005a57442395 refactor to allow explicit card integrity check from client code (eg email hooks for instance) diff -r 280080eadb22 -r 65618fd34548 server/repository.py --- a/server/repository.py Wed Sep 16 16:36:08 2009 +0200 +++ b/server/repository.py Wed Sep 16 16:36:55 2009 +0200 @@ -108,6 +108,9 @@ # hooks responsability to ensure they do not violate relation's cardinality if session.is_super_session: return + ensure_card_respected(session.unsafe_execute, session, eidfrom, rtype, eidto) + +def ensure_card_respected(execute, session, eidfrom, rtype, eidto): card = rproperty(session, rtype, eidfrom, eidto, 'cardinality') # one may be tented to check for neweids but this may cause more than one # relation even with '1?' cardinality if thoses relations are added in the @@ -118,14 +121,11 @@ if card[0] in '1?': rschema = session.repo.schema.rschema(rtype) if not rschema.inlined: - session.unsafe_execute( - 'DELETE X %s Y WHERE X eid %%(x)s, NOT Y eid %%(y)s' % rtype, - {'x': eidfrom, 'y': eidto}, 'x') + execute('DELETE X %s Y WHERE X eid %%(x)s,NOT Y eid %%(y)s' % rtype, + {'x': eidfrom, 'y': eidto}, 'x') if card[1] in '1?': - session.unsafe_execute( - 'DELETE X %s Y WHERE NOT X eid %%(x)s, Y eid %%(y)s' % rtype, - {'x': eidfrom, 'y': eidto}, 'y') - + execute('DELETE X %s Y WHERE NOT X eid %%(x)s, Y eid %%(y)s' % rtype, + {'x': eidfrom, 'y': eidto}, 'y') class Repository(object): """a repository provides access to a set of persistent storages for