argenta 0.5.0b2__py3-none-any.whl → 1.0.0a1__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.
- argenta/app/autocompleter/entity.py +32 -7
- argenta/app/defaults.py +4 -1
- argenta/app/dividing_line/models.py +55 -11
- argenta/app/exceptions.py +4 -6
- argenta/app/models.py +231 -105
- argenta/app/registered_routers/entity.py +21 -2
- argenta/command/exceptions.py +12 -0
- argenta/command/flag/defaults.py +9 -6
- argenta/command/flag/models.py +84 -6
- argenta/command/models.py +59 -7
- argenta/orchestrator/__init__.py +4 -0
- argenta/orchestrator/argparser/__init__.py +4 -0
- argenta/orchestrator/argparser/arguments/__init__.py +6 -0
- argenta/orchestrator/argparser/arguments/models.py +55 -0
- argenta/orchestrator/argparser/entity.py +49 -0
- argenta/orchestrator/entity.py +36 -0
- argenta/router/__init__.py +1 -1
- argenta/router/command_handler/entity.py +63 -5
- argenta/router/defaults.py +1 -2
- argenta/router/entity.py +99 -44
- argenta/router/exceptions.py +14 -7
- argenta-1.0.0a1.dist-info/METADATA +1438 -0
- argenta-1.0.0a1.dist-info/RECORD +33 -0
- {argenta-0.5.0b2.dist-info → argenta-1.0.0a1.dist-info}/WHEEL +1 -1
- argenta/router/command_handlers/__init__.py +0 -0
- argenta/router/command_handlers/entity.py +0 -21
- argenta-0.5.0b2.dist-info/METADATA +0 -601
- argenta-0.5.0b2.dist-info/RECORD +0 -29
- {argenta-0.5.0b2.dist-info → argenta-1.0.0a1.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,33 @@
|
|
1
|
+
argenta/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
+
argenta/app/__init__.py,sha256=I8FTXU17ajDI-hbC6Rw0LxLmvDYipdQaos3v1pmu14E,57
|
3
|
+
argenta/app/defaults.py,sha256=GE4UzsJ7PD7654weNzTFGcBroc_0Zy5H9VL5P8ZbFek,393
|
4
|
+
argenta/app/exceptions.py,sha256=YsD4O47HKV4j0gcsMojZzTzVZKeibglom_4nI-C9wQk,293
|
5
|
+
argenta/app/models.py,sha256=jz9CVeNLk2yKG_2bNIZPjHefcASj2xN_zzp04s0x5qY,17662
|
6
|
+
argenta/app/autocompleter/__init__.py,sha256=VT_p3QA78UnczV7pYR2NnwQ0Atd8mnDUnLazvUQNqJk,93
|
7
|
+
argenta/app/autocompleter/entity.py,sha256=elt4fcKnMAjgDnqixeG9nJwdK-n--89Sjotm77NIQmw,2899
|
8
|
+
argenta/app/dividing_line/__init__.py,sha256=jJZDDZix8XYCAUWW4FzGJH0JmJlchYcx0FPWifjgv1I,147
|
9
|
+
argenta/app/dividing_line/models.py,sha256=pDHZsUhgMJOGusMigS93a-4KXM-zqdQkahCdg2wuD2A,2269
|
10
|
+
argenta/app/registered_routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
|
+
argenta/app/registered_routers/entity.py,sha256=MitA-ScXgKIBkMODFcGZhhwtbLePbgvUBsZ_G7Cvh80,1271
|
12
|
+
argenta/command/__init__.py,sha256=Plo2Da0fhq8H1eo2mg7nA1-OBLuGjK2BYpDGRvGGMIU,67
|
13
|
+
argenta/command/exceptions.py,sha256=FLX4z7-mvCTRKO7_2_FfJVUbfNLf_Z-vwyZYDy6cnnY,1030
|
14
|
+
argenta/command/models.py,sha256=-CTHYhiBYOUz-XmkNPIxC8-Ma0rb7e1uYwLodQlW4D4,6604
|
15
|
+
argenta/command/flag/__init__.py,sha256=PaZAaqU3DgyO1o5do-xKhWV6TyEuOSaQTmE4VbPY6JA,136
|
16
|
+
argenta/command/flag/defaults.py,sha256=0wCvh2l3eNU3vTuxuARVaUwhEzG3v9FID0rBbXHyK-k,982
|
17
|
+
argenta/command/flag/models.py,sha256=OYC4yfym1XPvGdtWtRFKJF48SuwZpVU3dalOIplm-zQ,6403
|
18
|
+
argenta/orchestrator/__init__.py,sha256=vFtJEJTjFfoYP3DZx0gNlhoa0Tk8u-yzkGIUN3SiABA,86
|
19
|
+
argenta/orchestrator/entity.py,sha256=HUKhoEQtiWvxeA3QhSkvTcIgwgXDLjmcB2cBFHlCGhw,1101
|
20
|
+
argenta/orchestrator/argparser/__init__.py,sha256=twfb-FQqW4QUo2XkmMASi654KGiimIbrkEzb1ZkMGzU,88
|
21
|
+
argenta/orchestrator/argparser/entity.py,sha256=nmwp7dFHTIqLvR9v0n_4j9wvtTowvLK7_SeoyaYL_RM,2145
|
22
|
+
argenta/orchestrator/argparser/arguments/__init__.py,sha256=4T55Tl_4WKOYp9HtVDmzQZylYVKA_cb3XiGoBvAyjNo,318
|
23
|
+
argenta/orchestrator/argparser/arguments/models.py,sha256=hSUXBjTsyzNKvyPgWhiNCa4SSQdmixIQnne2A9iuPMc,1546
|
24
|
+
argenta/router/__init__.py,sha256=u3nhnT8GOgbWiUmCci5u5xUIuEAt87qNOQc-cv8OTMI,70
|
25
|
+
argenta/router/defaults.py,sha256=RX3DMbZk7XUbj6uR4uADhZOPqEDoeCz9X-n26YTCCPM,87
|
26
|
+
argenta/router/entity.py,sha256=_VKcmvcPixlxqJIKsrH_KbirrtPdRIvUVtdFoEmdZ3Y,7997
|
27
|
+
argenta/router/exceptions.py,sha256=q6y-4gmbgkX-0U4-qXHDP5HTtUQ_c4svaqVILn-ZzRw,852
|
28
|
+
argenta/router/command_handler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
29
|
+
argenta/router/command_handler/entity.py,sha256=87H1jGO6O_udWDAmvfGDjpkeFCCHdbsTPnJ94r6_r70,2817
|
30
|
+
argenta-1.0.0a1.dist-info/METADATA,sha256=29ZmEBlbu1qkMgPekut1H5jn63J3hd3iXVQERyBJWSw,27366
|
31
|
+
argenta-1.0.0a1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
32
|
+
argenta-1.0.0a1.dist-info/licenses/LICENSE,sha256=zmqoGh2n5rReBv4s8wPxF_gZEZDgauJYSPMuPczgOiU,1082
|
33
|
+
argenta-1.0.0a1.dist-info/RECORD,,
|
File without changes
|
@@ -1,21 +0,0 @@
|
|
1
|
-
from argenta.router.command_handler.entity import CommandHandler
|
2
|
-
|
3
|
-
|
4
|
-
class CommandHandlers:
|
5
|
-
def __init__(self, command_handlers: list[CommandHandler] = None):
|
6
|
-
self.command_handlers = command_handlers if command_handlers else []
|
7
|
-
|
8
|
-
def get_command_handlers(self) -> list[CommandHandler]:
|
9
|
-
return self.command_handlers
|
10
|
-
|
11
|
-
def add_command_handler(self, command_handler: CommandHandler):
|
12
|
-
self.command_handlers.append(command_handler)
|
13
|
-
|
14
|
-
def add_command_handlers(self, *command_handlers: CommandHandler):
|
15
|
-
self.command_handlers.extend(command_handlers)
|
16
|
-
|
17
|
-
def __iter__(self):
|
18
|
-
return iter(self.command_handlers)
|
19
|
-
|
20
|
-
def __next__(self):
|
21
|
-
return next(iter(self.command_handlers))
|
@@ -1,601 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.3
|
2
|
-
Name: argenta
|
3
|
-
Version: 0.5.0b2
|
4
|
-
Summary: Python library for creating TUI
|
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
|
-
Requires-Dist: art (>=6.4,<7.0)
|
15
|
-
Requires-Dist: rich (>=14.0.0,<15.0.0)
|
16
|
-
Description-Content-Type: text/markdown
|
17
|
-
|
18
|
-
# Argenta
|
19
|
-
|
20
|
-
---
|
21
|
-
|
22
|
-
## Описание
|
23
|
-
**Argenta** — Python library for creating TUI
|
24
|
-
|
25
|
-

|
26
|
-
Пример внешнего вида TUI, написанного с помощью Argenta
|
27
|
-
|
28
|
-
---
|
29
|
-
|
30
|
-
# Установка
|
31
|
-
```bash
|
32
|
-
pip install argenta
|
33
|
-
```
|
34
|
-
or
|
35
|
-
```bash
|
36
|
-
poetry add argenta
|
37
|
-
```
|
38
|
-
|
39
|
-
---
|
40
|
-
|
41
|
-
# Быстрый старт
|
42
|
-
|
43
|
-
Пример простейшей оболочки с командой без зарегистрированных флагов
|
44
|
-
```python
|
45
|
-
# routers.py
|
46
|
-
from argenta.router import Router
|
47
|
-
from argenta.command import Command
|
48
|
-
|
49
|
-
|
50
|
-
router = Router()
|
51
|
-
|
52
|
-
@router.command(Command("hello"))
|
53
|
-
def handler():
|
54
|
-
print("Hello, world!")
|
55
|
-
```
|
56
|
-
|
57
|
-
```python
|
58
|
-
# main.py
|
59
|
-
from argenta.app import App
|
60
|
-
from routers import router
|
61
|
-
|
62
|
-
app: App = App()
|
63
|
-
|
64
|
-
def main() -> None:
|
65
|
-
app.include_router(router)
|
66
|
-
app.start_polling()
|
67
|
-
|
68
|
-
|
69
|
-
if __name__ == '__main__':
|
70
|
-
main()
|
71
|
-
```
|
72
|
-
Пример оболочки с командой, у которой зарегистрированы флаги
|
73
|
-
|
74
|
-
```python
|
75
|
-
# routers.py
|
76
|
-
import re
|
77
|
-
from argenta.router import Router
|
78
|
-
from argenta.command import Command
|
79
|
-
from argenta.command.flag import Flags, Flag, InputFlags
|
80
|
-
|
81
|
-
router = Router()
|
82
|
-
|
83
|
-
registered_flags = Flags(
|
84
|
-
Flag(name='host',
|
85
|
-
prefix='--',
|
86
|
-
possible_values=re.compile(r'^192.168.\d{1,3}.\d{1,3}$')),
|
87
|
-
Flag('port', '--', re.compile(r'^[0-9]{1,4}$')))
|
88
|
-
|
89
|
-
|
90
|
-
@router.command(Command("hello"))
|
91
|
-
def handler():
|
92
|
-
print("Hello, world!")
|
93
|
-
|
94
|
-
|
95
|
-
@router.command(Command(trigger="ssh",
|
96
|
-
description='connect via ssh',
|
97
|
-
flags=registered_flags))
|
98
|
-
def handler_with_flags(flags: InputFlags):
|
99
|
-
for flag in flags:
|
100
|
-
print(f'Flag name: {flag.get_name()}\n'
|
101
|
-
f'Flag value: {flag.get_value()}')
|
102
|
-
```
|
103
|
-
|
104
|
-
---
|
105
|
-
|
106
|
-
# *classes* :
|
107
|
-
|
108
|
-
---
|
109
|
-
|
110
|
-
## *class* : : `App`
|
111
|
-
Класс, определяющий поведение и состояние оболочки
|
112
|
-
|
113
|
-
### Конструктор
|
114
|
-
```python
|
115
|
-
App(prompt: str = '[italic dim bold]What do you want to do?\n',
|
116
|
-
initial_message: str = '\nArgenta\n',
|
117
|
-
farewell_message: str = '\nSee you\n',
|
118
|
-
exit_command: Command = Command('Q', 'Exit command'),
|
119
|
-
system_points_title: str | None = 'System points:',
|
120
|
-
ignore_command_register: bool = True,
|
121
|
-
dividing_line: StaticDividingLine | DynamicDividingLine = StaticDividingLine(),
|
122
|
-
repeat_command_groups: bool = True,
|
123
|
-
override_system_messages: bool = False,
|
124
|
-
autocompleter: AutoCompleter = AutoCompleter(),
|
125
|
-
print_func: Callable[[str], None] = Console().print)
|
126
|
-
```
|
127
|
-
**Аргументы:**
|
128
|
-
- **name : mean**
|
129
|
-
- `prompt` (`str`): Сообщение перед вводом команды.
|
130
|
-
- `initial_message` (`str`): Приветственное сообщение при запуске.
|
131
|
-
- `farewell_message` (`str`): Сообщение при выходе.
|
132
|
-
- `exit_command` (`Command`): Сущность команды, которая будет отвечать за завершение работы.
|
133
|
-
- `system_points_title` (`str`): Заголовок перед списком системных команд.
|
134
|
-
- `ignore_command_register` (`bool`): Игнорировать регистр всех команд.
|
135
|
-
- `dividing_line` (`StaticDividingLine | DynamicDividingLine`): Разделительная строка.
|
136
|
-
- `repeat_command_groups` (`bool`): Повторять описание команд перед вводом.
|
137
|
-
- `override_system_messages` (`bool`): Переопределить ли дефолтное оформление сообщений ([подробнее см.](#override_defaults))
|
138
|
-
- `autocompleter` (`AutoCompleter`): Сущность автодополнителя ввода.
|
139
|
-
- `print_func` (`Callable[[str], None]`): Функция вывода текста в терминал.
|
140
|
-
|
141
|
-
---
|
142
|
-
|
143
|
-
### ***methods***
|
144
|
-
|
145
|
-
---
|
146
|
-
|
147
|
-
#### **.start_polling() -> `None`**
|
148
|
-
|
149
|
-
*method mean* **::** Запускает цикл обработки ввода
|
150
|
-
|
151
|
-
---
|
152
|
-
|
153
|
-
#### **.include_router(router: Router) -> `None`**
|
154
|
-
|
155
|
-
*param* `router: Router` **::** Регистрируемый роутер
|
156
|
-
*required* **::** True
|
157
|
-
|
158
|
-
*method mean* **::** Регистрирует роутер в оболочке
|
159
|
-
|
160
|
-
---
|
161
|
-
|
162
|
-
#### **.include_routers(\*routers: Router) -> `None`**
|
163
|
-
|
164
|
-
*param* `routers: Router` **::** Неограниченное количество регистрируемых роутеров
|
165
|
-
*required* **::** True
|
166
|
-
|
167
|
-
*method mean* **::** Регистрирует роутер в оболочке
|
168
|
-
|
169
|
-
---
|
170
|
-
|
171
|
-
#### **.set_description_message_pattern(pattern: str) -> `None`**
|
172
|
-
|
173
|
-
*param* `pattern: str` **::** Паттерн описания команды при её выводе в консоль
|
174
|
-
*required* **::** True
|
175
|
-
*example* **::** `"[{command}] *=*=* {description}"`
|
176
|
-
|
177
|
-
*method mean* **::** Устанавливает паттерн описания команд, который будет использован
|
178
|
-
при выводе в консоль
|
179
|
-
|
180
|
-
---
|
181
|
-
|
182
|
-
#### **.add_message_on_startup(message: str) -> `None`**
|
183
|
-
|
184
|
-
*param* `message: str` **::** Сообщение, которое будет выведено при запуске приложения
|
185
|
-
*required* **::** True
|
186
|
-
*example* **::** `Message on startup`
|
187
|
-
|
188
|
-
*method mean* **::** Устанавливает паттерн описания команд, который будет использован
|
189
|
-
при выводе в консоль
|
190
|
-
|
191
|
-
---
|
192
|
-
|
193
|
-
<a name="custom_handler"></a>
|
194
|
-
#### **.repeated_input_flags_handler: `Callable[[str], None])`**
|
195
|
-
|
196
|
-
*example* **::** `lambda raw_command: print_func(f'Repeated input flags: "{raw_command}"')`
|
197
|
-
|
198
|
-
*attr mean* **::** Устанавливает функцию, которой будет передано управление при
|
199
|
-
вводе юзером повторяющихся флагов
|
200
|
-
|
201
|
-
---
|
202
|
-
|
203
|
-
#### **.invalid_input_flags_handler: `Callable[[str], None])`**
|
204
|
-
|
205
|
-
*example* **::** `lambda raw_command: print_func(f'Incorrect flag syntax: "{raw_command}"')`
|
206
|
-
|
207
|
-
*attr mean* **::** Устанавливает функцию, которой будет передано управление при
|
208
|
-
вводе юзером команды с некорректным синтаксисом флагов
|
209
|
-
|
210
|
-
---
|
211
|
-
|
212
|
-
#### **.unknown_command_handler: `Callable[[str], None]`**
|
213
|
-
|
214
|
-
*example* **::** `lambda command: print_func(f"Unknown command: {command.get_string_entity()}")`
|
215
|
-
|
216
|
-
*attr mean* **::** Устанавливает функцию, которой будет передано управление при
|
217
|
-
вводе юзером неизвестной команды
|
218
|
-
|
219
|
-
---
|
220
|
-
|
221
|
-
#### **.empty_command_handler: `Callable[[str], None])`**
|
222
|
-
|
223
|
-
*example* **::** `lambda: print_func(f'Empty input command')`
|
224
|
-
|
225
|
-
*attr mean* **::** Устанавливает функцию, которой будет передано управление при
|
226
|
-
вводе юзером пустой команды
|
227
|
-
|
228
|
-
---
|
229
|
-
|
230
|
-
### Примечания
|
231
|
-
|
232
|
-
- В устанавливаемом паттерне сообщения описания команды необходимы быть два ключевых слова:
|
233
|
-
`command` и `description`, каждое из которых должно быть заключено в фигурные скобки, после обработки
|
234
|
-
паттерна на места этих ключевых слов будут подставлены соответствующие атрибуты команды, при отсутствии
|
235
|
-
этих двух ключевых слов будет вызвано исключение `InvalidDescriptionMessagePatternException`
|
236
|
-
|
237
|
-
- Команды оболочки не должны повторяться, при значении атрибута `ignore_command_register` равным `True`
|
238
|
-
допускается создание обработчиков для разных регистров одинаковых символов в команде, для примера `u` и `U`,
|
239
|
-
при значении атрибута `ignore_command_register` класса `App` равным `False` тот же пример вызывает исключение
|
240
|
-
`RepeatedCommandInDifferentRoutersException`. Исключение вызывается только при наличии пересекающихся команд
|
241
|
-
у __<u>разных</u>__ роутеров
|
242
|
-
|
243
|
-
- Наиболее частые сообщение при запуске предопределены и доступны для быстрого
|
244
|
-
использования: `argenta.app.defaults.PredeterminedMessages`
|
245
|
-
|
246
|
-
<a name="override_defaults"></a>
|
247
|
-
- Если `override_system_messages`=`False`, то при переопределении таких атрибутов как `initial_message` и
|
248
|
-
`farawell_message` будет использовано дефолтное оформление текста, в виде красного ascii арта, при значении
|
249
|
-
`override_system_messages`=`True` системные сообщения будут отображены в точности какими были переданы
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
### Исключения
|
255
|
-
|
256
|
-
- `InvalidRouterInstanceException` — Переданный объект в метод `App().include_router()` не является экземпляром класса `Router`.
|
257
|
-
- `InvalidDescriptionMessagePatternException` — Неправильный формат паттерна описания команд.
|
258
|
-
- `IncorrectNumberOfHandlerArgsException` — У обработчика нестандартного поведения зарегистрировано неверное количество аргументов(в большинстве случаев у него должен быть один аргумент).
|
259
|
-
- `NoRegisteredHandlersException` — У роутера нет ни одного обработчика команд.
|
260
|
-
|
261
|
-
---
|
262
|
-
|
263
|
-
## *class* :: `AutoCompleter`
|
264
|
-
Класс, экземпляр которого представляет собой автодополнитель ввода
|
265
|
-
|
266
|
-
### Конструктор
|
267
|
-
```python
|
268
|
-
AutoCompleter(history_filename: str = False,
|
269
|
-
autocomplete_button: str = 'tab')
|
270
|
-
```
|
271
|
-
|
272
|
-
**Аргументы:**
|
273
|
-
- **name : mean**
|
274
|
-
- `history_filename` (`str` | `False`): Путь к файлу, который будет являться или является
|
275
|
-
историй пользовательского ввода, в последующем эти команды будут автодополняться, файл
|
276
|
-
может не существовать при инициализации, тогда он будет создан, при значении аргумента `False`
|
277
|
-
история пользовательского ввода будет существовать только в пределах сессии и не сохраняться в файл
|
278
|
-
- `autocomplete_button` (`str`): Строковое обозначение кнопки на клавиатуре, которая будет
|
279
|
-
использоваться для автодополнения при вводе, по умолчанию `tab`
|
280
|
-
|
281
|
-
---
|
282
|
-
|
283
|
-
## *class* :: `StaticDivideLine`
|
284
|
-
Класс, экземпляр которого представляет собой строковый разделитель фиксированной длины
|
285
|
-
|
286
|
-
### Конструктор
|
287
|
-
```python
|
288
|
-
StaticDivideLine(unit_part: str = '-',
|
289
|
-
length: int = 25)
|
290
|
-
```
|
291
|
-
|
292
|
-
**Аргументы:**
|
293
|
-
- **name : mean**
|
294
|
-
- `unit_part` (`str`): Единичная часть строкового разделителя
|
295
|
-
- `length` (`int`): Длина строкового разделителя
|
296
|
-
|
297
|
-
---
|
298
|
-
|
299
|
-
## *class* :: `DinamicDivideLine`
|
300
|
-
Строковый разделитель динамической длины, которая определяется длиной обрамляемого вывода команды
|
301
|
-
|
302
|
-
### Конструктор
|
303
|
-
```python
|
304
|
-
DinamicDivideLine(unit_part: str = '-')
|
305
|
-
```
|
306
|
-
|
307
|
-
**Аргументы:**
|
308
|
-
- **name : mean**
|
309
|
-
- `unit_part` (`str`): Единичная часть строкового разделителя
|
310
|
-
|
311
|
-
---
|
312
|
-
|
313
|
-
## *class* :: `Router`
|
314
|
-
Класс, который определяет и конфигурирует обработчики команд
|
315
|
-
|
316
|
-
### Конструктор
|
317
|
-
```python
|
318
|
-
Router(title: str | None = None,
|
319
|
-
name: str = 'Default')
|
320
|
-
```
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
**Аргументы:**
|
325
|
-
- **name : mean**
|
326
|
-
- `title` (`str`): Заголовок группы команд.
|
327
|
-
- `name` (`str`): Персональное название роутера
|
328
|
-
|
329
|
-
---
|
330
|
-
|
331
|
-
### ***methods***
|
332
|
-
|
333
|
-
---
|
334
|
-
|
335
|
-
#### **command(command: Command)**
|
336
|
-
|
337
|
-
*param* `command: Command` **::** Экземпляр класса `Command`, который определяет строковый триггер команды,
|
338
|
-
допустимые флаги команды и другое
|
339
|
-
*required* **::** True
|
340
|
-
*example* **::** `Command(command='ssh', description='connect via ssh')`
|
341
|
-
|
342
|
-
*method mean* **::** Декоратор, который регистрирует функцию как обработчик команды
|
343
|
-
|
344
|
-
---
|
345
|
-
|
346
|
-
#### **.get_name() -> `str`**
|
347
|
-
|
348
|
-
*method mean* **::** Возвращает установленное название роутера
|
349
|
-
|
350
|
-
---
|
351
|
-
|
352
|
-
#### **.get_title() -> `str`**
|
353
|
-
|
354
|
-
*method mean* **::** Возвращает установленный заголовок группы команд данного роутера
|
355
|
-
|
356
|
-
---
|
357
|
-
|
358
|
-
|
359
|
-
### Исключения
|
360
|
-
- `RepeatedFlagNameException` - Повторяющиеся зарегистрированные флаги в команде
|
361
|
-
- `TooManyTransferredArgsException` - Слишком много зарегистрированных аргументов у обработчика команды
|
362
|
-
- `RequiredArgumentNotPassedException` - Не зарегистрирован обязательный аргумент у обработчика команды(аргумент, через который будут переданы флаги введённой команды)
|
363
|
-
- `IncorrectNumberOfHandlerArgsException` - У обработчика нестандартного поведения зарегистрировано неверное количество аргументов(в большинстве случаев у него должен быть один аргумент)
|
364
|
-
- `TriggerCannotContainSpacesException` - У регистрируемой команды в триггере содержатся пробелы
|
365
|
-
|
366
|
-
---
|
367
|
-
|
368
|
-
## *class* :: `Command`
|
369
|
-
Класс, экземпляр которого определяет строковый триггер хэндлера и конфигурирует его атрибуты
|
370
|
-
|
371
|
-
### Конструктор
|
372
|
-
```python
|
373
|
-
Command(trigger: str,
|
374
|
-
description: str = None,
|
375
|
-
flags: Flag | Flags = None)
|
376
|
-
```
|
377
|
-
|
378
|
-
**Аргументы:**
|
379
|
-
- **name : mean**
|
380
|
-
- `trigger` (`str`): Строковый триггер
|
381
|
-
- `description` (`str`): Описание команды, которое будет выведено в консоль при запуске оболочки
|
382
|
-
- `flags` (`Flag | Flags`): Флаги, которые будут обработаны при их наличии во вводе юзера
|
383
|
-
|
384
|
-
---
|
385
|
-
|
386
|
-
#### **.get_trigger() -> `str`**
|
387
|
-
|
388
|
-
*method mean* **::** Возвращает строковый триггер экземпляра
|
389
|
-
|
390
|
-
---
|
391
|
-
|
392
|
-
#### **.get_description() -> `str`**
|
393
|
-
|
394
|
-
*method mean* **::** Возвращает описание команды
|
395
|
-
|
396
|
-
---
|
397
|
-
|
398
|
-
#### **.get_registered_flags() -> `Flags | None`**
|
399
|
-
|
400
|
-
*method mean* **::** Возвращает зарегистрированные флаги экземпляра
|
401
|
-
|
402
|
-
---
|
403
|
-
|
404
|
-
### Исключения
|
405
|
-
- `UnprocessedInputFlagException` - Некорректный синтаксис ввода команды
|
406
|
-
- `RepeatedInputFlagsException` - Повторяющиеся флаги во введённой команде
|
407
|
-
- `EmptyInputCommandException` - Введённая команда является пустой(не содержит символов)
|
408
|
-
|
409
|
-
**Примечание**
|
410
|
-
Все вышеуказанные исключения класса `Command` вызываются в рантайме запущенным экземпляром класса
|
411
|
-
`App`, а также по дефолту обрабатываются, при желании можно задать пользовательские
|
412
|
-
обработчики для этих исключений ([подробнее см.](#custom_handler))
|
413
|
-
|
414
|
-
---
|
415
|
-
|
416
|
-
## *class* :: `Flag`
|
417
|
-
Класс, экземпляры которого в большинстве случаев передаются при создании
|
418
|
-
экземпляра класса `Command` для регистрации допустимого флага при вводе юзером команды
|
419
|
-
|
420
|
-
### Конструктор
|
421
|
-
```python
|
422
|
-
Flag(name: str,
|
423
|
-
prefix: typing.Literal['-', '--', '---'] = '-',
|
424
|
-
possible_values: list[str] | typing.Pattern[str] | False = True)
|
425
|
-
```
|
426
|
-
|
427
|
-
---
|
428
|
-
|
429
|
-
**Аргументы:**
|
430
|
-
- **name : mean**
|
431
|
-
- `name` (`str`): Имя флага
|
432
|
-
- `prefix` (`Literal['-', '--', '---']`): Префикс команды, допустимым значением является от одного до трёх минусов
|
433
|
-
- `possible_values` (`list[str] | Pattern[str] | bool`): Множество допустимых значений флага, может быть задано
|
434
|
-
списком с допустимыми значениями или регулярным выражением (рекомендуется `re.compile(r'example exspression')`), при значении
|
435
|
-
аргумента `False` у введённого флага не может быть значения, иначе будет вызвано исключение и обработано соответствующим
|
436
|
-
еррор-хэндлером
|
437
|
-
|
438
|
-
---
|
439
|
-
|
440
|
-
### ***methods***
|
441
|
-
|
442
|
-
---
|
443
|
-
|
444
|
-
#### **.get_string_entity() -> `str`**
|
445
|
-
|
446
|
-
*method mean* **::** Возвращает строковое представление флага(префикс + имя)
|
447
|
-
|
448
|
-
---
|
449
|
-
|
450
|
-
#### **.get_name() -> `str`**
|
451
|
-
|
452
|
-
*method mean* **::** Возвращает имя флага
|
453
|
-
|
454
|
-
---
|
455
|
-
|
456
|
-
#### **.get_prefix() -> `str`**
|
457
|
-
|
458
|
-
*method mean* **::** Возвращает префикс флага
|
459
|
-
|
460
|
-
---
|
461
|
-
|
462
|
-
## *class* :: `InputFlag`
|
463
|
-
Класс, экземпляры которого являются введёнными флагами команды, передаётся в хэндлер команды
|
464
|
-
через `InputFlags`
|
465
|
-
|
466
|
-
---
|
467
|
-
|
468
|
-
### Примечания
|
469
|
-
|
470
|
-
- Наиболее часто используемые флаги предопределены и доступны для быстрого использования:
|
471
|
-
`argenta.command.flag.defaults.PredeterminedFlags`
|
472
|
-
|
473
|
-
---
|
474
|
-
|
475
|
-
|
476
|
-
### Конструктор
|
477
|
-
```python
|
478
|
-
InputFlag(name: str,
|
479
|
-
prefix: typing.Literal['-', '--', '---'] = '-',
|
480
|
-
value: str = None)
|
481
|
-
```
|
482
|
-
|
483
|
-
---
|
484
|
-
|
485
|
-
**Аргументы:**
|
486
|
-
- **name : mean**
|
487
|
-
- `name` (`str`): Имя флага
|
488
|
-
- `prefix` (`Literal['-', '--', '---']`): Префикс команды, допустимым значением является от одного до трёх минусов
|
489
|
-
- `value` (`str`): Значение введённого флага, если оно есть
|
490
|
-
|
491
|
-
---
|
492
|
-
|
493
|
-
### ***methods***
|
494
|
-
|
495
|
-
---
|
496
|
-
|
497
|
-
#### **.get_value() -> `str | None`**
|
498
|
-
|
499
|
-
*method mean* **::** Возвращает значение введённого флага
|
500
|
-
|
501
|
-
---
|
502
|
-
|
503
|
-
## *class* :: `Flags`
|
504
|
-
Класс, объединяющий список флагов в один объект, используется в качестве
|
505
|
-
передаваемого аргумента `flags` экземпляру класса `Command`, при регистрации
|
506
|
-
хэндлера
|
507
|
-
|
508
|
-
### Конструктор
|
509
|
-
```python
|
510
|
-
Flags(*flags: Flag)
|
511
|
-
```
|
512
|
-
|
513
|
-
---
|
514
|
-
|
515
|
-
**Аргументы:**
|
516
|
-
- **name : mean**
|
517
|
-
- `*flags` (`Flag`): Неограниченное количество передаваемых флагов
|
518
|
-
|
519
|
-
---
|
520
|
-
|
521
|
-
### ***methods***
|
522
|
-
|
523
|
-
---
|
524
|
-
|
525
|
-
#### **.get_flags() -> `list[Flag]`**
|
526
|
-
|
527
|
-
*method mean* **::** Возвращает зарегистрированные флаги
|
528
|
-
|
529
|
-
---
|
530
|
-
|
531
|
-
#### **.add_flag(flag: Flag) -> `None`**
|
532
|
-
|
533
|
-
*method mean* **::** Добавляет флаг в группу
|
534
|
-
|
535
|
-
---
|
536
|
-
|
537
|
-
#### **.add_flags(flags: list[Flag]) -> `None`**
|
538
|
-
|
539
|
-
*method mean* **::** Добавляет флаги в группу
|
540
|
-
|
541
|
-
---
|
542
|
-
|
543
|
-
#### **.get_flag(name: str) -> `Flag | None`**
|
544
|
-
|
545
|
-
*param* `name: str` **::** Строковый триггер флага без префикса
|
546
|
-
*required* **::** True
|
547
|
-
*example* **::** `'host'`
|
548
|
-
|
549
|
-
*method mean* **::** Возвращает флаг по его триггеру или `None`, если флаг не найден
|
550
|
-
|
551
|
-
---
|
552
|
-
|
553
|
-
## *class* :: `InputFlags`
|
554
|
-
Класс, объединяющий список введённых флагов в один объект, передаётся соответствующему хэндлеру
|
555
|
-
в качестве аргумента
|
556
|
-
|
557
|
-
### Конструктор
|
558
|
-
```python
|
559
|
-
InputFlags(*flags: Flag)
|
560
|
-
```
|
561
|
-
|
562
|
-
---
|
563
|
-
|
564
|
-
**Аргументы:**
|
565
|
-
- **name : mean**
|
566
|
-
- `*flags` (`InputFlag`): Неограниченное количество передаваемых флагов
|
567
|
-
|
568
|
-
---
|
569
|
-
|
570
|
-
### ***methods***
|
571
|
-
|
572
|
-
---
|
573
|
-
|
574
|
-
#### **.get_flags() -> `list[Flag]`**
|
575
|
-
|
576
|
-
*method mean* **::** Возвращает введённые флаги
|
577
|
-
|
578
|
-
---
|
579
|
-
|
580
|
-
#### **.get_flag(name: str) -> `InputFlag | None`**
|
581
|
-
|
582
|
-
*param* `name: str` **::** Строковый триггер флага без префикса
|
583
|
-
*required* **::** True
|
584
|
-
*example* **::** `'host'`
|
585
|
-
|
586
|
-
*method mean* **::** Возвращает введённый флаг по его триггеру или `None`, если флаг не найден
|
587
|
-
|
588
|
-
---
|
589
|
-
|
590
|
-
# Тесты
|
591
|
-
|
592
|
-
Запуск тестов:
|
593
|
-
|
594
|
-
```bash
|
595
|
-
python -m unittest discover
|
596
|
-
```
|
597
|
-
or
|
598
|
-
```bash
|
599
|
-
python -m unittest discover -v
|
600
|
-
```
|
601
|
-
|