#!/usr/bin/env python import yaml import six load = yaml.load # str, file def load_fn(fn, dv=None): o = dv with open(fn, 'rb') as f: try: o = load(f) except: pass return o dump = yaml.dump def dump_no_flow(o): def represent_str(dumper, instance): tag = 'tag:yaml.org,2002:str' style = '|' if '\n' in instance else None return dumper.represent_scalar( tag, instance, style=style ) for typ in [ str ] + ( [ unicode ] if six.PY2 else [] ): yaml.add_representer(typ, represent_str) return dump( o, default_flow_style=False, allow_unicode=True, encoding='utf-8' ) def save(o, fn, dv=''): # no_flow s = dump_no_flow(o) with open(fn, 'wb') as f: try: f.write(s) except: return dv return s # EOF