diff --git a/lookup_license/__main__.py b/lookup_license/__main__.py index baf6bb7..4a80cb4 100755 --- a/lookup_license/__main__.py +++ b/lookup_license/__main__.py @@ -20,6 +20,10 @@ def get_parser(): + default_output_format = FormatterFactory.default_format() + + output_formats = ', '.join([f'"{x}"' for x in FormatterFactory.formats()]) + parser = argparse.ArgumentParser( description=lookup_license.config.DESCRIPTION, epilog=lookup_license.config.EPILOG, @@ -38,7 +42,8 @@ def get_parser(): parser.add_argument('-of', '--output-format', type=str, - default='text') + help=f'Format for output. Available format: {output_formats}. Default "{default_output_format}"', + default=default_output_format) parser.add_argument('-f', '--file', action='store_true', diff --git a/lookup_license/format.py b/lookup_license/format.py index 0a5ff4e..5478ca5 100644 --- a/lookup_license/format.py +++ b/lookup_license/format.py @@ -1,21 +1,35 @@ -import json - # SPDX-FileCopyrightText: 2024 Henrik Sandklef # # SPDX-License-Identifier: GPL-3.0-or-later +import json +import yaml + FORMAT_JSON = "json" +FORMAT_YAML = "yaml" FORMAT_TEXT = "text" +DEFAULT_FORMAT = FORMAT_TEXT +FORMATS = [FORMAT_JSON, FORMAT_YAML, FORMAT_TEXT] class FormatterFactory(): @staticmethod def formatter(fmt): + if fmt.lower() == FORMAT_YAML: + return YamlFormatter() if fmt.lower() == FORMAT_JSON: return JsonFormatter() if fmt.lower() == FORMAT_TEXT: return TextFormatter() + @staticmethod + def formats(): + return FORMATS + + @staticmethod + def default_format(): + return DEFAULT_FORMAT + class Formatter: def _ambig_response(self, lic): @@ -53,6 +67,23 @@ def format_cache(self, entries, verbose=False): def format_lookup_urls(self, looked_up_urls, verbose=False): return json.dumps(looked_up_urls, indent=4), None +class YamlFormatter(Formatter): + + def format_license(self, lic, verbose=False): + return yaml.safe_dump(lic), None + + def format_error(self, exception, verbose=False): + return yaml.safe_dump(exception), None + + def format_resources(self, resources, verbose=False): + return yaml.safe_dump(resources, indent=4) + + def format_cache(self, entries, verbose=False): + return yaml.safe_dump(entries), None + + def format_lookup_urls(self, looked_up_urls, verbose=False): + return yaml.safe_dump(looked_up_urls, indent=4), None + class TextFormatter(Formatter): def format_license(self, lic, verbose=False):