aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Thompson <daniel.thompson@linaro.org>2018-12-12 13:46:41 +0000
committerDaniel Thompson <daniel.thompson@linaro.org>2018-12-12 13:46:41 +0000
commitf3af3ab221f56a35cef4cdb419119a6cce233c90 (patch)
treef18bf64ca098401a241b8e4ab53c242b56885f08
parent3b367a70113320ff6ed5ebdbfd6ee7f959541a4e (diff)
ldtstool: Factor out the Zendesk lookup code.
-rwxr-xr-xbin/ldtstool164
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):