示例#1
0
    def testManyToOne1(self):
        for i in range(0, 10):
            a = Datum('Schema',
                      'id',
                      id=1,
                      parent=many_to_one(
                          Datum('OtherSchema',
                                'other_schema_primary_key',
                                other_schema_primary_key=i)))
            suite = DataSuite()
            DataWalker(suite)(a)
            self.assertEqual(i, a._tableau_fields['parent'].render())

        for i in range(0, 10):
            a = Datum('Schema',
                      'id',
                      id=1,
                      parent=many_to_one(
                          Datum('OtherSchema',
                                'other_schema_primary_key',
                                other_schema_primary_key=i),
                          'parent_id',
                      ))
            suite = DataSuite()
            DataWalker(suite)(a)
            self.assertEqual('OtherSchema', a.parent._tableau_schema)
            self.assertEqual(i, a.parent_id)
示例#2
0
文件: tests.py 项目: podhmo/tableau
 def testOneToMany2(self):
     a = Datum(
         'Schema',
         'id',
         id=1,
         items=one_to_many(
             [
                 Datum(
                     'OtherSchema',
                     'id',
                     id=i,
                     value=i,
                     schema_id=many_to_one('Schema')
                     )
                 for i in range(0, 10)
                 ]
             )
         )
     self.assertEqual(10, len(a.items))
     suite = DataSuite()
     DataWalker(suite)(a)
     for i, item in enumerate(a.items):
         self.assertEqual(i, item.id)
         self.assertEqual(1, item.schema_id)
         self.assertTrue(item in suite['OtherSchema'].data)
     datasets = list(suite)
     self.assertEqual(2, len(datasets))
     self.assertEqual('Schema', datasets[0].schema)
     self.assertEqual('OtherSchema', datasets[1].schema)
示例#3
0
        def __setattr__(self, k, v):
            if k.startswith('_'):
                object.__setattr__(self, k, v)
            else:
                if isinstance(v, FunctionType):
                    v = Lazy(v)
                elif isinstance(v, DatumBase):
                    # implicit many_to_one
                    v = many_to_one(v, k, v._tableau_id_fields)
                elif is_iterable_container(v):
                    # implicit one_to_many
                    v = one_to_many(v, k)
                if isinstance(v, DynamicField):
                    v.bind(self, k)

                if isinstance(v, many_to_one):
                    for _k in v.this_side_fields:
                        self.__check_key_is_declared(_k)
                elif isinstance(v, one_to_many):
                    self.__check_key_is_declared(k)
                    if v.referred_fields is not None:
                        for _k in v.referred_fields:
                            self.__check_key_is_declared(_k)
                object.__getattribute__(self, '_tableau_fields')[k] = v
                if self._tableau_managed_class is not None and not isinstance(
                        v, Lazy):
                    object.__setattr__(self, k, self._value_of(k, v))
示例#4
0
文件: sqla.py 项目: moriyoshi/tableau
        def __setattr__(self, k, v):
            if k.startswith('_'):
                object.__setattr__(self, k, v)
            else:
                if isinstance(v, FunctionType):
                    v = Lazy(v)
                elif isinstance(v, DatumBase):
                    # implicit many_to_one
                    v = many_to_one(v, k, v._tableau_id_fields)
                elif is_iterable_container(v):
                    # implicit one_to_many
                    v = one_to_many(v, k)
                if isinstance(v, DynamicField):
                    v.bind(self, k)

                if isinstance(v, many_to_one):
                    for _k in v.this_side_fields:
                        self.__check_key_is_declared(_k)
                elif isinstance(v, one_to_many):
                    self.__check_key_is_declared(k)
                    if v.referred_fields is not None:
                        for _k in v.referred_fields:
                            self.__check_key_is_declared(_k)
                object.__getattribute__(self, '_tableau_fields')[k] = v
                if self._tableau_managed_class is not None and not isinstance(v, Lazy):
                    object.__setattr__(self, k, self._value_of(k, v))
示例#5
0
 def testManyToOne3(self):
     metadata = MetaData()
     Table('Schema', metadata, Column('id', Integer, primary_key=True),
           Column('parent_id', Integer))
     SADatum = self.SADatum = newSADatum(metadata)
     a = SADatum('Schema',
                 'id',
                 id=1,
                 parent=many_to_one(Datum('Foo', 'id', id=1), 'parent_id'))
     suite = DataSuite()
     DataWalker(suite)(a)
     self.assertEqual(1, a._tableau_fields['parent'].render())
