36 lines
979 B
Python
36 lines
979 B
Python
from collections.abc import Callable
|
|
from voluptuous import Schema, Optional, Or, Self
|
|
|
|
# Need to define this as a Schema with required=True to ensure that this requirement
|
|
# persists through the Or in the main schema definition.
|
|
_command_args = Schema(
|
|
{
|
|
Optional("positionals", default=[]): [
|
|
{
|
|
"name": str,
|
|
"required": bool,
|
|
"value": Or({"type": "any"}, {"type": "variadic"}),
|
|
}
|
|
],
|
|
Optional("switches", default={}): {
|
|
Optional(str): {
|
|
"required": bool,
|
|
"repeated": bool,
|
|
"value": Or({"type": "any"}, None),
|
|
Optional("metavar"): str,
|
|
}
|
|
},
|
|
},
|
|
required=True,
|
|
)
|
|
|
|
commands_schema = Schema(
|
|
{Optional(str): Or(_command_args, None, {"subcommands": Self}, Callable)},
|
|
required=True,
|
|
)
|
|
|
|
schema = Schema(
|
|
{"name": str, "commands": commands_schema},
|
|
required=True,
|
|
)
|