rupython 1.1.6__py3-none-any.whl → 1.1.7__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.
@@ -81,9 +81,7 @@ import sqlite3
81
81
  'СУЩЕСТВУЕТ': 'EXISTS',
82
82
 
83
83
  'ЦЕЛОЕ': 'INTEGER',
84
- 'ЧИСЛО': 'NUMBER',
85
- 'ВЕЩЕСТВЕННОЕ': 'FLOAT',
86
- 'СТРОКА': 'VARCHAR',
84
+ 'ВЕЩЕСТВЕННОЕ': 'REAL',
87
85
  'ТЕКСТ': 'TEXT',
88
86
  'ДАННЫЕ': 'BLOB',
89
87
  'ДАТА': 'DATE',
@@ -256,113 +254,105 @@ def Перевести_код_запроса(текст):
256
254
  запрос = Собрать_запрос(переведённые_токены)
257
255
  return запрос
258
256
 
259
- class Указатель(sqlite3.Cursor):
257
+ class Указатель():
260
258
  def __init__(здесь, курсор):
261
- super().__init__(курсор.connection)
262
- здесь.cursor = курсор
259
+ здесь._курсор = курсор
263
260
 
264
261
  def Выполнить_запрос(здесь, запрос, параметры=()):
265
262
  запрос = Перевести_код_запроса(запрос)
266
- здесь.execute(запрос, параметры)
263
+ здесь._курсор.execute(запрос, параметры)
267
264
 
268
265
  def Выполнить_запросы(здесь, запрос, последовательность_параметров):
269
266
  запрос = Перевести_код_запроса(запрос)
270
- здесь.executemany(запрос, последовательность_параметров)
267
+ здесь._курсор.executemany(запрос, последовательность_параметров)
271
268
 
272
- def Выполнить_скрипт(здесь, скрипт):
273
- скрипт = Перевести_код_запроса(скрипт)
274
- здесь.executescript(скрипт)
269
+ def Выполнить_сценарий(здесь, сценарий):
270
+ скрипт = Перевести_код_запроса(сценарий)
271
+ здесь._курсор.executescript(скрипт)
275
272
 
276
273
  def Извлечь_запись(здесь):
277
- return здесь.cursor.fetchone()
274
+ return здесь._курсор.fetchone()
278
275
 
279
276
  def Извлечь_записи(здесь, количество):
280
- return здесь.cursor.fetchmany(количество)
277
+ return здесь._курсор.fetchmany(количество)
281
278
 
282
279
  def Извлечь_все_записи(здесь):
283
- return здесь.cursor.fetchall()
280
+ return здесь._курсор.fetchall()
284
281
 
285
- def Закрыть(здесь): здесь.cursor.close()
282
+ def Закрыть(здесь): здесь._курсор.close()
286
283
 
287
284
  @property
288
- def Описание(здесь): return здесь.cursor.description
285
+ def Описание(здесь): return здесь._курсор.description
289
286
 
290
287
  @property
291
- def Количество_строк(здесь): return здесь.cursor.rowcount
288
+ def Количество_строк(здесь): return здесь._курсор.rowcount
292
289
 
293
290
  @property
294
- def Последний_идентификатор(здесь): return здесь.cursor.lastrowid
295
-
296
- class Соединение(sqlite3.Connection):
297
- def __init__(здесь, *ПА, **ИА):
298
- super().__init__(*ПА, **ИА)
291
+ def Последний_идентификатор(здесь): return здесь._курсор.lastrowid
292
+
293
+ class Соединение():
294
+ def __init__(здесь,
295
+ путь, *,
296
+ таймаут = 5.0,
297
+ обнаружение_типов = 0,
298
+ уровень_изоляции = None,
299
+ проверять_тот_же_ли_поток = True,
300
+ кэш_инструкций = 128,
301
+ является_ссылкой = False
302
+ ):
303
+ if уровень_изоляции == 'ОТЛОЖЕННО': уровень_изоляции = 'DEFERRED'
304
+ elif уровень_изоляции == 'НЕМЕДЛЕННО': уровень_изоляции = 'IMMEDIATE'
305
+ elif уровень_изоляции == 'ИСКЛЮЧИТЕЛЬНО': уровень_изоляции = 'EXCLUSIVE'
306
+ else: уровень_изоляции = None
307
+
308
+ здесь._соединение = sqlite3.connect(
309
+ путь,
310
+ timeout=таймаут,
311
+ detect_types=обнаружение_типов,
312
+ isolation_level=уровень_изоляции,
313
+ check_same_thread=проверять_тот_же_ли_поток,
314
+ cached_statements=кэш_инструкций,
315
+ uri=является_ссылкой
316
+ )
299
317
 
