rupython 1.3.2__tar.gz → 1.3.4__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 (25) hide show
  1. {rupython-1.3.2 → rupython-1.3.4}/PKG-INFO +1 -1
  2. rupython-1.3.4/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/220/321/201/320/270/320/275/321/205/321/200/320/276/320/275/320/275/320/276/321/201/321/202/321/214.py +99 -0
  3. {rupython-1.3.2 → rupython-1.3.4}/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 +11 -2
  4. {rupython-1.3.2 → rupython-1.3.4}/rupython.egg-info/PKG-INFO +1 -1
  5. {rupython-1.3.2 → rupython-1.3.4}/rupython.egg-info/SOURCES.txt +1 -1
  6. {rupython-1.3.2 → rupython-1.3.4}/setup.py +1 -1
  7. rupython-1.3.2/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/236/321/207/320/265/321/200/320/265/320/264/321/214.py +0 -177
  8. {rupython-1.3.2 → rupython-1.3.4}/LICENSE +0 -0
  9. {rupython-1.3.2 → rupython-1.3.4}/README.md +0 -0
  10. {rupython-1.3.2 → rupython-1.3.4}/rupython/__main__.py +0 -0
  11. {rupython-1.3.2 → rupython-1.3.4}/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
  12. {rupython-1.3.2 → rupython-1.3.4}/rupython/__/320/236/320/261/321/211/320/270/320/265_/321/204/321/203/320/275/320/272/321/206/320/270/320/270__.py" +0 -0
  13. {rupython-1.3.2 → rupython-1.3.4}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/221/320/224.py" +0 -0
  14. {rupython-1.3.2 → rupython-1.3.4}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/224/320/260/321/202/320/260/320/222/321/200/320/265/320/274/321/217.py" +0 -0
  15. {rupython-1.3.2 → rupython-1.3.4}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/232/320/276/320/273/320/273/320/265/320/272/321/206/320/270/320/270.py" +0 -0
  16. {rupython-1.3.2 → rupython-1.3.4}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/232/321/203/321/207/320/260.py" +0 -0
  17. {rupython-1.3.2 → rupython-1.3.4}/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
  18. /rupython-1.3.2/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/220/321/201/320/270/320/275/321/205/321/200.py" → /rupython-1.3.4/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/236/321/207/320/265/321/200/320/265/320/264/321/214.py" +0 -0
  19. {rupython-1.3.2 → rupython-1.3.4}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/237/320/276/321/202/320/276/320/272/320/270.py" +0 -0
  20. {rupython-1.3.2 → rupython-1.3.4}/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
  21. {rupython-1.3.2 → rupython-1.3.4}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/241/320/273/321/203/321/207.py" +0 -0
  22. {rupython-1.3.2 → rupython-1.3.4}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/244/320/260/320/271/320/273/321/213.py" +0 -0
  23. {rupython-1.3.2 → rupython-1.3.4}/rupython.egg-info/dependency_links.txt +0 -0
  24. {rupython-1.3.2 → rupython-1.3.4}/rupython.egg-info/top_level.txt +0 -0
  25. {rupython-1.3.2 → rupython-1.3.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.3.2
3
+ Version: 1.3.4
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Author: Сообщество русских программистов
6
6
  License: ОДРН
@@ -0,0 +1,99 @@
1
+ import asyncio
2
+
3
+ Задача_отменена = asyncio.CancelledError
4
+ Время_ожидания_истекло = asyncio.TimeoutError
5
+ Недопустимое_состояние = asyncio.InvalidStateError
6
+ Чтение_неполное = asyncio.IncompleteReadError
7
+ Буфер_переполнен = asyncio.LimitOverrunError
8
+ Ошибка_протокола_потока = asyncio.StreamReaderProtocol
9
+ Очередь_пуста = asyncio.QueueEmpty
10
+ Очередь_переполнена = asyncio.QueueFull
11
+
12
+ class Процедура:
13
+ def __init__(экземпляр, функция, *аргументы, **параметры):
14
+ экземпляр.функция = функция
15
+ экземпляр.аргументы = аргументы
16
+ экземпляр.параметры = параметры
17
+ экземпляр.задача = None
18
+
19
+ def Запустить(экземпляр):
20
+ экземпляр.задача = asyncio.create_task(
21
+ экземпляр.функция(*экземпляр.аргументы, **экземпляр.параметры)
22
+ )
23
+ return экземпляр.задача
24
+
25
+ async def Ждать(экземпляр):
26
+ if экземпляр.задача is None:
27
+ экземпляр.задача = экземпляр.запустить()
28
+ return await экземпляр.задача
29
+
30
+ class Задачи:
31
+ def __init__(экземпляр):
32
+ экземпляр.список = []
33
+
34
+ def Добавить(экземпляр, процедура):
35
+ задача = процедура.Запустить()
36
+ экземпляр.список.append(задача)
37
+
38
+ async def Ждать_все(экземпляр):
39
+ return await asyncio.gather(*экземпляр.список)
40
+
41
+ class Процесс:
42
+ def __init__(экземпляр, команда):
43
+ экземпляр.команда = команда
44
+ экземпляр.процесс = None
45
+
46
+ async def Запустить(экземпляр):
47
+ экземпляр.процесс = await asyncio.create_subprocess_shell(
48
+ экземпляр.команда,
49
+ stdout = asyncio.subprocess.PIPE,
50
+ stderr = asyncio.subprocess.PIPE
51
+ )
52
+ stdout, stderr = await экземпляр.процесс.communicate()
53
+ return {
54
+ "код": экземпляр.процесс.returncode,
55
+ "вывод": stdout.decode(),
56
+ "ошибка": stderr.decode()
57
+ }
58
+
59
+ class Поток:
60
+ def __init__(экземпляр, поток_чтения):
61
+ экземпляр.поток = поток_чтения
62
+
63
+ async def читать_всё(экземпляр):
64
+ строки = []
65
+ while True:
66
+ строка = await экземпляр.поток.readline()
67
+ if not строка:
68
+ break
69
+ строки.append(строка.decode())
70
+ return строки
71
+
72
+ class Блокование:
73
+ def __init__(экземпляр):
74
+ экземпляр.блокировка = asyncio.Lock()
75
+
76
+ async def Выполнить(экземпляр, функция, *аргументы, **параметры):
77
+ async with экземпляр.блокировка:
78
+ return await функция(*аргументы, **параметры)
79
+
80
+ async def Спать(секунд):
81
+ await asyncio.sleep(секунд)
82
+
83
+ def Запустить(процедура):
84
+ return asyncio.run(процедура)
85
+
86
+ def Создать_задачу(процедура):
87
+ return asyncio.create_task(процедура)
88
+
89
+ def Собрать(*процедуры):
90
+ return asyncio.gather(*процедуры)
91
+
92
+ def Ожидать(объект, таймаут = None):
93
+ return asyncio.wait_for(объект, timeout = таймаут)
94
+
95
+ def Все_задачи():
96
+ return asyncio.all_tasks()
97
+
98
+ def Текущая_задача():
99
+ return asyncio.current_task()
@@ -16,6 +16,7 @@ from io import StringIO as Текстовый_ВВ
16
16
  'не': 'not',
17
17
  'это': 'is',
18
18
  'Функция': 'def',
19
+ 'функция': 'def',
19
20
  'Класс': 'class',
20
21
  'Общее': 'global', # Глобальное
21
22
  'НеМестное': 'nonlocal', # Нелокальное
@@ -97,7 +98,7 @@ from io import StringIO as Текстовый_ВВ
97
98
  'Отображение': ( 'map', None, False ),
98
99
  'Память': ( 'memoryview', { 'объект': 'object' }, True ),
99
100
  'Перебиратель': ( 'iter', None, False ),
100
- 'Перечислить': ( 'enumerate', { 'перебираемое': 'iterable', 'начало': 'start' }, False ),
101
+ 'Перечень': ( 'enumerate', { 'перебираемое': 'iterable', 'начало': 'start' }, False ), # Перечислить
101
102
  'Подкласс': ( 'issubclass', None, False ),
102
103
  'Получить_поле': ( 'getattr', None, False ),
103
104
  'Поля': ( 'vars', None, False ),
@@ -521,6 +522,10 @@ def Проверить_соответствие_слов(слова, путь_к
521
522
  if поз != len(слова) - 1 and слова[поз + 1][0] not in (4, 61, 65):
522
523
  Вывести_исключение('Возврат'); return False
523
524
 
525
+ for поз in [i for i, x in enumerate(слова) if x[1] == 'функция']:
526
+ if поз == 0 or слова[поз - 1][1] != 'Асинхр':
527
+ Вывести_исключение('функция'); return False
528
+
524
529
  return True
525
530
 
526
531
  Циклы_со_счётчиком = []
@@ -740,7 +745,11 @@ def Посчитать_физические_строки(путь_к_файлу,
740
745
  r"No module named '(.+)'": r'Модуль под названием "\1" не найден.',
741
746
  r"unindent does not match any outer indentation level": r'Отступ не соответствует никакому окружающему уровню.',
742
747
  r"int too big to convert": r'Число слишком большое для преобразования.',
743
- r"unexpected indent": r'Неожиданный отступ.'
748
+ r"unexpected indent": r'Неожиданный отступ.',
749
+ r"cannot import name '(.+)' from '(.+)' (unknown location)": r'Невозможно импортовать название "\1" из "\2" (неизвестное расположение).',
750
+ r"(.+) missing (.+) required positional arguments: (.+), and (.+)": r'Для функции "\1" требуется позиционных аргументов: \2 (\3 и \4).',
751
+ r"module '(.+)' has no attribute '(.+)'": r'Модуль "\1" не имеет атрибута "\1".',
752
+ r"string argument without an encoding": r'Строковый аргумент без кодования.'
744
753
  }
745
754
 
746
755
  def Очистить_файлы():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.3.2
3
+ Version: 1.3.4
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Author: Сообщество русских программистов
6
6
  License: ОДРН
@@ -10,7 +10,7 @@ rupython.egg-info/PKG-INFO
10
10
  rupython.egg-info/SOURCES.txt
11
11
  rupython.egg-info/dependency_links.txt
12
12
  rupython.egg-info/top_level.txt
13
- rupython/Модули/Асинхр.py
13
+ rupython/Модули/Асинхронность.py
14
14
  rupython/Модули/БД.py
15
15
  rupython/Модули/ДатаВремя.py
16
16
  rupython/Модули/Коллекции.py
@@ -3,7 +3,7 @@ from pathlib import Path as Путь
3
3
 
4
4
  Установить(
5
5
  name = 'rupython',
6
- version = '1.3.2',
6
+ version = '1.3.4',
7
7
  description = "Исполнитель кода Русского Питона",
8
8
  packages = [ 'rupython', 'rupython.Модули' ],
9
9
  long_description = (Путь(__file__).parent / 'README.md').read_text('UTF-8'),
@@ -1,177 +0,0 @@
1
- import queue
2
- from rupython import __Общие_функции__
3
-
4
- Очередь_пуста = queue.Empty
5
- Очередь_полна = queue.Full
6
-
7
- Словарь_параметров = {
8
- 'максимальный_размер': 'maxsize',
9
- 'элемент': 'item',
10
- 'блоковать': 'block',
11
- 'таймаут': 'timeout',
12
- 'приоритет': 'priority'
13
- }
14
-
15
- Словарь_склонений = {
16
- 'элемент': ['элемент', 'элемента', 'элементов'],
17
- 'задача': ['задача', 'задачи', 'задач']
18
- }
19
-
20
- class Очередь:
21
- def __init__(экземпляр, максимальный_размер = 0):
22
- kwargs = {'maxsize': максимальный_размер}
23
- экземпляр._queue = queue.Queue(**kwargs)
24
-
25
- def Добавить(экземпляр, элемент, блоковать = True, таймаут = None):
26
- kwargs = {'item': элемент, 'block': блоковать}
27
- if таймаут is not None:
28
- kwargs['timeout'] = таймаут
29
- экземпляр._queue.put(**kwargs)
30
-
31
- def Добавить_без_блокования(экземпляр, элемент):
32
- экземпляр._queue.put_nowait(элемент)
33
-
34
- def Получить(экземпляр, блоковать = True, таймаут = None):
35
- kwargs = {'block': блоковать}
36
- if таймаут is not None:
37
- kwargs['timeout'] = таймаут
38
- return экземпляр._queue.get(**kwargs)
39
-
40
- def Получить_без_блокования(экземпляр):
41
- return экземпляр._queue.get_nowait()
42
-
43
- def Задача_выполнена(экземпляр):
44
- экземпляр._queue.task_done()
45
-
46
- def Ждать_завершения(экземпляр):
47
- экземпляр._queue.join()
48
-
49
- def Пустая(экземпляр):
50
- return экземпляр._queue.empty()
51
-
52
- def Полная(экземпляр):
53
- return экземпляр._queue.full()
54
-
55
- def Размер(экземпляр):
56
- return экземпляр._queue.qsize()
57
-
58
- def __len__(экземпляр):
59
- return экземпляр._queue.qsize()
60
-
61
- def __str__(экземпляр):
62
- размер = экземпляр.Размер()
63
- return f"Очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
64
-
65
- def В_строку_с_задачами(экземпляр):
66
- размер = экземпляр.Размер()
67
- return f"Очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
68
-
69
- class Стековая_очередь:
70
- def __init__(экземпляр, максимальный_размер = 0):
71
- kwargs = {'maxsize': максимальный_размер}
72
- экземпляр._queue = queue.LifoQueue(**kwargs)
73
-
74
- def Добавить(экземпляр, элемент, блоковать = True, таймаут = None):
75
- kwargs = {'item': элемент, 'block': блоковать}
76
- if таймаут is not None:
77
- kwargs['timeout'] = таймаут
78
- экземпляр._queue.put(**kwargs)
79
-
80
- def Добавить_без_блокования(экземпляр, элемент):
81
- экземпляр._queue.put_nowait(элемент)
82
-
83
- def Получить(экземпляр, блоковать = True, таймаут = None):
84
- kwargs = {'block': блоковать}
85
- if таймаут is not None:
86
- kwargs['timeout'] = таймаут
87
- return экземпляр._queue.get(**kwargs)
88
-
89
- def Получить_без_блокования(экземпляр):
90
- return экземпляр._queue.get_nowait()
91
-
92
- def Задача_выполнена(экземпляр):
93
- экземпляр._queue.task_done()
94
-
95
- def Ждать_завершения(экземпляр):
96
- экземпляр._queue.join()
97
-
98
- def Пустая(экземпляр):
99
- return экземпляр._queue.empty()
100
-
101
- def Полная(экземпляр):
102
- return экземпляр._queue.full()
103
-
104
- def Размер(экземпляр):
105
- return экземпляр._queue.qsize()
106
-
107
- def __len__(экземпляр):
108
- return экземпляр._queue.qsize()
109
-
110
- def __str__(экземпляр):
111
- размер = экземпляр.Размер()
112
- return f"Стековая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
113
-
114
- def В_строку_с_задачами(экземпляр):
115
- размер = экземпляр.Размер()
116
- return f"Стековая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
117
-
118
- class Приоритетная_очередь:
119
- def __init__(экземпляр, максимальный_размер = 0):
120
- kwargs = {'maxsize': максимальный_размер}
121
- экземпляр._queue = queue.PriorityQueue(**kwargs)
122
-
123
- def Добавить(экземпляр, элемент, приоритет, блоковать = True, таймаут = None):
124
- kwargs = {'item': (приоритет, элемент), 'block': блоковать}
125
- if таймаут is not None:
126
- kwargs['timeout'] = таймаут
127
- экземпляр._queue.put(**kwargs)
128
-
129
- def Добавить_без_блокования(экземпляр, элемент, приоритет):
130
- экземпляр._queue.put_nowait((приоритет, элемент))
131
-
132
- def Получить(экземпляр, блоковать = True, таймаут = None):
133
- kwargs = {'block': блоковать}
134
- if таймаут is not None:
135
- kwargs['timeout'] = таймаут
136
- приоритет, элемент = экземпляр._queue.get(**kwargs)
137
- return элемент
138
-
139
- def Получить_с_приоритетом(экземпляр, блоковать = True, таймаут = None):
140
- kwargs = {'block': блоковать}
141
- if таймаут is not None:
142
- kwargs['timeout'] = таймаут
143
- return экземпляр._queue.get(**kwargs)
144
-
145
- def Получить_без_блокования(экземпляр):
146
- приоритет, элемент = экземпляр._queue.get_nowait()
147
- return элемент
148
-
149
- def Получить_без_блокования_с_приоритетом(экземпляр):
150
- """Возвращает кортеж (приоритет, элемент)."""
151
- return экземпляр._queue.get_nowait()
152
-
153
- def Задача_выполнена(экземпляр):
154
- экземпляр._queue.task_done()
155
-
156
- def Ждать_завершения(экземпляр):
157
- экземпляр._queue.join()
158
-
159
- def Пустая(экземпляр):
160
- return экземпляр._queue.empty()
161
-
162
- def Полная(экземпляр):
163
- return экземпляр._queue.full()
164
-
165
- def Размер(экземпляр):
166
- return экземпляр._queue.qsize()
167
-
168
- def __len__(экземпляр):
169
- return экземпляр._queue.qsize()
170
-
171
- def __str__(экземпляр):
172
- размер = экземпляр.Размер()
173
- return f"Приоритетная_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
174
-
175
- def В_строку_с_задачами(экземпляр):
176
- размер = экземпляр.Размер()
177
- return f"Приоритетная_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
File without changes
File without changes
File without changes
File without changes