def prepare(self):
     from eplasty.relation import OneToMany
     self.backref = self.backref or clsname2tname(self.owner_class.__name__)
     self.foreign_class.add_field(self.backref, OneToMany(
         self.owner_class, backref=self.name, dependent=self.dependent
     ))
     return self
Exemple #2
0
    def _setup_non_abstract(cls, classname, bases, dict_, fields): #@NoSelf
        """Setups the non-abstract class creating primary key if needed and
selecting a table name"""

        cls.parent_classes = [b for b in bases if not b._abstract]
        cls.inh_fields = sum([
            p_cls.fields for p_cls in cls.parent_classes
        ], [])
            
        if '__pk__' not in dict_:
            if cls.parent_classes: 
                dict_['__pk__'] = cls.parent_classes[0].__pk__
            else:
                primary_key = SimplePK('id')
                fields.insert(0, primary_key)
                cls.id = dict_['id'] = primary_key
                dict_['__pk__'] = ('id',)

        cls.__pk__ = dict_['__pk__']
        dict_.pop('__pk__', None)
        cls.columns = sum((field.columns for field in fields), [])
        cls.indexes += sum((field.indexes for field in fields), [])
        for col in cls.columns:
            col.bind(cls)
        cls.inh_columns = sum([
            p_cls.columns for p_cls in cls.parent_classes
        ], [])
            
        cls.fields = fields


        if '__table_name__' in dict_:
            cls.__table_name__ = dict_['__table_name__']
        else:
            cls.__table_name__ = clsname2tname(classname)
            
        dict_.pop('__table_name__', None)

        for field in cls.fields:
            field.prepare()
 def test_tname(self):
     """Test if the __table_name__ is set"""
     self.assertEqual(
         util.clsname2tname('RoundTableKnight'),
         'round_table_knights'
     )
 def test_tnamey(self):
     """Test the __table_name__ is set correcly when singular ends with y"""
     self.assertEqual(
         util.clsname2tname('BitterCherry'),
         'bitter_cherries'
     )