예제 #1
0
    def test_get_fk_name_with_name_different_of_column_name(self):
        def add_in_registry():
            @register(Model)
            class Test:

                name = String(primary_key=True, db_column_name='other')

        registry = self.init_registry(add_in_registry)
        ma = ModelAttribute('Model.Test', 'name')
        assert ma.get_fk_name(registry) == 'test.other'
예제 #2
0
    def test_get_fk_name_with_name_different_of_column_name(self):

        def add_in_registry():

            @register(Model)
            class Test:

                name = String(primary_key=True, db_column_name='other')

        registry = self.init_registry(add_in_registry)
        ma = ModelAttribute('Model.Test', 'name')
        self.assertEqual(ma.get_fk_name(registry), 'test.other')
예제 #3
0
파일: event.py 프로젝트: AnyBlok/AnyBlok
    def after_model_construction(self, base, namespace,
                                 transformation_properties):
        for eventtype in ('before_insert', 'after_insert', 'before_update',
                          'after_update', 'before_delete', 'after_delete'):
            attr = eventtype + '_orm_event'
            if hasattr(base, attr):
                if not hasattr(getattr(base, attr), '__self__'):
                    raise ORMEventException("On %s %s is not a classmethod" %
                                            (base, attr))

                self.registry._sqlalchemy_known_events.append(
                    (ModelMapper(base, eventtype), namespace,
                     ModelAttribute(namespace, attr)))
예제 #4
0
파일: event.py 프로젝트: AnyBlok/AnyBlok
    def transform_base_attribute(self, attr, method, namespace, base,
                                 transformation_properties,
                                 new_type_properties):
        """declare in the registry the sqlalchemy event

        :param attr: attribute name
        :param method: method pointer of the attribute
        :param namespace: the namespace of the model
        :param base: One of the base of the model
        :param transformation_properties: the properties of the model
        :param new_type_properties: param to add in a new base if need
        """
        if not hasattr(method, 'is_an_sqlalchemy_event_listener'):
            return
        elif method.is_an_sqlalchemy_event_listener is True:
            self.registry._sqlalchemy_known_events.append(
                (method.sqlalchemy_listener, namespace,
                 ModelAttribute(namespace, attr)))
예제 #5
0
    def register(self, parent, name, cls_, **kwargs):
        """ add new sub registry in the registry

        :param parent: Existing global registry
        :param name: Name of the new registry to add it
        :param cls_: Class Interface to add in registry
        """
        _registryname = parent.__registry_name__ + '.' + name
        if 'tablename' in kwargs:
            tablename = kwargs.pop('tablename')
            if not isinstance(tablename, str):
                tablename = tablename.__tablename__

        elif hasattr(parent, name):
            tablename = getattr(parent, name).__tablename__
        else:
            if parent is Declarations or parent is Declarations.Model:
                tablename = name.lower()
            elif hasattr(parent, '__tablename__'):
                tablename = parent.__tablename__
                tablename += '_' + name.lower()

        if not hasattr(parent, name):
            p = {
                '__tablename__': tablename,
                '__registry_name__': _registryname,
                'use': lambda x: ModelAttribute(_registryname, x),
            }
            ns = type(name, tuple(), p)
            setattr(parent, name, ns)

        if parent is Declarations:
            return

        kwargs['__registry_name__'] = _registryname
        kwargs['__tablename__'] = tablename
        update_factory(kwargs)

        RegistryManager.add_entry_in_register('Model', _registryname, cls_,
                                              **kwargs)
        setattr(cls_, '__anyblok_kwargs__', kwargs)
예제 #6
0
 def test_get_column_name(self, registry_blok):
     registry = registry_blok
     ma = ModelAttribute('Model.System.Field', 'name')
     assert ma.get_column_name(registry) == 'name'
예제 #7
0
 def test_check_model_in_first_step_no_sql_model(self, registry_blok):
     registry = registry_blok
     ma = ModelAttribute('Model.System', 'name')
     with pytest.raises(ModelAttributeException):
         ma.check_model_in_first_step(registry)
예제 #8
0
 def test_without_attribute(self):
     with self.assertRaises(ModelAttributeException):
         ModelAttribute('Model.System.Model', None)
예제 #9
0
 def test_existing_FakeRelationShip(self, registry_blok):
     registry = registry_blok
     ma = ModelAttribute('Model.System.Field', 'name')
     assert ma.add_fake_relationship(registry, 'Model.System',
                                     'test') is None
예제 #10
0
 def test_get_fk_name_with_unexisting_model(self):
     registry = self.init_registry(None)
     ma = ModelAttribute('Model.Unexisting.Model', 'name')
     with self.assertRaises(ModelAttributeException):
         ma.get_fk_name(registry)
