473 # value once the SQL query will be executed |
473 # value once the SQL query will be executed |
474 restore_values = {} |
474 restore_values = {} |
475 etype = entity.__regid__ |
475 etype = entity.__regid__ |
476 for attr, storage in self._storages.get(etype, {}).items(): |
476 for attr, storage in self._storages.get(etype, {}).items(): |
477 try: |
477 try: |
478 if attr in entity.edited_attributes: |
478 edited = entity.edited_attributes |
|
479 except AttributeError: |
|
480 assert event == 'deleted' |
|
481 getattr(storage, 'entity_deleted')(entity, attr) |
|
482 else: |
|
483 if attr in edited: |
479 handler = getattr(storage, 'entity_%s' % event) |
484 handler = getattr(storage, 'entity_%s' % event) |
480 real_value = handler(entity, attr) |
485 real_value = handler(entity, attr) |
481 restore_values[attr] = real_value |
486 restore_values[attr] = real_value |
482 except AttributeError: |
|
483 assert event == 'deleted' |
|
484 getattr(storage, 'entity_deleted')(entity, attr) |
|
485 try: |
487 try: |
486 yield # 2/ execute the source's instructions |
488 yield # 2/ execute the source's instructions |
487 finally: |
489 finally: |
488 # 3/ restore original values |
490 # 3/ restore original values |
489 for attr, value in restore_values.items(): |
491 for attr, value in restore_values.items(): |