Changeset 51
- Timestamp:
- 02/12/07 17:09:58 (6 years ago)
- Location:
- elixir/trunk/elixir
- Files:
-
- 3 modified
-
__init__.py (modified) (1 diff)
-
entity.py (modified) (2 diffs)
-
relationships.py (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
elixir/trunk/elixir/__init__.py
r48 r51 78 78 delay_setup = False 79 79 for entity in delayed_entities: 80 entity.setup() 80 entity.setup_table() 81 entity.setup_mapper() 81 82 delayed_entities.clear() 82 83 create_all() -
elixir/trunk/elixir/entity.py
r47 r51 85 85 self.setup_table() 86 86 self.setup_mapper() 87 87 88 def setup_mapper(self): 89 ''' 90 Initializes and assign an (empty!) mapper to the given entity, which 91 needs a table defined, so it calls setup_table. 92 ''' 93 if self.entity.mapper: 94 return 95 96 session = getattr(self.module, 'session', elixir.objectstore) 97 98 kwargs = self.mapper_options 99 if self.order_by: 100 kwargs['order_by'] = self.translate_order_by(self.order_by) 101 102 assign_mapper(session.context, self.entity, self.entity.table, 103 **kwargs) 104 elixir.metadatas.add(self.metadata) 105 88 106 # This marks all relations of the entity (or, at least those which 89 107 # have been added so far by statements) as being uninitialized … … 93 111 # try to setup all uninitialized relationships 94 112 EntityDescriptor.setup_relationships() 95 96 def setup_mapper(self):97 '''98 Initializes and assign an (empty!) mapper to the given entity, which99 needs a table defined, so it calls setup_table.100 '''101 if self.entity.mapper:102 return103 104 session = getattr(self.module, 'session', elixir.objectstore)105 106 kwargs = self.mapper_options107 if self.order_by:108 kwargs['order_by'] = self.translate_order_by(self.order_by)109 110 assign_mapper(session.context, self.entity, self.entity.table,111 **kwargs)112 elixir.metadatas.add(self.metadata)113 113 114 114 def translate_order_by(self, order_by): -
elixir/trunk/elixir/relationships.py
r47 r51 164 164 self.foreign_key = [self.foreign_key] 165 165 166 #CHECKME: is it of any use to store it somewhere?167 166 self.property = None # sqlalchemy property 168 167 … … 172 171 173 172 self.entity._descriptor.relationships[self.name] = self 174 self.setup_done = False175 173 176 174 def create_keys(self): … … 200 198 return False 201 199 202 if self. setup_done:200 if self.property: 203 201 return True 204 202 205 # FIXME: this should only happen if the relation was not setup already206 203 self.create_keys() 207 204 self.create_tables() 208 205 self.create_properties() 209 self.setup_done = True210 206 211 207 return True … … 301 297 target_desc = self.target._descriptor 302 298 303 #FIXME: this is buggy, because it seems 304 # like the field is used for two different purpose. 305 # FK is what? 306 307 # convert strings to Field instances 299 # convert strings to column instances 308 300 if self.foreign_key: 309 self.foreign_key = [source_desc.fields[k] 301 #FIXME: this will fail. Because if we specify a foreign_key 302 # as argument, it will not create the necessary column 303 self.foreign_key = [source_desc.fields[k].column 310 304 for k in self.foreign_key 311 305 if isinstance(k, basestring)] … … 366 360 source_desc.add_field(field) 367 361 368 self.foreign_key.append(field )362 self.foreign_key.append(field.column) 369 363 370 364 # build the list of local columns which will be part of … … 390 384 391 385 if self.entity is self.target: 386 # print self.target._descriptor.primary_keys 387 #FIXME: this doesn't work for autoload, because primary_keys is 388 #empty 392 389 cols = [k.column for k in self.target._descriptor.primary_keys] 393 390 kwargs['remote_side'] = cols 391 # print "cols", self.name, cols 394 392 395 393 kwargs['primaryjoin'] = and_(*self.primaryjoin_clauses) … … 411 409 kwargs = self.kwargs 412 410 413 #TODO: for now, we don't break any test if we remove those 3lines.411 #TODO: for now, we don't break any test if we remove those 2 lines. 414 412 # So, we should either complete the selfref test to prove that they 415 413 # are indeed useful, or remove them. It might be they are indeed … … 417 415 # already setup in the other way (belongs_to). 418 416 if self.entity is self.target: 419 #FIXME: this won't work for autoloaded relations 420 # so I need to change the type of foreign_key 421 kwargs['remote_side'] = [field.column 422 for field in self.inverse.foreign_key] 417 kwargs['remote_side'] = self.inverse.foreign_key 418 print "kwargs", self.name, kwargs 423 419 424 420 kwargs['primaryjoin'] = and_(*self.inverse.primaryjoin_clauses)
