From 5fde2f4d037ffc080007d7b98008677dcd2b8da1 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 5 Dec 2024 13:40:33 +0100 Subject: [PATCH 1/4] replace deprecated pkg_resources.get_distribution() from setuptools This should fix the CI error for macOS and reduce technical debt. https://gitlab.com/fdroid/fdroidserver/-/jobs/8542884186 --- tests/test_common.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/test_common.py b/tests/test_common.py index 5ad5a771..4ae55c73 100755 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -2394,11 +2394,9 @@ class CommonTest(unittest.TestCase): def test_auto_install_ndk_mock_dl(self): """Test NDK installs by actually calling sdkmanager""" import sdkmanager - import pkg_resources + import importlib.metadata - sdkmanager_version = LooseVersion( - pkg_resources.get_distribution('sdkmanager').version - ) + sdkmanager_version = LooseVersion(importlib.metadata.version('sdkmanager')) if sdkmanager_version < LooseVersion('0.6.4'): raise unittest.SkipTest('needs fdroid sdkmanager >= 0.6.4') From 46dba20ba30c3928acfecb0ccc6cec371c81bd01 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 5 Dec 2024 18:13:04 +0100 Subject: [PATCH 2/4] setup.py: update classifiers --- setup.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 0631fd6e..0a87a665 100755 --- a/setup.py +++ b/setup.py @@ -127,7 +127,7 @@ setup( ], }, classifiers=[ - 'Development Status :: 4 - Beta', + 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Developers', 'Intended Audience :: Information Technology', 'Intended Audience :: System Administrators', @@ -136,6 +136,13 @@ setup( 'Operating System :: POSIX', 'Operating System :: MacOS :: MacOS X', 'Operating System :: Unix', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.9', + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + 'Programming Language :: Python :: 3 :: Only', 'Topic :: Utilities', ], ) From 6d40e8fa2770d58045426bcbc27376f1da7f4c05 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 5 Dec 2024 18:13:32 +0100 Subject: [PATCH 3/4] extras_require: python-magic is preferred when libmagic is available --- setup.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 0a87a665..422a5962 100755 --- a/setup.py +++ b/setup.py @@ -116,8 +116,13 @@ setup( # Some requires are only needed for very limited cases: # * biplist is only used for parsing Apple .ipa files # * pycountry is only for linting config/mirrors.yml + # * python-magic is preferred when libmagic is available, but its not in pypi.org extras_require={ - 'optional': ['biplist', 'pycountry'], + 'optional': [ + 'biplist', + 'pycountry', + 'python-magic', + ], 'test': ['pyjks', 'html5print'], 'docs': [ 'sphinx', From bc118484e4c12d84e5c31a29caca0a7ac2dc69e1 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 6 Dec 2024 12:23:27 +0100 Subject: [PATCH 4/4] index.xml: XML escaping from Python < 3.13 which stopped converting " index.xml is for old clients that are stuck in the past forever. So the format should not change at all. Python 3.13 changed minidom so it no longer converts " to an XML entity. https://github.com/python/cpython/commit/154477be722ae5c4e18d22d0860e284006b09c4f --- fdroidserver/index.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/fdroidserver/index.py b/fdroidserver/index.py index 5a174d51..096ace12 100644 --- a/fdroidserver/index.py +++ b/fdroidserver/index.py @@ -28,6 +28,7 @@ import os import re import ruamel.yaml import shutil +import sys import tempfile import urllib.parse import zipfile @@ -1309,6 +1310,29 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing os.remove(siglinkname) os.symlink(sigfile_path, siglinkname) + if sys.version_info.minor >= 13: + # Python 3.13 changed minidom so it no longer converts " to an XML entity. + # https://github.com/python/cpython/commit/154477be722ae5c4e18d22d0860e284006b09c4f + # This just puts back the previous implementation, with black code format. + import inspect + import xml.dom.minidom + + def _write_data(writer, text, attr): # pylint: disable=unused-argument + if text: + text = ( + text.replace('&', '&') + .replace('<', '<') + .replace('"', '"') + .replace('>', '>') + ) + writer.write(text) + + argnames = tuple(inspect.signature(xml.dom.minidom._write_data).parameters) + if argnames == ('writer', 'text', 'attr'): + xml.dom.minidom._write_data = _write_data + else: + logging.warning('Failed to monkey patch minidom for index.xml support!') + if common.options.pretty: output = doc.toprettyxml(encoding='utf-8') else: