Improve install/uninstall commands

This commit is contained in:
Ivan Kravets
2014-11-24 22:24:19 +02:00
parent 102175215c
commit dec78d29e8
3 changed files with 16 additions and 22 deletions

View File

@ -79,15 +79,12 @@ def lib_search(query, **filters):
@cli.command("install", short_help="Install library") @cli.command("install", short_help="Install library")
@click.argument("ids", type=click.INT, nargs=-1, metavar="[LIBRARY_ID]") @click.argument("libid", type=click.INT, nargs=-1, metavar="[LIBRARY_ID]")
@click.option("-v", "--version") @click.option("-v", "--version")
def lib_install_cli(ids, version): @click.pass_context
lib_install(ids, version) def lib_install(ctx, libid, version):
def lib_install(ids, version=None):
lm = LibraryManager(get_lib_dir()) lm = LibraryManager(get_lib_dir())
for id_ in ids: for id_ in libid:
click.echo( click.echo(
"Installing library [ %s ]:" % click.style(str(id_), fg="green")) "Installing library [ %s ]:" % click.style(str(id_), fg="green"))
try: try:
@ -106,7 +103,7 @@ def lib_install(ids, version=None):
_dependencies = [_dependencies] _dependencies = [_dependencies]
for item in _dependencies: for item in _dependencies:
try: try:
lib_install_dependency(item) lib_install_dependency(ctx, item)
except AssertionError: except AssertionError:
raise LibInstallDependencyError(str(item)) raise LibInstallDependencyError(str(item))
@ -114,7 +111,7 @@ def lib_install(ids, version=None):
click.secho("Already installed", fg="yellow") click.secho("Already installed", fg="yellow")
def lib_install_dependency(data): def lib_install_dependency(ctx, data):
assert isinstance(data, dict) assert isinstance(data, dict)
query = [] query = []
for key in data.keys(): for key in data.keys():
@ -129,18 +126,14 @@ def lib_install_dependency(data):
result = get_api_result("/lib/search", dict(query=" ".join(query))) result = get_api_result("/lib/search", dict(query=" ".join(query)))
assert result['total'] == 1 assert result['total'] == 1
lib_install([result['items'][0]['id']]) ctx.invoke(lib_install, libid=[result['items'][0]['id']])
@cli.command("uninstall", short_help="Uninstall libraries") @cli.command("uninstall", short_help="Uninstall libraries")
@click.argument("ids", type=click.INT, nargs=-1) @click.argument("libid", type=click.INT, nargs=-1)
def lib_uninstall_cli(ids): def lib_uninstall(libid):
lib_uninstall(ids)
def lib_uninstall(ids):
lm = LibraryManager(get_lib_dir()) lm = LibraryManager(get_lib_dir())
for id_ in ids: for id_ in libid:
info = lm.get_info(id_) info = lm.get_info(id_)
if lm.uninstall(id_): if lm.uninstall(id_):
click.secho("The library #%s '%s' has been successfully " click.secho("The library #%s '%s' has been successfully "
@ -195,7 +188,8 @@ def lib_show(libid):
@cli.command("update", short_help="Update installed libraries") @cli.command("update", short_help="Update installed libraries")
def lib_update(): @click.pass_context
def lib_update(ctx):
lm = LibraryManager(get_lib_dir()) lm = LibraryManager(get_lib_dir())
lib_ids = [str(item['id']) for item in lm.get_installed().values()] lib_ids = [str(item['id']) for item in lm.get_installed().values()]
@ -226,8 +220,8 @@ def lib_update():
else: else:
click.echo("[%s]" % (click.style("Out-of-date", fg="red"))) click.echo("[%s]" % (click.style("Out-of-date", fg="red")))
lib_uninstall([int(id_)]) ctx.invoke(lib_uninstall, libid=[int(id_)])
lib_install([int(id_)]) ctx.invoke(lib_install, libid=[int(id_)])
@cli.command("register", short_help="Register new library") @cli.command("register", short_help="Register new library")

View File

@ -162,7 +162,7 @@ class BasePlatform(object):
pm = PackageManager() pm = PackageManager()
for name in self.get_packages().keys(): for name in self.get_packages().keys():
if not pm.is_installed(name): if not pm.is_installed(name) or name in deppkgs:
continue continue
pm.uninstall(name) pm.uninstall(name)

View File

@ -41,7 +41,7 @@ class AppState(object):
def __exit__(self, type_, value, traceback): def __exit__(self, type_, value, traceback):
with open(self.path, "w") as fp: with open(self.path, "w") as fp:
json.dump(self._state, fp) json.dump(self._state, fp, indent=4)
def get_systype(): def get_systype():