rupython 1.1.8__tar.gz → 1.1.9__tar.gz

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.
Files changed (17) hide show
  1. {rupython-1.1.8 → rupython-1.1.9}/PKG-INFO +1 -1
  2. rupython-1.1.9/rupython/__main__.py +30 -0
  3. {rupython-1.1.8 → rupython-1.1.9}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/221/320/224.py +111 -39
  4. {rupython-1.1.8 → rupython-1.1.9}/rupython.egg-info/PKG-INFO +1 -1
  5. {rupython-1.1.8 → rupython-1.1.9}/setup.py +1 -1
  6. rupython-1.1.8/rupython/__main__.py +0 -12
  7. {rupython-1.1.8 → rupython-1.1.9}/LICENSE +0 -0
  8. {rupython-1.1.8 → rupython-1.1.9}/README.md +0 -0
  9. {rupython-1.1.8 → rupython-1.1.9}/rupython/__/320/227/320/260/320/263/320/276/320/273/320/276/320/262/320/276/321/207/320/275/321/213/320/271_/320/272/320/276/320/264__.py" +0 -0
  10. {rupython-1.1.8 → rupython-1.1.9}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/234/320/260/321/202/320/265/320/274.py" +0 -0
  11. {rupython-1.1.8 → rupython-1.1.9}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/240/320/265/320/263/320/222/321/213/321/200.py" +0 -0
  12. {rupython-1.1.8 → rupython-1.1.9}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/241/320/273/321/203/321/207.py" +0 -0
  13. {rupython-1.1.8 → rupython-1.1.9}/rupython//320/237/321/200/320/265/320/276/320/261/321/200/320/260/320/267/320/276/320/262/320/260/321/202/320/265/320/273/321/214.py" +0 -0
  14. {rupython-1.1.8 → rupython-1.1.9}/rupython.egg-info/SOURCES.txt +0 -0
  15. {rupython-1.1.8 → rupython-1.1.9}/rupython.egg-info/dependency_links.txt +0 -0
  16. {rupython-1.1.8 → rupython-1.1.9}/rupython.egg-info/top_level.txt +0 -0
  17. {rupython-1.1.8 → rupython-1.1.9}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.1.8
3
+ Version: 1.1.9
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -0,0 +1,30 @@
1
+ from . import Преобразователь
2
+ import os as ОС
3
+ import sys as Система
4
+
5
+ Путь_к_файлу = ОС.path.realpath(Система.argv[1])
6
+ Название_файла = ОС.path.basename(Система.argv[1])
7
+
8
+ def Перехватчик_прерывания_клавиатурой(тип_исключения, значение, предыдущие_шаги):
9
+ if тип_исключения == KeyboardInterrupt: print('\nСработало прерывание клавиатурой.')
10
+ else: Система.__excepthook__(тип, значение, предыдущие_шаги)
11
+ Система.excepthook = Перехватчик_прерывания_клавиатурой
12
+
13
+ Исходник = Преобразователь.Преобразовать_код(Путь_к_файлу)
14
+ if Исходник: Преобразователь.Запустить_код(Название_файла, Исходник, Путь_к_файлу)
15
+
16
+ def Ожидать_нажатие_клавиши(сообщение):
17
+ if ОС.name == 'nt':
18
+ import msvcrt
19
+ print('\n' + сообщение)
20
+ msvcrt.getch()
21
+ else:
22
+ import tty
23
+ import termios
24
+ print('\n' + сообщение)
25
+ fd = Система.stdin.fileno()
26
+ old_settings = termios.tcgetattr(fd)
27
+ try: tty.setraw(fd); Система.stdin.read(1)
28
+ finally: termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
29
+
30
+ Ожидать_нажатие_клавиши('=== Исполнение кода завершено. Нажмите любую клавишу для выхода. ===')
@@ -1,9 +1,7 @@
1
1
  import sqlite3
2
+ import re as РегВыр
2
3
 
3
4
  Ошибка = sqlite3.Error
