Skip to content

Commit

Permalink
✨ feat: 添加uninstall, list 命令
Browse files Browse the repository at this point in the history
Signed-off-by: xqyjlj <xqyjlj@126.com>
  • Loading branch information
xqyjlj committed Jan 18, 2025
1 parent c7cfe05 commit 28fa6a0
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 14 deletions.
19 changes: 13 additions & 6 deletions common/package.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import json
import os
import shutil
from pathlib import Path
from typing import Callable

import jsonschema
Expand Down Expand Up @@ -175,7 +176,10 @@ def versions(self, kind: str, name: str) -> list[str]:
return list(self.__data.get(kind, {}).get(name, {}).keys())

def path(self, kind: str, name: str, version: str) -> str:
return self.__data.get(kind, {}).get(name, {}).get(version, "")
path = Path(self.__data.get(kind, {}).get(name, {}).get(version, ""))
if path.is_absolute():
return str(path)
return str((SETTINGS.EXE_FOLDER / path).resolve())


class Package(QObject):
Expand Down Expand Up @@ -343,7 +347,7 @@ def install(self, path: str, callback: Callable[[str, float], None]) -> bool:
self.__index.origin.setdefault(kind, {}).setdefault(name, {})[version] = os.path.relpath(folder,
SETTINGS.EXE_FOLDER)
self.save()
self.installed.emit(kind, name, version, folder)
self.installed.emit(kind, name, version, self.__index.path(kind, name, version))

return True

Expand All @@ -355,7 +359,7 @@ def uninstall(self, kind: str, name: str, version: str) -> bool:
elif os.path.isfile(path):
os.remove(path)
else:
logger.error(f"uninstall failed {kind}@{name}-{version}")
logger.error(f"uninstall failed {kind}@{name}:{version}")
return False
# clear index tree
self.__index.origin[kind][name].pop(version)
Expand All @@ -364,7 +368,7 @@ def uninstall(self, kind: str, name: str, version: str) -> bool:
if len(self.__index.origin[kind]) == 0:
self.__index.origin.pop(kind)
self.save()
self.installed.emit(kind, name, version, path)
self.uninstalled.emit(kind, name, version, path)
return True


Expand Down Expand Up @@ -415,11 +419,14 @@ def __init__(self, progress: bool, verbose: bool, parent=None):
def install(self, path: str) -> bool:
return PACKAGE.install(path, self.__package_install_callback)

def uninstall(self, kind: str, name: str, version: str) -> bool:
return PACKAGE.uninstall(kind, name, version)

def __on_x_installed(self, kind: str, name: str, version: str, path: str):
print(f"successfully installed the package ‘{kind}@{name}-{version}’ to: {path!r}")
print(f"successfully installed the package ‘{kind}@{name}:{version}’ to: {path!r}")

def __on_x_uninstalled(self, kind: str, name: str, version: str, path: str):
print(f"successfully uninstalled the package ‘{kind}@{name}-{version}’ from: {path!r}")
print(f"successfully uninstalled the package ‘{kind}@{name}:{version}’ from: {path!r}")

def __package_install_callback(self, file: str, progress: float):
if self.progress:
Expand Down
52 changes: 44 additions & 8 deletions csp.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@

sys.stdout = stdout

from common import SETTINGS, PROJECT, CoderCmd, PackageCmd
from common import SETTINGS, PROJECT, CoderCmd, PackageCmd, PACKAGE
from window import MainWindow, StartupWindow, NewProjectWindow


Expand Down Expand Up @@ -131,7 +131,7 @@ def handleStartup(args: argparse.Namespace, parser: argparse.ArgumentParser, app

# noinspection PyUnusedLocal
def handleMain(args: argparse.Namespace, parser: argparse.ArgumentParser, app: QApplication):
file = args.file
file: str = args.file
__setProject(file)
__initQtEnv(app)
window = MainWindow()
Expand All @@ -142,9 +142,9 @@ def handleMain(args: argparse.Namespace, parser: argparse.ArgumentParser, app: Q

# noinspection PyUnusedLocal
def handleGen(args: argparse.Namespace, parser: argparse.ArgumentParser, app: QApplication):
file = args.file
progress = args.progress
output = args.output
file: str = args.file
progress: bool = args.progress
output: str = args.output
__setProject(file)

if not PROJECT.isGenerateSettingValid():
Expand All @@ -157,9 +157,9 @@ def handleGen(args: argparse.Namespace, parser: argparse.ArgumentParser, app: QA

# noinspection PyUnusedLocal
def handleInstall(args: argparse.Namespace, parser: argparse.ArgumentParser, app: QApplication):
path = args.path
progress = args.progress
verbose = args.verbose
path: str = args.path
progress: bool = args.progress
verbose: bool = args.verbose

if not os.path.exists(path):
print(f'The path {path!r} is not exist.')
Expand All @@ -171,6 +171,33 @@ def handleInstall(args: argparse.Namespace, parser: argparse.ArgumentParser, app
sys.exit(1)


# noinspection PyUnusedLocal
def handleUninstall(args: argparse.Namespace, parser: argparse.ArgumentParser, app: QApplication):
kind: str = args.type
name: str = args.name
version: str = args.version

path = PACKAGE.index().path(kind, name, version)
if not os.path.exists(path):
print(f"uninstall failed {kind}@{name}:{version}")
sys.exit(1)

cmd = PackageCmd(False, False)
if not cmd.uninstall(kind, name, version):
print(f'uninstall failed. Please check it.')
sys.exit(1)


# noinspection PyUnusedLocal
def handleList(args: argparse.Namespace, parser: argparse.ArgumentParser, app: QApplication):
for kind, package in PACKAGE.index().origin.items():
print(f'{kind}:')
for name, info in package.items():
print(f' {name}:')
for version, path in info.items():
print(f' {version}: {PACKAGE.index().path(kind, name, version)}')


def createParser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(description='a fully open source chip configuration software system',
formatter_class=argparse.RawDescriptionHelpFormatter)
Expand All @@ -192,6 +219,15 @@ def createParser() -> argparse.ArgumentParser:
install.add_argument('--verbose', required=False, help='enable verbose information for users.', action='store_true')
install.set_defaults(func=handleInstall)

uninstall = subparsers.add_parser('uninstall', help='uninstall csp package')
uninstall.add_argument('-t', '--type', required=True, help='csp package type')
uninstall.add_argument('-n', '--name', required=True, help='csp package name')
uninstall.add_argument('-v', '--version', required=True, help='csp package version')
uninstall.set_defaults(func=handleUninstall)

list_ = subparsers.add_parser('list', help='list csp package')
list_.set_defaults(func=handleList)

parser.add_argument('-f', '--file', required=False, help='csp project file')
parser.add_argument('-v', '--version', required=False, help='print the version number', action='store_true')

Expand Down

0 comments on commit 28fa6a0

Please sign in to comment.