Beispiel #1
0
    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)
Beispiel #2
0
        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)
Beispiel #3
0
 def testAuto(self):
     a = Datum(
         'Schema',
         auto('id'),
         id=0
         )
     suite = DataSuite()
     DataWalker(suite)(a)
     self.assertEqual(1, a.id)
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
 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)
Beispiel #7
0
        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)
Beispiel #8
0
 def testAuto(self):
     a = Datum('Schema', auto('id'), id=0)
     suite = DataSuite()
     DataWalker(suite)(a)
     self.assertEqual(1, a.id)