rupython 1.1.5__py3-none-any.whl → 1.1.6__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.
@@ -0,0 +1,368 @@
1
+ import sqlite3
2
+
3
+ Ошибка = sqlite3.Error
4
+ ОшибкаБазыДанных = sqlite3.DatabaseError
5
+ ОшибкаПрограммования = sqlite3.ProgrammingError
6
+ ОшибкаОперации = sqlite3.OperationalError
7
+
8
+ Разбор_объявленных_типов = sqlite3.PARSE_DECLTYPES
9
+ Разбор_названий_столбцов = sqlite3.PARSE_COLNAMES
10
+ Успешно = sqlite3.SQLITE_OK
11
+ Отказ = sqlite3.SQLITE_DENY
12
+ Игнорировать = sqlite3.SQLITE_IGNORE
13
+ Уровень_интерфейса_взаимодействия = sqlite3.apilevel
14
+ Стиль_параметров = sqlite3.paramstyle
15
+ Потокобезопасность = sqlite3.threadsafety
16
+
17
+ Словарь_перевода = {
18
+ 'НАЧАТЬ': 'BEGIN',
19
+ 'ЗАКОНЧИТЬ': 'END',
20
+ 'ТРАНЗАКЦИЮ': 'TRANSACTION',
21
+ 'ОТЛОЖЕННО': 'DEFERRED',
22
+ 'НЕМЕДЛЕННО': 'IMMEDIATE',
23
+ 'ИСКЛЮЧИТЕЛЬНО': 'EXCLUSIVE',
24
+ 'ОТКАТИТЬ': 'ROLLBACK',
25
+ 'ТОЧКА_СОХРАНЕНИЯ': 'SAVEPOINT',
26
+
27
+ 'ВЫБРАТЬ': 'SELECT',
28
+ 'ИЗ': 'FROM',
29
+ 'ГДЕ': 'WHERE',
30
+ 'УПОРЯДОЧИВ ПО': 'ORDER BY',
31
+ 'ПО ВОЗРАСТАНИЮ': 'ASC',
32
+ 'ПО УБЫВАНИЮ': 'DESC',
33
+ 'ГРУППАМИ ПО': 'GROUP BY',
34
+ 'ИМЕЮЩИМИ': 'HAVING',
35
+ 'РАЗЛИЧАЮЩИЕСЯ': 'DISTINCT',
36
+ 'ОБЪЕДИНИВ С': 'UNION',
37
+ 'СОДЕРЖАЩИЕСЯ В': 'INTERSECT',
38
+ 'ВСЕ': 'ALL',
39
+ 'НЕКОТОРЫЕ': 'ANY',
40
+ 'ИСКЛЮЧАЯ': 'EXCEPT',
41
+ 'НЕ БОЛЕЕ': 'LIMIT',
42
+ 'СО СМЕЩЕНИЕМ': 'OFFSET',
43
+ 'ПРИСОЕДИНИВ': 'JOIN',
44
+ 'ВНУТРЕННЕ': 'INNER',
45
+ 'ВНЕШНЕ': 'OUTER',
46
+ 'ПО ЛЕВОЙ': 'LEFT',
47
+ 'ПО ПРАВОЙ': 'RIGHT',
48
+ 'ПОЛНОСТЬЮ': 'FULL',
49
+ 'ПО': 'ON',
50
+ 'ПЕРЕКРЁСТНО': 'CROSS',
51
+ 'ИСПОЛЬЗУЯ': 'USING',
52
+
53
+ 'ДОБАВИТЬ В': 'INSERT INTO',
54
+ 'ЗНАЧЕНИЯ': 'VALUES',
55
+ 'ИЗМЕНИТЬ': 'UPDATE',
56
+ 'УСТАНОВИВ': 'SET',
57
+ 'УДАЛИТЬ': 'DELETE',
58
+
59
+ 'ИЗМЕНИТЬ ТАБЛИЦУ': 'ALTER TABLE',
60
+ 'ИЗМЕНИТЬ СТОЛБЕЦ': 'ALTER COLUMN',
61
+ 'СОЗДАТЬ': 'CREATE',
62
+ 'БАЗУ ДАННЫХ': 'DATABASE',
63
+ 'ТАБЛИЦУ': 'TABLE',
64
+ 'ДОБАВИВ': 'ADD',
65
+ 'УДАЛИВ': 'DROP',
66
+ 'ИНДЕКС': 'INDEX',
67
+ 'УНИКАЛЬНЫЙ': 'UNIQUE',
68
+ 'ПРЕДСТАВЛЕНИЕ': 'VIEW',
69
+ 'СТОЛБЕЦ': 'COLUMN',
70
+
71
+ 'ЯВЛЯЕТСЯ ПУСТЫМ': 'IS NULL',
72
+ 'НЕ ЯВЛЯЕТСЯ ПУСТЫМ': 'IS NOT NULL',
73
+ 'ПУСТО': 'NULL',
74
+ 'И': 'AND',
75
+ 'ИЛИ': 'OR',
76
+ 'НЕ': 'NOT',
77
+ 'ПОДОБНО': 'LIKE',
78
+ 'МЕЖДУ': 'BETWEEN',
79
+ 'В': 'IN',
80
+ 'ЕСЛИ': 'IF',
81
+ 'СУЩЕСТВУЕТ': 'EXISTS',
82
+
83
+ 'ЦЕЛОЕ': 'INTEGER',
84
+ 'ЧИСЛО': 'NUMBER',
85
+ 'ВЕЩЕСТВЕННОЕ': 'FLOAT',
86
+ 'СТРОКА': 'VARCHAR',
87
+ 'ТЕКСТ': 'TEXT',
88
+ 'ДАННЫЕ': 'BLOB',
89
+ 'ДАТА': 'DATE',
90
+ 'ВРЕМЯ': 'TIME',
91
+ 'ВРЕМЕННАЯ_МЕТКА': 'TIMESTAMP',
92
+ 'ЛОГИЧЕСКОЕ': 'BOOLEAN',
93
+
94
+ 'КЛЮЧ': 'KEY',
95
+ 'ПЕРВИЧНЫЙ': 'PRIMARY',
96
+ 'ВНЕШНИЙ': 'FOREIGN',
97
+ 'ПРОВЕРЯТЬ': 'CHECK',
98
+ 'КАК': 'AS',
99
+ 'ДА': 'TRUE',
100
+ 'НЕТ': 'FALSE',
101
+ 'ПО_УМОЛЧАНИЮ': 'DEFAULT',
102
+ 'САМОУВЕЛИЧИВАЮЩЕЕСЯ': 'AUTO_INCREMENT',
103
+
104
+ 'КОЛИЧЕСТВО': 'COUNT',
105
+ 'СУММА': 'SUM',
106
+ 'СРЕДНЕЕ': 'AVG',
107
+ 'МИНИМУМ': 'MIN',
108
+ 'МАКСИМУМ': 'MAX',
109
+ 'СЦЕПИТЬ': 'CONCAT',
110
+ 'ДЛИНА': 'LENGTH',
111
+ 'В_ЗАГЛАВНЫЕ': 'UPPER',
112
+ 'В_СТРОЧНЫЕ': 'LOWER',
113
+ 'ПОДСТРОКА': 'SUBSTRING',
114
+ 'ЗАМЕНИТЬ': 'REPLACE',
115
+ 'ОКРУГЛИТЬ': 'ROUND',
116
+ 'ОКРУГЛИТЬ_ВНИЗ': 'FLOOR',
117
+ 'ОКРУГЛИТЬ_ВВЕРХ': 'CEIL',
118
+ 'МОДУЛЬ': 'ABS',
119
+ 'ТЕКУЩАЯ_ДАТА': 'CURRENT_DATE',
120
+ 'ТЕКУЩЕЕ_ВРЕМЯ': 'CURRENT_TIME',
121
+ 'ТЕКУЩАЯ_ВРЕМЕННАЯ_МЕТКА': 'CURRENT_TIMESTAMP',
122
+ 'ИЗВЛЕЧЬ': 'EXTRACT',
123
+ 'ГОД': 'YEAR',
124
+ 'МЕСЯЦ': 'MONTH',
125
+ 'ДЕНЬ': 'DAY'
126
+ }
127
+
128
+ def Получить_токены(запрос):
129
+ токены = []
130
+ текущий_токен = ''
131
+ в_строке = False
132
+ в_комментарии = False
133
+ строка_символ = None
134
+ i = 0
135
+
136
+ while i < len(запрос):
137
+ символ = запрос[i]
138
+
139
+ if символ in ('"', "'") and not в_комментарии:
140
+ if в_строке and символ == строка_символ:
141
+ в_строке = False
142
+ текущий_токен += символ
143
+ токены.append(текущий_токен)
144
+ текущий_токен = ''
145
+ i += 1
146
+ continue
147
+ elif not в_строке:
148
+ в_строке = True
149
+ строка_символ = символ
150
+ if текущий_токен:
151
+ токены.append(текущий_токен)
152
+ текущий_токен = ''
153
+ текущий_токен = символ
154
+ i += 1
155
+ continue
156
+
157
+ if символ == '-' and i + 1 < len(запрос) and запрос[i + 1] == '-' and not в_строке:
158
+ if текущий_токен:
159
+ токены.append(текущий_токен)
160
+ текущий_токен = ''
161
+ в_комментарии = True
162
+ текущий_токен = '--'
163
+ i += 2
164
+ while i < len(запрос) and запрос[i] != '\n':
165
+ текущий_токен += запрос[i]
166
+ i += 1
167
+ токены.append(текущий_токен)
168
+ текущий_токен = ''
169
+ в_комментарии = False
170
+ continue
171
+
172
+ if символ == '/' and i + 1 < len(запрос) and запрос[i + 1] == '*' and not в_строке:
173
+ if текущий_токен:
174
+ токены.append(текущий_токен)
175
+ текущий_токен = ''
176
+ в_комментарии = True
177
+ текущий_токен = '/*'
178
+ i += 2
179
+ while i < len(запрос) - 1 and not (запрос[i] == '*' and запрос[i + 1] == '/'):
180
+ текущий_токен += запрос[i]
181
+ i += 1
182
+ if i < len(запрос) - 1:
183
+ текущий_токен += '*/'
184
+ i += 2
185
+ токены.append(текущий_токен)
186
+ текущий_токен = ''
187
+ в_комментарии = False
188
+ continue
189
+
190
+ if в_строке or в_комментарии:
191
+ текущий_токен += символ
192
+ i += 1
193
+ continue
194
+
195
+ if символ.isspace() or символ in (',', ';', '(', ')', '=', '<', '>', '!'):
196
+ if текущий_токен:
197
+ токены.append(текущий_токен)
198
+ текущий_токен = ''
199
+ if not символ.isspace():
200
+ токены.append(символ)
201
+ i += 1
202
+ continue
203
+
204
+ текущий_токен += символ
205
+ i += 1
206
+
207
+ if текущий_токен:
208
+ токены.append(текущий_токен)
209
+
210
+ return токены
211
+
212
+ def Перевести_токены(токены):
213
+ переведённые_токены = []
214
+ i = 0
215
+
216
+ while i < len(токены):
217
+ токен = токены[i]
218
+
219
+ if (токен.startswith('"') or токен.startswith("'") or
220
+ токен.startswith('--') or токен.startswith('/*') or
221
+ токен in (',', ';', '(', ')', '=', '<', '>', '!')):
222
+ переведённые_токены.append(токен)
223
+ i += 1
224
+ continue
225
+
226
+ найдено_ключевое_слово = False
227
+ for длина in range(5, 0, -1):
228
+ if i + длина <= len(токены):
229
+ фраза = ' '.join(токены[i:i + длина]).upper()
230
+ if фраза in Словарь_перевода:
231
+ переведённые_токены.append(Словарь_перевода[фраза])
232
+ i += длина
233
+ найдено_ключевое_слово = True
234
+ break
235
+
236
+ if not найдено_ключевое_слово:
237
+ переведённые_токены.append(токен)
238
+ i += 1
239
+
240
+ return переведённые_токены
241
+
242
+ def Собрать_запрос(токены):
243
+ запрос = ''
244
+ for i, токен in enumerate(токены):
245
+ if токен in (',', ';', '(', ')', '=', '<', '>', '!'):
246
+ запрос += токен
247
+ else:
248
+ if i > 0 and токены[i - 1] not in (' ', ',', ';', '(', '=', '<', '>', '!'):
249
+ запрос += ' '
250
+ запрос += токен
251
+ return запрос.strip()
252
+
253
+ def Перевести_код_запроса(текст):
254
+ токены = Получить_токены(текст)
255
+ переведённые_токены = Перевести_токены(токены)
256
+ запрос = Собрать_запрос(переведённые_токены)
257
+ return запрос
258
+
259
+ class Указатель(sqlite3.Cursor):
260
+ def __init__(здесь, курсор):
261
+ super().__init__(курсор.connection)
262
+ здесь.cursor = курсор
263
+
264
+ def Выполнить_запрос(здесь, запрос, параметры=()):
265
+ запрос = Перевести_код_запроса(запрос)
266
+ здесь.execute(запрос, параметры)
267
+
268
+ def Выполнить_запросы(здесь, запрос, последовательность_параметров):
269
+ запрос = Перевести_код_запроса(запрос)
270
+ здесь.executemany(запрос, последовательность_параметров)
271
+
272
+ def Выполнить_скрипт(здесь, скрипт):
273
+ скрипт = Перевести_код_запроса(скрипт)
274
+ здесь.executescript(скрипт)
275
+
276
+ def Извлечь_запись(здесь):
277
+ return здесь.cursor.fetchone()
278
+
279
+ def Извлечь_записи(здесь, количество):
280
+ return здесь.cursor.fetchmany(количество)
281
+
282
+ def Извлечь_все_записи(здесь):
283
+ return здесь.cursor.fetchall()
284
+
285
+ def Закрыть(здесь): здесь.cursor.close()
286
+
287
+ @property
288
+ def Описание(здесь): return здесь.cursor.description
289
+
290
+ @property
291
+ def Количество_строк(здесь): return здесь.cursor.rowcount
292
+
293
+ @property
294
+ def Последний_идентификатор(здесь): return здесь.cursor.lastrowid
295
+
296
+ class Соединение(sqlite3.Connection):
297
+ def __init__(здесь, *ПА, **ИА):
298
+ super().__init__(*ПА, **ИА)
299
+
300
+ def Создать_указатель(здесь):
301
+ курсор = здесь.cursor()
302
+ return Указатель(курсор)
303
+
304
+ def Выполнить_запрос(здесь, запрос, параметры=()):
305
+ запрос = Перевести_код_запроса(запрос)
306
+ указатель = здесь.execute(запрос, параметры)
307
+ return Указатель(указатель)
308
+
309
+ def Выполнить_запросы(здесь, запрос, последовательность_параметров):
310
+ запрос = Перевести_код_запроса(запрос)
311
+ указатель = здесь.executemany(запрос, последовательность_параметров)
312
+ return Указатель(указатель)
313
+
314
+ def Выполнить_скрипт(здесь, скрипт):
315
+ скрипт = Перевести_код_запроса(скрипт)
316
+ здесь.executescript(скрипт)
317
+
318
+ def Создать_функцию(здесь, имя, количество_параметров, функция):
319
+ здесь.create_function(имя, количество_параметров, функция)
320
+
321
+ def Создать_агрегатную_функцию(здесь, имя, количество_параметров, класс_агрегатной_функции):
322
+ здесь.create_aggregate(имя, количество_параметров, класс_агрегатной_функции)
323
+
324
+ def Создать_сопоставление(здесь, имя, функция):
325
+ здесь.create_collation(имя, функция)
326
+
327
+ def Закрыть(здесь): здесь.close()
328
+
329
+ def Утвердить(здесь): здесь.commit()
330
+
331
+ def Откатить(здесь): здесь.rollback()
332
+
333
+ @property
334
+ def В_транзакции(здесь): return здесь.in_transaction
335
+
336
+ @property
337
+ def Изоляция(здесь): return здесь.isolation_level
338
+
339
+ @Изоляция.setter
340
+ def Изоляция(здесь, значение): здесь.isolation_level = значение
341
+
342
+ def Подключиться(
343
+ путь, *,
344
+ таймаут = 5.0,
345
+ обнаружение_типов = 0,
346
+ уровень_изоляции = None,
347
+ проверять_тот_же_ли_поток = True,
348
+ фабрика = Соединение,
349
+ кэш_инструкций = 128,
350
+ является_ссылкой = False
351
+ ):
352
+ if уровень_изоляции == 'ОТЛОЖЕННО': уровень_изоляции = 'DEFERRED'
353
+ elif уровень_изоляции == 'НЕМЕДЛЕННО': уровень_изоляции = 'IMMEDIATE'
354
+ elif уровень_изоляции == 'ИСКЛЮЧИТЕЛЬНО': уровень_изоляции = 'EXCLUSIVE'
355
+ else: уровень_изоляции = None
356
+
357
+ соединение = sqlite3.connect(
358
+ путь,
359
+ timeout=таймаут,
360
+ detect_types=обнаружение_типов,
361
+ isolation_level=уровень_изоляции,
362
+ check_same_thread=проверять_тот_же_ли_поток,
363
+ factory=фабрика,
364
+ cached_statements=кэш_инструкций,
365
+ uri=является_ссылкой
366
+ )
367
+
368
+ return соединение
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.1.5
3
+ Version: 1.1.6
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -1,11 +1,12 @@
1
1
  rupython/__main__.py,sha256=BxtsIK8PJuOOGVDKxqoscwJjjWWhZts7adicFuwUL6k,540
2
2
  rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
3
3
  rupython/Преобразователь.py,sha256=_oJ2iaUxh5jmKqcIaAPW-9oTdx93rTYGITJGgk3cJQI,41041
4
+ rupython/Модули/БД.py,sha256=eVgOnbqp1dq1r981cGUSKofbFP-Yn4JwdidMoEYiTjM,15142
4
5
  rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
5
6
  rupython/Модули/РегВыр.py,sha256=yeXYfeDF2qw4DSKVdZVSFInMUW52U7Nq_KOJKvm4XnM,6349
6
7
  rupython/Модули/Случ.py,sha256=oeVdSdFVb4X_T-nX2P7NSIhise1zUPIS4lk7h-67XSg,2689
7
- rupython-1.1.5.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
8
- rupython-1.1.5.dist-info/METADATA,sha256=400O3JzEeSfTKjUFZLtOoaeJ28abRjlaSCud5JjF7MQ,13869
9
- rupython-1.1.5.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
10
- rupython-1.1.5.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
11
- rupython-1.1.5.dist-info/RECORD,,
8
+ rupython-1.1.6.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
9
+ rupython-1.1.6.dist-info/METADATA,sha256=vgHzYB-_J7Kjw9tVSiLfERwtwwcplh3bbeDT1klQ_3w,13869
10
+ rupython-1.1.6.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
11
+ rupython-1.1.6.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
12
+ rupython-1.1.6.dist-info/RECORD,,