Changeset 362

Show
Ignore:
Timestamp:
07/11/08 17:18:56 (4 years ago)
Author:
ged
Message:
  • Added support for callables for some arguments on relationships:
    primaryjoin, secondaryjoin and remote_side. It means those can be evaluated
    at setup time (when tables and their columns already exist) instead of
    definition time (closes #50).
  • Misc cleanup
Location:
elixir/trunk
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • elixir/trunk/CHANGES

    r356 r362  
    1717        pass 
    1818    A.name = Field(String(32)) 
    19 - Added add_mapper_property and add_table_column helper methods in 
    20   EntityBuilders. 
     19- Added add_table_column, add_mapper_property and add_mapper_extension helper 
     20  methods in EntityBuilders. 
    2121- Added full_tablename property on EntityDescriptor (includes schema name if 
    2222  any). 
     
    2525- Added support for filtered OneToMany relationships. Produce viewonly 
    2626  relations. See source:elixir/trunk/tests/test_o2m.py for an example. 
     27- Added support for callables for some arguments on relationships: primaryjoin, 
     28  secondaryjoin and remote_side. It means those can be evaluated at setup time 
     29  (when tables and their columns already exist) instead of definition time. 
    2730 
    2831Changes: 
     
    3538      SA 0.4) 
    3639    * autoexpire=True (with SA 0.5). 
    37 - removed objectstore and other SA 0.3 or older support code. 
     40- removed objectstore and other SA 0.3 (or older) support code. 
    3841 
    3942Bug fixes: 
  • elixir/trunk/elixir/properties.py

    r359 r362  
    5858 
    5959    def create_tables(self): 
    60         pass 
     60        ''' 
     61        Subclasses may override this method to create tables. 
     62        ''' 
    6163 
    6264    def after_table(self): 
     
    6466 
    6567    def create_properties(self): 
    66         pass 
     68        ''' 
     69        Subclasses may override this method to add properties to the involved  
     70        entity. 
     71        ''' 
    6772 
    6873    def before_mapper(self): 
  • elixir/trunk/elixir/relationships.py

    r356 r362  
    380380        ''' 
    381381 
    382     def create_tables(self): 
    383         ''' 
    384         Subclasses (ie. concrete relationships) may override this method to 
    385         create secondary tables. 
    386         ''' 
    387  
    388382    def create_properties(self): 
    389         ''' 
    390         Subclasses (ie. concrete relationships) may override this method to 
    391         add properties to the involved entities. 
    392         ''' 
    393383        if self.property or self.backref: 
    394384            return 
    395385 
    396386        kwargs = self.get_prop_kwargs() 
     387        if 'order_by' in kwargs: 
     388            kwargs['order_by'] = \ 
     389                self.target._descriptor.translate_order_by(kwargs['order_by']) 
     390 
     391        # transform callable arguments 
     392        for arg in ('primaryjoin', 'secondaryjoin', 'remote_side'): 
     393            kwarg = kwargs.get(arg, None) 
     394            if callable(kwarg): 
     395                kwargs[arg] = kwarg() 
    397396 
    398397        # viewonly relationships need to create "standalone" relations (ie 
     
    664663    uselist = True 
    665664 
    666     def get_prop_kwargs(self): 
    667         kwargs = super(OneToMany, self).get_prop_kwargs() 
    668  
    669         if 'order_by' in kwargs: 
    670             kwargs['order_by'] = \ 
    671                 self.target._descriptor.translate_order_by( 
    672                     kwargs['order_by']) 
    673  
    674         return kwargs 
    675  
    676665 
    677666class ManyToMany(Relationship): 
     
    857846 
    858847        kwargs.update(self.kwargs) 
    859  
    860         if 'order_by' in kwargs: 
    861             kwargs['order_by'] = \ 
    862                 self.target._descriptor.translate_order_by(kwargs['order_by']) 
    863848 
    864849        return kwargs 
  • elixir/trunk/tests/test_o2m.py

    r356 r362  
    108108 
    109109    def test_viewonly(self): 
    110         # the callable primaryjoin seem to be unstable... sometime it works, 
    111         # sometime it doesn't... for no apparent reason. I think it's a bug in 
    112         # the current revision of SQLAlchemy I'm using (4900). 
    113110        class User(Entity): 
    114111            two_blurbs = OneToMany('Blurb', primaryjoin=lambda: