Skip to content

Nice idea from you, I got my version. #1

@wood-j

Description

@wood-j
from sqlalchemy import Column, create_engine, DateTime, String, INT, Boolean, text, Float, FLOAT
from sqlalchemy.sql import ColumnCollection
from flask_restplus import fields


class ModelExt:
    __api_dic__ = {}

    @classmethod
    def rest_structure(cls):
        if not cls.__api_dic__:
            # crack in model class columns
            columns = cls.metadata.tables[cls.__tablename__]._columns   # type: ColumnCollection
            dic = {}
            for col in columns:     # type: Column
                if col.key == 'id':
                    dic[col.key] = fields.String(readOnly=True, description=col.description)
                elif isinstance(col.type, String):
                    dic[col.key] = fields.String(description=col.description)
                elif isinstance(col.type, INT):
                    dic[col.key] = fields.Integer(description=col.description)
                elif isinstance(col.type, Boolean):
                    dic[col.key] = fields.Boolean(description=col.description)
                elif isinstance(col.type, (Float, FLOAT)):
                    dic[col.key] = fields.Float(description=col.description)
                elif isinstance(col.type, DateTime):
                    dic[col.key] = fields.DateTime(description=col.description)
                else:
                    raise Exception(f'model column map failed: {cls.__name__}.{col.key}')
            cls.__api_dic__ = dic
        return cls.__api_dic__

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions