Merge branch 'format' into 'master'

ruff: add exclude list

See merge request fdroid/fdroidserver!1754
This commit is contained in:
Hans-Christoph Steiner
2025-12-11 12:33:18 +00:00
6 changed files with 176 additions and 117 deletions

View File

@@ -19,7 +19,7 @@ ignore = "E123,E203,E402,E501,W503"
[tool.black]
skip-string-normalization = true
target-version = ["py38"]
target-version = ["py39"]
include = '(^fdroid|\.pyi?)$'
# These files will never be included in black runs. To run black on
# one of thes files, remove it from this list.
@@ -125,3 +125,22 @@ max-line-length = 88
[tool.ruff.format]
quote-style = "preserve"
exclude = [
"docs/source/conf.py",
"examples/fdroid_export_keystore_to_nitrokey.py",
"examples/fdroid_exportkeystore.py",
"examples/fdroid_fetchsrclibs.py",
"examples/fdroid_nitrokeyimport.py",
"fdroidserver/__main__.py",
"fdroidserver/apksigcopier.py",
"fdroidserver/looseversion.py",
"fdroidserver/build.py",
"fdroidserver/checkupdates.py",
"fdroidserver/vmtools.py",
"tests/config.py",
"tests/extra/manual-vmtools-test.py",
"tests/openssl-version-check-test.py",
"tests/valid-package-names/test.py",
"tests/test_common.py",
"tests/test_update.py",
]

View File

