53 lines
1.6 KiB
Python
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...")
|