Files
bonobo/bonobo/commands/version.py
2018-08-11 16:15:26 +02:00

53 lines
1.6 KiB
Python

from mondrian import humanizer
from bonobo.commands import BaseCommand
def get_versions(*, all=False, quiet=None):
import bonobo
from bonobo.util.pkgs import bonobo_packages
yield _format_version(bonobo, quiet=quiet)
if all:
for name in sorted(bonobo_packages):
if name != "bonobo":
try:
mod = __import__(name.replace("-", "_"))
try:
yield _format_version(mod, name=name, quiet=quiet)
except Exception as exc:
yield "{} ({})".format(name, exc)
except ImportError as exc:
yield "{} is not importable ({}).".format(name, exc)
class VersionCommand(BaseCommand):
@humanizer.humanize()
def handle(self, *, all=False, quiet=False):
for line in get_versions(all=all, quiet=quiet):
print(line)
def add_arguments(self, parser):
parser.add_argument("--all", "-a", action="store_true")
parser.add_argument("--quiet", "-q", action="count")
def _format_version(mod, *, name=None, quiet=False):
from bonobo.util.pkgs import bonobo_packages
args = {
"name": name or mod.__name__,
"version": mod.__version__,
"location": bonobo_packages[name or mod.__name__].location,
}
if not quiet:
return "{name} v.{version} (in {location})".format(**args)
if quiet < 2:
return "{name} {version}".format(**args)
if quiet < 3:
return "{version}".format(**args)
raise RuntimeError("Hard to be so quiet...")