From c9c1af57d3f98d47fe8b913d90e0c5ab444d97c1 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 1 Oct 2025 19:58:02 -0700 Subject: [PATCH 1/8] ci: confirm expected autogenerated reference exists --- .github/workflows/ci-build.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 841cb37e..b1d2bfe9 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -53,6 +53,12 @@ jobs: pip install "SQLAlchemy>=1.4,<2" PYTHONPATH=$PWD:$PYTHONPATH pytest tests/slack_sdk/oauth/installation_store/test_sqlalchemy.py PYTHONPATH=$PWD:$PYTHONPATH pytest tests/slack_sdk/oauth/state_store/test_sqlalchemy.py + - name: Confirm expected autogenerated reference exists + run: | + python -m venv .venv + source .venv/bin/activate + bash ./scripts/generate_api_docs.sh + git diff --quiet - name: Upload test results to Codecov if: ${{ !cancelled() }} uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1 From a849403515ec2364a8e50ebf37c936d79fc14712 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 1 Oct 2025 20:13:03 -0700 Subject: [PATCH 2/8] ci: show the diff for the latest python only --- .github/workflows/ci-build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index b1d2bfe9..f019d0ef 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -28,6 +28,7 @@ jobs: env: CI_LARGE_SOCKET_MODE_PAYLOAD_TESTING_DISABLED: "1" FORCE_COLOR: "1" + LATEST_PYTHON_VERSION: "3.13" steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: @@ -54,10 +55,12 @@ jobs: PYTHONPATH=$PWD:$PYTHONPATH pytest tests/slack_sdk/oauth/installation_store/test_sqlalchemy.py PYTHONPATH=$PWD:$PYTHONPATH pytest tests/slack_sdk/oauth/state_store/test_sqlalchemy.py - name: Confirm expected autogenerated reference exists + if: ${{ matrix.python-version == env.LATEST_PYTHON_VERSION }} run: | python -m venv .venv source .venv/bin/activate bash ./scripts/generate_api_docs.sh + git diff git diff --quiet - name: Upload test results to Codecov if: ${{ !cancelled() }} From 48a713fbb83af7db25761b2ff379344850ed6bcf Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 1 Oct 2025 20:43:34 -0700 Subject: [PATCH 3/8] fix: skip open in ci --- scripts/generate_api_docs.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/generate_api_docs.sh b/scripts/generate_api_docs.sh index 8f128114..c2b6ca99 100755 --- a/scripts/generate_api_docs.sh +++ b/scripts/generate_api_docs.sh @@ -1,8 +1,8 @@ #!/bin/bash # Generate API documents from the latest source code -script_dir=`dirname $0` -cd ${script_dir}/.. +script_dir=$(dirname "$0") +cd "${script_dir}"/.. || exit pip install -U -r requirements/documentation.txt pip install -U -r requirements/optional.txt @@ -13,4 +13,6 @@ pdoc slack_sdk --html -o docs/reference cp -R docs/reference/slack_sdk/* docs/reference/ rm -rf docs/reference/slack_sdk -open docs/reference/index.html +if [[ -z "${CI:-}" ]]; then + open docs/reference/index.html +fi From 854f09fcc66e840e9561d3862411e4bbb657c305 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 1 Oct 2025 20:53:09 -0700 Subject: [PATCH 4/8] docs: autogenerate reference --- docs/reference/index.html | 238 ++++++++++++++++-- .../models/blocks/basic_components.html | 12 +- docs/reference/models/blocks/blocks.html | 118 +++++++++ docs/reference/models/blocks/index.html | 130 +++++++++- docs/reference/models/dialoags.html | 4 +- docs/reference/models/dialogs/index.html | 4 +- .../async_cacheable_installation_store.html | 8 +- .../cacheable_installation_store.html | 8 +- docs/reference/socket_mode/client.html | 4 +- .../socket_mode/websocket_client/index.html | 6 +- docs/reference/web/async_client.html | 230 +++++++++++++++-- docs/reference/web/client.html | 230 +++++++++++++++-- docs/reference/web/index.html | 230 +++++++++++++++-- docs/reference/web/internal_utils.html | 4 +- docs/reference/web/legacy_client.html | 230 +++++++++++++++-- docs/reference/webhook/client.html | 8 +- docs/reference/webhook/index.html | 8 +- 17 files changed, 1344 insertions(+), 128 deletions(-) diff --git a/docs/reference/index.html b/docs/reference/index.html index 8b9b9e3f..9b6a27e0 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -1856,7 +1856,7 @@

Classes

def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -2821,6 +2821,7 @@

Classes

link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. @@ -2840,11 +2841,12 @@

Classes

"link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -2868,6 +2870,7 @@

Classes

username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. @@ -2892,11 +2895,12 @@

Classes

"username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -2905,7 +2909,7 @@

Classes

*, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2916,6 +2920,7 @@

Classes

unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. @@ -2936,11 +2941,12 @@

Classes

"unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) @@ -2993,6 +2999,7 @@

Classes

parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. @@ -3010,6 +3017,7 @@

Classes

"parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -3018,7 +3026,7 @@

Classes

kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) @@ -5542,6 +5550,72 @@

Classes

# NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Add featured workflows to a channel. + https://api.slack.com/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """List the featured workflows for specified channels. + https://api.slack.com/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Remove featured workflows from a channel. + https://api.slack.com/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Set featured workflows for a channel. + https://api.slack.com/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, @@ -8019,7 +8093,7 @@

Methods

https://api.slack.com/methods/admin.users.invite

-def admin_users_list(self,
*,
team_id: str,
include_deactivated_user_workspaces: bool | None = None,
is_active: bool | None = None,
cursor: str | None = None,
limit: int | None = None,
**kwargs) ‑> SlackResponse
+def admin_users_list(self,
*,
team_id: str | None = None,
include_deactivated_user_workspaces: bool | None = None,
is_active: bool | None = None,
cursor: str | None = None,
limit: int | None = None,
**kwargs) ‑> SlackResponse
@@ -8029,7 +8103,7 @@

Methods

def admin_users_list(
     self,
     *,
-    team_id: str,
+    team_id: Optional[str] = None,
     include_deactivated_user_workspaces: Optional[bool] = None,
     is_active: Optional[bool] = None,
     cursor: Optional[str] = None,
@@ -9866,7 +9940,7 @@ 

Methods

https://api.slack.com/methods/chat.meMessage

-def chat_postEphemeral(self,
*,
channel: str,
user: str,
text: str | None = None,
as_user: bool | None = None,
attachments: str | Sequence[Dict | Attachment] | None = None,
blocks: str | Sequence[Dict | Block] | None = None,
thread_ts: str | None = None,
icon_emoji: str | None = None,
icon_url: str | None = None,
link_names: bool | None = None,
username: str | None = None,
parse: str | None = None,
**kwargs) ‑> SlackResponse
+def chat_postEphemeral(self,
*,
channel: str,
user: str,
text: str | None = None,
as_user: bool | None = None,
attachments: str | Sequence[Dict | Attachment] | None = None,
blocks: str | Sequence[Dict | Block] | None = None,
thread_ts: str | None = None,
icon_emoji: str | None = None,
icon_url: str | None = None,
link_names: bool | None = None,
username: str | None = None,
parse: str | None = None,
markdown_text: str | None = None,
**kwargs) ‑> SlackResponse
@@ -9888,6 +9962,7 @@

Methods

link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. @@ -9907,11 +9982,12 @@

Methods

"link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs)
@@ -9919,7 +9995,7 @@

Methods

https://api.slack.com/methods/chat.postEphemeral

-def chat_postMessage(self,
*,
channel: str,
text: str | None = None,
as_user: bool | None = None,
attachments: str | Sequence[Dict | Attachment] | None = None,
blocks: str | Sequence[Dict | Block] | None = None,
thread_ts: str | None = None,
reply_broadcast: bool | None = None,
unfurl_links: bool | None = None,
unfurl_media: bool | None = None,
container_id: str | None = None,
icon_emoji: str | None = None,
icon_url: str | None = None,
mrkdwn: bool | None = None,
link_names: bool | None = None,
username: str | None = None,
parse: str | None = None,
metadata: Dict | Metadata | None = None,
**kwargs) ‑> SlackResponse
+def chat_postMessage(self,
*,
channel: str,
text: str | None = None,
as_user: bool | None = None,
attachments: str | Sequence[Dict | Attachment] | None = None,
blocks: str | Sequence[Dict | Block] | None = None,
thread_ts: str | None = None,
reply_broadcast: bool | None = None,
unfurl_links: bool | None = None,
unfurl_media: bool | None = None,
container_id: str | None = None,
icon_emoji: str | None = None,
icon_url: str | None = None,
mrkdwn: bool | None = None,
link_names: bool | None = None,
username: str | None = None,
parse: str | None = None,
metadata: Dict | Metadata | None = None,
markdown_text: str | None = None,
**kwargs) ‑> SlackResponse
@@ -9946,6 +10022,7 @@

Methods

username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. @@ -9970,11 +10047,12 @@

Methods

"username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs)
@@ -9982,7 +10060,7 @@

Methods

https://api.slack.com/methods/chat.postMessage

-def chat_scheduleMessage(self,
*,
channel: str,
post_at: str | int,
text: str,
as_user: bool | None = None,
attachments: str | Sequence[Dict | Attachment] | None = None,
blocks: str | Sequence[Dict | Block] | None = None,
thread_ts: str | None = None,
parse: str | None = None,
reply_broadcast: bool | None = None,
unfurl_links: bool | None = None,
unfurl_media: bool | None = None,
link_names: bool | None = None,
metadata: Dict | Metadata | None = None,
**kwargs) ‑> SlackResponse
+def chat_scheduleMessage(self,
*,
channel: str,
post_at: str | int,
text: str | None = None,
as_user: bool | None = None,
attachments: str | Sequence[Dict | Attachment] | None = None,
blocks: str | Sequence[Dict | Block] | None = None,
thread_ts: str | None = None,
parse: str | None = None,
reply_broadcast: bool | None = None,
unfurl_links: bool | None = None,
unfurl_media: bool | None = None,
link_names: bool | None = None,
metadata: Dict | Metadata | None = None,
markdown_text: str | None = None,
**kwargs) ‑> SlackResponse
@@ -9994,7 +10072,7 @@

Methods

*, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -10005,6 +10083,7 @@

Methods

unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. @@ -10025,11 +10104,12 @@

Methods

"unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs)
@@ -10120,7 +10200,7 @@

Methods

https://api.slack.com/methods/chat.unfurl

-def chat_update(self,
*,
channel: str,
ts: str,
text: str | None = None,
attachments: str | Sequence[Dict | Attachment] | None = None,
blocks: str | Sequence[Dict | Block] | None = None,
as_user: bool | None = None,
file_ids: str | Sequence[str] | None = None,
link_names: bool | None = None,
parse: str | None = None,
reply_broadcast: bool | None = None,
metadata: Dict | Metadata | None = None,
**kwargs) ‑> SlackResponse
+def chat_update(self,
*,
channel: str,
ts: str,
text: str | None = None,
attachments: str | Sequence[Dict | Attachment] | None = None,
blocks: str | Sequence[Dict | Block] | None = None,
as_user: bool | None = None,
file_ids: str | Sequence[str] | None = None,
link_names: bool | None = None,
parse: str | None = None,
reply_broadcast: bool | None = None,
metadata: Dict | Metadata | None = None,
markdown_text: str | None = None,
**kwargs) ‑> SlackResponse
@@ -10141,6 +10221,7 @@

Methods

parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. @@ -10158,6 +10239,7 @@

Methods

"parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -10166,7 +10248,7 @@

Methods

kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs)
@@ -14194,6 +14276,116 @@

