Skip to content

Commit 584af68

Browse files
NRL-2099 Confirm before continue mode for adding pointer types. Add a list of all types. Reject duplicate types being added.
1 parent b7a6ab7 commit 584af68

File tree

1 file changed

+47
-19
lines changed

1 file changed

+47
-19
lines changed

scripts/manage_permissions.py

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,13 @@ def _print_perm(
178178
# if not perm_to_print:
179179
# return
180180
print()
181-
plural = (
182-
perm_pretty_name if perm_pretty_name.endswith("s") else f"{perm_pretty_name}s"
183-
)
184-
print(f"{plural.upper()} ({len(perm_to_print)})")
181+
if perm_pretty_name:
182+
plural = (
183+
perm_pretty_name
184+
if perm_pretty_name.endswith("s")
185+
else f"{perm_pretty_name}s"
186+
)
187+
print(f"{plural.upper()} ({len(perm_to_print)})")
185188
for perm in perm_to_print:
186189
print(f"- {perm}")
187190

@@ -269,16 +272,21 @@ def show_perms(supplier_type: SupplierType, app_id: str, org_ods=None) -> None:
269272
def add_pointer_type_perms(
270273
supplier_type: SupplierType, app_id: str, org_ods=None, *pointer_types_to_add: str
271274
) -> None:
272-
# TODO:
273-
# confirm before proceeding mode
274-
# formatting help for pointer types ?
275-
# highlight new additions in proposed pointer types list e.g. [NEW]
275+
"""
276+
TODO:
277+
confirm before proceeding mode
278+
formatting help for pointer types ?
279+
validate not adding a duplicate type
280+
add list of all pointer types vs adding access control
281+
highlight new additions in proposed pointer types list e.g. [NEW]
282+
don't create at app level if ODS level present & backwards too? - hmm maybe too fancy
283+
"""
276284
if supplier_type.lower() not in SupplierType.list() or not app_id:
277285
print("Usage: add pointer type permissions for a given organisation or app")
278-
print(" show_perms consumer <app_id> <org_ods> <pointer_types>")
279-
print(" show_perms producer <app_id> <org_ods> <pointer_types>")
280-
print(" show_perms consumer <app_id> <pointer_types>")
281-
print(" show_perms producer <app_id> <pointer_types>")
286+
print(" add_pointer_type_perms consumer <app_id> <org_ods> <pointer_types>")
287+
print(" add_pointer_type_perms producer <app_id> <org_ods> <pointer_types>")
288+
print(" add_pointer_type_perms consumer <app_id> <pointer_types>")
289+
print(" add_pointer_type_perms producer <app_id> <pointer_types>")
282290
return
283291

284292
if not pointer_types_to_add:
@@ -292,6 +300,10 @@ def add_pointer_type_perms(
292300
else:
293301
lookup_path = f"{supplier_type}/{app_id}.json"
294302

303+
if len(pointer_types_to_add) == 1 and pointer_types_to_add[0] == "all":
304+
print("Setting permissions for access to all pointer types.")
305+
pointer_types_to_add = tuple(TYPE_ATTRIBUTES.keys())
306+
295307
unknown_types = [pt for pt in pointer_types_to_add if pt not in TYPE_ATTRIBUTES]
296308
if unknown_types:
297309
print(f"Error: Unknown pointer types provided: {', '.join(unknown_types)}")
@@ -305,19 +317,35 @@ def add_pointer_type_perms(
305317

306318
current_perms = json.loads(perms_ugly)
307319
current_pointer_types: list = current_perms.get("types", [])
308-
if all(
309-
new_pointer_type in current_pointer_types
320+
321+
already_added_types = list(
322+
new_pointer_type
310323
for new_pointer_type in pointer_types_to_add
311-
):
312-
print(
313-
f"No changes needed for {lookup_path}. These pointer types are already assigned."
314-
)
324+
if new_pointer_type in current_pointer_types
325+
)
326+
if len(already_added_types):
327+
print(f"Error: These pointer types are already assigned to {lookup_path}:")
328+
_print_perm_with_lookup("", already_added_types, TYPE_ATTRIBUTES)
329+
print()
315330
return
316331

317332
proposed_pointer_types = current_pointer_types + list(pointer_types_to_add)
333+
print()
318334
_print_perm_with_lookup(
319335
"proposed pointer types", proposed_pointer_types, TYPE_ATTRIBUTES
320336
)
337+
338+
if COMPARE_AND_CONFIRM:
339+
print()
340+
confirm = (
341+
input("Do you want to proceed with these changes? (yes/NO): ")
342+
.strip()
343+
.lower()
344+
)
345+
if confirm != "yes":
346+
print("Operation cancelled at user request.")
347+
return
348+
321349
current_perms["types"] = proposed_pointer_types
322350

323351
s3 = _get_s3_client()
@@ -329,7 +357,7 @@ def add_pointer_type_perms(
329357
)
330358

331359
print()
332-
print(f"Set permissions for lookup_path")
360+
print(f"Set permissions for {lookup_path}")
333361

334362
print()
335363
show_perms(supplier_type, app_id, org_ods)

0 commit comments

Comments
 (0)