Skip to content

Commit ff743e2

Browse files
authored
Fix #1356 files_upload_v2 filename required even though content provided (#1361)
1 parent f37c691 commit ff743e2

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

slack_sdk/web/internal_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,9 +334,9 @@ def _to_v2_file_upload_item(upload_file: Dict[str, Any]) -> Dict[str, Optional[A
334334
raise SlackRequestError("content for file upload must be 'str' (UTF-8 encoded) or 'bytes' (for data)")
335335

336336
filename = upload_file.get("filename")
337-
if upload_file.get("filename") is None and isinstance(file, str):
337+
if filename is None:
338338
# use the local filename if filename is missing
339-
if upload_file.get("filename") is None:
339+
if isinstance(file, str):
340340
filename = file.split(os.path.sep)[-1]
341341
else:
342342
filename = "Uploaded file"

tests/slack_sdk/web/test_internal_utils.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import json
22
import unittest
3+
from io import BytesIO
34
from typing import Dict, Sequence, Union
45

56
import pytest
67

78
from slack_sdk.models.attachments import Attachment
89
from slack_sdk.models.blocks import Block, DividerBlock
9-
from slack_sdk.web.internal_utils import _build_unexpected_body_error_message, _parse_web_class_objects
10+
from slack_sdk.web.internal_utils import (
11+
_build_unexpected_body_error_message,
12+
_parse_web_class_objects,
13+
_to_v2_file_upload_item,
14+
)
1015

1116

1217
class TestInternalUtils(unittest.TestCase):
@@ -72,3 +77,24 @@ def test_can_parse_user_auth_blocks(self):
7277
}
7378
_parse_web_class_objects(kwargs)
7479
assert isinstance(kwargs["user_auth_blocks"][0], dict)
80+
81+
def test_files_upload_v2_issue_1356(self):
82+
content_item = _to_v2_file_upload_item({"content": "test"})
83+
assert content_item.get("filename") == "Uploaded file"
84+
85+
filepath_item = _to_v2_file_upload_item({"file": "tests/slack_sdk/web/test_internal_utils.py"})
86+
assert filepath_item.get("filename") == "test_internal_utils.py"
87+
filepath_item = _to_v2_file_upload_item({"file": "tests/slack_sdk/web/test_internal_utils.py", "filename": "foo.py"})
88+
assert filepath_item.get("filename") == "foo.py"
89+
90+
file_bytes = "This is a test!".encode("utf-8")
91+
file_bytes_item = _to_v2_file_upload_item({"file": file_bytes})
92+
assert file_bytes_item.get("filename") == "Uploaded file"
93+
file_bytes_item = _to_v2_file_upload_item({"file": file_bytes, "filename": "foo.txt"})
94+
assert file_bytes_item.get("filename") == "foo.txt"
95+
96+
file_io = BytesIO(file_bytes)
97+
file_io_item = _to_v2_file_upload_item({"file": file_io})
98+
assert file_io_item.get("filename") == "Uploaded file"
99+
file_io_item = _to_v2_file_upload_item({"file": file_io, "filename": "foo.txt"})
100+
assert file_io_item.get("filename") == "foo.txt"

0 commit comments

Comments
 (0)