4
- ОшибкаБазыДанных = sqlite3.DatabaseError
5
- ОшибкаПрограммования = sqlite3.ProgrammingError
6
- ОшибкаОперации = sqlite3.OperationalError
7
5
 
8
6
  Разбор_объявленных_типов = sqlite3.PARSE_DECLTYPES
9
7
  Разбор_названий_столбцов = sqlite3.PARSE_COLNAMES
@@ -82,8 +80,8 @@ import sqlite3
82
80
 
83
81
  'ОПРЕДЕЛИВ': 'WITH',
84
82
  'ВЫБОР': 'CASE',
85
- 'ЕСЛИ': 'WHEN',
86
- 'ТО': 'THEN',
83
+ 'ПРИ': 'WHEN',
84
+ 'ЭТО': 'THEN',
87
85
  'КОНЕЦ': 'END',
88
86
  'РЕКУРСИВНО': 'RECURSIVE',
89
87
 
@@ -262,21 +260,76 @@ def Перевести_код_запроса(текст):
262
260
  запрос = Собрать_запрос(переведённые_токены)
263
261
  return запрос
264
262
 
263
+ Переводы_ошибок = {
264
+ r"no such table: (.+)": r'Таблица "\1" не существует.',
265
+ r"database is locked": r'База данных заблокована.',
266
+ r"near \"(.+)\": syntax error": r'Синтаксическая ошибка около "\1".',
267
+ r"table (.+) already exists": r'Таблица "\1" уже существует.',
268
+ r"no such column: (.+)": r'Столбец "\1" не существует.',
269
+ r"(.+) has no column named (.+)": r'Таблица "\1" не имеет столбца "\2".',
270
+ r"cannot open database file": r'Не удалось открыть файл базы данных.',
271
+ r"database or disk is full": r'База данных или диск переполнены.',
272
+ r"attempt to write a readonly database": r'Попытка записи в базу данных, доступную только для чтения.',
273
+ r"no such index: (.+)": r'Индекс "\1" не существует.',
274
+ r"too many SQL variables": r'Слишком много переменных в запросе.',
275
+ r"maximum recursion depth exceeded": r'Превышена максимальная глубина рекурсии в запросе.',
276
+ r"incomplete input": r'Неполный запрос.',
277
+ r"malformed database schema \((.+)\)": r'Некорректная схема базы данных: \1.',
278
+ r"file is not a database": r'Файл не является базой данных.',
279
+ r"database disk image is malformed": r'Образ диска базы данных повреждён.',
280
+ r"incorrect number of bindings supplied. The statement has (\d+) parameters, and (\d+) were supplied": r'Неверное количество переданных параметров. Ожидаемых запросом параметров - \1, передано - \2.',
281
+ r"You did not supply a value for binding (\d+)": r'Не указано значение для параметра \1.',
282
+ r"Cannot operate on a closed database": r'Невозможно выполнить операцию на закрытой базе данных.',
283
+ r"Cannot operate on a closed cursor": r'Невозможно выполнить операцию на закрытом указателе.',
284
+ r"column (.+) is not unique": r'Столбец "\1" должен быть уникальным.',
285
+ r"number of bound variables does not match number of parameters": r'Количество привязанных переменных не соответствует количеству параметров.',
286
+ r"only one statement is allowed": r'Разрешено выполнять только один запрос за раз.',
287
+ r"NOT NULL constraint failed: (.+)": r'Нарушение ограничения НЕ ПУСТО для столбца "\1".',
288
+ r"UNIQUE constraint failed: (.+)": r'Нарушение ограничения УНИКАЛЬНЫЙ для столбца "\1".',
289
+ r"FOREIGN KEY constraint failed": r'Нарушение ограничения ВНЕШНИЙ КЛЮЧ.',
290
+ r"CHECK constraint failed: (.+)": r'Нарушение ограничения ПРОВЕРЯТЬ: \1.',
291
+ r"PRIMARY KEY must be unique": r'Первичный ключ должен быть уникальным.',
292
+ r"Error binding parameter (\d+) - probably unsupported type": r'Ошибка привязки параметра \1 - вероятно, неподдерживаемый тип.',
293
+ r"Cursor needed to be reset because of commit/rollback and can no longer be fetched from": r'Указатель должен быть сброшен из-за утверждения или отката и больше не может быть использован.',
294
+ r"Warning: You can only execute one statement at a time": r'Можно выполнять только один запрос за раз.',
295
+ r"(.+) not supported by this database": r'Операция "\1" не поддерживается этой базой данных.',
296
+ r"too many connections": r'Слишком много активных подключений к базе данных.',
297
+ r"no such function: (.+)": r'Функция "\1" не существует.',
298
+ r"no such module: (.+)": r'Модуль "\1" не существует.',
299
+ r"parameters are of unsupported type": r'Параметры имеют неподдерживаемый тип.',
300
+ r"interrupted": r'Операция была прервана.',
301
+ r"out of memory": r'Недостаточно памяти для выполнения операции.'
302
+ }
303
+
304
+ def Перевести_ошибку(исключение):
305
+ сообщение = str(исключение)
306
+ for шаблон, перевод in Переводы_ошибок.items():
307
+ совпадение = РегВыр.match(шаблон, сообщение)
308
+ if совпадение:
309
+ return РегВыр.sub(шаблон, перевод, сообщение)
310
+ return f"Неизвестная ошибка: {сообщение}"
311
+
265
312
  class Указатель():
