Codice sorgente per aziona.core.argparser

# -*- coding: utf-8 -*-
"""Il modulo argparse.py contiene funzioni di utilità per il modulo base argparse"""

import argparse
import shlex

from aziona.core import text
from aziona.core.conf import errors, session, settings


[documenti]class StoreDictParser(argparse.Action): """Struttura argparse.Action che consete ad un'opzione del parser di prendere in input un dizionario Ex. python -m xyz --opt a=1,b=2,c=ciao Attributes: None """ def __call__(self, parser, namespace, values, option_string=None): data = {} for kv in values.split(","): k, v = kv.split("=") data[k] = v setattr(namespace, self.dest, data)
[documenti]class StoreEnvParser(StoreDictParser): """Struttura argparse.Action che consete di convertire una stringa con caratteri speciali, usata per le password Attributes: None """ def __call__(self, parser, namespace, values, option_string=None): super(StoreEnvParser, self).__call__(parser, namespace, values, option_string) settings.setenv_from_dict(overwrite=True, **namespace.env)
[documenti]class StoreSessionLoadParser(argparse.Action): """Struttura argparse.Action che consete di caricare una o più chiavi dalla sessione condivisa Attributes: None """ def __call__(self, parser, namespace, values, option_string=None): for session_name in values: session.load(key=session_name)
[documenti]class StoreActionArgsParser(argparse.Action): """Struttura argparse.Action che consete di creare una lista comandi Attributes: None """ def __call__(self, parser, namespace, values, option_string=None): data = [] for item in values: data += shlex.split(item) setattr(namespace, self.dest, data)
[documenti]class StoreSpecialStrParser(argparse.Action): """Struttura argparse.Action che consete di convertire una stringa con caratteri speciali, usata per le password Attributes: None """ def __call__(self, parser, namespace, values, option_string=None): setattr(namespace, self.dest, text.str_to_sysencoding(values))
[documenti]class StoreVerbosityParser(argparse.Action): """Argparse per settare la verbosity Attributes: None """ def __init__(self, option_strings, dest, nargs=None, **kwargs): if nargs is not None: raise ValueError("nargs not allowed") super(StoreVerbosityParser, self).__init__(option_strings, dest, **kwargs) def __call__(self, parser, namespace, values, option_string=None): settings.setenv("AZIONA_VERBOSITY", values, overwrite=True) setattr(namespace, self.dest, values)
[documenti]class StoreVerbosityPreset2Parser(argparse.Action): """Argparse per settare la verbosity Attributes: None """ def __call__(self, parser, namespace, values, option_string=None): settings.setenv("AZIONA_VERBOSITY", "2", overwrite=True) setattr(namespace, self.dest, values)
[documenti]class StoreVerbosityPreset3Parser(argparse.Action): """Argparse per settare la verbosity Attributes: None """ def __call__(self, parser, namespace, values, option_string=None): settings.setenv("AZIONA_VERBOSITY", "3", overwrite=True) setattr(namespace, self.dest, values)
[documenti]class StoreParserVersionParser(argparse.Action): """Argparse per scegliere la versione del parser Attributes: None """ def __init__(self, option_strings, dest, nargs=None, **kwargs): if nargs is not None: raise ValueError("nargs not allowed") super(StoreParserVersionParser, self).__init__(option_strings, dest, **kwargs) def __call__(self, parser, namespace, values, option_string=None): if values is not None: settings.setenv("PARSER_VERSION_DEFAULT", values) setattr(namespace, self.dest, values)
[documenti]def namespace_from_dict(parser_actions: list, args_dict: dict): """Crea il namespace dell'argparse""" args = {} default_actions = ["help", "env", "env_form", "verbosity"] for action in parser_actions: # esclude le opzioni di default if action.dest in default_actions: continue if action.dest not in args_dict.keys(): if action.required is True: raise Exception("Arg %s required" % action.dest) args[action.dest] = action.default else: if isinstance(action.type, type(args_dict[action.dest])): raise Exception("Arg %s invalid type" % action.dest) args[action.dest] = args_dict[action.dest] return argparse.Namespace(**args)
[documenti]def verbosity_args(parser: object) -> object: if not isinstance(parser, argparse.ArgumentParser): raise errors.ParamTypeError(param="parser", type="argparse.ArgumentParser") parser.add_argument( "-v", action=StoreVerbosityPreset2Parser, type=str, nargs=0, help="Verbosity level", ) parser.add_argument( "-vv", action=StoreVerbosityPreset3Parser, type=str, nargs=0, help="Verbosity level", ) parser.add_argument( "--verbosity", choices=["1", "2", "3"], action=StoreVerbosityParser, default="1", type=str, help="Verbosity level", ) return parser
[documenti]def standard_args(parser: object) -> object: """Aggiunge all'oggetto parser argomenti comuni: - verbosity -> per settare la verobisty - env -> per aggiungere key=value all'environment del programma Args: parser (argparse.ArgumentParser): istanza argparse Returns: argparse.ArgumentParser: parser """ if not isinstance(parser, argparse.ArgumentParser): raise errors.ParamTypeError(param="parser", type="argparse.ArgumentParser") parser = verbosity_args(parser) parser.add_argument( "-e", "--env", action=StoreEnvParser, default={}, help="Consente di aggiungere variabili all'env. Accetta key=value (ex. TEST=123)", ) parser.add_argument( "--session-load", action=StoreSessionLoadParser, nargs="+", default=[], type=str, help="Consente di aggiungere variabili all'env da file contenenti key/value", ) parser.add_argument( "--session-save", default=None, type=str, help="Consente di salvare l'output del modulo nella sessione", ) return parser
[documenti]def action_args(parser): if not isinstance(parser, argparse.ArgumentParser): raise errors.ParamTypeError(param="parser", type="argparse.ArgumentParser") parser.add_argument( "--action-args", action=StoreActionArgsParser, default=[], nargs="+", type=str, help="Aws command options/args", ) return parser
[documenti]def jq_args(parser: object) -> object: if not isinstance(parser, argparse.ArgumentParser): raise errors.ParamTypeError(param="parser", type="argparse.ArgumentParser") parser.add_argument("--xargs", default=False, action="store_true", help="xargs") parser.add_argument( "--jq-query", action=StoreActionArgsParser, default=[], nargs="+", type=str, help="JQ query", ) return parser