diff options
author | Daniel Thompson <daniel.thompson@linaro.org> | 2018-12-12 13:46:41 +0000 |
---|---|---|
committer | Daniel Thompson <daniel.thompson@linaro.org> | 2018-12-12 13:46:41 +0000 |
commit | f3af3ab221f56a35cef4cdb419119a6cce233c90 (patch) | |
tree | f18bf64ca098401a241b8e4ab53c242b56885f08 | |
parent | 3b367a70113320ff6ed5ebdbfd6ee7f959541a4e (diff) |
ldtstool: Factor out the Zendesk lookup code.
-rwxr-xr-x | bin/ldtstool | 164 |
1 files changed, 84 insertions, 80 deletions
diff --git a/bin/ldtstool b/bin/ldtstool index 7460124..ee8f96a 100755 --- a/bin/ldtstool +++ b/bin/ldtstool @@ -70,6 +70,79 @@ try: except: print("WARNING: zdesk module not found - no online support", file=sys.stderr) +class Zendesk(zdesk.Zendesk): + def __init__(self): + cfg = config.get_config() + password = config.get_password(cfg, 'zendesk') + zdesk.Zendesk.__init__(self, cfg['zendesk']['server'], + cfg['zendesk']['username'], password) + + groups = {} + organizations = {} + users = {} + + def group(self, id, field=None): + if field: + # Special case for unresolvable identifiers + if id in ('', 'group_id',): + return '({})'.format(id.split('_')[0]) + + try: + if id not in self.groups: + self.groups[id] = self.group_show(id=id) + return self.groups[id]['group'][field] + except: + return id + + if not id: + return None + + if id not in groups: + self.groups[id] = self.group_show(id=id) + return self.groups[id]['group'] + + def organization(self, id, field=None): + if field: + if id in ('',): + return '({})'.format(id.split('_')[0]) + + try: + if id not in self.organizations: + self.organizations[id] = self.organization_show(id=id) + return self.organizations[id]['organization'][field] + except: + return id + + if not id: + return None + + if id not in self.organizations: + self.organizations[id] = self.organization_show(id=id) + return self.organizations[id]['organization'] + + def user(self, id, field=None): + if field: + if id in ('assignee_id', 'requester_id', 'current_user', ): + return '({})'.format(id.split('_')[0]) + if id in ('all_agents', ''): + return '({})'.format(id) + if not id: + return '(none)' + + try: + if id not in self.users: + self.users[id] = self.user_show(id=id) + return self.users[id]['user'][field] + except: + return id + + if not id: + return None + + if id not in self.users: + self.users[id] = self.user_show(id=id) + return self.users[id]['user'] + class Ticket(dict): def _safe_get_string_field(self, attr, field): if not self[attr]: @@ -263,30 +336,7 @@ class Ticket(dict): @staticmethod def fetch(since=None, until=None): - organizations = {} - def get_organization(id): - if not id: - return None - - if id not in organizations: - organizations[id] = zd.organization_show(id) - - return organizations[id]['organization'] - - users = {} - def get_user(id): - if not id: - return None - - if id not in users: - users[id] = zd.user_show(id) - - return users[id]['user'] - - cfg = config.get_config() - password = config.get_password(cfg, 'zendesk') - zd = zdesk.Zendesk(cfg['zendesk']['server'], - cfg['zendesk']['username'], password) + zd = Zendesk() tickets = [ Ticket(t) for t in zd.tickets_list(get_all_pages=True)['tickets'] ] @@ -295,9 +345,9 @@ class Ticket(dict): for t in tickets: - t['organization'] = get_organization(t['organization_id']) - t['assignee'] = get_user(t['assignee_id']) - t['requester'] = get_user(t['requester_id']) + t['organization'] = zd.organization(t['organization_id']) + t['assignee'] = zd.user(t['assignee_id']) + t['requester'] = zd.user(t['requester_id']) return tickets @@ -454,10 +504,7 @@ def do_interact(args): ticket = tickets[-1] try: - cfg = config.get_config() - zd = zdesk.Zendesk(cfg['zendesk']['server'], - cfg['zendesk']['username'], - config.get_password(cfg, 'zendesk')) + zd = Zendesk() except: zd = None @@ -634,51 +681,9 @@ def do_tags(args): print(t) def do_triggers(args): - cfg = config.get_config() - zd = zdesk.Zendesk(cfg['zendesk']['server'], - cfg['zendesk']['username'], - config.get_password(cfg, 'zendesk')) + zd = Zendesk() trigger_list = zd.triggers_list() - def lookup_group(id): - if id in ('group_id',): - return '({})'.format(id.split('_')[0]) - if id in ('',): - return '({})'.format(id) - - try: - g = zd.group_show(id=id) - return g['group']['name'] - except: - print('# WARNING: Cannot lookup group ' + str(id)) - return id - - def lookup_user(id): - if id in ('assignee_id', 'requester_id', 'current_user', ): - return '({})'.format(id.split('_')[0]) - if id in ('all_agents', ''): - return '({})'.format(id) - if not id: - return '(none)' - - try: - u = zd.user_show(id=id) - return u['user']['email'] - except: - print('# WARNING: Cannot lookup user ' + str(id)) - return id - - def lookup_organization(id): - if id in ('',): - return '({})'.format(id) - - try: - o = zd.organization_show(id=id) - return o['organization']['name'] - except: - print('# WARNING: Cannot lookup organization ' + str(id)) - return id - def lookup_field_value(field, value): z = zd # TODO: we could look this up with zd.ticket_fields_list() but @@ -692,22 +697,21 @@ def do_triggers(args): field = hacks[field] if field in ('assignee_id', 'cc', 'requester_id'): - value = lookup_user(value) + value = zd.user(value, 'email') elif field in ('organization_id',): - value = lookup_organization(value) + value = zd.organization(value, 'name') elif field in ('group_id',): - value = lookup_group(value) + value = zd.group(value, 'name') elif field in ('notification_group',): - value[0] = lookup_group(value[0]) + value[0] = zd.group(value[0], 'name') elif field in ('notification_user',): - value[0] = lookup_user(value[0]) + value[0] = zd.user(value[0], 'email') return (field, value) def format_condition(c): (field, value) = lookup_field_value(c['field'], c['value']) operator = c['operator'].upper() - return '{} {} "{}"'.format(field, operator, value) def format_action(a): |