101 lines
1.9 KiB
Python
101 lines
1.9 KiB
Python
import asyncio
|
|
from uuid import UUID, uuid4
|
|
|
|
from falyx import Falyx
|
|
from falyx.parsers import CommandArgumentParser
|
|
|
|
flx = Falyx("Test Type Validation")
|
|
|
|
|
|
def uuid_val(value: str) -> str:
|
|
"""Custom validator to ensure a string is a valid UUID."""
|
|
UUID(value)
|
|
return value
|
|
|
|
|
|
async def print_uuid(uuid: str) -> str:
|
|
"""Prints the UUID if valid."""
|
|
print(f"Valid UUID: {uuid}")
|
|
return uuid
|
|
|
|
|
|
flx.add_command(
|
|
"U",
|
|
"Print a valid UUID (arguemnts)",
|
|
print_uuid,
|
|
arguments=[
|
|
{
|
|
"flags": ["uuid"],
|
|
"type": uuid_val,
|
|
"help": "A valid UUID string",
|
|
}
|
|
],
|
|
)
|
|
|
|
|
|
def uuid_parser(parser: CommandArgumentParser) -> None:
|
|
"""Custom parser to ensure the UUID argument is valid."""
|
|
parser.add_argument(
|
|
"uuid",
|
|
type=uuid_val,
|
|
help="A valid UUID string",
|
|
)
|
|
|
|
|
|
flx.add_command(
|
|
"I",
|
|
"Print a valid UUID (argument_config)",
|
|
print_uuid,
|
|
argument_config=uuid_parser,
|
|
)
|
|
|
|
flx.add_command(
|
|
"D",
|
|
"Print a valid UUID (arg_metadata)",
|
|
print_uuid,
|
|
arg_metadata={
|
|
"uuid": {
|
|
"type": uuid_val,
|
|
"help": "A valid UUID string",
|
|
}
|
|
},
|
|
)
|
|
|
|
|
|
def custom_parser(arguments: list[str]) -> tuple[tuple, dict]:
|
|
"""Custom parser to ensure the UUID argument is valid."""
|
|
if len(arguments) != 1:
|
|
raise ValueError("Exactly one argument is required")
|
|
uuid_val(arguments[0])
|
|
return (arguments[0],), {}
|
|
|
|
|
|
flx.add_command(
|
|
"C",
|
|
"Print a valid UUID (custom_parser)",
|
|
print_uuid,
|
|
custom_parser=custom_parser,
|
|
)
|
|
|
|
|
|
async def generate_uuid() -> str:
|
|
"""Generates a new UUID."""
|
|
new_uuid = uuid4()
|
|
print(f"Generated UUID: {new_uuid}")
|
|
return new_uuid
|
|
|
|
|
|
flx.add_command(
|
|
"G",
|
|
"Generate a new UUID",
|
|
lambda: print(uuid4()),
|
|
)
|
|
|
|
|
|
async def main() -> None:
|
|
await flx.run()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|