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.
@@ -16,7 +16,7 @@ import sqlite3
16
16
 
17
17
  Словарь_перевода = {
18
18
  'НАЧАТЬ': 'BEGIN',
19
- 'ЗАКОНЧИТЬ': 'END',
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
- 'ЧИСЛО': 'NUMBER',
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 Указатель(sqlite3.Cursor):
265
+ class Указатель():
260
266
  def __init__(здесь, курсор):
261
- super().__init__(курсор.connection)
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 здесь.cursor.fetchone()
282
+ return здесь._курсор.fetchone()
278
283
 
279
284
  def Извлечь_записи(здесь, количество):
280
- return здесь.cursor.fetchmany(количество)
285
+ return здесь._курсор.fetchmany(количество)
281
286
 
282
287
  def Извлечь_все_записи(здесь):
283
- return здесь.cursor.fetchall()
288
+ return здесь._курсор.fetchall()
284
289
 
285
- def Закрыть(здесь): здесь.cursor.close()
290
+ def Закрыть(здесь): здесь._курсор.close()
286
291
 
287
292
  @property
288
- def Описание(здесь): return здесь.cursor.description
293
+ def Описание(здесь): return здесь._курсор.description
289
294
 
290
295
  @property
291
- def Количество_строк(здесь): return здесь.cursor.rowcount
296
+ def Количество_строк(здесь): return здесь._курсор.rowcount
292
297
 
293
298
  @property
294
- def Последний_идентификатор(здесь): return здесь.cursor.lastrowid
295
-
296
- class Соединение(sqlite3.Connection):
297
- def __init__(здесь, *ПА, **ИА):
298
- super().__init__(*ПА, **ИА)
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 Выполнить_основные_замены(слова, соответствия, не_после_точки = False):
331
+ def Выполнить_основные_замены(слова, соответствия):
332
332
  for номер, слово in enumerate(слова):
333
- if (not не_после_точки or (номер == 0 or слова[номер - 1][1] != '.')) and \
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'.*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 "(\w+)" not found': r'Ключ "\1" не найден.',
640
- r'invalid syntax': r'Синтаксическая ошибка.',
641
- r'expected .+, got .+': r'Ожидался один тип данных, получен другой.',
642
- r'int\(\) argument must be a string, a bytes-like object or a number, not "(\w+)"': r'Аргумент Цел() должен быть строкой, байтовым объектом или числом, а не "\1".'
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.1.6
3
+ Version: 1.1.8
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -1,12 +1,12 @@
1
1
  rupython/__main__.py,sha256=BxtsIK8PJuOOGVDKxqoscwJjjWWhZts7adicFuwUL6k,540
2
2
  rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
3
- rupython/Преобразователь.py,sha256=_oJ2iaUxh5jmKqcIaAPW-9oTdx93rTYGITJGgk3cJQI,41041
4
- rupython/Модули/БД.py,sha256=eVgOnbqp1dq1r981cGUSKofbFP-Yn4JwdidMoEYiTjM,15142
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.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,,
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,,