Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions slack_sdk/web/async_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -1985,8 +1985,8 @@ async def chat_postEphemeral(
user: str,
text: Optional[str] = None,
as_user: Optional[bool] = None,
attachments: Optional[Sequence[Union[Dict, Attachment]]] = None,
blocks: Optional[Sequence[Union[Dict, Block]]] = None,
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
thread_ts: Optional[str] = None,
icon_emoji: Optional[str] = None,
icon_url: Optional[str] = None,
Expand Down Expand Up @@ -2026,8 +2026,8 @@ async def chat_postMessage(
channel: str,
text: Optional[str] = None,
as_user: Optional[bool] = None,
attachments: Optional[Sequence[Union[Dict, Attachment]]] = None,
blocks: Optional[Sequence[Union[Dict, Block]]] = None,
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
thread_ts: Optional[str] = None,
reply_broadcast: Optional[bool] = None,
unfurl_links: Optional[bool] = None,
Expand Down Expand Up @@ -2081,8 +2081,8 @@ async def chat_scheduleMessage(
post_at: Union[str, int],
text: str,
as_user: Optional[bool] = None,
attachments: Optional[Sequence[Union[Dict, Attachment]]] = None,
blocks: Optional[Sequence[Union[Dict, Block]]] = None,
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
thread_ts: Optional[str] = None,
parse: Optional[str] = None,
reply_broadcast: Optional[bool] = None,
Expand Down Expand Up @@ -2126,7 +2126,7 @@ async def chat_unfurl(
source: Optional[str] = None,
unfurl_id: Optional[str] = None,
unfurls: Dict[str, Dict],
user_auth_blocks: Optional[Sequence[Union[Dict, Block]]] = None,
user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
user_auth_message: Optional[str] = None,
user_auth_required: Optional[bool] = None,
user_auth_url: Optional[str] = None,
Expand Down Expand Up @@ -2158,8 +2158,8 @@ async def chat_update(
channel: str,
ts: str,
text: Optional[str] = None,
attachments: Optional[Sequence[Union[Dict, Attachment]]] = None,
blocks: Optional[Sequence[Union[Dict, Block]]] = None,
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
as_user: Optional[bool] = None,
file_ids: Optional[Union[str, Sequence[str]]] = None,
link_names: Optional[bool] = None,
Expand Down
18 changes: 9 additions & 9 deletions slack_sdk/web/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -1976,8 +1976,8 @@ def chat_postEphemeral(
user: str,
text: Optional[str] = None,
as_user: Optional[bool] = None,
attachments: Optional[Sequence[Union[Dict, Attachment]]] = None,
blocks: Optional[Sequence[Union[Dict, Block]]] = None,
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
thread_ts: Optional[str] = None,
icon_emoji: Optional[str] = None,
icon_url: Optional[str] = None,
Expand Down Expand Up @@ -2017,8 +2017,8 @@ def chat_postMessage(
channel: str,
text: Optional[str] = None,
as_user: Optional[bool] = None,
attachments: Optional[Sequence[Union[Dict, Attachment]]] = None,
blocks: Optional[Sequence[Union[Dict, Block]]] = None,
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
thread_ts: Optional[str] = None,
reply_broadcast: Optional[bool] = None,
unfurl_links: Optional[bool] = None,
Expand Down Expand Up @@ -2072,8 +2072,8 @@ def chat_scheduleMessage(
post_at: Union[str, int],
text: str,
as_user: Optional[bool] = None,
attachments: Optional[Sequence[Union[Dict, Attachment]]] = None,
blocks: Optional[Sequence[Union[Dict, Block]]] = None,
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
thread_ts: Optional[str] = None,
parse: Optional[str] = None,
reply_broadcast: Optional[bool] = None,
Expand Down Expand Up @@ -2117,7 +2117,7 @@ def chat_unfurl(
source: Optional[str] = None,
unfurl_id: Optional[str] = None,
unfurls: Dict[str, Dict],
user_auth_blocks: Optional[Sequence[Union[Dict, Block]]] = None,
user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
user_auth_message: Optional[str] = None,
user_auth_required: Optional[bool] = None,
user_auth_url: Optional[str] = None,
Expand Down Expand Up @@ -2149,8 +2149,8 @@ def chat_update(
channel: str,
ts: str,
text: Optional[str] = None,
attachments: Optional[Sequence[Union[Dict, Attachment]]] = None,
blocks: Optional[Sequence[Union[Dict, Block]]] = None,
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
as_user: Optional[bool] = None,
file_ids: Optional[Union[str, Sequence[str]]] = None,
link_names: Optional[bool] = None,
Expand Down
4 changes: 2 additions & 2 deletions slack_sdk/web/internal_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,12 +189,12 @@ def to_dict(obj: Union[Dict, Block, Attachment, Metadata]):
return obj

blocks = kwargs.get("blocks", None)
if blocks is not None and isinstance(blocks, Sequence):
if blocks is not None and isinstance(blocks, Sequence) and (not isinstance(blocks, str)):
dict_blocks = [to_dict(b) for b in blocks]
kwargs.update({"blocks": dict_blocks})

attachments = kwargs.get("attachments", None)
if attachments is not None and isinstance(attachments, Sequence):
if attachments is not None and isinstance(attachments, Sequence) and (not isinstance(attachments, str)):
dict_attachments = [to_dict(a) for a in attachments]
kwargs.update({"attachments": dict_attachments})

Expand Down
18 changes: 9 additions & 9 deletions slack_sdk/web/legacy_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -1987,8 +1987,8 @@ def chat_postEphemeral(
user: str,
text: Optional[str] = None,
as_user: Optional[bool] = None,
attachments: Optional[Sequence[Union[Dict, Attachment]]] = None,
blocks: Optional[Sequence[Union[Dict, Block]]] = None,
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
thread_ts: Optional[str] = None,
icon_emoji: Optional[str] = None,
icon_url: Optional[str] = None,
Expand Down Expand Up @@ -2028,8 +2028,8 @@ def chat_postMessage(
channel: str,
text: Optional[str] = None,
as_user: Optional[bool] = None,
attachments: Optional[Sequence[Union[Dict, Attachment]]] = None,
blocks: Optional[Sequence[Union[Dict, Block]]] = None,
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
thread_ts: Optional[str] = None,
reply_broadcast: Optional[bool] = None,
unfurl_links: Optional[bool] = None,
Expand Down Expand Up @@ -2083,8 +2083,8 @@ def chat_scheduleMessage(
post_at: Union[str, int],
text: str,
as_user: Optional[bool] = None,
attachments: Optional[Sequence[Union[Dict, Attachment]]] = None,
blocks: Optional[Sequence[Union[Dict, Block]]] = None,
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
thread_ts: Optional[str] = None,
parse: Optional[str] = None,
reply_broadcast: Optional[bool] = None,
Expand Down Expand Up @@ -2128,7 +2128,7 @@ def chat_unfurl(
source: Optional[str] = None,
unfurl_id: Optional[str] = None,
unfurls: Dict[str, Dict],
user_auth_blocks: Optional[Sequence[Union[Dict, Block]]] = None,
user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
user_auth_message: Optional[str] = None,
user_auth_required: Optional[bool] = None,
user_auth_url: Optional[str] = None,
Expand Down Expand Up @@ -2160,8 +2160,8 @@ def chat_update(
channel: str,
ts: str,
text: Optional[str] = None,
attachments: Optional[Sequence[Union[Dict, Attachment]]] = None,
blocks: Optional[Sequence[Union[Dict, Block]]] = None,
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
as_user: Optional[bool] = None,
file_ids: Optional[Union[str, Sequence[str]]] = None,
link_names: Optional[bool] = None,
Expand Down
80 changes: 39 additions & 41 deletions tests/slack_sdk/web/test_internal_utils.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import json
import unittest
from typing import Dict, Sequence, Union

Expand All @@ -23,44 +24,41 @@ def test_build_unexpected_body_error_message(self):
"""Received a response in a non-JSON format: <!DOCTYPE html><html lang="en"><head><meta charset="utf-8">"""
)


@pytest.mark.parametrize(
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These tests added as part of #1259 actually are not properly working. I've rewritten the tests to work as we expect.

"initial_blocks",
[
[Block(block_id="42"), Block(block_id="24")], # list
(
Block(block_id="42"),
Block(block_id="24"),
), # tuple
],
)
def test_can_parse_sequence_of_blocks(initial_blocks: Sequence[Union[Dict, Block]]):
kwargs = {"blocks": initial_blocks}

_parse_web_class_objects(kwargs)

assert kwargs["blocks"]

for block in kwargs["blocks"]:
assert isinstance(block, Dict)


@pytest.mark.parametrize(
"initial_attachments",
[
[Attachment(text="foo"), Attachment(text="bar")], # list
(
Attachment(text="foo"),
Attachment(text="bar"),
), # tuple
],
)
def test_can_parse_sequence_of_attachments(initial_attachments: Sequence[Union[Dict, Attachment]]):
kwargs = {"attachments": initial_attachments}

_parse_web_class_objects(kwargs)

assert kwargs["attachments"]

for attachment in kwargs["attachments"]:
assert isinstance(attachment, Dict)
def test_can_parse_sequence_of_blocks(self):
for blocks in [
[Block(block_id="42"), Block(block_id="24")], # list
(Block(block_id="42"), Block(block_id="24")), # tuple
]:
kwargs = {"blocks": blocks}
_parse_web_class_objects(kwargs)
assert kwargs["blocks"]
for block in kwargs["blocks"]:
assert isinstance(block, Dict)

def test_can_parse_sequence_of_attachments(self):
for attachments in [
[Attachment(text="foo"), Attachment(text="bar")], # list
(
Attachment(text="foo"),
Attachment(text="bar"),
), # tuple
]:
kwargs = {"attachments": attachments}
_parse_web_class_objects(kwargs)
assert kwargs["attachments"]
for attachment in kwargs["attachments"]:
assert isinstance(attachment, Dict)

def test_can_parse_str_blocks(self):
input = json.dumps([Block(block_id="42").to_dict(), Block(block_id="24").to_dict()])
kwargs = {"blocks": input}
_parse_web_class_objects(kwargs)
assert isinstance(kwargs["blocks"], str)
assert input == kwargs["blocks"]

def test_can_parse_str_attachments(self):
input = json.dumps([Attachment(text="foo").to_dict(), Attachment(text="bar").to_dict()])
kwargs = {"attachments": input}
_parse_web_class_objects(kwargs)
assert isinstance(kwargs["attachments"], str)
assert input == kwargs["attachments"]