Skip to content

Commit 5b8d0e2

Browse files
Merge pull request #400 from MannLabs/remove-cgi-dep
[Dep] Get rid of cgi dependency (removed from standard library in 3.13)
2 parents 9977ee3 + fe32e88 commit 5b8d0e2

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

alphabase/tools/data_downloader.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
"""Download files from sharing links."""
22

33
import base64
4-
import cgi
54
import os
65
import re
76
import traceback
87
import warnings
98
import zipfile
109
from abc import ABC, abstractmethod
10+
from email.message import EmailMessage
1111
from typing import Optional
1212
from urllib.parse import parse_qs, urlparse
1313
from urllib.request import urlopen, urlretrieve
@@ -164,9 +164,20 @@ def _get_filename(self) -> str: # pragma: no cover
164164
print(f"Could not open {self._url} for reading filename: {e}")
165165
raise ValueError(f"Could not open {self._url} for reading filename") from e
166166

167-
info = remotefile.info()["Content-Disposition"]
168-
value, params = cgi.parse_header(info)
169-
return params["filename"]
167+
# Parse remotefile info (recommended by PEP594)
168+
msg = EmailMessage()
169+
content_disp = remotefile.info().get("content-disposition")
170+
if content_disp is None:
171+
raise KeyError(
172+
"Content-Disposition header not found, which is necessary to extract the filename."
173+
)
174+
msg["content-disposition"] = content_disp
175+
176+
filename = msg["content-disposition"].params.get("filename")
177+
if filename is None:
178+
raise KeyError("Could not extract filename from remote file.")
179+
180+
return filename
170181

171182
def _download_file(
172183
self, max_size_kb: Optional[int] = None
@@ -221,7 +232,7 @@ class OnedriveDownloader(FileDownloader):
221232
def _encode_url(self) -> str: # pragma: no cover
222233
"""Encode onedrive sharing link as url for downloading files."""
223234
b64_string = base64.urlsafe_b64encode(str.encode(self._url)).decode("utf-8")
224-
encoded_url = f'https://api.onedrive.com/v1.0/shares/u!{b64_string.replace("=", "")}/root/content'
235+
encoded_url = f"https://api.onedrive.com/v1.0/shares/u!{b64_string.replace('=', '')}/root/content"
225236
return encoded_url
226237

227238

0 commit comments

Comments
 (0)