-
Notifications
You must be signed in to change notification settings - Fork 0
/
config_file.py
143 lines (104 loc) · 4.84 KB
/
config_file.py
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import json
import os
# Создание стандартных настроек конфигурационного файла
def save_default_config():
"""
Создает и сохраняет стандартные настройки конфигурационного файла.
:param: None.
:return: None.
"""
config_data = {
"class_mapping": {
"0": "Deer",
"1": "MuskDeer",
"2": "RoeDeer"
},
"augment": False,
"half": False,
"view_img_heatmap": True,
"shape_heatmap": "circle",
"vid_stride": 5,
"conf": 0.5,
"decay_factor_heatmap": 0.95,
"iou": 0.5,
"pixel_per_meter": 10
}
with open('config.json', 'w') as config_file:
json.dump(config_data, config_file, indent=4)
# Глобальная переменная для хранения предыдущих параметров
previous_config_data = None
def parse_list(self, input_str):
try:
# Пробуем разобрать введенную строку как JSON
list_values = json.loads(input_str)
# Проверяем, что полученный объект - это список
if not isinstance(list_values, list):
raise ValueError("Введенные данные не являются списком.")
return list_values
except ValueError as e:
return None
def load_config():
"""
Загружает данные конфигурационного файла и сохраняет их в глобальную переменную.
:param previous_config_file: Глобальная переменная хранящая список.
:return config_data: Список данных выгруженных из конфигурационного файла.
"""
global previous_config_data
# Загрузка конфигурационных параметров из файла
with open('config.json', 'r') as config_file:
config_data = json.load(config_file)
# Сохраняем текущие параметры в глобальной переменной
previous_config_data = config_data
return config_data
def is_value_changed(key, new_value):
"""
Создает и сохраняет стандартные настройки конфигурационного файла.
:param previous_config_file: Глобальная переменная хранящая список.
:return previous_config_data[key] != new_value: Возвращает в глобальную переменную...
Новое значение для соответствующего ключа, если это значение ключа...
Было измененно.
:return True: Возвращает true, если значение ключа не изменилось.
"""
global previous_config_data
# Проверяем, изменилось ли значение параметра
if previous_config_data is not None and key in previous_config_data:
return previous_config_data[key] != new_value
else:
# Если предыдущих данных нет, считаем, что значение изменилось
return True
def update_config(self, **kwargs):
for key, value in kwargs.items():
# Используем get для проверки, что ключ существует в конфигурационных данных
if key in self.config_data and is_value_changed(key, value):
self.config_data[key] = value
save_config(self.config_data)
def save_config(config_data):
"""
Сохраняет параметры в конфигурационный файл.
:param: None.
:return: None.
"""
# Сохранение конфигурационных параметров в файл
with open('config.json', 'w') as config_file:
json.dump(config_data, config_file, indent=4)
def default_path():
"""
Получить путь к текущему исполняемому скрипту.
:param: None.
:return: None.
"""
script_path = os.path.realpath(__file__)
script_path, _ = os.path.split(script_path)
config_data = load_config()
_update_config(config_data=config_data, script_path=script_path)
def _update_config(config_data, script_path=None):
"""
Обновляет конфигурационные данные на основе переданных параметров.
"""
if config_data is not None:
if script_path is not None and is_value_changed('script_path', script_path):
config_data['script_path'] = script_path
save_config(config_data)
if __name__ == '__main__':
save_default_config()
default_path()