示例#6
0
文件: tests.py 项目: podhmo/tableau
    def testManyToOne2(self):
        a = Datum(
            'Schema',
            'id',
            id=1,
            parent=many_to_one(
                None
                )
            )

        suite = DataSuite()
        DataWalker(suite)(a)
        self.assertEqual(None, a._tableau_fields['parent'].render())
示例#7
0
 def __setattr__(self, k, v):
     if k.startswith('_'):
         object.__setattr__(self, k, v)
     else:
         if isinstance(v, FunctionType):
             v = Lazy(v)
         elif isinstance(v, DatumBase):
             # implicit many_to_one
             v = many_to_one(v, k, v._tableau_id_fields)
         elif is_iterable_container(v):
             # implicit one_to_many
             v = one_to_many(v, k)
         if isinstance(v, DynamicField):
             v.bind(self, k)
         self._tableau_fields[k] = v
示例#8
0
文件: tests.py 项目: podhmo/tableau
    def testManyToOne1(self):
        for i in range(0, 10):
            a = Datum(
                'Schema',
                'id',
                id=1,
                parent=many_to_one(
                    Datum(
                        'OtherSchema',
                        'other_schema_primary_key',
                        other_schema_primary_key=i
                        )
                    )
                )
            suite = DataSuite()
            DataWalker(suite)(a)
            self.assertEqual(i, a._tableau_fields['parent'].render())

        for i in range(0, 10):
            a = Datum(
                'Schema',
                'id',
                id=1,
                parent=many_to_one(
                    Datum(
                        'OtherSchema',
                        'other_schema_primary_key',
                        other_schema_primary_key=i
                        ),
                    'parent_id',
                    )
                )
            suite = DataSuite()
            DataWalker(suite)(a)
            self.assertEqual('OtherSchema', a.parent._tableau_schema)
            self.assertEqual(i, a.parent_id)
示例#9
0
 def __setattr__(self, k, v):
     if k.startswith('_'):
         object.__setattr__(self, k, v)
     else:
         if isinstance(v, FunctionType):
             v = Lazy(v)
         elif isinstance(v, DatumBase):
             # implicit many_to_one
             v = many_to_one(v, k, v._tableau_id_fields)
         elif is_iterable_container(v):
             # implicit one_to_many
             v = one_to_many(v, k)
         if isinstance(v, DynamicField):
             v.bind(self, k)
         self._tableau_fields[k] = v
示例#10
0
文件: tests.py 项目: podhmo/tableau
 def testManyToOne3(self):
     metadata = MetaData()
     Table('Schema', metadata,
         Column('id', Integer, primary_key=True),
         Column('parent_id', Integer)
         )
     SADatum = newSADatum(metadata)
     a = SADatum(
         'Schema',
         'id',
         id=1,
         parent=many_to_one(
             Datum('Foo', 'id', id=1),
             'parent_id'
             )
         )
     suite = DataSuite()
     DataWalker(suite)(a)
     self.assertEqual(1, a._tableau_fields['parent'].render())
示例#11
0
 def testOneToMany2(self):
     a = Datum('Schema',
               'id',
               id=1,
               items=one_to_many([
                   Datum('OtherSchema',
                         'id',
                         id=i,
                         value=i,
                         schema_id=many_to_one('Schema'))
                   for i in range(0, 10)
               ]))
     self.assertEqual(10, len(a.items))
     suite = DataSuite()
     DataWalker(suite)(a)
     for i, item in enumerate(a.items):
         self.assertEqual(i, item.id)
         self.assertEqual(1, item.schema_id)
         self.assertTrue(item in suite['OtherSchema'].data)
     datasets = list(suite)
     self.assertEqual(2, len(datasets))
     self.assertEqual('Schema', datasets[0].schema)
     self.assertEqual('OtherSchema', datasets[1].schema)
示例#12
0
    def testManyToOne2(self):
        a = Datum('Schema', 'id', id=1, parent=many_to_one(None))

        suite = DataSuite()
        DataWalker(suite)(a)
        self.assertEqual(None, a._tableau_fields['parent'].render())