Changeset 480
- Timestamp:
- 09/30/09 14:58:16 (4 years ago)
- Location:
- elixir/trunk
- Files:
-
- 3 modified
-
CHANGES (modified) (1 diff)
-
elixir/entity.py (modified) (2 diffs)
-
tests/test_options.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
elixir/trunk/CHANGES
r479 r480 57 57 - Default table_options (defined in options_defaults['table_options']) are now 58 58 also used for ManyToMany tables (closes #94). 59 - Provide our own Session.mapper equivalent to avoid SQLAlchemy 0.5.5+ 60 deprecation warning. This mapper autosave object instances on __init__ unless 61 save_on_init=False is passed as a mapper argument (closes #92). 59 62 60 63 Bug fixes: -
elixir/trunk/elixir/entity.py
r466 r480 34 34 35 35 __doc_all__ = ['Entity', 'EntityMeta'] 36 37 38 def session_mapper_factory(scoped_session): 39 def session_mapper(cls, *args, **kwargs): 40 if kwargs.pop('save_on_init', True): 41 old_init = cls.__init__ 42 def __init__(self, *args, **kwargs): 43 old_init(self, *args, **kwargs) 44 scoped_session.add(self) 45 cls.__init__ = __init__ 46 cls.query = scoped_session.query_property() 47 return mapper(cls, *args, **kwargs) 48 return session_mapper 36 49 37 50 … … 441 454 self.entity.mapper = mapper(self.entity, *args, **kwargs) 442 455 elif isinstance(self.session, ScopedSession): 443 se lf.entity.mapper = self.session.mapper(self.entity,444 *args, **kwargs)456 session_mapper = session_mapper_factory(self.session) 457 self.entity.mapper = session_mapper(self.entity, *args, **kwargs) 445 458 else: 446 459 raise Exception("Failed to map entity '%s' with its table or " -
elixir/trunk/tests/test_options.py
r467 r480 117 117 class Person(Entity): 118 118 using_options(session=None) 119 firstname = Field(String(30)) 120 surname = Field(String(30)) 119 name = Field(String(30)) 121 120 122 121 setup_all() … … 126 125 session = Session() 127 126 128 homer = Person( firstname="Homer", surname='Simpson')129 bart = Person( firstname="Bart", surname='Simpson')127 homer = Person(name="Homer") 128 bart = Person(name="Bart") 130 129 131 130 session.add(homer) … … 136 135 session.commit() 137 136 138 assert session.query(Person).filter_by( firstname='Homer').one() is \137 assert session.query(Person).filter_by(name='Homer').one() is \ 139 138 homer 140 139 assert session.query(Person).count() == 1 … … 146 145 class Person(Entity): 147 146 using_options(session=Session) 148 firstname = Field(String(30)) 149 surname = Field(String(30)) 147 name = Field(String(30)) 150 148 151 149 setup_all() 152 150 create_all(engine) 153 151 154 homer = Person( firstname="Homer", surname='Simpson')155 bart = Person( firstname="Bart", surname='Simpson')152 homer = Person(name="Homer") 153 bart = Person(name="Bart") 156 154 Session.commit() 157 155 158 156 assert Person.query.session is Session() 159 assert Person.query.filter_by(firstname='Homer').one() is homer 157 assert Person.query.filter_by(name='Homer').one() is homer 158 159 def test_scoped_session_no_save_on_init(self): 160 metadata.bind = 'sqlite://' 161 162 class Person(Entity): 163 using_mapper_options(save_on_init=False) 164 name = Field(String(30)) 165 166 setup_all(True) 167 168 homer = Person(name="Homer") 169 bart = Person(name="Bart") 170 assert homer not in session 171 assert bart not in session 172 session.add(homer) 173 session.add(bart) 174 session.commit() 175 176 assert Person.query.filter_by(name='Homer').one() is homer 160 177 161 178 def test_global_scoped_session(self): … … 167 184 168 185 class Person(Entity): 169 firstname = Field(String(30)) 170 surname = Field(String(30)) 186 name = Field(String(30)) 171 187 172 188 setup_all() 173 189 create_all(engine) 174 190 175 homer = Person( firstname="Homer", surname='Simpson')176 bart = Person( firstname="Bart", surname='Simpson')191 homer = Person(name="Homer") 192 bart = Person(name="Bart") 177 193 session.commit() 178 194 179 195 assert Person.query.session is session() 180 assert Person.query.filter_by( firstname='Homer').one() is homer196 assert Person.query.filter_by(name='Homer').one() is homer 181 197 182 198 del __session__ 199 183 200 184 201 class TestTableOptions(object):
