import sys
from sqlalchemy import *

engine = create_engine('sqlite', {'filename':':memory:'}, echo=True,
 echo_uow=True)
objectstore.LOG = True

info_table = Table('infos', engine,
	Column('pk', Integer, primary_key=True),
	Column('info', String))

rel_table = Table('rels', engine,
	Column('pk', Integer, primary_key=True),
	Column('info_fk_one', Integer, ForeignKey(info_table.c.pk)),
	Column('rel_data', String))

info_table.create()
rel_table.create()

info_table.insert().execute(
	{'pk':1, 'info':'pk_1_data'},
	{'pk':2, 'info':'pk_2_data'},
	{'pk':3, 'info':'pk_3_data'})

rel_table.insert().execute(
	{'pk':1, 'info_fk_one':1, 'rel_data':'1-1'},
	{'pk':2, 'info_fk_one':2, 'rel_data':'2-2'},
	{'pk':3, 'info_fk_one':3, 'rel_data':'3-3'},
	{'pk':4, 'info_fk_one':2, 'rel_data':'4-2'},
	{'pk':5, 'info_fk_one':3, 'rel_data':'5-3'},
	{'pk':6, 'info_fk_one':2, 'rel_data':'6-2'},
	{'pk':7, 'info_fk_one':3, 'rel_data':'7-3'})

# Create the classes to integrate the mappers with:
class Information(object):
	pass

class Relationship(object):
	pass

# Create the basic mappers, with no frills or modifications
Information.mapper = mapper(Information, info_table)
Relationship.mapper = mapper(Relationship, rel_table)

Info2 = info_table.alias()
# Add the necessary properties
Relationship.mapper.add_property('info_one', relation(Information.mapper))
Information.mapper.add_property('rels', relation(Relationship.mapper))

objectstore.get_session().commit()

print
print
print 'Begin Test'
print
print

info = Information.mapper.get(3)
assert info.rels[0].rel_data == u'3-3'
assert info.rels[1].rel_data == u'5-3'
assert info.rels[2].rel_data == u'7-3'

rel = Relationship.mapper.get(3)
assert info.rels[0] == rel

print [i.rel_data for i in info.rels]

rel.info_one = None
objectstore.get_session().commit()

objectstore.refresh(info)
print [i.rel_data for i in info.rels]
print "Finished"
