argenta 0.2.1__tar.gz → 0.3.0__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.
- argenta-0.3.0/PKG-INFO +289 -0
- argenta-0.3.0/README.md +273 -0
- {argenta-0.2.1 → argenta-0.3.0}/argenta/app/__init__.py +2 -2
- {argenta-0.2.1 → argenta-0.3.0}/argenta/app/entity.py +61 -45
- {argenta-0.2.1 → argenta-0.3.0}/argenta/app/exceptions.py +2 -2
- argenta-0.3.0/argenta/command/__init__.py +0 -0
- argenta-0.3.0/argenta/command/entity.py +60 -0
- argenta-0.3.0/argenta/command/exceptions.py +13 -0
- argenta-0.3.0/argenta/command/input_comand/__init__.py +0 -0
- argenta-0.3.0/argenta/command/input_comand/entity.py +66 -0
- argenta-0.3.0/argenta/command/input_comand/exceptions.py +24 -0
- argenta-0.3.0/argenta/command/params/__init__.py +0 -0
- argenta-0.3.0/argenta/command/params/flag/__init__.py +0 -0
- argenta-0.3.0/argenta/command/params/flag/entity.py +45 -0
- argenta-0.3.0/argenta/command/params/flag/flags_group/__init__.py +0 -0
- argenta-0.3.0/argenta/command/params/flag/flags_group/entity.py +22 -0
- argenta-0.3.0/argenta/command/params/flag/input_flag/__init__.py +0 -0
- argenta-0.3.0/argenta/command/params/flag/input_flag/entity.py +11 -0
- argenta-0.3.0/argenta/router/__init__.py +3 -0
- argenta-0.3.0/argenta/router/entity.py +145 -0
- {argenta-0.2.1 → argenta-0.3.0}/argenta/router/exceptions.py +5 -5
- {argenta-0.2.1 → argenta-0.3.0}/pyproject.toml +14 -4
- argenta-0.2.1/PKG-INFO +0 -18
- argenta-0.2.1/README.md +0 -2
- argenta-0.2.1/argenta/router/__init__.py +0 -4
- argenta-0.2.1/argenta/router/entity.py +0 -123
- {argenta-0.2.1 → argenta-0.3.0}/LICENSE +0 -0
- {argenta-0.2.1 → argenta-0.3.0}/argenta/__init__.py +0 -0
argenta-0.3.0/PKG-INFO
ADDED
@@ -0,0 +1,289 @@
|
|
1
|
+
Metadata-Version: 2.3
|
2
|
+
Name: argenta
|
3
|
+
Version: 0.3.0
|
4
|
+
Summary: python library for creating custom shells
|
5
|
+
License: MIT
|
6
|
+
Author: kolo
|
7
|
+
Author-email: kolo.is.main@gmail.com
|
8
|
+
Requires-Python: >=3.11
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
11
|
+
Classifier: Programming Language :: Python :: 3.11
|
12
|
+
Classifier: Programming Language :: Python :: 3.12
|
13
|
+
Classifier: Programming Language :: Python :: 3.13
|
14
|
+
Description-Content-Type: text/markdown
|
15
|
+
|
16
|
+
# Argenta
|
17
|
+
|
18
|
+
---
|
19
|
+
|
20
|
+
## Описание
|
21
|
+
**Argenta** — это библиотека для создания CLI-приложений на Python. Она предоставляет удобные инструменты для маршрутизации команд и обработки пользовательского ввода.
|
22
|
+
|
23
|
+
---
|
24
|
+
|
25
|
+
# Установка
|
26
|
+
```bash
|
27
|
+
pip install argenta
|
28
|
+
```
|
29
|
+
or
|
30
|
+
```bash
|
31
|
+
poetry add argenta
|
32
|
+
```
|
33
|
+
|
34
|
+
---
|
35
|
+
|
36
|
+
# Быстрый старт
|
37
|
+
Пример базового CLI-приложения с Argenta:
|
38
|
+
```python
|
39
|
+
#routers.py
|
40
|
+
from argenta.router import Router
|
41
|
+
|
42
|
+
router = Router()
|
43
|
+
|
44
|
+
@router.command("hello")
|
45
|
+
def hello():
|
46
|
+
print("Hello, world!")
|
47
|
+
|
48
|
+
@router.unknown_command
|
49
|
+
def unlnown_command(command):
|
50
|
+
print(f'Command "{command}" undefined')
|
51
|
+
```
|
52
|
+
```python
|
53
|
+
#main.py
|
54
|
+
from argenta.app import App
|
55
|
+
from routers import router
|
56
|
+
|
57
|
+
app: App = App()
|
58
|
+
|
59
|
+
def main() -> None:
|
60
|
+
app.include_router(router)
|
61
|
+
app.start_polling()
|
62
|
+
|
63
|
+
|
64
|
+
if __name__ == '__main__':
|
65
|
+
main()
|
66
|
+
```
|
67
|
+
|
68
|
+
---
|
69
|
+
|
70
|
+
# Техническая документация
|
71
|
+
|
72
|
+
---
|
73
|
+
|
74
|
+
## declared *classes* :
|
75
|
+
|
76
|
+
---
|
77
|
+
|
78
|
+
### *class* :: `App`
|
79
|
+
Класс, определяющий поведение и состояние приложения
|
80
|
+
|
81
|
+
#### Конструктор
|
82
|
+
```python
|
83
|
+
App(prompt: str = 'Enter a command',
|
84
|
+
initial_greeting: str = '\nHello, I am Argenta\n',
|
85
|
+
farewell_message: str = '\nGoodBye\n',
|
86
|
+
exit_command: str = 'Q',
|
87
|
+
exit_command_description: str = 'Exit command',
|
88
|
+
exit_command_title: str = 'System points:',
|
89
|
+
ignore_exit_command_register: bool = True,
|
90
|
+
ignore_command_register: bool = False,
|
91
|
+
line_separate: str = '',
|
92
|
+
command_group_description_separate: str = '',
|
93
|
+
repeat_command_groups: bool = True,
|
94
|
+
print_func: Callable[[str], None] = print)
|
95
|
+
```
|
96
|
+
**Аргументы:**
|
97
|
+
- **name : mean**
|
98
|
+
- `prompt` (`str`): Сообщение перед вводом команды.
|
99
|
+
- `initial_greeting` (`str`): Приветственное сообщение при запуске.
|
100
|
+
- `farewell_message` (`str`): Сообщение при выходе.
|
101
|
+
- `exit_command` (`str`): Команда выхода (по умолчанию `'Q'`).
|
102
|
+
- `exit_command_description` (`str`): Описание команды выхода.
|
103
|
+
- `exit_command_title` (`str`): Заголовок перед списком команд выхода.
|
104
|
+
- `ignore_exit_command_register` (`bool`): Игнорировать регистр команды выхода.
|
105
|
+
- `ignore_command_register` (`bool`): Игнорировать регистр всех команд.
|
106
|
+
- `line_separate` (`str`): Разделительная строка между командами.
|
107
|
+
- `command_group_description_separate` (`str`): Разделитель между группами команд.
|
108
|
+
- `repeat_command_groups` (`bool`): Повторять описание команд перед вводом.
|
109
|
+
- `print_func` (`Callable[[str], None]`): Функция вывода текста в терминал (по умолчанию `print`).
|
110
|
+
|
111
|
+
---
|
112
|
+
|
113
|
+
#### **declared *methods***
|
114
|
+
|
115
|
+
---
|
116
|
+
|
117
|
+
**App().**`start_polling() -> None`
|
118
|
+
|
119
|
+
*method mean* **::** запускает жизненный цикл приложения
|
120
|
+
|
121
|
+
---
|
122
|
+
|
123
|
+
**App().**`include_router(router: Router, is_main: bool = False) -> None`
|
124
|
+
|
125
|
+
*param* `router: Router` **::** регистрируемый роутер
|
126
|
+
|
127
|
+
*param* `is_main: bool` **::** будет ли являться регистрируемый роутер главным
|
128
|
+
*example* **::** `True` или `False`
|
129
|
+
|
130
|
+
*method mean* **::** регистрирует роутер в приложении
|
131
|
+
|
132
|
+
---
|
133
|
+
|
134
|
+
**App().**`set_initial_message(message: str) -> None`
|
135
|
+
|
136
|
+
*param* `message: str` **::** устанавливаемое приветственное сообщение
|
137
|
+
*example* **::** `"Hello, I'm a cli example app"`
|
138
|
+
|
139
|
+
*method mean* **::** устанавливает сообщение, которое будет отображено при запуске программы
|
140
|
+
|
141
|
+
---
|
142
|
+
|
143
|
+
**App().**`set_farewell_message(message: str) -> None`
|
144
|
+
|
145
|
+
*param* `message: str` **::** устанавливаемое сообщение при выходе
|
146
|
+
*example* **::** `"GoodBye !"`
|
147
|
+
|
148
|
+
*method mean* **::** устанавливает сообщение, которое будет отображено при выходе
|
149
|
+
|
150
|
+
---
|
151
|
+
|
152
|
+
**App().**`set_description_message_pattern(pattern: str) -> None`
|
153
|
+
|
154
|
+
*param* `pattern: str` **::** паттерн описания команды при её выводе в консоль
|
155
|
+
*example* **::** `"[{command}] *=*=* {description}"`
|
156
|
+
|
157
|
+
*method mean* **::** устанавливает приветственное сообщение
|
158
|
+
|
159
|
+
---
|
160
|
+
|
161
|
+
**App().**`get_main_router() -> Router`
|
162
|
+
|
163
|
+
*method mean* **::** возвращает `Router()`, который является главным в приложении
|
164
|
+
|
165
|
+
---
|
166
|
+
|
167
|
+
**App().**`get_all_app_commands() -> list[str]`
|
168
|
+
|
169
|
+
*method mean* **::** возвращает список команд всех зарегистрированных роутеров, сохраняя их регистр
|
170
|
+
|
171
|
+
---
|
172
|
+
|
173
|
+
#### Примечания
|
174
|
+
|
175
|
+
- Среди зарегистрированных в приложении роутеров должен быть один главный, является ли роутер главным
|
176
|
+
определяется значением аргумента `is_main` равным `True`, в методе `App().include_router()`, который по умолчанию равен
|
177
|
+
`False`, если в приложении зарегистрирован лишь один роутер, то он неявно устанавливается главным, если
|
178
|
+
зарегистрировано больше одного роутера, то требуется явное указание главного. При регистрации более одного
|
179
|
+
главного роутера вызывается исключение `OnlyOneMainRouterIsAllowedException`. При регистрации более одного
|
180
|
+
роутера и отсутствии указания главного вызывается исключение `MissingMainRouterException`
|
181
|
+
|
182
|
+
- В устанавливаемом паттерне сообщения описания команды необходимы быть два ключевых слова:
|
183
|
+
`command` и `description`, каждое из которых должно быть заключено в фигурные скобки, после обработки
|
184
|
+
паттерна на места этих ключевых слов будут подставлены соответствующие значения команды, при отсутствии
|
185
|
+
этих двух ключевых слов будет вызвано исключение `InvalidDescriptionMessagePatternException`
|
186
|
+
|
187
|
+
- Команды приложения не должны повторяться, при значении атрибута `ignore_command_register` равным `True`
|
188
|
+
допускается создание обработчиков для разных регистров одинаковых символов в команде, для примера `u` и `U`,
|
189
|
+
при значении атрибута `ignore_command_register` класса `App` равным `False` тот же пример вызывает исключение
|
190
|
+
`RepeatedCommandInDifferentRoutersException`. Исключение вызывается только при наличии пересекающихся команд
|
191
|
+
у __<u>разных</u>__ роутеров
|
192
|
+
|
193
|
+
- У главного обработчика должен быть зарегистрирован обработчик неизвестных команд:
|
194
|
+
```python
|
195
|
+
router = Router()
|
196
|
+
|
197
|
+
@router.unknown_command
|
198
|
+
def unknown_command(command):
|
199
|
+
print(f'Command "{command}" undefined')
|
200
|
+
```
|
201
|
+
При отсутствии обработчика неизвестных команд у главного роутера будет вызвано исключение
|
202
|
+
`MissingHandlerForUnknownCommandsException`. При регистрации обработчика неизвестных команд у
|
203
|
+
__<u>не</u>__ главного роутера будет вызвано исключение `HandlerForUnknownCommandsOnNonMainRouterException`
|
204
|
+
|
205
|
+
|
206
|
+
|
207
|
+
|
208
|
+
#### Исключения
|
209
|
+
|
210
|
+
- `InvalidRouterInstanceException` — Переданный объект в метод `App().include_router()` не является экземпляром класса `Router`.
|
211
|
+
- `InvalidDescriptionMessagePatternException` — Неправильный формат паттерна описания команд.
|
212
|
+
- `OnlyOneMainRouterIsAllowedException` — Регистрация более одного главного роутера.
|
213
|
+
- `MissingMainRouterException` — Отсутствует главный роутер.
|
214
|
+
- `MissingHandlerForUnknownCommandsException` — В основном роутере отсутствует обработчик неизвестных команд.
|
215
|
+
- `HandlerForUnknownCommandsOnNonMainRouterException` — Обработчик неизвестных команд определён не у основного роутера.
|
216
|
+
- `NoRegisteredRoutersException` — Отсутствуют зарегистрированные роутеры.
|
217
|
+
- `NoRegisteredHandlersException` — У роутера нет ни одного обработчика команд.
|
218
|
+
- `RepeatedCommandInDifferentRoutersException` — Одна и та же команда зарегистрирована в разных роутерах.
|
219
|
+
|
220
|
+
---
|
221
|
+
|
222
|
+
### *class* :: `Router`
|
223
|
+
Класс, который определяет и конфигурирует обработчики команд
|
224
|
+
|
225
|
+
#### Конструктор
|
226
|
+
```python
|
227
|
+
Router(title: str = 'Commands group title:',
|
228
|
+
name: str = 'subordinate')
|
229
|
+
```
|
230
|
+
|
231
|
+
**Аргументы:**
|
232
|
+
- **name : mean**
|
233
|
+
- `title` (`str`): Заголовок группы команд.
|
234
|
+
- `name` (`str`): Персональное название роутера
|
235
|
+
|
236
|
+
|
237
|
+
|
238
|
+
#### **declared *methods***
|
239
|
+
|
240
|
+
---
|
241
|
+
|
242
|
+
**`@`Router().**`command(command: str, description: str = None)`
|
243
|
+
|
244
|
+
*param* `command: str` **::** строковый триггер, который будет выполнять указанные действия
|
245
|
+
*example* **::** `U` / `update` / `ExaMPLE`
|
246
|
+
|
247
|
+
*param* `description: str` **::** описание команды, которое будет выведено в консоль
|
248
|
+
*example* **::** `description for update command` или `example description`
|
249
|
+
|
250
|
+
*method mean* **::** декоратор регистрирует функцию как обработчик команды
|
251
|
+
|
252
|
+
---
|
253
|
+
|
254
|
+
**`@`Router().**`unknown_command`
|
255
|
+
|
256
|
+
*method mean* **::** декоратор регистрирует функцию как обработчик неизвестных команд
|
257
|
+
|
258
|
+
---
|
259
|
+
|
260
|
+
**Router().**`get_name() -> str`
|
261
|
+
|
262
|
+
*method mean* **::** возвращает установленное название роутера
|
263
|
+
|
264
|
+
---
|
265
|
+
|
266
|
+
**Router().**`get_title() -> str`
|
267
|
+
|
268
|
+
*method mean* **::** возвращает установленный заголовок группы команд данного роутера
|
269
|
+
|
270
|
+
---
|
271
|
+
|
272
|
+
**Router().**`get_router_info() -> dict`
|
273
|
+
|
274
|
+
*method mean* **::** возвращает информацию о роутере
|
275
|
+
|
276
|
+
---
|
277
|
+
|
278
|
+
**Router().**`get_all_commands() -> list[str]`
|
279
|
+
|
280
|
+
*method mean* **::** возвращает все зарегистрированные команды для данного роутера
|
281
|
+
|
282
|
+
---
|
283
|
+
|
284
|
+
#### Исключения
|
285
|
+
- `InvalidCommandInstanceException` - Переданный объект для регистрации команды не является строкой
|
286
|
+
- `InvalidDescriptionInstanceException` - Переданный объект для регистрации описания команды не является строкой
|
287
|
+
- `UnknownCommandHandlerHasAlreadyBeenCreatedException` - Обработчик неизвестных команд уже создан
|
288
|
+
- `RepeatedCommandException` - Одна и та же команда зарегистрирована в одном роутере
|
289
|
+
|
argenta-0.3.0/README.md
ADDED
@@ -0,0 +1,273 @@
|
|
1
|
+
# Argenta
|
2
|
+
|
3
|
+
---
|
4
|
+
|
5
|
+
## Описание
|
6
|
+
**Argenta** — это библиотека для создания CLI-приложений на Python. Она предоставляет удобные инструменты для маршрутизации команд и обработки пользовательского ввода.
|
7
|
+
|
8
|
+
---
|
9
|
+
|
10
|
+
# Установка
|
11
|
+
```bash
|
12
|
+
pip install argenta
|
13
|
+
```
|
14
|
+
or
|
15
|
+
```bash
|
16
|
+
poetry add argenta
|
17
|
+
```
|
18
|
+
|
19
|
+
---
|
20
|
+
|
21
|
+
# Быстрый старт
|
22
|
+
Пример базового CLI-приложения с Argenta:
|
23
|
+
```python
|
24
|
+
#routers.py
|
25
|
+
from argenta.router import Router
|
26
|
+
|
27
|
+
router = Router()
|
28
|
+
|
29
|
+
@router.command("hello")
|
30
|
+
def hello():
|
31
|
+
print("Hello, world!")
|
32
|
+
|
33
|
+
@router.unknown_command
|
34
|
+
def unlnown_command(command):
|
35
|
+
print(f'Command "{command}" undefined')
|
36
|
+
```
|
37
|
+
```python
|
38
|
+
#main.py
|
39
|
+
from argenta.app import App
|
40
|
+
from routers import router
|
41
|
+
|
42
|
+
app: App = App()
|
43
|
+
|
44
|
+
def main() -> None:
|
45
|
+
app.include_router(router)
|
46
|
+
app.start_polling()
|
47
|
+
|
48
|
+
|
49
|
+
if __name__ == '__main__':
|
50
|
+
main()
|
51
|
+
```
|
52
|
+
|
53
|
+
---
|
54
|
+
|
55
|
+
# Техническая документация
|
56
|
+
|
57
|
+
---
|
58
|
+
|
59
|
+
## declared *classes* :
|
60
|
+
|
61
|
+
---
|
62
|
+
|
63
|
+
### *class* :: `App`
|
64
|
+
Класс, определяющий поведение и состояние приложения
|
65
|
+
|
66
|
+
#### Конструктор
|
67
|
+
```python
|
68
|
+
App(prompt: str = 'Enter a command',
|
69
|
+
initial_greeting: str = '\nHello, I am Argenta\n',
|
70
|
+
farewell_message: str = '\nGoodBye\n',
|
71
|
+
exit_command: str = 'Q',
|
72
|
+
exit_command_description: str = 'Exit command',
|
73
|
+
exit_command_title: str = 'System points:',
|
74
|
+
ignore_exit_command_register: bool = True,
|
75
|
+
ignore_command_register: bool = False,
|
76
|
+
line_separate: str = '',
|
77
|
+
command_group_description_separate: str = '',
|
78
|
+
repeat_command_groups: bool = True,
|
79
|
+
print_func: Callable[[str], None] = print)
|
80
|
+
```
|
81
|
+
**Аргументы:**
|
82
|
+
- **name : mean**
|
83
|
+
- `prompt` (`str`): Сообщение перед вводом команды.
|
84
|
+
- `initial_greeting` (`str`): Приветственное сообщение при запуске.
|
85
|
+
- `farewell_message` (`str`): Сообщение при выходе.
|
86
|
+
- `exit_command` (`str`): Команда выхода (по умолчанию `'Q'`).
|
87
|
+
- `exit_command_description` (`str`): Описание команды выхода.
|
88
|
+
- `exit_command_title` (`str`): Заголовок перед списком команд выхода.
|
89
|
+
- `ignore_exit_command_register` (`bool`): Игнорировать регистр команды выхода.
|
90
|
+
- `ignore_command_register` (`bool`): Игнорировать регистр всех команд.
|
91
|
+
- `line_separate` (`str`): Разделительная строка между командами.
|
92
|
+
- `command_group_description_separate` (`str`): Разделитель между группами команд.
|
93
|
+
- `repeat_command_groups` (`bool`): Повторять описание команд перед вводом.
|
94
|
+
- `print_func` (`Callable[[str], None]`): Функция вывода текста в терминал (по умолчанию `print`).
|
95
|
+
|
96
|
+
---
|
97
|
+
|
98
|
+
#### **declared *methods***
|
99
|
+
|
100
|
+
---
|
101
|
+
|
102
|
+
**App().**`start_polling() -> None`
|
103
|
+
|
104
|
+
*method mean* **::** запускает жизненный цикл приложения
|
105
|
+
|
106
|
+
---
|
107
|
+
|
108
|
+
**App().**`include_router(router: Router, is_main: bool = False) -> None`
|
109
|
+
|
110
|
+
*param* `router: Router` **::** регистрируемый роутер
|
111
|
+
|
112
|
+
*param* `is_main: bool` **::** будет ли являться регистрируемый роутер главным
|
113
|
+
*example* **::** `True` или `False`
|
114
|
+
|
115
|
+
*method mean* **::** регистрирует роутер в приложении
|
116
|
+
|
117
|
+
---
|
118
|
+
|
119
|
+
**App().**`set_initial_message(message: str) -> None`
|
120
|
+
|
121
|
+
*param* `message: str` **::** устанавливаемое приветственное сообщение
|
122
|
+
*example* **::** `"Hello, I'm a cli example app"`
|
123
|
+
|
124
|
+
*method mean* **::** устанавливает сообщение, которое будет отображено при запуске программы
|
125
|
+
|
126
|
+
---
|
127
|
+
|
128
|
+
**App().**`set_farewell_message(message: str) -> None`
|
129
|
+
|
130
|
+
*param* `message: str` **::** устанавливаемое сообщение при выходе
|
131
|
+
*example* **::** `"GoodBye !"`
|
132
|
+
|
133
|
+
*method mean* **::** устанавливает сообщение, которое будет отображено при выходе
|
134
|
+
|
135
|
+
---
|
136
|
+
|
137
|
+
**App().**`set_description_message_pattern(pattern: str) -> None`
|
138
|
+
|
139
|
+
*param* `pattern: str` **::** паттерн описания команды при её выводе в консоль
|
140
|
+
*example* **::** `"[{command}] *=*=* {description}"`
|
141
|
+
|
142
|
+
*method mean* **::** устанавливает приветственное сообщение
|
143
|
+
|
144
|
+
---
|
145
|
+
|
146
|
+
**App().**`get_main_router() -> Router`
|
147
|
+
|
148
|
+
*method mean* **::** возвращает `Router()`, который является главным в приложении
|
149
|
+
|
150
|
+
---
|
151
|
+
|
152
|
+
**App().**`get_all_app_commands() -> list[str]`
|
153
|
+
|
154
|
+
*method mean* **::** возвращает список команд всех зарегистрированных роутеров, сохраняя их регистр
|
155
|
+
|
156
|
+
---
|
157
|
+
|
158
|
+
#### Примечания
|
159
|
+
|
160
|
+
- Среди зарегистрированных в приложении роутеров должен быть один главный, является ли роутер главным
|
161
|
+
определяется значением аргумента `is_main` равным `True`, в методе `App().include_router()`, который по умолчанию равен
|
162
|
+
`False`, если в приложении зарегистрирован лишь один роутер, то он неявно устанавливается главным, если
|
163
|
+
зарегистрировано больше одного роутера, то требуется явное указание главного. При регистрации более одного
|
164
|
+
главного роутера вызывается исключение `OnlyOneMainRouterIsAllowedException`. При регистрации более одного
|
165
|
+
роутера и отсутствии указания главного вызывается исключение `MissingMainRouterException`
|
166
|
+
|
167
|
+
- В устанавливаемом паттерне сообщения описания команды необходимы быть два ключевых слова:
|
168
|
+
`command` и `description`, каждое из которых должно быть заключено в фигурные скобки, после обработки
|
169
|
+
паттерна на места этих ключевых слов будут подставлены соответствующие значения команды, при отсутствии
|
170
|
+
этих двух ключевых слов будет вызвано исключение `InvalidDescriptionMessagePatternException`
|
171
|
+
|
172
|
+
- Команды приложения не должны повторяться, при значении атрибута `ignore_command_register` равным `True`
|
173
|
+
допускается создание обработчиков для разных регистров одинаковых символов в команде, для примера `u` и `U`,
|
174
|
+
при значении атрибута `ignore_command_register` класса `App` равным `False` тот же пример вызывает исключение
|
175
|
+
`RepeatedCommandInDifferentRoutersException`. Исключение вызывается только при наличии пересекающихся команд
|
176
|
+
у __<u>разных</u>__ роутеров
|
177
|
+
|
178
|
+
- У главного обработчика должен быть зарегистрирован обработчик неизвестных команд:
|
179
|
+
```python
|
180
|
+
router = Router()
|
181
|
+
|
182
|
+
@router.unknown_command
|
183
|
+
def unknown_command(command):
|
184
|
+
print(f'Command "{command}" undefined')
|
185
|
+
```
|
186
|
+
При отсутствии обработчика неизвестных команд у главного роутера будет вызвано исключение
|
187
|
+
`MissingHandlerForUnknownCommandsException`. При регистрации обработчика неизвестных команд у
|
188
|
+
__<u>не</u>__ главного роутера будет вызвано исключение `HandlerForUnknownCommandsOnNonMainRouterException`
|
189
|
+
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
#### Исключения
|
194
|
+
|
195
|
+
- `InvalidRouterInstanceException` — Переданный объект в метод `App().include_router()` не является экземпляром класса `Router`.
|
196
|
+
- `InvalidDescriptionMessagePatternException` — Неправильный формат паттерна описания команд.
|
197
|
+
- `OnlyOneMainRouterIsAllowedException` — Регистрация более одного главного роутера.
|
198
|
+
- `MissingMainRouterException` — Отсутствует главный роутер.
|
199
|
+
- `MissingHandlerForUnknownCommandsException` — В основном роутере отсутствует обработчик неизвестных команд.
|
200
|
+
- `HandlerForUnknownCommandsOnNonMainRouterException` — Обработчик неизвестных команд определён не у основного роутера.
|
201
|
+
- `NoRegisteredRoutersException` — Отсутствуют зарегистрированные роутеры.
|
202
|
+
- `NoRegisteredHandlersException` — У роутера нет ни одного обработчика команд.
|
203
|
+
- `RepeatedCommandInDifferentRoutersException` — Одна и та же команда зарегистрирована в разных роутерах.
|
204
|
+
|
205
|
+
---
|
206
|
+
|
207
|
+
### *class* :: `Router`
|
208
|
+
Класс, который определяет и конфигурирует обработчики команд
|
209
|
+
|
210
|
+
#### Конструктор
|
211
|
+
```python
|
212
|
+
Router(title: str = 'Commands group title:',
|
213
|
+
name: str = 'subordinate')
|
214
|
+
```
|
215
|
+
|
216
|
+
**Аргументы:**
|
217
|
+
- **name : mean**
|
218
|
+
- `title` (`str`): Заголовок группы команд.
|
219
|
+
- `name` (`str`): Персональное название роутера
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
#### **declared *methods***
|
224
|
+
|
225
|
+
---
|
226
|
+
|
227
|
+
**`@`Router().**`command(command: str, description: str = None)`
|
228
|
+
|
229
|
+
*param* `command: str` **::** строковый триггер, который будет выполнять указанные действия
|
230
|
+
*example* **::** `U` / `update` / `ExaMPLE`
|
231
|
+
|
232
|
+
*param* `description: str` **::** описание команды, которое будет выведено в консоль
|
233
|
+
*example* **::** `description for update command` или `example description`
|
234
|
+
|
235
|
+
*method mean* **::** декоратор регистрирует функцию как обработчик команды
|
236
|
+
|
237
|
+
---
|
238
|
+
|
239
|
+
**`@`Router().**`unknown_command`
|
240
|
+
|
241
|
+
*method mean* **::** декоратор регистрирует функцию как обработчик неизвестных команд
|
242
|
+
|
243
|
+
---
|
244
|
+
|
245
|
+
**Router().**`get_name() -> str`
|
246
|
+
|
247
|
+
*method mean* **::** возвращает установленное название роутера
|
248
|
+
|
249
|
+
---
|
250
|
+
|
251
|
+
**Router().**`get_title() -> str`
|
252
|
+
|
253
|
+
*method mean* **::** возвращает установленный заголовок группы команд данного роутера
|
254
|
+
|
255
|
+
---
|
256
|
+
|
257
|
+
**Router().**`get_router_info() -> dict`
|
258
|
+
|
259
|
+
*method mean* **::** возвращает информацию о роутере
|
260
|
+
|
261
|
+
---
|
262
|
+
|
263
|
+
**Router().**`get_all_commands() -> list[str]`
|
264
|
+
|
265
|
+
*method mean* **::** возвращает все зарегистрированные команды для данного роутера
|
266
|
+
|
267
|
+
---
|
268
|
+
|
269
|
+
#### Исключения
|
270
|
+
- `InvalidCommandInstanceException` - Переданный объект для регистрации команды не является строкой
|
271
|
+
- `InvalidDescriptionInstanceException` - Переданный объект для регистрации описания команды не является строкой
|
272
|
+
- `UnknownCommandHandlerHasAlreadyBeenCreatedException` - Обработчик неизвестных команд уже создан
|
273
|
+
- `RepeatedCommandException` - Одна и та же команда зарегистрирована в одном роутере
|
@@ -1,7 +1,7 @@
|
|
1
1
|
from .entity import App
|
2
|
-
from .exceptions import (
|
2
|
+
from .exceptions import (HandlerForUnknownCommandsOnNonMainRouterException,
|
3
3
|
InvalidDescriptionMessagePatternException,
|
4
4
|
InvalidRouterInstanceException,
|
5
5
|
OnlyOneMainRouterIsAllowedException,
|
6
6
|
MissingMainRouterException,
|
7
|
-
|
7
|
+
MissingHandlerForUnknownCommandsException)
|