#!/usr/bin/env python3 import typing as _typing import sys as _sys import os as _os import json as _json import argparse as _argparse from log import * from conf import * from backend import * def main(): ## args argument_parser = _argparse.ArgumentParser( prog = "mondvogel", description = "CLI-Client-Programm für Espe", formatter_class = _argparse.ArgumentDefaultsHelpFormatter ) argument_parser.add_argument( type = str, dest = "action", choices = [ "member-list", "member-read", "member-project", "member-delete", ], metavar = "", help = "auszuführende Aktion; Optionen: 'conf-schema' : JSON-Schema der Konfiguration ausgeben | 'conf-expose' : vervollständigte Konfiguration ausgegeben | 'member-list' : Liste der Mitglieder ausgeben | 'member-read' : Daten eines Mitglieds ausgeben | 'member-project' : ein Mitglied anlegen und die ID des erzeugten Datensatzes ausgeben | 'member-delete' : einer Mitglieder-Datensatz löschen", ) argument_parser.add_argument( "-c", "--conf-path", type = str, dest = "conf_path", default = _os.path.join(_os.path.expanduser("~"), ".mondvogel", "conf.json"), metavar = "", help = "Pfad zur Konfigurations-Datei", ) argument_parser.add_argument( "-i", "--id", type = int, dest = "id", default = None, metavar = "", help = "ID des Mitglieds", ) argument_parser.add_argument( "-m", "--membership-number", type = str, dest = "membership_number", default = None, metavar = "", help = "Mitglieds-Nummer des Mitglieds", ) argument_parser.add_argument( "-n", "--name", type = str, dest = "name", default = None, metavar = "", help = "Name des Mitglieds; Leerzeichen sind durch '_' zu ersetzen", ) argument_parser.add_argument( "-e", "--email-address", type = str, dest = "email_address", default = None, metavar = "", help = "E-Mail-Adresse des Mitglieds", ) args = argument_parser.parse_args() ## conf conf_load(args.conf_path) log_add_output( { "format": conf_get()["log"]["format"], "min_level": ( { "error": enum_log_level.ERROR, "warning": enum_log_level.WARNING, "notice": enum_log_level.NOTICE, "info": enum_log_level.INFO, "debug": enum_log_level.DEBUG, }[conf_get()["log"]["min_level"]] ), } ) ## exec if (args.action == "conf-schema"): _sys.stdout.write(_json.dumps(conf_schema(), indent = "\t") + "\n") elif (args.action == "conf-expose"): _sys.stdout.write(_json.dumps(conf_get(), indent = "\t") + "\n") elif (args.action == "member-list"): data = backend_api_call_member_list( ) _sys.stdout.write(_json.dumps(data, indent = "\t") + "\n") elif (args.action == "member-read"): if ( (args.id is None) ): log_error( "mandatory_parameters_missing", { "parameters": [ "id", ] } ) else: data = backend_api_call_member_read( args.id ) _sys.stdout.write(_json.dumps(data, indent = "\t") + "\n") elif (args.action == "member-project"): if ( (args.membership_number is None) or (args.name is None) or (args.email_address is None) ): log_error( "mandatory_parameters_missing", { "parameters": [ "membership_number", "name", "email_address", ] } ) else: member_id = backend_api_call_member_project( args.membership_number, args.name.replace("_", " "), args.email_address, None ) _sys.stdout.write(_json.dumps(member_id, indent = "\t") + "\n") elif (args.action == "member-delete"): if ( (args.id is None) ): log_error( "mandatory_parameters_missing", { "parameters": [ "id", ] } ) else: member_id = backend_api_call_member_delete( args.id ) else: raise NotImplementedError() try: main() except ValueError as error: _sys.stderr.write(str(error) + "\n") _sys.exit(1)