Skip to content

Commit 89513e9

Browse files
committed
test-coverage: 100% test coverage for ellar.pydantic package
1 parent 864b892 commit 89513e9

File tree

6 files changed

+45
-15
lines changed

6 files changed

+45
-15
lines changed

ellar/pydantic/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
evaluate_forwardref,
2828
get_definitions,
2929
get_missing_field_error,
30-
get_model_config,
3130
get_schema_from_model_field,
3231
is_scalar_field,
3332
is_scalar_sequence_field,
@@ -51,7 +50,6 @@
5150
"as_pydantic_validator",
5251
"model_dump",
5352
"model_rebuild",
54-
"get_model_config",
5553
"get_missing_field_error",
5654
"get_definitions",
5755
"get_schema_from_model_field",

ellar/pydantic/exceptions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,7 @@ def model_dump(self, **kw: t.Any) -> t.Dict[str, t.Any]: # pragma: no cover
5151
d["ctx"] = ctx
5252

5353
return d
54+
55+
56+
class InvalidModelFieldSetupException(Exception):
57+
pass

ellar/pydantic/utils.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@
22
from collections import deque
33
from dataclasses import is_dataclass
44

5-
from pydantic import BaseModel, PydanticSchemaGenerationError, create_model
5+
from pydantic import (
6+
BaseModel,
7+
PydanticSchemaGenerationError,
8+
PydanticUndefinedAnnotation,
9+
create_model,
10+
)
611
from pydantic import ValidationError as ValidationError
712
from pydantic._internal._typing_extra import eval_type_lenient
813
from pydantic._internal._utils import lenient_issubclass
@@ -11,6 +16,7 @@
1116
from starlette.datastructures import UploadFile
1217
from typing_extensions import Literal, get_args, get_origin
1318

19+
from .exceptions import InvalidModelFieldSetupException
1420
from .fields import ModelField
1521
from .types import Undefined, UnionType
1622

@@ -44,10 +50,6 @@ def model_dump(
4450
return model.model_dump(mode=mode, **kwargs)
4551

4652

47-
def get_model_config(model: BaseModel) -> t.Any:
48-
return model.model_config
49-
50-
5153
def get_schema_from_model_field(
5254
*,
5355
field: ModelField,
@@ -110,10 +112,6 @@ def is_scalar_sequence_field(field: ModelField) -> bool:
110112
return field_annotation_is_scalar_sequence(field.field_info.annotation)
111113

112114

113-
def copy_field_info(*, field_info: FieldInfo, annotation: t.Any) -> FieldInfo:
114-
return type(field_info).from_annotation(annotation)
115-
116-
117115
def serialize_sequence_value(*, field: ModelField, value: t.Any) -> t.Sequence[t.Any]:
118116
origin_type = (
119117
t.get_origin(field.field_info.annotation) or field.field_info.annotation
@@ -250,7 +248,7 @@ def create_model_field(
250248

251249
try:
252250
return model_field_class(**kwargs) # type: ignore[arg-type]
253-
except (RuntimeError, PydanticSchemaGenerationError) as e:
254-
raise Exception(
251+
except (PydanticUndefinedAnnotation, PydanticSchemaGenerationError) as e:
252+
raise InvalidModelFieldSetupException(
255253
f"Invalid args for response field! Hint: check that {type_} is a valid pydantic field type"
256254
) from e

tests/test_pydantic/__init__.py

Whitespace-only changes.

tests/test_helper/test_model_field.py renamed to tests/test_pydantic/test_model_field.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pytest
22
from ellar.common.responses.models import ResponseModelField
33
from ellar.pydantic import ModelField, create_model_field
4-
from pydantic import PydanticUndefinedAnnotation
4+
from ellar.pydantic.exceptions import InvalidModelFieldSetupException
55

66

77
def test_create_model_field_works():
@@ -17,7 +17,7 @@ def test_create_model_field_works():
1717

1818
def test_create_model_field_fails():
1919
with pytest.raises(
20-
PydanticUndefinedAnnotation,
20+
InvalidModelFieldSetupException,
2121
):
2222
create_model_field(
2323
name="response_model",
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from typing import List, Union
2+
3+
from ellar.pydantic import utils
4+
5+
from ..schema import NoteSchemaDC
6+
7+
8+
def test_is_bytes_sequence_annotation_union():
9+
# For coverage
10+
assert utils.is_bytes_sequence_annotation(Union[List[str], List[bytes]])
11+
12+
13+
def test_field_annotation_is_scalar_sequence():
14+
# For coverage
15+
assert (
16+
utils.field_annotation_is_scalar_sequence(Union[List[str], List[bytes]]) is True
17+
)
18+
assert (
19+
utils.field_annotation_is_scalar_sequence(
20+
Union[List[str], List[bytes], List[NoteSchemaDC]]
21+
)
22+
is False
23+
)
24+
25+
26+
def test_is_bytes_annotation():
27+
# For coverage
28+
assert utils.is_bytes_annotation(Union[List[str], List[bytes]]) is False
29+
assert utils.is_bytes_annotation(bytes) is True
30+
assert utils.is_bytes_annotation(Union[bytes, str]) is True

0 commit comments

Comments
 (0)