Skip to content

Commit f4e4612

Browse files
authored
Update files.upload v2 method in correspondence with server-side changes (#1408)
* Update files.upload v2 method in correspondence with server-side changes * Add pytype skip comments
1 parent 50c9265 commit f4e4612

File tree

5 files changed

+27
-108
lines changed

5 files changed

+27
-108
lines changed

integration_tests/web/test_files_upload_v2.py

Lines changed: 18 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ def test_uploading_text_files(self):
4444
title="Test code",
4545
)
4646
self.assertIsNotNone(upload)
47+
self.assertIsNotNone(upload.get("files")[0].get("id"))
48+
self.assertIsNotNone(upload.get("files")[0].get("title"))
4749

4850
def test_uploading_bytes_io(self):
4951
client = self.sync_client
@@ -54,6 +56,8 @@ def test_uploading_bytes_io(self):
5456
title="Test code",
5557
)
5658
self.assertIsNotNone(upload)
59+
self.assertIsNotNone(upload.get("files")[0].get("id"))
60+
self.assertIsNotNone(upload.get("files")[0].get("title"))
5761

5862
def test_uploading_multiple_files(self):
5963
client = self.sync_client
@@ -74,6 +78,8 @@ def test_uploading_multiple_files(self):
7478
initial_comment="Here are files :wave:",
7579
)
7680
self.assertIsNotNone(upload)
81+
self.assertIsNotNone(upload.get("files")[0].get("id"))
82+
self.assertIsNotNone(upload.get("files")[0].get("title"))
7783

7884
@async_test
7985
async def test_uploading_text_files_async(self):
@@ -86,6 +92,8 @@ async def test_uploading_text_files_async(self):
8692
file=file,
8793
)
8894
self.assertIsNotNone(upload)
95+
self.assertIsNotNone(upload.get("files")[0].get("id"))
96+
self.assertIsNotNone(upload.get("files")[0].get("title"))
8997

9098
deletion = await client.files_delete(file=upload["file"]["id"])
9199
self.assertIsNotNone(deletion)
@@ -116,6 +124,8 @@ def test_uploading_binary_files(self):
116124
file=file,
117125
)
118126
self.assertIsNotNone(upload)
127+
self.assertIsNotNone(upload.get("files")[0].get("id"))
128+
self.assertIsNotNone(upload.get("files")[0].get("title"))
119129

120130
deletion = client.files_delete(file=upload["file"]["id"])
121131
self.assertIsNotNone(deletion)
@@ -133,6 +143,8 @@ def test_uploading_binary_files_as_content(self):
133143
content=content,
134144
)
135145
self.assertIsNotNone(upload)
146+
self.assertIsNotNone(upload.get("files")[0].get("id"))
147+
self.assertIsNotNone(upload.get("files")[0].get("title"))
136148

137149
deletion = client.files_delete(file=upload["file"]["id"])
138150
self.assertIsNotNone(deletion)
@@ -149,6 +161,8 @@ async def test_uploading_binary_files_async(self):
149161
file=file,
150162
)
151163
self.assertIsNotNone(upload)
164+
self.assertIsNotNone(upload.get("files")[0].get("id"))
165+
self.assertIsNotNone(upload.get("files")[0].get("title"))
152166

153167
deletion = await client.files_delete(file=upload["file"]["id"])
154168
self.assertIsNotNone(deletion)
@@ -165,6 +179,8 @@ def test_uploading_file_with_token_param(self):
165179
file=file,
166180
)
167181
self.assertIsNotNone(upload)
182+
self.assertIsNotNone(upload.get("files")[0].get("id"))
183+
self.assertIsNotNone(upload.get("files")[0].get("title"))
168184

169185
deletion = client.files_delete(
170186
token=self.bot_token,
@@ -185,56 +201,11 @@ async def test_uploading_file_with_token_param_async(self):
185201
file=file,
186202
)
187203
self.assertIsNotNone(upload)
204+
self.assertIsNotNone(upload.get("files")[0].get("id"))
205+
self.assertIsNotNone(upload.get("files")[0].get("title"))
188206

