Source code for esgprep.esgmapfile

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
:platform: Unix
:synopsis: Toolbox to prepare ESGF data for publication.

"""

import argparse
import sys
import os
from datetime import datetime
from esgprep import __version__
from esgprep._utils.help import (
    ALL_VERSIONS_HELP,
    BASENAME_HELP,
    CHECKSUM_TYPE_HELP,
    CHECKSUMS_FROM_HELP,
    COLOR_HELP,
    DATASET_ID_HELP,
    DATASET_LIST_HELP,
    DIRECTORY_HELP,
    EPILOG,
    EXCLUDE_FILE_HELP,
    HELP,
    IGNORE_DIR_HELP,
    INCLUDE_FILE_HELP,
    LATEST_SYMLINK_HELP,
    LOG_HELP,
    MAPFILE_HELPS,
    MAPFILE_NAME_HELP,
    MAPFILE_SUBCOMMANDS,
    MAX_PROCESSES_HELP,
    NO_CHECKSUM_HELP,
    NO_CLEANUP_HELP,
    NO_COLOR_HELP,
    OUTDIR_HELP,
    PROGRAM_DESC,
    PROJECT_HELP,
    QUIET_HELP,
    SET_VERSION_HELP,
    SUBCOMMANDS,
    TECH_NOTES_TITLE_HELP,
    TECH_NOTES_URL_HELP,
    VERBOSE_HELP,
    VERSION_HELP,
)
from esgprep._utils.parser import (
    ChecksumsReader,
    CustomArgumentParser,
    DatasetsReader,
    DirectoryChecker,
    MultilineFormatter,
    VersionChecker,
    processes_validator,
    regex_validator,
)
from esgprep.mapfile import run


[docs] def get_args(): """ Returns parsed command-line arguments. """ # Instantiate argument parser. main = CustomArgumentParser( prog="esgmapfile", description=PROGRAM_DESC["mapfile"], formatter_class=MultilineFormatter, add_help=False, epilog=EPILOG, ) main.add_argument("-h", "--help", action="help", help=HELP) main.add_argument( "-v", "--version", action="version", version="%(prog)s ({})".format(__version__), help=VERSION_HELP, ) subparsers = main.add_subparsers(title=SUBCOMMANDS, dest="cmd", metavar="", help="") # Add parent parser with common arguments. parent = argparse.ArgumentParser(add_help=False) parent.add_argument("-h", "--help", action="help", help=HELP) parent.add_argument( "-l", "--log", metavar="CWD", type=str, const="{}/logs".format(os.getcwd()), nargs="?", help=LOG_HELP, ) parent.add_argument( "-d", "--debug", action="store_true", default=False, help=VERBOSE_HELP ) parent.add_argument( "-p", "--project", metavar="NAME", type=str, required=True, help=PROJECT_HELP["mapfile"], ) parent.add_argument( "--mapfile", metavar="{dataset_id}.v{version}.map", type=str, default="{dataset_id}.v{version}.map", help=MAPFILE_NAME_HELP, ) parent.add_argument( "--outdir", metavar="CWD/mapfiles", type=str, default=os.path.join(os.getcwd(), "mapfiles"), help=OUTDIR_HELP, ) group = parent.add_mutually_exclusive_group(required=False) group.add_argument( "--all-versions", action="store_true", default=False, help=ALL_VERSIONS_HELP ) group.add_argument( "--version", metavar=datetime.now().strftime("%Y%m%d"), action=VersionChecker, help=SET_VERSION_HELP["mapfile"], ) group.add_argument( "--latest-symlink", action="store_true", default=False, help=LATEST_SYMLINK_HELP ) parent.add_argument( "--ignore-dir", metavar=r"'^.*/(files|\.\w*).*$'", type=regex_validator, default=r"^.*/(files|\.[\w]*).*$", help=IGNORE_DIR_HELP, ) parent.add_argument( "--include-file", metavar=r"'^.*\.nc$'", type=regex_validator, action="append", default=[r"^.*\.nc$"], help=INCLUDE_FILE_HELP["mapfile"], ) parent.add_argument( "--exclude-file", metavar=r"'^\..*$'", type=regex_validator, action="append", default=[r"^\..*$"], help=EXCLUDE_FILE_HELP, ) parent.add_argument( "--max-processes", metavar="4", type=processes_validator, default=4, help=MAX_PROCESSES_HELP, ) group = parent.add_mutually_exclusive_group(required=False) group.add_argument("--color", action="store_true", help=COLOR_HELP) group.add_argument("--no-color", action="store_true", help=NO_COLOR_HELP) # Add subparser. make = subparsers.add_parser( "make", prog="esgmapfile make", description=MAPFILE_SUBCOMMANDS["make"], formatter_class=MultilineFormatter, help=MAPFILE_HELPS["make"], add_help=False, parents=[parent], ) make.add_argument( "--directory", action=DirectoryChecker, nargs="+", help=DIRECTORY_HELP["mapfile"], ) make.add_argument( "--no-checksum", action="store_true", default=False, help=NO_CHECKSUM_HELP["mapfile"], ) make.add_argument( "--checksum-type", metavar="TYPE", type=str, default="sha256", help=CHECKSUM_TYPE_HELP, ) make.add_argument( "--checksums-from", metavar="CHECKSUM_FILE", type=ChecksumsReader, help=CHECKSUMS_FROM_HELP, ) make.add_argument( "--tech-notes-url", metavar="URL", type=str, help=TECH_NOTES_URL_HELP ) make.add_argument( "--tech-notes-title", metavar="TITLE", type=str, help=TECH_NOTES_TITLE_HELP ) make.add_argument( "--no-cleanup", action="store_true", default=False, help=NO_CLEANUP_HELP ) # Subparser for "esgmapfile show" show = subparsers.add_parser( "show", prog="esgmapfile show", description=MAPFILE_SUBCOMMANDS["show"], formatter_class=MultilineFormatter, help=MAPFILE_HELPS["show"], add_help=False, parents=[parent], ) group = show.add_mutually_exclusive_group(required=True) group.add_argument( "--directory", metavar="PATH", action=DirectoryChecker, nargs="+", help=DIRECTORY_HELP["mapfile"], ) group.add_argument( "--dataset-list", metavar="TXT_FILE", type=DatasetsReader, nargs="?", const=sys.stdin, help=DATASET_LIST_HELP, ) group.add_argument( "--dataset-id", metavar="DATASET_ID", action="append", help=DATASET_ID_HELP ) show.add_argument("--quiet", action="store_true", default=False, help=QUIET_HELP) show.add_argument( "--basename", action="store_true", default=False, help=BASENAME_HELP ) # Return command-line parser & program name. return main, main.parse_args()
[docs] def main(): """ Run main program """ # Get command-line arguments. parser, args = get_args() if not args.cmd: parser.print_help() return # Add program name as argument. setattr(args, "prog", parser.prog) # Run program. run(args)
if __name__ == "__main__": sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) main()