3
# Author: Ilya Mashchenko (l2isbad)
4
# SPDX-License-Identifier: GPL-3.0-or-later
5
6
-import types
6
7
from sys import version_info
8
17
from yaml import SafeLoader as YamlSafeLoader
18
19
21
-if PY_VERSION > (3, 1):
22
- from importlib.machinery import SourceFileLoader
23
- DEFAULT_MAPPING_TAG = 'tag:yaml.org,2002:map'
24
-else:
25
- from imp import load_source as SourceFileLoader
26
- DEFAULT_MAPPING_TAG = u'tag:yaml.org,2002:map'
27
-
20
try:
21
from collections import OrderedDict
22
except ImportError:
23
from third_party.ordereddict import OrderedDict
24
25
34
-def dict_constructor(loader, node):
35
- return OrderedDict(loader.construct_pairs(node))
26
+DEFAULT_MAPPING_TAG = 'tag:yaml.org,2002:map' if PY_VERSION > (3, 1) else u'tag:yaml.org,2002:map'
27
28
38
-def safe_load(stream):
39
- loader = YamlSafeLoader(stream)
40
- try:
41
- return loader.get_single_data()
42
- finally:
43
- loader.dispose()
29
+def dict_constructor(loader, node):
30
+ return OrderedDict(loader.construct_pairs(node))
31
32
33
YamlSafeLoader.add_constructor(DEFAULT_MAPPING_TAG, dict_constructor)
34
35
49
-class YamlOrderedLoader:
50
- @staticmethod
51
- def load_config_from_file(file_name):
52
- opened, loaded = False, False
53
- try:
54
- stream = open(file_name, 'r')
55
- opened = True
56
- loader = YamlSafeLoader(stream)
57
- loaded = True
58
- parsed = loader.get_single_data() or dict()
59
- except Exception as error:
60
- return dict(), error
61
- else:
62
- return parsed, None
63
- finally:
64
- if opened:
65
- stream.close()
66
- if loaded:
67
- loader.dispose()
68
-
69
-
70
-class SourceLoader:
71
- @staticmethod
72
- def load_module_from_file(name, path):
73
- try:
74
- loaded = SourceFileLoader(name, path)
75
- if isinstance(loaded, types.ModuleType):
76
- return loaded, None
77
- return loaded.load_module(), None
78
- except Exception as error:
79
- return None, error
80
-
81
-
82
-class ModuleAndConfigLoader(YamlOrderedLoader, SourceLoader):
83
- pass
84
-
85
-
86
-def load_module(name, path):
87
- module = SourceFileLoader(name, path)
88
- if isinstance(module, types.ModuleType):
89
- return module
90
- return module.load_module()
91
-
92
-
36
def load_yaml(stream):
37
loader = YamlSafeLoader(stream)
38
try: