Files
RuoYi-Vue3-FastAPI/ruoyi-fastapi-backend/common/constant.py
T
insistence a89aec54aa feat: 新增 OAuth 2.0 / OIDC 统一认证中心 (#129)
* feat: 新增统一认证中心

* perf: 优化代码

* fix: 修复问题

* perf: 优化页面

* fix: 修复部分接口缺失Request参数的问题

* perf: 优化访问控制机制

* perf: 优化代码

* fix: 修复 Logout Token 缺少 exp

* perf&fix: 优化和修复

* perf: 优化代码

* perf: 优化代码

* fix: 修复测试问题
2026-10-01 22:56:05 +08:00

1102 lines
40 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
class CommonConstant:
"""
常用常量
PASSWORD_ERROR_COUNT: 密码错误次数
WWW: www主域
HTTP: http请求
HTTPS: https请求
LOOKUP_RMI: RMI远程方法调用
LOOKUP_LDAP: LDAP远程方法调用
LOOKUP_LDAPS: LDAPS远程方法调用
YES: 是否为系统默认(是)
NO: 是否为系统默认(否)
DEPT_NORMAL: 部门正常状态
DEPT_DISABLE: 部门停用状态
UNIQUE: 校验是否唯一的返回标识(是)
NOT_UNIQUE: 校验是否唯一的返回标识(否)
"""
PASSWORD_ERROR_COUNT = 5
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 HttpStatusConstant:
"""
返回状态码
SUCCESS: 操作成功
CREATED: 对象创建成功
ACCEPTED: 请求已经被接受
NO_CONTENT: 操作已经执行成功,但是没有返回数据
MOVED_PERM: 资源已被移除
SEE_OTHER: 重定向
NOT_MODIFIED: 资源没有被修改
BAD_REQUEST: 参数列表错误(缺少,格式不匹配)
UNAUTHORIZED: 未授权
FORBIDDEN: 访问受限,授权过期
NOT_FOUND: 资源,服务未找到
BAD_METHOD: 不允许的http方法
CONFLICT: 资源冲突,或者资源被锁
UNSUPPORTED_TYPE: 不支持的数据,媒体类型
TOO_MANY_REQUESTS: 请求过于频繁
ERROR: 系统内部错误
NOT_IMPLEMENTED: 接口未实现
WARN: 系统警告消息
"""
SUCCESS = 200
CREATED = 201
ACCEPTED = 202
NO_CONTENT = 204
MOVED_PERM = 301
SEE_OTHER = 303
NOT_MODIFIED = 304
BAD_REQUEST = 400
UNAUTHORIZED = 401
FORBIDDEN = 403
NOT_FOUND = 404
BAD_METHOD = 405
CONFLICT = 409
UNSUPPORTED_TYPE = 415
TOO_MANY_REQUESTS = 429
ERROR = 500
NOT_IMPLEMENTED = 501
WARN = 601
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 LockConstant:
"""
分布式锁常量
APP_STARTUP_LOCK_KEY: 应用启动分布式锁键
LOCK_EXPIRE_SECONDS: 通用分布式锁过期时间(秒)
LOCK_RENEWAL_INTERVAL: 分布式锁续期间隔(秒)
PLUGIN_STARTUP_READY_KEY: 插件启动就绪状态键
PLUGIN_STARTUP_READY_EXPIRE_SECONDS: 插件启动就绪状态过期时间(秒)
PLUGIN_STARTUP_FAILED_EXPIRE_SECONDS: 插件启动失败状态过期时间(秒)
PLUGIN_STARTUP_READY_WAIT_TIMEOUT_SECONDS: 等待插件启动就绪的超时时间(秒)
PLUGIN_STARTUP_READY_WAIT_INTERVAL_SECONDS: 等待插件启动就绪的轮询间隔(秒)
PLUGIN_LIFECYCLE_LOCK_PREFIX: 插件生命周期锁键前缀
PLUGIN_LIFECYCLE_LOCK_EXPIRE_SECONDS: 插件生命周期锁过期时间(秒)
"""
APP_STARTUP_LOCK_KEY = 'app:startup:lock'
LOCK_EXPIRE_SECONDS = 60
LOCK_RENEWAL_INTERVAL = 20
PLUGIN_STARTUP_READY_KEY = 'plugin:startup:ready'
PLUGIN_STARTUP_READY_EXPIRE_SECONDS = 2592000
PLUGIN_STARTUP_FAILED_EXPIRE_SECONDS = 60
PLUGIN_STARTUP_READY_WAIT_TIMEOUT_SECONDS = 1800
PLUGIN_STARTUP_READY_WAIT_INTERVAL_SECONDS = 1
PLUGIN_LIFECYCLE_LOCK_PREFIX = 'plugin:lifecycle:lock'
PLUGIN_LIFECYCLE_LOCK_EXPIRE_SECONDS = 1800
class OidcConstant:
"""
统一认证中心命名空间常量。
OIDC 状态与现有 ``access_token:*`` Legacy 会话严格隔离;Redis 具体键由
``module_identity.redis_keys.OidcRedisKey`` 生成,这里只保存稳定的命名空间。
REDIS_PREFIX: OIDC Redis 键前缀
INTERACTION_NAMESPACE: 认证交互状态命名空间
AUTHORIZATION_CODE_NAMESPACE: 授权码命名空间
SSO_SESSION_NAMESPACE: 单点登录会话命名空间
USER_SESSIONS_NAMESPACE: 用户会话集合命名空间
SSO_COOKIE_NAMESPACE: 单点登录 Cookie 命名空间
REVOKED_JTI_NAMESPACE: 已撤销令牌 JTI 命名空间
RATE_LIMIT_NAMESPACE: OIDC 限流命名空间
EVENT_NAMESPACE: OIDC 审计事件命名空间
CACHE_NAMESPACE: OIDC 缓存命名空间
AUTHORIZE_RATE_LIMIT: 授权端点限流命名空间
LOGIN_RATE_LIMIT: 登录端点限流命名空间
TOKEN_RATE_LIMIT: 令牌端点限流命名空间
INTROSPECT_RATE_LIMIT: 令牌自省端点限流命名空间
"""
REDIS_PREFIX = 'oidc'
INTERACTION_NAMESPACE = 'oidc:interaction'
AUTHORIZATION_CODE_NAMESPACE = 'oidc:authorization_code'
SSO_SESSION_NAMESPACE = 'oidc:sso_session'
USER_SESSIONS_NAMESPACE = 'oidc:user_sessions'
SSO_COOKIE_NAMESPACE = 'oidc:sso_cookie'
REVOKED_JTI_NAMESPACE = 'oidc:revoked_jti'
RATE_LIMIT_NAMESPACE = 'oidc:rate_limit'
EVENT_NAMESPACE = 'oidc:event'
CACHE_NAMESPACE = 'oidc:cache'
AUTHORIZE_RATE_LIMIT = 'oidc:rate_limit:authorize'
LOGIN_RATE_LIMIT = 'oidc:rate_limit:login'
TOKEN_RATE_LIMIT = 'oidc:rate_limit:token'
INTROSPECT_RATE_LIMIT = 'oidc:rate_limit:introspect'
class OidcAuditEvent:
"""
统一认证中心首批审计事件名称。
事件值用于审计持久化和风险检索,禁止写入 Token、Secret 或 Cookie 明文。
AUTHORIZE_REQUESTED: 收到授权请求
AUTHORIZE_SUCCEEDED: 授权请求成功
AUTHORIZE_DENIED: 授权请求被拒绝
LOGIN_SUCCEEDED: 登录成功
LOGIN_FAILED: 登录失败
CONSENT_GRANTED: 用户授予同意
CONSENT_REVOKED: 用户撤销同意
AUTHORIZATION_CODE_REUSED: 授权码重复使用
TOKEN_ISSUED: 令牌签发成功
TOKEN_FAILED: 令牌处理失败
REFRESH_ROTATED: 刷新令牌轮换成功
REFRESH_REUSE_DETECTED: 检测到刷新令牌重复使用
TOKEN_REVOKED: 令牌已撤销
SESSION_REVOKED: 会话已撤销
CLIENT_ACCESS_BLOCKED: 用户应用访问已禁止
CLIENT_ACCESS_ALLOWED: 用户应用访问已允许
GRANT_REVOKED: 授权授予已撤销
RESOURCE_POLICY_CHANGED: 资源策略已变更
SCOPE_POLICY_CHANGED: Scope 策略已变更
CLIENT_CREATED: OAuth 客户端已创建
CLIENT_DISABLED: OAuth 客户端已停用
CLIENT_SECRET_ROTATED: OAuth 客户端密钥已轮换
SIGNING_KEY_ROTATED: OIDC 签名密钥已轮换
BACKCHANNEL_LOGOUT_SUCCEEDED: Back-Channel Logout 成功
BACKCHANNEL_LOGOUT_FAILED: Back-Channel Logout 失败
IDENTITY_SUBJECT_MISSING: 身份 Subject 缺失
SECURITY_VERSION_CHANGED: 安全版本已变更
INVALID_CLIENT: 无效客户端请求
"""
AUTHORIZE_REQUESTED = 'authorize_requested'
AUTHORIZE_SUCCEEDED = 'authorize_succeeded'
AUTHORIZE_DENIED = 'authorize_denied'
LOGIN_SUCCEEDED = 'login_succeeded'
LOGIN_FAILED = 'login_failed'
CONSENT_GRANTED = 'consent_granted'
CONSENT_REVOKED = 'consent_revoked'
AUTHORIZATION_CODE_REUSED = 'authorization_code_reused'
TOKEN_ISSUED = 'token_issued'
TOKEN_FAILED = 'token_failed'
REFRESH_ROTATED = 'refresh_rotated'
REFRESH_REUSE_DETECTED = 'refresh_reuse_detected'
TOKEN_REVOKED = 'token_revoked'
SESSION_REVOKED = 'session_revoked'
GRANT_REVOKED = 'grant_revoked'
CLIENT_ACCESS_BLOCKED = 'client_access_blocked'
CLIENT_ACCESS_ALLOWED = 'client_access_allowed'
RESOURCE_POLICY_CHANGED = 'resource_policy_changed'
SCOPE_POLICY_CHANGED = 'scope_policy_changed'
CLIENT_CREATED = 'client_created'
CLIENT_DISABLED = 'client_disabled'
CLIENT_SECRET_ROTATED = 'client_secret_rotated'
SIGNING_KEY_ROTATED = 'signing_key_rotated'
BACKCHANNEL_LOGOUT_SUCCEEDED = 'backchannel_logout_succeeded'
BACKCHANNEL_LOGOUT_FAILED = 'backchannel_logout_failed'
IDENTITY_SUBJECT_MISSING = 'identity_subject_missing'
SECURITY_VERSION_CHANGED = 'security_version_changed'
INVALID_CLIENT = 'invalid_client'
class PluginRuntimeConstant:
"""
插件运行时常量。
PLUGIN_HOOK_TIMEOUT_SECONDS: 插件钩子执行超时时间(秒)
PLUGIN_HEALTH_TIMEOUT_SECONDS: 插件健康检查超时时间(秒)
"""
PLUGIN_HOOK_TIMEOUT_SECONDS = 30
PLUGIN_HEALTH_TIMEOUT_SECONDS = 5
class ApiNamespace:
"""
接口注解通用命名空间常量
这一组常量统一提供给 `ApiCache`、`ApiCacheEvict`、`ApiRateLimit`
等接口注解使用,用同一套“模块:功能”命名规则收敛缓存和限流场景。
LOGIN: 登录接口命名空间
LOGIN_UNLOCK_SCREEN: 锁屏解锁接口命名空间
REGISTER: 注册接口命名空间
LOGIN_USER_INFO: 登录用户信息接口命名空间
LOGIN_USER_ROUTERS: 登录用户路由接口命名空间
CAPTCHA_IMAGE: 图片验证码接口命名空间
COMMON_UPLOAD: 通用上传接口命名空间
COMMON_PRIVATE_UPLOAD: 通用私有文件上传接口命名空间
COMMON_FILE_DOWNLOAD: 通用文件下载接口命名空间
TRANSPORT_CRYPTO_PUBLIC_KEY: 传输层加密公钥接口命名空间
TRANSPORT_CRYPTO_FRONTEND_CONFIG: 传输层加密前端配置接口命名空间
OIDC_AUTHORIZE: OIDC 授权接口命名空间
OIDC_LOGIN: OIDC 登录接口命名空间
OIDC_TOKEN: OIDC 令牌接口命名空间
OIDC_USERINFO: OIDC 用户信息接口命名空间
OIDC_INTROSPECT: OIDC 令牌自省接口命名空间
OIDC_REVOKE: OIDC 令牌撤销接口命名空间
OIDC_LOGOUT: OIDC 登出接口命名空间
OIDC_INTERACTION: OIDC 认证交互接口命名空间
OIDC_INTERACTION_LOGIN: OIDC 认证交互登录接口命名空间
OIDC_INTERACTION_CONSENT: OIDC 认证交互同意接口命名空间
SYSTEM_OAUTH_CLIENT_CREATE: OAuth 客户端创建接口命名空间
SYSTEM_OAUTH_CLIENT_DISABLE: OAuth 客户端停用接口命名空间
SYSTEM_OAUTH_CLIENT_STATUS: OAuth 客户端状态接口命名空间
SYSTEM_OAUTH_CLIENT_UPDATE: OAuth 客户端更新接口命名空间
SYSTEM_OAUTH_CLIENT_SECRET_ROTATE: OAuth 客户端密钥轮换接口命名空间
SYSTEM_OAUTH_CLIENT_SECRET_REVOKE: OAuth 客户端密钥撤销接口命名空间
SYSTEM_OAUTH_CLIENT_URI_ADD: OAuth 客户端回调地址新增接口命名空间
SYSTEM_OAUTH_CLIENT_URI_REMOVE: OAuth 客户端回调地址移除接口命名空间
SYSTEM_OAUTH_RESOURCE_CREATE: OAuth 资源创建接口命名空间
SYSTEM_OAUTH_RESOURCE_UPDATE: OAuth 资源更新接口命名空间
SYSTEM_OAUTH_RESOURCE_DISABLE: OAuth 资源停用接口命名空间
SYSTEM_OAUTH_RESOURCE_STATUS: OAuth 资源状态接口命名空间
SYSTEM_OAUTH_SCOPE_CREATE: OAuth Scope 创建接口命名空间
SYSTEM_OAUTH_SCOPE_UPDATE: OAuth Scope 更新接口命名空间
SYSTEM_OAUTH_SCOPE_DISABLE: OAuth Scope 停用接口命名空间
SYSTEM_OAUTH_SCOPE_STATUS: OAuth Scope 状态接口命名空间
SYSTEM_OAUTH_SESSION_REVOKE: OAuth 会话撤销接口命名空间
SYSTEM_OAUTH_SESSION_USER_REVOKE: OAuth 用户会话批量撤销接口命名空间
SYSTEM_OAUTH_GRANT_ACCESS: 用户应用访问控制
SYSTEM_OAUTH_GRANT_REVOKE: OAuth 授权授予撤销接口命名空间
SYSTEM_OAUTH_KEY_ROTATE: OAuth 签名密钥轮换接口命名空间
SYSTEM_OAUTH_KEY_ACTIVATE: OAuth 签名密钥激活接口命名空间
SYSTEM_OAUTH_KEY_RETIRE: OAuth 签名密钥退役接口命名空间
SYSTEM_OAUTH_KEY_DELETE: OAuth 签名密钥删除接口命名空间
MONITOR_OAUTH_AUDIT_EXPORT: OAuth 审计日志导出接口命名空间
MONITOR_OAUTH_AUDIT_CLEANUP: OAuth 审计日志清理接口命名空间
MONITOR_SERVER_INFO: 服务监控信息接口命名空间
MONITOR_CACHE_CLEAR_NAME: 缓存名称清理接口命名空间
MONITOR_CACHE_CLEAR_KEY: 缓存键清理接口命名空间
MONITOR_CACHE_CLEAR_ALL: 缓存全量清理接口命名空间
MONITOR_ONLINE_FORCE_LOGOUT: 在线用户强退接口命名空间
MONITOR_OPERLOG_CLEAN: 操作日志清空接口命名空间
MONITOR_OPERLOG_DELETE: 操作日志删除接口命名空间
MONITOR_OPERLOG_EXPORT: 操作日志导出接口命名空间
MONITOR_LOGININFO_CLEAN: 登录日志清空接口命名空间
MONITOR_LOGININFO_DELETE: 登录日志删除接口命名空间
MONITOR_LOGININFO_UNLOCK: 账户解锁接口命名空间
MONITOR_LOGININFO_EXPORT: 登录日志导出接口命名空间
MONITOR_JOB_LIST: 定时任务分页列表接口命名空间
MONITOR_JOB_DETAIL: 定时任务详情接口命名空间
MONITOR_JOB_RUN: 定时任务执行接口命名空间
MONITOR_JOB_DELETE: 定时任务删除接口命名空间
MONITOR_JOB_EXPORT: 定时任务导出接口命名空间
MONITOR_JOB_LOG_CLEAN: 定时任务日志清空接口命名空间
MONITOR_JOB_LOG_DELETE: 定时任务日志删除接口命名空间
MONITOR_JOB_LOG_EXPORT: 定时任务日志导出接口命名空间
SYSTEM_DEPT_EDIT_TREE: 部门编辑树接口命名空间
SYSTEM_DEPT_LIST: 部门列表接口命名空间
SYSTEM_DEPT_DETAIL: 部门详情接口命名空间
SYSTEM_CONFIG_LIST: 参数配置列表接口命名空间
SYSTEM_CONFIG_DETAIL: 参数配置详情接口命名空间
SYSTEM_CONFIG_REFRESH_CACHE: 参数缓存刷新接口命名空间
SYSTEM_CONFIG_EXPORT: 参数导出接口命名空间
SYSTEM_DICT_TYPE_LIST: 字典类型列表接口命名空间
SYSTEM_DICT_TYPE_OPTIONS: 字典类型选项接口命名空间
SYSTEM_DICT_TYPE_DETAIL: 字典类型详情接口命名空间
SYSTEM_DICT_REFRESH_CACHE: 字典缓存刷新接口命名空间
SYSTEM_DICT_TYPE_EXPORT: 字典类型导出接口命名空间
SYSTEM_DICT_DATA_LIST: 字典数据列表接口命名空间
SYSTEM_DICT_DATA_DETAIL: 字典数据详情接口命名空间
SYSTEM_DICT_DATA_EXPORT: 字典数据导出接口命名空间
SYSTEM_MENU_TREE: 菜单树接口命名空间
SYSTEM_MENU_ROLE_TREE: 角色菜单树接口命名空间
SYSTEM_MENU_LIST: 菜单分页列表接口命名空间
SYSTEM_MENU_DETAIL: 菜单详情接口命名空间
SYSTEM_NOTICE_LIST: 通知公告列表接口命名空间
SYSTEM_NOTICE_DETAIL: 通知公告详情接口命名空间
SYSTEM_FILE_DOWNLOAD: 文件管理下载接口命名空间
SYSTEM_FILE_DELETE: 文件管理删除接口命名空间
SYSTEM_FILE_ACL: 文件访问控制接口命名空间
SYSTEM_FILE_RETENTION_POLICY: 文件业务保留策略接口命名空间
SYSTEM_FILE_RECONCILE: 文件存储对账接口命名空间
SYSTEM_FILE_TRANSFER: 文件管理转移接口命名空间
SYSTEM_FILE_RESTORE: 文件管理恢复接口命名空间
SYSTEM_POST_LIST: 岗位列表接口命名空间
SYSTEM_POST_DETAIL: 岗位详情接口命名空间
SYSTEM_POST_EXPORT: 岗位导出接口命名空间
SYSTEM_ROLE_DEPT_TREE: 角色部门树接口命名空间
SYSTEM_ROLE_LIST: 角色列表接口命名空间
SYSTEM_ROLE_DETAIL: 角色详情接口命名空间
SYSTEM_ROLE_ALLOCATED_USER_LIST: 已分配用户角色列表接口命名空间
SYSTEM_ROLE_UNALLOCATED_USER_LIST: 未分配用户角色列表接口命名空间
SYSTEM_ROLE_EXPORT: 角色导出接口命名空间
SYSTEM_ROLE_AUTH_USER_SELECT_ALL: 角色批量分配用户接口命名空间
SYSTEM_ROLE_AUTH_USER_CANCEL: 角色取消分配用户接口命名空间
SYSTEM_ROLE_AUTH_USER_CANCEL_ALL: 角色批量取消分配用户接口命名空间
SYSTEM_USER_DEPT_TREE: 用户部门树接口命名空间
SYSTEM_USER_LIST: 用户列表接口命名空间
SYSTEM_USER_PROFILE: 用户个人信息接口命名空间
SYSTEM_USER_DETAIL: 用户详情接口命名空间
SYSTEM_USER_PROFILE_AVATAR: 用户头像上传接口命名空间
SYSTEM_USER_IMPORT: 用户导入接口命名空间
SYSTEM_USER_EXPORT: 用户导出接口命名空间
AI_MODEL_LIST: AI模型列表接口命名空间
AI_MODEL_ALL: AI模型全量列表接口命名空间
AI_MODEL_DETAIL: AI模型详情接口命名空间
AI_CHAT_CONFIG: AI对话配置接口命名空间
AI_CHAT_SEND: AI对话发送接口命名空间
AI_CHAT_CANCEL: AI对话取消接口命名空间
TOOL_GEN_LIST: 代码生成列表接口命名空间
TOOL_GEN_DB_LIST: 代码生成数据源列表接口命名空间
TOOL_GEN_DETAIL: 代码生成详情接口命名空间
TOOL_GEN_PREVIEW: 代码生成预览接口命名空间
TOOL_GEN_IMPORT_TABLE: 代码生成导入表接口命名空间
TOOL_GEN_CREATE_TABLE: 代码生成建表接口命名空间
TOOL_GEN_BATCH_GEN_CODE: 代码生成批量下载接口命名空间
TOOL_GEN_GEN_CODE_LOCAL: 代码生成到本地接口命名空间
TOOL_GEN_SYNC_DB: 代码生成同步库结构接口命名空间
"""
LOGIN = 'login'
LOGIN_UNLOCK_SCREEN = 'login:unlock-screen'
REGISTER = 'register'
LOGIN_USER_INFO = 'login:user:info'
LOGIN_USER_ROUTERS = 'login:user:routers'
CAPTCHA_IMAGE = 'captcha:image'
COMMON_UPLOAD = 'common:upload'
COMMON_PRIVATE_UPLOAD = 'common:private-upload'
COMMON_FILE_DOWNLOAD = 'common:file-download'
TRANSPORT_CRYPTO_PUBLIC_KEY = 'transport-crypto:public-key'
TRANSPORT_CRYPTO_FRONTEND_CONFIG = 'transport-crypto:frontend-config'
OIDC_AUTHORIZE = 'oidc:authorize'
OIDC_LOGIN = 'oidc:login'
OIDC_TOKEN = 'oidc:token'
OIDC_USERINFO = 'oidc:userinfo'
OIDC_INTROSPECT = 'oidc:introspect'
OIDC_REVOKE = 'oidc:revoke'
OIDC_LOGOUT = 'oidc:logout'
OIDC_INTERACTION = 'oidc:interaction'
OIDC_INTERACTION_LOGIN = 'oidc:interaction:login'
OIDC_INTERACTION_CONSENT = 'oidc:interaction:consent'
SYSTEM_OAUTH_CLIENT_CREATE = 'system:oauth-client:create'
SYSTEM_OAUTH_CLIENT_DISABLE = 'system:oauth-client:disable'
SYSTEM_OAUTH_CLIENT_STATUS = 'system:oauth-client:status'
SYSTEM_OAUTH_CLIENT_UPDATE = 'system:oauth-client:update'
SYSTEM_OAUTH_CLIENT_SECRET_ROTATE = 'system:oauth-client:secret-rotate'
SYSTEM_OAUTH_CLIENT_SECRET_REVOKE = 'system:oauth-client:secret-revoke'
SYSTEM_OAUTH_CLIENT_URI_ADD = 'system:oauth-client:uri-add'
SYSTEM_OAUTH_CLIENT_URI_REMOVE = 'system:oauth-client:uri-remove'
SYSTEM_OAUTH_RESOURCE_CREATE = 'system:oauth-resource:create'
SYSTEM_OAUTH_RESOURCE_UPDATE = 'system:oauth-resource:update'
SYSTEM_OAUTH_RESOURCE_DISABLE = 'system:oauth-resource:disable'
SYSTEM_OAUTH_RESOURCE_STATUS = 'system:oauth-resource:status'
SYSTEM_OAUTH_SCOPE_CREATE = 'system:oauth-scope:create'
SYSTEM_OAUTH_SCOPE_UPDATE = 'system:oauth-scope:update'
SYSTEM_OAUTH_SCOPE_DISABLE = 'system:oauth-scope:disable'
SYSTEM_OAUTH_SCOPE_STATUS = 'system:oauth-scope:status'
SYSTEM_OAUTH_SESSION_REVOKE = 'system:oauth-session:revoke'
SYSTEM_OAUTH_SESSION_USER_REVOKE = 'system:oauth-session:user-revoke'
SYSTEM_OAUTH_GRANT_REVOKE = 'system:oauth-grant:revoke'
SYSTEM_OAUTH_GRANT_ACCESS = 'system:oauth:grant:access'
SYSTEM_OAUTH_KEY_ROTATE = 'system:oauth-key:rotate'
SYSTEM_OAUTH_KEY_ACTIVATE = 'system:oauth-key:activate'
SYSTEM_OAUTH_KEY_RETIRE = 'system:oauth-key:retire'
SYSTEM_OAUTH_KEY_DELETE = 'system:oauth-key:delete'
MONITOR_OAUTH_AUDIT_EXPORT = 'monitor:oauth-audit:export'
MONITOR_OAUTH_AUDIT_CLEANUP = 'monitor:oauth-audit:cleanup'
MONITOR_SERVER_INFO = 'monitor:server:info'
MONITOR_CACHE_CLEAR_NAME = 'monitor:cache:clear-name'
MONITOR_CACHE_CLEAR_KEY = 'monitor:cache:clear-key'
MONITOR_CACHE_CLEAR_ALL = 'monitor:cache:clear-all'
MONITOR_ONLINE_FORCE_LOGOUT = 'monitor:online:force-logout'
MONITOR_OPERLOG_CLEAN = 'monitor:operlog:clean'
MONITOR_OPERLOG_DELETE = 'monitor:operlog:delete'
MONITOR_OPERLOG_EXPORT = 'monitor:operlog:export'
MONITOR_LOGININFO_CLEAN = 'monitor:logininfor:clean'
MONITOR_LOGININFO_DELETE = 'monitor:logininfor:delete'
MONITOR_LOGININFO_UNLOCK = 'monitor:logininfor:unlock'
MONITOR_LOGININFO_EXPORT = 'monitor:logininfor:export'
MONITOR_JOB_LIST = 'monitor:job:list'
MONITOR_JOB_DETAIL = 'monitor:job:detail'
MONITOR_JOB_RUN = 'monitor:job:run'
MONITOR_JOB_DELETE = 'monitor:job:delete'
MONITOR_JOB_EXPORT = 'monitor:job:export'
MONITOR_JOB_LOG_CLEAN = 'monitor:job-log:clean'
MONITOR_JOB_LOG_DELETE = 'monitor:job-log:delete'
MONITOR_JOB_LOG_EXPORT = 'monitor:job-log:export'
SYSTEM_DEPT_EDIT_TREE = 'system:dept:edit-tree'
SYSTEM_DEPT_LIST = 'system:dept:list'
SYSTEM_DEPT_DETAIL = 'system:dept:detail'
SYSTEM_CONFIG_LIST = 'system:config:list'
SYSTEM_CONFIG_DETAIL = 'system:config:detail'
SYSTEM_CONFIG_REFRESH_CACHE = 'system:config:refresh-cache'
SYSTEM_CONFIG_EXPORT = 'system:config:export'
SYSTEM_DICT_TYPE_LIST = 'system:dict:type-list'
SYSTEM_DICT_TYPE_OPTIONS = 'system:dict:type-options'
SYSTEM_DICT_TYPE_DETAIL = 'system:dict:type-detail'
SYSTEM_DICT_REFRESH_CACHE = 'system:dict:refresh-cache'
SYSTEM_DICT_TYPE_EXPORT = 'system:dict:type-export'
SYSTEM_DICT_DATA_LIST = 'system:dict:data-list'
SYSTEM_DICT_DATA_DETAIL = 'system:dict:data-detail'
SYSTEM_DICT_DATA_EXPORT = 'system:dict:data-export'
SYSTEM_MENU_TREE = 'system:menu:tree'
SYSTEM_MENU_ROLE_TREE = 'system:menu:role-tree'
SYSTEM_MENU_LIST = 'system:menu:list'
SYSTEM_MENU_DETAIL = 'system:menu:detail'
SYSTEM_NOTICE_LIST = 'system:notice:list'
SYSTEM_NOTICE_DETAIL = 'system:notice:detail'
SYSTEM_FILE_DOWNLOAD = 'system:file:download'
SYSTEM_FILE_DELETE = 'system:file:delete'
SYSTEM_FILE_ACL = 'system:file:acl'
SYSTEM_FILE_RETENTION_POLICY = 'system:file:retention-policy'
SYSTEM_FILE_RECONCILE = 'system:file:reconcile'
SYSTEM_FILE_TRANSFER = 'system:file:transfer'
SYSTEM_FILE_RESTORE = 'system:file:restore'
SYSTEM_POST_LIST = 'system:post:list'
SYSTEM_POST_DETAIL = 'system:post:detail'
SYSTEM_POST_EXPORT = 'system:post:export'
SYSTEM_ROLE_DEPT_TREE = 'system:role:dept-tree'
SYSTEM_ROLE_LIST = 'system:role:list'
SYSTEM_ROLE_DETAIL = 'system:role:detail'
SYSTEM_ROLE_ALLOCATED_USER_LIST = 'system:role:allocated-user-list'
SYSTEM_ROLE_UNALLOCATED_USER_LIST = 'system:role:unallocated-user-list'
SYSTEM_ROLE_EXPORT = 'system:role:export'
SYSTEM_ROLE_AUTH_USER_SELECT_ALL = 'system:role:auth-user-select-all'
SYSTEM_ROLE_AUTH_USER_CANCEL = 'system:role:auth-user-cancel'
SYSTEM_ROLE_AUTH_USER_CANCEL_ALL = 'system:role:auth-user-cancel-all'
SYSTEM_USER_DEPT_TREE = 'system:user:dept-tree'
SYSTEM_USER_LIST = 'system:user:list'
SYSTEM_USER_PROFILE = 'system:user:profile'
SYSTEM_USER_DETAIL = 'system:user:detail'
SYSTEM_USER_PROFILE_AVATAR = 'system:user:profile-avatar'
SYSTEM_USER_IMPORT = 'system:user:import'
SYSTEM_USER_EXPORT = 'system:user:export'
AI_MODEL_LIST = 'ai:model:list'
AI_MODEL_ALL = 'ai:model:all'
AI_MODEL_DETAIL = 'ai:model:detail'
AI_CHAT_CONFIG = 'ai:chat:config'
AI_CHAT_SEND = 'ai:chat:send'
AI_CHAT_CANCEL = 'ai:chat:cancel'
TOOL_GEN_LIST = 'tool:gen:list'
TOOL_GEN_DB_LIST = 'tool:gen:db-list'
TOOL_GEN_DETAIL = 'tool:gen:detail'
TOOL_GEN_PREVIEW = 'tool:gen:preview'
TOOL_GEN_IMPORT_TABLE = 'tool:gen:import-table'
TOOL_GEN_CREATE_TABLE = 'tool:gen:create-table'
TOOL_GEN_BATCH_GEN_CODE = 'tool:gen:batch-gen-code'
TOOL_GEN_GEN_CODE_LOCAL = 'tool:gen:gen-code-local'
TOOL_GEN_SYNC_DB = 'tool:gen:sync-db'
class ApiGroup:
"""
接口命名空间分组常量
当前主要用于 `ApiCacheEvict` 批量清理关联命名空间,分组成员均来自
`ApiNamespace`,按业务写操作影响范围收敛管理。
PERMISSION_MUTATION: 权限与菜单视图关联命名空间分组
DATA_SCOPE_MUTATION: 数据范围相关视图关联命名空间分组
MENU_MUTATION: 菜单写操作关联命名空间分组
JOB_MUTATION: 定时任务写操作关联命名空间分组
POST_MUTATION: 岗位写操作关联命名空间分组
NOTICE_MUTATION: 通知公告写操作关联命名空间分组
ROLE_ENTITY_MUTATION: 角色实体信息变更关联命名空间分组
ROLE_PERMISSION_MUTATION: 角色权限变更关联命名空间分组
ROLE_MUTATION: 角色通用写操作关联命名空间组合分组
USER_ENTITY_MUTATION: 用户实体信息变更关联命名空间分组
USER_PERMISSION_MUTATION: 用户权限变更关联命名空间分组
USER_INFO_MUTATION: 用户资料与安全相关写操作关联命名空间分组
LOGIN_SUCCESS_MUTATION: 登录成功后关联命名空间分组
LOGOUT_MUTATION: 登出后关联命名空间分组
CONFIG_MUTATION: 参数配置写操作关联命名空间分组
DICT_TYPE_MUTATION: 字典类型写操作关联命名空间分组
DICT_DATA_MUTATION: 字典数据写操作关联命名空间分组
AI_MODEL_MUTATION: AI模型写操作关联命名空间分组
AI_CHAT_CONFIG_MUTATION: AI对话配置写操作关联命名空间分组
GEN_MUTATION: 代码生成写操作关联命名空间分组
"""
PERMISSION_MUTATION = (
ApiNamespace.LOGIN_USER_INFO,
ApiNamespace.LOGIN_USER_ROUTERS,
ApiNamespace.SYSTEM_MENU_TREE,
ApiNamespace.SYSTEM_MENU_ROLE_TREE,
ApiNamespace.SYSTEM_MENU_LIST,
)
DATA_SCOPE_MUTATION = (
ApiNamespace.LOGIN_USER_INFO,
ApiNamespace.SYSTEM_DEPT_EDIT_TREE,
ApiNamespace.SYSTEM_DEPT_LIST,
ApiNamespace.SYSTEM_DEPT_DETAIL,
ApiNamespace.SYSTEM_ROLE_DEPT_TREE,
ApiNamespace.SYSTEM_ROLE_LIST,
ApiNamespace.SYSTEM_ROLE_DETAIL,
ApiNamespace.SYSTEM_ROLE_ALLOCATED_USER_LIST,
ApiNamespace.SYSTEM_ROLE_UNALLOCATED_USER_LIST,
ApiNamespace.SYSTEM_USER_DEPT_TREE,
ApiNamespace.SYSTEM_USER_LIST,
ApiNamespace.SYSTEM_USER_DETAIL,
ApiNamespace.SYSTEM_USER_PROFILE,
ApiNamespace.AI_MODEL_LIST,
ApiNamespace.AI_MODEL_ALL,
ApiNamespace.AI_MODEL_DETAIL,
)
MENU_MUTATION = (
*PERMISSION_MUTATION,
ApiNamespace.SYSTEM_MENU_DETAIL,
)
JOB_MUTATION = (
ApiNamespace.MONITOR_JOB_LIST,
ApiNamespace.MONITOR_JOB_DETAIL,
)
POST_MUTATION = (
ApiNamespace.SYSTEM_POST_LIST,
ApiNamespace.SYSTEM_POST_DETAIL,
ApiNamespace.SYSTEM_USER_DETAIL,
ApiNamespace.SYSTEM_USER_PROFILE,
)
NOTICE_MUTATION = (
ApiNamespace.SYSTEM_NOTICE_LIST,
ApiNamespace.SYSTEM_NOTICE_DETAIL,
)
ROLE_ENTITY_MUTATION = (
ApiNamespace.SYSTEM_ROLE_DEPT_TREE,
ApiNamespace.SYSTEM_ROLE_LIST,
ApiNamespace.SYSTEM_ROLE_DETAIL,
ApiNamespace.SYSTEM_ROLE_ALLOCATED_USER_LIST,
ApiNamespace.SYSTEM_ROLE_UNALLOCATED_USER_LIST,
ApiNamespace.SYSTEM_MENU_ROLE_TREE,
ApiNamespace.SYSTEM_USER_DETAIL,
)
ROLE_PERMISSION_MUTATION = (
*ROLE_ENTITY_MUTATION,
ApiNamespace.SYSTEM_USER_PROFILE,
ApiNamespace.LOGIN_USER_INFO,
*PERMISSION_MUTATION,
)
ROLE_MUTATION = (
*ROLE_PERMISSION_MUTATION,
*DATA_SCOPE_MUTATION,
)
USER_ENTITY_MUTATION = (
ApiNamespace.SYSTEM_USER_LIST,
ApiNamespace.SYSTEM_USER_DETAIL,
ApiNamespace.SYSTEM_ROLE_ALLOCATED_USER_LIST,
ApiNamespace.SYSTEM_ROLE_UNALLOCATED_USER_LIST,
)
USER_PERMISSION_MUTATION = (
*DATA_SCOPE_MUTATION,
*PERMISSION_MUTATION,
)
USER_INFO_MUTATION = (
ApiNamespace.SYSTEM_USER_LIST,
ApiNamespace.SYSTEM_USER_DETAIL,
ApiNamespace.SYSTEM_USER_PROFILE,
ApiNamespace.LOGIN_USER_INFO,
)
LOGIN_SUCCESS_MUTATION = (
ApiNamespace.SYSTEM_USER_LIST,
ApiNamespace.LOGIN_USER_INFO,
ApiNamespace.LOGIN_USER_ROUTERS,
ApiNamespace.SYSTEM_USER_PROFILE,
ApiNamespace.SYSTEM_USER_DETAIL,
)
LOGOUT_MUTATION = (
ApiNamespace.LOGIN_USER_INFO,
ApiNamespace.LOGIN_USER_ROUTERS,
)
CONFIG_MUTATION = (
ApiNamespace.SYSTEM_CONFIG_LIST,
ApiNamespace.SYSTEM_CONFIG_DETAIL,
)
DICT_TYPE_MUTATION = (
ApiNamespace.SYSTEM_DICT_TYPE_LIST,
ApiNamespace.SYSTEM_DICT_TYPE_OPTIONS,
ApiNamespace.SYSTEM_DICT_TYPE_DETAIL,
ApiNamespace.SYSTEM_DICT_DATA_LIST,
ApiNamespace.SYSTEM_DICT_DATA_DETAIL,
)
DICT_DATA_MUTATION = (
ApiNamespace.SYSTEM_DICT_DATA_LIST,
ApiNamespace.SYSTEM_DICT_DATA_DETAIL,
)
AI_MODEL_MUTATION = (
ApiNamespace.AI_MODEL_LIST,
ApiNamespace.AI_MODEL_ALL,
ApiNamespace.AI_MODEL_DETAIL,
)
AI_CHAT_CONFIG_MUTATION = (ApiNamespace.AI_CHAT_CONFIG,)
GEN_MUTATION = (
ApiNamespace.TOOL_GEN_LIST,
ApiNamespace.TOOL_GEN_DB_LIST,
ApiNamespace.TOOL_GEN_DETAIL,
ApiNamespace.TOOL_GEN_PREVIEW,
)
class MenuConstant:
"""
菜单常量
ROOT_ID: 根菜单ID
TYPE_DIR: 菜单类型(目录)
TYPE_MENU: 菜单类型(菜单)
TYPE_BUTTON: 菜单类型(按钮)
YES_FRAME: 是否菜单外链(是)
NO_FRAME: 是否菜单外链(否)
LAYOUT: Layout组件标识
PARENT_VIEW: ParentView组件标识
INNER_LINK: InnerLink组件标识
"""
ROOT_ID = 0
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: 上级菜单名称字段
GEN_VIEW: 生成详情页开关
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: 需要
COLUMNNAME_NOT_ADD_SHOW: 页面新增时不显示字段
COLUMNNAME_NOT_EDIT_SHOW: 页面编辑时不显示字段
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'
GEN_VIEW = 'genView'
COLUMNTYPE_STR = {
'mysql': ['char', 'varchar', 'nvarchar', 'varchar2'],
'postgresql': ['character varying', 'varchar', 'character', 'char'],
}
COLUMNTYPE_TEXT = {
'mysql': ['tinytext', 'text', 'mediumtext', 'longtext'],
'postgresql': ['text', 'citext'],
}
COLUMNTYPE_TIME = {
'mysql': ['datetime', 'time', 'date', 'timestamp'],
'postgresql': [
'date',
'time',
'time with time zone',
'time without time zone',
'timestamp',
'timestamp with time zone',
'timestamp without time zone',
'interval',
],
}
COLUMNTYPE_GEOMETRY = {
'mysql': [
'geometry',
'point',
'linestring',
'polygon',
'multipoint',
'multilinestring',
'multipolygon',
'geometrycollection',
],
'postgresql': ['point', 'line', 'lseg', 'box', 'path', 'polygon', 'circle'],
}
COLUMNTYPE_NUMBER = {
'mysql': [
'tinyint',
'smallint',
'mediumint',
'int',
'number',
'integer',
'bit',
'bigint',
'float',
'double',
'decimal',
],
'postgresql': [
'smallint',
'integer',
'bigint',
'real',
'double precision',
'numeric',
'decimal',
'boolean',
'bit',
],
}
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 = {
'postgresql': {
'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',
},
'mysql': {
# 数值类型
'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 = {
'postgresql': {
'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',
},
'mysql': {
# 数值类型
'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',
},
}