add 'pathprefix2dict' utility for use by DataSourceNoCloud
This commit is contained in:
@@ -1889,3 +1889,28 @@ def expand_dotted_devname(dotted):
|
|||||||
return toks
|
return toks
|
||||||
else:
|
else:
|
||||||
return (dotted, None)
|
return (dotted, None)
|
||||||
|
|
||||||
|
|
||||||
|
def pathprefix2dict(base, required=None, optional=None, delim=os.path.sep):
|
||||||
|
# return a dictionary populated with keys in 'required' and 'optional'
|
||||||
|
# by reading files in prefix + delim + entry
|
||||||
|
if required is None:
|
||||||
|
required = []
|
||||||
|
if optional is None:
|
||||||
|
optional = []
|
||||||
|
|
||||||
|
missing = []
|
||||||
|
ret = {}
|
||||||
|
for f in required + optional:
|
||||||
|
try:
|
||||||
|
ret[f] = load_file(base + delim + f, quiet=False)
|
||||||
|
except IOError as e:
|
||||||
|
if e.errno != errno.ENOENT:
|
||||||
|
raise
|
||||||
|
if f in required:
|
||||||
|
missing.append(f)
|
||||||
|
|
||||||
|
if len(missing):
|
||||||
|
raise ValueError("Missing required files: %s", ','.join(missing))
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|||||||
40
tests/unittests/test_pathprefix2dict.py
Normal file
40
tests/unittests/test_pathprefix2dict.py
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
from cloudinit import util
|
||||||
|
|
||||||
|
from mocker import MockerTestCase
|
||||||
|
from tests.unittests.helpers import populate_dir
|
||||||
|
|
||||||
|
|
||||||
|
class TestPathPrefix2Dict(MockerTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.tmp = self.makeDir()
|
||||||
|
|
||||||
|
def test_required_only(self):
|
||||||
|
dirdata = {'f1': 'f1content', 'f2': 'f2content'}
|
||||||
|
populate_dir(self.tmp, dirdata)
|
||||||
|
|
||||||
|
ret = util.pathprefix2dict(self.tmp, required=['f1', 'f2'])
|
||||||
|
self.assertEqual(dirdata, ret)
|
||||||
|
|
||||||
|
def test_required_missing(self):
|
||||||
|
dirdata = {'f1': 'f1content'}
|
||||||
|
populate_dir(self.tmp, dirdata)
|
||||||
|
kwargs = {'required': ['f1', 'f2']}
|
||||||
|
self.assertRaises(ValueError, util.pathprefix2dict, self.tmp, **kwargs)
|
||||||
|
|
||||||
|
def test_no_required_and_optional(self):
|
||||||
|
dirdata = {'f1': 'f1c', 'f2': 'f2c'}
|
||||||
|
populate_dir(self.tmp, dirdata)
|
||||||
|
|
||||||
|
ret = util.pathprefix2dict(self.tmp, required=None,
|
||||||
|
optional=['f1', 'f2'])
|
||||||
|
self.assertEqual(dirdata, ret)
|
||||||
|
|
||||||
|
def test_required_and_optional(self):
|
||||||
|
dirdata = {'f1': 'f1c', 'f2': 'f2c'}
|
||||||
|
populate_dir(self.tmp, dirdata)
|
||||||
|
|
||||||
|
ret = util.pathprefix2dict(self.tmp, required=['f1'], optional=['f2'])
|
||||||
|
self.assertEqual(dirdata, ret)
|
||||||
|
|
||||||
|
# vi: ts=4 expandtab
|
||||||
Reference in New Issue
Block a user