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
def _column2enum( self, datamodel: SQLAInterface, column: TreeNode, enum_dump_by_name: bool = False, ): required = not datamodel.is_nullable(column.data) enum_class = datamodel.list_columns[column.data].info.get( "enum_class", datamodel.list_columns[column.data].type ) if enum_dump_by_name: enum_dump_by = EnumField.NAME else: enum_dump_by = EnumField.VALUE field = EnumField(enum_class, dump_by=enum_dump_by, required=required) field.unique = datamodel.is_unique(column.data) return field