diff --git a/librestash/cmd.py b/librestash/cmd.py index 80e8a1532336053e95a82489a570537bce21e78e..8da4645d954fa0a493ab744f0a6c1d32d1715b93 100644 --- a/librestash/cmd.py +++ b/librestash/cmd.py @@ -5,9 +5,9 @@ import logging from .lib.adaptors.gpx import GpxImporter from .lib.exporters.caches import CacheExporter -from .lib.exporters.formatters import caches_to_csv, caches_to_html, caches_to_json +from .lib.exporters import formatters as exporters_formatters from .lib.stats import all_stats -from .lib.stats.formatters import stats_to_html, stats_to_json +from .lib.stats import formatters as stats_formatters from .lib.config import get_default_config_path, get_config from .lib.model import get_db @@ -49,12 +49,11 @@ def export_caches(): exporter = CacheExporter(config, database) data = exporter.export(found_by=args.found_by) - if args.format == 'json': - print(caches_to_json(data)) - elif args.format == 'csv': - print(caches_to_csv(data)) - elif args.format == 'html': - print(caches_to_html(data, title=args.title)) + formatter = getattr(exporters_formatters, 'caches_to_%s' % args.format, None) + if formatter: + print(formatter(data, title=args.title)) + else: + raise RuntimeError('Formatter %s not found.' % args.format) def stats(): """ Command for all kinds of statistics """ @@ -71,7 +70,8 @@ def stats(): data = all_stats(database, geocacher_name=args.geocacher) - if args.format == 'json': - print(stats_to_json(data)) - elif args.format == 'html': - print(stats_to_html(data)) + formatter = getattr(stats_formatters, 'stats_to_%s' % args.format, None) + if formatter: + print(formatter(data)) + else: + raise RuntimeError('Formatter %s not found.' % args.format) diff --git a/librestash/lib/exporters/formatters.py b/librestash/lib/exporters/formatters.py index 88a74dbf5c3cc695d6a738a3eb9e8220c55cdf07..9aa991dcaf07d07585db2f9b85ce3cd5bdb2bed8 100644 --- a/librestash/lib/exporters/formatters.py +++ b/librestash/lib/exporters/formatters.py @@ -10,10 +10,10 @@ except ImportError: from ..util import flatten_dict, json_serialise -def caches_to_json(data): +def caches_to_json(data, **kwargs): return json.dumps(data, default=json_serialise) -def caches_to_csv(data): +def caches_to_csv(data, **kwargs): with io.StringIO() as csv_file: # Get top-level field names fieldnames = flatten_dict(data[0]).keys() @@ -26,7 +26,7 @@ def caches_to_csv(data): return csv_file.getvalue() -def caches_to_html(data, main_template='simple', title=None): +def caches_to_html(data, main_template='simple', title=None, **kwargs): if not _HAVE_JINJA: return '<html><body>Jinja2 could not be imported.</body></html>' diff --git a/librestash/lib/stats/formatters.py b/librestash/lib/stats/formatters.py index b716eccf14b085cef25aff808a51031b2f6882ed..b4c0d756fbacd3078c224b11cc3926f0c18a78ef 100644 --- a/librestash/lib/stats/formatters.py +++ b/librestash/lib/stats/formatters.py @@ -1,4 +1,5 @@ import json +from pprint import pformat try: import jinja2 @@ -8,6 +9,9 @@ except ImportError: from ..util import json_serialise +def stats_to_pprint(data): + return pformat(data) + def stats_to_json(data): return json.dumps(data, default=json_serialise)