feat(core): AWEL flow 2.0 backend code (#1879)

Co-authored-by: yhjun1026 <460342015@qq.com>
This commit is contained in:
Fangyin Cheng
2024-08-23 14:57:54 +08:00
committed by GitHub
parent 3a32344380
commit 9502251c08
67 changed files with 8289 additions and 190 deletions

View File

@@ -328,14 +328,19 @@ def _load_package_from_path(path: str):
return parsed_packages
def _load_flow_package_from_path(name: str, path: str = INSTALL_DIR) -> FlowPackage:
def _load_flow_package_from_path(
name: str, path: str = INSTALL_DIR, filter_by_name: bool = True
) -> FlowPackage:
raw_packages = _load_installed_package(path)
new_name = name.replace("_", "-")
packages = [p for p in raw_packages if p.package == name or p.name == name]
if not packages:
packages = [
p for p in raw_packages if p.package == new_name or p.name == new_name
]
if filter_by_name:
packages = [p for p in raw_packages if p.package == name or p.name == name]
if not packages:
packages = [
p for p in raw_packages if p.package == new_name or p.name == new_name
]
else:
packages = raw_packages
if not packages:
raise ValueError(f"Can't find the package {name} or {new_name}")
flow_package = _parse_package_metadata(packages[0])
@@ -344,6 +349,35 @@ def _load_flow_package_from_path(name: str, path: str = INSTALL_DIR) -> FlowPack
return cast(FlowPackage, flow_package)
def _load_flow_package_from_zip_path(zip_path: str) -> FlowPanel:
import tempfile
import zipfile
with tempfile.TemporaryDirectory() as temp_dir:
with zipfile.ZipFile(zip_path, "r") as zip_ref:
zip_ref.extractall(temp_dir)
package_names = os.listdir(temp_dir)
if not package_names:
raise ValueError("No package found in the zip file")
if len(package_names) > 1:
raise ValueError("Only support one package in the zip file")
package_name = package_names[0]
with open(
Path(temp_dir) / package_name / INSTALL_METADATA_FILE, mode="w+"
) as f:
# Write the metadata
import tomlkit
install_metadata = {
"name": package_name,
"repo": "local/dbgpts",
}
tomlkit.dump(install_metadata, f)
package = _load_flow_package_from_path("", path=temp_dir, filter_by_name=False)
return _flow_package_to_flow_panel(package)
def _flow_package_to_flow_panel(package: FlowPackage) -> FlowPanel:
dict_value = {
"name": package.name,
@@ -353,6 +387,7 @@ def _flow_package_to_flow_panel(package: FlowPackage) -> FlowPanel:
"description": package.description,
"source": package.repo,
"define_type": "json",
"authors": package.authors,
}
if isinstance(package, FlowJsonPackage):
dict_value["flow_data"] = package.read_definition_json()