def test_nested_sql(self): from spyne.model.complex import TableModel engine = create_engine('sqlite:///:memory:') session = sessionmaker(bind=engine)() metadata = TableModel.Attributes.sqla_metadata = MetaData() metadata.bind = engine class SomeOtherClass(TableModel): __tablename__ = 'some_other_class' __table_args__ = {"sqlite_autoincrement": True} id = Integer32(primary_key=True) s = Unicode(64) class SomeClass(TableModel): __tablename__ = 'some_class' __table_args__ = ( {"sqlite_autoincrement": True}, ) id = Integer32(primary_key=True) o = SomeOtherClass.customize(store_as='table') get_sqlalchemy_table(SomeOtherClass) get_sqlalchemy_table(SomeClass) metadata.create_all() soc = SomeOtherClass(s='ehe') sc = SomeClass(o=soc) session.add(sc) session.commit() session.close() sc_db = session.query(SomeClass).get(1) print sc_db assert sc_db.o.s == 'ehe' assert sc_db.o_id == 1 sc_db.o = None session.commit() session.close() sc_db = session.query(SomeClass).get(1) assert sc_db.o == None assert sc_db.o_id == None
def test_table(self): class SomeClass(ComplexModel): __metadata__ = MetaData() __tablename__ = 'some_class' i = Integer(primary_key=True) t = get_sqlalchemy_table(SomeClass) assert t.c['i'].type.__class__ is sqlalchemy.DECIMAL
def test_nested_sql_array_as_multi_table(self): from spyne.model.complex import TableModel engine = create_engine('sqlite:///:memory:') session = sessionmaker(bind=engine)() metadata = TableModel.Attributes.sqla_metadata = MetaData() metadata.bind = engine class SomeOtherClass(TableModel): __tablename__ = 'some_other_class' __table_args__ = {"sqlite_autoincrement": True} id = Integer32(primary_key=True) s = Unicode(64) class SomeClass(TableModel): __tablename__ = 'some_class' __table_args__ = {"sqlite_autoincrement": True} id = Integer32(primary_key=True) others = Array(SomeOtherClass, store_as='table_multi') get_sqlalchemy_table(SomeOtherClass) get_sqlalchemy_table(SomeClass) metadata.create_all() soc1 = SomeOtherClass(s='ehe1') soc2 = SomeOtherClass(s='ehe2') sc = SomeClass(others=[soc1, soc2]) session.add(sc) session.commit() session.close() sc_db = session.query(SomeClass).get(1) assert sc_db.others[0].s == 'ehe1' assert sc_db.others[1].s == 'ehe2' session.close()
def test_table_args(self): class SomeClass(ComplexModel): __metadata__ = MetaData() __tablename__ = 'some_class' __table_args__ = ( UniqueConstraint('j'), ) i = Integer(primary_key=True) j = Unicode(64) t = get_sqlalchemy_table(SomeClass) assert t.c['j'].type.__class__ is sqlalchemy.Unicode for c in t.constraints: if isinstance(c, UniqueConstraint): assert list(c.columns) == [t.c.j] break else: raise Exception("UniqueConstraint is missing.")