Source code for data_collections_api.cli.data_collections_main

"""CLI for PSDI data-collections-api project."""

from __future__ import annotations

import argparse
from pathlib import Path

from data_collections_api import __version__
from data_collections_api.cli.record_upload import get_arg_parser as get_upload_parser
from data_collections_api.cli.record_upload import main as upload_main
from data_collections_api.metadata import dump_example, validate_cli
from data_collections_api.schemas import SCHEMAS


[docs] def get_arg_parser() -> argparse.ArgumentParser: """ Build argument parser for PSDI data-collection-api. Returns ------- ArgumentParser Configured parser for CLI. """ arg_parser = argparse.ArgumentParser( prog="data_collections", description="Single-utility API for data handling with remote depositories.", ) arg_parser.add_argument( "-V", "--version", action="version", version=f"%(prog)s v{__version__}", ) arg_parser.set_defaults(func=lambda _: arg_parser.print_help()) subparser = arg_parser.add_subparsers() # Validate sp = subparser.add_parser( "validate", help="Validate metadata", description="Validate a metadata file or string.", ) sp.add_argument("file", help="File to validate", type=Path) sp.add_argument( "-f", "--format", choices=["json", "yaml"], help="Parse FILE as this type (default: determine from suffix).", default=None, ) sp.add_argument( "-S", "--schema", choices=SCHEMAS.keys(), help="Validate against given schema (default: default).", default="default", ) sp.set_defaults(func=validate_cli) # Dump sp = subparser.add_parser( "template", help="Dump a template file.", description="Dump a file template to file.", aliases=["dump"], ) sp.add_argument("file", help="File to write", type=Path) sp.add_argument( "-f", "--format", choices=("json", "yaml"), help="Dump FILE as this type (default: determine from suffix).", default=None, ) sp.set_defaults(func=dump_example) # Upload sp = subparser.add_parser( "upload", help="Upload a dataset to an invenio repository.", description="Tool for uploading dataset to invenio repository.", ) sp = get_upload_parser(sp) sp.set_defaults(func=upload_main) return arg_parser
[docs] def main(): """Run main entry-point for CLI.""" ap = get_arg_parser() args = ap.parse_args() args.func(args)