feat(app): Application (agent, workflow) import/export

This commit is contained in:
Timebomb2018
2026-03-10 11:27:28 +08:00
parent beea826377
commit 3237f4cd6e
2 changed files with 8 additions and 8 deletions

View File

@@ -1021,12 +1021,12 @@ async def export_app(
app_id: uuid.UUID,
db: Annotated[Session, Depends(get_db)],
current_user: Annotated[User, Depends(get_current_user)],
release_version: Optional[str] = None
release_id: Optional[uuid.UUID] = None
):
"""导出 agent / multi_agent / workflow 应用配置为 YAML 文件流。
release_version: 指定发布版本号,不传则导出当前草稿配置。
"""
yaml_str, filename = AppDslService(db).export_dsl(app_id, release_version)
yaml_str, filename = AppDslService(db).export_dsl(app_id, release_id)
encoded = quote(filename, safe=".")
yaml_bytes = yaml_str.encode("utf-8")
file_stream = io.BytesIO(yaml_bytes)

View File

@@ -26,7 +26,7 @@ class AppDslService:
# ==================== 导出 ====================
def export_dsl(self, app_id: uuid.UUID, release_version: Optional[str] = None) -> tuple[str, str]:
def export_dsl(self, app_id: uuid.UUID, release_id: Optional[uuid.UUID] = None) -> tuple[str, str]:
"""构建应用 DSL yaml 字符串,返回 (yaml_str, filename)"""
app = self.db.query(App).filter(App.id == app_id, App.is_active.is_(True)).first()
if not app:
@@ -46,19 +46,19 @@ class AppDslService:
"tags": app.tags or [],
}
if release_version is not None:
return self._export_release(app, release_version, meta, app_meta)
if release_id is not None:
return self._export_release(app, release_id, meta, app_meta)
return self._export_draft(app, meta, app_meta)
def _export_release(self, app: App, release_version: str, meta: dict, app_meta: dict) -> tuple[str, str]:
def _export_release(self, app: App, release_id: uuid.UUID, meta: dict, app_meta: dict) -> tuple[str, str]:
release = self.db.query(AppRelease).filter(
AppRelease.app_id == app.id,
AppRelease.id == release_version,
AppRelease.id == release_id,
AppRelease.is_active.is_(True)
).first()
if not release:
raise ResourceNotFoundException("版本", str(release_version))
raise ResourceNotFoundException("版本", str(release_id))
meta["release_version"] = release.version
meta["release_name"] = release.version_name