安装app时同时创建同名的package和module
This commit is contained in:
parent
e4df592b82
commit
149d811164
@ -15,7 +15,7 @@ import json
|
|||||||
import shutil
|
import shutil
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from jingrow.utils.app_installer import install_app, get_installed_apps as get_apps, get_app_directories
|
from jingrow.utils.app_installer import install_app, get_installed_apps as get_apps, get_app_directories, ensure_package_and_module
|
||||||
from jingrow.utils.jingrow_api import get_jingrow_api_headers
|
from jingrow.utils.jingrow_api import get_jingrow_api_headers
|
||||||
from jingrow.utils.auth import get_jingrow_cloud_url, get_jingrow_cloud_api_headers, get_jingrow_cloud_api_url, get_jingrow_api_headers
|
from jingrow.utils.auth import get_jingrow_cloud_url, get_jingrow_cloud_api_headers, get_jingrow_cloud_api_url, get_jingrow_api_headers
|
||||||
from jingrow.config import Config
|
from jingrow.config import Config
|
||||||
@ -148,7 +148,10 @@ async def install_app_from_upload(
|
|||||||
|
|
||||||
# 更新数据库
|
# 更新数据库
|
||||||
await _update_local_installed_apps(apps_list)
|
await _update_local_installed_apps(apps_list)
|
||||||
|
|
||||||
|
# 额外:确保创建 Package 与 Module Def(custom)记录(上传安装)
|
||||||
|
ensure_package_and_module(app_name_result)
|
||||||
|
|
||||||
# 2. 调用 sync_app_files 同步文件到数据库
|
# 2. 调用 sync_app_files 同步文件到数据库
|
||||||
if app_dir:
|
if app_dir:
|
||||||
current = Path(__file__).resolve()
|
current = Path(__file__).resolve()
|
||||||
@ -391,6 +394,9 @@ async def install_local_app(request: Request, app_name: str):
|
|||||||
apps_list.append(new_app)
|
apps_list.append(new_app)
|
||||||
|
|
||||||
if await _update_local_installed_apps(apps_list):
|
if await _update_local_installed_apps(apps_list):
|
||||||
|
# 确保创建 Package 与 Module Def(custom)记录(本地扫描安装)
|
||||||
|
ensure_package_and_module(app_name)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
api_url = f"{Config.jingrow_server_url}/api/action/jingrow.ai.utils.jlocal.sync_app_files"
|
api_url = f"{Config.jingrow_server_url}/api/action/jingrow.ai.utils.jlocal.sync_app_files"
|
||||||
requests.post(
|
requests.post(
|
||||||
@ -599,6 +605,9 @@ async def install_from_git(repo_url: str = Form(...)):
|
|||||||
|
|
||||||
# 同步文件到数据库
|
# 同步文件到数据库
|
||||||
_import_app_package_and_pagetypes(app_name, {'app_name': app_name, 'backend_result': backend_result, 'frontend_result': frontend_result})
|
_import_app_package_and_pagetypes(app_name, {'app_name': app_name, 'backend_result': backend_result, 'frontend_result': frontend_result})
|
||||||
|
|
||||||
|
# 确保创建 Package 与 Module Def(custom)记录
|
||||||
|
ensure_package_and_module(app_name)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Failed to register app: {e}")
|
logger.error(f"Failed to register app: {e}")
|
||||||
|
|
||||||
@ -688,7 +697,10 @@ async def install_from_url(url: str = Form(...)):
|
|||||||
|
|
||||||
# 更新数据库
|
# 更新数据库
|
||||||
await _update_local_installed_apps(apps_list)
|
await _update_local_installed_apps(apps_list)
|
||||||
|
|
||||||
|
# 额外:确保创建 Package 与 Module Def(custom)记录(URL安装)
|
||||||
|
ensure_package_and_module(app_name_result)
|
||||||
|
|
||||||
# 2. 调用 sync_app_files 同步文件到数据库
|
# 2. 调用 sync_app_files 同步文件到数据库
|
||||||
if app_dir:
|
if app_dir:
|
||||||
current = Path(__file__).resolve()
|
current = Path(__file__).resolve()
|
||||||
|
|||||||
@ -17,6 +17,7 @@ import logging
|
|||||||
|
|
||||||
from jingrow.config import Config
|
from jingrow.config import Config
|
||||||
from jingrow.utils.jingrow_api import get_jingrow_api_headers
|
from jingrow.utils.jingrow_api import get_jingrow_api_headers
|
||||||
|
from jingrow.utils.jingrow_api import get_record_id, create_record
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -377,6 +378,13 @@ def install_app(uploaded_file_path: str, app_name: str = None) -> Dict[str, Any]
|
|||||||
|
|
||||||
# 记录安装信息
|
# 记录安装信息
|
||||||
record_installation(app_name, package_info, uploaded_file_path)
|
record_installation(app_name, package_info, uploaded_file_path)
|
||||||
|
|
||||||
|
# 确保创建 Package 与 Module Def(custom)记录
|
||||||
|
try:
|
||||||
|
create_package_and_module(app_name, package_info)
|
||||||
|
except Exception:
|
||||||
|
# 忽略该步骤错误,不影响安装完成
|
||||||
|
pass
|
||||||
|
|
||||||
# 清理临时文件
|
# 清理临时文件
|
||||||
cleanup_temp_dir(temp_dir)
|
cleanup_temp_dir(temp_dir)
|
||||||
@ -444,3 +452,60 @@ def install_package(temp_dir: str, package_info: Dict[str, Any]) -> Dict[str, An
|
|||||||
shutil.copy2(src, dst)
|
shutil.copy2(src, dst)
|
||||||
|
|
||||||
return {'success': True, 'message': '扩展包已安装到 jingrow 应用', 'app_name': app_name}
|
return {'success': True, 'message': '扩展包已安装到 jingrow 应用', 'app_name': app_name}
|
||||||
|
|
||||||
|
|
||||||
|
def _safe_bool(value: Any, default: int = 1) -> int:
|
||||||
|
try:
|
||||||
|
if isinstance(value, bool):
|
||||||
|
return 1 if value else 0
|
||||||
|
if isinstance(value, (int, float)):
|
||||||
|
return 1 if value else 0
|
||||||
|
if isinstance(value, str):
|
||||||
|
return 1 if value.strip().lower() in ("1", "true", "yes") else 0
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return default
|
||||||
|
|
||||||
|
|
||||||
|
def _sanitize_package_name(name: str) -> str:
|
||||||
|
"""将任意app名称规范化为仅包含小写字母/数字/连字符的package_name。"""
|
||||||
|
try:
|
||||||
|
s = str(name or "").lower()
|
||||||
|
s = s.replace(" ", "-").replace("_", "-")
|
||||||
|
import re
|
||||||
|
s = re.sub(r"[^a-z0-9-]", "", s)
|
||||||
|
s = re.sub(r"-+", "-", s).strip("-")
|
||||||
|
return s or "package"
|
||||||
|
except Exception:
|
||||||
|
return "package"
|
||||||
|
|
||||||
|
|
||||||
|
def ensure_package_and_module(app_name: str) -> None:
|
||||||
|
"""
|
||||||
|
创建与 app_name 同名的 Package 记录和 Module Def 记录(custom 类型)。
|
||||||
|
已存在时不会中断安装流程。
|
||||||
|
"""
|
||||||
|
if not app_name:
|
||||||
|
return
|
||||||
|
|
||||||
|
# 创建 Package 记录(先检查是否已存在)
|
||||||
|
safe_pkg_name = _sanitize_package_name(app_name)
|
||||||
|
try:
|
||||||
|
exists = get_record_id("Package", field="name", value=app_name)
|
||||||
|
if not exists.get("success"):
|
||||||
|
create_record("Package", {"name": app_name, "package_name": safe_pkg_name})
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# 创建 Module Def 记录(custom 类型,先检查是否已存在)
|
||||||
|
try:
|
||||||
|
exists = get_record_id("Module Def", field="module_name", value=app_name)
|
||||||
|
if not exists.get("success"):
|
||||||
|
create_record("Module Def", {
|
||||||
|
"module_name": app_name,
|
||||||
|
"custom": 1,
|
||||||
|
"package": app_name,
|
||||||
|
"app_name": "jingrow"
|
||||||
|
})
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user