From c38463c9a9ebede9dd46934aad0e622bc1da061f Mon Sep 17 00:00:00 2001 From: Harry Date: Mon, 19 Jan 2026 12:52:49 +0800 Subject: [PATCH] refactor: reorganize asset-related classes into entities module and remove unused skill and asset files --- api/core/app_assets/__init__.py | 11 ++++--- api/core/app_assets/entities/__init__.py | 24 +++++++++++++++ api/core/app_assets/{ => entities}/assets.py | 0 api/core/app_assets/{ => entities}/skill.py | 0 api/core/app_assets/packager/base.py | 2 +- api/core/app_assets/packager/zip_packager.py | 2 +- api/core/app_assets/parser/asset_parser.py | 2 +- api/core/app_assets/parser/base.py | 2 +- api/core/app_assets/parser/skill_parser.py | 4 +-- api/core/skill/entities/tool_manifest.py | 2 +- api/core/skill/skill_manager.py | 2 +- api/services/app_asset_service.py | 32 +------------------- 12 files changed, 39 insertions(+), 44 deletions(-) create mode 100644 api/core/app_assets/entities/__init__.py rename api/core/app_assets/{ => entities}/assets.py (100%) rename api/core/app_assets/{ => entities}/skill.py (100%) diff --git a/api/core/app_assets/__init__.py b/api/core/app_assets/__init__.py index 141489d5bd..ce8c7325dc 100644 --- a/api/core/app_assets/__init__.py +++ b/api/core/app_assets/__init__.py @@ -1,8 +1,6 @@ -from .assets import AssetItem, FileAsset -from .packager import AssetPackager, ZipPackager -from .parser import AssetItemParser, AssetParser, FileAssetParser, SkillAssetParser -from .paths import AssetPaths -from .skill import ( +from .entities import ( + AssetItem, + FileAsset, FileReference, SkillAsset, SkillMetadata, @@ -12,6 +10,9 @@ from .skill import ( ToolReference, ToolType, ) +from .packager import AssetPackager, ZipPackager +from .parser import AssetItemParser, AssetParser, FileAssetParser, SkillAssetParser +from .paths import AssetPaths __all__ = [ "AssetItem", diff --git a/api/core/app_assets/entities/__init__.py b/api/core/app_assets/entities/__init__.py new file mode 100644 index 0000000000..3bb726fd03 --- /dev/null +++ b/api/core/app_assets/entities/__init__.py @@ -0,0 +1,24 @@ +from .assets import AssetItem, FileAsset +from .skill import ( + FileReference, + SkillAsset, + SkillMetadata, + ToolConfiguration, + ToolDefinition, + ToolFieldConfig, + ToolReference, + ToolType, +) + +__all__ = [ + "AssetItem", + "FileAsset", + "FileReference", + "SkillAsset", + "SkillMetadata", + "ToolConfiguration", + "ToolDefinition", + "ToolFieldConfig", + "ToolReference", + "ToolType", +] diff --git a/api/core/app_assets/assets.py b/api/core/app_assets/entities/assets.py similarity index 100% rename from api/core/app_assets/assets.py rename to api/core/app_assets/entities/assets.py diff --git a/api/core/app_assets/skill.py b/api/core/app_assets/entities/skill.py similarity index 100% rename from api/core/app_assets/skill.py rename to api/core/app_assets/entities/skill.py diff --git a/api/core/app_assets/packager/base.py b/api/core/app_assets/packager/base.py index 404a24c1cb..3094a45c76 100644 --- a/api/core/app_assets/packager/base.py +++ b/api/core/app_assets/packager/base.py @@ -1,6 +1,6 @@ from abc import ABC, abstractmethod -from core.app_assets.assets import AssetItem +from core.app_assets.entities import AssetItem class AssetPackager(ABC): diff --git a/api/core/app_assets/packager/zip_packager.py b/api/core/app_assets/packager/zip_packager.py index f776b58da6..5aeb95d53a 100644 --- a/api/core/app_assets/packager/zip_packager.py +++ b/api/core/app_assets/packager/zip_packager.py @@ -2,7 +2,7 @@ import io import zipfile from typing import TYPE_CHECKING -from core.app_assets.assets import AssetItem +from core.app_assets.entities import AssetItem from .base import AssetPackager diff --git a/api/core/app_assets/parser/asset_parser.py b/api/core/app_assets/parser/asset_parser.py index a8867e374e..fc14ce5dfd 100644 --- a/api/core/app_assets/parser/asset_parser.py +++ b/api/core/app_assets/parser/asset_parser.py @@ -1,7 +1,7 @@ from typing import TYPE_CHECKING from core.app.entities.app_asset_entities import AppAssetFileTree -from core.app_assets.assets import AssetItem +from core.app_assets.entities import AssetItem from core.app_assets.paths import AssetPaths from .base import AssetItemParser, FileAssetParser diff --git a/api/core/app_assets/parser/base.py b/api/core/app_assets/parser/base.py index ad0bac0dce..4ced242868 100644 --- a/api/core/app_assets/parser/base.py +++ b/api/core/app_assets/parser/base.py @@ -1,6 +1,6 @@ from abc import ABC, abstractmethod -from core.app_assets.assets import AssetItem, FileAsset +from core.app_assets.entities import AssetItem, FileAsset class AssetItemParser(ABC): diff --git a/api/core/app_assets/parser/skill_parser.py b/api/core/app_assets/parser/skill_parser.py index aad7a53b4f..9fe783c213 100644 --- a/api/core/app_assets/parser/skill_parser.py +++ b/api/core/app_assets/parser/skill_parser.py @@ -2,13 +2,13 @@ import json import re from typing import TYPE_CHECKING, Any -from core.app_assets.paths import AssetPaths -from core.app_assets.skill import ( +from core.app_assets.entities import ( FileReference, SkillAsset, SkillMetadata, ToolReference, ) +from core.app_assets.paths import AssetPaths from .base import AssetItemParser diff --git a/api/core/skill/entities/tool_manifest.py b/api/core/skill/entities/tool_manifest.py index dfcafaa6b1..0d819ce93b 100644 --- a/api/core/skill/entities/tool_manifest.py +++ b/api/core/skill/entities/tool_manifest.py @@ -2,7 +2,7 @@ from typing import Any from pydantic import BaseModel, ConfigDict, Field -from core.app_assets.skill import ToolType +from core.app_assets.entities import ToolType class ToolManifestEntry(BaseModel): diff --git a/api/core/skill/skill_manager.py b/api/core/skill/skill_manager.py index d281108f02..487a37acb7 100644 --- a/api/core/skill/skill_manager.py +++ b/api/core/skill/skill_manager.py @@ -1,5 +1,5 @@ +from core.app_assets.entities import SkillAsset from core.app_assets.paths import AssetPaths -from core.app_assets.skill import SkillAsset from extensions.ext_storage import storage from .entities import ToolManifest, ToolManifestEntry diff --git a/api/services/app_asset_service.py b/api/services/app_asset_service.py index b33188ee6d..3f012ca34e 100644 --- a/api/services/app_asset_service.py +++ b/api/services/app_asset_service.py @@ -1,7 +1,5 @@ import hashlib -import io import logging -import zipfile from uuid import uuid4 from sqlalchemy.orm import Session @@ -14,11 +12,11 @@ from core.app.entities.app_asset_entities import ( TreeParentNotFoundError, TreePathConflictError, ) +from core.app_assets.entities import SkillAsset from core.app_assets.packager.zip_packager import ZipPackager from core.app_assets.parser.asset_parser import AssetParser from core.app_assets.parser.skill_parser import SkillAssetParser from core.app_assets.paths import AssetPaths -from core.app_assets.skill import SkillAsset from core.skill.skill_manager import SkillManager from extensions.ext_database import db from extensions.ext_storage import storage @@ -315,34 +313,6 @@ class AppAssetService: return published - @staticmethod - def get_published_file_content( - app_model: App, - assets_id: str, - file_path: str, - ) -> bytes: - with Session(db.engine) as session: - published = ( - session.query(AppAssets) - .filter( - AppAssets.tenant_id == app_model.tenant_id, - AppAssets.app_id == app_model.id, - AppAssets.id == assets_id, - ) - .first() - ) - if not published or published.version == AppAssets.VERSION_DRAFT: - raise AppAssetNodeNotFoundError(f"Published version {assets_id} not found") - - zip_key = AssetPaths.published_zip(app_model.tenant_id, app_model.id, assets_id) - zip_data = storage.load_once(zip_key) - - archive_path = file_path.lstrip("/") - with zipfile.ZipFile(io.BytesIO(zip_data), "r") as zf: - if archive_path not in zf.namelist(): - raise AppAssetNodeNotFoundError(f"File {file_path} not found in published version") - return zf.read(archive_path) - @staticmethod def get_file_download_url( app_model: App,