diff --git a/py314.patch b/py314.patch new file mode 100644 index 0000000..2bdf884 --- /dev/null +++ b/py314.patch @@ -0,0 +1,46 @@ +From d90297a181c8edd8ffe5c08ba03866845e9a3493 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= +Date: Fri, 22 Nov 2024 22:20:13 +0100 +Subject: [PATCH] Avoid the multiprocessing forkserver method (#656) + +Python 3.14 changed the default multiprocessing method for POSIX (sans macOS) +from fork to forkserver. This causes errors like: + + TypeError: cannot pickle 'select.epoll' object + when serializing dict item '_poller' + when serializing pyftpdlib.ioloop.Epoll state + when serializing pyftpdlib.ioloop.Epoll object + when serializing dict item 'ioloop' + when serializing pyftpdlib.servers.MultiprocessFTPServer state + when serializing pyftpdlib.servers.MultiprocessFTPServer object + when serializing tuple item 0 + when serializing method reconstructor arguments + when serializing method object + when serializing dict item '_target' + when serializing multiprocessing.context.Process state + when serializing multiprocessing.context.Process object + +See https://github.com/python/cpython/issues/125714 +--- + pyftpdlib/servers.py | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/pyftpdlib/servers.py b/pyftpdlib/servers.py +index 32c0db02..3dfc39c6 100644 +--- a/pyftpdlib/servers.py ++++ b/pyftpdlib/servers.py +@@ -579,6 +579,13 @@ class MultiprocessFTPServer(_SpawnerBase): + + _lock = multiprocessing.Lock() + _exit = multiprocessing.Event() ++ # Python 3.14 changed the non-macOS POSIX default to forkserver ++ # but the code in this module does not work with it ++ # See https://github.com/python/cpython/issues/125714 ++ if multiprocessing.get_start_method() == 'forkserver': ++ _mp_context = multiprocessing.get_context(method='fork') ++ else: ++ _mp_context = multiprocessing.get_context() + + def _start_task(self, *args, **kwargs): +- return multiprocessing.Process(*args, **kwargs) ++ return self._mp_context.Process(*args, **kwargs) diff --git a/pyftpdlib-1.5.10.tar.gz b/pyftpdlib-1.5.10.tar.gz deleted file mode 100644 index febea88..0000000 --- a/pyftpdlib-1.5.10.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8dbdeb1215bcba2fb748dae31ffdb1ab008540c28d13b3704e178f368a087128 -size 204487 diff --git a/pyftpdlib-2.0.1.tar.gz b/pyftpdlib-2.0.1.tar.gz new file mode 100644 index 0000000..fccc2da --- /dev/null +++ b/pyftpdlib-2.0.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef0d172a82bfae10e2dec222e87533514609d41bf4b0fd0f07e29d4380fb96bf +size 202285 diff --git a/python-pyftpdlib.changes b/python-pyftpdlib.changes index 842541a..9717de6 100644 --- a/python-pyftpdlib.changes +++ b/python-pyftpdlib.changes @@ -1,3 +1,18 @@ +------------------------------------------------------------------- +Thu Sep 11 12:40:28 UTC 2025 - Markéta Machová + +- Update to 2.0.1 + * exposed a new FTPHandler.encoding attribute defaulting to 'utf-8'. + * removed Python 2.7 support. + * remove copies of asyncore.py and asynchat.py. Use backports from + PYPI instead. + * set default SSL version from deprecated SSLv23_METHOD to newer + TLS_SERVER_METHOD. + * pysendfile module is no longer a required dependency. + * SSLv2 and SSLv3 connections are no longer accepted when client + connects. +- Add py314.patch to add compatibility with Python 3.14 + ------------------------------------------------------------------- Tue Aug 19 14:26:32 UTC 2025 - Markéta Machová diff --git a/python-pyftpdlib.spec b/python-pyftpdlib.spec index f5a661f..94a12c6 100644 --- a/python-pyftpdlib.spec +++ b/python-pyftpdlib.spec @@ -1,7 +1,7 @@ # # spec file for package python-pyftpdlib # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2025 SUSE LLC and contributors # Copyright (c) 2016 LISA GmbH, Bingen, Germany. # # All modifications and additions to the file contributed by third parties @@ -24,24 +24,27 @@ %endif %{?sle15_python_module_pythons} Name: python-pyftpdlib -Version: 1.5.10 +Version: 2.0.1 Release: 0 Summary: Asynchronous FTP server library for Python License: MIT URL: https://github.com/giampaolo/pyftpdlib/ Source: https://files.pythonhosted.org/packages/source/p/pyftpdlib/pyftpdlib-%{version}.tar.gz Source1: keycert.pem +# PATCH-FIX-UPSTREAM https://github.com/giampaolo/pyftpdlib/pull/656 Avoid the multiprocessing forkserver method +Patch0: py314.patch BuildRequires: %{python_module pip} BuildRequires: %{python_module psutil} BuildRequires: %{python_module pyOpenSSL} -BuildRequires: %{python_module pysendfile} +BuildRequires: %{python_module pyasynchat} BuildRequires: %{python_module pytest} BuildRequires: %{python_module setuptools} BuildRequires: %{python_module wheel} BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: python-pyOpenSSL -Recommends: python-pysendfile +Requires: python-pyasynchat +Requires: python-pyasyncore BuildArch: noarch %if %{with libalternatives} BuildRequires: alts @@ -58,7 +61,7 @@ write very asynchronous FTP servers with Python. %prep %autosetup -p1 -n pyftpdlib-%{version} -sed -i '1 {/env python/ d}' pyftpdlib/test/*.py pyftpdlib/_compat.py +sed -i '1 {/env python/ d}' pyftpdlib/test/*.py cp %{SOURCE1} pyftpdlib/test %build