rupython 1.2.11__py3-none-any.whl → 1.2.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rupython/__/342/225/250/320/247/342/225/250/342/226/221/342/225/250/342/224/202/342/225/250/342/225/233/342/225/250/342/225/227/342/225/250/342/225/233/342/225/250/342/226/223/342/225/250/342/225/233/342/225/244/320/227/342/225/250/342/225/234/342/225/244/320/233/342/225/250/342/225/243_/342/225/250/342/225/221/342/225/250/342/225/233/342/225/250/342/224/244__.py +49 -4
- rupython/__/342/225/250/320/256/342/225/250/342/226/222/342/225/244/320/231/342/225/250/342/225/225/342/225/250/342/225/241_/342/225/244/320/224/342/225/244/320/223/342/225/250/342/225/234/342/225/250/342/225/221/342/225/244/320/226/342/225/250/342/225/225/342/225/250/342/225/225__.py +9 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/240/342/225/244/320/221/342/225/250/342/225/225/342/225/250/342/225/234/342/225/244/320/225/342/225/244/320/220.py +206 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/241/342/225/250/320/244.py +61 -76
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/244/342/225/250/342/226/221/342/225/244/320/222/342/225/250/342/226/221/342/225/250/320/242/342/225/244/320/220/342/225/250/342/225/241/342/225/250/342/225/235/342/225/244/320/237.py +222 -209
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/252/342/225/244/320/223/342/225/244/320/227/342/225/250/342/226/221.py +87 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/252/342/225/250/342/225/233/342/225/250/342/225/227/342/225/250/342/225/227/342/225/250/342/225/241/342/225/250/342/225/221/342/225/244/320/226/342/225/250/342/225/225/342/225/250/342/225/225.py +529 -396
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/256/342/225/244/320/227/342/225/250/342/225/241/342/225/244/320/220/342/225/250/342/225/241/342/225/250/342/224/244/342/225/244/320/234.py +177 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/257/342/225/250/342/225/233/342/225/244/320/222/342/225/250/342/225/233/342/225/250/342/225/221/342/225/250/342/225/225.py +273 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/260/342/225/250/342/225/241/342/225/250/342/224/202/342/225/250/320/242/342/225/244/320/233/342/225/244/320/220.py +51 -51
- {rupython-1.2.11.dist-info → rupython-1.2.13.dist-info}/METADATA +4 -4
- rupython-1.2.13.dist-info/RECORD +19 -0
- rupython-1.2.11.dist-info/RECORD +0 -15
- {rupython-1.2.11.dist-info → rupython-1.2.13.dist-info}/LICENSE +0 -0
- {rupython-1.2.11.dist-info → rupython-1.2.13.dist-info}/WHEEL +0 -0
- {rupython-1.2.11.dist-info → rupython-1.2.13.dist-info}/top_level.txt +0 -0
@@ -183,15 +183,15 @@ def Заменить_преобразование_в_строку(класс, ф
|
|
183
183
|
setattr(Объект_типа.from_address(id(класс)), 'tp_str', Объект_типа._fields_[-1])
|
184
184
|
Выполнить(класс, функция)
|
185
185
|
|
186
|
-
Обёртка__Вещ_в_стр = lambda
|
186
|
+
Обёртка__Вещ_в_стр = lambda экземпляр: Вещ_в_стр(экземпляр).replace('.', ',').replace('inf', 'Бскн')
|
187
187
|
Вещ_в_стр = float.__str__
|
188
188
|
Заменить_преобразование_в_строку(float, Обёртка__Вещ_в_стр)
|
189
189
|
|
190
|
-
Обёртка__Логич_в_стр = lambda
|
190
|
+
Обёртка__Логич_в_стр = lambda экземпляр: Логич_в_стр(экземпляр).replace('True', 'Да').replace('False', 'Нет')
|
191
191
|
Логич_в_стр = bool.__str__
|
192
192
|
Заменить_преобразование_в_строку(bool, Обёртка__Логич_в_стр)
|
193
193
|
|
194
|
-
Обёртка__Пусто_в_стр = lambda
|
194
|
+
Обёртка__Пусто_в_стр = lambda экземпляр: Пусто_в_стр(экземпляр).replace('None', 'Пусто')
|
195
195
|
Пусто_в_стр = type(None).__str__
|
196
196
|
Заменить_преобразование_в_строку(type(None), Обёртка__Пусто_в_стр)
|
197
197
|
|
@@ -215,7 +215,52 @@ def Свёртка(функция, перебираемое, нач_знач = N
|
|
215
215
|
for эл in перебираемое: рез = функция(рез, эл)
|
216
216
|
return рез
|
217
217
|
|
218
|
+
class ТрЛогич:
|
219
|
+
_instance_map = {}
|
220
|
+
|
221
|
+
def __new__(класс, название):
|
222
|
+
if название not in класс._instance_map:
|
223
|
+
класс._instance_map[название] = super().__new__(класс)
|
224
|
+
класс._instance_map[название]._name = название
|
225
|
+
return класс._instance_map[название]
|
226
|
+
|
227
|
+
def __and__(экземпляр, значение):
|
228
|
+
if not isinstance(значение, ТрЛогич):
|
229
|
+
raise TypeError("Операция 'И' возможна только между троичными логическими значениями.")
|
230
|
+
if экземпляр is Ложь or значение is Ложь: return Ложь
|
231
|
+
if экземпляр is Истина and значение is Истина: return Истина
|
232
|
+
return Неопр
|
233
|
+
|
234
|
+
def __or__(экземпляр, значение):
|
235
|
+
if not isinstance(значение, ТрЛогич):
|
236
|
+
raise TypeError("Операция 'Или' возможна только между троичными логическими значениями.")
|
237
|
+
if экземпляр is Истина or значение is Истина: return Истина
|
238
|
+
if экземпляр is Ложь and значение is Ложь: return Ложь
|
239
|
+
return Неопр
|
240
|
+
|
241
|
+
def __invert__(экземпляр):
|
242
|
+
if экземпляр is Истина: return Ложь
|
243
|
+
if экземпляр is Ложь: return Истина
|
244
|
+
return Неопр
|
245
|
+
|
246
|
+
def __eq__(экземпляр, значение):
|
247
|
+
if not isinstance(значение, ТрЛогич): return NotImplemented
|
248
|
+
return экземпляр is значение
|
249
|
+
|
250
|
+
def __bool__(экземпляр):
|
251
|
+
if экземпляр is Истина: return True
|
252
|
+
elif экземпляр is Ложь: return False
|
253
|
+
else:
|
254
|
+
raise TypeError("Невозможно преобразовать 'Неопр' в двоичное логическое значение.")
|
255
|
+
|
256
|
+
def __repr__(экземпляр):
|
257
|
+
return f"Троичное({экземпляр._name})"
|
258
|
+
|
259
|
+
def __str__(экземпляр):
|
260
|
+
return экземпляр._name
|
261
|
+
|
218
262
|
__builtins__.update(
|
219
263
|
__Проверить_существование__ = Проверить_существование,
|
220
|
-
Свёртка =
|
264
|
+
Свёртка = Свёртка,
|
265
|
+
Истина = ТрЛогич("Истина"), Ложь = ТрЛогич("ТрЛогич"), Неопр = ТрЛогич("Неопр")
|
221
266
|
)
|
@@ -20,3 +20,12 @@ def Ожидать_нажатие_клавиши(сообщение):
|
|
20
20
|
старые_настройки = termios.tcgetattr(fd)
|
21
21
|
try: tty.setraw(fd); Система.stdin.read(1)
|
22
22
|
finally: termios.tcsetattr(fd, termios.TCSADRAIN, старые_настройки)
|
23
|
+
|
24
|
+
def Склонение_после_числительного(число, слова):
|
25
|
+
return str(число) + ' ' + (
|
26
|
+
слова[2] if число % 100 >= 5 and число % 100 <= 20 else (
|
27
|
+
слова[0] if число % 10 == 1 else (
|
28
|
+
слова[1] if число % 10 >= 2 and число % 10 <= 4 else слова[2]
|
29
|
+
)
|
30
|
+
)
|
31
|
+
)
|
@@ -0,0 +1,206 @@
|
|
1
|
+
import queue
|
2
|
+
from rupython import __Общие_функции__
|
3
|
+
|
4
|
+
Очередь_пуста = queue.Empty
|
5
|
+
Очередь_полна = queue.Full
|
6
|
+
|
7
|
+
Словарь_параметров = {
|
8
|
+
'максимальный_размер': 'maxsize',
|
9
|
+
'элемент': 'item',
|
10
|
+
'блоковать': 'block',
|
11
|
+
'таймаут': 'timeout',
|
12
|
+
'приоритет': 'priority'
|
13
|
+
}
|
14
|
+
|
15
|
+
Словарь_склонений = {
|
16
|
+
'элемент': ['элемент', 'элемента', 'элементов'],
|
17
|
+
'задача': ['задача', 'задачи', 'задач']
|
18
|
+
}
|
19
|
+
|
20
|
+
class Очередь:
|
21
|
+
def __init__(экземпляр, максимальный_размер = 0):
|
22
|
+
ИА = {'maxsize': максимальный_размер}
|
23
|
+
экземпляр._queue = queue.Queue(**ИА)
|
24
|
+
|
25
|
+
def Добавить(экземпляр, элемент, блоковать = True, таймаут = None):
|
26
|
+
ИА = {'item': элемент, 'block': блоковать}
|
27
|
+
if таймаут is not None:
|
28
|
+
ИА['timeout'] = таймаут
|
29
|
+
экземпляр._queue.put(**ИА)
|
30
|
+
|
31
|
+
def Добавить_без_блокования(экземпляр, элемент):
|
32
|
+
экземпляр._queue.put_nowait(элемент)
|
33
|
+
|
34
|
+
def Получить(экземпляр, блоковать = True, таймаут = None):
|
35
|
+
ИА = {'block': блоковать}
|
36
|
+
if таймаут is not None:
|
37
|
+
ИА['timeout'] = таймаут
|
38
|
+
return экземпляр._queue.get(**ИА)
|
39
|
+
|
40
|
+
def Получить_без_блокования(экземпляр):
|
41
|
+
return экземпляр._queue.get_nowait()
|
42
|
+
|
43
|
+
def Задача_выполнена(экземпляр):
|
44
|
+
экземпляр._queue.task_done()
|
45
|
+
|
46
|
+
def Ждать_завершения(экземпляр):
|
47
|
+
экземпляр._queue.join()
|
48
|
+
|
49
|
+
def Пустая(экземпляр):
|
50
|
+
return экземпляр._queue.empty()
|
51
|
+
|
52
|
+
def Полная(экземпляр):
|
53
|
+
return экземпляр._queue.full()
|
54
|
+
|
55
|
+
def Размер(экземпляр):
|
56
|
+
return экземпляр._queue.qsize()
|
57
|
+
|
58
|
+
def __len__(экземпляр):
|
59
|
+
return экземпляр._queue.qsize()
|
60
|
+
|
61
|
+
def __str__(экземпляр):
|
62
|
+
размер = экземпляр.Размер()
|
63
|
+
return f"Очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
|
64
|
+
|
65
|
+
def В_строку_с_задачами(экземпляр):
|
66
|
+
размер = экземпляр.Размер()
|
67
|
+
return f"Очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
|
68
|
+
|
69
|
+
class Стековая_очередь:
|
70
|
+
def __init__(экземпляр, максимальный_размер = 0):
|
71
|
+
ИА = {'maxsize': максимальный_размер}
|
72
|
+
экземпляр._queue = queue.LifoQueue(**ИА)
|
73
|
+
|
74
|
+
def Добавить(экземпляр, элемент, блоковать = True, таймаут = None):
|
75
|
+
ИА = {'item': элемент, 'block': блоковать}
|
76
|
+
if таймаут is not None:
|
77
|
+
ИА['timeout'] = таймаут
|
78
|
+
экземпляр._queue.put(**ИА)
|
79
|
+
|
80
|
+
def Добавить_без_блокования(экземпляр, элемент):
|
81
|
+
экземпляр._queue.put_nowait(элемент)
|
82
|
+
|
83
|
+
def Получить(экземпляр, блоковать = True, таймаут = None):
|
84
|
+
ИА = {'block': блоковать}
|
85
|
+
if таймаут is not None:
|
86
|
+
ИА['timeout'] = таймаут
|
87
|
+
return экземпляр._queue.get(**ИА)
|
88
|
+
|
89
|
+
def Получить_без_блокования(экземпляр):
|
90
|
+
return экземпляр._queue.get_nowait()
|
91
|
+
|
92
|
+
def Задача_выполнена(экземпляр):
|
93
|
+
экземпляр._queue.task_done()
|
94
|
+
|
95
|
+
def Ждать_завершения(экземпляр):
|
96
|
+
экземпляр._queue.join()
|
97
|
+
|
98
|
+
def Пустая(экземпляр):
|
99
|
+
return экземпляр._queue.empty()
|
100
|
+
|
101
|
+
def Полная(экземпляр):
|
102
|
+
return экземпляр._queue.full()
|
103
|
+
|
104
|
+
def Размер(экземпляр):
|
105
|
+
return экземпляр._queue.qsize()
|
106
|
+
|
107
|
+
def __len__(экземпляр):
|
108
|
+
return экземпляр._queue.qsize()
|
109
|
+
|
110
|
+
def __str__(экземпляр):
|
111
|
+
размер = экземпляр.Размер()
|
112
|
+
return f"Стековая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
|
113
|
+
|
114
|
+
def В_строку_с_задачами(экземпляр):
|
115
|
+
размер = экземпляр.Размер()
|
116
|
+
return f"Стековая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
|
117
|
+
|
118
|
+
class Приоритетная_очередь:
|
119
|
+
def __init__(экземпляр, максимальный_размер = 0):
|
120
|
+
ИА = {'maxsize': максимальный_размер}
|
121
|
+
экземпляр._queue = queue.PriorityQueue(**ИА)
|
122
|
+
|
123
|
+
def Добавить(экземпляр, элемент, приоритет, блоковать = True, таймаут = None):
|
124
|
+
ИА = {'item': (приоритет, элемент), 'block': блоковать}
|
125
|
+
if таймаут is not None:
|
126
|
+
ИА['timeout'] = таймаут
|
127
|
+
экземпляр._queue.put(**ИА)
|
128
|
+
|
129
|
+
def Добавить_без_блокования(экземпляр, элемент, приоритет):
|
130
|
+
экземпляр._queue.put_nowait((приоритет, элемент))
|
131
|
+
|
132
|
+
def Получить(экземпляр, блоковать = True, таймаут = None):
|
133
|
+
ИА = {'block': блоковать}
|
134
|
+
if таймаут is not None:
|
135
|
+
ИА['timeout'] = таймаут
|
136
|
+
приоритет, элемент = экземпляр._queue.get(**ИА)
|
137
|
+
return элемент
|
138
|
+
|
139
|
+
def Получить_с_приоритетом(экземпляр, блоковать = True, таймаут = None):
|
140
|
+
ИА = {'block': блоковать}
|
141
|
+
if таймаут is not None:
|
142
|
+
ИА['timeout'] = таймаут
|
143
|
+
return экземпляр._queue.get(**ИА)
|
144
|
+
|
145
|
+
def Получить_без_блокования(экземпляр):
|
146
|
+
приоритет, элемент = экземпляр._queue.get_nowait()
|
147
|
+
return элемент
|
148
|
+
|
149
|
+
def Получить_без_блокования_с_приоритетом(экземпляр):
|
150
|
+
return экземпляр._queue.get_nowait()
|
151
|
+
|
152
|
+
def Задача_выполнена(экземпляр):
|
153
|
+
экземпляр._queue.task_done()
|
154
|
+
|
155
|
+
def Ждать_завершения(экземпляр):
|
156
|
+
экземпляр._queue.join()
|
157
|
+
|
158
|
+
def Пустая(экземпляр):
|
159
|
+
return экземпляр._queue.empty()
|
160
|
+
|
161
|
+
def Полная(экземпляр):
|
162
|
+
return экземпляр._queue.full()
|
163
|
+
|
164
|
+
def Размер(экземпляр):
|
165
|
+
return экземпляр._queue.qsize()
|
166
|
+
|
167
|
+
def __len__(экземпляр):
|
168
|
+
return экземпляр._queue.qsize()
|
169
|
+
|
170
|
+
def __str__(экземпляр):
|
171
|
+
размер = экземпляр.Размер()
|
172
|
+
return f"Приоритетная_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
|
173
|
+
|
174
|
+
def В_строку_с_задачами(экземпляр):
|
175
|
+
размер = экземпляр.Размер()
|
176
|
+
return f"Приоритетная_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
|
177
|
+
|
178
|
+
class Простая_очередь:
|
179
|
+
def __init__(экземпляр):
|
180
|
+
экземпляр._queue = queue.SimpleQueue()
|
181
|
+
|
182
|
+
def Добавить(экземпляр, элемент):
|
183
|
+
экземпляр._queue.put(элемент)
|
184
|
+
|
185
|
+
def Получить(экземпляр):
|
186
|
+
return экземпляр._queue.get()
|
187
|
+
|
188
|
+
def Получить_без_блокования(экземпляр):
|
189
|
+
return экземпляр._queue.get_nowait()
|
190
|
+
|
191
|
+
def Пустая(экземпляр):
|
192
|
+
экземпляр._queue.empty()
|
193
|
+
|
194
|
+
def Размер(экземпляр):
|
195
|
+
return экземпляр._queue.qsize()
|
196
|
+
|
197
|
+
def __len__(экземпляр):
|
198
|
+
return экземпляр._queue.qsize()
|
199
|
+
|
200
|
+
def __str__(экземпляр):
|
201
|
+
размер = экземпляр.Размер()
|
202
|
+
return f"Простая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
|
203
|
+
|
204
|
+
def В_строку_с_задачами(экземпляр):
|
205
|
+
размер = экземпляр.Размер()
|
206
|
+
return f"Простая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
|
@@ -324,7 +324,7 @@ def Получить_токены(запрос):
|
|
324
324
|
def Перевести_токены(токены):
|
325
325
|
переведённые_токены = []
|
326
326
|
i = 0
|
327
|
-
|
327
|
+
|
328
328
|
while i < len(токены):
|
329
329
|
токен = токены[i]
|
330
330
|
|
@@ -338,30 +338,15 @@ def Перевести_токены(токены):
|
|
338
338
|
найдено_ключевое_слово = False
|
339
339
|
for длина in range(5, 0, -1):
|
340
340
|
if i + длина <= len(токены):
|
341
|
-
фраза = ' '.join(токены[i:i + длина])
|
342
|
-
|
343
|
-
for ключ, значение in Словарь_перевода.items():
|
344
|
-
if '___' in ключ:
|
345
|
-
шаблон = '^' + ключ.replace('___', r'(\S+)') + '$'
|
346
|
-
совпадение = РегВыр.match(шаблон, фраза)
|
347
|
-
if совпадение:
|
348
|
-
переменная = совпадение.group(1).upper()
|
349
|
-
if переменная in Словарь_перевода:
|
350
|
-
переведённая_переменная = Словарь_перевода[переменная]
|
351
|
-
переведённая_фраза = значение.replace('___', переведённая_переменная)
|
352
|
-
переведённые_токены.append(переведённая_фраза)
|
353
|
-
i += длина
|
354
|
-
найдено_ключевое_слово = True
|
355
|
-
break
|
356
|
-
|
357
|
-
if найдено_ключевое_слово:
|
358
|
-
break
|
359
|
-
|
341
|
+
фраза = ' '.join(токены[i:i + длина])
|
360
342
|
if фраза in Словарь_перевода:
|
361
343
|
переведённые_токены.append(Словарь_перевода[фраза])
|
362
344
|
i += длина
|
363
345
|
найдено_ключевое_слово = True
|
364
346
|
break
|
347
|
+
if not найдено_ключевое_слово:
|
348
|
+
переведённые_токены.append(токен)
|
349
|
+
i += 1
|
365
350
|
|
366
351
|
return переведённые_токены
|
367
352
|
|
@@ -438,68 +423,68 @@ def Перевести_ошибку(исключение):
|
|
438
423
|
return f"Неизвестная ошибка: {сообщение}"
|
439
424
|
|
440
425
|
class Указатель():
|
441
|
-
def __init__(
|
442
|
-
|
426
|
+
def __init__(экземпляр, курсор):
|
427
|
+
экземпляр._курсор = курсор
|
443
428
|
|
444
|
-
def Выполнить_запрос(
|
429
|
+
def Выполнить_запрос(экземпляр, запрос, параметры=()):
|
445
430
|
try:
|
446
431
|
запрос = Перевести_код_запроса(запрос)
|
447
|
-
|
432
|
+
экземпляр._курсор.execute(запрос, параметры)
|
448
433
|
except Ошибка as ош:
|
449
434
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
450
435
|
|
451
|
-
def Выполнить_запросы(
|
436
|
+
def Выполнить_запросы(экземпляр, запрос, последовательность_параметров):
|
452
437
|
try:
|
453
438
|
запрос = Перевести_код_запроса(запрос)
|
454
|
-
|
439
|
+
экземпляр._курсор.executemany(запрос, последовательность_параметров)
|
455
440
|
except Ошибка as ош:
|
456
441
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
457
442
|
|
458
|
-
def Выполнить_сценарий(
|
443
|
+
def Выполнить_сценарий(экземпляр, сценарий):
|
459
444
|
try:
|
460
445
|
скрипт = Перевести_код_запроса(сценарий)
|
461
|
-
|
446
|
+
экземпляр._курсор.executescript(скрипт)
|
462
447
|
except Ошибка as ош:
|
463
448
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
464
449
|
|
465
|
-
def Извлечь_запись(
|
450
|
+
def Извлечь_запись(экземпляр):
|
466
451
|
try:
|
467
|
-
return
|
452
|
+
return экземпляр._курсор.fetchone()
|
468
453
|
except Ошибка as ош:
|
469
454
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
470
455
|
|
471
|
-
def Извлечь_записи(
|
456
|
+
def Извлечь_записи(экземпляр, количество):
|
472
457
|
try:
|
473
|
-
return
|
458
|
+
return экземпляр._курсор.fetchmany(количество)
|
474
459
|
except Ошибка as ош:
|
475
460
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
476
461
|
|
477
|
-
def Извлечь_все_записи(
|
462
|
+
def Извлечь_все_записи(экземпляр):
|
478
463
|
try:
|
479
|
-
return
|
464
|
+
return экземпляр._курсор.fetchall()
|
480
465
|
except Ошибка as ош:
|
481
466
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
482
467
|
|
483
|
-
def Закрыть(
|
468
|
+
def Закрыть(экземпляр):
|
484
469
|
try:
|
485
|
-
|
470
|
+
экземпляр._курсор.close()
|
486
471
|
except Ошибка as ош:
|
487
472
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
488
473
|
|
489
474
|
@property
|
490
|
-
def Описание(
|
491
|
-
return
|
475
|
+
def Описание(экземпляр):
|
476
|
+
return экземпляр._курсор.description
|
492
477
|
|
493
478
|
@property
|
494
|
-
def Количество_строк(
|
495
|
-
return
|
479
|
+
def Количество_строк(экземпляр):
|
480
|
+
return экземпляр._курсор.rowcount
|
496
481
|
|
497
482
|
@property
|
498
|
-
def Последний_идентификатор(
|
499
|
-
return
|
483
|
+
def Последний_идентификатор(экземпляр):
|
484
|
+
return экземпляр._курсор.lastrowid
|
500
485
|
|
501
486
|
class Соединение():
|
502
|
-
def __init__(
|
487
|
+
def __init__(экземпляр,
|
503
488
|
путь, *,
|
504
489
|
таймаут = 5.0,
|
505
490
|
обнаружение_типов = 0,
|
@@ -514,7 +499,7 @@ class Соединение():
|
|
514
499
|
else: уровень_изоляции = None
|
515
500
|
|
516
501
|
try:
|
517
|
-
|
502
|
+
экземпляр._соединение = sqlite3.connect(
|
518
503
|
путь,
|
519
504
|
timeout=таймаут,
|
520
505
|
detect_types=обнаружение_типов,
|
@@ -526,94 +511,94 @@ class Соединение():
|
|
526
511
|
except Ошибка as ош:
|
527
512
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
528
513
|
|
529
|
-
def __enter__(
|
530
|
-
return
|
514
|
+
def __enter__(экземпляр):
|
515
|
+
return экземпляр
|
531
516
|
|
532
|
-
def __exit__(
|
533
|
-
|
517
|
+
def __exit__(экземпляр, exc_type, exc_value, traceback):
|
518
|
+
экземпляр.Закрыть()
|
534
519
|
|
535
|
-
def Создать_указатель(
|
520
|
+
def Создать_указатель(экземпляр):
|
536
521
|
try:
|
537
|
-
курсор =
|
522
|
+
курсор = экземпляр._соединение.cursor()
|
538
523
|
return Указатель(курсор)
|
539
524
|
except Ошибка as ош:
|
540
525
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
541
526
|
|
542
|
-
def Выполнить_запрос(
|
527
|
+
def Выполнить_запрос(экземпляр, запрос, параметры=()):
|
543
528
|
try:
|
544
529
|
запрос = Перевести_код_запроса(запрос)
|
545
|
-
указатель =
|
530
|
+
указатель = экземпляр._соединение.execute(запрос, параметры)
|
546
531
|
return Указатель(указатель)
|
547
532
|
except Ошибка as ош:
|
548
533
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
549
534
|
|
550
|
-
def Выполнить_запросы(
|
535
|
+
def Выполнить_запросы(экземпляр, запрос, параметры):
|
551
536
|
try:
|
552
537
|
запрос = Перевести_код_запроса(запрос)
|
553
|
-
указатель =
|
538
|
+
указатель = экземпляр._соединение.executemany(запрос, параметры)
|
554
539
|
return Указатель(указатель)
|
555
540
|
except Ошибка as ош:
|
556
541
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
557
542
|
|
558
|
-
def Выполнить_сценарий(
|
543
|
+
def Выполнить_сценарий(экземпляр, сценарий):
|
559
544
|
try:
|
560
545
|
скрипт = Перевести_код_запроса(сценарий)
|
561
|
-
|
546
|
+
экземпляр._соединение.executescript(скрипт)
|
562
547
|
except Ошибка as ош:
|
563
548
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
564
549
|
|
565
|
-
def Создать_функцию(
|
550
|
+
def Создать_функцию(экземпляр, имя, количество_параметров, функция):
|
566
551
|
try:
|
567
|
-
|
552
|
+
экземпляр._соединение.create_function(имя, количество_параметров, функция)
|
568
553
|
except Ошибка as ош:
|
569
554
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
570
555
|
|
571
|
-
def Создать_агрегатную_функцию(
|
556
|
+
def Создать_агрегатную_функцию(экземпляр, имя, число_аргументов, класс):
|
572
557
|
try:
|
573
|
-
|
558
|
+
экземпляр._соединение.create_aggregate(имя, число_аргументов, класс)
|
574
559
|
except Ошибка as ош:
|
575
560
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
576
561
|
|
577
|
-
def Создать_сопоставление(
|
562
|
+
def Создать_сопоставление(экземпляр, имя, функция):
|
578
563
|
try:
|
579
|
-
|
564
|
+
экземпляр._соединение.create_collation(имя, функция)
|
580
565
|
except Ошибка as ош:
|
581
566
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
582
567
|
|
583
|
-
def Прервать(
|
568
|
+
def Прервать(экземпляр):
|
584
569
|
try:
|
585
|
-
|
570
|
+
экземпляр._соединение.interrupt()
|
586
571
|
except Ошибка as ош:
|
587
572
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
588
573
|
|
589
|
-
def Закрыть(
|
574
|
+
def Закрыть(экземпляр):
|
590
575
|
try:
|
591
|
-
|
576
|
+
экземпляр._соединение.close()
|
592
577
|
except Ошибка as ош:
|
593
578
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
594
579
|
|
595
|
-
def Утвердить(
|
580
|
+
def Утвердить(экземпляр):
|
596
581
|
try:
|
597
|
-
|
582
|
+
экземпляр._соединение.commit()
|
598
583
|
except Ошибка as ош:
|
599
584
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
600
585
|
|
601
|
-
def Откатить(
|
586
|
+
def Откатить(экземпляр):
|
602
587
|
try:
|
603
|
-
|
588
|
+
экземпляр._соединение.rollback()
|
604
589
|
except Ошибка as ош:
|
605
590
|
raise Ошибка(Перевести_ошибку(ош)) from ош
|
606
591
|
|
607
592
|
@property
|
608
|
-
def В_транзакции(
|
609
|
-
return
|
593
|
+
def В_транзакции(экземпляр):
|
594
|
+
return экземпляр._соединение.in_transaction
|
610
595
|
|
611
596
|
@property
|
612
|
-
def Изоляция(
|
613
|
-
return
|
597
|
+
def Изоляция(экземпляр):
|
598
|
+
return экземпляр._соединение.isolation_level
|
614
599
|
|
615
600
|
@Изоляция.setter
|
616
|
-
def Изоляция(
|
601
|
+
def Изоляция(экземпляр, значение):
|
617
602
|
if значение not in (None, 'DEFERRED', 'IMMEDIATE', 'EXCLUSIVE'):
|
618
603
|
raise ValueError(f"Недопустимый уровень изоляции: {значение}")
|
619
|
-
|
604
|
+
экземпляр._соединение.isolation_level = значение
|