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)
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)
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'
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'
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
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 ))
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'
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'
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'