189207
deletion = await client.files_delete(
190208
token=self.bot_token,
191209
file=upload["file"]["id"],
192210
)
193211
self.assertIsNotNone(deletion)
194-
195-
def test_request_file_info_false(self):
196-
client = self.sync_client
197-
upload = client.files_upload_v2(
198-
channels=self.channel_id,
199-
title="Foo",
200-
filename="foo.txt",
201-
content="foo",
202-
)
203-
self.assertIsNotNone(upload)
204-
self.assertIsNotNone(upload.get("files")[0].get("id"))
205-
self.assertIsNotNone(upload.get("files")[0].get("name"))
206-
207-
upload = client.files_upload_v2(
208-
channels=self.channel_id,
209-
title="Foo",
210-
filename="foo.txt",
211-
content="foo",
212-
request_file_info=False,
213-
)
214-
self.assertIsNotNone(upload)
215-
self.assertIsNotNone(upload.get("files")[0].get("id"))
216-
self.assertIsNone(upload.get("files")[0].get("name"))
217-
218-
@async_test
219-
async def test_request_file_info_false_async(self):
220-
client = self.async_client
221-
upload = await client.files_upload_v2(
222-
channels=self.channel_id,
223-
title="Foo",
224-
filename="foo.txt",
225-
content="foo",
226-
)
227-
self.assertIsNotNone(upload)
228-
self.assertIsNotNone(upload.get("files")[0].get("id"))
229-
self.assertIsNotNone(upload.get("files")[0].get("name"))
230-
231-
upload = await client.files_upload_v2(
232-
channels=self.channel_id,
233-
title="Foo",
234-
filename="foo.txt",
235-
content="foo",
236-
request_file_info=False,
237-
)
238-
self.assertIsNotNone(upload)
239-
self.assertIsNotNone(upload.get("files")[0].get("id"))
240-
self.assertIsNone(upload.get("files")[0].get("name"))

slack_sdk/web/async_client.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
_remove_none_values,
2525
_to_v2_file_upload_item,
2626
_upload_file_via_v2_url,
27-
_attach_full_file_metadata_async,
2827
_validate_for_legacy_client,
2928
_print_files_upload_v2_suggestion,
3029
)
@@ -3422,7 +3421,7 @@ async def files_upload_v2(
34223421
channel: Optional[str] = None,
34233422
initial_comment: Optional[str] = None,
34243423
thread_ts: Optional[str] = None,
3425-
request_file_info: bool = True,
3424+
request_file_info: bool = True, # since v3.23, this flag is no longer necessary
34263425
**kwargs,
34273426
) -> AsyncSlackResponse:
34283427
"""This wrapper method provides an easy way to upload files using the following endpoints:
@@ -3519,15 +3518,10 @@ async def files_upload_v2(
35193518
channel_id=channel_to_share,
35203519
initial_comment=initial_comment,
35213520
thread_ts=thread_ts,
3522-
token=kwargs.get("token"),
35233521
**kwargs,
35243522
)
3525-
if request_file_info is True:
3526-
await _attach_full_file_metadata_async(
3527-
client=self,
3528-
token_as_arg=kwargs.get("token"),
3529-
completion=completion,
3530-
)
3523+
if len(completion.get("files")) == 1: # type: ignore
3524+
completion.data["file"] = completion.get("files")[0] # type: ignore
35313525
return completion
35323526

35333527
async def files_getUploadURLExternal(

slack_sdk/web/client.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
_remove_none_values,
1616
_to_v2_file_upload_item,
1717
_upload_file_via_v2_url,
18-
_attach_full_file_metadata,
1918
_validate_for_legacy_client,
2019
_print_files_upload_v2_suggestion,
2120
)
@@ -3413,7 +3412,7 @@ def files_upload_v2(
34133412
channel: Optional[str] = None,
34143413
initial_comment: Optional[str] = None,
34153414
thread_ts: Optional[str] = None,
3416-
request_file_info: bool = True,
3415+
request_file_info: bool = True, # since v3.23, this flag is no longer necessary
34173416
**kwargs,
34183417
) -> SlackResponse:
34193418
"""This wrapper method provides an easy way to upload files using the following endpoints:
@@ -3510,15 +3509,10 @@ def files_upload_v2(
35103509
channel_id=channel_to_share,
35113510
initial_comment=initial_comment,
35123511
thread_ts=thread_ts,
3513-
token=kwargs.get("token"),
35143512
**kwargs,
35153513
)
3516-
if request_file_info is True:
3517-
_attach_full_file_metadata(
3518-
client=self,
3519-
token_as_arg=kwargs.get("token"),
3520-
completion=completion,
3521-
)
3514+
if len(completion.get("files")) == 1: # type: ignore
3515+
completion.data["file"] = completion.get("files")[0] # type: ignore
35223516
return completion
35233517

