rupython 1.1.6__py3-none-any.whl → 1.1.8__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/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 +64 -66
- rupython//342/225/250/320/257/342/225/244/320/220/342/225/250/342/225/241/342/225/250/342/225/233/342/225/250/342/226/222/342/225/244/320/220/342/225/250/342/226/221/342/225/250/342/225/226/342/225/250/342/225/233/342/225/250/342/226/223/342/225/250/342/226/221/342/225/244/320/222/342/225/250/342/225/241/342/225/250/342/225/227/342/225/244/320/234.py +32 -17
- {rupython-1.1.6.dist-info → rupython-1.1.8.dist-info}/METADATA +1 -1
- {rupython-1.1.6.dist-info → rupython-1.1.8.dist-info}/RECORD +7 -7
- {rupython-1.1.6.dist-info → rupython-1.1.8.dist-info}/LICENSE +0 -0
- {rupython-1.1.6.dist-info → rupython-1.1.8.dist-info}/WHEEL +0 -0
- {rupython-1.1.6.dist-info → rupython-1.1.8.dist-info}/top_level.txt +0 -0
@@ -16,7 +16,7 @@ import sqlite3
|
|
16
16
|
|
17
17
|
Словарь_перевода = {
|
18
18
|
'НАЧАТЬ': 'BEGIN',
|
19
|
-
'
|
19
|
+
'ЗАВЕШИТЬ': 'END',
|
20
20
|
'ТРАНЗАКЦИЮ': 'TRANSACTION',
|
21
21
|
'ОТЛОЖЕННО': 'DEFERRED',
|
22
22
|
'НЕМЕДЛЕННО': 'IMMEDIATE',
|
@@ -80,10 +80,15 @@ import sqlite3
|
|
80
80
|
'ЕСЛИ': 'IF',
|
81
81
|
'СУЩЕСТВУЕТ': 'EXISTS',
|
82
82
|
|
83
|
+
'ОПРЕДЕЛИВ': 'WITH',
|
84
|
+
'ВЫБОР': 'CASE',
|
85
|
+
'ЕСЛИ': 'WHEN',
|
86
|
+
'ТО': 'THEN',
|
87
|
+
'КОНЕЦ': 'END',
|
88
|
+
'РЕКУРСИВНО': 'RECURSIVE',
|
89
|
+
|
83
90
|
'ЦЕЛОЕ': 'INTEGER',
|
84
|
-
'
|
85
|
-
'ВЕЩЕСТВЕННОЕ': 'FLOAT',
|
86
|
-
'СТРОКА': 'VARCHAR',
|
91
|
+
'ВЕЩЕСТВЕННОЕ': 'REAL',
|
87
92
|
'ТЕКСТ': 'TEXT',
|
88
93
|
'ДАННЫЕ': 'BLOB',
|
89
94
|
'ДАТА': 'DATE',
|
@@ -100,6 +105,7 @@ import sqlite3
|
|
100
105
|
'НЕТ': 'FALSE',
|
101
106
|
'ПО_УМОЛЧАНИЮ': 'DEFAULT',
|
102
107
|
'САМОУВЕЛИЧИВАЮЩЕЕСЯ': 'AUTO_INCREMENT',
|
108
|
+
'ССЫЛАЕТСЯ НА': 'REFERENCES',
|
103
109
|
|
104
110
|
'КОЛИЧЕСТВО': 'COUNT',
|
105
111
|
'СУММА': 'SUM',
|
@@ -256,113 +262,105 @@ def Перевести_код_запроса(текст):
|
|
256
262
|
запрос = Собрать_запрос(переведённые_токены)
|
257
263
|
return запрос
|
258
264
|
|
259
|
-
class Указатель(
|
265
|
+
class Указатель():
|
260
266
|
def __init__(здесь, курсор):
|
261
|
-
|
262
|
-
здесь.cursor = курсор
|
267
|
+
здесь._курсор = курсор
|
263
268
|
|
264
269
|
def Выполнить_запрос(здесь, запрос, параметры=()):
|
265
270
|
запрос = Перевести_код_запроса(запрос)
|
266
|
-
здесь.execute(запрос, параметры)
|
271
|
+
здесь._курсор.execute(запрос, параметры)
|
267
272
|
|
268
273
|
def Выполнить_запросы(здесь, запрос, последовательность_параметров):
|
269
274
|
запрос = Перевести_код_запроса(запрос)
|
270
|
-
здесь.executemany(запрос, последовательность_параметров)
|
275
|
+
здесь._курсор.executemany(запрос, последовательность_параметров)
|
271
276
|
|
272
|
-
def Выполнить_
|
273
|
-
скрипт = Перевести_код_запроса(
|
274
|
-
здесь.executescript(скрипт)
|
277
|
+
def Выполнить_сценарий(здесь, сценарий):
|
278
|
+
скрипт = Перевести_код_запроса(сценарий)
|
279
|
+
здесь._курсор.executescript(скрипт)
|
275
280
|
|
276
281
|
def Извлечь_запись(здесь):
|
277
|
-
return здесь.
|
282
|
+
return здесь._курсор.fetchone()
|
278
283
|
|
279
284
|
def Извлечь_записи(здесь, количество):
|
280
|
-
return здесь.
|
285
|
+
return здесь._курсор.fetchmany(количество)
|
281
286
|
|
282
287
|
def Извлечь_все_записи(здесь):
|
283
|
-
return здесь.
|
288
|
+
return здесь._курсор.fetchall()
|
284
289
|
|
285
|
-
def Закрыть(здесь): здесь.
|
290
|
+
def Закрыть(здесь): здесь._курсор.close()
|
286
291
|
|
287
292
|
@property
|
288
|
-
def Описание(здесь): return здесь.
|
293
|
+
def Описание(здесь): return здесь._курсор.description
|
289
294
|
|
290
295
|
@property
|
291
|
-
def Количество_строк(здесь): return здесь.
|
296
|
+
def Количество_строк(здесь): return здесь._курсор.rowcount
|
292
297
|
|
293
298
|
@property
|
294
|
-
def Последний_идентификатор(здесь): return здесь.
|
295
|
-
|
296
|
-
class Соединение(
|
297
|
-
def __init__(здесь,
|
298
|
-
|
299
|
+
def Последний_идентификатор(здесь): return здесь._курсор.lastrowid
|
300
|
+
|
301
|
+
class Соединение():
|
302
|
+
def __init__(здесь,
|
303
|
+
путь, *,
|
304
|
+
таймаут = 5.0,
|
305
|
+
обнаружение_типов = 0,
|
306
|
+
уровень_изоляции = None,
|
307
|
+
проверять_тот_же_ли_поток = True,
|
308
|
+
кэш_инструкций = 128,
|
309
|
+
является_ссылкой = False
|
310
|
+
):
|
311
|
+
if уровень_изоляции == 'ОТЛОЖЕННО': уровень_изоляции = 'DEFERRED'
|
312
|
+
elif уровень_изоляции == 'НЕМЕДЛЕННО': уровень_изоляции = 'IMMEDIATE'
|
313
|
+
elif уровень_изоляции == 'ИСКЛЮЧИТЕЛЬНО': уровень_изоляции = 'EXCLUSIVE'
|
314
|
+
else: уровень_изоляции = None
|
315
|
+
|
316
|
+
здесь._соединение = sqlite3.connect(
|
317
|
+
путь,
|
318
|
+
timeout=таймаут,
|
319
|
+
detect_types=обнаружение_типов,
|
320
|
+
isolation_level=уровень_изоляции,
|
321
|
+
check_same_thread=проверять_тот_же_ли_поток,
|
322
|
+
cached_statements=кэш_инструкций,
|
323
|
+
uri=является_ссылкой
|
324
|
+
)
|
299
325
|
|
300
326
|
def Создать_указатель(здесь):
|
301
|
-
курсор = здесь.cursor()
|
327
|
+
курсор = здесь._соединение.cursor()
|
302
328
|
return Указатель(курсор)
|
303
329
|
|
304
330
|
def Выполнить_запрос(здесь, запрос, параметры=()):
|
305
331
|
запрос = Перевести_код_запроса(запрос)
|
306
|
-
указатель = здесь.execute(запрос, параметры)
|
332
|
+
указатель = здесь._соединение.execute(запрос, параметры)
|
307
333
|
return Указатель(указатель)
|
308
334
|
|
309
335
|
def Выполнить_запросы(здесь, запрос, последовательность_параметров):
|
310
336
|
запрос = Перевести_код_запроса(запрос)
|
311
|
-
указатель = здесь.executemany(запрос, последовательность_параметров)
|
337
|
+
указатель = здесь._соединение.executemany(запрос, последовательность_параметров)
|
312
338
|
return Указатель(указатель)
|
313
339
|
|
314
|
-
def Выполнить_
|
315
|
-
скрипт = Перевести_код_запроса(
|
316
|
-
здесь.executescript(скрипт)
|
340
|
+
def Выполнить_сценарий(здесь, сценарий):
|
341
|
+
скрипт = Перевести_код_запроса(сценарий)
|
342
|
+
здесь._соединение.executescript(скрипт)
|
317
343
|
|
318
344
|
def Создать_функцию(здесь, имя, количество_параметров, функция):
|
319
|
-
здесь.create_function(имя, количество_параметров, функция)
|
345
|
+
здесь._соединение.create_function(имя, количество_параметров, функция)
|
320
346
|
|
321
347
|
def Создать_агрегатную_функцию(здесь, имя, количество_параметров, класс_агрегатной_функции):
|
322
|
-
здесь.create_aggregate(имя, количество_параметров, класс_агрегатной_функции)
|
348
|
+
здесь._соединение.create_aggregate(имя, количество_параметров, класс_агрегатной_функции)
|
323
349
|
|
324
350
|
def Создать_сопоставление(здесь, имя, функция):
|
325
|
-
здесь.create_collation(имя, функция)
|
351
|
+
здесь._соединение.create_collation(имя, функция)
|
326
352
|
|
327
|
-
def Закрыть(здесь): здесь.close()
|
353
|
+
def Закрыть(здесь): здесь._соединение.close()
|
328
354
|
|
329
|
-
def Утвердить(здесь): здесь.commit()
|
355
|
+
def Утвердить(здесь): здесь._соединение.commit()
|
330
356
|
|
331
|
-
def Откатить(здесь): здесь.rollback()
|
357
|
+
def Откатить(здесь): здесь._соединение.rollback()
|
332
358
|
|
333
359
|
@property
|
334
|
-
def В_транзакции(здесь): return здесь.in_transaction
|
360
|
+
def В_транзакции(здесь): return здесь._соединение.in_transaction
|
335
361
|
|
336
362
|
@property
|
337
|
-
def Изоляция(здесь): return здесь.isolation_level
|
363
|
+
def Изоляция(здесь): return здесь._соединение.isolation_level
|
338
364
|
|
339
365
|
@Изоляция.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 соединение
|
366
|
+
def Изоляция(здесь, значение): здесь._соединение.isolation_level = значение
|
@@ -328,9 +328,9 @@ def Прочитать_слова(чтение_строки, путь_к_фай
|
|
328
328
|
except Exception as ошибка:
|
329
329
|
Вывести_текст_исключения(ошибка, 'при чтении кода', путь_к_файлу)
|
330
330
|
|
331
|
-
def Выполнить_основные_замены(слова,
|
331
|
+
def Выполнить_основные_замены(слова, соответствия):
|
332
332
|
for номер, слово in enumerate(слова):
|
333
|
-
if (
|
333
|
+
if (номер == 0 or слова[номер - 1][1] != '.') and \
|
334
334
|
слово[0] == 1 and слово[1] in соответствия:
|
335
335
|
слова[номер] = (1, соответствия[слово[1]], слово[2])
|
336
336
|
|
@@ -625,21 +625,36 @@ def Посчитать_физические_строки(путь_к_файлу,
|
|
625
625
|
return логическая_строка
|
626
626
|
|
627
627
|
Переводы_ошибок = {
|
628
|
-
r
|
629
|
-
r
|
630
|
-
r
|
631
|
-
r
|
632
|
-
r
|
633
|
-
r
|
634
|
-
r'
|
635
|
-
r
|
636
|
-
r
|
637
|
-
r
|
638
|
-
r
|
639
|
-
r
|
640
|
-
r
|
641
|
-
r
|
642
|
-
r
|
628
|
+
r".*EOF in multi-line statement.*": r'Неожиданный конец файла при обработке многострочной инструкции.',
|
629
|
+
r"name '(\w+)' is not defined": r'Название "\1" не определено.',
|
630
|
+
r"unsupported operand type\(s\) for .+: '(\w+)' and '(\w+)'": r'Неподдерживаемая операция между типами "\1" и "\2".',
|
631
|
+
r"invalid literal for int\(\) with base \d+: '(.+)'": r'Недопустимое значение "\1" для преобразования в целое число.',
|
632
|
+
r"division by zero": r'Деление на ноль.',
|
633
|
+
r"list index out of range": r'Индекс за пределами списка.',
|
634
|
+
r"'(\w+)' object has no attribute '(\w+)'": r'Объект типа "\1" не имеет атрибута "\2".',
|
635
|
+
r"module '(\w+)' has no attribute '(\w+)'": r'Модуль "\1" не имеет атрибута "\2".',
|
636
|
+
r"cannot import name '(\w+)' from '(\w+)'": r'Не удалось импортовать "\1" из модуля "\2".',
|
637
|
+
r"no such file or directory: '(.+)'": r'Файл или директория "\1" не найдены.',
|
638
|
+
r"index (\d+) is out of range": r'Индекс \1 вне допустимого диапазона.',
|
639
|
+
r"key '(.+)' not found": r'Ключ "\1" не найден в словаре.',
|
640
|
+
r"KeyError: '(.+)'": r'Ключ "\1" отсутствует в словаре.',
|
641
|
+
r"invalid syntax": r'Синтаксическая ошибка в коде.',
|
642
|
+
r"expected .+, got .+": r'Ожидался один тип данных, получен другой.',
|
643
|
+
r"int\(\) argument must be a string, a bytes-like object or a number, not '(\w+)'": r'Аргумент функции Цел() должен быть строкой, байтовым объектом или числом, а не "\1".',
|
644
|
+
r"IndentationError: expected an indented block": r'Ожидался блок с отступом.',
|
645
|
+
r"IndentationError: unindent does not match any outer indentation level": r'Уровень отступа не соответствует внешнему блоку.',
|
646
|
+
r"TypeError: (\w+)\(\) takes \d+ positional arguments? but \d+ were given": r'Функция "\1" принимает меньше аргументов, чем было передано.',
|
647
|
+
r"ValueError: (.+)": r'Ошибка значения: \1.',
|
648
|
+
r"AttributeError: '(\w+)' object is not callable": r'Объект типа "\1" не является вызываемым.',
|
649
|
+
r"ImportError: No module named '(\w+)'": r'Ошибка импорта: модуль "\1" не найден.',
|
650
|
+
r"FileNotFoundError: \[Errno 2\] No such file or directory: '(.+)'": r'Файл "\1" не найден.',
|
651
|
+
r"IndexError: tuple index out of range": r'Индекс за пределами кортежа.',
|
652
|
+
r"SyntaxError: unexpected EOF while parsing": r'Неожиданный конец файла при разборе кода.',
|
653
|
+
r"ZeroDivisionError: float division by zero": r'Деление числа с плавающей точкой на ноль.',
|
654
|
+
r"TypeError: cannot unpack non-iterable (\w+) object": r'Невозможно распаковать неитерируемый объект типа "\1".',
|
655
|
+
r"MemoryError": r'Недостаточно памяти для выполнения операции.',
|
656
|
+
r"OverflowError: (.+)": r'Переполнение: \1.',
|
657
|
+
r"AssertionError": r'Ошибка проверки: условие не выполнено.'
|
643
658
|
}
|
644
659
|
|
645
660
|
def Вывести_текст_исключения(исключение, заголовок, путь_к_файлу):
|
@@ -1,12 +1,12 @@
|
|
1
1
|
rupython/__main__.py,sha256=BxtsIK8PJuOOGVDKxqoscwJjjWWhZts7adicFuwUL6k,540
|
2
2
|
rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
|
3
|
-
rupython/Преобразователь.py,sha256=
|
4
|
-
rupython/Модули/БД.py,sha256=
|
3
|
+
rupython/Преобразователь.py,sha256=YaR4lZaQxgo4vEZFk0i4_1Nx41AoH3N0mSbV2KH3wEM,42790
|
4
|
+
rupython/Модули/БД.py,sha256=Hkp7Iyx9WeefuJLCNJ-NMCUMd7KF8R63mELQf6L6WFo,15521
|
5
5
|
rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
|
6
6
|
rupython/Модули/РегВыр.py,sha256=yeXYfeDF2qw4DSKVdZVSFInMUW52U7Nq_KOJKvm4XnM,6349
|
7
7
|
rupython/Модули/Случ.py,sha256=oeVdSdFVb4X_T-nX2P7NSIhise1zUPIS4lk7h-67XSg,2689
|
8
|
-
rupython-1.1.
|
9
|
-
rupython-1.1.
|
10
|
-
rupython-1.1.
|
11
|
-
rupython-1.1.
|
12
|
-
rupython-1.1.
|
8
|
+
rupython-1.1.8.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
|
9
|
+
rupython-1.1.8.dist-info/METADATA,sha256=b-F1dnuD_q-nTzF5xOY9PHJ_YWchjSn7rOqNkiX8t60,13869
|
10
|
+
rupython-1.1.8.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
11
|
+
rupython-1.1.8.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
|
12
|
+
rupython-1.1.8.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|