Changeset 54

Show
Ignore:
Timestamp:
02/12/07 18:30:18 (6 years ago)
Author:
ged
Message:

fixed selfref for autoloaded tables (complete autoload test to check that)

Location:
elixir/trunk
Files:
2 modified

Legend:

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

    r51 r54  
    384384         
    385385        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 
    389             cols = [k.column for k in self.target._descriptor.primary_keys] 
     386            if self.entity._descriptor.autoload: 
     387                cols = [col for col in self.target.table.primary_key.columns] 
     388            else: 
     389                cols = [k.column for k in self.target._descriptor.primary_keys] 
    390390            kwargs['remote_side'] = cols 
    391 #            print "cols", self.name, cols 
    392391 
    393392        kwargs['primaryjoin'] = and_(*self.primaryjoin_clauses) 
  • elixir/trunk/tests/test_autoload.py

    r53 r54  
    1111import datetime 
    1212 
    13 #FIXME/TODO: I should also test many2many!!! 
    14  
    1513# First create two tables (it would be better to user an external db) 
    1614engine = sqlalchemy.create_engine('sqlite:///') 
     
    1917person_table = Table('person', meta, 
    2018    Column('id', Integer, primary_key=True), 
     19    Column('father_id', Integer, ForeignKey('person.id')), 
    2120    Column('name', Unicode(32))) 
    2221person_table.create() 
     
    3231elixir.delay_setup = True 
    3332 
    34 class Animal(Entity): 
    35 #    has_field('name', String(15)) 
    36 #    has_field('color', String(15)) 
    37      
    38     belongs_to('owner', of_kind='Person', colname='owner_id') 
    39     belongs_to('feeder', of_kind='Person', colname='feeder_id') 
    40  
    41     using_options(autoload=True, shortnames=True) 
    42  
    4333class Person(Entity): 
    4434#    has_field('name', Unicode(32)) 
    4535     
     36    belongs_to('father', of_kind='Person', colname='father_id') 
     37    has_many('children', of_kind='Person') 
    4638    has_many('pets', of_kind='Animal', inverse='owner') 
    4739    has_many('animals', of_kind='Animal', inverse='feeder') 
     
    5547        return s 
    5648 
     49class Animal(Entity): 
     50#    has_field('name', String(15)) 
     51#    has_field('color', String(15)) 
     52     
     53    belongs_to('owner', of_kind='Person', colname='owner_id') 
     54    belongs_to('feeder', of_kind='Person', colname='feeder_id') 
     55 
     56    using_options(autoload=True, shortnames=True) 
    5757 
    5858elixir.delay_setup = False 
     
    6666     
    6767    def teardown(self): 
    68         cleanup_all() 
     68        drop_all() 
    6969     
    7070    def test_autoload(self): 
     
    8686        assert homer == slh.owner 
    8787 
     88    def test_autoload_selfref(self): 
     89        grampa = Person(name="Abe") 
     90        homer = Person(name="Homer") 
     91        bart = Person(name="Bart") 
     92        lisa = Person(name="Lisa") 
     93         
     94        grampa.children.append(homer)         
     95        homer.children.append(bart) 
     96        lisa.father = homer 
     97         
     98        objectstore.flush() 
     99        objectstore.clear() 
     100         
     101        p = Person.get_by(name="Homer") 
     102         
     103        print "%s is %s's child." % (p.name, p.father.name) 
     104        print "His children are: %s." % ( 
     105                " and ".join(c.name for c in p.children)) 
     106         
     107        assert p in p.father.children 
     108        assert p.father is Person.get_by(name="Abe") 
     109        assert p is Person.get_by(name="Lisa").father 
     110 
    88111if __name__ == '__main__': 
    89112    test = TestAutoload()