def update(self, model, properties=None, sheets=None, unique_keys=None, links=None):
session = self.DBSession()
sp = session.begin_nested()
try:
session.add(model)
self._update_properties(model, properties, sheets)
if links is not None:
self._update_rels(model, links)
if unique_keys is not None:
keys_add, keys_remove = self._update_keys(model, unique_keys)
sp.commit()
except (IntegrityError, FlushError):
sp.rollback()
else:
return
# Try again more carefully
try:
session.add(model)
self._update_properties(model, properties, sheets)
if links is not None:
self._update_rels(model, links)
session.flush()
except (IntegrityError, FlushError):
msg = 'UUID conflict'
raise HTTPConflict(msg)
assert unique_keys is not None
conflicts = [pk for pk in keys_add if session.query(Key).get(pk) is not None]
assert conflicts
msg = 'Keys conflict: %r' % conflicts
raise HTTPConflict(msg)
评论列表
文章目录