65 lines
1.3 KiB
Python
65 lines
1.3 KiB
Python
import yaml
|
|
from collections import OrderedDict
|
|
|
|
try:
|
|
from yaml import CSafeLoader as SafeLoader
|
|
except ImportError:
|
|
from yaml import SafeLoader
|
|
|
|
|
|
class DecimalInt:
|
|
def __init__(self, val):
|
|
self.val = val
|
|
|
|
|
|
def represent_decimal_int(dumper, data):
|
|
return dumper.represent_int(data.val)
|
|
|
|
|
|
yaml.add_representer(DecimalInt, represent_decimal_int)
|
|
|
|
|
|
class HexInt:
|
|
def __init__(self, val):
|
|
self.val = val
|
|
|
|
|
|
def represent_hex_int(dumper, data):
|
|
return dumper.represent_int(hex(data.val))
|
|
|
|
|
|
yaml.add_representer(HexInt, represent_hex_int)
|
|
|
|
|
|
def represent_ordereddict(dumper, data):
|
|
value = []
|
|
|
|
for item_key, item_value in data.items():
|
|
node_key = dumper.represent_data(item_key)
|
|
node_value = dumper.represent_data(item_value)
|
|
|
|
value.append((node_key, node_value))
|
|
|
|
return yaml.nodes.MappingNode(u'tag:yaml.org,2002:map', value)
|
|
|
|
|
|
yaml.add_representer(OrderedDict, represent_ordereddict)
|
|
|
|
|
|
def hexint_presenter(dumper, data):
|
|
if data > 0x10000:
|
|
return dumper.represent_int(hex(data))
|
|
else:
|
|
return dumper.represent_int(data)
|
|
|
|
|
|
yaml.add_representer(int, hexint_presenter)
|
|
|
|
|
|
def load(*args, **kwargs):
|
|
return yaml.load(*args, Loader=SafeLoader, **kwargs)
|
|
|
|
|
|
def dump(*args, **kwargs):
|
|
return yaml.dump(*args, **kwargs)
|