# -*- coding: utf-8 -*- from enum import Enum from app.config.setting import settings class RET(Enum): """ 系统返回码枚举 0~200: 成功状态码 400~600: HTTP标准错误码 4000+: 自定义业务错误码 """ # 成功状态码 OK = (0, "成功") SUCCESS = (200, "操作成功") CREATED = (201, "创建成功") ACCEPTED = (202, "请求已接受") NO_CONTENT = (204, "操作成功,无返回数据") # HTTP标准错误码 ERROR = (1, "请求错误") BAD_REQUEST = (400, "参数错误") UNAUTHORIZED = (401, "未授权") FORBIDDEN = (403, "访问受限") NOT_FOUND = (404, "资源不存在") BAD_METHOD = (405, "不支持的请求方法") NOT_ACCEPTABLE = (406, "不接受的请求") CONFLICT = (409, "资源冲突") GONE = (410, "资源已删除") PRECONDITION_FAILED = (412, "前提条件失败") UNSUPPORTED_MEDIA_TYPE = (415, "不支持的媒体类型") UNPROCESSABLE_ENTITY = (422, "无法处理的实体") TOO_MANY_REQUESTS = (429, "请求过于频繁") # 服务器错误码 INTERNAL_SERVER_ERROR = (500, "服务器内部错误") NOT_IMPLEMENTED = (501, "功能未实现") BAD_GATEWAY = (502, "网关错误") SERVICE_UNAVAILABLE = (503, "服务不可用") GATEWAY_TIMEOUT = (504, "网关超时") HTTP_VERSION_NOT_SUPPORTED = (505, "HTTP版本不支持") # 自定义业务错误码 EXCEPTION = (-1, "系统异常") DATAEXIST = (4003, "数据已存在") DATAERR = (4004, "数据错误") PARAMERR = (4103, "参数错误") IOERR = (4302, "IO错误") SERVERERR = (4500, "服务错误") UNKOWNERR = (4501, "未知错误") TIMEOUT = (4502, "请求超时") RATE_LIMIT_EXCEEDED = (4503, "访问频率超限") # Token相关错误码 INVALID_TOKEN = (4504, "无效令牌") EXPIRED_TOKEN = (4505, "令牌过期") # 认证授权错误码 INVALID_CREDENTIALS = (4506, "无效凭证") INVALID_REQUEST = (4507, "无效请求") INVALID_FORMAT = (4508, "格式错误") INVALID_INPUT = (4509, "输入错误") INVALID_STATE = (4510, "状态错误") INVALID_OPERATION = (4511, "操作错误") INVALID_PERMISSION = (4512, "权限错误") INVALID_RESOURCE = (4513, "资源错误") INVALID_CONFIGURATION = (4514, "配置错误") # 会话安全错误码 INVALID_SESSION = (4515, "会话错误") INVALID_LICENSE = (4516, "许可证错误") INVALID_CERTIFICATE = (4517, "证书错误") INVALID_SIGNATURE = (4518, "签名错误") INVALID_ENCRYPTION = (4519, "加密错误") INVALID_DECRYPTION = (4520, "解密错误") INVALID_COMPRESSION = (4521, "压缩错误") INVALID_DECOMPRESSION = (4522, "解压错误") # 权限相关错误码 INVALID_AUTHENTICATION = (4523, "认证错误") INVALID_AUTHORIZATION = (4524, "授权错误") INVALID_ACCESS = (4525, "访问错误") INVALID_SECURITY = (4526, "安全错误") # 系统组件错误码 INVALID_NETWORK = (4527, "网络错误") INVALID_DATABASE = (4528, "数据库错误") INVALID_CACHE = (4529, "缓存错误") INVALID_QUEUE = (4530, "队列错误") INVALID_LOCK = (4531, "锁错误") INVALID_TRANSACTION = (4532, "事务错误") INVALID_LOG = (4533, "日志错误") INVALID_MONITORING = (4534, "监控错误") INVALID_NOTIFICATION = (4535, "通知错误") # 任务调度错误码 INVALID_SCHEDULING = (4536, "调度错误") INVALID_TASK = (4537, "任务错误") INVALID_JOB = (4538, "作业错误") INVALID_WORKFLOW = (4539, "工作流错误") # 开发相关错误码 INVALID_SCRIPT = (4540, "脚本错误") INVALID_PLUGIN = (4541, "插件错误") INVALID_MODULE = (4542, "模块错误") INVALID_PACKAGE = (4543, "包错误") INVALID_CLASS = (4544, "类错误") INVALID_FUNCTION = (4545, "函数错误") INVALID_METHOD = (4546, "方法错误") INVALID_PROPERTY = (4547, "属性错误") INVALID_VARIABLE = (4548, "变量错误") INVALID_CONSTANT = (4549, "常量错误") INVALID_ENUM = (4550, "枚举错误") INVALID_INTERFACE = (4551, "接口错误") INVALID_PROTOCOL = (4552, "协议错误") # 服务相关错误码 INVALID_SERVICE = (4553, "服务错误") INVALID_CLIENT = (4554, "客户端错误") INVALID_SERVER = (4555, "服务器错误") INVALID_SYSTEM = (4556, "系统错误") # 用户权限错误码 INVALID_USER = (4557, "用户错误") INVALID_GROUP = (4558, "用户组错误") INVALID_ROLE = (4559, "角色错误") INVALID_PERMISSION_GROUP = (4560, "权限组错误") INVALID_PERMISSION_ROLE = (4561, "权限角色错误") INVALID_PERMISSION_USER = (4562, "权限用户错误") INVALID_PERMISSION_RESOURCE = (4563, "权限资源错误") INVALID_PERMISSION_ACTION = (4564, "权限操作错误") INVALID_PERMISSION_SCOPE = (4565, "权限范围错误") INVALID_PERMISSION_LEVEL = (4566, "权限级别错误") INVALID_PERMISSION_TYPE = (4567, "权限类型错误") INVALID_PERMISSION_STATUS = (4568, "权限状态错误") INVALID_PERMISSION_TIME = (4569, "权限时间错误") INVALID_PERMISSION_CONDITION = (4570, "权限条件错误") INVALID_PERMISSION_POLICY = (4571, "权限策略错误") INVALID_PERMISSION_RULE = (4572, "权限规则错误") INVALID_PERMISSION_EXCEPTION = (4573, "权限异常错误") INVALID_PERMISSION_VALIDATION = (4574, "权限验证错误") INVALID_PERMISSION_AUTHENTICATION = (4575, "权限认证错误") INVALID_PERMISSION_AUTHORIZATION = (4576, "权限授权错误") INVALID_PERMISSION_ACCESS = (4577, "权限访问错误") INVALID_PERMISSION_SECURITY = (4578, "权限安全错误") INVALID_PERMISSION_NETWORK = (4579, "权限网络错误") INVALID_PERMISSION_DATABASE = (4580, "权限数据库错误") INVALID_PERMISSION_CACHE = (4581, "权限缓存错误") INVALID_PERMISSION_QUEUE = (4582, "权限队列错误") INVALID_PERMISSION_LOCK = (4583, "权限锁错误") INVALID_PERMISSION_TRANSACTION = (4584, "权限事务错误") INVALID_PERMISSION_LOG = (4585, "权限日志错误") INVALID_PERMISSION_MONITORING = (4586, "权限监控错误") INVALID_PERMISSION_NOTIFICATION = (4587, "权限通知错误") INVALID_PERMISSION_SCHEDULING = (4588, "权限调度错误") INVALID_PERMISSION_TASK = (4589, "权限任务错误") INVALID_PERMISSION_JOB = (4590, "权限作业错误") INVALID_PERMISSION_WORKFLOW = (4591, "权限工作流错误") INVALID_PERMISSION_SCRIPT = (4592, "权限脚本错误") INVALID_PERMISSION_PLUGIN = (4593, "权限插件错误") INVALID_PERMISSION_MODULE = (4594, "权限模块错误") INVALID_PERMISSION_PACKAGE = (4595, "权限包错误") INVALID_PERMISSION_CLASS = (4596, "权限类错误") INVALID_PERMISSION_FUNCTION = (4597, "权限函数错误") INVALID_PERMISSION_METHOD = (4598, "权限方法错误") INVALID_PERMISSION_PROPERTY = (4599, "权限属性错误") INVALID_PERMISSION_VARIABLE = (4600, "权限变量错误") INVALID_PERMISSION_CONSTANT = (4601, "权限常量错误") INVALID_PERMISSION_ENUM = (4602, "权限枚举错误") INVALID_PERMISSION_INTERFACE = (4603, "权限接口错误") INVALID_PERMISSION_PROTOCOL = (4604, "权限协议错误") INVALID_PERMISSION_SERVICE = (4605, "权限服务错误") INVALID_PERMISSION_CLIENT = (4606, "权限客户端错误") INVALID_PERMISSION_SERVER = (4607, "权限服务器错误") INVALID_PERMISSION_SYSTEM = (4608, "权限系统错误") def __init__(self, code: int, msg: str): """ 初始化返回码。 参数: - code (int): 错误码。 - msg (str): 错误信息。 返回: - None """ self._code = code self._msg = msg @property def code(self) -> int: """获取错误码""" return self._code @property def msg(self) -> str: """获取错误信息""" return self._msg class CommonConstant: """ 常用常量 WWW: www主域名 HTTP: http请求 HTTPS: https请求 LOOKUP_RMI: RMI远程方法调用 LOOKUP_LDAP: LDAP远程方法调用 LOOKUP_LDAPS: LDAPS远程方法调用 YES: 是否为系统默认(是) NO: 是否为系统默认(否) DEPT_NORMAL: 部门正常状态 DEPT_DISABLE: 部门停用状态 UNIQUE: 校验是否唯一的返回标识(是) NOT_UNIQUE: 校验是否唯一的返回标识(否) """ # 域名相关 WWW = 'www.' HTTP = 'http://' HTTPS = 'https://' # 远程调用 LOOKUP_RMI = 'rmi:' LOOKUP_LDAP = 'ldap:' LOOKUP_LDAPS = 'ldaps:' # 系统标识 YES = 'Y' NO = 'N' # 部门状态 DEPT_NORMAL = '0' # 正常 DEPT_DISABLE = '1' # 停用 # 唯一性校验 UNIQUE = True NOT_UNIQUE = False class JobConstant: """ 定时任务常量 JOB_ERROR_LIST: 定时任务禁止调用模块及违规字符串列表 JOB_WHITE_LIST: 定时任务允许调用模块列表 """ JOB_ERROR_LIST = [ 'app', 'config', 'exceptions', 'import ', 'middlewares', 'module_admin', 'open(', 'os.', 'server', 'sub_applications', 'subprocess.', 'sys.', 'utils', 'while ', '__import__', '"', "'", ',', '?', ':', ';', '/', '|', '+', '-', '=', '~', '!', '#', '$', '%', '^', '&', '*', '<', '>', '(', ')', '[', ']', '{', '}', ' ', ] JOB_WHITE_LIST = ['module_task'] class MenuConstant: """ 菜单常量 TYPE_DIR: 菜单类型(目录) TYPE_MENU: 菜单类型(菜单) TYPE_BUTTON: 菜单类型(按钮) YES_FRAME: 是否菜单外链(是) NO_FRAME: 是否菜单外链(否) LAYOUT: Layout组件标识 PARENT_VIEW: ParentView组件标识 INNER_LINK: InnerLink组件标识 """ TYPE_DIR = 'M' TYPE_MENU = 'C' TYPE_BUTTON = 'F' YES_FRAME = 0 NO_FRAME = 1 LAYOUT = 'Layout' PARENT_VIEW = 'ParentView' INNER_LINK = 'InnerLink' class GenConstant: """ 代码生成常量 COLUMNTYPE_STR: 数据库字符串类型 COLUMNTYPE_TEXT: 数据库文本类型 COLUMNTYPE_TIME: 数据库时间类型 COLUMNTYPE_GEOMETRY: 数据库字空间类型 COLUMNTYPE_NUMBER: 数据库数字类型 COLUMNNAME_NOT_EDIT: 页面不需要编辑字段 COLUMNNAME_NOT_LIST: 页面不需要显示的列表字段 COLUMNNAME_NOT_QUERY: 页面不需要查询字段 BASE_ENTITY: Entity基类字段 TREE_ENTITY: Tree基类字段 HTML_INPUT: 文本框 HTML_TEXTAREA: 文本域 HTML_SELECT: 下拉框 HTML_RADIO: 单选框 HTML_CHECKBOX: 复选框 HTML_DATETIME: 日期控件 HTML_IMAGE_UPLOAD: 图片上传控件 HTML_FILE_UPLOAD: 文件上传控件 HTML_EDITOR: 富文本控件 TYPE_DECIMAL: 高精度计算类型 TYPE_DATE: 时间类型 QUERY_LIKE: 模糊查询 QUERY_EQ: 相等查询 REQUIRE: 需要 DB_TO_SQLALCHEMY_TYPE_MAPPING: 数据库类型与sqlalchemy类型映射 DB_TO_PYTHON_TYPE_MAPPING: 数据库类型与python类型映射 """ # 数据库字符串类型 COLUMNTYPE_STR = ( ['character varying', 'varchar', 'character', 'char'] if settings.DATABASE_TYPE == 'postgres' else ['char', 'varchar', 'nvarchar', 'varchar2'] ) # 数据库文本类型 COLUMNTYPE_TEXT = ( ['text', 'citext'] if settings.DATABASE_TYPE == 'postgres' else ['tinytext', 'text', 'mediumtext', 'longtext'] ) # 数据库时间类型 COLUMNTYPE_TIME = ( [ 'date', 'time', 'time with time zone', 'time without time zone', 'timestamp', 'timestamp with time zone', 'timestamp without time zone', 'interval', ] if settings.DATABASE_TYPE == 'postgres' else ['datetime', 'time', 'date', 'timestamp'] ) # 数据库字空间类型 COLUMNTYPE_GEOMETRY = ( ['point', 'line', 'lseg', 'box', 'path', 'polygon', 'circle'] if settings.DATABASE_TYPE == 'postgres' else [ 'geometry', 'point', 'linestring', 'polygon', 'multipoint', 'multilinestring', 'multipolygon', 'geometrycollection', ] ) # 数据库数字类型 COLUMNTYPE_NUMBER = [ 'tinyint', 'smallint', 'mediumint', 'int', 'number', 'integer', 'bit', 'bigint', 'float', 'double', 'decimal', 'boolean', 'bool' ] # 页面不需要显示的添加字段 COLUMNNAME_NOT_ADD_SHOW = ['created_at', 'updated_at'] # 页面不需要显示的编辑字段 COLUMNNAME_NOT_EDIT_SHOW = ['updated_at'] # 页面不需要编辑字段 COLUMNNAME_NOT_EDIT = ["id", "description", "created_at", "updated_at"] # 页面不需要显示的列表字段 COLUMNNAME_NOT_LIST = ["id", "description", "created_at", "updated_at"] # 页面不需要查询字段 COLUMNNAME_NOT_QUERY = ["id", "description", "created_at", "updated_at"] # Crud基类字段 CRUD_COLUMN_NOT_EDIT = ["create_by", "description", "created_at", "updated_at"] # 实体基类字段 BASE_ENTITY = ['id', 'created_at', 'updated_at', "description"] # Tree基类字段 TREE_ENTITY = ['parent_name', 'parent_id', 'order', 'ancestors', 'children'] # 文本框 HTML_INPUT = 'input' # 文本域 HTML_TEXTAREA = 'textarea' # 下拉框 HTML_SELECT = 'select' # 单选框 HTML_RADIO = 'radio' # 复选框 HTML_CHECKBOX = 'checkbox' # 日期控件 HTML_DATETIME = 'datetime' # 图片上传控件 HTML_IMAGE_UPLOAD = 'imageUpload' # 文件上传控件 HTML_FILE_UPLOAD = 'fileUpload' # 富文本控件 HTML_EDITOR = 'editor' # 高精度计算类型 TYPE_DECIMAL = 'Decimal' # 时间类型 TYPE_DATE = ['date', 'time', 'datetime'] # 模糊查询 QUERY_LIKE = 'LIKE' # 相等查询 QUERY_EQ = 'EQ' # 需要 REQUIRE = True # 数据库类型与sqlalchemy类型映射 DB_TO_SQLALCHEMY = ( { 'boolean': 'Boolean', 'smallint': 'SmallInteger', 'integer': 'Integer', 'bigint': 'BigInteger', 'real': 'Float', 'double precision': 'Float', 'numeric': 'Numeric', 'character varying': 'String', 'character': 'String', 'text': 'Text', 'bytea': 'LargeBinary', 'date': 'Date', 'time': 'Time', 'time with time zone': 'Time', 'time without time zone': 'Time', 'timestamp': 'DateTime', 'timestamp with time zone': 'DateTime', 'timestamp without time zone': 'DateTime', 'interval': 'Interval', 'json': 'JSON', 'jsonb': 'JSONB', 'uuid': 'Uuid', 'inet': 'INET', 'cidr': 'CIDR', 'macaddr': 'MACADDR', 'point': 'Geometry', 'line': 'Geometry', 'lseg': 'Geometry', 'box': 'Geometry', 'path': 'Geometry', 'polygon': 'Geometry', 'circle': 'Geometry', 'bit': 'Bit', 'bit varying': 'Bit', 'tsvector': 'TSVECTOR', 'tsquery': 'TSQUERY', 'xml': 'String', 'array': 'ARRAY', 'composite': 'JSON', 'enum': 'Enum', 'range': 'Range', 'money': 'Numeric', 'pg_lsn': 'BigInteger', 'txid_snapshot': 'String', 'oid': 'BigInteger', 'regproc': 'String', 'regclass': 'String', 'regtype': 'String', 'regrole': 'String', 'regnamespace': 'String', 'int2vector': 'ARRAY', 'oidvector': 'ARRAY', 'pg_node_tree': 'Text', } if settings.DATABASE_TYPE == 'postgres' else { # 数值类型 'TINYINT': 'SmallInteger', 'SMALLINT': 'SmallInteger', 'MEDIUMINT': 'Integer', 'INT': 'Integer', 'INTEGER': 'Integer', 'BIGINT': 'BigInteger', 'FLOAT': 'Float', 'DOUBLE': 'Float', 'DECIMAL': 'DECIMAL', 'BIT': 'Integer', "NUMERIC": "Numeric", # 日期和时间类型 'DATE': 'Date', 'TIME': 'Time', 'DATETIME': 'DateTime', 'TIMESTAMP': 'TIMESTAMP', 'YEAR': 'Integer', # 字符串类型 'CHAR': 'CHAR', 'VARCHAR': 'String', 'TINYTEXT': 'Text', 'TEXT': 'Text', 'MEDIUMTEXT': 'Text', 'LONGTEXT': 'Text', 'BINARY': 'BINARY', 'VARBINARY': 'VARBINARY', 'TINYBLOB': 'LargeBinary', 'BLOB': 'LargeBinary', 'MEDIUMBLOB': 'LargeBinary', 'LONGBLOB': 'LargeBinary', # 枚举和集合类型 'ENUM': 'Enum', 'SET': 'String', # JSON 类型 'JSON': 'JSON', # 空间数据类型(需要扩展支持,如 GeoAlchemy2) 'GEOMETRY': 'Geometry', # 需要安装 geoalchemy2 'POINT': 'Geometry', 'LINESTRING': 'Geometry', 'POLYGON': 'Geometry', 'MULTIPOINT': 'Geometry', 'MULTILINESTRING': 'Geometry', 'MULTIPOLYGON': 'Geometry', 'GEOMETRYCOLLECTION': 'Geometry', # 其他类型 "BOOL": "Boolean", "UUID": "String", } ) # 数据库类型与python类型映射 DB_TO_PYTHON = ( { 'boolean': 'bool', 'smallint': 'int', 'integer': 'int', 'bigint': 'int', 'real': 'float', 'double precision': 'float', 'numeric': 'Decimal', 'character varying': 'str', 'character': 'str', 'text': 'str', 'bytea': 'bytes', 'date': 'date', 'time': 'time', 'time with time zone': 'time', 'time without time zone': 'time', 'timestamp': 'datetime', 'timestamp with time zone': 'datetime', 'timestamp without time zone': 'datetime', 'interval': 'timedelta', 'json': 'dict', 'jsonb': 'dict', 'uuid': 'str', 'inet': 'str', 'cidr': 'str', 'macaddr': 'str', 'point': 'list', 'line': 'list', 'lseg': 'list', 'box': 'list', 'path': 'list', 'polygon': 'list', 'circle': 'list', 'bit': 'int', 'bit varying': 'int', 'tsvector': 'str', 'tsquery': 'str', 'xml': 'str', 'array': 'list', 'composite': 'dict', 'enum': 'str', 'range': 'list', 'money': 'Decimal', 'pg_lsn': 'int', 'txid_snapshot': 'str', 'oid': 'int', 'regproc': 'str', 'regclass': 'str', 'regtype': 'str', 'regrole': 'str', 'regnamespace': 'str', 'int2vector': 'list', 'oidvector': 'list', 'pg_node_tree': 'str', } if settings.DATABASE_TYPE == 'postgres' else { # 数值类型 'TINYINT': 'int', 'SMALLINT': 'int', 'MEDIUMINT': 'int', 'INT': 'int', 'INTEGER': 'int', 'BIGINT': 'int', 'FLOAT': 'float', 'DOUBLE': 'float', "NUMERIC": "float", 'DECIMAL': 'Decimal', 'BIT': 'int', # 日期和时间类型 'DATE': 'datetime.date', 'TIME': 'datetime.time', 'DATETIME': 'datetime.datetime', 'TIMESTAMP': 'datetime.datetime', 'YEAR': 'int', "TINYINT UNSIGNED": "int", # 无符号小整数类型 # 布尔类型 "BOOLEAN": "bool", "BOOL": "bool", # 布尔类型,通常与 BOOLEAN 相同 # UUID "UUID": "str", # UUID 一般作为字符串 # 字符串类型 'CHAR': 'str', 'VARCHAR': 'str', 'TINYTEXT': 'str', 'TEXT': 'str', 'MEDIUMTEXT': 'str', 'LONGTEXT': 'str', 'BINARY': 'bytes', 'VARBINARY': 'bytes', 'TINYBLOB': 'bytes', 'BLOB': 'bytes', 'MEDIUMBLOB': 'bytes', 'LONGBLOB': 'bytes', # 枚举和集合类型 'ENUM': 'str', 'SET': 'list', # JSON 类型 'JSON': 'dict', # 空间数据类型(通常需要特殊处理) "GEOMETRY": "bytes", # 空间数据类型,通常存储为字节流 "POINT": "bytes", # 点数据类型 "LINESTRING": "bytes", # 线数据类型 "POLYGON": "bytes", # 多边形数据类型 "MULTIPOINT": "bytes", # 多点数据类型 "MULTILINESTRING": "bytes", # 多线数据类型 "MULTIPOLYGON": "bytes", # 多多边形数据类型 "GEOMETRYCOLLECTION": "bytes", # 几何集合类型 } ) # if __name__ == "__main__": # print(RET.OK.msg) # 输出: 成功