ai_v/venv/Lib/site-packages/darabonba/runtime.py
24024 af7c11d7f9 feat(api): 实现图像生成及后台同步功能
- 新增图像生成接口,支持试用、积分和自定义API Key模式
- 实现生成图片结果异步上传至MinIO存储,带重试机制
- 优化积分预扣除和异常退还逻辑,保障用户积分准确
- 添加获取生成历史记录接口,支持时间范围和分页
- 提供本地字典配置接口,支持模型、比例、提示模板和尺寸
- 实现图片批量上传接口,支持S3兼容对象存储

feat(admin): 增加管理员角色管理与权限分配接口

- 实现角色列表查询、角色创建、更新及删除功能
- 增加权限列表查询接口
- 实现用户角色分配接口,便于统一管理用户权限
- 增加系统字典增删查改接口,支持分类过滤和排序
- 权限控制全面覆盖管理接口,保证安全访问

feat(auth): 完善用户登录注册及权限相关接口与页面

- 实现手机号验证码发送及校验功能,保障注册安全
- 支持手机号注册、登录及退出接口,集成日志记录
- 增加修改密码功能,验证原密码后更新
- 提供动态导航菜单接口,基于权限展示不同菜单
- 实现管理界面路由及日志、角色、字典管理页面访问权限控制
- 添加系统日志查询接口,支持关键词和等级筛选

feat(app): 初始化Flask应用并配置蓝图与数据库

- 创建应用程序工厂,加载配置,初始化数据库和Redis客户端
- 注册认证、API及管理员蓝图,整合路由
- 根路由渲染主页模板
- 应用上下文中自动创建数据库表,保证运行环境准备完毕

feat(database): 提供数据库创建与迁移支持脚本

- 新增数据库创建脚本,支持自动检测是否已存在
- 添加数据库表初始化脚本,支持创建和删除所有表
- 实现RBAC权限初始化,包含基础权限和角色创建
- 新增字段手动修复脚本,添加用户API Key和积分字段
- 强制迁移脚本支持清理连接和修复表结构,初始化默认数据及角色分配

feat(config): 新增系统配置参数

- 配置数据库、Redis、Session和MinIO相关参数
- 添加AI接口地址及试用Key配置
- 集成阿里云短信服务配置及开发模式相关参数

feat(extensions): 初始化数据库、Redis和MinIO客户端

- 创建全局SQLAlchemy数据库实例和Redis客户端
- 配置基于boto3的MinIO兼容S3客户端

chore(logs): 添加示例系统日志文件

- 记录用户请求、验证码发送成功与失败的日志信息
2026-01-12 00:53:31 +08:00

202 lines
7.2 KiB
Python

