mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-20 20:39:55 +00:00
- 将 ApplicationQueryParams 改为 ApplicationQueryParam - 同步更新相关导入和函数参数类型注解 - 修改 PaginationQueryParams 为 PaginationQueryParam refactor(demo): 重命名查询参数类以统一命名风格 - 将 DemoQueryParams 改为 DemoQueryParam - 同步更新相关导入和函数参数类型注解 - 修改 PaginationQueryParams 为 PaginationQueryParam refactor(gencode): 优化代码生成模块的模型和服务层结构 - 统一模型名称后缀为 Schema,调整相关引用 - 规范 Pydantic schema 的命名和定义 - 删除无用的 Python DAO 模板文件 - 调整导入路径,统一使用 app 目录下的模块路径 - 改进服务层方法签名,添加返回类型注解 - 使用自定义异常 CustomException 替代旧异常 - 统一成功响应格式为 SuccessResponse - 优化代码生成服务中的数据库操作 DAO 调用参数传递 - 优化代码生成业务表和字段模型的字段定义,添加注释和默认值 - 优化生成代码路径处理逻辑和异常信息提示 - 整合分页查询参数定义,统一分页模型 - 修正多个服务方法的参数类型和返回类型 - 删除无用的导入和多余注释,提升代码整洁度
880 lines
28 KiB
Python
880 lines
28 KiB
Python
# -*- coding: utf-8 -*-
|
||
|
||
from enum import Enum
|
||
from app.config.setting import settings
|
||
|
||
class GenConfig:
|
||
def __init__(self):
|
||
pass
|
||
|
||
# 作者
|
||
author: str = 'Richard'
|
||
# 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
|
||
packageName: str = ''
|
||
# 自动去除表前缀,默认是True
|
||
autoRemovePre: bool = True
|
||
# 表前缀(生成类名不会包含表前缀,多个用逗号分隔)
|
||
tablePrefix: str = 'system_'
|
||
# 是否允许生成文件覆盖到本地(自定义路径),默认不允许
|
||
allowOverwrite: bool = False
|
||
|
||
|
||
class GenConstants:
|
||
"""代码生成通用常量"""
|
||
|
||
# 单表(增删改查)
|
||
TPL_CRUD = "crud"
|
||
|
||
# 树表(增删改查)
|
||
TPL_TREE = "tree"
|
||
|
||
# 主子表(增删改查)
|
||
TPL_SUB = "sub"
|
||
|
||
# 树编码字段
|
||
TREE_CODE = "treeCode"
|
||
|
||
# 树父编码字段
|
||
TREE_PARENT_CODE = "treeParentCode"
|
||
|
||
# 树名称字段
|
||
TREE_NAME = "treeName"
|
||
|
||
# 上级菜单ID字段
|
||
PARENT_MENU_ID = "parentMenuId"
|
||
|
||
# 上级菜单名称字段
|
||
PARENT_MENU_NAME = "parentMenuName"
|
||
|
||
# 数据库字符串类型
|
||
TYPE_STRING = ["char", "varchar", "nvarchar", "varchar2"]
|
||
|
||
# 数据库文本类型
|
||
TYPE_TEXT = ["tinytext", "text", "mediumtext", "longtext"]
|
||
|
||
# 数据库时间类型
|
||
TYPE_DATE_TIME = ["datetime", "time", "date", "timestamp" ]
|
||
|
||
# 数据库数字类型
|
||
TYPE_NUMBER = ["tinyint", "smallint", "mediumint", "int", "number", "integer", "bigint", "float", "float", "double", "decimal"]
|
||
|
||
# 页面不需要编辑字段
|
||
COLUMN_NAME_NOT_EDIT = ["id", "create_by", "dept_id", "create_time", "del_flag", "update_time"]
|
||
|
||
# 页面不需要显示的列表字段
|
||
COLUMN_NAME_NOT_LIST = ["id", "create_by", "dept_id", "create_time", "del_flag", "update_by"]
|
||
|
||
# 页面不需要查询字段
|
||
COLUMN_NAME_NOT_QUERY = ["id", "create_by", "dept_id", "create_time", "del_flag", "update_by", "update_time", "remark"]
|
||
|
||
# Dao基类字段
|
||
DAO_COLUMN_NOT_EDIT = ["create_by", "dept_id", "create_time", "del_flag", "update_time"]
|
||
|
||
# Entity基类字段
|
||
BASE_ENTITY = ['id', 'create_time', 'update_time', "create_by", "dept_id", 'del_flag']
|
||
|
||
# Tree基类字段
|
||
TREE_ENTITY = ["parentName", "parentId", "orderNum", "ancestors"]
|
||
|
||
# 文本框
|
||
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"
|
||
|
||
# 模糊查询
|
||
QUERY_LIKE = "LIKE"
|
||
|
||
# 相等查询
|
||
QUERY_EQ = "EQ"
|
||
|
||
# 需要
|
||
REQUIRE = "1"
|
||
|
||
# MySQL -> SQLAlchemy 类型映射
|
||
MYSQL_TO_SQLALCHEMY = {
|
||
# Numeric Types
|
||
"TINYINT": "SmallInteger",
|
||
"SMALLINT": "SmallInteger",
|
||
"MEDIUMINT": "Integer",
|
||
"INT": "Integer",
|
||
"INTEGER": "Integer",
|
||
"BIGINT": "BigInteger",
|
||
"FLOAT": "Float",
|
||
"DOUBLE": "Float",
|
||
"DECIMAL": "Numeric",
|
||
"NUMERIC": "Numeric",
|
||
|
||
# String Types
|
||
"CHAR": "String",
|
||
"VARCHAR": "String",
|
||
"TEXT": "Text",
|
||
"TINYTEXT": "Text",
|
||
"MEDIUMTEXT": "Text",
|
||
"LONGTEXT": "Text",
|
||
"BLOB": "LargeBinary",
|
||
"TINYBLOB": "LargeBinary",
|
||
"MEDIUMBLOB": "LargeBinary",
|
||
"LONGBLOB": "LargeBinary",
|
||
|
||
# Date and Time Types
|
||
"DATE": "Date",
|
||
"DATETIME": "DateTime",
|
||
"TIMESTAMP": "DateTime",
|
||
"TIME": "Time",
|
||
"YEAR": "Integer", # MySQL YEAR type is commonly represented as Integer in SQLAlchemy
|
||
|
||
# Binary Types
|
||
"BINARY": "Binary",
|
||
"VARBINARY": "Binary",
|
||
|
||
# Enum and Set Types
|
||
"ENUM": "Enum",
|
||
"SET": "Enum", # Set can be represented using Enum type in SQLAlchemy
|
||
|
||
# JSON Types
|
||
"JSON": "JSON", # SQLAlchemy supports JSON type from 1.3.0 version
|
||
|
||
# Spatial Types (less common in typical usage)
|
||
"GEOMETRY": "String", # Can be represented as String or Binary
|
||
"POINT": "String", # Represented as String in SQLAlchemy
|
||
"LINESTRING": "String", # Represented as String in SQLAlchemy
|
||
"POLYGON": "String", # Represented as String in SQLAlchemy
|
||
|
||
# Other Types
|
||
"BIT": "Boolean",
|
||
"BOOL": "Boolean",
|
||
"UUID": "String", # UUIDs in SQLAlchemy can be represented as String
|
||
"BINARY": "Binary", # MySQL BINARY type corresponds to SQLAlchemy's Binary
|
||
}
|
||
|
||
MYSQL_TO_PYTHON = {
|
||
# 字符串类型
|
||
"VARCHAR": "str",
|
||
"CHAR": "str",
|
||
"TEXT": "str",
|
||
"TINYTEXT": "str",
|
||
"MEDIUMTEXT": "str",
|
||
"LONGTEXT": "str",
|
||
# 数值类型
|
||
"INT": "int",
|
||
"TINYINT": "int",
|
||
"SMALLINT": "int",
|
||
"MEDIUMINT": "int",
|
||
"BIGINT": "int",
|
||
"FLOAT": "float",
|
||
"DOUBLE": "float",
|
||
"DECIMAL": "float",
|
||
"NUMERIC": "float",
|
||
"BIT": "bool", # 位字段,0 或 1
|
||
# 日期和时间类型
|
||
"DATETIME": "datetime",
|
||
"TIMESTAMP": "datetime",
|
||
"DATE": "datetime.date",
|
||
"TIME": "datetime.time",
|
||
"YEAR": "int", # 存储年份
|
||
"TINYINT UNSIGNED": "int", # 无符号小整数类型
|
||
# 布尔类型
|
||
"BOOLEAN": "bool",
|
||
"BOOL": "bool", # 布尔类型,通常与 BOOLEAN 相同
|
||
# JSON 数据类型
|
||
"JSON": "dict", # JSON 数据存储为字典
|
||
# 二进制类型
|
||
"BLOB": "bytes",
|
||
"TINYBLOB": "bytes",
|
||
"MEDIUMBLOB": "bytes",
|
||
"LONGBLOB": "bytes",
|
||
# 枚举和集合类型
|
||
"ENUM": "str", # 枚举类型作为字符串
|
||
"SET": "list", # 集合类型作为列表
|
||
# 时间单位类型
|
||
"DATE": "datetime.date", # 仅日期
|
||
"TIME": "datetime.time", # 仅时间
|
||
# 大文本类型
|
||
"LONGTEXT": "str",
|
||
"MEDIUMTEXT": "str",
|
||
"TINYTEXT": "str",
|
||
# UUID
|
||
"UUID": "str", # UUID 一般作为字符串
|
||
# 用于二进制数据
|
||
"BINARY": "bytes", # 固定长度的二进制数据
|
||
"VARBINARY": "bytes", # 可变长度的二进制数据
|
||
# 其他数据类型
|
||
"GEOMETRY": "bytes", # 空间数据类型,通常存储为字节流
|
||
"POINT": "bytes", # 点数据类型
|
||
"LINESTRING": "bytes", # 线数据类型
|
||
"POLYGON": "bytes", # 多边形数据类型
|
||
"MULTIPOINT": "bytes", # 多点数据类型
|
||
"MULTILINESTRING": "bytes", # 多线数据类型
|
||
"MULTIPOLYGON": "bytes", # 多多边形数据类型
|
||
"GEOMETRYCOLLECTION": "bytes", # 几何集合类型
|
||
}
|
||
|
||
|
||
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):
|
||
"""
|
||
初始化返回码
|
||
|
||
:param code: 错误码
|
||
:param msg: 错误信息
|
||
"""
|
||
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:
|
||
"""
|
||
代码生成常量
|
||
|
||
TPL_CRUD: 单表(增删改查
|
||
TPL_TREE: 树表(增删改查)
|
||
TPL_SUB: 主子表(增删改查)
|
||
TREE_CODE: 树编码字段
|
||
TREE_PARENT_CODE: 树父编码字段
|
||
TREE_NAME: 树名称字段
|
||
PARENT_MENU_ID: 上级菜单ID字段
|
||
PARENT_MENU_NAME: 上级菜单名称字段
|
||
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类型映射
|
||
"""
|
||
|
||
TPL_CRUD = 'crud'
|
||
TPL_TREE = 'tree'
|
||
TPL_SUB = 'sub'
|
||
TREE_CODE = 'treeCode'
|
||
TREE_PARENT_CODE = 'treeParentCode'
|
||
TREE_NAME = 'treeName'
|
||
PARENT_MENU_ID = 'parentMenuId'
|
||
PARENT_MENU_NAME = 'parentMenuName'
|
||
COLUMNTYPE_STR = (
|
||
['character varying', 'varchar', 'character', 'char']
|
||
if settings.DATABASE_TYPE == 'postgresql'
|
||
else ['char', 'varchar', 'nvarchar', 'varchar2']
|
||
)
|
||
COLUMNTYPE_TEXT = (
|
||
['text', 'citext'] if settings.DATABASE_TYPE == 'postgresql' 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 == 'postgresql'
|
||
else ['datetime', 'time', 'date', 'timestamp']
|
||
)
|
||
COLUMNTYPE_GEOMETRY = (
|
||
['point', 'line', 'lseg', 'box', 'path', 'polygon', 'circle']
|
||
if settings.DATABASE_TYPE == 'postgresql'
|
||
else [
|
||
'geometry',
|
||
'point',
|
||
'linestring',
|
||
'polygon',
|
||
'multipoint',
|
||
'multilinestring',
|
||
'multipolygon',
|
||
'geometrycollection',
|
||
]
|
||
)
|
||
COLUMNTYPE_NUMBER = [
|
||
'tinyint',
|
||
'smallint',
|
||
'mediumint',
|
||
'int',
|
||
'number',
|
||
'integer',
|
||
'bit',
|
||
'bigint',
|
||
'float',
|
||
'double',
|
||
'decimal',
|
||
]
|
||
COLUMNNAME_NOT_ADD_SHOW = ['create_by', 'create_time']
|
||
COLUMNNAME_NOT_EDIT_SHOW = ['update_by', 'update_time']
|
||
COLUMNNAME_NOT_EDIT = ['id', 'create_by', 'create_time', 'del_flag']
|
||
COLUMNNAME_NOT_LIST = ['id', 'create_by', 'create_time', 'del_flag', 'update_by', 'update_time']
|
||
COLUMNNAME_NOT_QUERY = ['id', 'create_by', 'create_time', 'del_flag', 'update_by', 'update_time', 'remark']
|
||
BASE_ENTITY = ['createBy', 'createTime', 'updateBy', 'updateTime', 'remark']
|
||
TREE_ENTITY = ['parentName', 'parentId', 'orderNum', '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 = '1'
|
||
DB_TO_SQLALCHEMY_TYPE_MAPPING = (
|
||
{
|
||
'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 == 'postgresql'
|
||
else {
|
||
# 数值类型
|
||
'TINYINT': 'SmallInteger',
|
||
'SMALLINT': 'SmallInteger',
|
||
'MEDIUMINT': 'Integer',
|
||
'INT': 'Integer',
|
||
'INTEGER': 'Integer',
|
||
'BIGINT': 'BigInteger',
|
||
'FLOAT': 'Float',
|
||
'DOUBLE': 'Float',
|
||
'DECIMAL': 'DECIMAL',
|
||
'BIT': 'Integer',
|
||
# 日期和时间类型
|
||
'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',
|
||
}
|
||
)
|
||
DB_TO_PYTHON_TYPE_MAPPING = (
|
||
{
|
||
'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 == 'postgresql'
|
||
else {
|
||
# 数值类型
|
||
'TINYINT': 'int',
|
||
'SMALLINT': 'int',
|
||
'MEDIUMINT': 'int',
|
||
'INT': 'int',
|
||
'INTEGER': 'int',
|
||
'BIGINT': 'int',
|
||
'FLOAT': 'float',
|
||
'DOUBLE': 'float',
|
||
'DECIMAL': 'Decimal',
|
||
'BIT': 'int',
|
||
# 日期和时间类型
|
||
'DATE': 'date',
|
||
'TIME': 'time',
|
||
'DATETIME': 'datetime',
|
||
'TIMESTAMP': 'datetime',
|
||
'YEAR': 'int',
|
||
# 字符串类型
|
||
'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': 'str',
|
||
# 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) # 输出: 成功
|