Newer
Older
from json import dumps
from pathlib import Path
from zephir_client import remote_json_to_config, cmdline_factory, send, remove_token, list_messages, describe_messages, authenticate, ZcliConfig
# get calling script base name
progname = Path(sys.argv[0]).parts[-1]
URL = zcliconf.url
VERSION = zcliconf.version
OUTPUT = 'yaml'
if '--batch' in sys.argv:
no_msg = True
sys.argv.remove('--batch')
if '--no-pretty' in sys.argv:
prettyjson = None
sys.argv.remove('--no-pretty')
if len(sys.argv) == 1:
help()
if '-h' == sys.argv[1] or '--help' == sys.argv[1]:
if len(sys.argv) == 2 :
help()
if 'logout' in sys.argv:
if '-h' in sys.argv or '--help' in sys.argv:
help()
sys.argv.remove('logout')
print("Jeton d'authentification supprimé")
sys.exit(0)
if 'login' in sys.argv:
if '-h' in sys.argv or '--help' in sys.argv:
help()
remove_token()
user = None
if len(sys.argv) > 2 :
user = sys.argv[2]
authenticate(URL, user)
sys.exit(0)
if 'list' in sys.argv:
if '-h' in sys.argv or '--help' in sys.argv:
help()
start = None
if len(sys.argv) > 2 :
start = sys.argv[2]
sys.argv.remove(start)
sys.argv.remove('list')
if 'describe' in sys.argv:
if '-h' in sys.argv or '--help' in sys.argv:
help()
list_msgs = 2
start = None
if len(sys.argv) > 2 :
start = sys.argv[2]
sys.argv.remove(start)
sys.argv.remove('describe')
try:
remote_config = remote_json_to_config(URL, VERSION)
except:
print(f"Erreur d'accès à l'API Zéphir ({URL})")
sys.exit(1)
config = cmdline_factory(remote_config)
if list_msgs:
if list_msgs == 1:
messages = list_messages(config, start)
elif list_msgs == 2:
messages = describe_messages(config, start)
if not messages:
print("Aucun résultat.")
elif OUTPUT == "yaml":
print("\n")
for msg in messages:
print(msg)
print("\n")
print(dumps(messages, indent=prettyjson ))
sys.exit(0)
# special case: no message name given
if 'message' in config.value.mandatory():
print(f"""\nNom de commande manquant. Vous devez spécifier une commande à exécuter.
Utiliser <{progname} list> pour lister les commandes disponibles.\n""")
sys.exit(0)
# ask for missing parameters
if not no_msg:
for key in config.value.mandatory():
if not config.option(key).option.issymlinkoption():
val_ok = False
while not val_ok:
text = input("* "+config.option(key).option.doc() + " : ")
try:
if config.option(key).option.type() == 'integer':
config.option(key).value.set(int(text))
else:
config.option(key).value.set(text)
val_ok = True
except Exception as err:
print('\nValeur invalide: {}\n'.format(err))
result = send(URL, VERSION, config)
else:
result = send(URL, VERSION, config)
if "Erreur" in result:
print("ERREUR: paramètres requis manquants.")
print("Les paramètres nécessaires sont :" + ", ".join((key for key in config.value.mandatory() if not config.option(key).option.issymlinkoption())))
sys.exit(1)
print(yaml.dump(result, default_flow_style=False, allow_unicode=True))
print(dumps(result, indent=prettyjson ))
def help():
print(f"""
Client pour interroger un serveur Zéphir.
{progname} login [utilisateur]
Génère un token d'authentification.
{progname} logout
Supprime le token d'authentification.
{progname} list [recherche]
Liste les messages disponibles commençant par <recherche>.
Décrit les messages disponibles commençant par <recherche>.
Exécute le message avec ses paramètres.
{progname} -h <message>
Affiche l'aide d'un message.
{progname} --json [--no-pretty] <message>
Affiche le résultat au format json
--no-pretty
Affiche le résultat json brut
{progname} --batch <message> [paramètres]
Execute le message avec ses paramètres, en mode batch