Methods

to learn more about updating views and avoiding race conditions with the hash argument. https://api.slack.com/methods/views.update

+ +
+
+ +Expand source code + +
def workflows_featured_add(
+    self,
+    *,
+    channel_id: str,
+    trigger_ids: Union[str, Sequence[str]],
+    **kwargs,
+) -> SlackResponse:
+    """Add featured workflows to a channel.
+    https://api.slack.com/methods/workflows.featured.add
+    """
+    kwargs.update({"channel_id": channel_id})
+    if isinstance(trigger_ids, (list, tuple)):
+        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
+    else:
+        kwargs.update({"trigger_ids": trigger_ids})
+    return self.api_call("workflows.featured.add", params=kwargs)
+
+

Add featured workflows to a channel. +https://api.slack.com/methods/workflows.featured.add

+
+ +
+
+ +Expand source code + +
def workflows_featured_list(
+    self,
+    *,
+    channel_ids: Union[str, Sequence[str]],
+    **kwargs,
+) -> SlackResponse:
+    """List the featured workflows for specified channels.
+    https://api.slack.com/methods/workflows.featured.list
+    """
+    if isinstance(channel_ids, (list, tuple)):
+        kwargs.update({"channel_ids": ",".join(channel_ids)})
+    else:
+        kwargs.update({"channel_ids": channel_ids})
+    return self.api_call("workflows.featured.list", params=kwargs)
+
+

List the featured workflows for specified channels. +https://api.slack.com/methods/workflows.featured.list

+
+ +
+
+ +Expand source code + +
def workflows_featured_remove(
+    self,
+    *,
+    channel_id: str,
+    trigger_ids: Union[str, Sequence[str]],
+    **kwargs,
+) -> SlackResponse:
+    """Remove featured workflows from a channel.
+    https://api.slack.com/methods/workflows.featured.remove
+    """
+    kwargs.update({"channel_id": channel_id})
+    if isinstance(trigger_ids, (list, tuple)):
+        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
+    else:
+        kwargs.update({"trigger_ids": trigger_ids})
+    return self.api_call("workflows.featured.remove", params=kwargs)
+
+

Remove featured workflows from a channel. +https://api.slack.com/methods/workflows.featured.remove

+
+ +
+
+ +Expand source code + +
def workflows_featured_set(
+    self,
+    *,
+    channel_id: str,
+    trigger_ids: Union[str, Sequence[str]],
+    **kwargs,
+) -> SlackResponse:
+    """Set featured workflows for a channel.
+    https://api.slack.com/methods/workflows.featured.set
+    """
+    kwargs.update({"channel_id": channel_id})
+    if isinstance(trigger_ids, (list, tuple)):
+        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
+    else:
+        kwargs.update({"trigger_ids": trigger_ids})
+    return self.api_call("workflows.featured.set", params=kwargs)
+
+

Set featured workflows for a channel. +https://api.slack.com/methods/workflows.featured.set

+
def workflows_stepCompleted(self, *, workflow_step_execute_id: str, outputs: dict | None = None, **kwargs) ‑> SlackResponse
@@ -14554,13 +14746,13 @@

Inherited members

http_resp = opener.open(req, timeout=self.timeout) else: http_resp = urlopen(req, context=self.ssl, timeout=self.timeout) - charset: str = http_resp.headers.get_content_charset() or "utf-8" # type: ignore[union-attr] - response_body: str = http_resp.read().decode(charset) # type: ignore[union-attr] + charset: str = http_resp.headers.get_content_charset() or "utf-8" + response_body: str = http_resp.read().decode(charset) resp = WebhookResponse( url=url, - status_code=http_resp.status, # type: ignore[union-attr] + status_code=http_resp.status, body=response_body, - headers=http_resp.headers, # type: ignore[arg-type, union-attr] + headers=http_resp.headers, # type: ignore[arg-type] ) _debug_log_response(self.logger, resp) return resp @@ -15077,6 +15269,10 @@

