rupython 1.2.17__py3-none-any.whl → 1.3.1__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.
@@ -3,8 +3,8 @@ import runpy as Запуск_кода
3
3
  import traceback as Разборщик_исключений
4
4
  import os as ОС
5
5
  import sys as Система
6
- import importlib as Импортование
7
6
  import re as РегВыр
7
+ import shutil as Операции_оболочки
8
8
  from io import StringIO as Текстовый_ВВ
9
9
 
10
10
  Служебные_слова = {
@@ -48,7 +48,9 @@ from io import StringIO as Текстовый_ВВ
48
48
  'Используя': 'with',
49
49
  'Удалить': 'del',
50
50
  'Выбрать': 'match',
51
- 'При': 'case'
51
+ 'При': 'case',
52
+ 'Асинхр': 'async',
53
+ 'Ожидать': 'await'
52
54
  }
53
55
 
54
56
  Встроенные_функции = {
@@ -287,7 +289,7 @@ from io import StringIO as Текстовый_ВВ
287
289
  'ОшибкаСоединениеОтменено': 'ConnectionAbortedError',
288
290
  'ОшибкаСоединениеОтклонено': 'ConnectionRefusedError',
289
291
  'ОшибкаСоединениеСброшено': 'ConnectionResetError',
290
- 'ОшибкаФайлСуществует': 'FileExistsError',
292
+ 'ОшибкаФайлУжеСуществует': 'FileExistsError',
291
293
  'ОшибкаФайлНеНайден': 'FileNotFoundError',
292
294
  'ОшибкаПрервано': 'InterruptedError',
293
295
  'ОшибкаПапкаВместоФайла': 'IsADirectoryError',
@@ -331,7 +333,7 @@ def Прочитать_слова(чтение_строки, путь_к_фай
331
333
 
332
334
  def Выполнить_основные_замены(слова, соответствия):
333
335
  for номер, слово in enumerate(слова):
334
- if (номер == 0 or слова[номер - 1][1] != '.') and \
336
+ if (номер == 0 or (слова[номер - 1][1] != '.' or (номер > 1 and слова[номер - 2][1] in ('.', 'from')))) and \
335
337
  слово[0] == 1 and слово[1] in соответствия:
336
338
  слова[номер] = (1, соответствия[слово[1]], слово[2])
337
339
 
@@ -466,7 +468,7 @@ def Обработать_импорт(импорт, путь_к_текущему
466
468
  источник = импорт['источник'] if импорт['источник'] else ''
467
469
  подъёмов = 0
468
470
  if len(источник) > 0:
469
- while источник[подъёмов] == '.': подъёмов += 1
471
+ while подъёмов < len(источник) and источник[подъёмов] == '.': подъёмов += 1
470
472
  источник = источник[подъёмов:]
471
473
  if подъёмов == 1: подъёмов = 0
472
474
  разделитель = '\\' if Система.platform.startswith('win32') else '/'
@@ -475,16 +477,27 @@ def Обработать_импорт(импорт, путь_к_текущему
475
477
  путь = разделитель.join(путь) + \
476
478
  (разделитель + источник.replace('.', разделитель) if len(источник) > 0 else '') + \
477
479
  разделитель + название
478
- if ОС.path.isfile(путь + '.крп') and not ОС.path.isfile(путь + '.py'):
480
+
481
+ def Преобразовать_скрипт(путь, доп_путь = None):
479
482
  if путь not in Временные_файлы:
480
483
  код = Преобразовать_код(путь + '.крп')
481
- файл = open(путь + '.py', mode='w', encoding='utf-8')
482
- if (not файл):
483
- искл = SyntaxError('Невозможно открыть файл "' + файл + '".')
484
+ файл = open((путь if not доп_путь else доп_путь) + '.py', mode='w', encoding='utf-8')
485
+ if not файл:
486
+ искл = FileNotFoundError('Невозможно открыть файл "' + файл + '".')
484
487
  Вывести_текст_исключения(искл, 'при чтении кода', путь_к_файлу)
485
488
  файл.write(код)
486
489
  файл.close()
487
- Временные_файлы.append(путь)
490
+ Временные_файлы.append(путь if not доп_путь else доп_путь)
491
+
492
+ if ОС.path.isfile(путь + '.крп') and not ОС.path.isfile(путь + '.py'):
493
+ Преобразовать_скрипт(путь)
494
+ elif ОС.path.exists(путь):
495
+ for скрипт_пакета in [('__Основа__', '__init__'), ('__Запуск__', '__main__')]:
496
+ if ОС.path.isfile(путь + разделитель + скрипт_пакета[0] + '.крп'):
497
+ Преобразовать_скрипт(
498
+ путь + разделитель + скрипт_пакета[0],
499
+ путь + разделитель + скрипт_пакета[1]
500
+ )
488
501
 
489
502
  def Проверить_соответствие_слов(слова, путь_к_файлу):
490
503
  def Вывести_исключение(инструкция):
@@ -513,10 +526,12 @@ def Проверить_соответствие_слов(слова, путь_к
513
526
  Циклы_со_счётчиком = []
514
527
 
515
528
  def Преобразовать_код(путь_к_файлу):
516
- файл = open(путь_к_файлу, 'r', encoding='utf-8')
517
- if (not файл):
518
- искл = SyntaxError('Невозможно открыть файл "' + файл + '".')
519
- Вывести_текст_исключения(искл, 'при чтении кода', путь_к_файлу)
529
+ try:
530
+ файл = open(путь_к_файлу, 'r', encoding='utf-8')
531
+ except:
532
+ искл = FileNotFoundError('Невозможно открыть файл "' + путь_к_файлу + '".')
533
+ Вывести_текст_исключения(искл, 'при чтении кода', путь_к_файлу, False)
534
+
520
535
  слова = list(Прочитать_слова(файл.readline, путь_к_файлу))
521
536
  if not Проверить_соответствие_слов(слова, путь_к_файлу): return
522
537
 
@@ -718,11 +733,20 @@ def Посчитать_физические_строки(путь_к_файлу,
718
733
  r"TypeError: cannot unpack non-iterable (\w+) object": r'Невозможно распаковать неитерируемый объект типа "\1".',
719
734
  r"MemoryError": r'Недостаточно памяти для выполнения операции.',
720
735
  r"OverflowError: (.+)": r'Переполнение: \1.',
721
- r"no binding for nonlocal '(.+)' found": 'Не найдена привязка для нелокальной сущности "\1".',
722
- r"AssertionError": r'Ошибка проверки: условие не выполнено.'
736
+ r"no binding for nonlocal '(.+)' found": r'Не найдена привязка для нелокальной сущности "\1".',
737
+ r"AssertionError": r'Ошибка проверки: условие не выполнено.',
738
+ r"attempted relative import with no known parent package": r'Попытка относительного импорта без известного родительского пакета.',
739
+ r"pop from empty list": r'Извлечение из пустого списка.',
740
+ r"No module named '(.+)'": r'Модуль под названием "\1" не найден.'
723
741
  }
724
742
 
725
- def Вывести_текст_исключения(исключение, заголовок, путь_к_файлу):
743
+ def Очистить_файлы():
744
+ for файл in Временные_файлы:
745
+ ОС.remove(файл + '.py')
746
+ кэш = ОС.path.join(ОС.path.dirname(файл), '__pycache__')
747
+ if ОС.path.exists(кэш): Операции_оболочки.rmtree(кэш)
748
+
749
+ def Вывести_текст_исключения(исключение, заголовок, путь_к_файлу, с_заголовком = True):
726
750
  назв_исп_ф = путь_к_файлу.split('\\' if Система.platform.startswith('win32') else '/')[-1]
727
751
  сч = 1
728
752
  while True:
@@ -744,19 +768,14 @@ def Вывести_текст_исключения(исключение, заг
744
768
  if номер_строки > 0:
745
769
  номер_строки = Посчитать_физические_строки(путь_к_файлу, номер_строки)
746
770
 
747
- выч_стр = 0
748
- for ц in Циклы_со_счётчиком:
749
- if номер_строки > ц[1] + 1: выч_стр += 2;
750
- elif номер_строки > ц[0]: выч_стр += 1; break
751
- else: break
752
- номер_строки -= выч_стр
753
771
  название_исключения = type(исключение).__name__
754
772
  if название_исключения in Исключения.values():
755
773
  название_исключения = next(к for к, з in Исключения.items() if з == название_исключения)
756
- print('\n(!) Исключение "' + название_исключения + '" ' + заголовок)
757
- print(' в файле "' + путь_к_файлу + '"' + ('.\n' if номер_строки == 0 else ''))
758
- if номер_строки > 0:
759
- print(' на строке № ' + str(номер_строки) + '.\n');
774
+ if с_заголовком:
775
+ print('\n(!) Исключение "' + название_исключения + '" ' + заголовок)
776
+ print(' в файле "' + путь_к_файлу + '"' + ('.\n' if номер_строки == 0 else ''))
777
+ if номер_строки > 0:
778
+ print(' на строке № ' + str(номер_строки) + '.\n');
760
779
  try: текст_исключения = исключение.msg
761
780
  except AttributeError: текст_исключения = str(исключение)
762
781
 
@@ -764,8 +783,9 @@ def Вывести_текст_исключения(исключение, заг
764
783
  if РегВыр.match(шаблон, текст_исключения):
765
784
  текст_исключения = РегВыр.sub(шаблон, перевод, текст_исключения)
766
785
  break
767
- print(' ' + str(текст_исключения))
786
+ print((' ' if с_заголовком else '') + str(текст_исключения))
768
787
 
788
+ Очистить_файлы()
769
789
  input()
770
790
  Система.exit()
771
791
 
@@ -778,5 +798,4 @@ def Запустить_код(название, исходник, путь_к_ф
778
798
  try: Запуск_кода._run_module_code(код, mod_name="__Главный__", script_name=путь_к_файлу)
779
799
  except Exception as исключение:
780
800
  Вывести_текст_исключения(исключение, 'при выполнении кода', путь_к_файлу)
781
- for файл in Временные_файлы:
782
- ОС.remove(файл + '.py')
801
+ Очистить_файлы()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.2.17
3
+ Version: 1.3.1
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Author: Сообщество русских программистов
6
6
  License: ОДРН
@@ -1,7 +1,7 @@
1
1
  rupython/__main__.py,sha256=wfmjyJhg6iQN1_9Hl6tIu6mKHO95xP2ibVcDdIIEXjE,1256
2
2
  rupython/__Заголовочный_код__.py,sha256=yTxMJ93pxJeg_h-BnrTMoAqSB_a0tliYX6gkXtTyWx8,13594
3
3
  rupython/__Общие_функции__.py,sha256=MH9QLcXqeFmpOS5_N8P5wA5eCYutlHRc7YUatn3CUIk,1255
4
- rupython/Преобразователь.py,sha256=TdW4tdadm9sw1w0YZoFLwOw72bVM9QnDq0XOFYlJHUk,48823
4
+ rupython/Преобразователь.py,sha256=2d3ty3VSnU2cT7oG8Kyta2ejies_3vJPJSuGNf0jBBA,50363
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.2.17.dist-info/LICENSE,sha256=qqVMvbdzR5e4XIV6qwYVgI5Ovki8wR0qZaKB2Oj9DXw,25656
18
- rupython-1.2.17.dist-info/METADATA,sha256=snP9vb5fRFWIN-fuNLxmzX_THrfyM2SQCuNyEHg6ZNI,30446
19
- rupython-1.2.17.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
20
- rupython-1.2.17.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
21
- rupython-1.2.17.dist-info/RECORD,,
17
+ rupython-1.3.1.dist-info/LICENSE,sha256=qqVMvbdzR5e4XIV6qwYVgI5Ovki8wR0qZaKB2Oj9DXw,25656
18
+ rupython-1.3.1.dist-info/METADATA,sha256=SrKBt4MpO6sAbbE0pqWB7if728Q4r5UILawWh4lu3tM,30445
19
+ rupython-1.3.1.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
20
+ rupython-1.3.1.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
21
+ rupython-1.3.1.dist-info/RECORD,,