diff --git a/srcpkgs/deluge/patches/replace-cgi.patch b/srcpkgs/deluge/patches/replace-cgi.patch deleted file mode 100644 index 5f1cf3b5832..00000000000 --- a/srcpkgs/deluge/patches/replace-cgi.patch +++ /dev/null @@ -1,107 +0,0 @@ -From 5d96cfc72f0bfa36d90afd2725aa2216b8073d66 Mon Sep 17 00:00:00 2001 -From: Mamoru TASAKA -Date: Thu, 29 Aug 2024 15:31:25 +0900 -Subject: [PATCH] [UI] Replace deprecated cgi module with email - -As PEP 594 says, cgi module is marked as deprecated -in python 3.11, and will be removed in 3.13 -(actually removed at least in 3.13 rc1). - -As suggested on PEP 594, replace cgi.parse_header -with email.message.EmailMessage introduced in python 3.6. - -Updated test modify test_download_with_rename_sanitised -- With RFC2045 specification, Content-Disposition filenames -parameter containing slash (directory separator) must be -quoted, so changing as such. - -Ref: https://peps.python.org/pep-0594/#deprecated-modules -Ref: https://peps.python.org/pep-0594/#cgi - -Closes: https://github.com/deluge-torrent/deluge/pull/462 ---- - deluge/httpdownloader.py | 14 +++++++++----- - deluge/tests/test_httpdownloader.py | 4 ++-- - deluge/ui/web/json_api.py | 6 ++++-- - 3 files changed, 15 insertions(+), 9 deletions(-) - -diff --git a/deluge/httpdownloader.py b/deluge/httpdownloader.py -index 700ade06bf..c19e3aa7ed 100644 ---- a/deluge/httpdownloader.py -+++ b/deluge/httpdownloader.py -@@ -6,7 +6,7 @@ - # See LICENSE for more details. - # - --import cgi -+import email.message - import logging - import os.path - import zlib -@@ -133,9 +133,10 @@ def request_callback(self, response): - content_disp = headers.getRawHeaders(b'content-disposition')[0].decode( - 'utf-8' - ) -- content_disp_params = cgi.parse_header(content_disp)[1] -- if 'filename' in content_disp_params: -- new_file_name = content_disp_params['filename'] -+ message = email.message.EmailMessage() -+ message['content-disposition'] = content_disp -+ new_file_name = message.get_filename() -+ if new_file_name: - new_file_name = sanitise_filename(new_file_name) - new_file_name = os.path.join( - os.path.split(self.filename)[0], new_file_name -@@ -152,7 +153,10 @@ def request_callback(self, response): - self.filename = new_file_name - - cont_type_header = headers.getRawHeaders(b'content-type')[0].decode() -- cont_type, params = cgi.parse_header(cont_type_header) -+ message = email.message.EmailMessage() -+ message['content-type'] = cont_type_header -+ cont_type = message.get_content_type() -+ params = message['content-type'].params - # Only re-ecode text content types. - encoding = None - if cont_type.startswith('text/'): -diff --git a/deluge/tests/test_httpdownloader.py b/deluge/tests/test_httpdownloader.py -index 1c27045603..0a4695b5ce 100644 ---- a/deluge/tests/test_httpdownloader.py -+++ b/deluge/tests/test_httpdownloader.py -@@ -206,10 +206,10 @@ async def test_download_with_rename_exists(self): - self.assert_contains(filename, 'This file should be called renamed') - - async def test_download_with_rename_sanitised(self): -- url = self.get_url('rename?filename=/etc/passwd') -+ url = self.get_url('rename?filename="/etc/passwd"') - filename = await download_file(url, fname('original')) - assert filename == fname('passwd') -- self.assert_contains(filename, 'This file should be called /etc/passwd') -+ self.assert_contains(filename, 'This file should be called "/etc/passwd"') - - async def test_download_with_attachment_no_filename(self): - url = self.get_url('attachment') -diff --git a/deluge/ui/web/json_api.py b/deluge/ui/web/json_api.py -index 1a0e66f77d..dd921c801e 100644 ---- a/deluge/ui/web/json_api.py -+++ b/deluge/ui/web/json_api.py -@@ -6,7 +6,7 @@ - # See LICENSE for more details. - # - --import cgi -+import email.message - import json - import logging - import os -@@ -191,7 +191,9 @@ def _on_json_request(self, request): - Handler to take the json data as a string and pass it on to the - _handle_request method for further processing. - """ -- content_type, _ = cgi.parse_header(request.getHeader(b'content-type').decode()) -+ message = email.message.EmailMessage() -+ message['content-type'] = request.getHeader(b'content-type').decode() -+ content_type = message.get_content_type() - if content_type != 'application/json': - message = 'Invalid JSON request content-type: %s' % content_type - raise JSONException(message) diff --git a/srcpkgs/deluge/template b/srcpkgs/deluge/template index 28f0fec8275..b2429f3d9f7 100644 --- a/srcpkgs/deluge/template +++ b/srcpkgs/deluge/template @@ -1,7 +1,7 @@ # Template file for 'deluge' pkgname=deluge -version=2.1.1 -revision=4 +version=2.2.0 +revision=1 build_style=python3-module # TODO package python3-slimit to minify javascript hostmakedepends="intltool python3-setuptools python3-wheel" @@ -14,7 +14,7 @@ license="GPL-3.0-or-later" homepage="https://deluge-torrent.org/" changelog="https://raw.githubusercontent.com/deluge-torrent/deluge/develop/CHANGELOG.md" distfiles="https://ftp.osuosl.org/pub/deluge/source/${version%.*}/deluge-${version}.tar.xz" -checksum=768dd319802e42437ab3794ebe75b497142e08ed5b0fb2503bad62cef442dff7 +checksum=b9ba272b5ba42aaf1c694e6c29628ab816cc1a700a37bac08aacb52571606acd make_check=no # requires unpackaged pytest_twisted system_accounts="deluge"