@@ -279,9 +279,11 @@ class BuildTest(unittest.TestCase):
@mock.patch('sdkmanager.build_package_list', lambda use_net: None)
def test_build_local_ndk(self):
"""Test if `fdroid build` detects installed NDKs and auto-installs when missing"""
with tempfile.TemporaryDirectory() as testdir, TmpCwd(
testdir
), tempfile.TemporaryDirectory() as sdk_path:
with (
tempfile.TemporaryDirectory() as testdir,
TmpCwd(testdir),
tempfile.TemporaryDirectory() as sdk_path,
):
config = {'ndk_paths': {}, 'sdk_path': sdk_path}
fdroidserver.common.config = config
fdroidserver.build.config = config
@@ -315,26 +317,33 @@ class BuildTest(unittest.TestCase):
fp.write('Pkg.Revision = %s\n' % ndk_version)
# use "as _ignored" just to make a pretty layout
with mock.patch(
'fdroidserver.common.replace_build_vars', wraps=make_fake_apk
) as _ignored, mock.patch(
'fdroidserver.common.get_native_code', return_value='x86'
) as _ignored, mock.patch(
'fdroidserver.common.get_apk_id',
return_value=(app.id, build.versionCode, build.versionName),
) as _ignored, mock.patch(
'fdroidserver.common.sha256sum',
return_value='ad7ce5467e18d40050dc51b8e7affc3e635c85bd8c59be62de32352328ed467e',
) as _ignored, mock.patch(
'fdroidserver.common.is_debuggable_or_testOnly',
return_value=False,
) as _ignored, mock.patch(
'fdroidserver.build.FDroidPopen', FakeProcess
) as _ignored, mock.patch(
'sdkmanager.install', wraps=fake_sdkmanager_install
) as _ignored, mock.patch(
'fdroidserver.common.get_source_date_epoch', lambda f: '1234567890'
) as _ignored:
with (
mock.patch(
'fdroidserver.common.replace_build_vars', wraps=make_fake_apk
) as _ignored,
mock.patch(
'fdroidserver.common.get_native_code', return_value='x86'
) as _ignored,
mock.patch(
'fdroidserver.common.get_apk_id',
return_value=(app.id, build.versionCode, build.versionName),
) as _ignored,
mock.patch(
'fdroidserver.common.sha256sum',
return_value='ad7ce5467e18d40050dc51b8e7affc3e635c85bd8c59be62de32352328ed467e',
) as _ignored,
mock.patch(
'fdroidserver.common.is_debuggable_or_testOnly',
return_value=False,
) as _ignored,
mock.patch('fdroidserver.build.FDroidPopen', FakeProcess) as _ignored,
mock.patch(
'sdkmanager.install', wraps=fake_sdkmanager_install
) as _ignored,
mock.patch(
'fdroidserver.common.get_source_date_epoch', lambda f: '1234567890'
) as _ignored,
):
_ignored # silence the linters
with self.assertRaises(
fdroidserver.exception.FDroidException,
@@ -389,9 +398,11 @@ class BuildTest(unittest.TestCase):
)
def test_build_local_ndk_some_installed(self):
"""Test if `fdroid build` detects installed NDKs and auto-installs when missing"""
with tempfile.TemporaryDirectory() as testdir, TmpCwd(
testdir
), tempfile.TemporaryDirectory() as sdk_path:
with (
tempfile.TemporaryDirectory() as testdir,
TmpCwd(testdir),
tempfile.TemporaryDirectory() as sdk_path,
):
ndk_r24 = os.path.join(sdk_path, 'ndk', '24.0.8215888')
os.makedirs(ndk_r24)
with open(os.path.join(ndk_r24, 'source.properties'), 'w') as fp:
@@ -429,14 +440,18 @@ class BuildTest(unittest.TestCase):
fp.write('Pkg.Revision = %s\n' % ndk_version)
# use "as _ignored" just to make a pretty layout
with mock.patch(
'fdroidserver.common.replace_build_vars', wraps=make_fake_apk
) as _ignored, mock.patch(
'fdroidserver.common.get_apk_id',
return_value=(app.id, build.versionCode, build.versionName),
) as _ignored, mock.patch(
'sdkmanager.install', wraps=fake_sdkmanager_install
) as _ignored:
with (
mock.patch(
'fdroidserver.common.replace_build_vars', wraps=make_fake_apk
) as _ignored,
mock.patch(
'fdroidserver.common.get_apk_id',
return_value=(app.id, build.versionCode, build.versionName),
) as _ignored,
mock.patch(
'sdkmanager.install', wraps=fake_sdkmanager_install
) as _ignored,
):
_ignored # silence the linters
self.assertFalse(ndk_dir.exists())
self.assertFalse('r21e' in config['ndk_paths'])
@@ -639,19 +654,18 @@ class BuildTest(unittest.TestCase):
test_compare_file = os.path.join(
'tmp', 'binaries', '%s_%d.binary.apk' % (appid, build['versionCode'])
)
with mock.patch(
'fdroidserver.common.force_exit', lambda *args: None
) as a, mock.patch(
'fdroidserver.common.get_android_tools_version_log', lambda: 'fake'
) as b, mock.patch(
'fdroidserver.common.FDroidPopen', FakeProcess
) as c, mock.patch(
'fdroidserver.build.FDroidPopen', FakeProcess
) as d, mock.patch(
'fdroidserver.build.trybuild', lambda *args: True
) as e, mock.patch(
'fdroidserver.net.download_file', lambda *args, **kwargs: None
) as f:
with (
mock.patch('fdroidserver.common.force_exit', lambda *args: None) as a,
mock.patch(
'fdroidserver.common.get_android_tools_version_log', lambda: 'fake'
) as b,
mock.patch('fdroidserver.common.FDroidPopen', FakeProcess) as c,
mock.patch('fdroidserver.build.FDroidPopen', FakeProcess) as d,
mock.patch('fdroidserver.build.trybuild', lambda *args: True) as e,
mock.patch(
'fdroidserver.net.download_file', lambda *args, **kwargs: None
) as f,
):
a, b, c, d, e, f # silence linters' "unused" warnings
with mock.patch('sys.argv', ['fdroid build', appid]):
@@ -732,31 +746,33 @@ class BuildTest(unittest.TestCase):
test_compare_file = os.path.join(
'tmp', 'binaries', '%s_%d.binary.apk' % (appid, build['versionCode'])
)
with mock.patch(
'fdroidserver.common.force_exit', lambda *args: None
) as a, mock.patch(
'fdroidserver.common.get_android_tools_version_log', lambda: 'fake'
) as b, mock.patch(
'fdroidserver.common.FDroidPopen', FakeProcess
) as c, mock.patch(
'fdroidserver.build.FDroidPopen', FakeProcess
) as d, mock.patch(
'fdroidserver.build.trybuild', lambda *args: True
) as e, mock.patch(
'fdroidserver.net.download_file', lambda *args, **kwargs: None
) as f:
with (
mock.patch('fdroidserver.common.force_exit', lambda *args: None) as a,
mock.patch(
'fdroidserver.common.get_android_tools_version_log', lambda: 'fake'
) as b,
mock.patch('fdroidserver.common.FDroidPopen', FakeProcess) as c,
mock.patch('fdroidserver.build.FDroidPopen', FakeProcess) as d,
mock.patch('fdroidserver.build.trybuild', lambda *args: True) as e,
mock.patch(
'fdroidserver.net.download_file', lambda *args, **kwargs: None
) as f,
):
a, b, c, d, e, f # silence linters' "unused" warnings
with mock.patch('sys.argv', ['fdroid build', appid]):
# successful comparison, successful signer
open(production_result, 'w').close()
open(production_compare_file, 'w').close()
with mock.patch(
'fdroidserver.common.verify_apks', lambda *args: None
) as g, mock.patch(
'fdroidserver.common.apk_signer_fingerprint',
lambda *args: expected_key,
) as h:
with (
mock.patch(
'fdroidserver.common.verify_apks', lambda *args: None
) as g,
mock.patch(
'fdroidserver.common.apk_signer_fingerprint',
lambda *args: expected_key,
) as h,
):
g, h
fdroidserver.build.main()
self.assertTrue(os.path.exists(production_result))
@@ -764,12 +780,15 @@ class BuildTest(unittest.TestCase):
# successful comparison, failed signer
open(production_result, 'w').close()
open(production_compare_file, 'w').close()
with mock.patch(
'fdroidserver.common.verify_apks', lambda *args: None
) as g, mock.patch(
'fdroidserver.common.apk_signer_fingerprint',
lambda *args: bogus_key,
) as h:
with (
mock.patch(
'fdroidserver.common.verify_apks', lambda *args: None
) as g,
mock.patch(
'fdroidserver.common.apk_signer_fingerprint',
lambda *args: bogus_key,
) as h,
):
g, h
fdroidserver.build.main()
self.assertFalse(os.path.exists(production_result))
@@ -788,12 +807,15 @@ class BuildTest(unittest.TestCase):
# successful comparison, successful signer
open(test_result, 'w').close()
open(test_compare_file, 'w').close()
with mock.patch(
'fdroidserver.common.verify_apks', lambda *args: None
) as g, mock.patch(
'fdroidserver.common.apk_signer_fingerprint',
lambda *args: expected_key,
) as h:
with (
mock.patch(
'fdroidserver.common.verify_apks', lambda *args: None
) as g,
mock.patch(
'fdroidserver.common.apk_signer_fingerprint',
lambda *args: expected_key,
) as h,
):
g, h
fdroidserver.build.main()
self.assertTrue(os.path.exists(test_result))
@@ -803,12 +825,15 @@ class BuildTest(unittest.TestCase):
# successful comparison, failed signer
open(test_result, 'w').close()
open(test_compare_file, 'w').close()
with mock.patch(
'fdroidserver.common.verify_apks', lambda *args: None
) as g, mock.patch(
'fdroidserver.common.apk_signer_fingerprint',
lambda *args: bogus_key,
) as h:
with (
mock.patch(
'fdroidserver.common.verify_apks', lambda *args: None
) as g,
mock.patch(
'fdroidserver.common.apk_signer_fingerprint',
lambda *args: bogus_key,
) as h,
):
g, h
fdroidserver.build.main()
self.assertTrue(os.path.exists(test_result))

