78 lines
3.9 KiB
Python
78 lines
3.9 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
Data Source Model - 数据源模型
|
||
用于管理系统数据源配置,支持 API、SQL、静态数据等多种类型
|
||
"""
|
||
from sqlalchemy import Column, String, Text, Boolean, Integer, JSON
|
||
|
||
from app.base_model import BaseModel
|
||
|
||
|
||
class DataSource(BaseModel):
|
||
"""
|
||
数据源模型
|
||
|
||
支持三种数据源类型:
|
||
1. API - 调用外部或内部 API 接口
|
||
2. SQL - 执行 SQL 查询(只读)
|
||
3. Static - 静态数据
|
||
"""
|
||
__tablename__ = "core_data_source"
|
||
|
||
# 所属应用(逻辑外键关联 core_application)
|
||
application_id = Column(String(21), nullable=True, index=True, comment="所属应用ID")
|
||
|
||
# 基本信息
|
||
name = Column(String(100), nullable=False, comment="数据源名称")
|
||
code = Column(String(50), unique=True, index=True, nullable=False, comment="数据源编码(唯一标识)")
|
||
source_type = Column(String(20), default='static', comment="数据源类型: api/sql/static")
|
||
description = Column(Text, default='', comment="描述说明")
|
||
status = Column(Boolean, default=True, comment="是否启用")
|
||
|
||
# ===== API 配置 =====
|
||
api_url = Column(String(500), default='', comment="API地址,支持 {param} 占位符")
|
||
api_method = Column(String(10), default='GET', comment="请求方法: GET/POST/PUT/DELETE/PATCH")
|
||
api_headers = Column(JSON, default=dict, comment="请求头配置")
|
||
api_query_params = Column(JSON, default=list, comment="Query参数列表 [{key, value, description, enabled}]")
|
||
api_body_type = Column(String(20), default='none', comment="请求体类型: none/json/form-data/x-www-form-urlencoded/raw")
|
||
api_body = Column(JSON, default=dict, comment="请求体模板")
|
||
api_content_type = Column(String(50), default='', comment="Content-Type,raw模式时使用")
|
||
api_timeout = Column(Integer, default=30, comment="请求超时时间(秒)")
|
||
api_data_path = Column(String(100), default='', comment="响应数据路径,如 data.list")
|
||
|
||
# ===== API 认证配置 =====
|
||
api_auth_type = Column(String(20), default='none', comment="认证类型: none/bearer_token/basic_auth/api_key")
|
||
api_auth_config = Column(JSON, default=dict, comment="认证配置 {token, username, password, key_name, key_value, key_position}")
|
||
|
||
# ===== API 高级配置 =====
|
||
api_retry_count = Column(Integer, default=0, comment="重试次数(0表示不重试)")
|
||
api_retry_interval = Column(Integer, default=1, comment="重试间隔(秒)")
|
||
api_success_condition = Column(JSON, default=dict, comment="成功条件 {status_codes, field_path, field_value}")
|
||
api_proxy = Column(String(200), default='', comment="代理地址")
|
||
api_follow_redirects = Column(Boolean, default=True, comment="是否跟随重定向")
|
||
api_verify_ssl = Column(Boolean, default=True, comment="是否验证SSL证书")
|
||
|
||
# ===== SQL 配置 =====
|
||
sql_content = Column(Text, default='', comment="SQL语句,使用 :param 作为参数占位符")
|
||
db_connection = Column(String(50), default='default', comment="数据库连接名称")
|
||
|
||
# ===== 静态数据 =====
|
||
static_data = Column(JSON, default=list, comment="静态数据(JSON 数组)")
|
||
|
||
# ===== 参数定义 =====
|
||
params = Column(JSON, default=list, comment="参数定义列表")
|
||
|
||
# ===== 结果处理 =====
|
||
result_type = Column(String(20), default='list', comment="结果类型: list/tree/object/value/chart-*")
|
||
tree_config = Column(JSON, default=dict, comment="树形转换配置")
|
||
field_mapping = Column(JSON, default=dict, comment="字段映射配置")
|
||
chart_config = Column(JSON, default=dict, comment="图表配置")
|
||
|
||
# ===== 缓存配置 =====
|
||
cache_enabled = Column(Boolean, default=False, comment="是否启用缓存")
|
||
cache_ttl = Column(Integer, default=300, comment="缓存时间(秒)")
|
||
|
||
def __repr__(self):
|
||
return f"<DataSource {self.name} ({self.code})>"
|