- Sistana 命令解析引擎。Sistana 是重新设计的新一代命令解析引擎,支持软关键字(Soft Keyword)、快照等新特性,提供了更高效的前缀匹配、紧凑参数/指令、分析中断等能力。
- 该功能当前属实验性功能,不默认启用。
- Sistana 与部分 Alconna 特性冲突或使其不工作。
- Sistana 尚未得到高度优化或活用其特性,可能存在性能问题。
- Sistana (及其上游库)仅支持 Python 3.9 及以上版本。
- Sistana 对各种特性的兼容性尚未完全测试。
- 补全时参数的自定义提示与参数名的组合方式现在可以通过
lang.set("completion", "prompt_arg", xxx)
来设置
- 允许为特定命名空间设置特定的 Argv 类型
- 若快捷指令的 key 以
^
为前缀,则发出警告,然后^
会被去除,并且对应的command会添加命令前缀之一
- 修复解析快捷命令时处理换行的行为与正常行为不一致的问题
- 修复 Args 读取到的字符串参数属于某个选项/子命令的名字时的错误行为
- 使用
Tarina
0.6.0, 以正确处理如search XXX's life
的字符串
- Args 的
__repr__
现在与__str__
做区分,提供更多信息
- 修复
analyse_param
允许 subcommand 重复解析的问题
- 内置行为器
conflict
, 可以用来规定冲突选项/子命令/参数:
from arclet.alconna import Alconna, Option, conflict
alc = Alconna("cmd", Option("--foo"), Option("--bar"), conflict("foo", "bar"))
alc()
$ python conflict.py cmd --foo --bar
选项 foo 与 选项 bar 冲突
- 子节点的帮助现在会把前面的文本部分加上
- 传入
CommandMeta
,behavior
时现在不需要关键字
- 升级
Tarina
依赖版本以避免特定python版本下特定字符串导致的 segfault 问题
- 修复 Args 上所有参数都没有默认值时,
default
仍然被设置的问题
Option
和Subcommand
在传入OptionResult/SubcommandResult
以外的default
时, 如果其 Args 不为空, 则default
会自动作为Result.args
的值- 若
Option
或Subcommand
未传入default
, 并且其 Args 不为空, 则其Result.args
会被设置为 Args 上所有参数的默认值(如果有的话)
header_match.origin
现在在快捷指令匹配成功的情况下会改为其触发词(key)
- 修复
command_manager
关于持久化快截指令的部分
- 更改关于 namespace 下禁用内置选项的默认值
AllParam
现在可以指定其允许的参数类型:AllParam(str)
,同时增加参数ignore
用于决定是否忽略允许类型之外的参数被收集
- 命令头的模糊匹配检查现在会在快捷指令检查后进行
- 主命令/子命令在缺失主参数时的错误提示现在会先使用主参数自定义的错误提示
Option
名字设置成--
时不会去除前缀
Arg
等类型参数的构造函数中的类型修复
MultiVar
的 optional 现在会生效了
Arparma.source
现在返回的是对应的Alconna
对象
- 增加一个特殊类型
StrMulti
, 用于匹配多个字符串, 并将结果通过str.join
合并:
from arclet.alconna import Alconna, Args, Option, StrMulti
alc = Alconna(
"music", Args["song_name", StrMulti],
Option("--artist", Args["artist_name", StrMulti])
)
res = alc.parse("music hello world --artist adele")
# {'song_name': 'hello world', 'artist_name': 'adele'}
shortcut
的 wrapper 现在兼容 1.8.18 前的写法(无 context 参数)shortcut
在fuzzy
为 False 时的表现
shortcut
的 wrapper 现在需要context
参数command_manager.update
现在会清除先前的命令缓存
- 修复传入参数为其他
逻辑值为 False
时参数无法识别的问题
- 更改
namespace
会覆盖先前已挂载的命名空间配置的问题
- 更改
Alconna
在 manager 中的索引形式以避免weakref.ref
的错误行为
shortcut
的 key 支持正则表达式对象 (re.Pattern[str]
)
- 修复
shortcut
错误处理非字符串参数的问题
AllParam
现在不会将剩余字符串参数进行分割
- 升级
Tarina
至 0.5.0 以更新 i18n 文件
- 快捷指令处理数据时会尝试把带分隔符的字符串用引号包裹
- 修复
Bracket Header
的正则表达式丢失问题
- 适配
NEPattern
0.7.0
- 修复传入命令首个元素非字符串时能错误触发快捷指令的问题
- 修复子命令在自身名称解析失败时其结果被错误存储的问题
- 头部解析逻辑拆分
- 修复 manager 更新命令时未使用
Argv
的 cache 问题
- 帮助信息现在会显示命令的快捷指令
-
Alconna.shortcut
新增参数humanized
,用于指定快捷指令的可读性文本以供显示from arclet.alconna import Alconna, Args alc = Alconna("test", Args["foo", int]) alc.shortcut("t(\d+)", command="test {0}", humanized="t[数字]")
-
CommandMeta
新增属性hide_shortcut
, 用于在帮助信息里隐藏命令的快捷指令
- 修复
Alconna
的 aliases (继承自subcommand的) 错误
-
command_manager.update
上下文方法,用于修改 Alconna 对象后更新与其绑定的其他组件from arclet.alconna import Args, Alconna, Option, command_manager alc = Alconna("test") with command_manager.update(alc): alc.prefixes = ["!"] alc.add(Option("foo", Args["bar", int]))
- 修复
shortcut.wrapper
的处理逻辑
- 修复
manager.get_shortcuts
的错误
- 删除
ContextVal
表达式
Namespace
与CommandMeta
新增context_style
属性,用于指定命令插值的格式,不填入则默认不启用插值:from dataclasses import dataclass from arclet.alconna import Alconna, Args, CommandMeta alc = Alconna("test", Args["foo", str], meta=CommandMeta(context_style="bracket")) @dataclass class User: id: str @dataclass class Session: user: User arp = alc.parse( "test {session.user.id}", {"session": Session(user=User(id="123"))} ) assert arp.query[str]("foo") == "123"
- 命令插值的结果现在受类型约束
此版本为长期支持版本 (LTS),同时为 v1.x 与 v2.0 之间的过渡版本
用户侧
Args.__init__
不再接受**kwargs
参数Alconna.parse
不再接受duplication
参数;请直接使用Duplication(Arparma)
fuzzy_threshold
参数移至Namespace
开发侧
NEPattern
依赖升级至 0.6.x- 移除兼容名称
Arpamar
与DataCollectionContainer
-
Alconna.parse
新增ctx: dict[str, Any]
参数,用于传入上下文.- 用户可以通过
$argv.overrides
参数来覆盖 Argv 的属性
- 用户可以通过
-
Arparma
新增context
参数,与Alconna.parse
的ctx
参数对应- 当触发快捷指令后,用户可以通过
$shortcut.trigger
,$shortcut.args
,$shortcut.rest
来获取快捷指令的信息
- 当触发快捷指令后,用户可以通过
-
新增
ContextVal
表达式,可以依据用户传入的指定键从ctx
中获取值ContextVal
默认格式为$(KEY)
, 其中KEY
为ctx
中的键- 使用
ContextVal(style="bracket")
可以将ContextVal
的格式改为{KEY}
- 指定键支持 eval 表达式,如
$(session.user.id)
,$(session.user.name[1:])
ContextVal
支持只允许指定的键,如ContextVal("session", "event")
from dataclasses import dataclass from arclet.alconna import Alconna, Args, ContextVal alc = Alconna("test", Args["foo", ContextVal(style="bracket")]) @dataclass class User: id: str @dataclass class Session: user: User arp = alc.parse( "test {session.user.id}", {"session": Session(user=User(id="123"))} ) assert arp.query[str]("foo") == "123"
Subcommand
可以设置别名了Alconna
的前缀可以在最尾端塞分隔符
- 修复类型提示错误
- 修复
shortcut list
的错误
- 允许快捷指令的关键词传入带有分隔符的命令
- 修复快捷指令使用
_
时的异常错误
- 设置了 completion 的 Arg 在输出文本中会显示其名字
- 修复
Alconna.__call__
接受 sys.argv[1:] 时没有处理引号包裹的参数的 bug
Args
现在可以设置多个 MultiVar 参数- 可以通过
config.remainder
配置字符来设置多个多参数之间的分隔符
- 可以通过
Namespace
或CommandMeta
的strict
参数来控制是否允许将多余的命令参数作为 “$extra" 参数写入
- 修复快捷指令存在意外匹配的问题
- 修复
Formatter
未能正确遍历节点的 bug
- 修复
command_manager.dump
- 修复
CompSession
在执行过程中受到其他命令解析干扰的问题
Alconna.shortcut
可以用关键字参数传入command
与args
了- 允许提供参数来额外处理
shortcut
的正则匹配结果
- 修改换行处理
- 为 completion 下提示列出的选中符号和未选中符号添加 i18n 支持
- 修复
Option
与Subcommand
模糊匹配的文本错误
- 修复补全会话下参数过多引起补全错误触发的问题
- 可以选择配置禁用哪些内置选项
- 自定义的与内置选项名称有冲突的选项 (例如 --help) 在禁用内置选项后能正常解析
- 改进
CommandMeta
- 改进命令头的显示方式
- 修复模糊匹配中错误的判断逻辑
- 可通过
Arg.field
添加关于参数的自定义错误提示 by @CMHopeSunshine in #81
- 修复
UnpackVar
的kw_only
参数未生效的问题
- 修复补全会话下补全的命令存在空字符串的问题
- 补全会话现在会处理参数类型错误的情况
Arparma.call
现在会考虑函数的默认值
- 修复头部匹配为空时 shortcut 错误运行的问题
- 修复
shortcut
下 prefix 未转义的问题
UnpackVar
现在支持kw_only
参数UnpackVar
现在支持给 kw 参数指定分隔符
- 修复
UnpackVar
的分隔符未跟随源参数的 bug - 修复
UnpackVar
处理kw_only
未生效的 bug
- 处理 Args 时如果传入的参数是内置特殊选项的名字,则优先退出参数解析 (如
--help
) - 修复
Formatter
未能正确处理Subcommand
的 bug
- 处理 Args 时如果传入的参数同时是某个选项/子命令的名字,只有在参数设为
optional=True
才会退出参数解析
- 升级
NEPattern
至 0.5.14
- 当 shortcut 的
command
参数为$
时,快捷指令将会使用源指令的命令名 - ShortcutArgs 的
fuzzy
参数为False
时,快捷指令将是严格匹配(即不允许前缀匹配) - ShortcutArgs 的
fuzzy
参数为True
时,快捷指令将是模糊匹配(即允许前缀匹配),并且多余的字符会被作为参数写入 - shortcut 的参数中
command
现在的默认值是$
而非_
- 修改了文字拼写错误
- 加入
UnpackVar
,其接受dataclass
并转为 Args,将解析结果构造为 dcls 实例 - 增加
Arparma.addition
类方法,用来为Arparma.call
增加额外参数的工厂函数
Arparma.query
改用描述器实现,并支持如arp.query[int]("foo.bar")
的语法,以替代原先的query_with
(query_with 方法仍然保留)Arparma[...]
增加如arp[int, 2]
的支持,即选择第 i 个匹配类型的参数
ShortcutArgs
加入一个prefix: bool
参数,控制快捷指令是否保留源指令的前缀
- 内置选项
shortcut
的第一个参数加入了list
, 用于展示该命令下的所有快捷指令
Argv
在 checker 失败后现在会尝试使用 converter 转换为正确的类型ShortcutArgs
中 command 的 slot 现在会保留尾随参数的类型,而不是全部转换为 str
ShortcutArgs
中 slot 的 index 现在正确指向尾随参数的位置
Formatter
现只接受某些名称相同的命令
- 修复因
nepattern
0.5.13 的改动导致的 bug
- 升级
nepattern
依赖至 0.5.13 __init__.py
内使用 re-export 格式
- 修复
Arparma.fail
的问题
- 修复帮助信息生成时节点遍历的错误
- 两个 Alconna 之间支持相加操作,其结果为左边的 Alconna, 但是其 options 合并了右边命令 的 options
Args.from_callable
增加一个kw_sep
参数来自定义 kw 参数的分隔符- 两个 Alconna 相加
- 修复 kwonly 参数的名字携带
-
时无法解析的 bug
- multi keyword 参数的键值分隔符现在不允许与 multi 参数的分隔符相同
- 修复 multi-var 会一并解析 multi-key-var 的bug
- 修复
Arparma.call
导致pos | kw
参数解包错误的 bug - 修复 kwbool 参数无法解析
-no-xx
的 bug
- 修复类型导致的 py3.8 兼容性问题
-
Arparma.call
现在适配positional_only
参数, 并会将var_positional
,var_keyword
的参数解包 -
kwonly 的 arg 现在不再要求传入顺序与定义顺序一致:
from arclet.alconna import Kw, Args, Alconna alc = Alconna("draw", Args["width", Kw[float]]["height", Kw[float]]) assert alc.parse("draw --width=360.0 --height=240.0").matched assert alc.parse("draw --height=240.0 width=360.0").matched
Arg
现在可使用泛型参数
- 修复
Args.from_callable
无法正确解析 kwonly 参数的 bug
- 命令头部可以通过
\\
转义{}
为原始字符,而不触发bracket header
解析 - 快捷指令的参数部分可以通过
\\
转义{}
为原始字符
- 修复
append_value
时列表对象引用错误的 bug
- 修复所有指令都可以响应快捷命令的bug
- 命令头部在非
bracket header
时只有前缀为"re:"
时才会被视为正则表达式 - 当命令头部不存在正则表达式时, 匹配将直接使用 set 比对
Alconna.help_text
现在与Alconna.meta.description
一致
shortcut
现在将尝试去除非字符串的命令前缀
- 修复
find_shortcut
传入意外参数的 bug
- 修复
sys.argv[0]
处理错误的 bug
- 修复
Arparma.error_info
总为 str 的 bug
此版本为长期支持版本 (LTS)
用户侧
ShortcutArgs
不再需要options
, 其合并至args
Alconna.parse
移除参数interrupt
, 由CompSession
替代
开发侧
- 使用
NEPattern
0.5 以上版本 - 使用
tarina
替代部分功能 DataCollectionContainer
,Analyser
,handle_xxx
和analyser_xxx
等移动至arclet.alconna._internal
DataCollectionContainer
重命名为Argv
Argv.config
移出为独立函数argv_config
Argv.text_sign
现在是Argv.to_text
, 其返回值为str | None
Option
新增参数compact
, 允许选项名后的第一个参数紧随其头部Option
新增参数default
, 允许设置选项的默认值:- 传入的任意值会被包装为
OptionResult
, 除非其为None
- 直接传入
OptionResult
会被直接使用 - 若想设置 args 的默认值, 请传入
OptionResult
- 传入的任意值会被包装为
Subcommand
新增参数default
, 允许设置子命令的默认值- 传入的任意值会被包装为
SubcommandResult
, 除非其为None
- 直接传入
SubcommandResult
会被直接使用 - 若想设置 args 的默认值, 请传入
SubcommandResult
- 传入的任意值会被包装为
CommandMeta
与Namespace
新增compact
属性, 允许命令传入的第一个参数紧随其头部Namespace
新增to_text
属性, 其与Argv.to_text
一致- 加入
CompSession
, 用于交互式命令补全session.available
: 表示当前补全会话是否可用session.current()
: 当前选中的补全选项的文本session.tab([, offset])
: 切换补全选项session.enter([, content])
: 确认当前补全选项
Alconna
的名字与前缀无传入时,取用 sys.argv[0] 作为其名字Alconna
现支持__call__
, 即直接调用实例; 当命令名与 sys.argv[0] 接近时, 传入命令不需要输入命令头Action
改动, 现在Action
功能更接近于argparse
:- args 为空时:
store
: 默认的 action, 存放...
或default
的值store_value
,store_true
,store_false
: 存放特殊值append
: 追加...
或default
的值append_value
: 追加特殊值count
: 计数
- args 不为空时:
store_xxx
,count
: 最新的 args 结果会覆盖上一次append_xxx
: 此次的 args 结果会与之前的合并成列表
- args 为空时:
- 新增
set_default_argv_type
函数, 用于设置默认的Argv
类型 CommandMeta.example
现在会将$
替换为可能的命令前缀Completion
选项增加别名'?'
- 由
name
与requires
合成的dest
也会去掉name
的前缀 Argv
不再是Analyser
的属性, 而是其方法的传入参数compile
函数现在作为Alconna
的方法- shortcut 使用方法改变:
ShortcutArgs
增加fuzzy
参数, 用于指定该快捷命令是否允许后随参数, 默认为True
- 可以通过
{%X_n}
来引用传入的快捷命令的第 n 个参数 - 可以通过
{*(SEP)}
来引用传入的快捷命令的所有参数, 其中 SEP 为可选的分隔符
- bracket header 现在支持进行类型转换
- 性能优化, 提升25% ~ 30%
set_default
的arg
,option
,subcommand
合并为path
, 原参数仍可用Arg
中name
的后缀标识符不强制需要';'
作为分割, 即foo;?
与foo?
等价Argv.preprocessor
与Argv.filter_out
现在接收 type 而不是 str- 移除
Alconna.reset_behaviors
- 修复
anti args
的 bug - 修复
Formatter.remove
的 bug
- 修复
MultiVar
工作异常的错误
- 调整
Header Match
的内部实现 - 格式化代码
- 更改测试文件
- 修复 shortcut 的功能错误
- 字符串处理时不再对后跟引号外的 "\" 处理
- 修复
Stub.available
初始值为True
的错误 - 修复
Duplication
仅对解析存在的选项设置存根的错误
- 修复 语言文件读取时未关闭的错误
- 修复 不同 Args 合并时丢失来自 from_callable 提供的参数
用户侧
- 移除
AlconnGroup
类,但保留通过|
组合命令的行为
开发侧
- 移动
Args.from_string_list
至arclet-alconna-tools
- 移动
Formatter
至formatter.py
- 移动
ActionHandler
至core.py
- 移除
analysis.base
- 合并
arparma
与components.behavior
- 合并
parts
与special
- 加入
ShortcutArgs
替代原shortcut
中的command
, 其包括:command
: 快捷命令指向的命令args
: 快捷命令的参数options
: 快捷命令的选项
Subcommand
增加add()
方法,用于添加子命令与选项Alconna
增加option()
方法,用于添加选项Alconna
增加subcommand()
方法,用于添加快捷命令
Alconna.add
现在只传入Option
或Subcommand
的实例
- 修复一系列 bugs
- 调整解析器的可拓展性
- 改进代码的类型提示
- 修复子解析器的 bug
开发侧
Arparma.update
移动到ArparmaBehavior.update
- 部分 api 改动:
Analyser.process
->Analyser.container.build
Analyser.analyser
->Analyser.process
analyse_subcommand
->analyse_param
- 加入
SubAnalyser
, 负责部分原Analyser
的部分功能 - 加入
HeadResult
, 表示头部匹配的结果 - 新增
DataCollectionContainer
, 负责原Analyser
的数据操作 - 允许子命令嵌套
- 新增
Analyser.config
方法以配置如preprocessor
,filter_out
之类的参数 - 新增
output_manager.set
方法以新增输出行为 - 新增
output_manager.capture
上下文管理器以提供输出捕获功能
Arparma.header_match
现在返回HeadResult
类型output_manager.get
方法从构建输出行为到只获取输出行为set_default
可以细化至更新subcmd.opt.args.arg
的值
KeyWordVar
现在可以指定sep
MultiVar
现在默认格式是+
- 修复 bugs
- 修复可变参数匹配的bug
- 修复
Args.from_callable
的bug - 修复
Arparma.__repr__
的bug
- 修复
help text
的 bug - 修复
Arg
提取 notice 的 bug
用户侧
- 'Arpamar' -> 'Arparma'
Alconna
构建时不再允许废弃的 kwargs 参数传入ArgFlag
中关于可变参数与键值参数部分移除behaviors
与formatter
的配置移至Namespace
, 原Alconna.config
仅用于配置解析器类型
- 加入
ArparmaExecutor
, 以绑定一个响应函数 - 加入
alconna.typing.MultiVar
与alconna.typing.KeyWordVar
显式声明可变参数与键值参数, 并提供alconna.typing.Kw
来进行缩写 (如Kw @ int
)
- 改进字符串分割过程,以运行更细粒度的分隔控制
- 改进 Args 构建, 加入 Arg 类 替代原先的 ArgUnit,并保留参数名后缀传入
- 原先的 ArgFlag
'H','O','A'
变回'/','?','!'
- Args.separators 移除,分割任务转移给 Arg.separators
set_default
现在可以传入 factory 参数, 并且必须传入关键字参数
- 修复可能存在的内存泄漏问题
- 修复可能存在的内存泄漏问题
- 通过 "+" 以组合字符串与选项或者子命令等隐式构建命令的方法
- 允许自定义内建选项的名称,比如改"--help"为"帮助"
Arpamar.find
现在可以用 query_path 了Arpamar.query
现在返回的是MappingProxyType, 若需要修改path的值请用Arpamar.update
- 修复 bugs
- 调整lang config
- 调整 completion 样式
- 修改 help text 的 bug
用户侧
- 取消 shortcut的expiration
- 调整 Alconna的构造样式, 将header、command、options等合并; 兼容旧版写法到1.4
开发侧
- 原先的builtins迁移至
arclet-alconna-tools
, 只保留set_default、store_value与version
- 新增命名空间配置,并将原先部分全局配置划为命名空间下的配置
- 允许.parse传入参数interrupt(bool)以在参数缺失的情况下可后续自行加参数
set_default
可以附加一个 arg 名- 调整repr样式
- 修复 bugs
- 加入
CommandMeta
, 并取代help_text
、is_raise_exception
等
- 加入
ArgField
, 可填入alias
,default_factory
等 - 加入命令补全功能, 暂由
--comp|-cp
触发 CommandMeta
新增hide
, 可以在命令管理器获取所有帮助时跳过该命令
- 命令管理器可以获取原始的命令数据
- 修复 bugs
- 修复 bugs
- BasePattern 加入
to
方法
-
Arpamar
泛型支持, 可通过Arpamar[type]
指定原指令的类型 -
Alconna
可通过|
进行组合, 返回命令组alc = Alconna("{place1}在哪里") | Alconna("哪里有{place1}") alc.parse("食物在哪里") alc.parse("哪里有食物")
-
AlconnaDuplication
->Duplication
-
Duplication
现在支持写入参数名或头部名称, 如command = Alconna("test", Args["foo", int]) + Option("bar", Args["bar", str]) class Demo(Duplication): foo: int bar: str
-
Arpamar
在执行行为器时可以通过抛出OutBoundsBehave
使解析失败 -
修复bugs
- 修复 BUG
- 微调 Args
Args.from_callable
允许 keyword 参数- 更改ArgAction参数
- 修复bugs
- 将
lang
迁移到新增的config
中,并为config
加入了如全局分隔、开启缓存等选项 - 压缩代码量并规范化
--help
选项允许在命令任何部位生效, 并且会根据当前命令选择是否展示选项的帮助信息Args
name 的flag附加现在不需要以|
分隔Args
name 允许用#...
为单个Arg提供注释, 其会展示在帮助信息内Args
允许传入Callable[[A], B]
作为表达, 会自动解析输入类型与输出类型- 完善了测试代码, 位于测试文件夹内, 通过入口文件可执行全部测试
- 加入一个类似
beartype
的checker
- 命令头部允许使用非str类型, 即可以
Alconna(int)
- 解析器增加预处理器选项, 允许在分划数据单元前进行转化处理
- 性能提升, 理想情况最快约为 20w msg/s
- 删除
Alconna.set_action
- 重构
ObjectPattern
- 增加
datetime
的 BasePattern, 支持传入时间戳或日期文字 Analyser
的字段修改,next_data
->popitem
,reduce_data
->pushback
output_send
合并到output_manager
Option
添加参数priority
, 仅在需要选项重载时安排优先级- 修复bugs
- 修改
Args
的构造方法, 取消使用 slice 传入参数. 请从Args[foo:int, bar:str:default]
修改为Args[foo, int][bar, str, default]
. - Option 与 Subcommand 现支持 requires 参数, 该参数允许解析该节点时判断 require 的字段是否存在.
- Option 与 Subcommand 的 requires 可以通过 name 传入, 用空格分隔. 该特性要求 Option 中传入别名时不能用空格.
- 允许同名的 Option 与 Subcommand 在同一个命令中, 应保证能用 require 参数来区分.
- 允许简单的选项重载, 如
Option("foo", Args.bar[int])
可以与Option("foo")
一起使用. - BasePattern 增加
validator
属性, 负责对匹配结果进行验证. - Args 支持 Annotated 的传入, 如
Args.bar[Annotated[int, lambda x: x > 0]]
, 或使用arclet.alconna.typing.Bind
- 加入
AlconnaGroup
类, 用于组合多个Alconna
对象. 其解析行为与Alconna
相同. - 取消不能构建多个重名的
Alconna
对象, 以AlconnaGroup
代替. (暂定) - 删除
arclet.alconna.components.visitor
, 修改Formatter
的传入参数. - 增加
Alconna.config
类方法, 用于设置全局配置. - 移出
arclet.alconna.builtin.commandline
, 独立为一个模块alconna-cli
. ObjectPattern
移动到arclet.alconna.builtin.pattern
模块.- 修复 bug.
- 合并
ArgPattern
与TypePattern
为BasePattern
, 并将诸多分散特性(如anti
,any
) 移动到BasePattern
中. - 取消
Analyser
中有关arg_handler
的部分 AnyStr
、AnyDigit
、AnyFloat
等现在不被公开.AnyParam
重写为由BasePattern
实现, 并改名为AnyOne
.alconna.types
变为alconna.typing
.- 为
all_command_help
增加索引选项 - 修复 bug.
- 增强
Arpamar
的功能, 使其更类似于一种接口. 其中的修改有:- 从
get()
变为query()
- 从
has()
变为find()
- 从
set()
变为update()
- 从
update()
变为execute()
- 增加
get_duplication()
- 增加
source
,origin
属性
- 从
- 项目结构调整
- ArgAction 的执行现在交给
ActionHandler
来处理. split
以及separator
现在需要传入Set[str]
类型.- 修复 bug.
- 增添
dest
, 其作为选项在 Arpamar 中的实际名称. - 增加内建
Argument
方法, 类似于add_argument
, 以便捷创建 Option + Args 的组合. - 修复 bug
- 将 HelpAction 与 HelpTextFormatter 作为 help 模块
- 语言配置组件的增强. 现在以语言种类标识符作为父级, 以支持多语言.
- 为 manager 新增一个记录命令输入的 LruCache. 解析器可以使用这个缓存来避免重复解析. 目前缓存上限为 100.
- 新增
--shortcut
内置选项, 为命令提供临时快捷命令的创建与删除. - 修改 manager 中的
shortcut
, 并支持持久化 - 部分性能优化, 以大致抵消因缓存计算而带来的性能损耗.
- 部分 api 名称变更:
pattern
->pattern_gen
handle_message
->process_message
- Args 新增
add_argument
方法, 以添加参数.
- 命令头的正则支持格式修改, 由原来的
f"{表达式}"
改为"{名称:类型或表达式}"
- 加入语言文件配置, 可以通过
Alconna.load_config_file
加载自定义的语言文件, 格式为json
- 为选项与子命令的匹配也加入了模糊匹配
- 选项与子命令的
separator
可以传入空字符串,Alconna
会据此自动分割 - 部分API修改, 暂时去除
from_dict
方法 - 修复了一些bug
- 修改了一些docstring
- 修改参数前缀, 现需要以后缀形式传入, 以
';'
为开头, 并用'|'
分割。 - 参数前缀现通过单个大写字母表示, 具体对应如下:
'S'
<='*'
'W'
<='**'
'O'
<='?'
'K'
<='@'
'H'
<='_'
'F'
<='#'
'A'
<='!'
- 参数标识符现增加数字, 以表示指定长度的可变参数, 如
'foo;S'
表示能接收任意长度的可变参数,'foo;3'
表示接收长度为3的可变参数。 Args
现在允许传入分隔符, 通过Args.separate(xx)
或Args / xx
设置- 加入
pattern
装饰器函数, 用以便捷的创建ArgPattern
对象 - 加入
delegate
装饰器函数, 用以便捷的创建Alconna
对象
修复了一些严重的bug。
Option
的alias
现在需要传入List[str],而不是str。help_text
内置两个预选板块Usage
和Example
, 编写规则为"xxx Usage:xxx; Example:xxx;"
。- 加入
TypePattern
, 作用为简单的类型转换器, 其可以设置前置转换器, 即可以str -> Path -> bytes
。 - 加入命令的模糊匹配, 在
Alconna
中传入is_fuzzy_match
参数, 可以设置是否模糊匹配。 AlconnaString
参数规则修改, 现在<xx>
表示必选,[xx]
表示可选,&xx
表示action的值。ArgparseHelpTextFormatter
相关格式修改
- 加入
Argparser
风格的HelpFormatter - 加入
AlconnaDuplication
, 旨在提供更好的解析结果使用 - option的name与alias现在会根据长度自动倒换
- 修复Bug
- 增加对
Graia
系的原生支持, 位于arclet.alconna.graia
- header现在可支持非文字类元素与文字混用的解析, 原来的方式请改用
元组(非文本元素, 文本)
- 增加
Alconna
对/
与@
运算符的支持, 作用为重置命名空间 - 增加
Alconna
对+
运算符的支持, 作用为增加选项 Args
可直接传入str
, 即Args["foo":"foo"]
->Args["foo"]
Format
中的format slot可以直接写入类型, 如"{name: str}"
- 修复Bug
- 内部类型改进,
MessageChain
->DataCollection
- 加入
ArpamarBehavior
, 用以解析后的预处理, 并提供三个预制的behavior
:set_default
: 当某个选项未被输入时, 使用该行为添加一个默认值exclusion
: 当指定的两个选项同时出现时报错cool_down
: 限制命令调用频率
- 加入
NodeVisitor
与HelpFormatter
, 并将原先给CommandNode的help生成转移给Formatter - 加入
AlconnaMessageProxy
, 用作对外适配接口
- 加入
Alconna.local_args
, 可用来注入额外参数 actions
关键字改为action
- 加入
_
前缀,用来隐藏该参数的类型注解 - 修复bug
- 优化结构
- 增加
AlconnaFire
的Config, 用来约束AlconnaFire
的参数 AlconnaFire
现在可以解析子命令, 通过Config传入get_subcommand=True
来启用- 更好的parameter-helptext
- 新增Args构造方法
a = Args.xxx[value, default]
util.chain_filter
重新归并到Analyser.handle_message
里- 增加
Force
类, 用以标记arg类型不需要进行转换; 或者在key前面加上"#"
- 支持传入键值对参数与可变键值对参数, 分别用
"@"
和"**""
标记 - 支持将参数设为可选(即未解析成功时不报错而是跳过), 用
"?"
标记 Arpamar
可以通过XXX.opt.arg1
、XXX.sub.sub_opt.arg2
等方式获取参数值- 修复bug
- 改进
AlconnaFire
方法, 其可通过AlconnaFire.instance
获取目标对象的可能实例 - 加入
SequenceArg
与MappingArg
, 其对应解析列表、元组、集合与字典 - Subcommand在其Args未解析时抛出异常
- Arpamar现在可以获取subcommands与error_info
- 增强Format
- 修改help—action相关
- 增加
alconna.builtin.construct.AlconnaFire
,为Alconna
的Fire-like
方法. 其会尝试根据传入的对象生成Alconna
- 增加
UnionArg
, 其传入的列表中可以包含ArgPattern
、Type
与实际值. 为choice
的改进 Args
支持传入Union[...]
格式的参数- 增加
ObjectPattern
, 其会尝试从对象中生成ArgPattern
, 并在解析成功后创建实例 action
现支持传入异步函数AlconnaString
现在会读取locals
的值
- 内部结构大更改, 将
Command
与Analyser
进行了一个解耦 - 多个api更改或去除, 请留意. 该特性为不兼容的特性.
Alconna
:Alconna.analyse_message
: 变更为Alconna.parse
; 其新增参数static
, 可以指定是否动态创建Analyser
Alconna.order_parse
: 移除, 以Alconna.analyser_type
为准Alconna.from_string
、Alconna.format
: 迁移至alconna.builtin.construct
中
TemplateCommand
:- 变更为
CommandNode
CommandNode.__init__
: 移除kwargs
CommandNode.__init__
: 增加参数help_text
,separator
, 替代CommandNode.help
与CommandNode.separate
CommandNode.help
: 仍然保留, 但推荐从__init__中传入CommandNode.separate
: 移除CommandNode.action
: 增加对Iterable的判断
- 变更为
Subcommand
:Option
的传入由*option
改为options
Arpamar
:- 新增
Arpamar.get_first_arg
, 用以获取第一个参数
- 新增
ArgAction
:- 从
alconna.actions
迁移至alconna.base
, 剩余的ArgAction
迁移至alconna.builtin.actions
- 从
AlconnaDecorate
:- 迁移至
alconna.builtin.construct
- 迁移至
alconna.analyser
:- 迁移至
alconna.analysis.analyser
analyse_args
、analyse_option
、analyse_subcommand
、analyse_headers
: 迁移至alconna.analysis.parts
- 迁移至
- 增加
alconna.analysis
, 其中:analysis.compile
: 用以从Alconna
中生成Analyser
analysis.analyse
: 隐式调用analyser.analyse
analysis.analyse_args
: 可直接传入Args
以针对性解析analysis.analyse_option
: 可直接传入Option
以针对性解析analysis.analyse_subcommand
: 可直接传入Subcommand
以针对性解析analysis.analyse_headers
: 可直接传入Headers
以针对性解析
- 可以自定义all_command_help
- 加入anti-arg, 用以反向检查参数
- 修复一些bug
- 加入快捷指令功能, 可以用一段特殊的字符串来表示命令
- 加入arg-choice, 可以指定参数的可选值
- 修改docstring, 使其变得更加可读
- 加入commandManager.broadcast功能, 可以广播命令
- 修复命令行的Bug
- 加入变长参数的支持, 可以在参数名前面添加一个
*
来表示变长参数
- 修复几个Bug
- 加入from_dict与to_dict,暂时无法支持保存action
- 命令行功能加入using
- 性能优化加强, 现在纯字符串匹配可以跑到60000msg/s (与之相对, 匹配其他消息元素可以跑到10w msg/s, re出来挨打)
- commandline增加一个
analysis
功能,可以把命令转为命令格式 - 修复Bug
- 加入click-like构造方法,具体内容在alconna/decorate里
- 加入命令行功能,目前功能为便捷式编写Alconna与便捷查看docstring
- 性能优化, 包含正则参数解析的速度提升大约10%
- Option支持重复输入,此时多个解析结果会以列表形式存放
- help选项可用传入一自定义函数已达到直接发送帮助说明的效果
- 规范format方法;from_string现在可以用#加入帮助说明
- 加入commandManager,帮助管理所有命令;支持解析原始消息链
加入有序匹配模式与命令缓存, 能使性能大大提升
修复非ArgPattern修饰的参数无法解析消息元素的Bug
- 修复Bug
- 增加了Email的参数匹配
- from_sting可以传入option了
- 修复bug
- 优化结构
- Arpamar 现可直接以XXX.name方式获取参数
- 增加自定义消息元素过滤
- headers支持传入消息元素
紧急修复Action无法返回值的bug
- 优化整体结构
- 完善了action相关
- 修改参数默认值的bug
- 加入Action (暂时只针对Option)
- Args解析出来的结果 (如bool值, int值) 会转为指定的类型
- 加入AnyFloat预制正则
- Args构造支持传入元组;
- 增加两种简易构造Alconna的形式
- 修复Bug
- 加入 AnyParam类型 (单次泛匹配)与AllParam类型 (全部泛匹配)
- 修改部分逻辑