Ejemplo n.º 1
0
    def test_dump_missing_stream(self):
        from ruamel.yaml import YAML

        yaml = YAML()
        data = yaml.map()
        data['a'] = 1
        data['b'] = 2
        with pytest.raises(TypeError):
            yaml.dump(data)
Ejemplo n.º 2
0
    def test_dump_too_many_args(self, tmpdir):
        from ruamel.yaml import YAML

        fn = Path(str(tmpdir)) / 'test.yaml'
        yaml = YAML()
        data = yaml.map()
        data['a'] = 1
        data['b'] = 2
        with pytest.raises(TypeError):
            yaml.dump(data, fn, True)
Ejemplo n.º 3
0
    def test_dump_path(self, tmpdir):
        from ruamel.yaml import YAML

        fn = Path(str(tmpdir)) / 'test.yaml'
        yaml = YAML()
        data = yaml.map()
        data['a'] = 1
        data['b'] = 2
        yaml.dump(data, fn)
        assert fn.read_text() == 'a: 1\nb: 2\n'
Ejemplo n.º 4
0
    def test_print(self, capsys):
        from ruamel.yaml import YAML

        yaml = YAML()
        data = yaml.map()
        data['a'] = 1
        data['b'] = 2
        yaml.dump(data, sys.stdout)
        out, err = capsys.readouterr()
        assert out == 'a: 1\nb: 2\n'
Ejemplo n.º 5
0
 def _generate_yaml_input_skeleton(self, **kwargs):
     input_shape = self._operation_model.input_shape
     yaml = YAML()
     yaml.representer.add_representer(_Bytes, _Bytes.represent)
     skeleton = yaml.map()
     if input_shape is not None:
         argument_generator = YAMLArgumentGenerator()
         skeleton = argument_generator.generate_skeleton(input_shape)
     yaml.dump(skeleton, sys.stdout)
     return 0
Ejemplo n.º 6
0
class YAMLArgumentGenerator(ArgumentGenerator):
    def __init__(self, use_member_names=False, yaml=None):
        super(YAMLArgumentGenerator, self).__init__(
            use_member_names=use_member_names)
        self._yaml = yaml
        if self._yaml is None:
            self._yaml = YAML()

    def _generate_skeleton(self, shape, stack, name=''):
        # YAML supports binary, so add in boilerplate for that instead of
        # putting in None. Here were' using a custom type so that we can ensure
        # we serialize it correctly on python 2 and to make the
        # serialization output more usable on python 3.
        if shape.type_name == 'blob':
            return _Bytes()
        return super(YAMLArgumentGenerator, self)._generate_skeleton(
            shape, stack, name
        )

    def _generate_type_structure(self, shape, stack):
        if stack.count(shape.name) > 1:
            return self._yaml.map()
        skeleton = self._yaml.map()
        for member_name, member_shape in shape.members.items():
            skeleton[member_name] = self._generate_skeleton(
                member_shape, stack, name=member_name)
            is_required = member_name in shape.required_members
            self._add_member_comments(
                skeleton, member_name, member_shape, is_required)
        return skeleton

    def _add_member_comments(self, skeleton, member_name, member_shape,
                             is_required):
        comment_components = []
        if is_required:
            comment_components.append('[REQUIRED]')
        comment_components.append(get_shape_doc_overview(member_shape))
        if getattr(member_shape, 'enum', None):
            comment_components.append(
                self._get_enums_comment_content(member_shape.enum)
            )
        comment = ' '.join(comment_components)
        if comment and not comment.isspace():
            skeleton.yaml_add_eol_comment('# ' + comment, member_name)

    def _get_enums_comment_content(self, enums):
        return 'Valid values are: %s.' % ', '.join(enums)

    def _generate_type_map(self, shape, stack):
        # YAML has support for ordered maps, so don't use ordereddicts
        # because that isn't necessary and it makes the output harder to
        # understand and read.
        return dict(super(YAMLArgumentGenerator, self)._generate_type_map(
            shape, stack
        ))
Ejemplo n.º 7
0
    def test_dump_file(self, tmpdir):
        from ruamel.yaml import YAML

        fn = Path(str(tmpdir)) / 'test.yaml'
        yaml = YAML()
        data = yaml.map()
        data['a'] = 1
        data['b'] = 2
        with open(str(fn), 'w') as fp:
            yaml.dump(data, fp)
        assert fn.read_text() == 'a: 1\nb: 2\n'
Ejemplo n.º 8
0
    def test_flow_style(self, capsys):
        # https://stackoverflow.com/questions/45791712/
        from ruamel.yaml import YAML

        yaml = YAML()
        yaml.default_flow_style = None
        data = yaml.map()
        data['b'] = 1
        data['a'] = [[1, 2], [3, 4]]
        yaml.dump(data, sys.stdout)
        out, err = capsys.readouterr()
        assert out == 'b: 1\na:\n- [1, 2]\n- [3, 4]\n'
Ejemplo n.º 9
0
    def test_transform(self, tmpdir):
        from ruamel.yaml import YAML

        def tr(s):
            return s.replace(' ', '  ')

        fn = Path(str(tmpdir)) / 'test.yaml'
        yaml = YAML()
        data = yaml.map()
        data['a'] = 1
        data['b'] = 2
        yaml.dump(data, fn, transform=tr)
        assert fn.read_text() == 'a:  1\nb:  2\n'