300
318
  def Создать_указатель(здесь):
301
- курсор = здесь.cursor()
319
+ курсор = здесь._соединение.cursor()
302
320
  return Указатель(курсор)
303
321
 
304
322
  def Выполнить_запрос(здесь, запрос, параметры=()):
305
323
  запрос = Перевести_код_запроса(запрос)
306
- указатель = здесь.execute(запрос, параметры)
324
+ указатель = здесь._соединение.execute(запрос, параметры)
307
325
  return Указатель(указатель)
308
326
 
309
327
  def Выполнить_запросы(здесь, запрос, последовательность_параметров):
310
328
  запрос = Перевести_код_запроса(запрос)
311
- указатель = здесь.executemany(запрос, последовательность_параметров)
329
+ указатель = здесь._соединение.executemany(запрос, последовательность_параметров)
312
330
  return Указатель(указатель)
313
331
 
314
- def Выполнить_скрипт(здесь, скрипт):
315
- скрипт = Перевести_код_запроса(скрипт)
316
- здесь.executescript(скрипт)
332
+ def Выполнить_сценарий(здесь, сценарий):
333
+ скрипт = Перевести_код_запроса(сценарий)
334
+ здесь._соединение.executescript(скрипт)
317
335
 
318
336
  def Создать_функцию(здесь, имя, количество_параметров, функция):
319
- здесь.create_function(имя, количество_параметров, функция)
337
+ здесь._соединение.create_function(имя, количество_параметров, функция)
320
338
 
321
339
  def Создать_агрегатную_функцию(здесь, имя, количество_параметров, класс_агрегатной_функции):
322
- здесь.create_aggregate(имя, количество_параметров, класс_агрегатной_функции)
340
+ здесь._соединение.create_aggregate(имя, количество_параметров, класс_агрегатной_функции)
323
341
 
324
342
  def Создать_сопоставление(здесь, имя, функция):
325
- здесь.create_collation(имя, функция)
343
+ здесь._соединение.create_collation(имя, функция)
326
344
 
327
- def Закрыть(здесь): здесь.close()
345
+ def Закрыть(здесь): здесь._соединение.close()
328
346
 
329
- def Утвердить(здесь): здесь.commit()
347
+ def Утвердить(здесь): здесь._соединение.commit()
330
348
 
331
- def Откатить(здесь): здесь.rollback()
349
+ def Откатить(здесь): здесь._соединение.rollback()
332
350
 
333
351
  @property
334
- def В_транзакции(здесь): return здесь.in_transaction
352
+ def В_транзакции(здесь): return здесь._соединение.in_transaction
335
353
 
336
354
  @property
337
- def Изоляция(здесь): return здесь.isolation_level
355
+ def Изоляция(здесь): return здесь._соединение.isolation_level
338
356
 
339
357
  @Изоляция.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 соединение
358
+ 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.7
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=9Q3U634QBas1jvf898Lqt1EiMp8YpLGYv9_uXx6CU3I,15299
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.7.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
9
+ rupython-1.1.7.dist-info/METADATA,sha256=_K57p8V9E7pgrXmTqi7-rrBVmZPSnbsz0FZWdFrTUm4,13869
10
+ rupython-1.1.7.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
11
+ rupython-1.1.7.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
12
+ rupython-1.1.7.dist-info/RECORD,,