split out mirrors data structure into standalone, tested function
This commit is contained in:
parent
9749282b44
commit
cff3364fdf
|
@ -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]
|
||||
|
|
|
@ -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__))
|
||||
|
|
Loading…
Reference in New Issue