266
313
  def __init__(здесь, курсор):
267
314
  здесь._курсор = курсор
268
315
 
269
316
  def Выполнить_запрос(здесь, запрос, параметры=()):
270
- запрос = Перевести_код_запроса(запрос)
271
- здесь._курсор.execute(запрос, параметры)
317
+ try:
318
+ запрос = Перевести_код_запроса(запрос)
319
+ здесь._курсор.execute(запрос, параметры)
320
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
272
321
 
273
322
  def Выполнить_запросы(здесь, запрос, последовательность_параметров):
274
- запрос = Перевести_код_запроса(запрос)
275
- здесь._курсор.executemany(запрос, последовательность_параметров)
323
+ try:
324
+ запрос = Перевести_код_запроса(запрос)
325
+ здесь._курсор.executemany(запрос, последовательность_параметров)
326
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
276
327
 
277
328
  def Выполнить_сценарий(здесь, сценарий):
278
- скрипт = Перевести_код_запроса(сценарий)
279
- здесь._курсор.executescript(скрипт)
329
+ try:
330
+ скрипт = Перевести_код_запроса(сценарий)
331
+ здесь._курсор.executescript(скрипт)
332
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
280
333
 
281
334
  def Извлечь_запись(здесь):
282
335
  return здесь._курсор.fetchone()
@@ -313,48 +366,67 @@ class Соединение():
313
366
  elif уровень_изоляции == 'ИСКЛЮЧИТЕЛЬНО': уровень_изоляции = 'EXCLUSIVE'
314
367
  else: уровень_изоляции = None
315
368
 
316
- здесь._соединение = sqlite3.connect(
317
- путь,
318
- timeout=таймаут,
319
- detect_types=обнаружение_типов,
320
- isolation_level=уровень_изоляции,
321
- check_same_thread=проверять_тот_же_ли_поток,
322
- cached_statements=кэш_инструкций,
323
- uri=является_ссылкой
324
- )
369
+ try:
370
+ здесь._соединение = sqlite3.connect(
371
+ путь,
372
+ timeout=таймаут,
373
+ detect_types=обнаружение_типов,
374
+ isolation_level=уровень_изоляции,
375
+ check_same_thread=проверять_тот_же_ли_поток,
376
+ cached_statements=кэш_инструкций,
377
+ uri=является_ссылкой
378
+ )
379
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
325
380
 
326
381
  def Создать_указатель(здесь):
327
- курсор = здесь._соединение.cursor()
328
- return Указатель(курсор)
382
+ try:
383
+ курсор = здесь._соединение.cursor()
384
+ return Указатель(курсор)
385
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
329
386
 
