Changeset 243

Show
Ignore:
Timestamp:
10/25/07 10:07:01 (5 years ago)
Author:
ged
Message:

- added test for deferred fields courtesy of Isaac Csandl
- tweaked setup order (now properties init themselves before the mapper and

all properties are added at once) to work around a bug in SA 0.4 for
deferred and synonym fields (closes #17)

Location:
elixir/trunk
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • elixir/trunk/elixir/entity.py

    r238 r243  
    102102        # columns waiting for a table to exist 
    103103        self._columns = list() 
     104        self.properties = dict() 
     105        self.constraints = list() 
     106 
     107        # 
    104108        self.relationships = list() 
    105         self.constraints = list() 
    106109 
    107110        # set default value for options 
     
    409412            args = [self.entity.table] 
    410413 
    411         self.entity.mapper = _do_mapping(self.session, self.entity,  
     414        self.entity.mapper = _do_mapping(self.session, self.entity, 
     415                                         properties=self.properties, 
    412416                                         *args, **kwargs) 
    413417 
     
    457461        if table: 
    458462            table.append_constraint(constraint) 
     463 
     464    def add_property(self, name, property, check_duplicate=True): 
     465        if check_duplicate and name in self.properties: 
     466            raise Exception("property '%s' already exist in '%s' ! " %  
     467                            (name, self.entity.__name__)) 
     468        self.properties[name] = property 
     469        mapper = self.entity.mapper 
     470        if mapper: 
     471            mapper.add_property(name, property) 
    459472         
    460473    def add_mapper_extension(self, extension): 
     
    700713            'before_table', 'setup_table', 'setup_reltables', 'after_table', 
    701714            'setup_events', 
     715            'setup_properties', 
    702716            'before_mapper', 'setup_mapper', 'after_mapper', 
    703             'setup_properties', 
    704717            'finalize'): 
    705718        for entity in entities: 
  • elixir/trunk/elixir/fields.py

    r238 r243  
    197197 
    198198        if self.property: 
    199             self.entity.mapper.add_property(self.name, self.property) 
     199            self.entity._descriptor.add_property(self.name, self.property) 
    200200 
    201201        if self.synonym: 
    202             self.entity.mapper.add_property(self.synonym, synonym(self.name)) 
     202            self.entity._descriptor.add_property(self.synonym, synonym(self.name)) 
    203203 
    204204 
  • elixir/trunk/elixir/properties.py

    r237 r243  
    6464        pass 
    6565 
     66    def create_properties(self): 
     67        pass     
     68 
    6669    def before_mapper(self): 
    6770        pass     
    6871 
    6972    def after_mapper(self): 
    70         pass     
    71  
    72     def create_properties(self): 
    7373        pass     
    7474 
     
    132132            prop_value = self.prop 
    133133        prop_value = self.evaluate_property(prop_value) 
    134         self.entity.mapper.add_property(self.name, prop_value) 
     134        self.entity._descriptor.add_property(self.name, prop_value) 
    135135 
    136136    def evaluate_property(self, prop): 
  • elixir/trunk/elixir/relationships.py

    r240 r243  
    405405        self.property = relation(self.target, **kwargs) 
    406406        #TODO: check for duplicate properties 
    407         self.entity.mapper.add_property(self.name, self.property) 
     407        self.entity._descriptor.add_property(self.name, self.property) 
    408408     
    409409    def target(self): 
  • elixir/trunk/tests/test_properties.py

    r238 r243  
    5454                assert tag.query_score3 == tag.prop_score + 2 
    5555 
     56    def test_deferred(self): 
     57        class A(Entity): 
     58            name = Field(Unicode(20)) 
     59            stuff = Field(Unicode, deferred=True) 
     60 
     61        setup_all(True) 
     62 
     63        A(name='foo') 
     64        session.flush() 
     65 
    5666    def test_synonym(self): 
    5767        class Person(Entity):