def run_python(self, python, data, tmpdir, input=None): from roundtrip import save_and_run if input is not None: (tmpdir / 'input.yaml').write_text(input.value, encoding='utf-8') assert save_and_run(python.value, base_dir=tmpdir, output=data.value) == 0
def test_issue_238(self, tmpdir): program_src = r""" import ruamel.yaml from ruamel.yaml.compat import StringIO yaml = ruamel.yaml.YAML(typ='unsafe') class A: def __setstate__(self, d): self.__dict__ = d class B: pass a = A() b = B() a.x = b b.y = [b] assert a.x.y[0] == a.x buf = StringIO() yaml.dump(a, buf) data = yaml.load(buf.getvalue()) assert data.x.y[0] == data.x """ assert save_and_run(dedent(program_src), tmpdir) == 0
def test_monster(tmpdir): program_src = u'''\ import ruyaml from textwrap import dedent class Monster(ruyaml.YAMLObject): yaml_tag = u'!Monster' def __init__(self, name, hp, ac, attacks): self.name = name self.hp = hp self.ac = ac self.attacks = attacks def __repr__(self): return "%s(name=%r, hp=%r, ac=%r, attacks=%r)" % ( self.__class__.__name__, self.name, self.hp, self.ac, self.attacks) data = ruyaml.load(dedent("""\\ --- !Monster name: Cave spider hp: [2,6] # 2d6 ac: 16 attacks: [BITE, HURT] """), Loader=ruyaml.Loader) # normal dump, keys will be sorted assert ruyaml.dump(data) == dedent("""\\ !Monster ac: 16 attacks: [BITE, HURT] hp: [2, 6] name: Cave spider """) ''' assert save_and_run(program_src, tmpdir) == 0
def test_issue_220(self, tmpdir): program_src = r''' from ruamel.yaml import YAML yaml_str = u"""\ --- foo: ["bar"] """ yaml = YAML(typ='safe', pure=True) d = yaml.load(yaml_str) print(d) ''' assert save_and_run(dedent(program_src), tmpdir, optimized=True) == 0
def test_issue_82(self, tmpdir): program_src = r''' from __future__ import print_function from ruamel import yaml import re class SINumber(yaml.YAMLObject): PREFIXES = {'k': 1e3, 'M': 1e6, 'G': 1e9} yaml_loader = yaml.Loader yaml_dumper = yaml.Dumper yaml_tag = u'!si' yaml_implicit_pattern = re.compile( r'^(?P<value>[0-9]+(?:\.[0-9]+)?)(?P<prefix>[kMG])$') @classmethod def from_yaml(cls, loader, node): return cls(node.value) @classmethod def to_yaml(cls, dumper, data): return dumper.represent_scalar(cls.yaml_tag, str(data)) def __init__(self, *args): m = self.yaml_implicit_pattern.match(args[0]) self.value = float(m.groupdict()['value']) self.prefix = m.groupdict()['prefix'] def __str__(self): return str(self.value)+self.prefix def __int__(self): return int(self.value*self.PREFIXES[self.prefix]) # This fails: yaml.add_implicit_resolver(SINumber.yaml_tag, SINumber.yaml_implicit_pattern) ret = yaml.load(""" [1,2,3, !si 10k, 100G] """, Loader=yaml.Loader) for idx, l in enumerate([1, 2, 3, 10000, 100000000000]): assert int(ret[idx]) == l ''' assert save_and_run(dedent(program_src), tmpdir) == 0
def test_qualified_name00(tmpdir): """issue 214""" program_src = u"""\ from ruyaml import YAML from io import StringIO class A: def f(self): pass yaml = YAML(typ='unsafe', pure=True) yaml.explicit_end = True buf = StringIO() yaml.dump(A.f, buf) res = buf.getvalue() print('res', repr(res)) assert res == "!!python/name:__main__.A.f ''\\n...\\n" x = yaml.load(res) assert x == A.f """ assert save_and_run(program_src, tmpdir) == 0
def run_python(self, python, data, tmpdir): from roundtrip import save_and_run assert save_and_run(python.value, base_dir=tmpdir, output=data.value) == 0