330
387
  def Выполнить_запрос(здесь, запрос, параметры=()):
331
- запрос = Перевести_код_запроса(запрос)
332
- указатель = здесь._соединение.execute(запрос, параметры)
333
- return Указатель(указатель)
334
-
335
- def Выполнить_запросы(здесь, запрос, последовательность_параметров):
336
- запрос = Перевести_код_запроса(запрос)
337
- указатель = здесь._соединение.executemany(запрос, последовательность_параметров)
338
- return Указатель(указатель)
388
+ try:
389
+ запрос = Перевести_код_запроса(запрос)
390
+ указатель = здесь._соединение.execute(запрос, параметры)
391
+ return Указатель(указатель)
392
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
393
+
394
+ def Выполнить_запросы(здесь, запрос, параметры):
395
+ try:
396
+ запрос = Перевести_код_запроса(запрос)
397
+ указатель = здесь._соединение.executemany(запрос, параметры)
398
+ return Указатель(указатель)
399
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
339
400
 
340
401
  def Выполнить_сценарий(здесь, сценарий):
341
- скрипт = Перевести_код_запроса(сценарий)
342
- здесь._соединение.executescript(скрипт)
402
+ try:
403
+ скрипт = Перевести_код_запроса(сценарий)
404
+ здесь._соединение.executescript(скрипт)
405
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
343
406
 
344
407
  def Создать_функцию(здесь, имя, количество_параметров, функция):
345
- здесь._соединение.create_function(имя, количество_параметров, функция)
408
+ try: здесь._соединение.create_function(имя, количество_параметров, функция)
409
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
346
410
 
347
- def Создать_агрегатную_функцию(здесь, имя, количество_параметров, класс_агрегатной_функции):
348
- здесь._соединение.create_aggregate(имя, количество_параметров, класс_агрегатной_функции)
411
+ def Создать_агрегатную_функцию(здесь, имя, число_аргументов, класс):
412
+ try: здесь._соединение.create_aggregate(имя, число_аргументов)
413
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
349
414
 
350
415
  def Создать_сопоставление(здесь, имя, функция):
351
- здесь._соединение.create_collation(имя, функция)
416
+ try: здесь._соединение.create_collation(имя, функция)
417
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
352
418
 
353
- def Закрыть(здесь): здесь._соединение.close()
419
+ def Закрыть(здесь):
420
+ try: здесь._соединение.close()
421
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
354
422
 
355
- def Утвердить(здесь): здесь._соединение.commit()
423
+ def Утвердить(здесь):
424
+ try: здесь._соединение.commit()
425
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
356
426
 
357
- def Откатить(здесь): здесь._соединение.rollback()
427
+ def Откатить(здесь):
428
+ try: здесь._соединение.rollback()
429
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
358
430
 
359
431
  @property
360
432
  def В_транзакции(здесь): return здесь._соединение.in_transaction
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.1.8
3
+ Version: 1.1.9
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -3,7 +3,7 @@ from pathlib import Path as Путь
3
3
 
4
4
  Установить(
5
5
  name = 'rupython',
6
- version = '1.1.8',
6
+ version = '1.1.9',
7
7
  description = "Исполнитель кода Русского Питона",
8
8
  packages = [ 'rupython', 'rupython.Модули' ],
9
9
  long_description = (Путь(__file__).parent / "README.md").read_text("UTF-8"),
@@ -1,12 +0,0 @@
1
- from . import Преобразователь
2
- import os as ОС
3
- import sys as Система
4
-
5
- Путь_к_файлу = ОС.path.realpath(Система.argv[1])
6
- Название_файла = ОС.path.basename(Система.argv[1])
7
- Исходник = None
8
- Исходник = Преобразователь.Преобразовать_код(Путь_к_файлу)
9
- if Исходник:
10
- Преобразователь.Запустить_код(Название_файла, Исходник, Путь_к_файлу)
11
-
12
- input()
File without changes
File without changes
File without changes