This commit is contained in:
Waylon Walker 2023-04-28 20:00:40 -05:00
parent fec28df75f
commit 5ae6b86712
No known key found for this signature in database
GPG key ID: 66E2BF2B4190EFE4
10 changed files with 312 additions and 39 deletions

View file

@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: 2023-present Waylon S. Walker <waylon@waylonwalker.com>
#
# SPDX-License-Identifier: MIT
"""Tests.
SPDX-FileCopyrightText: 2023-present Waylon S. Walker <waylon@waylonwalker.com>
SPDX-License-Identifier: MIT
"""

94
tests/models.py Normal file
View file

@ -0,0 +1,94 @@
"""Models defines a set of classes for representing people and their hair.
Classes:
* `Alpha`: A class for representing an alpha value.
* `Color`: A class for representing a color.
* `Hair`: A class for representing hair.
* `Person`: A class for representing a person.
"""
from typing import Optional
from pydantic import BaseModel, Field
class Alpha(BaseModel):
"""A class for representing an alpha value."""
a: int = Field(
...,
description="The alpha value.",
)
class Color(BaseModel):
"""A class for representing a color."""
r: int = Field(
...,
description="The red component of the color.",
)
g: int = Field(
...,
description="The green component of the color.",
)
b: int = Field(
...,
description="The blue component of the color.",
)
alpha: Alpha = Field(
...,
description="The alpha value of the color.",
)
class Hair(BaseModel):
"""A class for representing hair."""
color: Color = Field(
...,
description="The color of the hair.",
)
length: int = Field(
...,
description="The length of the hair.",
)
class Person(BaseModel):
"""A class for representing a person."""
name: str = Field(
...,
description="The name of the person.",
)
other_name: Optional[str] = Field(
None,
description="An optional other name for the person.",
)
age: int = Field(
...,
description="The age of the person.",
)
email: Optional[str] = Field(
None,
description="An optional email address for the person.",
)
pet: str = Field(
"dog",
description="The person's pet.",
)
address: str = Field(
"123 Main St",
description="Where the person calls home.",
)
hair: Hair = Field(
...,
description="The person's hair.",
)

43
tests/test_person.py Normal file
View file

@ -0,0 +1,43 @@
"""Example usage of expand_pydantic_args with the Person model.
SPDX-FileCopyrightText: 2023-present Waylon S. Walker <waylon@waylonwalker.com>
SPDX-License-Identifier: MIT
"""
import inspect
from pydantic_typer import expand_pydantic_args
from . import models
# this one is broken
# def test_no_pydantic() -> None:
# @expand_pydantic_args()
# def get_person(alpha) -> None:
# """Mydocstring."""
# from rich import print
# print(str(thing))
# print(person)
# sig = inspect.signature(get_person)
# params = sig.parameters
# for field in models.Alpha.__fields__.values():
# assert field.name in params
def test_single_signature() -> None:
@expand_pydantic_args()
def get_person(alpha: models.Alpha) -> None:
"""Mydocstring."""
return alpha
sig = inspect.signature(get_person)
params = sig.parameters
for field in models.Alpha.__fields__.values():
assert field.name in params
assert get_person(a=1) == models.Alpha(a=1)