Compare commits

..

No commits in common. "3c703270a7cced9c9667c77cb865fdaa4c7752d8" and "a2c4660eee727a3677d1562288dca3e5bec3bc45" have entirely different histories.

3 changed files with 55 additions and 137 deletions

View file

@ -2,7 +2,7 @@
## Beschreibung ## Beschreibung
- Kommandozeilen-Client für das [Espe](/espe/meta) - Kommandozeilen-Client für das [Espe](/misc/espe-meta)
## Erstellung ## Erstellung

View file

@ -29,7 +29,6 @@ def backend_api_call_generic(
"with_session_key": (not (session_key is None)), "with_session_key": (not (session_key is None)),
"http_method": http_method, "http_method": http_method,
"path": action_path, "path": action_path,
"data": data,
} }
) )
target = string_coin( target = string_coin(
@ -128,19 +127,9 @@ def backend_api_call_wrapped(
) )
def backend_api_call_group_list(
):
return backend_api_call_wrapped(
False,
"GET",
"/group/list",
None
)
def backend_api_call_session_end( def backend_api_call_session_end(
): ):
return backend_api_call_wrapped( return backend_api_call_generic(
True, True,
"DELETE", "DELETE",
"/session/end", "/session/end",
@ -189,35 +178,35 @@ def backend_api_call_invitation_create(
email_address_value, email_address_value,
groups_changeable, groups_changeable,
groups_value, groups_value,
expiry, expiry
options = None
): ):
options = ( print({
{ "name_changeable": name_changeable,
"send_immediatly": True, "name_value": name_value,
} "label_changeable": label_changeable,
| "label_value": label_value,
(options or {}) "email_address_changeable": email_address_changeable,
) "email_address_value": email_address_value,
result = backend_api_call_wrapped( "groups_changeable": groups_changeable,
"groups_value": groups_value,
"expiry": expiry,
})
return None
return backend_api_call_wrapped(
True, True,
"POST", "POST",
"/invitation/create", "/invitation/create",
{ {
"data": { "name_changeable": name_changeable,
"name_changeable": name_changeable, "name_value": name_value,
"name_value": name_value, "label_changeable": label_changeable,
"label_changeable": label_changeable, "label_value": label_value,
"label_value": label_value, "email_address_changeable": email_address_changeable,
"email_address_changeable": email_address_changeable, "email_address_value": email_address_value,
"email_address_value": email_address_value, "groups_changeable": groups_changeable,
"groups_changeable": groups_changeable, "groups_value": groups_value,
"groups_value": groups_value, "expiry": expiry,
"expiry": expiry,
},
"send_immediatly": options["send_immediatly"],
} }
) )
return result

View file

@ -27,11 +27,10 @@ def main():
"member-list", "member-list",
"member-read", "member-read",
"member-delete", "member-delete",
"invite-single", "invite",
"invite-mass",
], ],
metavar = "<action>", metavar = "<action>",
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-delete' : einer Mitglieder-Datensatz löschen | 'invite-single' : einzelne Einladung erstellen | 'invite-mass' : Massen-Einladungen erstellen", 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-delete' : einer Mitglieder-Datensatz löschen | 'invite' : Einladung erstellen",
) )
argument_parser.add_argument( argument_parser.add_argument(
"-c", "-c",
@ -42,15 +41,6 @@ def main():
metavar = "<conf-path>", metavar = "<conf-path>",
help = "Pfad zur Konfigurations-Datei", help = "Pfad zur Konfigurations-Datei",
) )
argument_parser.add_argument(
"-d",
"--data-path",
type = str,
dest = "data_path",
default = None,
metavar = "<data-path>",
help = "Pfad zu Daten für Massen-Einladung",
)
argument_parser.add_argument( argument_parser.add_argument(
"-i", "-i",
"--id", "--id",
@ -60,6 +50,12 @@ def main():
metavar = "<id>", metavar = "<id>",
help = "ID des Mitglieds", help = "ID des Mitglieds",
) )
argument_parser.add_argument(
"-N",
"--fixed-name",
dest = "fixed_name",
action = 'store_true',
)
argument_parser.add_argument( argument_parser.add_argument(
"-n", "-n",
"--name", "--name",
@ -70,11 +66,10 @@ def main():
help = "Anmelde-Name des Mitglieds; Leerzeichen sind durch '_' zu ersetzen", help = "Anmelde-Name des Mitglieds; Leerzeichen sind durch '_' zu ersetzen",
) )
argument_parser.add_argument( argument_parser.add_argument(
"-N", "-L",
"--fixed-name", "--fixed-label",
dest = "fixed_name", dest = "fixed_label",
action = 'store_true', action = 'store_true',
help = "ob der Anmelde-Name einer Einladung geändert werden kann",
) )
argument_parser.add_argument( argument_parser.add_argument(
"-l", "-l",
@ -86,11 +81,10 @@ def main():
help = "Anzeige-Name des Mitglieds", help = "Anzeige-Name des Mitglieds",
) )
argument_parser.add_argument( argument_parser.add_argument(
"-L", "-E",
"--fixed-label", "--fixed-email-address",
dest = "fixed_label", dest = "fixed_email_address",
action = 'store_true', action = 'store_true',
help = "ob der Anzeige-Name einer Einladung geändert werden kann",
) )
argument_parser.add_argument( argument_parser.add_argument(
"-e", "-e",
@ -102,11 +96,10 @@ def main():
help = "E-Mail-Adresse des Mitglieds", help = "E-Mail-Adresse des Mitglieds",
) )
argument_parser.add_argument( argument_parser.add_argument(
"-E", "-G",
"--fixed-email-address", "--fixed-groups",
dest = "fixed_email_address", dest = "fixed_groups",
action = 'store_true', action = 'store_true',
help = "ob der E-Mail-Adresse einer Einladung geändert werden kann",
) )
argument_parser.add_argument( argument_parser.add_argument(
"-g", "-g",
@ -117,13 +110,6 @@ def main():
metavar = "<groups>", metavar = "<groups>",
help = "Gruppen, zu welchen das Mitglied hinzugefügt werden soll, als Komma-getrennte Liste", help = "Gruppen, zu welchen das Mitglied hinzugefügt werden soll, als Komma-getrennte Liste",
) )
argument_parser.add_argument(
"-G",
"--fixed-groups",
dest = "fixed_groups",
action = 'store_true',
help = "ob die Gruppen einer Einladung geändert werden kann",
)
argument_parser.add_argument( argument_parser.add_argument(
"-x", "-x",
"--expiry", "--expiry",
@ -133,13 +119,6 @@ def main():
metavar = "<expiry>", metavar = "<expiry>",
help = "UNIX-Timestamp des Ablaufdatums der Einladung", help = "UNIX-Timestamp des Ablaufdatums der Einladung",
) )
argument_parser.add_argument(
"-s",
"--send",
dest = "send",
action = 'store_true',
help = "ob eine Einladung nach Einarbeitung ins Backend an die angegebene E-Mail-Adresse gesendet werden soll",
)
args = argument_parser.parse_args() args = argument_parser.parse_args()
## conf ## conf
@ -160,42 +139,19 @@ def main():
) )
## exec ## exec
groups = convey(
backend_api_call_group_list(),
[
lambda x: map(
lambda entry: (entry["preview"]["name"], entry["id"], ),
x
),
dict,
]
)
data = { data = {
"id": args.id, "id": args.id,
"name_changeable": (not args.fixed_name), "name_changeable": (not args.fixed_name),
"name_value": args.name, "name_value": args.name.replace("_", " "),
"label_changeable": (not args.fixed_label), "label_changeable": (not args.fixed_label),
"label_value": ( "label_value": args.label,
None
if (args.label is None) else
args.label.replace("_", " ")
),
"email_address_changeable": (not args.fixed_email_address), "email_address_changeable": (not args.fixed_email_address),
"email_address_value": args.email_address, "email_address_value": args.email_address,
"groups_changeable": (not args.fixed_groups), "groups_changeable": (not args.fixed_groups),
"groups_value": ( "groups_value": ([] if (args.groups is None) else args.groups.split(",")),
[]
if (args.groups is None) else
convey(
args.groups.split(","),
[
lambda x: map(lambda group_name: groups[group_name], x),
list,
]
)
),
"expiry": args.expiry, "expiry": args.expiry,
} }
_sys.stderr.write(_json.dumps(data) + "\n")
if (args.action == "conf-schema"): if (args.action == "conf-schema"):
_sys.stdout.write(_json.dumps(conf_schema(), indent = "\t") + "\n") _sys.stdout.write(_json.dumps(conf_schema(), indent = "\t") + "\n")
elif (args.action == "conf-expose"): elif (args.action == "conf-expose"):
@ -237,11 +193,15 @@ def main():
member_id = backend_api_call_member_delete( member_id = backend_api_call_member_delete(
data["id"] data["id"]
) )
elif (args.action == "invite-single"): elif (args.action == "invite"):
if ( if (
(data["name_value"] is None) (data["name_value"] is None)
or or
(data["label_value"] is None) (data["label_value"] is None)
or
(data["email_address_value"] is None)
or
(data["groups_value"] is None)
): ):
log_error( log_error(
"mandatory_parameters_missing", "mandatory_parameters_missing",
@ -249,11 +209,13 @@ def main():
"parameters": [ "parameters": [
"name", "name",
"label", "label",
"email_address",
"groups",
] ]
} }
) )
else: else:
result = backend_api_call_invitation_create( link = backend_api_call_invitation_create(
data["name_changeable"], data["name_changeable"],
data["name_value"], data["name_value"],
data["label_changeable"], data["label_changeable"],
@ -262,40 +224,8 @@ def main():
data["email_address_value"], data["email_address_value"],
data["groups_changeable"], data["groups_changeable"],
data["groups_value"], data["groups_value"],
data["expiry"], data["expiry"]
{
"send_immediatly": args.send,
}
) )
key = result["key"]
url = result["url"]
_sys.stdout.write(url + "\n")
elif (args.action == "invite-mass"):
invitation_data = _json.loads(file_text_read(args.data_path))
for entry in invitation_data:
result = backend_api_call_invitation_create(
entry.get("name_changeable", True),
entry["name_value"],
entry.get("label_changeable", True),
entry["label_value"],
entry.get("email_address_changeable", True),
entry["email_address_value"],
entry.get("groups_changeable", True),
convey(
entry.get("groups_value", []),
[
lambda x: map(lambda group_name: groups[group_name], x),
list,
]
),
# todo: assign default?
entry.get("expiry", None),
{
"send_immediatly": args.send,
}
)
# _sys.stdout.write(result["url"] + "\n")
# todo: delay
else: else:
raise NotImplementedError() raise NotImplementedError()
@ -305,4 +235,3 @@ try:
except ValueError as error: except ValueError as error:
_sys.stderr.write(str(error) + "\n") _sys.stderr.write(str(error) + "\n")
_sys.exit(1) _sys.exit(1)