mirror of
https://github.com/void-linux/void-packages.git
synced 2025-06-05 14:43:52 +02:00
deluge: patch for python 3.13
This commit is contained in:
parent
55f51f8b97
commit
63b15006cd
2 changed files with 108 additions and 1 deletions
107
srcpkgs/deluge/patches/replace-cgi.patch
Normal file
107
srcpkgs/deluge/patches/replace-cgi.patch
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
From 5d96cfc72f0bfa36d90afd2725aa2216b8073d66 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mamoru TASAKA <mtasaka@fedoraproject.org>
|
||||||
|
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)
|
|
@ -1,7 +1,7 @@
|
||||||
# Template file for 'deluge'
|
# Template file for 'deluge'
|
||||||
pkgname=deluge
|
pkgname=deluge
|
||||||
version=2.1.1
|
version=2.1.1
|
||||||
revision=3
|
revision=4
|
||||||
build_style=python3-module
|
build_style=python3-module
|
||||||
# TODO package python3-slimit to minify javascript
|
# TODO package python3-slimit to minify javascript
|
||||||
hostmakedepends="intltool python3-setuptools python3-wheel"
|
hostmakedepends="intltool python3-setuptools python3-wheel"
|
||||||
|
|
Loading…
Add table
Reference in a new issue