from darabonba.core import DaraModel
from typing import Dict
from darabonba.policy.retry import RetryOptions
class ExtendsParameters(DaraModel):
def __init__(
self,
headers: Dict[str, str] = None,
queries: Dict[str, str] = None,
):
self.headers = headers
self.queries = queries
def validate(self):
pass
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
if self.headers is not None:
result['headers'] = self.headers
if self.queries is not None:
result['queries'] = self.queries
return result
def from_map(self, m: dict = None):
m = m or dict()
if m.get('headers') is not None:
self.headers = m.get('headers')
if m.get('queries') is not None:
self.queries = m.get('queries')
return self
class RuntimeOptions(DaraModel):
"""
The common runtime options model
"""
def __init__(
self,
retry_options: RetryOptions = None,
autoretry: bool = None,
ignore_ssl: bool = None,
max_attempts: int = None,
backoff_policy: str = None,
backoff_period: int = None,
read_timeout: int = None,
connect_timeout: int = None,
http_proxy: str = None,
https_proxy: str = None,
no_proxy: str = None,
max_idle_conns: int = None,
local_addr: str = None,
socks_5proxy: str = None,
socks_5net_work: str = None,
keep_alive: bool = None,
key: str = None,
cert: str = None,
ca: str = None,
extends_parameters: ExtendsParameters = None,
):
# retry options
self.retry_options = retry_options
# whether to try again
self.autoretry = autoretry
# ignore SSL validation
self.ignore_ssl = ignore_ssl
# privite key for client certificate
self.key = key
# client certificate
self.cert = cert
# server certificate
self.ca = ca
# maximum number of retries
self.max_attempts = max_attempts
# backoff policy
self.backoff_policy = backoff_policy
# backoff period
self.backoff_period = backoff_period
# read timeout
self.read_timeout = read_timeout
# connect timeout
self.connect_timeout = connect_timeout
# http proxy url
self.http_proxy = http_proxy
# https Proxy url
self.https_proxy = https_proxy
# agent blacklist
self.no_proxy = no_proxy
# maximum number of connections
self.max_idle_conns = max_idle_conns
# local addr
self.local_addr = local_addr
# SOCKS5 proxy
self.socks_5proxy = socks_5proxy
# SOCKS5 netWork
self.socks_5net_work = socks_5net_work
# whether to enable keep-alive
self.keep_alive = keep_alive
# Extends Parameters
self.extends_parameters = extends_parameters
def validate(self):
if self.retry_options:
self.retry_options.validate()
if self.extends_parameters:
self.extends_parameters.validate()
def to_map(self):
_map = super().to_map()
if _map is not None:
return _map
result = dict()
if self.retry_options is not None:
result['retryOptions'] = self.retry_options.to_map()
if self.autoretry is not None:
result['autoretry'] = self.autoretry
if self.ignore_ssl is not None:
result['ignoreSSL'] = self.ignore_ssl
if self.key is not None:
result['key'] = self.key
if self.cert is not None:
result['cert'] = self.cert
if self.ca is not None:
result['ca'] = self.ca
if self.max_attempts is not None:
result['max_attempts'] = self.max_attempts
if self.backoff_policy is not None:
result['backoff_policy'] = self.backoff_policy
if self.backoff_period is not None:
result['backoff_period'] = self.backoff_period
if self.read_timeout is not None:
result['readTimeout'] = self.read_timeout
if self.connect_timeout is not None:
result['connectTimeout'] = self.connect_timeout
if self.http_proxy is not None:
result['httpProxy'] = self.http_proxy
if self.https_proxy is not None:
result['httpsProxy'] = self.https_proxy
if self.no_proxy is not None:
result['noProxy'] = self.no_proxy
if self.max_idle_conns is not None:
result['maxIdleConns'] = self.max_idle_conns
if self.local_addr is not None:
result['localAddr'] = self.local_addr
if self.socks_5proxy is not None:
result['socks5Proxy'] = self.socks_5proxy
if self.socks_5net_work is not None:
result['socks5NetWork'] = self.socks_5net_work
if self.keep_alive is not None:
result['keepAlive'] = self.keep_alive
if self.extends_parameters is not None:
result['extendsParameters'] = self.extends_parameters.to_map()
return result
def from_map(self, m: dict = None):
m = m or dict()
if m.get('retryOptions') is not None:
self.retry_options = RetryOptions.from_map(m.get('retryOptions'))
if m.get('autoretry') is not None:
self.autoretry = m.get('autoretry')
if m.get('ignoreSSL') is not None:
self.ignore_ssl = m.get('ignoreSSL')
if m.get('key') is not None:
self.key = m.get('key')
if m.get('cert') is not None:
self.cert = m.get('cert')
if m.get('ca') is not None:
self.ca = m.get('ca')
if m.get('max_attempts') is not None:
self.max_attempts = m.get('max_attempts')
if m.get('backoff_policy') is not None:
self.backoff_policy = m.get('backoff_policy')
if m.get('backoff_period') is not None:
self.backoff_period = m.get('backoff_period')
if m.get('readTimeout') is not None:
self.read_timeout = m.get('readTimeout')
if m.get('connectTimeout') is not None:
self.connect_timeout = m.get('connectTimeout')
if m.get('httpProxy') is not None:
self.http_proxy = m.get('httpProxy')
if m.get('httpsProxy') is not None:
self.https_proxy = m.get('httpsProxy')
if m.get('noProxy') is not None:
self.no_proxy = m.get('noProxy')
if m.get('maxIdleConns') is not None:
self.max_idle_conns = m.get('maxIdleConns')
if m.get('localAddr') is not None:
self.local_addr = m.get('localAddr')
if m.get('socks5Proxy') is not None:
self.socks_5proxy = m.get('socks5Proxy')
if m.get('socks5NetWork') is not None:
self.socks_5net_work = m.get('socks5NetWork')
if m.get('keepAlive') is not None:
self.keep_alive = m.get('keepAlive')
if m.get('extendsParameters') is not None:
temp_model = ExtendsParameters()
self.extends_parameters = temp_model.from_map(m['extendsParameters'])
return self