Expand pydantic function arguments by casting the engorgio decorator
Project description
engorgio
Expands function arguments into fields.
Installation
pypi package to come if this works out, and I can decide what to call it. I think its possible to do this for other objects like dataclasses as well.
pip install git+https://github.com/WaylonWalker/engorgio.gi
Usage
Setup your models.
from typing import Optional
from pydantic import BaseModel, Field
class Alpha(BaseModel):
a: int
class Color(BaseModel):
r: int
g: int
b: int
alpha: Alpha
class Hair(BaseModel):
color: Color
length: int
class Person(BaseModel):
name: str
other_name: Optional[str] = None
age: int
email: Optional[str]
pet: str = "dog"
address: str = Field("123 Main St", description="Where the person calls home.")
hair: Hair
Now create a typer command using your models.
engorgio
will expand all of the typer fields
for you.
import typer
from engorgio import engorgio
app = typer.Typer(
name="engorgio",
help="a demo app",
)
@app.command()
@engorgio
def get_person(person: Person) -> Person:
"""Get a person's information."""
from rich import print
print(person)
Get the help message.
engorgio get-person --help
Usage: engorgio get-person [OPTIONS]
Get a person's information.
╭─ Options ──────────────────────────────────────────────────────────────────────────────╮
│ --help Show this message and exit. │
╰────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Person ───────────────────────────────────────────────────────────────────────────────╮
│ * --name TEXT [default: None] [required] │
│ --other-name TEXT [default: None] │
│ * --age INTEGER [default: None] [required] │
│ --email TEXT [default: None] │
│ --pet TEXT [default: dog] │
│ --address TEXT Where the person calls home. [default: 123 Main St] │
╰────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Person.Hair ──────────────────────────────────────────────────────────────────────────╮
│ * --length INTEGER [default: None] [required] │
╰────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Person.Hair.Color ────────────────────────────────────────────────────────────────────╮
│ * --r INTEGER [default: None] [required] │
│ * --g INTEGER [default: None] [required] │
│ * --b INTEGER [default: None] [required] │
╰────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Person.Hair.Color.Alpha ──────────────────────────────────────────────────────────────╮
│ * --a INTEGER [default: None] [required] │
╰────────────────────────────────────────────────────────────────────────────────────────╯
Calling the cli will print out a Person object.
engorgio get-person --name me --age 1 --r 1 --g 1 --b 1 --a 1 --length 1
Calling the cli while not specifying required arguments will automatically prompt for them.
engorgio get-person
License
engorgio
is distributed under the terms of the MIT license.
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
Built Distribution
File details
Details for the file engorgio-0.4.0.tar.gz
.
File metadata
- Download URL: engorgio-0.4.0.tar.gz
- Upload date:
- Size: 17.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: python-httpx/0.25.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 905addeaee65c87e4be4209d771ca8ae2144ca311a9b08bad2b245b699db8177 |
|
MD5 | fa86f000def09972cabf852f32e3a66c |
|
BLAKE2b-256 | 350f2d206e95e9f046c2765e11a5ded5fde6f2ca97788e276af12b0fbb697f83 |
File details
Details for the file engorgio-0.4.0-py3-none-any.whl
.
File metadata
- Download URL: engorgio-0.4.0-py3-none-any.whl
- Upload date:
- Size: 7.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: python-httpx/0.25.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a002fca38cfa32bcc7c4b161a59ab09fce679fb7c99abf936768dfda6a30b2b2 |
|
MD5 | a892ad598a214b2e2773b70c3669a353 |
|
BLAKE2b-256 | dc0c2b7df5ba8d3e3e9756e17e471c8f0d0381b9f20acc85b7d91826972099e4 |