This commit is contained in:
fenris 2025-10-05 18:34:11 +02:00
parent 17d301c969
commit a2c4660eee
2 changed files with 136 additions and 62 deletions

View file

@ -158,27 +158,6 @@ def backend_api_call_member_read(
) )
def backend_api_call_member_project(
membership_number : _typing.Optional[str],
name_real_value : str,
email_address_private : _typing.Optional[str],
groups : list[str],
notification_target_url_template : _typing.Optional[str]
):
return backend_api_call_wrapped(
True,
"POST",
"/member/project",
{
"membership_number": membership_number,
"name_real_value": name_real_value,
"email_address_private": email_address_private,
"groups": groups,
"notification_target_url_template": notification_target_url_template,
}
)
def backend_api_call_member_delete( def backend_api_call_member_delete(
member_id : int member_id : int
): ):
@ -189,3 +168,45 @@ def backend_api_call_member_delete(
None None
) )
def backend_api_call_invitation_create(
name_changeable,
name_value,
label_changeable,
label_value,
email_address_changeable,
email_address_value,
groups_changeable,
groups_value,
expiry
):
print({
"name_changeable": name_changeable,
"name_value": name_value,
"label_changeable": label_changeable,
"label_value": label_value,
"email_address_changeable": email_address_changeable,
"email_address_value": email_address_value,
"groups_changeable": groups_changeable,
"groups_value": groups_value,
"expiry": expiry,
})
return None
return backend_api_call_wrapped(
True,
"POST",
"/invitation/create",
{
"name_changeable": name_changeable,
"name_value": name_value,
"label_changeable": label_changeable,
"label_value": label_value,
"email_address_changeable": email_address_changeable,
"email_address_value": email_address_value,
"groups_changeable": groups_changeable,
"groups_value": groups_value,
"expiry": expiry,
}
)

View file

@ -26,11 +26,11 @@ def main():
"conf-expose", "conf-expose",
"member-list", "member-list",
"member-read", "member-read",
"member-project",
"member-delete", "member-delete",
"invite",
], ],
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-project' : ein Mitglied anlegen und die ID des erzeugten Datensatzes ausgeben | 'member-delete' : einer Mitglieder-Datensatz löschen", 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",
@ -51,13 +51,10 @@ def main():
help = "ID des Mitglieds", help = "ID des Mitglieds",
) )
argument_parser.add_argument( argument_parser.add_argument(
"-m", "-N",
"--membership-number", "--fixed-name",
type = str, dest = "fixed_name",
dest = "membership_number", action = 'store_true',
default = None,
metavar = "<membership-number>",
help = "Mitglieds-Nummer des Mitglieds",
) )
argument_parser.add_argument( argument_parser.add_argument(
"-n", "-n",
@ -66,7 +63,28 @@ def main():
dest = "name", dest = "name",
default = None, default = None,
metavar = "<name>", metavar = "<name>",
help = "Name des Mitglieds; Leerzeichen sind durch '_' zu ersetzen", help = "Anmelde-Name des Mitglieds; Leerzeichen sind durch '_' zu ersetzen",
)
argument_parser.add_argument(
"-L",
"--fixed-label",
dest = "fixed_label",
action = 'store_true',
)
argument_parser.add_argument(
"-l",
"--label",
type = str,
dest = "label",
default = None,
metavar = "<label>",
help = "Anzeige-Name des Mitglieds",
)
argument_parser.add_argument(
"-E",
"--fixed-email-address",
dest = "fixed_email_address",
action = 'store_true',
) )
argument_parser.add_argument( argument_parser.add_argument(
"-e", "-e",
@ -77,6 +95,12 @@ def main():
metavar = "<email-address>", metavar = "<email-address>",
help = "E-Mail-Adresse des Mitglieds", help = "E-Mail-Adresse des Mitglieds",
) )
argument_parser.add_argument(
"-G",
"--fixed-groups",
dest = "fixed_groups",
action = 'store_true',
)
argument_parser.add_argument( argument_parser.add_argument(
"-g", "-g",
"--groups", "--groups",
@ -86,6 +110,15 @@ 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(
"-x",
"--expiry",
type = int,
dest = "expiry",
default = None,
metavar = "<expiry>",
help = "UNIX-Timestamp des Ablaufdatums der Einladung",
)
args = argument_parser.parse_args() args = argument_parser.parse_args()
## conf ## conf
@ -104,7 +137,21 @@ def main():
), ),
} }
) )
## exec ## exec
data = {
"id": args.id,
"name_changeable": (not args.fixed_name),
"name_value": args.name.replace("_", " "),
"label_changeable": (not args.fixed_label),
"label_value": args.label,
"email_address_changeable": (not args.fixed_email_address),
"email_address_value": args.email_address,
"groups_changeable": (not args.fixed_groups),
"groups_value": ([] if (args.groups is None) else args.groups.split(",")),
"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"):
@ -115,7 +162,7 @@ def main():
_sys.stdout.write(_json.dumps(data, indent = "\t") + "\n") _sys.stdout.write(_json.dumps(data, indent = "\t") + "\n")
elif (args.action == "member-read"): elif (args.action == "member-read"):
if ( if (
(args.id is None) (data["id"] is None)
): ):
log_error( log_error(
"mandatory_parameters_missing", "mandatory_parameters_missing",
@ -127,39 +174,12 @@ def main():
) )
else: else:
data = backend_api_call_member_read( data = backend_api_call_member_read(
args.id data["id"]
) )
_sys.stdout.write(_json.dumps(data, indent = "\t") + "\n") _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,
([] if (args.groups is None) else args.groups.split(",")),
None
)
_sys.stdout.write(_json.dumps(member_id, indent = "\t") + "\n")
elif (args.action == "member-delete"): elif (args.action == "member-delete"):
if ( if (
(args.id is None) (data["id"] is None)
): ):
log_error( log_error(
"mandatory_parameters_missing", "mandatory_parameters_missing",
@ -171,7 +191,40 @@ def main():
) )
else: else:
member_id = backend_api_call_member_delete( member_id = backend_api_call_member_delete(
args.id data["id"]
)
elif (args.action == "invite"):
if (
(data["name_value"] is None)
or
(data["label_value"] is None)
or
(data["email_address_value"] is None)
or
(data["groups_value"] is None)
):
log_error(
"mandatory_parameters_missing",
{
"parameters": [
"name",
"label",
"email_address",
"groups",
]
}
)
else:
link = backend_api_call_invitation_create(
data["name_changeable"],
data["name_value"],
data["label_changeable"],
data["label_value"],
data["email_address_changeable"],
data["email_address_value"],
data["groups_changeable"],
data["groups_value"],
data["expiry"]
) )
else: else:
raise NotImplementedError() raise NotImplementedError()