Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"python.linting.pylintEnabled": false,
"python.linting.flake8Enabled": true,
"python.venvPath": "./venv",
"python.pythonPath": "${workspaceFolder}/venv/bin/python",
"python.pythonPath": "C:\\Users\\Micah Lyle\\envs\\sc\\Scripts\\python.exe",
"python.formatting.provider": "black",
"editor.formatOnSave": true,
}
5 changes: 3 additions & 2 deletions slackclient/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,12 @@ def refresh_access_token(self):
self.access_token_expires_at = expires_at
# Call the developer's token update callback
update_args = {
"enterprise_id": response_json["enterprise_id"],
"team_id": response_json["team_id"],
"access_token": response_json["access_token"],
"expires_in": response_json["expires_in"],
"expires_in": response_json["expires_in"]
}
if "enterprise_id" in response_json:
update_args["enterprise_id"] = response_json["enterprise_id"]
self.token_update_callback(update_args)
else:
raise TokenRefreshError("Token refresh failed")
Expand Down
3 changes: 2 additions & 1 deletion slackclient/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,8 @@ def api_call(self, token, request="?", timeout=None, **kwargs):

See here for more information on responses: https://api.slack.com/web
"""
response = self.api_requester.do(token, request, kwargs, timeout=timeout)
as_user = kwargs.pop("as_user", None)
response = self.api_requester.do(token, request, kwargs, as_user=as_user, timeout=timeout)
response_json = json.loads(response.text)
response_json["headers"] = dict(response.headers)
return json.dumps(response_json)
Expand Down
13 changes: 9 additions & 4 deletions slackclient/slackrequest.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,16 @@ def append_user_agent(self, name, version):
else:
self.custom_user_agent = [[name, version]]

def do(self, token=None, request="?", post_data=None, domain="slack.com", timeout=None):
def do(self, token=None, request="?", post_data=None,
as_user=None, domain="slack.com", timeout=None):
"""
Perform a POST request to the Slack Web API
Args:
token (str): your authentication token
request (str): the method to call from the Slack API. For example: 'channels.list'
post_data (dict): key/value arguments to pass for the request. For example:
{'channel': 'CABC12345'}
as_user (str): if using a workspace app, the user_id of the user to act on behalf of
domain (str): if for some reason you want to send your request to something other
than slack.com
timeout (float): stop waiting for a response after a given number of seconds
Expand Down Expand Up @@ -81,19 +83,20 @@ def do(self, token=None, request="?", post_data=None, domain="slack.com", timeou
if isinstance(v, (list, dict)):
post_data[k] = json.dumps(v)

return self.post_http_request(token, request, post_data, files, timeout, domain)
return self.post_http_request(token, request, post_data, as_user, files, timeout, domain)

def post_http_request(self, token, api_method, post_data,
files=None, timeout=None, domain="slack.com"):
as_user=None, files=None, timeout=None, domain="slack.com"):
"""
This method build and submits the Web API HTTP request

:param token: You app's Slack access token
:param api_method: The API method endpoint to submit the request to
:param post_data: The request payload
:param domain: The URL to submit the API request to
:param as_user: The user_id if using a workspace app on behalf of a user
:param files: Any files to be submitted during upload calls
:param timeout: Stop waiting for a response after a given number of seconds
:param domain: The URL to submit the API request to
:return:
"""
# Override token header if `token` is passed in post_data
Expand All @@ -105,6 +108,8 @@ def post_http_request(self, token, api_method, post_data,
'user-agent': self.get_user_agent(),
'Authorization': 'Bearer {}'.format(token)
}
if as_user:
headers["X-Slack-User"] = as_user

# Submit the request
res = requests.post(
Expand Down