1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | from elixir.statements import Statement from sqlalchemy.orm.mapper import MapperExtension import types class MapperExtensionProxy(MapperExtension): def after_delete(self, mapper, connection, instance): if hasattr(instance, '__after_delete__') : instance.__after_delete__() def after_insert(self, mapper, connection, instance): if hasattr(instance, '__after_insert__') : instance.__after_insert__() def after_update(self, mapper, connection, instance): if hasattr(instance, '__after_update__') : instance.__after_update__() def before_delete(self, mapper, connection, instance): if hasattr(instance, '__before_delete__') : instance.__before_delete__() def before_insert(self, mapper, connection, instance): if hasattr(instance, '__before_insert__') : instance.__before_insert__() def before_update(self, mapper, connection, instance): if hasattr(instance, '__before_update__') : instance.__before_update__() ext_proxy = MapperExtensionProxy() def add_mapper_extension_proxy_method(entity, name, callbacks): def proxy_method(self): for callback in callbacks: getattr(self, callback)() setattr(entity, '__%s__' %name, proxy_method) extensions = entity._descriptor.mapper_options.get('extension', []) if type(extensions) is not types.ListType: extensions = [extensions] if ext_proxy not in extensions: extensions.append(ext_proxy) entity._descriptor.mapper_options['extension'] = extensions class BeforeDelete(object): def __init__(self, entity, *callbacks): add_mapper_extension_proxy_method(entity, 'before_delete', callbacks) class BeforeInsert(object): def __init__(self, entity, *callbacks): add_mapper_extension_proxy_method(entity, 'before_insert', callbacks) class BeforeUpdate(object): def __init__(self, entity, *callbacks): add_mapper_extension_proxy_method(entity, 'before_update', callbacks) class BeforeDelete(object): def __init__(self, entity, *callbacks): add_mapper_extension_proxy_method(entity, 'before_delete', callbacks) class BeforeInsert(object): def __init__(self, entity, *callbacks): add_mapper_extension_proxy_method(entity, 'before_insert', callbacks) class BeforeUpdate(object): def __init__(self, entity, *callbacks): add_mapper_extension_proxy_method(entity, 'before_update', callbacks) after_delete = Statement(AfterDelete) after_insert = Statement(AfterInsert) after_update = Statement(AfterUpdate) before_delete = Statement(BeforeDelete) before_insert = Statement(BeforeInsert) before_delete = Statement(BeforeDelete) |
Powered by Pylons - Contact Administrators
Comments (0)
You must login before you can comment.