diff --git a/slack_sdk/web/async_client.py b/slack_sdk/web/async_client.py index 212fbff02..1fc319125 100644 --- a/slack_sdk/web/async_client.py +++ b/slack_sdk/web/async_client.py @@ -1514,6 +1514,67 @@ async def apps_uninstall( kwargs.update({"client_id": client_id, "client_secret": client_secret}) return await self.api_call("apps.uninstall", params=kwargs) + async def apps_manifest_create( + self, + *, + manifest: str, + **kwargs, + ) -> AsyncSlackResponse: + """Creates a new app from a manifest. + https://api.slack.com/methods/apps.manifest.create + """ + kwargs.update({"manifest": manifest}) + return await self.api_call("apps.manifest.create", params=kwargs) + + async def apps_manifest_delete( + self, + *, + app_id: str, + **kwargs, + ) -> AsyncSlackResponse: + """Deletes an app. + https://api.slack.com/methods/apps.manifest.delete + """ + kwargs.update({"app_id": app_id}) + return await self.api_call("apps.manifest.delete", params=kwargs) + + async def apps_manifest_export( + self, + *, + app_id: str, + **kwargs, + ) -> AsyncSlackResponse: + """Retrieves the manifest of an app. + https://api.slack.com/methods/apps.manifest.export + """ + kwargs.update({"app_id": app_id}) + return await self.api_call("apps.manifest.export", params=kwargs) + + async def apps_manifest_update( + self, + *, + app_id: str, + manifest: str, + **kwargs, + ) -> AsyncSlackResponse: + """Updates an app using a manifest. + https://api.slack.com/methods/apps.manifest.update + """ + kwargs.update({"app_id": app_id, "manifest": manifest}) + return await self.api_call("apps.manifest.update", params=kwargs) + + async def apps_manifest_validate( + self, + *, + manifest: str, + **kwargs, + ) -> AsyncSlackResponse: + """Validates an app manifest. + https://api.slack.com/methods/apps.manifest.validate + """ + kwargs.update({"manifest": manifest}) + return await self.api_call("apps.manifest.validate", params=kwargs) + async def auth_revoke( self, *, @@ -3853,6 +3914,18 @@ async def team_profile_get( kwargs.update({"visibility": visibility}) return await self.api_call("team.profile.get", http_verb="GET", params=kwargs) + async def tooling_tokens_rotate( + self, + *, + refresh_token: str, + **kwargs, + ) -> AsyncSlackResponse: + """Refresh a tooling token. + https://api.slack.com/methods/tooling.tokens.rotate + """ + kwargs.update({"refresh_token": refresh_token}) + return await self.api_call("tooling.tokens.rotate", params=kwargs) + async def usergroups_create( self, *, diff --git a/slack_sdk/web/client.py b/slack_sdk/web/client.py index 6ae1de300..c13bb8ed3 100644 --- a/slack_sdk/web/client.py +++ b/slack_sdk/web/client.py @@ -1467,6 +1467,67 @@ def apps_uninstall( kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs) + def apps_manifest_create( + self, + *, + manifest: str, + **kwargs, + ) -> SlackResponse: + """Creates a new app from a manifest. + https://api.slack.com/methods/apps.manifest.create + """ + kwargs.update({"manifest": manifest}) + return self.api_call("apps.manifest.create", params=kwargs) + + def apps_manifest_delete( + self, + *, + app_id: str, + **kwargs, + ) -> SlackResponse: + """Deletes an app. + https://api.slack.com/methods/apps.manifest.delete + """ + kwargs.update({"app_id": app_id}) + return self.api_call("apps.manifest.delete", params=kwargs) + + def apps_manifest_export( + self, + *, + app_id: str, + **kwargs, + ) -> SlackResponse: + """Retrieves the manifest of an app. + https://api.slack.com/methods/apps.manifest.export + """ + kwargs.update({"app_id": app_id}) + return self.api_call("apps.manifest.export", params=kwargs) + + def apps_manifest_update( + self, + *, + app_id: str, + manifest: str, + **kwargs, + ) -> SlackResponse: + """Updates an app using a manifest. + https://api.slack.com/methods/apps.manifest.update + """ + kwargs.update({"app_id": app_id, "manifest": manifest}) + return self.api_call("apps.manifest.update", params=kwargs) + + def apps_manifest_validate( + self, + *, + manifest: str, + **kwargs, + ) -> SlackResponse: + """Validates an app manifest. + https://api.slack.com/methods/apps.manifest.validate + """ + kwargs.update({"manifest": manifest}) + return self.api_call("apps.manifest.validate", params=kwargs) + def auth_revoke( self, *, @@ -3792,6 +3853,18 @@ def team_profile_get( kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs) + def tooling_tokens_rotate( + self, + *, + refresh_token: str, + **kwargs, + ) -> SlackResponse: + """Refresh a tooling token. + https://api.slack.com/methods/tooling.tokens.rotate + """ + kwargs.update({"refresh_token": refresh_token}) + return self.api_call("tooling.tokens.rotate", params=kwargs) + def usergroups_create( self, *, diff --git a/slack_sdk/web/legacy_client.py b/slack_sdk/web/legacy_client.py index 1a1b88338..ad04f7a6e 100644 --- a/slack_sdk/web/legacy_client.py +++ b/slack_sdk/web/legacy_client.py @@ -1478,6 +1478,67 @@ def apps_uninstall( kwargs.update({"client_id": client_id, "client_secret": client_secret}) return self.api_call("apps.uninstall", params=kwargs) + def apps_manifest_create( + self, + *, + manifest: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Creates a new app from a manifest. + https://api.slack.com/methods/apps.manifest.create + """ + kwargs.update({"manifest": manifest}) + return self.api_call("apps.manifest.create", params=kwargs) + + def apps_manifest_delete( + self, + *, + app_id: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Deletes an app. + https://api.slack.com/methods/apps.manifest.delete + """ + kwargs.update({"app_id": app_id}) + return self.api_call("apps.manifest.delete", params=kwargs) + + def apps_manifest_export( + self, + *, + app_id: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Retrieves the manifest of an app. + https://api.slack.com/methods/apps.manifest.export + """ + kwargs.update({"app_id": app_id}) + return self.api_call("apps.manifest.export", params=kwargs) + + def apps_manifest_update( + self, + *, + app_id: str, + manifest: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Updates an app using a manifest. + https://api.slack.com/methods/apps.manifest.update + """ + kwargs.update({"app_id": app_id, "manifest": manifest}) + return self.api_call("apps.manifest.update", params=kwargs) + + def apps_manifest_validate( + self, + *, + manifest: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Validates an app manifest. + https://api.slack.com/methods/apps.manifest.validate + """ + kwargs.update({"manifest": manifest}) + return self.api_call("apps.manifest.validate", params=kwargs) + def auth_revoke( self, *, @@ -3803,6 +3864,18 @@ def team_profile_get( kwargs.update({"visibility": visibility}) return self.api_call("team.profile.get", http_verb="GET", params=kwargs) + def tooling_tokens_rotate( + self, + *, + refresh_token: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Refresh a tooling token. + https://api.slack.com/methods/tooling.tokens.rotate + """ + kwargs.update({"refresh_token": refresh_token}) + return self.api_call("tooling.tokens.rotate", params=kwargs) + def usergroups_create( self, *, diff --git a/tests/slack_sdk_async/web/test_web_client_coverage.py b/tests/slack_sdk_async/web/test_web_client_coverage.py index 782eebe48..d400d38dc 100644 --- a/tests/slack_sdk_async/web/test_web_client_coverage.py +++ b/tests/slack_sdk_async/web/test_web_client_coverage.py @@ -15,9 +15,9 @@ class TestWebClientCoverage(unittest.TestCase): - # 240 endpoints as of Sept 4, 2021 + # 246 endpoints as of Oct 6, 2021 # Can be fetched by running `var methodNames = [].slice.call(document.getElementsByClassName('apiReferenceFilterableList__listItemLink')).map(e => e.href.replace("https://api.slack.com/methods/", ""));console.log(methodNames.toString());console.log(methodNames.length);` on https://api.slack.com/methods - all_api_methods = "admin.analytics.getFile,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.uninstall,admin.apps.approved.list,admin.apps.requests.list,admin.apps.restricted.list,admin.auth.policy.assignEntities,admin.auth.policy.getEntities,admin.auth.policy.removeEntities,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.convertToPrivate,admin.conversations.create,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.clearSettings,admin.users.session.getSettings,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,admin.users.session.setSettings,api.test,apps.connections.open,apps.event.authorizations.list,apps.uninstall,auth.revoke,auth.test,auth.teams.list,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.unfurl,chat.update,chat.scheduledMessages.list,conversations.acceptSharedInvite,conversations.approveSharedInvite,conversations.archive,conversations.close,conversations.create,conversations.declineSharedInvite,conversations.history,conversations.info,conversations.invite,conversations.inviteShared,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.listConnectInvites,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.comments.delete,files.delete,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,migration.exchange,oauth.access,oauth.token,oauth.v2.access,oauth.v2.exchange,openid.connect.token,openid.connect.userInfo,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.profile.get,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,apps.permissions.info,apps.permissions.request,apps.permissions.resources.list,apps.permissions.scopes.list,apps.permissions.users.list,apps.permissions.users.request,channels.archive,channels.create,channels.history,channels.info,channels.invite,channels.join,channels.leave,channels.list,channels.mark,channels.replies,channels.setPurpose,channels.setTopic,channels.unarchive,groups.archive,groups.create,groups.history,groups.info,groups.invite,groups.leave,groups.list,groups.mark,groups.open,groups.replies,groups.setPurpose,groups.setTopic,groups.unarchive,im.history,im.list,im.mark,im.open,im.replies,mpim.history,mpim.list,mpim.mark,mpim.open,mpim.replies".split( + all_api_methods = "admin.analytics.getFile,admin.apps.approve,admin.apps.clearResolution,admin.apps.restrict,admin.apps.uninstall,admin.apps.approved.list,admin.apps.requests.list,admin.apps.restricted.list,admin.auth.policy.assignEntities,admin.auth.policy.getEntities,admin.auth.policy.removeEntities,admin.barriers.create,admin.barriers.delete,admin.barriers.list,admin.barriers.update,admin.conversations.archive,admin.conversations.convertToPrivate,admin.conversations.create,admin.conversations.delete,admin.conversations.disconnectShared,admin.conversations.getConversationPrefs,admin.conversations.getCustomRetention,admin.conversations.getTeams,admin.conversations.invite,admin.conversations.removeCustomRetention,admin.conversations.rename,admin.conversations.search,admin.conversations.setConversationPrefs,admin.conversations.setCustomRetention,admin.conversations.setTeams,admin.conversations.unarchive,admin.conversations.ekm.listOriginalConnectedChannelInfo,admin.conversations.restrictAccess.addGroup,admin.conversations.restrictAccess.listGroups,admin.conversations.restrictAccess.removeGroup,admin.emoji.add,admin.emoji.addAlias,admin.emoji.list,admin.emoji.remove,admin.emoji.rename,admin.inviteRequests.approve,admin.inviteRequests.deny,admin.inviteRequests.list,admin.inviteRequests.approved.list,admin.inviteRequests.denied.list,admin.teams.admins.list,admin.teams.create,admin.teams.list,admin.teams.owners.list,admin.teams.settings.info,admin.teams.settings.setDefaultChannels,admin.teams.settings.setDescription,admin.teams.settings.setDiscoverability,admin.teams.settings.setIcon,admin.teams.settings.setName,admin.usergroups.addChannels,admin.usergroups.addTeams,admin.usergroups.listChannels,admin.usergroups.removeChannels,admin.users.assign,admin.users.invite,admin.users.list,admin.users.remove,admin.users.setAdmin,admin.users.setExpiration,admin.users.setOwner,admin.users.setRegular,admin.users.session.clearSettings,admin.users.session.getSettings,admin.users.session.invalidate,admin.users.session.list,admin.users.session.reset,admin.users.session.setSettings,api.test,apps.connections.open,apps.event.authorizations.list,apps.manifest.create,apps.manifest.delete,apps.manifest.export,apps.manifest.update,apps.manifest.validate,apps.uninstall,auth.revoke,auth.test,auth.teams.list,bots.info,calls.add,calls.end,calls.info,calls.update,calls.participants.add,calls.participants.remove,chat.delete,chat.deleteScheduledMessage,chat.getPermalink,chat.meMessage,chat.postEphemeral,chat.postMessage,chat.scheduleMessage,chat.unfurl,chat.update,chat.scheduledMessages.list,conversations.acceptSharedInvite,conversations.approveSharedInvite,conversations.archive,conversations.close,conversations.create,conversations.declineSharedInvite,conversations.history,conversations.info,conversations.invite,conversations.inviteShared,conversations.join,conversations.kick,conversations.leave,conversations.list,conversations.listConnectInvites,conversations.mark,conversations.members,conversations.open,conversations.rename,conversations.replies,conversations.setPurpose,conversations.setTopic,conversations.unarchive,dialog.open,dnd.endDnd,dnd.endSnooze,dnd.info,dnd.setSnooze,dnd.teamInfo,emoji.list,files.comments.delete,files.delete,files.info,files.list,files.revokePublicURL,files.sharedPublicURL,files.upload,files.remote.add,files.remote.info,files.remote.list,files.remote.remove,files.remote.share,files.remote.update,migration.exchange,oauth.access,oauth.token,oauth.v2.access,oauth.v2.exchange,openid.connect.token,openid.connect.userInfo,pins.add,pins.list,pins.remove,reactions.add,reactions.get,reactions.list,reactions.remove,reminders.add,reminders.complete,reminders.delete,reminders.info,reminders.list,rtm.connect,rtm.start,search.all,search.files,search.messages,stars.add,stars.list,stars.remove,team.accessLogs,team.billableInfo,team.info,team.integrationLogs,team.profile.get,tooling.tokens.rotate,usergroups.create,usergroups.disable,usergroups.enable,usergroups.list,usergroups.update,usergroups.users.list,usergroups.users.update,users.conversations,users.deletePhoto,users.getPresence,users.identity,users.info,users.list,users.lookupByEmail,users.setActive,users.setPhoto,users.setPresence,users.profile.get,users.profile.set,views.open,views.publish,views.push,views.update,workflows.stepCompleted,workflows.stepFailed,workflows.updateStep,apps.permissions.info,apps.permissions.request,apps.permissions.resources.list,apps.permissions.scopes.list,apps.permissions.users.list,apps.permissions.users.request,channels.archive,channels.create,channels.history,channels.info,channels.invite,channels.join,channels.leave,channels.list,channels.mark,channels.replies,channels.setPurpose,channels.setTopic,channels.unarchive,groups.archive,groups.create,groups.history,groups.info,groups.invite,groups.leave,groups.list,groups.mark,groups.open,groups.replies,groups.setPurpose,groups.setTopic,groups.unarchive,im.history,im.list,im.mark,im.open,im.replies,mpim.history,mpim.list,mpim.mark,mpim.open,mpim.replies".split( "," ) @@ -366,6 +366,23 @@ async def run_method(self, method_name, method, async_method): method(client_id="111.222", client_secret="xxx")["method"] ) await async_method(client_id="111.222", client_secret="xxx") + elif method_name == "apps_manifest_create": + self.api_methods_to_call.remove(method(manifest="{}")["method"]) + await async_method(manifest="{}") + elif method_name == "apps_manifest_delete": + self.api_methods_to_call.remove(method(app_id="AID123")["method"]) + await async_method(app_id="AID123") + elif method_name == "apps_manifest_export": + self.api_methods_to_call.remove(method(app_id="AID123")["method"]) + await async_method(app_id="AID123") + elif method_name == "apps_manifest_update": + self.api_methods_to_call.remove( + method(app_id="AID123", manifest="{}")["method"] + ) + await async_method(app_id="AID123", manifest="{}") + elif method_name == "apps_manifest_validate": + self.api_methods_to_call.remove(method(manifest="{}")["method"]) + await async_method(manifest="{}") elif method_name == "calls_add": self.api_methods_to_call.remove( method( @@ -698,6 +715,11 @@ async def run_method(self, method_name, method, async_method): elif method_name == "search_messages": self.api_methods_to_call.remove(method(query="Slack")["method"]) await async_method(query="Slack") + elif method_name == "tooling_tokens_rotate": + self.api_methods_to_call.remove( + method(refresh_token="xoxe-refresh")["method"] + ) + await async_method(refresh_token="xoxe-refresh") elif method_name == "usergroups_create": self.api_methods_to_call.remove( method(name="Engineering Team")["method"]