PylonsHQ.

beachcoder
May 2, 2007 6:04:39 PM

Elixir event statements

Language: Python
 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)

Download

Comments (0)

You must login before you can comment.

Powered by Pylons - Contact Administrators