Commit 4f5d2411 authored by Jérome Perrin's avatar Jérome Perrin

cli/request: support yaml format for --parameters-file option

parent 2e29b436
...@@ -75,6 +75,7 @@ setup(name=name, ...@@ -75,6 +75,7 @@ setup(name=name,
'cachecontrol', 'cachecontrol',
'lockfile', 'lockfile',
'jsonschema', 'jsonschema',
'PyYAML',
'uritemplate', # used by hateoas navigator 'uritemplate', # used by hateoas navigator
'subprocess32; python_version<"3"', 'subprocess32; python_version<"3"',
'ipaddress; python_version<"3"', # used by whitelistfirewall 'ipaddress; python_version<"3"', # used by whitelistfirewall
......
...@@ -33,6 +33,7 @@ import os.path ...@@ -33,6 +33,7 @@ import os.path
import pprint import pprint
import lxml.etree import lxml.etree
import yaml
from slapos.cli.config import ClientConfigCommand from slapos.cli.config import ClientConfigCommand
from slapos.client import (ClientConfig, _getSoftwareReleaseFromSoftwareString, from slapos.client import (ClientConfig, _getSoftwareReleaseFromSoftwareString,
...@@ -49,7 +50,9 @@ except ImportError: ...@@ -49,7 +50,9 @@ except ImportError:
def getParametersFromFile(file, serialisation): def getParametersFromFile(file, serialisation):
# type: (IO[str], SoftwareReleaseSerialisation) -> Dict # type: (IO[str], SoftwareReleaseSerialisation) -> Dict
extension = os.path.splitext(file.name)[1] extension = os.path.splitext(file.name)[1]
if extension == '.xml': if extension in ('.yaml', '.yml'):
params = yaml.safe_load(file)
elif extension == '.xml':
tree = lxml.etree.parse(file) tree = lxml.etree.parse(file)
params = {e.attrib['id']: e.text for e in tree.findall('/parameter')} params = {e.attrib['id']: e.text for e in tree.findall('/parameter')}
# because the use case of xml files is to copy paste existing XML parameters # because the use case of xml files is to copy paste existing XML parameters
......
...@@ -785,6 +785,20 @@ class TestCliRequestParametersFileJsonJsonInXMLSerialisationAlreadySerialised( ...@@ -785,6 +785,20 @@ class TestCliRequestParametersFileJsonJsonInXMLSerialisationAlreadySerialised(
self).test_request_parameters_file() self).test_request_parameters_file()
class TestCliRequestParametersFileYaml(TestCliRequestParametersFileJson):
"""Request with --parameter-file, with a .yaml file. This behaves like json.
"""
def _makeParameterFile(self):
f = tempfile.NamedTemporaryFile(suffix='.yaml', mode='w', delete=False)
self.addCleanup(os.unlink, f.name)
f.write(textwrap.dedent('''\
foo:
- bar
'''))
f.flush()
return f.name
class TestCliRequestParametersFileXml(TestCliRequestParametersFileJson): class TestCliRequestParametersFileXml(TestCliRequestParametersFileJson):
"""Request with --parameter-file, with a .xml file """Request with --parameter-file, with a .xml file
""" """
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment