Skip to content

Commit cf22599

Browse files
authored
Add team.* & admin.users.session.resetBulk APIs (#1132)
1 parent 93fd69a commit cf22599

File tree

6 files changed

+212
-2
lines changed

6 files changed

+212
-2
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import os
2+
import unittest
3+
4+
from integration_tests.env_variable_names import (
5+
SLACK_SDK_TEST_GRID_WORKSPACE_ADMIN_USER_TOKEN,
6+
SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN,
7+
)
8+
from slack_sdk.web import WebClient
9+
10+
11+
class TestWebClient(unittest.TestCase):
12+
13+
def setUp(self):
14+
self.org_admin_token = os.environ[SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN]
15+
self.client: WebClient = WebClient(token=self.org_admin_token)
16+
17+
if not hasattr(self, "user_ids"):
18+
team_admin_token = os.environ[
19+
SLACK_SDK_TEST_GRID_WORKSPACE_ADMIN_USER_TOKEN
20+
]
21+
client = WebClient(token=team_admin_token)
22+
users = client.users_list(exclude_archived=True, limit=50)
23+
self.user_ids = [
24+
u["id"]
25+
for u in users["members"]
26+
if not u["is_bot"]
27+
and not u["deleted"]
28+
and not u["is_app_user"]
29+
and not u["is_owner"]
30+
and not u.get("is_stranger")
31+
][:3]
32+
33+
def tearDown(self):
34+
pass
35+
36+
def test_reset(self):
37+
response = self.client.admin_users_session_reset(user_id=self.user_ids[0])
38+
self.assertIsNone(response.get("error"))
39+
40+
def test_resetBulk(self):
41+
response = self.client.admin_users_session_resetBulk(user_ids=self.user_ids)
42+
self.assertIsNone(response.get("error"))
43+
44+
def test_resetBulk_str(self):
45+
response = self.client.admin_users_session_resetBulk(user_ids=",".join(self.user_ids))
46+
self.assertIsNone(response.get("error"))

integration_tests/web/test_team.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import os
2+
import unittest
3+
4+
from integration_tests.env_variable_names import SLACK_SDK_TEST_BOT_TOKEN
5+
from slack_sdk.web import WebClient
6+
7+
8+
class TestWebClient(unittest.TestCase):
9+
10+
def setUp(self):
11+
self.bot_token = os.environ[SLACK_SDK_TEST_BOT_TOKEN]
12+
self.client: WebClient = WebClient(token=self.bot_token)
13+
14+
def tearDown(self):
15+
pass
16+
17+
def test_team_billing_info(self):
18+
response = self.client.team_billing_info()
19+
self.assertIsNone(response.get("error"))
20+
self.assertIsNotNone(response.get("plan"))
21+
22+
def test_team_preferences_list(self):
23+
response = self.client.team_preferences_list()
24+
self.assertIsNone(response.get("error"))
25+
self.assertIsNotNone(response.get("msg_edit_window_mins"))
26+
self.assertIsNotNone(response.get("allow_message_deletion"))
27+
self.assertIsNotNone(response.get("display_real_names"))
28+
self.assertIsNotNone(response.get("disable_file_uploads"))
29+
self.assertIsNotNone(response.get("who_can_post_general"))

slack_sdk/web/async_client.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -906,6 +906,29 @@ async def admin_users_session_reset(
906906
)
907907
return await self.api_call("admin.users.session.reset", params=kwargs)
908908

909+
async def admin_users_session_resetBulk(
910+
self,
911+
*,
912+
user_ids: Union[str, Sequence[str]],
913+
mobile_only: Optional[bool] = None,
914+
web_only: Optional[bool] = None,
915+
**kwargs,
916+
) -> AsyncSlackResponse:
917+
"""Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users
918+
https://api.slack.com/methods/admin.users.session.resetBulk
919+
"""
920+
if isinstance(user_ids, (list, Tuple)):
921+
kwargs.update({"user_ids": ",".join(user_ids)})
922+
else:
923+
kwargs.update({"user_ids": user_ids})
924+
kwargs.update(
925+
{
926+
"mobile_only": mobile_only,
927+
"web_only": web_only,
928+
}
929+
)
930+
return await self.api_call("admin.users.session.resetBulk", params=kwargs)
931+
909932
async def admin_users_session_invalidate(
910933
self,
911934
*,
@@ -3799,6 +3822,15 @@ async def team_billableInfo(
37993822
kwargs.update({"team_id": team_id, "user": user})
38003823
return await self.api_call("team.billableInfo", http_verb="GET", params=kwargs)
38013824

3825+
async def team_billing_info(
3826+
self,
3827+
**kwargs,
3828+
) -> AsyncSlackResponse:
3829+
"""Reads a workspace's billing plan information.
3830+
https://api.slack.com/methods/team.billing.info
3831+
"""
3832+
return await self.api_call("team.billing.info", params=kwargs)
3833+
38023834
async def team_info(
38033835
self,
38043836
*,
@@ -3853,6 +3885,15 @@ async def team_profile_get(
38533885
kwargs.update({"visibility": visibility})
38543886
return await self.api_call("team.profile.get", http_verb="GET", params=kwargs)
38553887

3888+
async def team_preferences_list(
3889+
self,
3890+
**kwargs,
3891+
) -> AsyncSlackResponse:
3892+
"""Retrieve a list of a workspace's team preferences.
3893+
https://api.slack.com/methods/team.preferences.list
3894+
"""
3895+
return await self.api_call("team.preferences.list", params=kwargs)
3896+
38563897
async def usergroups_create(
38573898
self,
38583899
*,

slack_sdk/web/client.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -867,6 +867,29 @@ def admin_users_session_reset(
867867
)
868868
return self.api_call("admin.users.session.reset", params=kwargs)
869869

870+
def admin_users_session_resetBulk(
871+
self,
872+
*,
873+
user_ids: Union[str, Sequence[str]],
874+
mobile_only: Optional[bool] = None,
875+
web_only: Optional[bool] = None,
876+
**kwargs,
877+
) -> SlackResponse:
878+
"""Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users
879+
https://api.slack.com/methods/admin.users.session.resetBulk
880+
"""
881+
if isinstance(user_ids, (list, Tuple)):
882+
kwargs.update({"user_ids": ",".join(user_ids)})
883+
else:
884+
kwargs.update({"user_ids": user_ids})
885+
kwargs.update(
886+
{
887+
"mobile_only": mobile_only,
888+
"web_only": web_only,
889+
}
890+
)
891+
return self.api_call("admin.users.session.resetBulk", params=kwargs)
892+
870893
def admin_users_session_invalidate(
871894
self,
872895
*,
@@ -3740,6 +3763,15 @@ def team_billableInfo(
37403763
kwargs.update({"team_id": team_id, "user": user})
37413764
return self.api_call("team.billableInfo", http_verb="GET", params=kwargs)
37423765

3766+
def team_billing_info(
3767+
self,
3768+
**kwargs,
3769+
) -> SlackResponse:
3770+
"""Reads a workspace's billing plan information.
3771+
https://api.slack.com/methods/team.billing.info
3772+
"""
3773+
return self.api_call("team.billing.info", params=kwargs)
3774+
37433775
def team_info(
37443776
self,
37453777
*,
@@ -3792,6 +3824,15 @@ def team_profile_get(
37923824
kwargs.update({"visibility": visibility})
37933825
return self.api_call("team.profile.get", http_verb="GET", params=kwargs)
37943826

3827+
def team_preferences_list(
3828+
self,
3829+
**kwargs,
3830+
) -> SlackResponse:
3831+
"""Retrieve a list of a workspace's team preferences.
3832+
https://api.slack.com/methods/team.preferences.list
3833+
"""
3834+
return self.api_call("team.preferences.list", params=kwargs)
3835+
37953836
def usergroups_create(
37963837
self,
37973838
*,

slack_sdk/web/legacy_client.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -878,6 +878,29 @@ def admin_users_session_reset(
878878
)
879879
return self.api_call("admin.users.session.reset", params=kwargs)
880880

881+
def admin_users_session_resetBulk(
882+
self,
883+
*,
884+
user_ids: Union[str, Sequence[str]],
885+
mobile_only: Optional[bool] = None,
886+
web_only: Optional[bool] = None,
887+
**kwargs,
888+
) -> Union[Future, SlackResponse]:
889+
"""Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users
890+
https://api.slack.com/methods/admin.users.session.resetBulk
891+
"""
892+
if isinstance(user_ids, (list, Tuple)):
893+
kwargs.update({"user_ids": ",".join(user_ids)})
894+
else:
895+
kwargs.update({"user_ids": user_ids})
896+
kwargs.update(
897+
{
898+
"mobile_only": mobile_only,
899+
"web_only": web_only,
900+
}
901+
)
902+
return self.api_call("admin.users.session.resetBulk", params=kwargs)
903+
881904
def admin_users_session_invalidate(
882905
self,
883906
*,
@@ -3751,6 +3774,15 @@ def team_billableInfo(
37513774
kwargs.update({"team_id": team_id, "user": user})
37523775
return self.api_call("team.billableInfo", http_verb="GET", params=kwargs)
37533776

3777+
def team_billing_info(
3778+
self,
3779+
**kwargs,
3780+
) -> Union[Future, SlackResponse]:
3781+
"""Reads a workspace's billing plan information.
3782+
https://api.slack.com/methods/team.billing.info
3783+
"""
3784+
return self.api_call("team.billing.info", params=kwargs)
3785+
37543786
def team_info(
37553787
self,
37563788
*,
@@ -3803,6 +3835,15 @@ def team_profile_get(
38033835
kwargs.update({"visibility": visibility})
38043836
return self.api_call("team.profile.get", http_verb="GET", params=kwargs)
38053837

3838+
def team_preferences_list(
3839+
self,
3840+
**kwargs,
3841+
) -> Union[Future, SlackResponse]:
3842+
"""Retrieve a list of a workspace's team preferences.
3843+
https://api.slack.com/methods/team.preferences.list
3844+
"""
3845+
return self.api_call("team.preferences.list", params=kwargs)
3846+
38063847
def usergroups_create(
38073848
self,
38083849
*,

0 commit comments

Comments
 (0)