diff --git a/integration_tests/web/test_admin_conversations_restrictAccess.py b/integration_tests/web/test_admin_conversations_restrictAccess.py index 97915abe..54ee4e6c 100644 --- a/integration_tests/web/test_admin_conversations_restrictAccess.py +++ b/integration_tests/web/test_admin_conversations_restrictAccess.py @@ -40,10 +40,7 @@ def setUp(self): if self.channel_id is None: millis = int(round(time.time() * 1000)) channel_name = f"private-test-channel-{millis}" - self.channel_id = client.conversations_create( - name=channel_name, - is_private=True, - )[ + self.channel_id = client.conversations_create(name=channel_name, is_private=True,)[ "channel" ]["id"] diff --git a/integration_tests/web/test_calls.py b/integration_tests/web/test_calls.py index d285c03f..7f597937 100644 --- a/integration_tests/web/test_calls.py +++ b/integration_tests/web/test_calls.py @@ -24,12 +24,7 @@ def tearDown(self): def test_sync(self): client = self.sync_client - user_id = list( - filter( - lambda u: not u["deleted"] and "bot_id" not in u, - client.users_list(limit=50)["members"], - ) - )[ + user_id = list(filter(lambda u: not u["deleted"] and "bot_id" not in u, client.users_list(limit=50)["members"],))[ 0 ]["id"] diff --git a/slack_sdk/web/async_client.py b/slack_sdk/web/async_client.py index 099ba32c..04c4a4d7 100644 --- a/slack_sdk/web/async_client.py +++ b/slack_sdk/web/async_client.py @@ -3658,6 +3658,32 @@ async def files_completeUploadExternal( ) return await self.api_call("files.completeUploadExternal", params=kwargs) + async def functions_completeSuccess( + self, + *, + function_execution_id: str, + outputs: Dict[str, Any], + **kwargs, + ) -> AsyncSlackResponse: + """Signal the successful completion of a function + https://api.slack.com/methods/functions.completeSuccess + """ + kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) + return await self.api_call("functions.completeSuccess", params=kwargs) + + async def functions_completeError( + self, + *, + function_execution_id: str, + error: str, + **kwargs, + ) -> AsyncSlackResponse: + """Signal the failure to execute a function + https://api.slack.com/methods/functions.completeError + """ + kwargs.update({"function_execution_id": function_execution_id, "error": error}) + return await self.api_call("functions.completeError", params=kwargs) + # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. diff --git a/slack_sdk/web/client.py b/slack_sdk/web/client.py index b9e87d97..d06d0632 100644 --- a/slack_sdk/web/client.py +++ b/slack_sdk/web/client.py @@ -3649,6 +3649,32 @@ def files_completeUploadExternal( ) return self.api_call("files.completeUploadExternal", params=kwargs) + def functions_completeSuccess( + self, + *, + function_execution_id: str, + outputs: Dict[str, Any], + **kwargs, + ) -> SlackResponse: + """Signal the successful completion of a function + https://api.slack.com/methods/functions.completeSuccess + """ + kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) + return self.api_call("functions.completeSuccess", params=kwargs) + + def functions_completeError( + self, + *, + function_execution_id: str, + error: str, + **kwargs, + ) -> SlackResponse: + """Signal the failure to execute a function + https://api.slack.com/methods/functions.completeError + """ + kwargs.update({"function_execution_id": function_execution_id, "error": error}) + return self.api_call("functions.completeError", params=kwargs) + # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. diff --git a/slack_sdk/web/legacy_client.py b/slack_sdk/web/legacy_client.py index f636d197..466e1008 100644 --- a/slack_sdk/web/legacy_client.py +++ b/slack_sdk/web/legacy_client.py @@ -3660,6 +3660,32 @@ def files_completeUploadExternal( ) return self.api_call("files.completeUploadExternal", params=kwargs) + def functions_completeSuccess( + self, + *, + function_execution_id: str, + outputs: Dict[str, Any], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Signal the successful completion of a function + https://api.slack.com/methods/functions.completeSuccess + """ + kwargs.update({"function_execution_id": function_execution_id, "outputs": json.dumps(outputs)}) + return self.api_call("functions.completeSuccess", params=kwargs) + + def functions_completeError( + self, + *, + function_execution_id: str, + error: str, + **kwargs, + ) -> Union[Future, SlackResponse]: + """Signal the failure to execute a function + https://api.slack.com/methods/functions.completeError + """ + kwargs.update({"function_execution_id": function_execution_id, "error": error}) + return self.api_call("functions.completeError", params=kwargs) + # -------------------------- # Deprecated: groups.* # You can use conversations.* APIs instead. 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 3f3af516..08dc7365 100644 --- a/tests/slack_sdk_async/web/test_web_client_coverage.py +++ b/tests/slack_sdk_async/web/test_web_client_coverage.py @@ -640,6 +640,12 @@ async def run_method(self, method_name, method, async_method): elif method_name == "files_completeUploadExternal": self.api_methods_to_call.remove(method(files=[{"id": "F111"}])["method"]) await async_method(files=[{"id": "F111"}]) + elif method_name == "functions_completeSuccess": + self.api_methods_to_call.remove(method(function_execution_id="Fn111", outputs={"num": 123})) + await async_method(function_execution_id="Fn111", outputs={"num": 123}) + elif method_name == "functions_completeError": + self.api_methods_to_call.remove(method(function_execution_id="Fn111", error="something wrong")) + await async_method(function_execution_id="Fn111", error="something wrong") elif method_name == "migration_exchange": self.api_methods_to_call.remove(method(users="U123,U234")["method"]) method(users="U123,U234")