예제 #11
0
 def test_get_fk(self, registry_blok):
     registry = registry_blok
     ma = ModelAttribute('Model.System.Model', 'name')
     assert isinstance(ma.get_fk(registry), ForeignKey)
예제 #12
0
 def test_without_model(self, registry_blok):
     with pytest.raises(ModelAttributeException):
         ModelAttribute(None, 'name')
예제 #13
0
 def test_get_attribute(self, registry_blok):
     registry = registry_blok
     ma = ModelAttribute('Model.System.Model', 'name')
     assert ma.get_attribute(registry) == registry.get(
         'Model.System.Model').name
예제 #14
0
 def test_get_fk(self):
     registry = self.init_registry(None)
     ma = ModelAttribute('Model.System.Model', 'name')
     self.assertTrue(isinstance(ma.get_fk(registry), ForeignKey))
예제 #15
0
 def test_get_fk_with_options(self):
     registry = self.init_registry(None)
     ma = ModelAttribute('Model.System.Model', 'name').options(
         ondelete='cascade')
     mafk = ma.get_fk(registry)
     self.assertTrue(isinstance(mafk, ForeignKey))
예제 #16
0
 def test_without_model(self):
     with self.assertRaises(ModelAttributeException):
         ModelAttribute(None, 'name')
예제 #17
0
 def test_get_fk_name(self):
     registry = self.init_registry(None)
     ma = ModelAttribute('Model.System.Model', 'name')
     self.assertEqual(ma.get_fk_name(registry), 'system_model.name')
예제 #18
0
 def test_get_fk_name_unexisting_attribute(self):
     registry = self.init_registry(None)
     ma = ModelAttribute('Model.System.Model', 'id')
     with self.assertRaises(ModelAttributeException):
         ma.get_fk_name(registry)
예제 #19
0
 def test_from_declaration(self):
     ma = ModelAttribute('Model.System.Model', 'name')
     maa = ModelAttributeAdapter(ma)
     assert maa is ma
예제 #20
0
 def test_get_fk_name_with_wrong_model(self, registry_blok):
     registry = registry_blok
     ma = ModelAttribute('Model.System', 'name')
     with pytest.raises(ModelAttributeException):
         ma.get_fk_name(registry)
예제 #21
0
 def test_get_attribute(self):
     registry = self.init_registry(None)
     ma = ModelAttribute('Model.System.Model', 'name')
     self.assertEqual(ma.get_attribute(registry),
                      registry.get('Model.System.Model').name)
예제 #22
0
 def test_get_fk_name_unexisting_attribute(self, registry_blok):
     registry = registry_blok
     ma = ModelAttribute('Model.System.Model', 'id')
     with pytest.raises(ModelAttributeException):
         ma.get_fk_name(registry)
예제 #23
0
 def test_without_attribute(self, registry_blok):
     with pytest.raises(ModelAttributeException):
         ModelAttribute('Model.System.Model', None)
예제 #24
0
 def test_without_model_and_attribute(self):
     with self.assertRaises(ModelAttributeException):
         ModelAttribute(None, None)
예제 #25
0
 def test_without_model_and_attribute(self, registry_blok):
     with pytest.raises(ModelAttributeException):
         ModelAttribute(None, None)
예제 #26
0
 def test_str(self, registry_blok):
     ma = ModelAttribute('Model.System.Model', 'name')
     assert str(ma) == 'Model.System.Model => name'
예제 #27
0
 def test_get_fk_name_with_unexisting_model(self, registry_blok):
     registry = registry_blok
     ma = ModelAttribute('Model.Unexisting.Model', 'name')
     with pytest.raises(ModelAttributeException):
         ma.get_fk_name(registry)
예제 #28
0
 def test_get_fk_remote(self, registry_blok):
     registry = registry_blok
     ma = ModelAttribute('Model.System.Column', 'name')
     assert ma.get_fk_remote(registry) is None
예제 #29
0
 def test_get_fk_name(self, registry_blok):
     registry = registry_blok
     ma = ModelAttribute('Model.System.Model', 'name')
     assert ma.get_fk_name(registry) == 'system_model.name'
예제 #30
0
 def test_get_complete_remote(self, registry_blok):
     registry = registry_blok
     ma = ModelAttribute('Model.System.Field', 'name')
     assert ma.get_complete_remote(registry) is None
예제 #31
0
 def test_get_fk_with_options(self, registry_blok):
     registry = registry_blok
     ma = ModelAttribute('Model.System.Model',
                         'name').options(ondelete='cascade')
     mafk = ma.get_fk(registry)
     assert isinstance(mafk, ForeignKey)
예제 #32
0
 def test_existing_FakeColumn(self, registry_blok):
     registry = registry_blok
     ma = ModelAttribute('Model.System.Field', 'name')
     assert ma.add_fake_column(registry) is None