diff options
Diffstat (limited to 'cli/objects/modes.py')
-rw-r--r-- | cli/objects/modes.py | 43 |
1 files changed, 39 insertions, 4 deletions
diff --git a/cli/objects/modes.py b/cli/objects/modes.py index 6171c84..ccb32f5 100644 --- a/cli/objects/modes.py +++ b/cli/objects/modes.py @@ -18,16 +18,51 @@ class OgModes(): @staticmethod def set_modes(rest, args): parser = argparse.ArgumentParser() - parser.add_argument('--scope-name', + parser.add_argument('--scope-id', nargs=1, required=True, - help='Name of the scope (room or computer)') + help='ID of the scope') + parser.add_argument('--scope-type', + nargs=1, + required=True, + help='Type of the scope') parser.add_argument('--mode', nargs=1, required=True, help='Mode for the scope') parsed_args = parser.parse_args(args) - payload = {'scope_name': parsed_args.scope_name[0], - 'mode': parsed_args.mode[0]} + def scope_lookup(scope_id, scope_type, d): + if scope_id == d.get('id') and \ + scope_type == d.get('type'): + return d + for scope in d['scope']: + lookup = scope_lookup(scope_id, + scope_type, + scope) + if lookup is not None: + return lookup + return None + + def ips_in_scope(scope): + if 'ip' in scope: + return [scope['ip']] + ips = [] + for child in scope['scope']: + ips += ips_in_scope(child) + return ips + + r = rest.get('/scopes') + scopes = r.json() + found_scope = scope_lookup(int(parsed_args.scope_id[0]), + parsed_args.scope_type[0], + scopes) + + if found_scope is None: + print("Scope not found") + return None + + ips = ips_in_scope(found_scope) + + payload = {'clients': ips, 'mode': parsed_args.mode[0]} r = rest.post('/mode', payload=payload) |