def test_is_many_to_many(self): interf = SQLAInterface(Parent) eq_(True, interf.is_relation('neighbours')) eq_(False, interf.is_relation_one_to_many('neighbours')) eq_(False, interf.is_relation_one_to_one('neighbours')) eq_(False, interf.is_relation_many_to_one('neighbours')) eq_(True, interf.is_relation_many_to_many('neighbours')) interf = SQLAInterface(Neighbour) eq_(True, interf.is_relation('parents')) eq_(False, interf.is_relation_one_to_many('parents')) eq_(False, interf.is_relation_one_to_one('parents')) eq_(False, interf.is_relation_many_to_one('parents')) eq_(True, interf.is_relation_many_to_many('parents'))
def test_is_one_to_one(self): interf = SQLAInterface(Parent) eq_(True, interf.is_relation('favorite_child')) eq_(True, interf.is_relation_one_to_one('favorite_child')) eq_(False, interf.is_relation_one_to_many('favorite_child')) eq_(False, interf.is_relation_many_to_many('favorite_child')) eq_(False, interf.is_relation_many_to_one('favorite_child')) interf = SQLAInterface(FavoriteChild) eq_(True, interf.is_relation('parent')) eq_(True, interf.is_relation_one_to_one('parent')) eq_(False, interf.is_relation_one_to_many('parent')) eq_(False, interf.is_relation_many_to_many('parent')) eq_(False, interf.is_relation_many_to_one('parent'))
def test_is_one_to_many(self): interf = SQLAInterface(Parent) eq_(True, interf.is_relation('children')) eq_(True, interf.is_relation_one_to_many('children')) eq_(False, interf.is_relation_one_to_one('children')) eq_(False, interf.is_relation_many_to_one('children')) eq_(False, interf.is_relation_many_to_many('children'))
def test_is_many_to_one_no_backref(self): interf = SQLAInterface(Headache) eq_(True, interf.is_relation('parent')) eq_(False, interf.is_relation_one_to_many('parent')) eq_(False, interf.is_relation_one_to_one('parent')) eq_(True, interf.is_relation_many_to_one('parent')) eq_(False, interf.is_relation_many_to_many('parent'))
def test_is_many_to_one(self): interf = SQLAInterface(Child) eq_(True, interf.is_relation('parent')) eq_(False, interf.is_relation_one_to_many('parent')) eq_(False, interf.is_relation_one_to_one('parent')) eq_(True, interf.is_relation_many_to_one('parent')) eq_(False, interf.is_relation_many_to_many('parent'))
def _column2relation( self, datamodel: SQLAInterface, column: TreeNode, nested: bool = False, parent_schema_name: Optional[str] = None, ): if nested: required = not datamodel.is_nullable(column.data) nested_model = datamodel.get_related_model(column.data) lst = [item.data for item in column.childs] nested_schema = self.convert( lst, nested_model, nested=False, parent_schema_name=parent_schema_name ) if datamodel.is_relation_many_to_one(column.data): many = False elif datamodel.is_relation_many_to_many(column.data): many = True required = False elif datamodel.is_relation_one_to_many(column.data): many = True else: many = False field = fields.Nested(nested_schema, many=many, required=required) field.unique = datamodel.is_unique(column.data) return field # Handle bug on marshmallow-sqlalchemy # https://github.com/marshmallow-code/marshmallow-sqlalchemy/issues/163 if datamodel.is_relation_many_to_many( column.data ) or datamodel.is_relation_one_to_many(column.data): if datamodel.get_info(column.data).get("required", False): required = True else: required = False else: required = not datamodel.is_nullable(column.data) field = field_for(datamodel.obj, column.data) field.required = required field.unique = datamodel.is_unique(column.data) return field