Skip to content

Commit

Permalink
Keep title generator list in a constant
Browse files Browse the repository at this point in the history
  • Loading branch information
NeevCohen committed Apr 7, 2024
1 parent 01c1124 commit 827261e
Showing 1 changed file with 23 additions and 19 deletions.
42 changes: 23 additions & 19 deletions tests/test_titles.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import re
from typing import Annotated, Any, TypedDict
from typing import Annotated, Any, Callable, List, TypedDict

import pytest

import pydantic
from pydantic import BaseModel, ConfigDict, Field, TypeAdapter, computed_field
from pydantic.alias_generators import to_camel, to_pascal, to_snake
from pydantic.json_schema import model_json_schema


Expand All @@ -15,10 +16,18 @@ def _capitalize(v: str):
return re.sub(r'(?<=[a-z])([A-Z])', r' \1', _capitalize(name))


@pytest.mark.parametrize(
'class_title_generator',
(lambda m: m.lower(), lambda m: m * 2, lambda m: 'My Title', make_title),
)
TITLE_GENERATORS: List[Callable[[str], str]] = [
lambda t: t.lower(),
lambda t: t * 2,
lambda t: 'My Title',
make_title,
to_camel,
to_snake,
to_pascal,
]


@pytest.mark.parametrize('class_title_generator', TITLE_GENERATORS)
def test_model_class_title_generator(class_title_generator):
class Model(BaseModel):
model_config = ConfigDict(class_title_generator=class_title_generator)
Expand All @@ -30,9 +39,7 @@ class Model(BaseModel):
}


@pytest.mark.parametrize(
'class_title_generator', (lambda m: m.lower(), lambda m: m * 2, lambda m: 'My Title', make_title)
)
@pytest.mark.parametrize('class_title_generator', TITLE_GENERATORS)
def test_class_title_generator_in_submodel(class_title_generator):
class SubModel(BaseModel):
model_config = ConfigDict(class_title_generator=class_title_generator)
Expand All @@ -49,7 +56,7 @@ class Model(BaseModel):
}


@pytest.mark.parametrize('field_title_generator', (lambda f: f.upper(), lambda f: f.replace('_', ''), make_title))
@pytest.mark.parametrize('field_title_generator', TITLE_GENERATORS)
def test_field_title_generator_in_model_fields(field_title_generator):
class Model(BaseModel):
field_a: str = Field(field_title_generator=field_title_generator)
Expand All @@ -71,7 +78,7 @@ def field_c(self) -> str:
}


@pytest.mark.parametrize('field_title_generator', (lambda f: f.upper(), lambda f: f.replace('_', ''), make_title))
@pytest.mark.parametrize('field_title_generator', TITLE_GENERATORS)
def test_model_config_field_title_generator(field_title_generator):
class Model(BaseModel):
model_config = ConfigDict(field_title_generator=field_title_generator)
Expand Down Expand Up @@ -147,7 +154,7 @@ def field_d(self) -> str:
}


@pytest.mark.parametrize('class_title_generator', (lambda m: m.lower(), lambda m: 'dc', make_title))
@pytest.mark.parametrize('class_title_generator', TITLE_GENERATORS)
def test_dataclass_class_title_generator(class_title_generator):
@pydantic.dataclasses.dataclass(config=ConfigDict(class_title_generator=class_title_generator))
class MyDataclass:
Expand All @@ -161,7 +168,7 @@ class MyDataclass:
}


@pytest.mark.parametrize('field_title_generator', (lambda f: f.upper(), lambda f: f.replace('_', ''), make_title))
@pytest.mark.parametrize('field_title_generator', TITLE_GENERATORS)
def test_field_title_generator_in_dataclass_fields(field_title_generator):
@pydantic.dataclasses.dataclass
class MyDataclass:
Expand All @@ -179,7 +186,7 @@ class MyDataclass:
}


@pytest.mark.parametrize('field_title_generator', (lambda f: f.upper(), lambda f: f.replace('_', ''), make_title))
@pytest.mark.parametrize('field_title_generator', TITLE_GENERATORS)
def test_dataclass_config_field_title_generator(field_title_generator):
@pydantic.dataclasses.dataclass(config=ConfigDict(field_title_generator=field_title_generator))
class MyDataclass:
Expand All @@ -199,10 +206,7 @@ class MyDataclass:
}


@pytest.mark.parametrize(
'class_title_generator',
(lambda m: m.lower(), lambda m: m * 2, lambda m: 'My Title', make_title),
)
@pytest.mark.parametrize('class_title_generator', TITLE_GENERATORS)
def test_typeddict_class_title_generator(class_title_generator):
class MyTypedDict(TypedDict):
__pydantic_config__ = ConfigDict(class_title_generator=class_title_generator)
Expand All @@ -215,7 +219,7 @@ class MyTypedDict(TypedDict):
}


@pytest.mark.parametrize('field_title_generator', (lambda f: f.upper(), lambda f: f.replace('_', ''), make_title))
@pytest.mark.parametrize('field_title_generator', TITLE_GENERATORS)
def test_field_title_generator_in_typeddict_fields(field_title_generator):
class MyTypedDict(TypedDict):
field_a: Annotated[str, Field(field_title_generator=field_title_generator)]
Expand All @@ -232,7 +236,7 @@ class MyTypedDict(TypedDict):
}


@pytest.mark.parametrize('field_title_generator', (lambda f: f.upper(), lambda f: f.replace('_', ''), make_title))
@pytest.mark.parametrize('field_title_generator', TITLE_GENERATORS)
def test_typeddict_config_field_title_generator(field_title_generator):
class MyTypedDict(TypedDict):
__pydantic_config__ = ConfigDict(field_title_generator=field_title_generator)
Expand Down

0 comments on commit 827261e

Please sign in to comment.