rupython 1.1.7__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.7 → rupython-1.1.9}/PKG-INFO +1 -1
  2. rupython-1.1.9/rupython/__main__.py +30 -0
  3. {rupython-1.1.7 → rupython-1.1.9}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/221/320/224.py +118 -38
  4. {rupython-1.1.7 → rupython-1.1.9}/rupython.egg-info/PKG-INFO +1 -1
  5. {rupython-1.1.7 → rupython-1.1.9}/setup.py +1 -1
  6. rupython-1.1.7/rupython/__main__.py +0 -12
  7. {rupython-1.1.7 → rupython-1.1.9}/LICENSE +0 -0
  8. {rupython-1.1.7 → rupython-1.1.9}/README.md +0 -0
  9. {rupython-1.1.7 → 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.7 → 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.7 → 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.7 → 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.7 → 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.7 → rupython-1.1.9}/rupython.egg-info/SOURCES.txt +0 -0
  15. {rupython-1.1.7 → rupython-1.1.9}/rupython.egg-info/dependency_links.txt +0 -0
  16. {rupython-1.1.7 → rupython-1.1.9}/rupython.egg-info/top_level.txt +0 -0
  17. {rupython-1.1.7 → 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.7
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
@@ -16,7 +14,7 @@ import sqlite3
16
14
 
17
15
  Словарь_перевода = {
18
16
  'НАЧАТЬ': 'BEGIN',
19
- 'ЗАКОНЧИТЬ': 'END',
17
+ 'ЗАВЕШИТЬ': 'END',
20
18
  'ТРАНЗАКЦИЮ': 'TRANSACTION',
21
19
  'ОТЛОЖЕННО': 'DEFERRED',
22
20
  'НЕМЕДЛЕННО': 'IMMEDIATE',
@@ -80,6 +78,13 @@ import sqlite3
80
78
  'ЕСЛИ': 'IF',
81
79
  'СУЩЕСТВУЕТ': 'EXISTS',
82
80
 
81
+ 'ОПРЕДЕЛИВ': 'WITH',
82
+ 'ВЫБОР': 'CASE',
83
+ 'ПРИ': 'WHEN',
84
+ 'ЭТО': 'THEN',
85
+ 'КОНЕЦ': 'END',
86
+ 'РЕКУРСИВНО': 'RECURSIVE',
87
+
83
88
  'ЦЕЛОЕ': 'INTEGER',
84
89
  'ВЕЩЕСТВЕННОЕ': 'REAL',
85
90
  'ТЕКСТ': 'TEXT',
@@ -98,6 +103,7 @@ import sqlite3
98
103
  'НЕТ': 'FALSE',
99
104
  'ПО_УМОЛЧАНИЮ': 'DEFAULT',
100
105
  'САМОУВЕЛИЧИВАЮЩЕЕСЯ': 'AUTO_INCREMENT',
106
+ 'ССЫЛАЕТСЯ НА': 'REFERENCES',
101
107
 
102
108
  'КОЛИЧЕСТВО': 'COUNT',
103
109
  'СУММА': 'SUM',
@@ -254,21 +260,76 @@ def Перевести_код_запроса(текст):
254
260
  запрос = Собрать_запрос(переведённые_токены)
255
261
  return запрос
256
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
+
257
312
  class Указатель():
258
313
  def __init__(здесь, курсор):
259
314
  здесь._курсор = курсор
260
315
 
261
316
  def Выполнить_запрос(здесь, запрос, параметры=()):
262
- запрос = Перевести_код_запроса(запрос)
263
- здесь._курсор.execute(запрос, параметры)
317
+ try:
318
+ запрос = Перевести_код_запроса(запрос)
319
+ здесь._курсор.execute(запрос, параметры)
320
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
264
321
 
265
322
  def Выполнить_запросы(здесь, запрос, последовательность_параметров):
266
- запрос = Перевести_код_запроса(запрос)
267
- здесь._курсор.executemany(запрос, последовательность_параметров)
323
+ try:
324
+ запрос = Перевести_код_запроса(запрос)
325
+ здесь._курсор.executemany(запрос, последовательность_параметров)
326
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
268
327
 
269
328
  def Выполнить_сценарий(здесь, сценарий):
270
- скрипт = Перевести_код_запроса(сценарий)
271
- здесь._курсор.executescript(скрипт)
329
+ try:
330
+ скрипт = Перевести_код_запроса(сценарий)
331
+ здесь._курсор.executescript(скрипт)
332
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
272
333
 
273
334
  def Извлечь_запись(здесь):
274
335
  return здесь._курсор.fetchone()
@@ -305,48 +366,67 @@ class Соединение():
305
366
  elif уровень_изоляции == 'ИСКЛЮЧИТЕЛЬНО': уровень_изоляции = 'EXCLUSIVE'
306
367
  else: уровень_изоляции = None
307
368
 
308
- здесь._соединение = sqlite3.connect(
309
- путь,
310
- timeout=таймаут,
311
- detect_types=обнаружение_типов,
312
- isolation_level=уровень_изоляции,
313
- check_same_thread=проверять_тот_же_ли_поток,
314
- cached_statements=кэш_инструкций,
315
- uri=является_ссылкой
316
- )
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 ош
317
380
 
318
381
  def Создать_указатель(здесь):
319
- курсор = здесь._соединение.cursor()
320
- return Указатель(курсор)
382
+ try:
383
+ курсор = здесь._соединение.cursor()
384
+ return Указатель(курсор)
385
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
321
386
 
322
387
  def Выполнить_запрос(здесь, запрос, параметры=()):
323
- запрос = Перевести_код_запроса(запрос)
324
- указатель = здесь._соединение.execute(запрос, параметры)
325
- return Указатель(указатель)
326
-
327
- def Выполнить_запросы(здесь, запрос, последовательность_параметров):
328
- запрос = Перевести_код_запроса(запрос)
329
- указатель = здесь._соединение.executemany(запрос, последовательность_параметров)
330
- 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 ош
331
400
 
332
401
  def Выполнить_сценарий(здесь, сценарий):
333
- скрипт = Перевести_код_запроса(сценарий)
334
- здесь._соединение.executescript(скрипт)
402
+ try:
403
+ скрипт = Перевести_код_запроса(сценарий)
404
+ здесь._соединение.executescript(скрипт)
405
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
335
406
 
336
407
  def Создать_функцию(здесь, имя, количество_параметров, функция):
337
- здесь._соединение.create_function(имя, количество_параметров, функция)
408
+ try: здесь._соединение.create_function(имя, количество_параметров, функция)
409
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
338
410
 
339
- def Создать_агрегатную_функцию(здесь, имя, количество_параметров, класс_агрегатной_функции):
340
- здесь._соединение.create_aggregate(имя, количество_параметров, класс_агрегатной_функции)
411
+ def Создать_агрегатную_функцию(здесь, имя, число_аргументов, класс):
412
+ try: здесь._соединение.create_aggregate(имя, число_аргументов)
413
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
341
414
 
342
415
  def Создать_сопоставление(здесь, имя, функция):
343
- здесь._соединение.create_collation(имя, функция)
416
+ try: здесь._соединение.create_collation(имя, функция)
417
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
344
418
 
345
- def Закрыть(здесь): здесь._соединение.close()
419
+ def Закрыть(здесь):
420
+ try: здесь._соединение.close()
421
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
346
422
 
347
- def Утвердить(здесь): здесь._соединение.commit()
423
+ def Утвердить(здесь):
424
+ try: здесь._соединение.commit()
425
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
348
426
 
349
- def Откатить(здесь): здесь._соединение.rollback()
427
+ def Откатить(здесь):
428
+ try: здесь._соединение.rollback()
429
+ except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
350
430
 
351
431
  @property
352
432
  def В_транзакции(здесь): return здесь._соединение.in_transaction
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.1.7
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.7',
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