def testIfDeclarativeIsAddableToSession(self): class Foo(self.declarative_base): __tablename__ = 'Foo' id = Column(Integer, primary_key=True) field = Column(String) bars = relationship('Bar') def some_model_specific_method(self): return self.field class Bar(self.declarative_base): __tablename__ = 'Bar' id = Column(Integer, primary_key=True) type = Column(String) foo_id = Column(Integer, ForeignKey('Foo.id')) __mapper_args__ = { 'polymorphic_on': type } class Foobar(Bar): __tablename__ = 'Foobar' __mapper_args__ = {'polymorphic_identity': 'foobar'} id = Column(Integer, ForeignKey('Bar.id'), primary_key=True) SADatum = newSADatum(self.metadata, self.declarative_base) datum = SADatum( 'Foo', auto('id'), field='test', bars=one_to_many([ SADatum( 'Bar', auto('id') ), SADatum( 'Foobar', auto('id') ) ], 'foo_id' ) ) self.assertEqual('Foo', datum._tableau_schema) self.assertEqual(Foo.__table__, datum._tableau_table) self.assertEqual('test', datum.field) self.assertIsInstance(datum, Foo) self.assertEqual('test', datum.some_model_specific_method()) self.assertIsInstance(datum.bars[0], Bar) self.assertIsInstance(datum.bars[1], Bar) engine = create_engine('sqlite+pysqlite:///', echo=True) session = sessionmaker(engine)() self.metadata.create_all(engine) session.add(datum) session.flush() self.assertEqual(1, datum.id) self.assertEqual(1, datum.bars[0].id) self.assertEqual(2, datum.bars[1].id)
def __init__(self, schema, id_fields=None, **fields): columns = self._tableau_table.columns _fields = dict((k, default_value(columns[k])) for k in columns.keys()) _fields.update(fields) primary_key_columns = self._tableau_table.primary_key.columns.keys() if id_fields is not None: if isinstance(id_fields, basestring): id_fields = (id_fields, ) elif isinstance(id_fields, tuple): id_fields = id_fields else: id_fields = tuple(id_fields) if len(primary_key_columns) != len(id_fields): id_fields_matched = False else: id_fields_matched = True for k1, k2 in zip(primary_key_columns, id_fields): if k1 != k2: id_fields_matched = False break if not id_fields_matched: raise ValueError('id_fields does not match to the table definition ([%s] != [%s])' % (','.join(id_fields), ','.join(primary_key_columns))) else: if len(primary_key_columns) == 1 and \ self._tableau_table.primary_key.columns[primary_key_columns[0]].autoincrement: id_fields = auto(primary_key_columns[0]) else: id_fields = tuple(primary_key_columns) self._tableau_schema = self._tableau_table.name self._tableau_id_fields = id_fields self._tableau_fields = {} for k, v in _fields.iteritems(): setattr(self, k, v)
def testAuto(self): a = Datum( 'Schema', auto('id'), id=0 ) suite = DataSuite() DataWalker(suite)(a) self.assertEqual(1, a.id)
def testIfDeclarativeIsAddableToSession(self): class Foo(self.declarative_base): __tablename__ = 'Foo' id = Column(Integer, primary_key=True) field = Column(String) bars = relationship('Bar') def some_model_specific_method(self): return self.field class Bar(self.declarative_base): __tablename__ = 'Bar' id = Column(Integer, primary_key=True) type = Column(String) foo_id = Column(Integer, ForeignKey('Foo.id')) __mapper_args__ = {'polymorphic_on': type} class Foobar(Bar): __tablename__ = 'Foobar' __mapper_args__ = {'polymorphic_identity': 'foobar'} id = Column(Integer, ForeignKey('Bar.id'), primary_key=True) SADatum = self.SADatum = newSADatum(self.metadata) datum = SADatum( 'Foo', auto('id'), field='test', bars=one_to_many( [SADatum('Bar', auto('id')), SADatum('Foobar', auto('id'))], 'foo_id')) self.assertEqual('Foo', datum._tableau_schema) self.assertEqual(Foo.__table__, datum._tableau_table) self.assertEqual('test', datum.field) self.assertEqual('test', datum.some_model_specific_method()) engine = create_engine('sqlite+pysqlite:///', echo=True) session = sessionmaker(engine)() self.metadata.create_all(engine) session.add(datum) session.flush() self.assertEqual(1, datum.id) self.assertEqual(1, datum.bars[0].id) self.assertEqual(2, datum.bars[1].id)
def testIfDeclarativeIsWalkable(self): class Test(self.declarative_base): __tablename__ = 'Test' id = Column(Integer, primary_key=True) field = Column(String) SADatum = self.SADatum = newSADatum(self.metadata) datum = SADatum('Test', auto('id'), field='test') self.assertEqual('Test', datum._tableau_schema) self.assertEqual(Test.__table__, datum._tableau_table) self.assertEqual('test', datum.field) suite = DataSuite() DataWalker(suite)(datum) self.assertEqual(1, datum.id)
def testIfDeclarativeIsWalkable(self): class Test(self.declarative_base): __tablename__ = 'Test' id = Column(Integer, primary_key=True) field = Column(String) SADatum = self.SADatum = newSADatum(self.metadata) datum = SADatum( 'Test', auto('id'), field='test' ) self.assertEqual('Test', datum._tableau_schema) self.assertEqual(Test.__table__, datum._tableau_table) self.assertEqual('test', datum.field) suite = DataSuite() DataWalker(suite)(datum) self.assertEqual(1, datum.id)
def __init__(self, schema, id_fields=None, **fields): columns = self._tableau_table.columns _fields = dict( (k, default_value(columns[k])) for k in columns.keys()) _fields.update(fields) primary_key_columns = self._tableau_table.primary_key.columns.keys( ) if id_fields is not None: if isinstance(id_fields, basestring): id_fields = (id_fields, ) elif isinstance(id_fields, tuple): id_fields = id_fields else: id_fields = tuple(id_fields) if len(primary_key_columns) != len(id_fields): id_fields_matched = False else: id_fields_matched = True for k1, k2 in zip(primary_key_columns, id_fields): if k1 != k2: id_fields_matched = False break if not id_fields_matched: raise ValueError( 'id_fields does not match to the table definition ([%s] != [%s])' % (','.join(id_fields), ','.join(primary_key_columns))) else: if len(primary_key_columns) == 1 and \ self._tableau_table.primary_key.columns[primary_key_columns[0]].autoincrement: id_fields = auto(primary_key_columns[0]) else: id_fields = tuple(primary_key_columns) self._tableau_schema = self._tableau_table.name self._tableau_id_fields = id_fields self._tableau_fields = {} for k, v in _fields.iteritems(): setattr(self, k, v)
def testAuto(self): a = Datum('Schema', auto('id'), id=0) suite = DataSuite() DataWalker(suite)(a) self.assertEqual(1, a.id)