Skip to main content

Expand pydantic function arguments by casting the engorgio decorator

Project description

engorgio

Expands function arguments into fields.

https://user-images.githubusercontent.com/22648375/235036031-a9dc6589-e350-4a18-9114-6568cb362f74.mp4

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

engorgio-0.4.0.tar.gz (17.5 kB view details)

Uploaded Source

Built Distribution

engorgio-0.4.0-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

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

Hashes for engorgio-0.4.0.tar.gz
Algorithm Hash digest
SHA256 905addeaee65c87e4be4209d771ca8ae2144ca311a9b08bad2b245b699db8177
MD5 fa86f000def09972cabf852f32e3a66c
BLAKE2b-256 350f2d206e95e9f046c2765e11a5ded5fde6f2ca97788e276af12b0fbb697f83

See more details on using hashes here.

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

Hashes for engorgio-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a002fca38cfa32bcc7c4b161a59ab09fce679fb7c99abf936768dfda6a30b2b2
MD5 a892ad598a214b2e2773b70c3669a353
BLAKE2b-256 dc0c2b7df5ba8d3e3e9756e17e471c8f0d0381b9f20acc85b7d91826972099e4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page