-
Notifications
You must be signed in to change notification settings - Fork 1
/
version_control.py
137 lines (105 loc) · 4.34 KB
/
version_control.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
import db_services
import re
#from
def is_valid_version(version):
# Regular expression to check if the version has the correct format (x.x.x.x)
if not isinstance(version, str):
return False
pattern = r'^\d{1,2}(\.\d{1,2}){4}'
return bool(re.match(pattern, version))
#Перебираем релизы по одному. Функция пытается найти в модуле функцию с именем,
# соответствующим номеру релиза и если нашла - выполнить её
def run_releases(_start_version:str, _end_version:str):
return_list = []
if not is_valid_version(_start_version) or not is_valid_version(_end_version):
return_list.append({'result': False, 'details': 'Неверный формат версии конфигурации. Формат конфигурации должен быть x.x.x.x'})
return return_list
version = _start_version
while compare_versions(version, _end_version) <= 0:
release_function_name = 'r' + version.replace('.', '_')
release_function = globals().get(release_function_name)
if release_function and callable(release_function):
res = release_function()
return_list.append(res)
# else:
# print(f"Release function '{release_function_name}' not found.")
version = increment_version(version)
return return_list
#Сравниваем номера версии. Возвращает -1 Последняя версия все ещё больше,
# 0 если равны и 1 если текущая версия больше последней
def compare_versions(version1, version2):
parts1 = list(map(int, version1.split('.')))
parts2 = list(map(int, version2.split('.')))
for p1, p2 in zip(parts1, parts2):
if p1 < p2:
return -1
elif p1 > p2:
return 1
return 0
#Прибавляем 1 к номеру текущей версии (по группам,
# максимум 99 в одной группе) Например 1.1.1.1.99 + 1 даст нам 1.1.1.2.0
def increment_version(version):
parts = list(map(int, version.split('.')))
parts[-1] += 1
for i in range(len(parts) - 1, 0, -1):
if parts[i] == 100:
parts[i] = 0
parts[i - 1] += 1
return '.'.join(map(str, parts))
def r0_1_0_12_3(hash_map):
# Code for release 0.1.0.12.3
qtext = '''
PRAGMA foreign_keys = 0;
CREATE TABLE sqlitestudio_temp_table AS SELECT *
FROM RS_barcodes;
DROP TABLE RS_barcodes;
CREATE TABLE RS_barcodes (
barcode TEXT NOT NULL
PRIMARY KEY,
id_good TEXT NOT NULL,
id_property TEXT,
id_series TEXT,
id_unit TEXT,
ratio INTEGER DEFAULT (1)
NOT NULL
);
INSERT INTO RS_barcodes (
barcode,
id_good,
id_property,
id_series,
id_unit,
ratio
)
SELECT barcode,
id_good,
id_property,
id_series,
id_unit,
ratio
FROM sqlitestudio_temp_table;
UPDATE
RS_barcodes
SET
ratio = COALESCE((
SELECT RS_units.nominator/RS_units.denominator
FROM RS_units
WHERE RS_units.id = RS_barcodes.id_unit
), 1);
DROP TABLE sqlitestudio_temp_table;
PRAGMA foreign_keys = 1;
'''
try:
r = db_services.SqlQueryProvider()
r.sql_exec(qtext,'')
return_value = {'result':True}
except:
return_value = {'result':False, 'details':f'Ошибка в запросе: {qtext}'}
# if __name__ == "__main__":
# # Replace these versions with your actual version numbers
# start_version = "0.1.0.11.7"
# start_version = ("s")
# end_version = "0.1.0.12.3"
#
# print(run_releases(start_version, end_version))
#print(is_valid_version("01.1.0.11.26"))