Changeset 170 for elixir/trunk/elixir/entity.py
- Timestamp:
- 08/01/07 02:05:43 (6 years ago)
- Files:
-
- 1 modified
-
elixir/trunk/elixir/entity.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
elixir/trunk/elixir/entity.py
r169 r170 4 4 5 5 from sqlalchemy import Table, Integer, desc 6 from sqlalchemy.orm import deferred, Query 6 from sqlalchemy.orm import deferred, Query, MapperExtension 7 7 from sqlalchemy.ext.assignmapper import assign_mapper 8 8 from sqlalchemy.util import OrderedDict … … 18 18 import sys 19 19 import elixir 20 import inspect 20 21 21 22 __pudge_all__ = ['Entity', 'EntityMeta'] … … 106 107 elixir.delayed_entities.add(self) 107 108 return 108 109 110 self.setup_events() 109 111 self.setup_table() 110 112 self.setup_mapper() … … 120 122 # finally, allow the statement to do any "finalization" 121 123 Statement.finalize(self.entity) 124 125 def setup_events(self): 126 # create a list of callbacks for each event 127 methods = {} 128 for name, func in inspect.getmembers(self.entity, inspect.ismethod): 129 if hasattr(func, '_elixir_events'): 130 for event in func._elixir_events: 131 event_methods = methods.setdefault(event, []) 132 event_methods.append(func) 133 134 if not methods: 135 return 136 137 # transform that list into methods themselves 138 for event in methods: 139 methods[event] = self.make_proxy_method(methods[event]) 140 141 # create a custom mapper extension class, tailored to our entity 142 ext = type('EventMapperExtension', (MapperExtension,), methods)() 143 144 # then, make sure that the entity's mapper has our mapper extension 145 self.add_mapper_extension(ext) 146 147 def make_proxy_method(self, methods): 148 def proxy_method(self, mapper, connection, instance): 149 for func in methods: 150 func(instance) 151 return proxy_method 122 152 123 153 def translate_order_by(self, order_by):