View File

@@ -249,10 +249,12 @@ class CheckupdatesTest(unittest.TestCase):
vcs = mock.Mock()
vcs.latesttags.return_value = ['1.1.9', '1.1.8']
with mock.patch(
'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109'
) as _ignored, mock.patch.object(Path, 'is_file') as mock_path, mock.patch(
'fdroidserver.common.getvcs', return_value=vcs
with (
mock.patch(
'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109'
) as _ignored,
mock.patch.object(Path, 'is_file') as mock_path,
mock.patch('fdroidserver.common.getvcs', return_value=vcs),
):
_ignored # silence the linters
mock_path.is_file.return_falue = True
@@ -261,10 +263,12 @@ class CheckupdatesTest(unittest.TestCase):
self.assertEqual(vercode, 10109)
app.UpdateCheckData = r'b.txt|c(.*)|.|v(.*)'
with mock.patch(
'pathlib.Path.read_text', lambda a: 'v1.1.0\nc10109'
) as _ignored, mock.patch.object(Path, 'is_file') as mock_path, mock.patch(
'fdroidserver.common.getvcs', return_value=vcs
with (
mock.patch(
'pathlib.Path.read_text', lambda a: 'v1.1.0\nc10109'
) as _ignored,
mock.patch.object(Path, 'is_file') as mock_path,
mock.patch('fdroidserver.common.getvcs', return_value=vcs),
):
_ignored # silence the linters
mock_path.is_file.return_falue = True
@@ -273,10 +277,12 @@ class CheckupdatesTest(unittest.TestCase):
self.assertEqual(vercode, 10109)
app.UpdateCheckData = r'b.txt|c(.*)||'
with mock.patch(
'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109'
) as _ignored, mock.patch.object(Path, 'is_file') as mock_path, mock.patch(
'fdroidserver.common.getvcs', return_value=vcs
with (
mock.patch(
'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109'
) as _ignored,
mock.patch.object(Path, 'is_file') as mock_path,
mock.patch('fdroidserver.common.getvcs', return_value=vcs),
):
_ignored # silence the linters
mock_path.is_file.return_falue = True
@@ -286,10 +292,12 @@ class CheckupdatesTest(unittest.TestCase):
vcs.latesttags.return_value = ['Android-1.1.0', '1.1.8']
app.UpdateCheckData = r'b.txt|c(.*)||Android-([\d.]+)'
with mock.patch(
'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109'
) as _ignored, mock.patch.object(Path, 'is_file') as mock_path, mock.patch(
'fdroidserver.common.getvcs', return_value=vcs
with (
mock.patch(
'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109'
) as _ignored,
mock.patch.object(Path, 'is_file') as mock_path,
mock.patch('fdroidserver.common.getvcs', return_value=vcs),
):
_ignored # silence the linters
mock_path.is_file.return_falue = True

View File

@@ -1085,11 +1085,13 @@ class GitHubReleasesTest(unittest.TestCase):
fri_mock = unittest.mock.Mock(return_value="fri_result")
urr_mock = unittest.mock.Mock()
with unittest.mock.patch(
"fdroidserver.deploy.find_release_infos", fri_mock
), unittest.mock.patch(
"fdroidserver.deploy.upload_to_github_releases_repo", urr_mock
), tempfile.TemporaryDirectory() as tmpdir:
with (
unittest.mock.patch("fdroidserver.deploy.find_release_infos", fri_mock),
unittest.mock.patch(
"fdroidserver.deploy.upload_to_github_releases_repo", urr_mock
),
tempfile.TemporaryDirectory() as tmpdir,
):
with open(Path(tmpdir) / "index-v2.json", "w") as f:
f.write("")

View File

@@ -108,10 +108,13 @@ class GithubApiTest(unittest.TestCase):
api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath')
uomock = mock_urlopen()
with unittest.mock.patch(
'fdroidserver.github.open',
unittest.mock.mock_open(read_data=b"fake_content"),
), unittest.mock.patch("urllib.request.urlopen", uomock):
with (
unittest.mock.patch(
'fdroidserver.github.open',
unittest.mock.mock_open(read_data=b"fake_content"),
),
unittest.mock.patch("urllib.request.urlopen", uomock),
):
success = api._create_release_asset('fake_id', 'fake_file')
self.assertTrue(success)

View File

@@ -130,13 +130,15 @@ class ImportTest(unittest.TestCase):
shutil.copytree(basedir / 'source-files' / appid, tmp_importer)
app = fdroidserver.import_subcommand.get_app_from_url(url)
with mock.patch(
'fdroidserver.common.getvcs',
lambda a, b, c: fdroidserver.common.vcs(url, testdir),
), mock.patch(
'fdroidserver.common.vcs.gotorevision', lambda s, rev: None
), mock.patch(
'shutil.rmtree', lambda a, onerror=None: None
with (
mock.patch(
'fdroidserver.common.getvcs',
lambda a, b, c: fdroidserver.common.vcs(url, testdir),
),
mock.patch(
'fdroidserver.common.vcs.gotorevision', lambda s, rev: None
),
mock.patch('shutil.rmtree', lambda a, onerror=None: None),
):
build_dir = fdroidserver.import_subcommand.clone_to_tmp_dir(app)
self.assertEqual('git', app.RepoType)