slack-sdk 3.40.0.dev0__tar.gz → 3.41.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {slack_sdk-3.40.0.dev0/slack_sdk.egg-info → slack_sdk-3.41.0}/PKG-INFO +1 -1
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/blocks/block_elements.py +1 -5
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/blocks/blocks.py +5 -10
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/messages/chunk.py +2 -2
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/sqlalchemy/__init__.py +11 -0
- slack_sdk-3.41.0/slack_sdk/oauth/sqlalchemy_utils/__init__.py +33 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/sqlalchemy/__init__.py +7 -4
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/version.py +1 -1
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/async_chat_stream.py +8 -8
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/async_client.py +14 -1
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/async_slack_response.py +2 -4
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/chat_stream.py +8 -8
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/client.py +14 -1
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/legacy_client.py +13 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/slack_response.py +2 -4
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0/slack_sdk.egg-info}/PKG-INFO +1 -1
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk.egg-info/SOURCES.txt +1 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/LICENSE +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/MANIFEST.in +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/README.md +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/pyproject.toml +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/requirements/optional.txt +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/setup.cfg +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/deprecation.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/errors.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/py.typed +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/rtm/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/rtm/client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/signature/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/signature/verifier.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/version.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/async_base_client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/async_client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/async_internal_utils.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/async_slack_response.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/base_client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/actions.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/attachments.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/blocks.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/dialog_elements.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/dialogs.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/elements.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/interactions.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/messages.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/objects.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/classes/views.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/deprecation.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/internal_utils.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/web/slack_response.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/webhook/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/webhook/async_client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/webhook/client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/webhook/internal_utils.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack/webhook/webhook_response.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/aiohttp_version_checker.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/async_client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/v1/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/v1/async_client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/v1/client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/v1/internal_utils.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/v1/logs.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/audit_logs/v1/response.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/errors/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/async_handler.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/builtin_async_handlers.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/builtin_handlers.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/builtin_interval_calculators.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/handler.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/interval_calculator.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/jitter.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/request.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/response.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/state.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/attachments/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/basic_objects.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/blocks/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/blocks/basic_components.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/dialoags.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/dialogs/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/messages/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/messages/message.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/metadata/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/models/views/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/authorize_url_generator/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/amazon_s3/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/async_cacheable_installation_store.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/async_installation_store.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/cacheable_installation_store.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/file/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/installation_store.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/internals.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/models/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/models/bot.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/models/installation.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/sqlite3/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/redirect_uri_page_renderer/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/amazon_s3/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/async_state_store.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/file/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/sqlite3/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/state_store.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_utils/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/token_rotation/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/token_rotation/async_rotator.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/token_rotation/rotator.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/proxy_env_variable_loader.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/py.typed +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/rtm/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/rtm/v2/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/rtm_v2/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/async_client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/async_client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/default_arg.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/group.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/internal_utils.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/response.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/types.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/scim/v1/user.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/signature/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/aiohttp/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/async_client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/async_listeners.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/builtin/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/builtin/client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/builtin/connection.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/builtin/frame_header.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/builtin/internals.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/interval_runner.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/listeners.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/logger/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/logger/messages.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/request.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/response.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/websocket_client/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/websockets/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/async_base_client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/async_internal_utils.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/base_client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/deprecation.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/file_upload_v2_result.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/internal_utils.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/legacy_base_client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/web/legacy_slack_response.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/webhook/__init__.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/webhook/async_client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/webhook/client.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/webhook/internal_utils.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/webhook/webhook_response.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk.egg-info/dependency_links.txt +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk.egg-info/requires.txt +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk.egg-info/top_level.txt +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/tests/test_aiohttp_version_checker.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/tests/test_asyncio_event_loops.py +0 -0
- {slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/tests/test_proxy_env_variable_loader.py +0 -0
|
@@ -1668,7 +1668,6 @@ class UrlSourceElement(BlockElement):
|
|
|
1668
1668
|
{
|
|
1669
1669
|
"url",
|
|
1670
1670
|
"text",
|
|
1671
|
-
"icon_url",
|
|
1672
1671
|
}
|
|
1673
1672
|
)
|
|
1674
1673
|
|
|
@@ -1677,23 +1676,20 @@ class UrlSourceElement(BlockElement):
|
|
|
1677
1676
|
*,
|
|
1678
1677
|
url: str,
|
|
1679
1678
|
text: str,
|
|
1680
|
-
icon_url: Optional[str] = None,
|
|
1681
1679
|
**others: Dict,
|
|
1682
1680
|
):
|
|
1683
1681
|
"""
|
|
1684
|
-
A URL source element
|
|
1682
|
+
A URL source element that displays a URL source for referencing within a task card block.
|
|
1685
1683
|
https://docs.slack.dev/reference/block-kit/block-elements/url-source-element
|
|
1686
1684
|
|
|
1687
1685
|
Args:
|
|
1688
1686
|
url (required): The URL type source.
|
|
1689
1687
|
text (required): Display text for the URL.
|
|
1690
|
-
icon_url: Optional icon URL to display with the source.
|
|
1691
1688
|
"""
|
|
1692
1689
|
super().__init__(type=self.type)
|
|
1693
1690
|
show_unknown_key_warning(self, others)
|
|
1694
1691
|
self.url = url
|
|
1695
1692
|
self.text = text
|
|
1696
|
-
self.icon_url = icon_url
|
|
1697
1693
|
|
|
1698
1694
|
|
|
1699
1695
|
# -------------------------------------------------
|
|
@@ -812,7 +812,7 @@ class TaskCardBlock(Block):
|
|
|
812
812
|
block_id: Optional[str] = None,
|
|
813
813
|
**others: dict,
|
|
814
814
|
):
|
|
815
|
-
"""
|
|
815
|
+
"""Displays a single task, representing a single action.
|
|
816
816
|
https://docs.slack.dev/reference/block-kit/blocks/task-card-block/
|
|
817
817
|
|
|
818
818
|
Args:
|
|
@@ -824,8 +824,8 @@ class TaskCardBlock(Block):
|
|
|
824
824
|
title (required): Title of the task in plain text
|
|
825
825
|
details: Details of the task in the form of a single "rich_text" entity.
|
|
826
826
|
output: Output of the task in the form of a single "rich_text" entity.
|
|
827
|
-
sources:
|
|
828
|
-
status: The state of a task. Either "pending"
|
|
827
|
+
sources: Array of URL source elements used to generate a response.
|
|
828
|
+
status: The state of a task. Either "pending", "in_progress", "complete", or "error".
|
|
829
829
|
"""
|
|
830
830
|
super().__init__(type=self.type, block_id=block_id)
|
|
831
831
|
show_unknown_key_warning(self, others)
|
|
@@ -849,7 +849,6 @@ class PlanBlock(Block):
|
|
|
849
849
|
def attributes(self) -> Set[str]: # type: ignore[override]
|
|
850
850
|
return super().attributes.union(
|
|
851
851
|
{
|
|
852
|
-
"plan_id",
|
|
853
852
|
"title",
|
|
854
853
|
"tasks",
|
|
855
854
|
}
|
|
@@ -858,13 +857,12 @@ class PlanBlock(Block):
|
|
|
858
857
|
def __init__(
|
|
859
858
|
self,
|
|
860
859
|
*,
|
|
861
|
-
plan_id: str,
|
|
862
860
|
title: str,
|
|
863
861
|
tasks: Optional[Sequence[Union[Dict, TaskCardBlock]]] = None,
|
|
864
862
|
block_id: Optional[str] = None,
|
|
865
863
|
**others: dict,
|
|
866
864
|
):
|
|
867
|
-
"""
|
|
865
|
+
"""Displays a collection of related tasks.
|
|
868
866
|
https://docs.slack.dev/reference/block-kit/blocks/plan-block/
|
|
869
867
|
|
|
870
868
|
Args:
|
|
@@ -872,14 +870,11 @@ class PlanBlock(Block):
|
|
|
872
870
|
Maximum length for this field is 255 characters.
|
|
873
871
|
block_id should be unique for each message and each iteration of a message.
|
|
874
872
|
If a message is updated, use a new block_id.
|
|
875
|
-
plan_id (required): ID for the plan (May be removed / made optional, feel free to pass in a random UUID
|
|
876
|
-
for now)
|
|
877
873
|
title (required): Title of the plan in plain text
|
|
878
|
-
tasks:
|
|
874
|
+
tasks: A sequence of task card blocks. Each task represents a single action within the plan.
|
|
879
875
|
"""
|
|
880
876
|
super().__init__(type=self.type, block_id=block_id)
|
|
881
877
|
show_unknown_key_warning(self, others)
|
|
882
878
|
|
|
883
|
-
self.plan_id = plan_id
|
|
884
879
|
self.title = title
|
|
885
880
|
self.tasks = tasks
|
|
@@ -82,7 +82,7 @@ class PlanUpdateChunk(Chunk):
|
|
|
82
82
|
title: str,
|
|
83
83
|
**others: Dict,
|
|
84
84
|
):
|
|
85
|
-
"""
|
|
85
|
+
"""Used for displaying an updated title of a plan.
|
|
86
86
|
|
|
87
87
|
https://docs.slack.dev/messaging/sending-and-scheduling-messages#text-streaming
|
|
88
88
|
"""
|
|
@@ -119,7 +119,7 @@ class TaskUpdateChunk(Chunk):
|
|
|
119
119
|
sources: Optional[Sequence[Union[Dict, UrlSourceElement]]] = None,
|
|
120
120
|
**others: Dict,
|
|
121
121
|
):
|
|
122
|
-
"""Used for displaying
|
|
122
|
+
"""Used for displaying task progress in a timeline-style UI.
|
|
123
123
|
|
|
124
124
|
https://docs.slack.dev/messaging/sending-and-scheduling-messages#text-streaming
|
|
125
125
|
"""
|
{slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/sqlalchemy/__init__.py
RENAMED
|
@@ -23,6 +23,7 @@ from slack_sdk.oauth.installation_store.models.installation import Installation
|
|
|
23
23
|
from slack_sdk.oauth.installation_store.async_installation_store import (
|
|
24
24
|
AsyncInstallationStore,
|
|
25
25
|
)
|
|
26
|
+
from slack_sdk.oauth.sqlalchemy_utils import normalize_datetime_for_db
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
class SQLAlchemyInstallationStore(InstallationStore):
|
|
@@ -140,6 +141,9 @@ class SQLAlchemyInstallationStore(InstallationStore):
|
|
|
140
141
|
with self.engine.begin() as conn:
|
|
141
142
|
i = installation.to_dict()
|
|
142
143
|
i["client_id"] = self.client_id
|
|
144
|
+
i["installed_at"] = normalize_datetime_for_db(i.get("installed_at"))
|
|
145
|
+
i["bot_token_expires_at"] = normalize_datetime_for_db(i.get("bot_token_expires_at"))
|
|
146
|
+
i["user_token_expires_at"] = normalize_datetime_for_db(i.get("user_token_expires_at"))
|
|
143
147
|
|
|
144
148
|
i_column = self.installations.c
|
|
145
149
|
installations_rows = conn.execute(
|
|
@@ -171,6 +175,8 @@ class SQLAlchemyInstallationStore(InstallationStore):
|
|
|
171
175
|
# bots
|
|
172
176
|
b = bot.to_dict()
|
|
173
177
|
b["client_id"] = self.client_id
|
|
178
|
+
b["installed_at"] = normalize_datetime_for_db(b.get("installed_at"))
|
|
179
|
+
b["bot_token_expires_at"] = normalize_datetime_for_db(b.get("bot_token_expires_at"))
|
|
174
180
|
|
|
175
181
|
b_column = self.bots.c
|
|
176
182
|
bots_rows = conn.execute(
|
|
@@ -419,6 +425,9 @@ class AsyncSQLAlchemyInstallationStore(AsyncInstallationStore):
|
|
|
419
425
|
async with self.engine.begin() as conn:
|
|
420
426
|
i = installation.to_dict()
|
|
421
427
|
i["client_id"] = self.client_id
|
|
428
|
+
i["installed_at"] = normalize_datetime_for_db(i.get("installed_at"))
|
|
429
|
+
i["bot_token_expires_at"] = normalize_datetime_for_db(i.get("bot_token_expires_at"))
|
|
430
|
+
i["user_token_expires_at"] = normalize_datetime_for_db(i.get("user_token_expires_at"))
|
|
422
431
|
|
|
423
432
|
i_column = self.installations.c
|
|
424
433
|
installations_rows = await conn.execute(
|
|
@@ -450,6 +459,8 @@ class AsyncSQLAlchemyInstallationStore(AsyncInstallationStore):
|
|
|
450
459
|
# bots
|
|
451
460
|
b = bot.to_dict()
|
|
452
461
|
b["client_id"] = self.client_id
|
|
462
|
+
b["installed_at"] = normalize_datetime_for_db(b.get("installed_at"))
|
|
463
|
+
b["bot_token_expires_at"] = normalize_datetime_for_db(b.get("bot_token_expires_at"))
|
|
453
464
|
|
|
454
465
|
b_column = self.bots.c
|
|
455
466
|
bots_rows = await conn.execute(
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# TODO: Remove this function in next major release (v4.0.0) after updating all
|
|
6
|
+
# DateTime columns to DateTime(timezone=True). See issue #1832 for context.
|
|
7
|
+
def normalize_datetime_for_db(dt: Optional[datetime]) -> Optional[datetime]:
|
|
8
|
+
"""
|
|
9
|
+
Normalize timezone-aware datetime to naive UTC datetime for database storage.
|
|
10
|
+
|
|
11
|
+
Ensures compatibility with existing databases using TIMESTAMP WITHOUT TIME ZONE.
|
|
12
|
+
SQLAlchemy DateTime columns without timezone=True create naive timestamp columns
|
|
13
|
+
in databases like PostgreSQL. This function strips timezone information from
|
|
14
|
+
timezone-aware datetimes (which are already in UTC) to enable safe comparisons.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
dt: A timezone-aware or naive datetime object, or None
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
A naive datetime in UTC, or None if input is None
|
|
21
|
+
|
|
22
|
+
Example:
|
|
23
|
+
>>> from datetime import datetime, timezone
|
|
24
|
+
>>> aware_dt = datetime(2024, 1, 1, 12, 0, 0, tzinfo=timezone.utc)
|
|
25
|
+
>>> naive_dt = normalize_datetime_for_db(aware_dt)
|
|
26
|
+
>>> naive_dt.tzinfo is None
|
|
27
|
+
True
|
|
28
|
+
"""
|
|
29
|
+
if dt is None:
|
|
30
|
+
return None
|
|
31
|
+
if dt.tzinfo is not None:
|
|
32
|
+
return dt.replace(tzinfo=None)
|
|
33
|
+
return dt
|
{slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/sqlalchemy/__init__.py
RENAMED
|
@@ -10,6 +10,7 @@ import sqlalchemy
|
|
|
10
10
|
from sqlalchemy import Table, Column, Integer, String, DateTime, and_, MetaData
|
|
11
11
|
from sqlalchemy.engine import Engine
|
|
12
12
|
from sqlalchemy.ext.asyncio import AsyncEngine
|
|
13
|
+
from slack_sdk.oauth.sqlalchemy_utils import normalize_datetime_for_db
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
class SQLAlchemyOAuthStateStore(OAuthStateStore):
|
|
@@ -55,7 +56,7 @@ class SQLAlchemyOAuthStateStore(OAuthStateStore):
|
|
|
55
56
|
|
|
56
57
|
def issue(self, *args, **kwargs) -> str:
|
|
57
58
|
state: str = str(uuid4())
|
|
58
|
-
now = datetime.fromtimestamp(time.time() + self.expiration_seconds, tz=timezone.utc)
|
|
59
|
+
now = normalize_datetime_for_db(datetime.fromtimestamp(time.time() + self.expiration_seconds, tz=timezone.utc))
|
|
59
60
|
with self.engine.begin() as conn:
|
|
60
61
|
conn.execute(
|
|
61
62
|
self.oauth_states.insert(),
|
|
@@ -65,9 +66,10 @@ class SQLAlchemyOAuthStateStore(OAuthStateStore):
|
|
|
65
66
|
|
|
66
67
|
def consume(self, state: str) -> bool:
|
|
67
68
|
try:
|
|
69
|
+
now = normalize_datetime_for_db(datetime.now(tz=timezone.utc))
|
|
68
70
|
with self.engine.begin() as conn:
|
|
69
71
|
c = self.oauth_states.c
|
|
70
|
-
query = self.oauth_states.select().where(and_(c.state == state, c.expire_at >
|
|
72
|
+
query = self.oauth_states.select().where(and_(c.state == state, c.expire_at > now))
|
|
71
73
|
result = conn.execute(query)
|
|
72
74
|
for row in result.mappings():
|
|
73
75
|
self.logger.debug(f"consume's query result: {row}")
|
|
@@ -124,7 +126,7 @@ class AsyncSQLAlchemyOAuthStateStore(AsyncOAuthStateStore):
|
|
|
124
126
|
|
|
125
127
|
async def async_issue(self, *args, **kwargs) -> str:
|
|
126
128
|
state: str = str(uuid4())
|
|
127
|
-
now = datetime.fromtimestamp(time.time() + self.expiration_seconds, tz=timezone.utc)
|
|
129
|
+
now = normalize_datetime_for_db(datetime.fromtimestamp(time.time() + self.expiration_seconds, tz=timezone.utc))
|
|
128
130
|
async with self.engine.begin() as conn:
|
|
129
131
|
await conn.execute(
|
|
130
132
|
self.oauth_states.insert(),
|
|
@@ -134,9 +136,10 @@ class AsyncSQLAlchemyOAuthStateStore(AsyncOAuthStateStore):
|
|
|
134
136
|
|
|
135
137
|
async def async_consume(self, state: str) -> bool:
|
|
136
138
|
try:
|
|
139
|
+
now = normalize_datetime_for_db(datetime.now(tz=timezone.utc))
|
|
137
140
|
async with self.engine.begin() as conn:
|
|
138
141
|
c = self.oauth_states.c
|
|
139
|
-
query = self.oauth_states.select().where(and_(c.state == state, c.expire_at >
|
|
142
|
+
query = self.oauth_states.select().where(and_(c.state == state, c.expire_at > now))
|
|
140
143
|
result = await conn.execute(query)
|
|
141
144
|
for row in result.mappings():
|
|
142
145
|
self.logger.debug(f"consume's query result: {row}")
|
|
@@ -56,7 +56,7 @@ class AsyncChatStream:
|
|
|
56
56
|
streaming to channels.
|
|
57
57
|
recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
|
|
58
58
|
task_display_mode: Specifies how tasks are displayed in the message. A "timeline" displays individual tasks
|
|
59
|
-
|
|
59
|
+
with text and "plan" displays all tasks together.
|
|
60
60
|
buffer_size: The length of markdown_text to buffer in-memory before calling a method. Increasing this value
|
|
61
61
|
decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits.
|
|
62
62
|
**kwargs: Additional arguments passed to the underlying API calls.
|
|
@@ -90,7 +90,7 @@ class AsyncChatStream:
|
|
|
90
90
|
is stopped this method cannot be called.
|
|
91
91
|
|
|
92
92
|
Args:
|
|
93
|
-
chunks: An array of streaming chunks
|
|
93
|
+
chunks: An array of streaming chunks. Chunks can be markdown text, plan, or task update chunks.
|
|
94
94
|
markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
|
|
95
95
|
what will be appended to the message received so far.
|
|
96
96
|
**kwargs: Additional arguments passed to the underlying API calls.
|
|
@@ -146,7 +146,7 @@ class AsyncChatStream:
|
|
|
146
146
|
|
|
147
147
|
Args:
|
|
148
148
|
blocks: A list of blocks that will be rendered at the bottom of the finalized message.
|
|
149
|
-
chunks: An array of streaming chunks
|
|
149
|
+
chunks: An array of streaming chunks. Chunks can be markdown text, plan, or task update chunks.
|
|
150
150
|
markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
|
|
151
151
|
what will be appended to the message received so far.
|
|
152
152
|
metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you
|
|
@@ -206,17 +206,17 @@ class AsyncChatStream:
|
|
|
206
206
|
|
|
207
207
|
async def _flush_buffer(self, chunks: Optional[Sequence[Union[Dict, Chunk]]] = None, **kwargs) -> AsyncSlackResponse:
|
|
208
208
|
"""Flush the internal buffer with chunks by making appropriate API calls."""
|
|
209
|
-
|
|
209
|
+
chunks_to_flush: List[Union[Dict, Chunk]] = []
|
|
210
210
|
if len(self._buffer) != 0:
|
|
211
|
-
|
|
211
|
+
chunks_to_flush.append(MarkdownTextChunk(text=self._buffer))
|
|
212
212
|
if chunks is not None:
|
|
213
|
-
|
|
213
|
+
chunks_to_flush.extend(chunks)
|
|
214
214
|
if not self._stream_ts:
|
|
215
215
|
response = await self._client.chat_startStream(
|
|
216
216
|
**self._stream_args,
|
|
217
217
|
token=self._token,
|
|
218
218
|
**kwargs,
|
|
219
|
-
chunks=
|
|
219
|
+
chunks=chunks_to_flush,
|
|
220
220
|
)
|
|
221
221
|
self._stream_ts = response.get("ts")
|
|
222
222
|
self._state = "in_progress"
|
|
@@ -226,7 +226,7 @@ class AsyncChatStream:
|
|
|
226
226
|
channel=self._stream_args["channel"],
|
|
227
227
|
ts=self._stream_ts,
|
|
228
228
|
**kwargs,
|
|
229
|
-
chunks=
|
|
229
|
+
chunks=chunks_to_flush,
|
|
230
230
|
)
|
|
231
231
|
self._buffer = ""
|
|
232
232
|
return response
|
|
@@ -2059,6 +2059,19 @@ class AsyncWebClient(AsyncBaseClient):
|
|
|
2059
2059
|
kwargs.update({"app_id": app_id})
|
|
2060
2060
|
return await self.api_call("apps.manifest.validate", params=kwargs)
|
|
2061
2061
|
|
|
2062
|
+
async def apps_user_connection_update(
|
|
2063
|
+
self,
|
|
2064
|
+
*,
|
|
2065
|
+
user_id: str,
|
|
2066
|
+
status: str,
|
|
2067
|
+
**kwargs,
|
|
2068
|
+
) -> AsyncSlackResponse:
|
|
2069
|
+
"""Updates the connection status between a user and an app.
|
|
2070
|
+
https://docs.slack.dev/reference/methods/apps.user.connection.update
|
|
2071
|
+
"""
|
|
2072
|
+
kwargs.update({"user_id": user_id, "status": status})
|
|
2073
|
+
return await self.api_call("apps.user.connection.update", params=kwargs)
|
|
2074
|
+
|
|
2062
2075
|
async def tooling_tokens_rotate(
|
|
2063
2076
|
self,
|
|
2064
2077
|
*,
|
|
@@ -2974,7 +2987,7 @@ class AsyncWebClient(AsyncBaseClient):
|
|
|
2974
2987
|
streaming to channels.
|
|
2975
2988
|
recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
|
|
2976
2989
|
task_display_mode: Specifies how tasks are displayed in the message. A "timeline" displays individual tasks
|
|
2977
|
-
|
|
2990
|
+
with text and "plan" displays all tasks together.
|
|
2978
2991
|
**kwargs: Additional arguments passed to the underlying API calls.
|
|
2979
2992
|
|
|
2980
2993
|
Returns:
|
|
@@ -163,12 +163,10 @@ class AsyncSlackResponse:
|
|
|
163
163
|
raise StopAsyncIteration
|
|
164
164
|
|
|
165
165
|
@overload
|
|
166
|
-
def get(self, key: str, default: None = None) -> Optional[Any]:
|
|
167
|
-
...
|
|
166
|
+
def get(self, key: str, default: None = None) -> Optional[Any]: ...
|
|
168
167
|
|
|
169
168
|
@overload
|
|
170
|
-
def get(self, key: str, default: T) -> T:
|
|
171
|
-
...
|
|
169
|
+
def get(self, key: str, default: T) -> T: ...
|
|
172
170
|
|
|
173
171
|
def get(self, key, default=None):
|
|
174
172
|
"""Retrieves any key from the response data.
|
|
@@ -46,7 +46,7 @@ class ChatStream:
|
|
|
46
46
|
streaming to channels.
|
|
47
47
|
recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
|
|
48
48
|
task_display_mode: Specifies how tasks are displayed in the message. A "timeline" displays individual tasks
|
|
49
|
-
|
|
49
|
+
with text and "plan" displays all tasks together.
|
|
50
50
|
buffer_size: The length of markdown_text to buffer in-memory before calling a method. Increasing this value
|
|
51
51
|
decreases the number of method calls made for the same amount of text, which is useful to avoid rate limits.
|
|
52
52
|
**kwargs: Additional arguments passed to the underlying API calls.
|
|
@@ -80,7 +80,7 @@ class ChatStream:
|
|
|
80
80
|
is stopped this method cannot be called.
|
|
81
81
|
|
|
82
82
|
Args:
|
|
83
|
-
chunks: An array of streaming chunks
|
|
83
|
+
chunks: An array of streaming chunks. Chunks can be markdown text, plan, or task update chunks.
|
|
84
84
|
markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
|
|
85
85
|
what will be appended to the message received so far.
|
|
86
86
|
**kwargs: Additional arguments passed to the underlying API calls.
|
|
@@ -136,7 +136,7 @@ class ChatStream:
|
|
|
136
136
|
|
|
137
137
|
Args:
|
|
138
138
|
blocks: A list of blocks that will be rendered at the bottom of the finalized message.
|
|
139
|
-
chunks: An array of streaming chunks
|
|
139
|
+
chunks: An array of streaming chunks. Chunks can be markdown text, plan, or task update chunks.
|
|
140
140
|
markdown_text: Accepts message text formatted in markdown. Limit this field to 12,000 characters. This text is
|
|
141
141
|
what will be appended to the message received so far.
|
|
142
142
|
metadata: JSON object with event_type and event_payload fields, presented as a URL-encoded string. Metadata you
|
|
@@ -196,17 +196,17 @@ class ChatStream:
|
|
|
196
196
|
|
|
197
197
|
def _flush_buffer(self, chunks: Optional[Sequence[Union[Dict, Chunk]]] = None, **kwargs) -> SlackResponse:
|
|
198
198
|
"""Flush the internal buffer with chunks by making appropriate API calls."""
|
|
199
|
-
|
|
199
|
+
chunks_to_flush: List[Union[Dict, Chunk]] = []
|
|
200
200
|
if len(self._buffer) != 0:
|
|
201
|
-
|
|
201
|
+
chunks_to_flush.append(MarkdownTextChunk(text=self._buffer))
|
|
202
202
|
if chunks is not None:
|
|
203
|
-
|
|
203
|
+
chunks_to_flush.extend(chunks)
|
|
204
204
|
if not self._stream_ts:
|
|
205
205
|
response = self._client.chat_startStream(
|
|
206
206
|
**self._stream_args,
|
|
207
207
|
token=self._token,
|
|
208
208
|
**kwargs,
|
|
209
|
-
chunks=
|
|
209
|
+
chunks=chunks_to_flush,
|
|
210
210
|
)
|
|
211
211
|
self._stream_ts = response.get("ts")
|
|
212
212
|
self._state = "in_progress"
|
|
@@ -216,7 +216,7 @@ class ChatStream:
|
|
|
216
216
|
channel=self._stream_args["channel"],
|
|
217
217
|
ts=self._stream_ts,
|
|
218
218
|
**kwargs,
|
|
219
|
-
chunks=
|
|
219
|
+
chunks=chunks_to_flush,
|
|
220
220
|
)
|
|
221
221
|
self._buffer = ""
|
|
222
222
|
return response
|
|
@@ -2049,6 +2049,19 @@ class WebClient(BaseClient):
|
|
|
2049
2049
|
kwargs.update({"app_id": app_id})
|
|
2050
2050
|
return self.api_call("apps.manifest.validate", params=kwargs)
|
|
2051
2051
|
|
|
2052
|
+
def apps_user_connection_update(
|
|
2053
|
+
self,
|
|
2054
|
+
*,
|
|
2055
|
+
user_id: str,
|
|
2056
|
+
status: str,
|
|
2057
|
+
**kwargs,
|
|
2058
|
+
) -> SlackResponse:
|
|
2059
|
+
"""Updates the connection status between a user and an app.
|
|
2060
|
+
https://docs.slack.dev/reference/methods/apps.user.connection.update
|
|
2061
|
+
"""
|
|
2062
|
+
kwargs.update({"user_id": user_id, "status": status})
|
|
2063
|
+
return self.api_call("apps.user.connection.update", params=kwargs)
|
|
2064
|
+
|
|
2052
2065
|
def tooling_tokens_rotate(
|
|
2053
2066
|
self,
|
|
2054
2067
|
*,
|
|
@@ -2964,7 +2977,7 @@ class WebClient(BaseClient):
|
|
|
2964
2977
|
streaming to channels.
|
|
2965
2978
|
recipient_user_id: The encoded ID of the user to receive the streaming text. Required when streaming to channels.
|
|
2966
2979
|
task_display_mode: Specifies how tasks are displayed in the message. A "timeline" displays individual tasks
|
|
2967
|
-
|
|
2980
|
+
with text and "plan" displays all tasks together.
|
|
2968
2981
|
**kwargs: Additional arguments passed to the underlying API calls.
|
|
2969
2982
|
|
|
2970
2983
|
Returns:
|
|
@@ -2060,6 +2060,19 @@ class LegacyWebClient(LegacyBaseClient):
|
|
|
2060
2060
|
kwargs.update({"app_id": app_id})
|
|
2061
2061
|
return self.api_call("apps.manifest.validate", params=kwargs)
|
|
2062
2062
|
|
|
2063
|
+
def apps_user_connection_update(
|
|
2064
|
+
self,
|
|
2065
|
+
*,
|
|
2066
|
+
user_id: str,
|
|
2067
|
+
status: str,
|
|
2068
|
+
**kwargs,
|
|
2069
|
+
) -> Union[Future, SlackResponse]:
|
|
2070
|
+
"""Updates the connection status between a user and an app.
|
|
2071
|
+
https://docs.slack.dev/reference/methods/apps.user.connection.update
|
|
2072
|
+
"""
|
|
2073
|
+
kwargs.update({"user_id": user_id, "status": status})
|
|
2074
|
+
return self.api_call("apps.user.connection.update", params=kwargs)
|
|
2075
|
+
|
|
2063
2076
|
def tooling_tokens_rotate(
|
|
2064
2077
|
self,
|
|
2065
2078
|
*,
|
|
@@ -157,12 +157,10 @@ class SlackResponse:
|
|
|
157
157
|
raise StopIteration
|
|
158
158
|
|
|
159
159
|
@overload
|
|
160
|
-
def get(self, key: str, default: None = None) -> Optional[Any]:
|
|
161
|
-
...
|
|
160
|
+
def get(self, key: str, default: None = None) -> Optional[Any]: ...
|
|
162
161
|
|
|
163
162
|
@overload
|
|
164
|
-
def get(self, key: str, default: T) -> T:
|
|
165
|
-
...
|
|
163
|
+
def get(self, key: str, default: T) -> T: ...
|
|
166
164
|
|
|
167
165
|
def get(self, key, default=None):
|
|
168
166
|
"""Retrieves any key from the response data.
|
|
@@ -99,6 +99,7 @@ slack_sdk/oauth/installation_store/models/installation.py
|
|
|
99
99
|
slack_sdk/oauth/installation_store/sqlalchemy/__init__.py
|
|
100
100
|
slack_sdk/oauth/installation_store/sqlite3/__init__.py
|
|
101
101
|
slack_sdk/oauth/redirect_uri_page_renderer/__init__.py
|
|
102
|
+
slack_sdk/oauth/sqlalchemy_utils/__init__.py
|
|
102
103
|
slack_sdk/oauth/state_store/__init__.py
|
|
103
104
|
slack_sdk/oauth/state_store/async_state_store.py
|
|
104
105
|
slack_sdk/oauth/state_store/state_store.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/http_retry/builtin_interval_calculators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/authorize_url_generator/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/amazon_s3/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/file/__init__.py
RENAMED
|
File without changes
|
{slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/installation_store.py
RENAMED
|
File without changes
|
|
File without changes
|
{slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/models/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/models/installation.py
RENAMED
|
File without changes
|
{slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/installation_store/sqlite3/__init__.py
RENAMED
|
File without changes
|
{slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/redirect_uri_page_renderer/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/oauth/state_store/amazon_s3/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{slack_sdk-3.40.0.dev0 → slack_sdk-3.41.0}/slack_sdk/socket_mode/websocket_client/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|