rupython 1.3.1__py3-none-any.whl → 1.3.2__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/__main__.py +1 -0
- 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 +19 -16
- {rupython-1.3.1.dist-info → rupython-1.3.2.dist-info}/METADATA +3 -3
- {rupython-1.3.1.dist-info → rupython-1.3.2.dist-info}/RECORD +7 -7
- {rupython-1.3.1.dist-info → rupython-1.3.2.dist-info}/LICENSE +0 -0
- {rupython-1.3.1.dist-info → rupython-1.3.2.dist-info}/WHEEL +0 -0
- {rupython-1.3.1.dist-info → rupython-1.3.2.dist-info}/top_level.txt +0 -0
rupython/__main__.py
CHANGED
@@ -9,6 +9,7 @@ import sys as Система
|
|
9
9
|
def Перехватчик_прерывания_клавиатурой(тип_исключения, значение, предыдущие_шаги):
|
10
10
|
if тип_исключения == KeyboardInterrupt: print('\nСработало прерывание клавиатурой.')
|
11
11
|
else: Система.__excepthook__(тип_исключения, значение, предыдущие_шаги)
|
12
|
+
Преобразователь.Очистить_файлы()
|
12
13
|
Система.excepthook = Перехватчик_прерывания_клавиатурой
|
13
14
|
|
14
15
|
Исходник = Преобразователь.Преобразовать_код(Путь_к_файлу)
|
@@ -70,10 +70,10 @@ from io import StringIO as Текстовый_ВВ
|
|
70
70
|
'Двоич': ( 'bin', None, False ),
|
71
71
|
'ДелОст': ( 'divmod', None, False ),
|
72
72
|
'Длина': ( 'len', None, False ), # Размер
|
73
|
-
'
|
73
|
+
'Код_символа': ( 'ord', None, False ), # Знак_в_код
|
74
74
|
'Идент': ( 'id', None, False ),
|
75
75
|
'Имеет_поле': ( 'hasattr', None, False ),
|
76
|
-
'
|
76
|
+
'Символ_по_коду': ( 'chr', None, False ), # Код_в_знак
|
77
77
|
'Компл': ( 'complex', { 'действ_часть': 'real', 'мнимая_часть': 'imag' }, True ),
|
78
78
|
'Кортеж': ( 'tuple', None, True ),
|
79
79
|
'Логич': ( 'bool', None, False ),
|
@@ -323,13 +323,13 @@ from io import StringIO as Текстовый_ВВ
|
|
323
323
|
|
324
324
|
def Прочитать_слова(чтение_строки, путь_к_файлу):
|
325
325
|
try:
|
326
|
-
for тип, название, _,_, строка in Разборщик_слов.generate_tokens(чтение_строки):
|
326
|
+
for тип, название, _, _, строка in Разборщик_слов.generate_tokens(чтение_строки):
|
327
327
|
if тип == 5: название = название.replace(' ' * 4, '\t')
|
328
328
|
отступов = 0; сч = 0
|
329
329
|
while (сч < len(строка) and строка[сч] == '\t'): отступов += 1; сч += 1
|
330
330
|
yield тип, название, отступов
|
331
331
|
except Exception as ошибка:
|
332
|
-
Вывести_текст_исключения(ошибка, 'при чтении кода', путь_к_
|
332
|
+
Вывести_текст_исключения(ошибка, 'при чтении кода', путь_к_файлу, True, False)
|
333
333
|
|
334
334
|
def Выполнить_основные_замены(слова, соответствия):
|
335
335
|
for номер, слово in enumerate(слова):
|
@@ -395,7 +395,7 @@ def Обработать_f_строки(слова, путь_к_файлу):
|
|
395
395
|
поз += 1
|
396
396
|
if уровень_скобок != 0:
|
397
397
|
искл = SyntaxError('Незакрытое выражение в f-строке')
|
398
|
-
Вывести_текст_исключения(искл, 'при разборе f-строки', путь_к_
|
398
|
+
Вывести_текст_исключения(искл, 'при разборе f-строки', путь_к_файлу, True, False)
|
399
399
|
выражение = содержимое[нач_поз:поз-1]
|
400
400
|
try:
|
401
401
|
токены_выражения = list(Разборщик_слов.generate_tokens(Текстовый_ВВ(выражение).readline))
|
@@ -407,7 +407,7 @@ def Обработать_f_строки(слова, путь_к_файлу):
|
|
407
407
|
выражение_текст = Разборщик_слов.untokenize((ток[0], ток[1]) for ток in токены_выражения if ток[0] not in (4, 5, 6)).strip()
|
408
408
|
новые_токены.append((3, '{' + выражение_текст + '}', отступов))
|
409
409
|
except Exception as ошибка:
|
410
|
-
Вывести_текст_исключения(ошибка, 'при разборе выражения в f-строке', путь_к_
|
410
|
+
Вывести_текст_исключения(ошибка, 'при разборе выражения в f-строке', путь_к_файлу, True, False)
|
411
411
|
else:
|
412
412
|
нач_поз = поз
|
413
413
|
while поз < len(содержимое) and содержимое[поз] not in ['{', '}']:
|
@@ -484,7 +484,7 @@ def Обработать_импорт(импорт, путь_к_текущему
|
|
484
484
|
файл = open((путь if not доп_путь else доп_путь) + '.py', mode='w', encoding='utf-8')
|
485
485
|
if not файл:
|
486
486
|
искл = FileNotFoundError('Невозможно открыть файл "' + файл + '".')
|
487
|
-
Вывести_текст_исключения(искл, 'при чтении кода', путь_к_
|
487
|
+
Вывести_текст_исключения(искл, 'при чтении кода', путь_к_файлу, True, False)
|
488
488
|
файл.write(код)
|
489
489
|
файл.close()
|
490
490
|
Временные_файлы.append(путь if not доп_путь else доп_путь)
|
@@ -502,7 +502,7 @@ def Обработать_импорт(импорт, путь_к_текущему
|
|
502
502
|
def Проверить_соответствие_слов(слова, путь_к_файлу):
|
503
503
|
def Вывести_исключение(инструкция):
|
504
504
|
искл = SyntaxError('Ошибка употребления инструкции "' + инструкция + '".')
|
505
|
-
Вывести_текст_исключения(искл, 'при разборе кода', путь_к_
|
505
|
+
Вывести_текст_исключения(искл, 'при разборе кода', путь_к_файлу, True, False)
|
506
506
|
|
507
507
|
for сл in ('Подключить', 'Если', 'Иначе'):
|
508
508
|
for поз in [i for i, x in enumerate(слова) if x[1] == сл]:
|
@@ -530,7 +530,7 @@ def Преобразовать_код(путь_к_файлу):
|
|
530
530
|
файл = open(путь_к_файлу, 'r', encoding='utf-8')
|
531
531
|
except:
|
532
532
|
искл = FileNotFoundError('Невозможно открыть файл "' + путь_к_файлу + '".')
|
533
|
-
Вывести_текст_исключения(искл, 'при чтении кода', путь_к_файлу, False)
|
533
|
+
Вывести_текст_исключения(искл, 'при чтении кода', путь_к_файлу, False, False)
|
534
534
|
|
535
535
|
слова = list(Прочитать_слова(файл.readline, путь_к_файлу))
|
536
536
|
if not Проверить_соответствие_слов(слова, путь_к_файлу): return
|
@@ -671,7 +671,7 @@ def Преобразовать_код(путь_к_файлу):
|
|
671
671
|
try:
|
672
672
|
исходник = Разборщик_слов.untokenize(map(lambda с: (с[0], с[1]), слова))
|
673
673
|
except Exception as ошибка:
|
674
|
-
Вывести_текст_исключения(ошибка, 'при чтении кода', путь_к_
|
674
|
+
Вывести_текст_исключения(ошибка, 'при чтении кода', путь_к_файлу, True, False)
|
675
675
|
|
676
676
|
if исходник:
|
677
677
|
исходник = 'import ' + __name__.split('.')[0] + '.__Заголовочный_код__\n\n' + исходник
|
@@ -737,7 +737,10 @@ def Посчитать_физические_строки(путь_к_файлу,
|
|
737
737
|
r"AssertionError": r'Ошибка проверки: условие не выполнено.',
|
738
738
|
r"attempted relative import with no known parent package": r'Попытка относительного импорта без известного родительского пакета.',
|
739
739
|
r"pop from empty list": r'Извлечение из пустого списка.',
|
740
|
-
r"No module named '(.+)'": r'Модуль под названием "\1" не найден.'
|
740
|
+
r"No module named '(.+)'": r'Модуль под названием "\1" не найден.',
|
741
|
+
r"unindent does not match any outer indentation level": r'Отступ не соответствует никакому окружающему уровню.',
|
742
|
+
r"int too big to convert": r'Число слишком большое для преобразования.',
|
743
|
+
r"unexpected indent": r'Неожиданный отступ.'
|
741
744
|
}
|
742
745
|
|
743
746
|
def Очистить_файлы():
|
@@ -746,7 +749,7 @@ def Очистить_файлы():
|
|
746
749
|
кэш = ОС.path.join(ОС.path.dirname(файл), '__pycache__')
|
747
750
|
if ОС.path.exists(кэш): Операции_оболочки.rmtree(кэш)
|
748
751
|
|
749
|
-
def Вывести_текст_исключения(исключение, заголовок, путь_к_файлу, с_заголовком = True):
|
752
|
+
def Вывести_текст_исключения(исключение, заголовок, путь_к_файлу, с_заголовком = True, добавлен_импорт = False):
|
750
753
|
назв_исп_ф = путь_к_файлу.split('\\' if Система.platform.startswith('win32') else '/')[-1]
|
751
754
|
сч = 1
|
752
755
|
while True:
|
@@ -760,9 +763,9 @@ def Вывести_текст_исключения(исключение, заг
|
|
760
763
|
if искл.filename == назв_исп_ф: break
|
761
764
|
сч += 1
|
762
765
|
if сч != -1 and искл.filename == назв_исп_ф:
|
763
|
-
номер_строки = искл.lineno - 2
|
766
|
+
номер_строки = искл.lineno - (2 if добавлен_импорт else 0)
|
764
767
|
else:
|
765
|
-
try: номер_строки = исключение.lineno - 2
|
768
|
+
try: номер_строки = исключение.lineno - (2 if добавлен_импорт else 0)
|
766
769
|
except: номер_строки = 0
|
767
770
|
|
768
771
|
if номер_строки > 0:
|
@@ -793,9 +796,9 @@ def Запустить_код(название, исходник, путь_к_ф
|
|
793
796
|
код = None
|
794
797
|
try: код = compile(исходник, название, 'exec')
|
795
798
|
except Exception as исключение:
|
796
|
-
Вывести_текст_исключения(исключение, 'при разборе кода', путь_к_
|
799
|
+
Вывести_текст_исключения(исключение, 'при разборе кода', путь_к_файлу, True, True)
|
797
800
|
if код:
|
798
801
|
try: Запуск_кода._run_module_code(код, mod_name="__Главный__", script_name=путь_к_файлу)
|
799
802
|
except Exception as исключение:
|
800
|
-
Вывести_текст_исключения(исключение, 'при выполнении кода', путь_к_
|
803
|
+
Вывести_текст_исключения(исключение, 'при выполнении кода', путь_к_файлу, True, True)
|
801
804
|
Очистить_файлы()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: rupython
|
3
|
-
Version: 1.3.
|
3
|
+
Version: 1.3.2
|
4
4
|
Summary: Исполнитель кода Русского Питона
|
5
5
|
Author: Сообщество русских программистов
|
6
6
|
License: ОДРН
|
@@ -295,7 +295,7 @@ x = 0
|
|
295
295
|
###### `Вызываемое(объект)`
|
296
296
|
Проверяет, можно ли объект вызвать как функцию.
|
297
297
|
|
298
|
-
######
|
298
|
+
###### `Символ_по_коду(i)`
|
299
299
|
Возвращает многобайтовый символ по его числовому коду.
|
300
300
|
|
301
301
|
###### `@Метод_класса`
|
@@ -409,7 +409,7 @@ x = 0
|
|
409
409
|
###### `Открыть(название, режим = 'r', буферизация = -1, кодование = Пусто, при_ошибках = Пусто, новая_строка = Пусто, закрыть_описатель = Да, открыватель = Пусто)`
|
410
410
|
Открывает файл и возвращает файловый объект.
|
411
411
|
|
412
|
-
######
|
412
|
+
###### `Код_символа(c)`
|
413
413
|
Возвращает многобайтовый код символа `c`.
|
414
414
|
|
415
415
|
###### `Степень(основание, показатель, модуль = Пусто)`
|
@@ -1,7 +1,7 @@
|
|
1
|
-
rupython/__main__.py,sha256=
|
1
|
+
rupython/__main__.py,sha256=sb4hTmi5_MtnNDEpm43DAgklVPWT4ddm4yQtattUdeE,1322
|
2
2
|
rupython/__Заголовочный_код__.py,sha256=yTxMJ93pxJeg_h-BnrTMoAqSB_a0tliYX6gkXtTyWx8,13594
|
3
3
|
rupython/__Общие_функции__.py,sha256=MH9QLcXqeFmpOS5_N8P5wA5eCYutlHRc7YUatn3CUIk,1255
|
4
|
-
rupython/Преобразователь.py,sha256=
|
4
|
+
rupython/Преобразователь.py,sha256=dxVD7cqs_zQAm6RMIv8hM5ImouaY7T7lCsnFSbEhUBM,50995
|
5
5
|
rupython/Модули/Асинхр.py,sha256=sPQUgbS_kXj-Gyn2YCjXNCUqAy8aUW2-P6gO5e7f6Cc,9925
|
6
6
|
rupython/Модули/БД.py,sha256=GQSKiv3fRF9Bsw4S7jXw4KR1Ibqvk8TwQbEe1JjvsGA,38392
|
7
7
|
rupython/Модули/ДатаВремя.py,sha256=Ec9YyY1jb-R9uyXrrDNfaTqBQVv98_GPn29OY8dUkj8,27523
|
@@ -14,8 +14,8 @@ rupython/Модули/Потоки.py,sha256=am6hWxcrCx4Vx_FFPMIIhSl_ShWSV5vjW5d
|
|
14
14
|
rupython/Модули/РегВыр.py,sha256=OWgYtgBDtHsEHUOAsGx7K0UGq92sumSqEyf-sVpICjw,6709
|
15
15
|
rupython/Модули/Случ.py,sha256=foIuQo2QZ5z0iyxp9fn4NaunSx96vYzC2pRjwaT2FD8,2723
|
16
16
|
rupython/Модули/Файлы.py,sha256=AekdYf2jmPhRW_9BngbQDzgTfsMr4zPpKzuwp6fRfzQ,6895
|
17
|
-
rupython-1.3.
|
18
|
-
rupython-1.3.
|
19
|
-
rupython-1.3.
|
20
|
-
rupython-1.3.
|
21
|
-
rupython-1.3.
|
17
|
+
rupython-1.3.2.dist-info/LICENSE,sha256=qqVMvbdzR5e4XIV6qwYVgI5Ovki8wR0qZaKB2Oj9DXw,25656
|
18
|
+
rupython-1.3.2.dist-info/METADATA,sha256=UsXvGM99Hn_il6wjJVCi4DN-qTyKcC5pqlvh64s3CO4,30456
|
19
|
+
rupython-1.3.2.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
20
|
+
rupython-1.3.2.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
|
21
|
+
rupython-1.3.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|