From 0fe5356be8ef7ad542a11965e6a2da42ad5d8bf7 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 23 Mar 2019 14:02:21 +0200 Subject: Refactor: put sessions handling into its own class --- effitool | 75 +++++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 44 insertions(+), 31 deletions(-) diff --git a/effitool b/effitool index af504de..c7ffaa6 100755 --- a/effitool +++ b/effitool @@ -196,6 +196,43 @@ class HTTPAPI: return 'Basic {}'.format(basic.decode('UTF-8')) +class Session: + + def __init__(self, api, token): + self._api = api + self._token = token + + def fetch_member(self, rid): + headers = { + 'Muck-Id': rid, + } + return self._api.get_json(self._token, '/memb', headers=headers) + + def get_all_member_ids(self): + cond = { + 'where': 'meta', + 'op': '>=', + 'field': 'id', + 'pattern': '', + } + return self.search_members(cond) + + def get_all_members(self): + return { + rid: self.fetch_member(rid) + for rid in self.get_all_member_ids() + } + + def search_members(self, cond): + cond = {'cond': [cond]} + body = json.dumps(cond).encode('utf-8') + headers = { + 'Content-Type': 'application/json', + } + obj = self._api.get_list(self._token, '/search', headers=headers, body=body) + return sorted(obj.get('resources', [])) + + class Tool: def __init__(self, config): @@ -316,7 +353,8 @@ class Tool: server = self.get_chosen_server(args) token = self.get_admin_token(server) api = HTTPAPI(server['url']) - memb = self._fetch_member(api, token, args['rid']) + session = Session(api, token) + memb = session.fetch_member(args['rid']) self._format_json(memb, sys.stdout) def update_member(self, args): @@ -347,44 +385,19 @@ class Tool: server = self.get_chosen_server(args) token = self.get_admin_token(server) api = HTTPAPI(server['url']) - for rid in self._get_all_member_ids(api, token): + session = Session(api, token) + for rid in session.get_all_member_ids(): print(rid) def dump_members(self, args): server = self.get_chosen_server(args) token = self.get_admin_token(server) api = HTTPAPI(server['url']) - rids = self._get_all_member_ids(api, token) - members = { - rid: self._fetch_member(api, token, rid) - for rid in rids - } + session = Session(api, token) + rids = session.get_all_member_ids() + members = session.get_all_members() self._format_json(members, sys.stdout) - def _fetch_member(self, api, token, rid): - headers = { - 'Muck-Id': rid, - } - return api.get_json(token, '/memb', headers=headers) - - def _get_all_member_ids(self, api, token): - cond = { - 'where': 'meta', - 'op': '>=', - 'field': 'id', - 'pattern': '', - } - return self._search_members(api, token, cond) - - def _search_members(self, api, token, cond): - cond = {'cond': [cond]} - body = json.dumps(cond).encode('utf-8') - headers = { - 'Content-Type': 'application/json', - } - obj = api.get_list(token, '/search', headers=headers, body=body) - return sorted(obj.get('resources', [])) - def _format_json(self, obj, output): return json.dump(obj, output, indent=4, sort_keys=True) -- cgit v1.2.1