diff options
| author | Kai Kang <kai.kang@windriver.com> | 2025-03-06 18:20:34 +0800 |
|---|---|---|
| committer | Khem Raj <raj.khem@gmail.com> | 2025-03-07 08:36:59 -0800 |
| commit | 11b8917fe120a3ac07d0904307b44ccc6b95868d (patch) | |
| tree | 7130bb7b9b2230a1e46394c2f3e67663297d100d /meta-python/recipes-devtools/python | |
| parent | 2f7b184cda65749e8371086cf0820af48aba7628 (diff) | |
| download | meta-openembedded-11b8917fe120a3ac07d0904307b44ccc6b95868d.tar.gz | |
python3-requests-ftp: remove use of module cgi
python 3.13 removed some modules such as cgi which is required by python3-requests-ftp:
https://docs.python.org/3/whatsnew/3.13.html
Important removals:
PEP 594: The remaining 19 “dead batteries” (legacy stdlib modules) have
been removed from the standard library: aifc, audioop, cgi, cgitb,
chunk, crypt, imghdr, mailcap, msilib, nis, nntplib, ossaudiodev, pipes,
sndhdr, spwd, sunau, telnetlib, uu and xdrlib.
Backport and rebase a patch from Fedora to remove use of module cgi.
Signed-off-by: Kai Kang <kai.kang@windriver.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'meta-python/recipes-devtools/python')
| -rw-r--r-- | meta-python/recipes-devtools/python/python3-requests-ftp/0001-Remove-use-of-the-cgi-module.patch | 115 | ||||
| -rw-r--r-- | meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb | 1 |
2 files changed, 116 insertions, 0 deletions
diff --git a/meta-python/recipes-devtools/python/python3-requests-ftp/0001-Remove-use-of-the-cgi-module.patch b/meta-python/recipes-devtools/python/python3-requests-ftp/0001-Remove-use-of-the-cgi-module.patch new file mode 100644 index 0000000000..2d32bf0a17 --- /dev/null +++ b/meta-python/recipes-devtools/python/python3-requests-ftp/0001-Remove-use-of-the-cgi-module.patch | |||
| @@ -0,0 +1,115 @@ | |||
| 1 | python 3.13 removed some modules such as cgi which is required by python3-requests-ftp: | ||
| 2 | |||
| 3 | https://docs.python.org/3/whatsnew/3.13.html | ||
| 4 | |||
| 5 | Important removals: | ||
| 6 | |||
| 7 | PEP 594: The remaining 19 “dead batteries” (legacy stdlib modules) have | ||
| 8 | been removed from the standard library: aifc, audioop, cgi, cgitb, | ||
| 9 | chunk, crypt, imghdr, mailcap, msilib, nis, nntplib, ossaudiodev, pipes, | ||
| 10 | sndhdr, spwd, sunau, telnetlib, uu and xdrlib. | ||
| 11 | |||
| 12 | Backport and rebase a patch from Fedora to remove use of module cgi. | ||
| 13 | |||
| 14 | Upstream-Status: Backport [https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Server/source/tree/Packages/p/python-requests-ftp-0.3.1-36.fc42.src.rpm] | ||
| 15 | |||
| 16 | Signed-off-by: Kai Kang <kai.kang@windriver.com> | ||
| 17 | --- | ||
| 18 | requests_ftp/ftp.py | 56 --------------------------------------------- | ||
| 19 | 1 file changed, 56 deletions(-) | ||
| 20 | |||
| 21 | diff --git a/requests_ftp/ftp.py b/requests_ftp/ftp.py | ||
| 22 | index 9711905..85dac47 100644 | ||
| 23 | --- a/requests_ftp/ftp.py | ||
| 24 | +++ b/requests_ftp/ftp.py | ||
| 25 | @@ -6,7 +6,6 @@ from requests.compat import urlparse | ||
| 26 | from requests.hooks import dispatch_hook | ||
| 27 | from requests import Response, codes | ||
| 28 | from io import BytesIO | ||
| 29 | -import cgi | ||
| 30 | import os | ||
| 31 | import socket | ||
| 32 | |||
| 33 | @@ -29,12 +28,6 @@ class FTPSession(requests.Session): | ||
| 34 | content field contains the binary data.''' | ||
| 35 | return self.request('RETR', url, **kwargs) | ||
| 36 | |||
| 37 | - def stor(self, url, files=None, **kwargs): | ||
| 38 | - '''Sends an FTP STOR to a given URL. Returns a Response object. Expects | ||
| 39 | - to be given one file by the standard Requests method. The remote | ||
| 40 | - filename will be given by the URL provided.''' | ||
| 41 | - return self.request('STOR', url, files=files, **kwargs) | ||
| 42 | - | ||
| 43 | def nlst(self, url, **kwargs): | ||
| 44 | '''Sends an FTP NLST. Returns a Response object.''' | ||
| 45 | return self.request('NLST', url, **kwargs) | ||
| 46 | @@ -52,30 +45,6 @@ def monkeypatch_session(): | ||
| 47 | return | ||
| 48 | |||
| 49 | |||
| 50 | -def parse_multipart_files(request): | ||
| 51 | - '''Given a prepared reqest, return a file-like object containing the | ||
| 52 | - original data. This is pretty hacky.''' | ||
| 53 | - # Start by grabbing the pdict. | ||
| 54 | - _, pdict = cgi.parse_header(request.headers['Content-Type']) | ||
| 55 | - | ||
| 56 | - # Now, wrap the multipart data in a BytesIO buffer. This is annoying. | ||
| 57 | - buf = BytesIO() | ||
| 58 | - buf.write(request.body) | ||
| 59 | - buf.seek(0) | ||
| 60 | - | ||
| 61 | - # Parse the data. Simply take the first file. | ||
| 62 | - data = cgi.parse_multipart(buf, pdict) | ||
| 63 | - _, filedata = data.popitem() | ||
| 64 | - buf.close() | ||
| 65 | - | ||
| 66 | - # Get a BytesIO now, and write the file into it. | ||
| 67 | - buf = BytesIO() | ||
| 68 | - buf.write(''.join(filedata)) | ||
| 69 | - buf.seek(0) | ||
| 70 | - | ||
| 71 | - return buf | ||
| 72 | - | ||
| 73 | - | ||
| 74 | def data_callback_factory(variable): | ||
| 75 | '''Returns a callback suitable for use by the FTP library. This callback | ||
| 76 | will repeatedly save data into the variable provided to this function. This | ||
| 77 | @@ -135,7 +104,6 @@ class FTPAdapter(requests.adapters.BaseAdapter): | ||
| 78 | # send the specific queries. | ||
| 79 | self.func_table = {'LIST': self.list, | ||
| 80 | 'RETR': self.retr, | ||
| 81 | - 'STOR': self.stor, | ||
| 82 | 'NLST': self.nlst, | ||
| 83 | 'SIZE': self.size, | ||
| 84 | 'HEAD': self.head, | ||
| 85 | @@ -314,30 +282,6 @@ class FTPAdapter(requests.adapters.BaseAdapter): | ||
| 86 | response.status_code = codes.ok | ||
| 87 | return response | ||
| 88 | |||
| 89 | - def stor(self, path, request): | ||
| 90 | - '''Executes the FTP STOR command on the given path.''' | ||
| 91 | - | ||
| 92 | - # First, get the file handle. We assume (bravely) | ||
| 93 | - # that there is only one file to be sent to a given URL. We also | ||
| 94 | - # assume that the filename is sent as part of the URL, not as part of | ||
| 95 | - # the files argument. Both of these assumptions are rarely correct, | ||
| 96 | - # but they are easy. | ||
| 97 | - data = parse_multipart_files(request) | ||
| 98 | - | ||
| 99 | - # Split into the path and the filename. | ||
| 100 | - path, filename = os.path.split(path) | ||
| 101 | - | ||
| 102 | - # Switch directories and upload the data. | ||
| 103 | - self.conn.cwd(path) | ||
| 104 | - code = self.conn.storbinary('STOR ' + filename, data) | ||
| 105 | - | ||
| 106 | - # Close the connection and build the response. | ||
| 107 | - self.conn.close() | ||
| 108 | - | ||
| 109 | - response = build_binary_response(request, BytesIO(), code) | ||
| 110 | - | ||
| 111 | - return response | ||
| 112 | - | ||
| 113 | def nlst(self, path, request): | ||
| 114 | '''Executes the FTP NLST command on the given path.''' | ||
| 115 | data = BytesIO() | ||
diff --git a/meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb b/meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb index 119c62ea34..7e72391783 100644 --- a/meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb +++ b/meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb | |||
| @@ -3,6 +3,7 @@ HOMEPAGE = "http://github.com/Lukasa/requests-ftp" | |||
| 3 | LICENSE = "Apache-2.0" | 3 | LICENSE = "Apache-2.0" |
| 4 | LIC_FILES_CHKSUM = "file://LICENSE;md5=6683a23c9968b97709441dc884d46df6" | 4 | LIC_FILES_CHKSUM = "file://LICENSE;md5=6683a23c9968b97709441dc884d46df6" |
| 5 | 5 | ||
| 6 | SRC_URI += "file://0001-Remove-use-of-the-cgi-module.patch" | ||
| 6 | SRC_URI[sha256sum] = "7504ceb5cba8a5c0135ed738596820a78c5f2be92d79b29f96ba99b183d8057a" | 7 | SRC_URI[sha256sum] = "7504ceb5cba8a5c0135ed738596820a78c5f2be92d79b29f96ba99b183d8057a" |
| 7 | 8 | ||
| 8 | inherit pypi setuptools3 | 9 | inherit pypi setuptools3 |
