|
8 | 8 | from sqlbot_xpack.file_utils import SQLBotFileUtils |
9 | 9 | from sqlmodel import select |
10 | 10 |
|
| 11 | +from apps.datasource.models.datasource import CoreDatasource |
| 12 | +from apps.db.constant import DB |
11 | 13 | from apps.swagger.i18n import PLACEHOLDER_PREFIX |
12 | | -from apps.system.crud.assistant import get_assistant_info |
| 14 | +from apps.system.crud.assistant import AssistantOutDs, AssistantOutDsFactory, get_assistant_info |
13 | 15 | from apps.system.crud.assistant_manage import dynamic_upgrade_cors, save |
14 | 16 | from apps.system.models.system_model import AssistantModel |
15 | 17 | from apps.system.schemas.auth import CacheName, CacheNamespace |
16 | 18 | from apps.system.schemas.system_schema import AssistantBase, AssistantDTO, AssistantUiSchema, AssistantValidator |
17 | 19 | from common.core.config import settings |
18 | | -from common.core.deps import SessionDep, Trans, CurrentUser |
| 20 | +from common.core.deps import CurrentAssistant, SessionDep, Trans, CurrentUser |
19 | 21 | from common.core.security import create_access_token |
20 | 22 | from common.core.sqlbot_cache import clear_cache |
21 | 23 | from common.utils.utils import get_origin_from_referer, origin_match_domain |
@@ -163,6 +165,56 @@ async def ui(session: SessionDep, data: str = Form(), files: List[UploadFile] = |
163 | 165 | async def clear_ui_cache(id: int): |
164 | 166 | pass |
165 | 167 |
|
| 168 | +@router.get("/ds", include_in_schema=False, response_model=list[dict]) |
| 169 | +async def ds(session: SessionDep, current_assistant: CurrentAssistant): |
| 170 | + if current_assistant.type == 0: |
| 171 | + online = current_assistant.online |
| 172 | + configuration = current_assistant.configuration |
| 173 | + config: dict[any] = json.loads(configuration) |
| 174 | + oid: int = int(config['oid']) |
| 175 | + stmt = select(CoreDatasource.id, CoreDatasource.name, CoreDatasource.description, CoreDatasource.type, CoreDatasource.type_name, CoreDatasource.num).where( |
| 176 | + CoreDatasource.oid == oid) |
| 177 | + if not online: |
| 178 | + public_list: list[int] = config.get('public_list') or None |
| 179 | + if public_list: |
| 180 | + stmt = stmt.where(CoreDatasource.id.in_(public_list)) |
| 181 | + else: |
| 182 | + return [] |
| 183 | + db_ds_list = session.exec(stmt) |
| 184 | + return [ |
| 185 | + { |
| 186 | + "id": ds.id, |
| 187 | + "name": ds.name, |
| 188 | + "description": ds.description, |
| 189 | + "type": ds.type, |
| 190 | + "type_name": ds.type_name, |
| 191 | + "num": ds.num, |
| 192 | + } |
| 193 | + for ds in db_ds_list] |
| 194 | + if current_assistant.type == 1: |
| 195 | + out_ds_instance: AssistantOutDs = AssistantOutDsFactory.get_instance(current_assistant) |
| 196 | + return [ |
| 197 | + { |
| 198 | + "id": ds.id, |
| 199 | + "name": ds.name, |
| 200 | + "description": ds.description or ds.comment, |
| 201 | + "type": ds.type, |
| 202 | + "type_name": get_db_type(ds.type), |
| 203 | + "num": len(ds.tables) if ds.tables else 0, |
| 204 | + } |
| 205 | + for ds in out_ds_instance.ds_list |
| 206 | + if get_db_type(ds.type) |
| 207 | + ] |
| 208 | + |
| 209 | + return None |
| 210 | + |
| 211 | +def get_db_type(type): |
| 212 | + try: |
| 213 | + db = DB.get_db(type) |
| 214 | + return db.db_name |
| 215 | + except Exception: |
| 216 | + return None |
| 217 | + |
166 | 218 |
|
167 | 219 | @router.get("", response_model=list[AssistantModel], summary=f"{PLACEHOLDER_PREFIX}assistant_grid_api", description=f"{PLACEHOLDER_PREFIX}assistant_grid_api") |
168 | 220 | async def query(session: SessionDep, current_user: CurrentUser): |
@@ -219,3 +271,4 @@ async def delete(request: Request, session: SessionDep, id: int = Path(descripti |
219 | 271 | session.delete(db_model) |
220 | 272 | session.commit() |
221 | 273 | dynamic_upgrade_cors(request=request, session=session) |
| 274 | + |
0 commit comments