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.
- {rupython-1.3.2 → rupython-1.3.4}/PKG-INFO +1 -1
- 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
- {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
- {rupython-1.3.2 → rupython-1.3.4}/rupython.egg-info/PKG-INFO +1 -1
- {rupython-1.3.2 → rupython-1.3.4}/rupython.egg-info/SOURCES.txt +1 -1
- {rupython-1.3.2 → rupython-1.3.4}/setup.py +1 -1
- 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
- {rupython-1.3.2 → rupython-1.3.4}/LICENSE +0 -0
- {rupython-1.3.2 → rupython-1.3.4}/README.md +0 -0
- {rupython-1.3.2 → rupython-1.3.4}/rupython/__main__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- /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
- {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
- {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
- {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
- {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
- {rupython-1.3.2 → rupython-1.3.4}/rupython.egg-info/dependency_links.txt +0 -0
- {rupython-1.3.2 → rupython-1.3.4}/rupython.egg-info/top_level.txt +0 -0
- {rupython-1.3.2 → rupython-1.3.4}/setup.cfg +0 -0
|
@@ -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
|
-
'
|
|
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 Очистить_файлы():
|
|
@@ -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
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|