From 29ab17b7d7a3b55aba740dbd17d582e7f560fdcb Mon Sep 17 00:00:00 2001 From: jahirfiquitiva Date: Mon, 26 Mar 2018 10:49:42 -0500 Subject: [PATCH] Add dialog open method from https://github.com/prestonhale/slacker/ --- slacker/__init__.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/slacker/__init__.py b/slacker/__init__.py index 89f9ff5..d6bf713 100644 --- a/slacker/__init__.py +++ b/slacker/__init__.py @@ -20,7 +20,6 @@ from slacker.utils import get_item_id_by_name - __version__ = '0.9.65' API_BASE_URL = 'https://slack.com/api/{api}' @@ -34,7 +33,7 @@ 'Stars', 'Emoji', 'Presence', 'RTM', 'Team', 'Reactions', 'Pins', 'UserGroups', 'UserGroupsUsers', 'MPIM', 'OAuth', 'DND', 'Bots', 'FilesComments', 'Reminders', 'TeamProfile', 'UsersProfile', - 'IDPGroups', 'Apps', 'AppsPermissions', 'Slacker'] + 'IDPGroups', 'Apps', 'AppsPermissions', 'Slacker', 'Dialog'] class Error(Exception): @@ -47,6 +46,7 @@ def __init__(self, body): self.body = json.loads(body) self.successful = self.body['ok'] self.error = self.body.get('error') + self.message = self.body.get('response_metadata', {}).get('messages') def __str__(self): return json.dumps(self.body) @@ -78,7 +78,7 @@ def _request(self, method, api, **kwargs): # handle HTTP 429 as documented at # https://api.slack.com/docs/rate-limits - elif response.status_code == requests.codes.too_many: # HTTP 429 + elif response.status_code == requests.codes.too_many: # HTTP 429 time.sleep(int(response.headers.get('retry-after', DEFAULT_WAIT))) continue @@ -96,7 +96,10 @@ def _request(self, method, api, **kwargs): response = Response(response.text) if not response.successful: - raise Error(response.error) + error = response.error + if response.message: + error = "{error}: {response.message}" + raise Error(error) return response @@ -456,7 +459,7 @@ def history(self, channel, latest=None, oldest=None, count=None, 'oldest': oldest, 'count': count, 'inclusive': inclusive, - 'unreads' : int(unreads) + 'unreads': int(unreads) }) def replies(self, channel, thread_ts): @@ -988,6 +991,15 @@ def permissions(self): return self._permissions +class Dialog(BaseAPI): + def open(self, dialog, trigger_id): + return self.post('dialog.open', + data={ + 'dialog': json.dumps(dialog), + 'trigger_id': trigger_id + }) + + class IncomingWebhook(object): def __init__(self, url=None, timeout=DEFAULT_TIMEOUT, proxies=None): self.url = url @@ -1044,6 +1056,7 @@ def __init__(self, token, incoming_webhook_url=None, self.reactions = Reactions(**api_args) self.idpgroups = IDPGroups(**api_args) self.usergroups = UserGroups(**api_args) + self.dialog = Dialog(**api_args) self.incomingwebhook = IncomingWebhook(url=incoming_webhook_url, timeout=timeout, proxies=proxies)