-
Notifications
You must be signed in to change notification settings - Fork 29
Expand file tree
/
Copy pathconfig_parser.py
More file actions
75 lines (64 loc) · 2.12 KB
/
Copy pathconfig_parser.py
File metadata and controls
75 lines (64 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import logging
import sys
from collections import OrderedDict
import yaml
logger = logging.getLogger("builder")
def ordered_load(stream, Loader=yaml.Loader, object_pairs_hook=OrderedDict):
"""
Получение сортированного словаря
:param stream:
:param Loader:
:param object_pairs_hook:
:return:
"""
class OrderedLoader(Loader):
pass
def construct_mapping(loader, node):
loader.flatten_mapping(node)
return object_pairs_hook(loader.construct_pairs(node))
OrderedLoader.add_constructor(
yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
construct_mapping)
return yaml.load(stream, OrderedLoader)
def parse_yaml(file_name):
"""
Парсинг yaml файла
:param file_name:
:return config:
"""
logger.info(f"Parse yaml file: {file_name}")
with open(file_name, 'r') as stream:
try:
config = ordered_load(stream, yaml.SafeLoader)
except yaml.YAMLError as exc:
logger.error(str(exc))
if not config.get('nginx_version'):
logger.error("ERROR: nginx_version not specified")
sys.exit(1)
if not config.get('output_package'):
logger.error("ERROR: output package not specified")
sys.exit(1)
if not config.get('control'):
config['control'] = None
if not config.get('modules'):
config['modules'] = None
if not config.get('configure_params'):
config['configure_params'] = []
return config
def parse_control_file(control_file):
"""
Парсинг control файла
:param control_file:
:return parsed_paragraph_dict:
"""
parsed_paragraph_dict = OrderedDict()
with open(control_file, 'r') as stream:
data = stream.read().split('\n\n')
for paragraph in data:
try:
parsed_paragraph = ordered_load(paragraph, yaml.SafeLoader)
except yaml.YAMLError as exc:
logger.error(exc)
index = list(parsed_paragraph)[0]
parsed_paragraph_dict[f'{index}_{parsed_paragraph[index]}'] = parsed_paragraph
return parsed_paragraph_dict