WebClientviews_publish
  • views_push
  • views_update
  • +
  • workflows_featured_add
  • +
  • workflows_featured_list
  • +
  • workflows_featured_remove
  • +
  • workflows_featured_set
  • workflows_stepCompleted
  • workflows_stepFailed
  • workflows_updateStep
  • diff --git a/docs/reference/models/blocks/basic_components.html b/docs/reference/models/blocks/basic_components.html index ac7ce17a..7b56352d 100644 --- a/docs/reference/models/blocks/basic_components.html +++ b/docs/reference/models/blocks/basic_components.html @@ -56,7 +56,7 @@

    Classes

    Expand source code
    class ConfirmObject(JsonObject):
    -    attributes = {}  # type: ignore[assignment] # no attributes because to_dict has unique implementations
    +    attributes: Set[str] = set()
     
         title_max_length = 100
         text_max_length = 300
    @@ -164,7 +164,7 @@ 

    Ancestors

    Class variables

    -
    var attributes
    +
    var attributes : Set[str]

    The type of the None singleton.

    @@ -546,7 +546,7 @@

    Inherited members

    different required formats in different situations """ - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementations + attributes: Set[str] = set() logger = logging.getLogger(__name__) label_max_length = 75 @@ -719,7 +719,7 @@

    Ancestors

    Class variables

    -
    var attributes
    +
    var attributes : Set[str]

    The type of the None singleton.

    @@ -828,7 +828,7 @@

    Inherited members

    different required formats in different situations """ - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementations + attributes: Set[str] = set() label_max_length = 75 options_max_length = 100 logger = logging.getLogger(__name__) @@ -932,7 +932,7 @@

    Ancestors

    Class variables

    -
    var attributes
    +
    var attributes : Set[str]

    The type of the None singleton.

    diff --git a/docs/reference/models/blocks/blocks.html b/docs/reference/models/blocks/blocks.html index a995554f..efb2e41a 100644 --- a/docs/reference/models/blocks/blocks.html +++ b/docs/reference/models/blocks/blocks.html @@ -228,6 +228,8 @@

    Inherited members

    return CallBlock(**block) elif type == HeaderBlock.type: return HeaderBlock(**block) + elif type == MarkdownBlock.type: + return MarkdownBlock(**block) elif type == VideoBlock.type: return VideoBlock(**block) elif type == RichTextBlock.type: @@ -261,6 +263,7 @@

    Subclasses

  • HeaderBlock
  • ImageBlock
  • InputBlock
  • +
  • MarkdownBlock
  • RichTextBlock
  • SectionBlock
  • VideoBlock
  • @@ -1098,6 +1101,113 @@

    Inherited members

    +
    +class MarkdownBlock +(*, text: str, block_id: str | None = None, **others: dict) +
    +
    +
    + +Expand source code + +
    class MarkdownBlock(Block):
    +    type = "markdown"
    +    text_max_length = 12000
    +
    +    @property
    +    def attributes(self) -> Set[str]:  # type: ignore[override]
    +        return super().attributes.union({"text"})
    +
    +    def __init__(
    +        self,
    +        *,
    +        text: str,
    +        block_id: Optional[str] = None,
    +        **others: dict,
    +    ):
    +        """Displays formatted markdown.
    +        https://docs.slack.dev/reference/block-kit/blocks/markdown-block/
    +
    +        Args:
    +            block_id: A string acting as a unique identifier for a block. If not specified, one will be generated.
    +                Maximum length for this field is 255 characters.
    +                block_id should be unique for each message and each iteration of a message.
    +                If a message is updated, use a new block_id.
    +            text (required): The standard markdown-formatted text. Limit 12,000 characters max.
    +        """
    +        super().__init__(type=self.type, block_id=block_id)
    +        show_unknown_key_warning(self, others)
    +
    +        self.text = text
    +
    +    @JsonValidator("text attribute must be specified")
    +    def _validate_text(self):
    +        return self.text != ""
    +
    +    @JsonValidator(f"text attribute cannot exceed {text_max_length} characters")
    +    def _validate_alt_text_length(self):
    +        return len(self.text) <= self.text_max_length
    +
    +

    Blocks are a series of components that can be combined +to create visually rich and compellingly interactive messages. +https://api.slack.com/reference/block-kit/blocks

    +

    Displays formatted markdown. +https://docs.slack.dev/reference/block-kit/blocks/markdown-block/

    +

    Args

    +
    +
    block_id
    +
    A string acting as a unique identifier for a block. If not specified, one will be generated. +Maximum length for this field is 255 characters. +block_id should be unique for each message and each iteration of a message. +If a message is updated, use a new block_id.
    +
    text : required
    +
    The standard markdown-formatted text. Limit 12,000 characters max.
    +
    +

    Ancestors

    + +

    Class variables

    +
    +
    var text_max_length
    +
    +

    The type of the None singleton.

    +
    +
    var type
    +
    +

    The type of the None singleton.

    +
    +
    +

    Instance variables

    +
    +
    prop attributes : Set[str]
    +
    +
    + +Expand source code + +
    @property
    +def attributes(self) -> Set[str]:  # type: ignore[override]
    +    return super().attributes.union({"text"})
    +
    +

    Build an unordered collection of unique elements.

    +
    +
    +

    Inherited members

    + +
    class RichTextBlock (*,
    elements: Sequence[dict | RichTextElement],
    block_id: str | None = None,
    **others: dict)
    @@ -1652,6 +1762,14 @@

    MarkdownBlock

    + + +
  • RichTextBlock

    • attributes
    • diff --git a/docs/reference/models/blocks/index.html b/docs/reference/models/blocks/index.html index d3327ac9..7a69ec6e 100644 --- a/docs/reference/models/blocks/index.html +++ b/docs/reference/models/blocks/index.html @@ -250,6 +250,8 @@

      Inherited members

      return CallBlock(**block) elif type == HeaderBlock.type: return HeaderBlock(**block) + elif type == MarkdownBlock.type: + return MarkdownBlock(**block) elif type == VideoBlock.type: return VideoBlock(**block) elif type == RichTextBlock.type: @@ -283,6 +285,7 @@

      Subclasses

    • HeaderBlock
    • ImageBlock
    • InputBlock
    • +
    • MarkdownBlock
    • RichTextBlock
    • SectionBlock
    • VideoBlock
    • @@ -1130,7 +1133,7 @@

      Inherited members

      Expand source code
      class ConfirmObject(JsonObject):
      -    attributes = {}  # type: ignore[assignment] # no attributes because to_dict has unique implementations
      +    attributes: Set[str] = set()
       
           title_max_length = 100
           text_max_length = 300
      @@ -1238,7 +1241,7 @@ 

      Ancestors

    Class variables

    -
    var attributes
    +
    var attributes : Set[str]

    The type of the None singleton.

    @@ -3579,6 +3582,113 @@

    Inherited members

  • +
    +class MarkdownBlock +(*, text: str, block_id: str | None = None, **others: dict) +
    +
    +
    + +Expand source code + +
    class MarkdownBlock(Block):
    +    type = "markdown"
    +    text_max_length = 12000
    +
    +    @property
    +    def attributes(self) -> Set[str]:  # type: ignore[override]
    +        return super().attributes.union({"text"})
    +
    +    def __init__(
    +        self,
    +        *,
    +        text: str,
    +        block_id: Optional[str] = None,
    +        **others: dict,
    +    ):
    +        """Displays formatted markdown.
    +        https://docs.slack.dev/reference/block-kit/blocks/markdown-block/
    +
    +        Args:
    +            block_id: A string acting as a unique identifier for a block. If not specified, one will be generated.
    +                Maximum length for this field is 255 characters.
    +                block_id should be unique for each message and each iteration of a message.
    +                If a message is updated, use a new block_id.
    +            text (required): The standard markdown-formatted text. Limit 12,000 characters max.
    +        """
    +        super().__init__(type=self.type, block_id=block_id)
    +        show_unknown_key_warning(self, others)
    +
    +        self.text = text
    +
    +    @JsonValidator("text attribute must be specified")
    +    def _validate_text(self):
    +        return self.text != ""
    +
    +    @JsonValidator(f"text attribute cannot exceed {text_max_length} characters")
    +    def _validate_alt_text_length(self):
    +        return len(self.text) <= self.text_max_length
    +
    +

    Blocks are a series of components that can be combined +to create visually rich and compellingly interactive messages. +https://api.slack.com/reference/block-kit/blocks

    +

    Displays formatted markdown. +https://docs.slack.dev/reference/block-kit/blocks/markdown-block/

    +

    Args

    +
    +
    block_id
    +
    A string acting as a unique identifier for a block. If not specified, one will be generated. +Maximum length for this field is 255 characters. +block_id should be unique for each message and each iteration of a message. +If a message is updated, use a new block_id.
    +
    text : required
    +
    The standard markdown-formatted text. Limit 12,000 characters max.
    +
    +

    Ancestors

    + +

    Class variables

    +
    +
    var text_max_length
    +
    +

    The type of the None singleton.

    +
    +
    var type
    +
    +

    The type of the None singleton.

    +
    +
    +

    Instance variables

    +
    +
    prop attributes : Set[str]
    +
    +
    + +Expand source code + +
    @property
    +def attributes(self) -> Set[str]:  # type: ignore[override]
    +    return super().attributes.union({"text"})
    +
    +

    Build an unordered collection of unique elements.

    +
    +
    +

    Inherited members

    + +
    class MarkdownTextObject (*, text: str, verbatim: bool | None = None) @@ -3936,7 +4046,7 @@

    Inherited members

    different required formats in different situations """ - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementations + attributes: Set[str] = set() logger = logging.getLogger(__name__) label_max_length = 75 @@ -4109,7 +4219,7 @@

    Ancestors

    Class variables

    -
    var attributes
    +
    var attributes : Set[str]

    The type of the None singleton.

    @@ -4218,7 +4328,7 @@

    Inherited members

    different required formats in different situations """ - attributes = {} # type: ignore[assignment] # no attributes because to_dict has unique implementations + attributes: Set[str] = set() label_max_length = 75 options_max_length = 100 logger = logging.getLogger(__name__) @@ -4322,7 +4432,7 @@

    Ancestors

    Class variables

    -
    var attributes
    +
    var attributes : Set[str]

    The type of the None singleton.

    @@ -7465,6 +7575,14 @@

    LinkButtonElement

  • +

    MarkdownBlock

    + +
  • +
  • MarkdownTextObject

    • attributes
    • diff --git a/docs/reference/models/dialoags.html b/docs/reference/models/dialoags.html index 2657bdbe..d850bd9c 100644 --- a/docs/reference/models/dialoags.html +++ b/docs/reference/models/dialoags.html @@ -247,7 +247,7 @@

      Inherited members

      Expand source code
      class DialogBuilder(JsonObject):
      -    attributes = {}  # type: ignore[assignment] # no attributes because to_dict has unique implementation
      +    attributes: Set[str] = set()
       
           _callback_id: Optional[str]
           _elements: List[Union[DialogTextComponent, AbstractDialogSelector]]
      @@ -687,7 +687,7 @@ 

      Ancestors

    Class variables

    -
    var attributes
    +
    var attributes : Set[str]

    The type of the None singleton.

    diff --git a/docs/reference/models/dialogs/index.html b/docs/reference/models/dialogs/index.html index d077673e..85cc3757 100644 --- a/docs/reference/models/dialogs/index.html +++ b/docs/reference/models/dialogs/index.html @@ -247,7 +247,7 @@

    Inherited members

    Expand source code
    class DialogBuilder(JsonObject):
    -    attributes = {}  # type: ignore[assignment] # no attributes because to_dict has unique implementation
    +    attributes: Set[str] = set()
     
         _callback_id: Optional[str]
         _elements: List[Union[DialogTextComponent, AbstractDialogSelector]]
    @@ -687,7 +687,7 @@ 

    Ancestors

    Class variables

    -
    var attributes
    +
    var attributes : Set[str]

    The type of the None singleton.

    diff --git a/docs/reference/oauth/installation_store/async_cacheable_installation_store.html b/docs/reference/oauth/installation_store/async_cacheable_installation_store.html index 100c62c4..a3820517 100644 --- a/docs/reference/oauth/installation_store/async_cacheable_installation_store.html +++ b/docs/reference/oauth/installation_store/async_cacheable_installation_store.html @@ -74,7 +74,7 @@

    Classes

    def logger(self) -> Logger: return self.underlying.logger - async def async_save(self, installation: Installation): # type: ignore[explicit-override] + async def async_save(self, installation: Installation): # Invalidate cache data for update operations key = f"{installation.enterprise_id or ''}-{installation.team_id or ''}" if key in self.cached_bots: @@ -84,14 +84,14 @@

    Classes

    self.cached_installations.pop(key) return await self.underlying.async_save(installation) - async def async_save_bot(self, bot: Bot): # type: ignore[explicit-override] + async def async_save_bot(self, bot: Bot): # Invalidate cache data for update operations key = f"{bot.enterprise_id or ''}-{bot.team_id or ''}" if key in self.cached_bots: self.cached_bots.pop(key) return await self.underlying.async_save_bot(bot) - async def async_find_bot( # type: ignore[explicit-override] + async def async_find_bot( self, *, enterprise_id: Optional[str], @@ -112,7 +112,7 @@

    Classes

    self.cached_bots[key] = bot return bot - async def async_find_installation( # type: ignore[explicit-override] + async def async_find_installation( self, *, enterprise_id: Optional[str], diff --git a/docs/reference/oauth/installation_store/cacheable_installation_store.html b/docs/reference/oauth/installation_store/cacheable_installation_store.html index 5e2802f1..54bb7662 100644 --- a/docs/reference/oauth/installation_store/cacheable_installation_store.html +++ b/docs/reference/oauth/installation_store/cacheable_installation_store.html @@ -74,7 +74,7 @@

    Classes

    def logger(self) -> Logger: return self.underlying.logger - def save(self, installation: Installation): # type: ignore[explicit-override] + def save(self, installation: Installation): # Invalidate cache data for update operations key = f"{installation.enterprise_id or ''}-{installation.team_id or ''}" if key in self.cached_bots: @@ -85,14 +85,14 @@

    Classes

    return self.underlying.save(installation) - def save_bot(self, bot: Bot): # type: ignore[explicit-override] + def save_bot(self, bot: Bot): # Invalidate cache data for update operations key = f"{bot.enterprise_id or ''}-{bot.team_id or ''}" if key in self.cached_bots: self.cached_bots.pop(key) return self.underlying.save_bot(bot) - def find_bot( # type: ignore[explicit-override] + def find_bot( self, *, enterprise_id: Optional[str], @@ -113,7 +113,7 @@

    Classes

    self.cached_bots[key] = bot return bot - def find_installation( # type: ignore[explicit-override] + def find_installation( self, *, enterprise_id: Optional[str], diff --git a/docs/reference/socket_mode/client.html b/docs/reference/socket_mode/client.html index dda047bd..3c8c615f 100644 --- a/docs/reference/socket_mode/client.html +++ b/docs/reference/socket_mode/client.html @@ -167,7 +167,7 @@

    Classes

    for listener in self.message_listeners: try: - listener(self, message, raw_message) # type: ignore[call-arg, arg-type] + listener(self, message, raw_message) # type: ignore[call-arg, arg-type, misc] except Exception as e: self.logger.exception(f"Failed to run a message listener: {e}") @@ -431,7 +431,7 @@

    Methods

    for listener in self.message_listeners: try: - listener(self, message, raw_message) # type: ignore[call-arg, arg-type] + listener(self, message, raw_message) # type: ignore[call-arg, arg-type, misc] except Exception as e: self.logger.exception(f"Failed to run a message listener: {e}") diff --git a/docs/reference/socket_mode/websocket_client/index.html b/docs/reference/socket_mode/websocket_client/index.html index 20a1f0ac..6cce0c78 100644 --- a/docs/reference/socket_mode/websocket_client/index.html +++ b/docs/reference/socket_mode/websocket_client/index.html @@ -91,7 +91,7 @@

    Classes

    auto_reconnect_enabled: bool default_auto_reconnect_enabled: bool - close: bool # type: ignore[assignment] + closed: bool connect_operation_lock: Lock on_open_listeners: List[Callable[[WebSocketApp], None]] @@ -258,7 +258,7 @@

    Classes

    ) raise e - def close(self) -> None: # type: ignore[explicit-override, no-redef] + def close(self) -> None: self.closed = True self.auto_reconnect_enabled = False self.disconnect() @@ -384,7 +384,7 @@

    Methods

    Expand source code -
    def close(self) -> None:  # type: ignore[explicit-override, no-redef]
    +
    def close(self) -> None:
         self.closed = True
         self.auto_reconnect_enabled = False
         self.disconnect()
    diff --git a/docs/reference/web/async_client.html b/docs/reference/web/async_client.html
    index 86403ce5..1ad20c35 100644
    --- a/docs/reference/web/async_client.html
    +++ b/docs/reference/web/async_client.html
    @@ -1752,7 +1752,7 @@ 

    Classes

    async def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -2717,6 +2717,7 @@

    Classes

    link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends an ephemeral message to a user in a channel. @@ -2736,11 +2737,12 @@

    Classes

    "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postEphemeral", json=kwargs) @@ -2764,6 +2766,7 @@

    Classes

    username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends a message to a channel. @@ -2788,11 +2791,12 @@

    Classes

    "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postMessage", json=kwargs) @@ -2801,7 +2805,7 @@

    Classes

    *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2812,6 +2816,7 @@

    Classes

    unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Schedules a message. @@ -2832,11 +2837,12 @@

    Classes

    "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.scheduleMessage", json=kwargs) @@ -2889,6 +2895,7 @@

    Classes

    parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Updates a message in a channel. @@ -2906,6 +2913,7 @@

    Classes

    "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2914,7 +2922,7 @@

    Classes

    kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return await self.api_call("chat.update", json=kwargs) @@ -5438,6 +5446,72 @@

    Classes

    # NOTE: Intentionally using json for the "view" parameter return await self.api_call("views.publish", json=kwargs) + async def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Add featured workflows to a channel. + https://api.slack.com/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.add", params=kwargs) + + async def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """List the featured workflows for specified channels. + https://api.slack.com/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return await self.api_call("workflows.featured.list", params=kwargs) + + async def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Remove featured workflows from a channel. + https://api.slack.com/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.remove", params=kwargs) + + async def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> AsyncSlackResponse: + """Set featured workflows for a channel. + https://api.slack.com/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return await self.api_call("workflows.featured.set", params=kwargs) + async def workflows_stepCompleted( self, *, @@ -7915,7 +7989,7 @@

    Methods

    https://api.slack.com/methods/admin.users.invite

    -async def admin_users_list(self,
    *,
    team_id: str,
    include_deactivated_user_workspaces: bool | None = None,
    is_active: bool | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> AsyncSlackResponse
    +async def admin_users_list(self,
    *,
    team_id: str | None = None,
    include_deactivated_user_workspaces: bool | None = None,
    is_active: bool | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> AsyncSlackResponse
    @@ -7925,7 +7999,7 @@

    Methods

    async def admin_users_list(
         self,
         *,
    -    team_id: str,
    +    team_id: Optional[str] = None,
         include_deactivated_user_workspaces: Optional[bool] = None,
         is_active: Optional[bool] = None,
         cursor: Optional[str] = None,
    @@ -9762,7 +9836,7 @@ 

    Methods

    https://api.slack.com/methods/chat.meMessage

    -async def chat_postEphemeral(self,
    *,
    channel: str,
    user: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    **kwargs) ‑> AsyncSlackResponse
    +async def chat_postEphemeral(self,
    *,
    channel: str,
    user: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> AsyncSlackResponse
    @@ -9784,6 +9858,7 @@

    Methods

    link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends an ephemeral message to a user in a channel. @@ -9803,11 +9878,12 @@

    Methods

    "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postEphemeral", json=kwargs)
    @@ -9815,7 +9891,7 @@

    Methods

    https://api.slack.com/methods/chat.postEphemeral

    -async def chat_postMessage(self,
    *,
    channel: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    container_id: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    mrkdwn: bool | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> AsyncSlackResponse
    +async def chat_postMessage(self,
    *,
    channel: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    container_id: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    mrkdwn: bool | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> AsyncSlackResponse
    @@ -9842,6 +9918,7 @@

    Methods

    username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Sends a message to a channel. @@ -9866,11 +9943,12 @@

    Methods

    "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.postMessage", json=kwargs)
    @@ -9878,7 +9956,7 @@

    Methods

    https://api.slack.com/methods/chat.postMessage

    -async def chat_scheduleMessage(self,
    *,
    channel: str,
    post_at: str | int,
    text: str,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    link_names: bool | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> AsyncSlackResponse
    +async def chat_scheduleMessage(self,
    *,
    channel: str,
    post_at: str | int,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    link_names: bool | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> AsyncSlackResponse
    @@ -9890,7 +9968,7 @@

    Methods

    *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -9901,6 +9979,7 @@

    Methods

    unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Schedules a message. @@ -9921,11 +10000,12 @@

    Methods

    "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return await self.api_call("chat.scheduleMessage", json=kwargs)
    @@ -10016,7 +10096,7 @@

    Methods

    https://api.slack.com/methods/chat.unfurl

    -async def chat_update(self,
    *,
    channel: str,
    ts: str,
    text: str | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    as_user: bool | None = None,
    file_ids: str | Sequence[str] | None = None,
    link_names: bool | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> AsyncSlackResponse
    +async def chat_update(self,
    *,
    channel: str,
    ts: str,
    text: str | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    as_user: bool | None = None,
    file_ids: str | Sequence[str] | None = None,
    link_names: bool | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> AsyncSlackResponse
    @@ -10037,6 +10117,7 @@

    Methods

    parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> AsyncSlackResponse: """Updates a message in a channel. @@ -10054,6 +10135,7 @@

    Methods

    "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -10062,7 +10144,7 @@

    Methods

    kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return await self.api_call("chat.update", json=kwargs)
  • @@ -14090,6 +14172,116 @@

    Methods

    to learn more about updating views and avoiding race conditions with the hash argument. https://api.slack.com/methods/views.update

    + +
    +
    + +Expand source code + +
    async def workflows_featured_add(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> AsyncSlackResponse:
    +    """Add featured workflows to a channel.
    +    https://api.slack.com/methods/workflows.featured.add
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return await self.api_call("workflows.featured.add", params=kwargs)
    +
    +

    Add featured workflows to a channel. +https://api.slack.com/methods/workflows.featured.add

    +
    + +
    +
    + +Expand source code + +
    async def workflows_featured_list(
    +    self,
    +    *,
    +    channel_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> AsyncSlackResponse:
    +    """List the featured workflows for specified channels.
    +    https://api.slack.com/methods/workflows.featured.list
    +    """
    +    if isinstance(channel_ids, (list, tuple)):
    +        kwargs.update({"channel_ids": ",".join(channel_ids)})
    +    else:
    +        kwargs.update({"channel_ids": channel_ids})
    +    return await self.api_call("workflows.featured.list", params=kwargs)
    +
    +

    List the featured workflows for specified channels. +https://api.slack.com/methods/workflows.featured.list

    +
    + +
    +
    + +Expand source code + +
    async def workflows_featured_remove(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> AsyncSlackResponse:
    +    """Remove featured workflows from a channel.
    +    https://api.slack.com/methods/workflows.featured.remove
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return await self.api_call("workflows.featured.remove", params=kwargs)
    +
    +

    Remove featured workflows from a channel. +https://api.slack.com/methods/workflows.featured.remove

    +
    + +
    +
    + +Expand source code + +
    async def workflows_featured_set(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> AsyncSlackResponse:
    +    """Set featured workflows for a channel.
    +    https://api.slack.com/methods/workflows.featured.set
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return await self.api_call("workflows.featured.set", params=kwargs)
    +
    +

    Set featured workflows for a channel. +https://api.slack.com/methods/workflows.featured.set

    +
    async def workflows_stepCompleted(self, *, workflow_step_execute_id: str, outputs: dict | None = None, **kwargs) ‑> AsyncSlackResponse
    @@ -14513,6 +14705,10 @@

    views_publish
  • views_push
  • views_update
  • +
  • workflows_featured_add
  • +
  • workflows_featured_list
  • +
  • workflows_featured_remove
  • +
  • workflows_featured_set
  • workflows_stepCompleted
  • workflows_stepFailed
  • workflows_updateStep
  • diff --git a/docs/reference/web/client.html b/docs/reference/web/client.html index 28212dff..a3765bfa 100644 --- a/docs/reference/web/client.html +++ b/docs/reference/web/client.html @@ -1752,7 +1752,7 @@

    Classes

    def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -2717,6 +2717,7 @@

    Classes

    link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. @@ -2736,11 +2737,12 @@

    Classes

    "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -2764,6 +2766,7 @@

    Classes

    username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. @@ -2788,11 +2791,12 @@

    Classes

    "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -2801,7 +2805,7 @@

    Classes

    *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2812,6 +2816,7 @@

    Classes

    unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. @@ -2832,11 +2837,12 @@

    Classes

    "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) @@ -2889,6 +2895,7 @@

    Classes

    parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. @@ -2906,6 +2913,7 @@

    Classes

    "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2914,7 +2922,7 @@

    Classes

    kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) @@ -5438,6 +5446,72 @@

    Classes

    # NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Add featured workflows to a channel. + https://api.slack.com/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """List the featured workflows for specified channels. + https://api.slack.com/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Remove featured workflows from a channel. + https://api.slack.com/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Set featured workflows for a channel. + https://api.slack.com/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, @@ -7915,7 +7989,7 @@

    Methods

    https://api.slack.com/methods/admin.users.invite

    -def admin_users_list(self,
    *,
    team_id: str,
    include_deactivated_user_workspaces: bool | None = None,
    is_active: bool | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> SlackResponse
    +def admin_users_list(self,
    *,
    team_id: str | None = None,
    include_deactivated_user_workspaces: bool | None = None,
    is_active: bool | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -7925,7 +7999,7 @@

    Methods

    def admin_users_list(
         self,
         *,
    -    team_id: str,
    +    team_id: Optional[str] = None,
         include_deactivated_user_workspaces: Optional[bool] = None,
         is_active: Optional[bool] = None,
         cursor: Optional[str] = None,
    @@ -9762,7 +9836,7 @@ 

    Methods

    https://api.slack.com/methods/chat.meMessage

    -def chat_postEphemeral(self,
    *,
    channel: str,
    user: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    **kwargs) ‑> SlackResponse
    +def chat_postEphemeral(self,
    *,
    channel: str,
    user: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -9784,6 +9858,7 @@

    Methods

    link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. @@ -9803,11 +9878,12 @@

    Methods

    "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs)
    @@ -9815,7 +9891,7 @@

    Methods

    https://api.slack.com/methods/chat.postEphemeral

    -def chat_postMessage(self,
    *,
    channel: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    container_id: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    mrkdwn: bool | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> SlackResponse
    +def chat_postMessage(self,
    *,
    channel: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    container_id: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    mrkdwn: bool | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -9842,6 +9918,7 @@

    Methods

    username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. @@ -9866,11 +9943,12 @@

    Methods

    "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs)
    @@ -9878,7 +9956,7 @@

    Methods

    https://api.slack.com/methods/chat.postMessage

    -def chat_scheduleMessage(self,
    *,
    channel: str,
    post_at: str | int,
    text: str,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    link_names: bool | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> SlackResponse
    +def chat_scheduleMessage(self,
    *,
    channel: str,
    post_at: str | int,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    link_names: bool | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -9890,7 +9968,7 @@

    Methods

    *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -9901,6 +9979,7 @@

    Methods

    unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. @@ -9921,11 +10000,12 @@

    Methods

    "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs)
    @@ -10016,7 +10096,7 @@

    Methods

    https://api.slack.com/methods/chat.unfurl

    -def chat_update(self,
    *,
    channel: str,
    ts: str,
    text: str | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    as_user: bool | None = None,
    file_ids: str | Sequence[str] | None = None,
    link_names: bool | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> SlackResponse
    +def chat_update(self,
    *,
    channel: str,
    ts: str,
    text: str | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    as_user: bool | None = None,
    file_ids: str | Sequence[str] | None = None,
    link_names: bool | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10037,6 +10117,7 @@

    Methods

    parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. @@ -10054,6 +10135,7 @@

    Methods

    "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -10062,7 +10144,7 @@

    Methods

    kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs)
    @@ -14090,6 +14172,116 @@

    Methods

    to learn more about updating views and avoiding race conditions with the hash argument. https://api.slack.com/methods/views.update

    + +
    +
    + +Expand source code + +
    def workflows_featured_add(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> SlackResponse:
    +    """Add featured workflows to a channel.
    +    https://api.slack.com/methods/workflows.featured.add
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.add", params=kwargs)
    +
    +

    Add featured workflows to a channel. +https://api.slack.com/methods/workflows.featured.add

    +
    + +
    +
    + +Expand source code + +
    def workflows_featured_list(
    +    self,
    +    *,
    +    channel_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> SlackResponse:
    +    """List the featured workflows for specified channels.
    +    https://api.slack.com/methods/workflows.featured.list
    +    """
    +    if isinstance(channel_ids, (list, tuple)):
    +        kwargs.update({"channel_ids": ",".join(channel_ids)})
    +    else:
    +        kwargs.update({"channel_ids": channel_ids})
    +    return self.api_call("workflows.featured.list", params=kwargs)
    +
    +

    List the featured workflows for specified channels. +https://api.slack.com/methods/workflows.featured.list

    +
    + +
    +
    + +Expand source code + +
    def workflows_featured_remove(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> SlackResponse:
    +    """Remove featured workflows from a channel.
    +    https://api.slack.com/methods/workflows.featured.remove
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.remove", params=kwargs)
    +
    +

    Remove featured workflows from a channel. +https://api.slack.com/methods/workflows.featured.remove

    +
    + +
    +
    + +Expand source code + +
    def workflows_featured_set(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> SlackResponse:
    +    """Set featured workflows for a channel.
    +    https://api.slack.com/methods/workflows.featured.set
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.set", params=kwargs)
    +
    +

    Set featured workflows for a channel. +https://api.slack.com/methods/workflows.featured.set

    +
    def workflows_stepCompleted(self, *, workflow_step_execute_id: str, outputs: dict | None = None, **kwargs) ‑> SlackResponse
    @@ -14512,6 +14704,10 @@

    views_publish
  • views_push
  • views_update
  • +
  • workflows_featured_add
  • +
  • workflows_featured_list
  • +
  • workflows_featured_remove
  • +
  • workflows_featured_set
  • workflows_stepCompleted
  • workflows_stepFailed
  • workflows_updateStep
  • diff --git a/docs/reference/web/index.html b/docs/reference/web/index.html index e4ac7ea4..88be77c6 100644 --- a/docs/reference/web/index.html +++ b/docs/reference/web/index.html @@ -2113,7 +2113,7 @@

    Raises

    def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -3078,6 +3078,7 @@

    Raises

    link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. @@ -3097,11 +3098,12 @@

    Raises

    "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -3125,6 +3127,7 @@

    Raises

    username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. @@ -3149,11 +3152,12 @@

    Raises

    "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -3162,7 +3166,7 @@

    Raises

    *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -3173,6 +3177,7 @@

    Raises

    unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. @@ -3193,11 +3198,12 @@

    Raises

    "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) @@ -3250,6 +3256,7 @@

    Raises

    parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. @@ -3267,6 +3274,7 @@

    Raises

    "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -3275,7 +3283,7 @@

    Raises

    kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) @@ -5799,6 +5807,72 @@

    Raises

    # NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Add featured workflows to a channel. + https://api.slack.com/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """List the featured workflows for specified channels. + https://api.slack.com/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Remove featured workflows from a channel. + https://api.slack.com/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> SlackResponse: + """Set featured workflows for a channel. + https://api.slack.com/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, @@ -8276,7 +8350,7 @@

    Methods

    https://api.slack.com/methods/admin.users.invite

    -def admin_users_list(self,
    *,
    team_id: str,
    include_deactivated_user_workspaces: bool | None = None,
    is_active: bool | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> SlackResponse
    +def admin_users_list(self,
    *,
    team_id: str | None = None,
    include_deactivated_user_workspaces: bool | None = None,
    is_active: bool | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> SlackResponse
    @@ -8286,7 +8360,7 @@

    Methods

    def admin_users_list(
         self,
         *,
    -    team_id: str,
    +    team_id: Optional[str] = None,
         include_deactivated_user_workspaces: Optional[bool] = None,
         is_active: Optional[bool] = None,
         cursor: Optional[str] = None,
    @@ -10123,7 +10197,7 @@ 

    Methods

    https://api.slack.com/methods/chat.meMessage

    -def chat_postEphemeral(self,
    *,
    channel: str,
    user: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    **kwargs) ‑> SlackResponse
    +def chat_postEphemeral(self,
    *,
    channel: str,
    user: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10145,6 +10219,7 @@

    Methods

    link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends an ephemeral message to a user in a channel. @@ -10164,11 +10239,12 @@

    Methods

    "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs)
    @@ -10176,7 +10252,7 @@

    Methods

    https://api.slack.com/methods/chat.postEphemeral

    -def chat_postMessage(self,
    *,
    channel: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    container_id: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    mrkdwn: bool | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> SlackResponse
    +def chat_postMessage(self,
    *,
    channel: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    container_id: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    mrkdwn: bool | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10203,6 +10279,7 @@

    Methods

    username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Sends a message to a channel. @@ -10227,11 +10304,12 @@

    Methods

    "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs)
    @@ -10239,7 +10317,7 @@

    Methods

    https://api.slack.com/methods/chat.postMessage

    -def chat_scheduleMessage(self,
    *,
    channel: str,
    post_at: str | int,
    text: str,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    link_names: bool | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> SlackResponse
    +def chat_scheduleMessage(self,
    *,
    channel: str,
    post_at: str | int,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    link_names: bool | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10251,7 +10329,7 @@

    Methods

    *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -10262,6 +10340,7 @@

    Methods

    unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Schedules a message. @@ -10282,11 +10361,12 @@

    Methods

    "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs)
    @@ -10377,7 +10457,7 @@

    Methods

    https://api.slack.com/methods/chat.unfurl

    -def chat_update(self,
    *,
    channel: str,
    ts: str,
    text: str | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    as_user: bool | None = None,
    file_ids: str | Sequence[str] | None = None,
    link_names: bool | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> SlackResponse
    +def chat_update(self,
    *,
    channel: str,
    ts: str,
    text: str | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    as_user: bool | None = None,
    file_ids: str | Sequence[str] | None = None,
    link_names: bool | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> SlackResponse
    @@ -10398,6 +10478,7 @@

    Methods

    parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> SlackResponse: """Updates a message in a channel. @@ -10415,6 +10496,7 @@

    Methods

    "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -10423,7 +10505,7 @@

    Methods

    kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs)
    @@ -14451,6 +14533,116 @@

    Methods

    to learn more about updating views and avoiding race conditions with the hash argument. https://api.slack.com/methods/views.update

    + +
    +
    + +Expand source code + +
    def workflows_featured_add(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> SlackResponse:
    +    """Add featured workflows to a channel.
    +    https://api.slack.com/methods/workflows.featured.add
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.add", params=kwargs)
    +
    +

    Add featured workflows to a channel. +https://api.slack.com/methods/workflows.featured.add

    +
    + +
    +
    + +Expand source code + +
    def workflows_featured_list(
    +    self,
    +    *,
    +    channel_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> SlackResponse:
    +    """List the featured workflows for specified channels.
    +    https://api.slack.com/methods/workflows.featured.list
    +    """
    +    if isinstance(channel_ids, (list, tuple)):
    +        kwargs.update({"channel_ids": ",".join(channel_ids)})
    +    else:
    +        kwargs.update({"channel_ids": channel_ids})
    +    return self.api_call("workflows.featured.list", params=kwargs)
    +
    +

    List the featured workflows for specified channels. +https://api.slack.com/methods/workflows.featured.list

    +
    + +
    +
    + +Expand source code + +
    def workflows_featured_remove(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> SlackResponse:
    +    """Remove featured workflows from a channel.
    +    https://api.slack.com/methods/workflows.featured.remove
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.remove", params=kwargs)
    +
    +

    Remove featured workflows from a channel. +https://api.slack.com/methods/workflows.featured.remove

    +
    + +
    +
    + +Expand source code + +
    def workflows_featured_set(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> SlackResponse:
    +    """Set featured workflows for a channel.
    +    https://api.slack.com/methods/workflows.featured.set
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.set", params=kwargs)
    +
    +

    Set featured workflows for a channel. +https://api.slack.com/methods/workflows.featured.set

    +
    def workflows_stepCompleted(self, *, workflow_step_execute_id: str, outputs: dict | None = None, **kwargs) ‑> SlackResponse
    @@ -14897,6 +15089,10 @@

    Web
  • views_publish
  • views_push
  • views_update
  • +
  • workflows_featured_add
  • +
  • workflows_featured_list
  • +
  • workflows_featured_remove
  • +
  • workflows_featured_set
  • workflows_stepCompleted
  • workflows_stepFailed
  • workflows_updateStep
  • diff --git a/docs/reference/web/internal_utils.html b/docs/reference/web/internal_utils.html index 9d8084d6..89227edc 100644 --- a/docs/reference/web/internal_utils.html +++ b/docs/reference/web/internal_utils.html @@ -95,7 +95,7 @@

    Returns

    Returns: The user agent string. - e.g. 'Python/3.6.7 slackclient/2.0.0 Darwin/17.7.0' + e.g. 'Python/3.7.17 slackclient/2.0.0 Darwin/17.7.0' """ # __name__ returns all classes, we only want the client client = "{0}/{1}".format("slackclient", version.__version__) @@ -110,7 +110,7 @@

    Returns

    Python version and OS version.

    Returns

    The user agent string. -e.g. 'Python/3.6.7 slackclient/2.0.0 Darwin/17.7.0'

    +e.g. 'Python/3.7.17 slackclient/2.0.0 Darwin/17.7.0'

    diff --git a/docs/reference/web/legacy_client.html b/docs/reference/web/legacy_client.html index 63cbfc7f..8dccc2f3 100644 --- a/docs/reference/web/legacy_client.html +++ b/docs/reference/web/legacy_client.html @@ -1751,7 +1751,7 @@

    Classes

    def admin_users_list( self, *, - team_id: str, + team_id: Optional[str] = None, include_deactivated_user_workspaces: Optional[bool] = None, is_active: Optional[bool] = None, cursor: Optional[str] = None, @@ -2716,6 +2716,7 @@

    Classes

    link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends an ephemeral message to a user in a channel. @@ -2735,11 +2736,12 @@

    Classes

    "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs) @@ -2763,6 +2765,7 @@

    Classes

    username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends a message to a channel. @@ -2787,11 +2790,12 @@

    Classes

    "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs) @@ -2800,7 +2804,7 @@

    Classes

    *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -2811,6 +2815,7 @@

    Classes

    unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Schedules a message. @@ -2831,11 +2836,12 @@

    Classes

    "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs) @@ -2888,6 +2894,7 @@

    Classes

    parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Updates a message in a channel. @@ -2905,6 +2912,7 @@

    Classes

    "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -2913,7 +2921,7 @@

    Classes

    kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs) @@ -5437,6 +5445,72 @@

    Classes

    # NOTE: Intentionally using json for the "view" parameter return self.api_call("views.publish", json=kwargs) + def workflows_featured_add( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Add featured workflows to a channel. + https://api.slack.com/methods/workflows.featured.add + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.add", params=kwargs) + + def workflows_featured_list( + self, + *, + channel_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """List the featured workflows for specified channels. + https://api.slack.com/methods/workflows.featured.list + """ + if isinstance(channel_ids, (list, tuple)): + kwargs.update({"channel_ids": ",".join(channel_ids)}) + else: + kwargs.update({"channel_ids": channel_ids}) + return self.api_call("workflows.featured.list", params=kwargs) + + def workflows_featured_remove( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Remove featured workflows from a channel. + https://api.slack.com/methods/workflows.featured.remove + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.remove", params=kwargs) + + def workflows_featured_set( + self, + *, + channel_id: str, + trigger_ids: Union[str, Sequence[str]], + **kwargs, + ) -> Union[Future, SlackResponse]: + """Set featured workflows for a channel. + https://api.slack.com/methods/workflows.featured.set + """ + kwargs.update({"channel_id": channel_id}) + if isinstance(trigger_ids, (list, tuple)): + kwargs.update({"trigger_ids": ",".join(trigger_ids)}) + else: + kwargs.update({"trigger_ids": trigger_ids}) + return self.api_call("workflows.featured.set", params=kwargs) + def workflows_stepCompleted( self, *, @@ -7914,7 +7988,7 @@

    Methods

    https://api.slack.com/methods/admin.users.invite

    -def admin_users_list(self,
    *,
    team_id: str,
    include_deactivated_user_workspaces: bool | None = None,
    is_active: bool | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    +def admin_users_list(self,
    *,
    team_id: str | None = None,
    include_deactivated_user_workspaces: bool | None = None,
    is_active: bool | None = None,
    cursor: str | None = None,
    limit: int | None = None,
    **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    @@ -7924,7 +7998,7 @@

    Methods

    def admin_users_list(
         self,
         *,
    -    team_id: str,
    +    team_id: Optional[str] = None,
         include_deactivated_user_workspaces: Optional[bool] = None,
         is_active: Optional[bool] = None,
         cursor: Optional[str] = None,
    @@ -9761,7 +9835,7 @@ 

    Methods

    https://api.slack.com/methods/chat.meMessage

    -def chat_postEphemeral(self,
    *,
    channel: str,
    user: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    +def chat_postEphemeral(self,
    *,
    channel: str,
    user: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    @@ -9783,6 +9857,7 @@

    Methods

    link_names: Optional[bool] = None, username: Optional[str] = None, parse: Optional[str] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends an ephemeral message to a user in a channel. @@ -9802,11 +9877,12 @@

    Methods

    "link_names": link_names, "username": username, "parse": parse, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs) + _warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postEphemeral", json=kwargs)
    @@ -9814,7 +9890,7 @@

    Methods

    https://api.slack.com/methods/chat.postEphemeral

    -def chat_postMessage(self,
    *,
    channel: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    container_id: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    mrkdwn: bool | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    +def chat_postMessage(self,
    *,
    channel: str,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    container_id: str | None = None,
    icon_emoji: str | None = None,
    icon_url: str | None = None,
    mrkdwn: bool | None = None,
    link_names: bool | None = None,
    username: str | None = None,
    parse: str | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    @@ -9841,6 +9917,7 @@

    Methods

    username: Optional[str] = None, parse: Optional[str] = None, # none, full metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Sends a message to a channel. @@ -9865,11 +9942,12 @@

    Methods

    "username": username, "parse": parse, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.postMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.postMessage", json=kwargs)
    @@ -9877,7 +9955,7 @@

    Methods

    https://api.slack.com/methods/chat.postMessage

    -def chat_scheduleMessage(self,
    *,
    channel: str,
    post_at: str | int,
    text: str,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    link_names: bool | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    +def chat_scheduleMessage(self,
    *,
    channel: str,
    post_at: str | int,
    text: str | None = None,
    as_user: bool | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    thread_ts: str | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    unfurl_links: bool | None = None,
    unfurl_media: bool | None = None,
    link_names: bool | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    @@ -9889,7 +9967,7 @@

    Methods

    *, channel: str, post_at: Union[str, int], - text: str, + text: Optional[str] = None, as_user: Optional[bool] = None, attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None, blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None, @@ -9900,6 +9978,7 @@

    Methods

    unfurl_media: Optional[bool] = None, link_names: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Schedules a message. @@ -9920,11 +9999,12 @@

    Methods

    "unfurl_media": unfurl_media, "link_names": link_names, "metadata": metadata, + "markdown_text": markdown_text, } ) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs) + _warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs) # NOTE: intentionally using json over params for the API methods using blocks/attachments return self.api_call("chat.scheduleMessage", json=kwargs)
    @@ -10015,7 +10095,7 @@

    Methods

    https://api.slack.com/methods/chat.unfurl

    -def chat_update(self,
    *,
    channel: str,
    ts: str,
    text: str | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    as_user: bool | None = None,
    file_ids: str | Sequence[str] | None = None,
    link_names: bool | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    metadata: Dict | Metadata | None = None,
    **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    +def chat_update(self,
    *,
    channel: str,
    ts: str,
    text: str | None = None,
    attachments: str | Sequence[Dict | Attachment] | None = None,
    blocks: str | Sequence[Dict | Block] | None = None,
    as_user: bool | None = None,
    file_ids: str | Sequence[str] | None = None,
    link_names: bool | None = None,
    parse: str | None = None,
    reply_broadcast: bool | None = None,
    metadata: Dict | Metadata | None = None,
    markdown_text: str | None = None,
    **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    @@ -10036,6 +10116,7 @@

    Methods

    parse: Optional[str] = None, # none, full reply_broadcast: Optional[bool] = None, metadata: Optional[Union[Dict, Metadata]] = None, + markdown_text: Optional[str] = None, **kwargs, ) -> Union[Future, SlackResponse]: """Updates a message in a channel. @@ -10053,6 +10134,7 @@

    Methods

    "parse": parse, "reply_broadcast": reply_broadcast, "metadata": metadata, + "markdown_text": markdown_text, } ) if isinstance(file_ids, (list, tuple)): @@ -10061,7 +10143,7 @@

    Methods

    kwargs.update({"file_ids": file_ids}) _parse_web_class_objects(kwargs) kwargs = _remove_none_values(kwargs) - _warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs) + _warn_if_message_text_content_is_missing("chat.update", kwargs) # NOTE: intentionally using json over params for API methods using blocks/attachments return self.api_call("chat.update", json=kwargs)
    @@ -14089,6 +14171,116 @@

    Methods

    to learn more about updating views and avoiding race conditions with the hash argument. https://api.slack.com/methods/views.update

    + +
    +
    + +Expand source code + +
    def workflows_featured_add(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Add featured workflows to a channel.
    +    https://api.slack.com/methods/workflows.featured.add
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.add", params=kwargs)
    +
    +

    Add featured workflows to a channel. +https://api.slack.com/methods/workflows.featured.add

    +
    + +
    +
    + +Expand source code + +
    def workflows_featured_list(
    +    self,
    +    *,
    +    channel_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """List the featured workflows for specified channels.
    +    https://api.slack.com/methods/workflows.featured.list
    +    """
    +    if isinstance(channel_ids, (list, tuple)):
    +        kwargs.update({"channel_ids": ",".join(channel_ids)})
    +    else:
    +        kwargs.update({"channel_ids": channel_ids})
    +    return self.api_call("workflows.featured.list", params=kwargs)
    +
    +

    List the featured workflows for specified channels. +https://api.slack.com/methods/workflows.featured.list

    +
    + +
    +
    + +Expand source code + +
    def workflows_featured_remove(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Remove featured workflows from a channel.
    +    https://api.slack.com/methods/workflows.featured.remove
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.remove", params=kwargs)
    +
    +

    Remove featured workflows from a channel. +https://api.slack.com/methods/workflows.featured.remove

    +
    + +
    +
    + +Expand source code + +
    def workflows_featured_set(
    +    self,
    +    *,
    +    channel_id: str,
    +    trigger_ids: Union[str, Sequence[str]],
    +    **kwargs,
    +) -> Union[Future, SlackResponse]:
    +    """Set featured workflows for a channel.
    +    https://api.slack.com/methods/workflows.featured.set
    +    """
    +    kwargs.update({"channel_id": channel_id})
    +    if isinstance(trigger_ids, (list, tuple)):
    +        kwargs.update({"trigger_ids": ",".join(trigger_ids)})
    +    else:
    +        kwargs.update({"trigger_ids": trigger_ids})
    +    return self.api_call("workflows.featured.set", params=kwargs)
    +
    +

    Set featured workflows for a channel. +https://api.slack.com/methods/workflows.featured.set

    +
    def workflows_stepCompleted(self, *, workflow_step_execute_id: str, outputs: dict | None = None, **kwargs) ‑> _asyncio.Future | LegacySlackResponse
    @@ -14510,6 +14702,10 @@

    views_publish
  • views_push
  • views_update
  • +
  • workflows_featured_add
  • +
  • workflows_featured_list
  • +
  • workflows_featured_remove
  • +
  • workflows_featured_set
  • workflows_stepCompleted
  • workflows_stepFailed
  • workflows_updateStep
  • diff --git a/docs/reference/webhook/client.html b/docs/reference/webhook/client.html index 6400d63d..5ff5a4c5 100644 --- a/docs/reference/webhook/client.html +++ b/docs/reference/webhook/client.html @@ -297,13 +297,13 @@

    Classes

    http_resp = opener.open(req, timeout=self.timeout) else: http_resp = urlopen(req, context=self.ssl, timeout=self.timeout) - charset: str = http_resp.headers.get_content_charset() or "utf-8" # type: ignore[union-attr] - response_body: str = http_resp.read().decode(charset) # type: ignore[union-attr] + charset: str = http_resp.headers.get_content_charset() or "utf-8" + response_body: str = http_resp.read().decode(charset) resp = WebhookResponse( url=url, - status_code=http_resp.status, # type: ignore[union-attr] + status_code=http_resp.status, body=response_body, - headers=http_resp.headers, # type: ignore[arg-type, union-attr] + headers=http_resp.headers, # type: ignore[arg-type] ) _debug_log_response(self.logger, resp) return resp diff --git a/docs/reference/webhook/index.html b/docs/reference/webhook/index.html index 31f7a7e4..937313a1 100644 --- a/docs/reference/webhook/index.html +++ b/docs/reference/webhook/index.html @@ -319,13 +319,13 @@

    Classes

    http_resp = opener.open(req, timeout=self.timeout) else: http_resp = urlopen(req, context=self.ssl, timeout=self.timeout) - charset: str = http_resp.headers.get_content_charset() or "utf-8" # type: ignore[union-attr] - response_body: str = http_resp.read().decode(charset) # type: ignore[union-attr] + charset: str = http_resp.headers.get_content_charset() or "utf-8" + response_body: str = http_resp.read().decode(charset) resp = WebhookResponse( url=url, - status_code=http_resp.status, # type: ignore[union-attr] + status_code=http_resp.status, body=response_body, - headers=http_resp.headers, # type: ignore[arg-type, union-attr] + headers=http_resp.headers, # type: ignore[arg-type] ) _debug_log_response(self.logger, resp) return resp From 4e25f0b8c8a5a97b0e6bf93936afee158d0b25e1 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 1 Oct 2025 20:56:39 -0700 Subject: [PATCH 5/8] chore: mark generated reference as generated --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..db99e6e9 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +docs/reference/**/*.html linguist-generated=true From 9a04096d7ab58b6805ab3155b661cf995c16d8a1 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 1 Oct 2025 20:59:56 -0700 Subject: [PATCH 6/8] refactor: use a variable for the latest python version --- .github/workflows/ci-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index f019d0ef..523b32e1 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -55,7 +55,7 @@ jobs: PYTHONPATH=$PWD:$PYTHONPATH pytest tests/slack_sdk/oauth/installation_store/test_sqlalchemy.py PYTHONPATH=$PWD:$PYTHONPATH pytest tests/slack_sdk/oauth/state_store/test_sqlalchemy.py - name: Confirm expected autogenerated reference exists - if: ${{ matrix.python-version == env.LATEST_PYTHON_VERSION }} + if: startsWith(matrix.python-version, env.LATEST_PYTHON_VERSION) run: | python -m venv .venv source .venv/bin/activate @@ -71,7 +71,7 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} verbose: true - name: Upload test coverage to Codecov (only with latest supported version) - if: startsWith(matrix.python-version, '3.13') + if: startsWith(matrix.python-version, env.LATEST_PYTHON_VERSION) uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: token: ${{ secrets.CODECOV_TOKEN }} From cc71fe76609ceae0d744d56d613886bc537e8008 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 1 Oct 2025 21:02:19 -0700 Subject: [PATCH 7/8] build: generate documentation as part of the validation check --- scripts/run_validation.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/run_validation.sh b/scripts/run_validation.sh index 8a61d03a..a619fca3 100755 --- a/scripts/run_validation.sh +++ b/scripts/run_validation.sh @@ -4,17 +4,18 @@ set -e -script_dir=`dirname $0` -cd ${script_dir}/.. +script_dir=$(dirname "$0") +cd "${script_dir}"/.. pip install -U -r requirements/testing.txt \ - -U -r requirements/optional.txt + -U -r requirements/optional.txt echo "Generating code ..." && python scripts/codegen.py --path . +echo "Generating docs ..." && CI=true bash scripts/generate_api_docs.sh echo "Running black (code formatter) ..." && black slack_sdk/ black --check slack/ slack_sdk/ tests/ integration_tests/ flake8 slack/ slack_sdk/ test_target="${1:-tests/}" -PYTHONPATH=$PWD:$PYTHONPATH pytest --cov-report=xml --cov=slack_sdk/ $test_target +PYTHONPATH=$PWD:$PYTHONPATH pytest --cov-report=xml --cov=slack_sdk/ "$test_target" From b49b5b095d4eebc7bfb2d78587f74edf3d240c3a Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 1 Oct 2025 21:14:10 -0700 Subject: [PATCH 8/8] fix: match the runner base dir path --- docs/reference/oauth/installation_store/file/index.html | 2 +- docs/reference/oauth/installation_store/index.html | 2 +- docs/reference/oauth/state_store/file/index.html | 2 +- docs/reference/oauth/state_store/index.html | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/reference/oauth/installation_store/file/index.html b/docs/reference/oauth/installation_store/file/index.html index 7658ddd9..b972a9ea 100644 --- a/docs/reference/oauth/installation_store/file/index.html +++ b/docs/reference/oauth/installation_store/file/index.html @@ -48,7 +48,7 @@

    Classes

    class FileInstallationStore -(*,
    base_dir: str = '/Users/eden.zimbelman/.bolt-app-installation',
    historical_data_enabled: bool = True,
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
    +(*,
    base_dir: str = '/home/runner/.bolt-app-installation',
    historical_data_enabled: bool = True,
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
    diff --git a/docs/reference/oauth/installation_store/index.html b/docs/reference/oauth/installation_store/index.html index 5865522c..0335c693 100644 --- a/docs/reference/oauth/installation_store/index.html +++ b/docs/reference/oauth/installation_store/index.html @@ -327,7 +327,7 @@

    Methods

    class FileInstallationStore -(*,
    base_dir: str = '/Users/eden.zimbelman/.bolt-app-installation',
    historical_data_enabled: bool = True,
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
    +(*,
    base_dir: str = '/home/runner/.bolt-app-installation',
    historical_data_enabled: bool = True,
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.installation_store.file (WARNING)>)
    diff --git a/docs/reference/oauth/state_store/file/index.html b/docs/reference/oauth/state_store/file/index.html index 33ac16d8..8adf695a 100644 --- a/docs/reference/oauth/state_store/file/index.html +++ b/docs/reference/oauth/state_store/file/index.html @@ -48,7 +48,7 @@

    Classes

    class FileOAuthStateStore -(*,
    expiration_seconds: int,
    base_dir: str = '/Users/eden.zimbelman/.bolt-app-oauth-state',
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.state_store.file (WARNING)>)
    +(*,
    expiration_seconds: int,
    base_dir: str = '/home/runner/.bolt-app-oauth-state',
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.state_store.file (WARNING)>)
    diff --git a/docs/reference/oauth/state_store/index.html b/docs/reference/oauth/state_store/index.html index efb7d1cf..363fe78d 100644 --- a/docs/reference/oauth/state_store/index.html +++ b/docs/reference/oauth/state_store/index.html @@ -77,7 +77,7 @@

    Classes

    class FileOAuthStateStore -(*,
    expiration_seconds: int,
    base_dir: str = '/Users/eden.zimbelman/.bolt-app-oauth-state',
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.state_store.file (WARNING)>)
    +(*,
    expiration_seconds: int,
    base_dir: str = '/home/runner/.bolt-app-oauth-state',
    client_id: str | None = None,
    logger: logging.Logger = <Logger slack_sdk.oauth.state_store.file (WARNING)>)