A High-performance, Generality, Humane Command Line Arguments Parser Library.
Project description
Alconna
About
Alconna
is a powerful cli tool for parsing message chain or other raw message data. It is an overload version of CommandAnalysis
, affiliated to ArcletProject
.
Alconna
has a large number of built-in components and complex parsing functions. But do not afraid, you can use it as a simple command parser.
Installation
pip
$ pip install --upgrade arclet-alconna
Documentation
Official Document : ����Link
Relevant Document : ����Docs
A Simple Example
from arclet.alconna import Alconna, Option, Subcommand, Args
cmd = Alconna(
"/pip",
options=[
Subcommand("install", [Option("-u|--upgrade")], Args.pak_name[str]),
Option("list"),
]
)
result = cmd.parse("/pip install cesloi --upgrade") # This method returns an 'Arpamar' class instance.
print(result.query('install')) # Or result.install
Output as follows:
{'value': None, 'args': {'pak_name': 'cesloi'}, 'options': {'upgrade': Ellipsis}}
With Simple Callback
from arclet.alconna import Alconna, Option, Args
from arclet.alconna.builtin.construct import ALCCommand
def send_message(message: str, to: str = None):
print(f"sending {message} to {to}")
command = ALCCommand(
Alconna("send_message", Args.message[str]) + Option("-t|--to", Args.to[str]),
send_message
)
command("send_message -t Alconna hello")
Output as follows:
sending hello to Alconna
Communication
QQ Group: Link
Features
- High Performance. On i5-10210U, performance is about
41000~101000 msg/s
; test script: benchmark - Simple and Flexible Constructor
- Powerful Automatic Type Parse and Conversion
- Support Synchronous and Asynchronous Actions
- Customizable HelpFormatter and Analyser
- Customizable Language File, Support i18n
- Cache of input command for quick response of repeated command
- Various Features (Duplication, FuzzyMatch, etc.)
Example of Type Conversion:
from arclet.alconna import Alconna, Args
from pathlib import Path
read = Alconna(
"read", Args["data", bytes],
action=lambda data: print(type(data))
)
read.parse(["read", b'hello'])
read.parse("read test_fire.py")
read.parse(["read", Path("test_fire.py")])
'''
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
'''
Example of FuzzyMatch:
from arclet.alconna import Alconna
alc = Alconna('!test_fuzzy', "foo:str", is_fuzzy_match=True)
alc.parse("���test_fuzy foo bar")
'''
���test_fuzy not matched. Are you mean "!test_fuzzy"?
'''
Example of typing
Support:
from typing import Annotated # or typing_extensions.Annotated
from arclet.alconna import Alconna, Args
alc = Alconna("test", Args.foo[Annotated[int, lambda x: x % 2 == 0]])
alc.parse("test 2")
alc.parse("test 3")
'''
'foo': 2
ParamsUnmatched: param 3 is incorrect
'''
License
Alconna is licensed under the MIT License.
Acknowledgement
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
arclet-alconna-1.1.2.3.tar.gz
(57.0 kB
view hashes)
Built Distribution
Close
Hashes for arclet_alconna-1.1.2.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 35efdb3fcdea8d8429a568b777d7112b7fc1a5c28db2736de78256b586495769 |
|
MD5 | 7cfad856e4628ac66ebe7ca70d603d5b |
|
BLAKE2b-256 | 283fbbae20d781fc99b3b54d91240239b210e9088a51c819c8fe84ce73d017f1 |