35243518
def files_getUploadURLExternal(

slack_sdk/web/internal_utils.py

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -407,40 +407,6 @@ def _validate_for_legacy_client(
407407
raise SlackRequestError(message)
408408

409409

410-
def _attach_full_file_metadata(
411-
client, # type: ignore
412-
token_as_arg: Optional[str],
413-
completion: Union["SlackResponse", Future], # noqa: F821
414-
) -> None:
415-
_validate_for_legacy_client(completion)
416-
_completion: Any = completion # just for satisfying pytype
417-
# fetch all the file metadata for backward-compatibility
418-
for f in _completion.get("files"):
419-
full_info = client.files_info(
420-
file=f.get("id"),
421-
token=token_as_arg,
422-
)
423-
f.update(full_info["file"])
424-
if len(_completion.get("files")) == 1:
425-
_completion.data["file"] = _completion.get("files")[0]
426-
427-
428-
async def _attach_full_file_metadata_async(
429-
client, # type: ignore
430-
token_as_arg: Optional[str],
431-
completion: "SlackResponse", # noqa: F821
432-
) -> None:
433-
# fetch all the file metadata for backward-compatibility
434-
for f in completion.get("files"):
435-
full_info = await client.files_info(
436-
file=f.get("id"),
437-
token=token_as_arg,
438-
)
439-
f.update(full_info["file"])
440-
if len(completion.get("files")) == 1:
441-
completion.data["file"] = completion.get("files")[0]
442-
443-
444410
def _print_files_upload_v2_suggestion():
445411
message = (
446412
"client.files_upload() may cause some issues like timeouts for relatively large files. "

slack_sdk/web/legacy_client.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
_remove_none_values,
2727
_to_v2_file_upload_item,
2828
_upload_file_via_v2_url,
29-
_attach_full_file_metadata,
3029
_validate_for_legacy_client,
3130
_print_files_upload_v2_suggestion,
3231
)
@@ -3424,7 +3423,7 @@ def files_upload_v2(
34243423
channel: Optional[str] = None,
34253424
initial_comment: Optional[str] = None,
34263425
thread_ts: Optional[str] = None,
3427-
request_file_info: bool = True,
3426+
request_file_info: bool = True, # since v3.23, this flag is no longer necessary
34283427
**kwargs,
34293428
) -> Union[Future, SlackResponse]:
34303429
"""This wrapper method provides an easy way to upload files using the following endpoints:
@@ -3521,15 +3520,10 @@ def files_upload_v2(
35213520
channel_id=channel_to_share,
35223521
initial_comment=initial_comment,
35233522
thread_ts=thread_ts,
3524-
token=kwargs.get("token"),
35253523
**kwargs,
35263524
)
3527-
if request_file_info is True:
3528-
_attach_full_file_metadata(
3529-
client=self,
3530-
token_as_arg=kwargs.get("token"),
3531-
completion=completion,
3532-
)
3525+
if len(completion.get("files")) == 1: # type: ignore
3526+
completion.data["file"] = completion.get("files")[0] # type: ignore
35333527
return completion
35343528

35353529
def files_getUploadURLExternal(

0 commit comments

Comments
 (0)