split out mirrors data structure into standalone, tested function

This commit is contained in:
Hans-Christoph Steiner 2024-02-26 18:45:05 +01:00
parent 9749282b44
commit cff3364fdf
2 changed files with 36 additions and 17 deletions

View File

@ -486,14 +486,7 @@ def read_config(opts=None):
fill_config_defaults(config)
if 'serverwebroot' in config:
if isinstance(config['serverwebroot'], str):
roots = [{'url': config['serverwebroot']}]
elif all(isinstance(item, str) for item in config['serverwebroot']):
roots = [{'url': i} for i in config['serverwebroot']]
elif all(isinstance(item, dict) for item in config['serverwebroot']):
roots = config['serverwebroot']
else:
raise TypeError(_('only accepts strings, lists, and tuples'))
roots = parse_mirrors_config(config['serverwebroot'])
rootlist = []
for d in roots:
# since this is used with rsync, where trailing slashes have
@ -506,15 +499,7 @@ def read_config(opts=None):
config['serverwebroot'] = rootlist
if 'servergitmirrors' in config:
if isinstance(config['servergitmirrors'], str):
roots = [{"url": config['servergitmirrors']}]
elif all(isinstance(item, str) for item in config['servergitmirrors']):
roots = [{'url': i} for i in config['servergitmirrors']]
elif all(isinstance(item, dict) for item in config['servergitmirrors']):
roots = config['servergitmirrors']
else:
raise TypeError(_('only accepts strings, lists, and tuples'))
config['servergitmirrors'] = roots
config['servergitmirrors'] = parse_mirrors_config(config['servergitmirrors'])
limit = config['git_mirror_size_limit']
config['git_mirror_size_limit'] = parse_human_readable_size(limit)
@ -557,6 +542,18 @@ def read_config(opts=None):
return config
def parse_mirrors_config(mirrors):
"""Mirrors can be specified as a string, list of strings, or dictionary map."""
if isinstance(mirrors, str):
return [{"url": mirrors}]
elif all(isinstance(item, str) for item in mirrors):
return [{'url': i} for i in mirrors]
elif all(isinstance(item, dict) for item in mirrors):
return mirrors
else:
raise TypeError(_('only accepts strings, lists, and tuples'))
def file_entry(filename, hash_value=None):
meta = {}
meta["name"] = "/" + filename.split("/", 1)[1]

View File

@ -12,6 +12,7 @@ import logging
import optparse
import os
import re
import ruamel.yaml
import shutil
import subprocess
import sys
@ -2892,6 +2893,27 @@ class CommonTest(unittest.TestCase):
fdroidserver.common.read_config()['serverwebroot'],
)
def test_parse_mirrors_config_str(self):
s = 'foo@example.com:/var/www'
mirrors = ruamel.yaml.YAML(typ='safe').load("""'%s'""" % s)
self.assertEqual(
[{'url': s}], fdroidserver.common.parse_mirrors_config(mirrors)
)
def test_parse_mirrors_config_list(self):
s = 'foo@example.com:/var/www'
mirrors = ruamel.yaml.YAML(typ='safe').load("""- '%s'""" % s)
self.assertEqual(
[{'url': s}], fdroidserver.common.parse_mirrors_config(mirrors)
)
def test_parse_mirrors_config_dict(self):
s = 'foo@example.com:/var/www'
mirrors = ruamel.yaml.YAML(typ='safe').load("""- url: '%s'""" % s)
self.assertEqual(
[{'url': s}], fdroidserver.common.parse_mirrors_config(mirrors)
)
if __name__ == "__main__":
os.chdir(os.path.dirname(__file__))