Skip to content

Commit 8242a27

Browse files
committed
test-coverage: more on test-coverage
1 parent 4978348 commit 8242a27

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+122
-71
lines changed

ellar/app/context.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from types import TracebackType
55

66
from ellar.common.constants import ELLAR_CONFIG_MODULE
7+
from ellar.common.logger import logger
78
from ellar.common.utils.functional import SimpleLazyObject, empty
89
from ellar.core import Config
910
from ellar.di import EllarInjector
@@ -95,10 +96,10 @@ def _get_application_config() -> Config:
9596
if app_context is empty:
9697
config_module = os.environ.get(ELLAR_CONFIG_MODULE)
9798
if not config_module:
98-
raise RuntimeError(
99+
logger.warning(
99100
"You are trying to access app config outside app context "
100101
"and %s is not specified. This may cause differences in config "
101-
"values when the app." % (ELLAR_CONFIG_MODULE,)
102+
"values with the app" % (ELLAR_CONFIG_MODULE,)
102103
)
103104
return Config(config_module=config_module)
104105

ellar/auth/session/options.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import sys
22
import typing as t
33

4-
from ellar.common.pydantic import BaseModel
4+
from ellar.pydantic import BaseModel
55

66
if sys.version_info >= (3, 8): # pragma: no cover
77
from typing import Literal

ellar/cache/schema.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import typing as t
22

33
from ellar.cache import BaseCacheBackend
4-
from ellar.common.pydantic import BaseModel, as_pydantic_validator, field_validator
4+
from ellar.pydantic import BaseModel, as_pydantic_validator, field_validator
55

66

77
@as_pydantic_validator("__validate_input__", schema={"type": "object"})

ellar/common/datastructures.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import typing as t
22

3+
from ellar.pydantic import as_pydantic_validator
34
from starlette.datastructures import (
45
URL as URL,
56
)
@@ -26,8 +27,6 @@
2627
)
2728
from typing_extensions import Annotated, Doc # type: ignore[attr-defined]
2829

29-
from .pydantic import as_pydantic_validator
30-
3130
__all__ = [
3231
"URL",
3332
"Address",

ellar/common/decorators/exception.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import typing as t
22

33
from ellar.common.constants import EXCEPTION_HANDLERS_KEY
4-
from ellar.common.pydantic import BaseModel
4+
from ellar.pydantic import BaseModel
55

66

77
class ValidateExceptionHandler(BaseModel):

ellar/common/exceptions/validation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import typing as t
22

3-
from ellar.common.pydantic import BaseModel, create_model
43
from ellar.common.serializer import serialize_object
4+
from ellar.pydantic import BaseModel, create_model
55

66
RequestErrorModel: t.Type[BaseModel] = create_model("Request")
77
WebSocketErrorModel: t.Type[BaseModel] = create_model("WebSocket")

ellar/common/interfaces/exceptions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import typing as t
22
from abc import ABC, abstractmethod
33

4-
from ellar.common.pydantic import as_pydantic_validator
4+
from ellar.pydantic import as_pydantic_validator
55
from starlette.responses import Response
66

77
from .context import IHostContext

ellar/common/interfaces/middleware.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import typing as t
22

3-
from ellar.common.pydantic import as_pydantic_validator
3+
from ellar.pydantic import as_pydantic_validator
44

55

66
@as_pydantic_validator("__validate_input__", schema={"type": "object"})

ellar/common/interfaces/response_model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import typing as t
22
from abc import ABC, abstractmethod
33

4-
from ellar.common.pydantic import ModelField
4+
from ellar.pydantic import ModelField
55
from starlette.responses import Response
66

77
from .context import IExecutionContext

ellar/common/interfaces/versioning.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import typing as t
22
from abc import ABC, abstractmethod
33

4-
from ellar.common.pydantic import as_pydantic_validator
54
from ellar.common.types import TScope
5+
from ellar.pydantic import as_pydantic_validator
66

77

88
class IAPIVersioningResolver(ABC):

ellar/common/params/args/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
)
1111
from ellar.common.exceptions import ImproperConfiguration
1212
from ellar.common.interfaces import IExecutionContext
13-
from ellar.common.pydantic import (
13+
from ellar.pydantic import (
1414
BaseModel,
1515
ErrorWrapper,
1616
FieldInfo,

ellar/common/params/args/factory.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import inspect
22
import typing as t
33

4-
from ellar.common.pydantic import (
4+
from ellar.pydantic import (
55
FieldInfo,
66
ModelField,
77
create_model_field,
88
is_scalar_field,
99
)
10-
from ellar.common.pydantic import (
10+
from ellar.pydantic import (
1111
types as pydantic_types,
1212
)
1313

ellar/common/params/args/request_model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from ellar.common.constants import MULTI_RESOLVER_KEY
44
from ellar.common.interfaces import IExecutionContext
55
from ellar.common.logger import logger
6-
from ellar.common.pydantic import (
6+
from ellar.pydantic import (
77
BaseModel,
88
ModelField,
99
create_body_model,

ellar/common/params/args/resolver_generators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
sequence_types,
77
)
88
from ellar.common.exceptions import ImproperConfiguration
9-
from ellar.common.pydantic import (
9+
from ellar.pydantic import (
1010
BaseModel,
1111
FieldConstraintsDefaultValues,
1212
FieldInfo,

ellar/common/params/args/websocket_model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import typing as t
22

33
from ellar.common.interfaces import IExecutionContext
4-
from ellar.common.pydantic import ErrorWrapper, FieldInfo
4+
from ellar.pydantic import ErrorWrapper, FieldInfo
55
from starlette.convertors import Convertor
66

77
from .. import params

ellar/common/params/decorators/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import typing as t
22

3-
from ellar.common.pydantic.types import Undefined
3+
from ellar.pydantic.types import Undefined
44
from typing_extensions import Annotated
55

66
from . import models as param_functions

ellar/common/params/decorators/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import typing as t
22

3-
from ellar.common.pydantic.types import Undefined
3+
from ellar.pydantic.types import Undefined
44

55
from ...params import params
66

ellar/common/params/params.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
from enum import Enum
33

44
from ellar.common.constants import MULTI_RESOLVER_FORM_GROUPED_KEY, MULTI_RESOLVER_KEY
5-
from ellar.common.pydantic import FieldInfo, ModelField
6-
from ellar.common.pydantic import types as pydantic_types
5+
from ellar.pydantic import FieldInfo, ModelField
6+
from ellar.pydantic import types as pydantic_types
77

88
from .resolvers import (
99
BaseRouteParameterResolver,

ellar/common/params/resolvers/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import typing as t
22
from abc import ABC, ABCMeta, abstractmethod
33

4-
from ellar.common.pydantic import (
4+
from ellar.pydantic import (
55
ModelField,
66
get_missing_field_error,
77
regenerate_error_with_loc,

ellar/common/params/resolvers/bulk_parameter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from ellar.common.interfaces import IExecutionContext
44
from ellar.common.logger import request_logger
5-
from ellar.common.pydantic import ErrorWrapper, ModelField
5+
from ellar.pydantic import ErrorWrapper, ModelField
66

77
from .base import BaseRouteParameterResolver
88
from .parameter import BodyParameterResolver, FormParameterResolver

ellar/common/params/resolvers/parameter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@
1212
from ellar.common.exceptions import RequestValidationError
1313
from ellar.common.interfaces import IExecutionContext
1414
from ellar.common.logger import request_logger
15-
from ellar.common.pydantic import (
15+
from ellar.pydantic import (
1616
is_sequence_field,
1717
lenient_issubclass,
1818
)
19-
from ellar.common.pydantic import (
19+
from ellar.pydantic import (
2020
types as pydantic_types,
2121
)
22-
from ellar.common.pydantic.utils import (
22+
from ellar.pydantic.utils import (
2323
is_bytes_sequence_annotation,
2424
serialize_sequence_value,
2525
)

ellar/common/responses/models/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
from ellar.common.exceptions import RequestValidationError
77
from ellar.common.interfaces import IExecutionContext, IResponseModel
88
from ellar.common.logger import request_logger
9-
from ellar.common.pydantic import ModelField, create_model_field
109
from ellar.common.serializer import BaseSerializer, SerializerFilter
10+
from ellar.pydantic import ModelField, create_model_field
1111
from ellar.reflect import reflect
1212
from starlette.responses import Response
1313

ellar/common/responses/models/json.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
from ellar.common.constants import SERIALIZER_FILTER_KEY
44
from ellar.common.interfaces import IExecutionContext
55
from ellar.common.logger import request_logger
6-
from ellar.common.pydantic import as_pydantic_validator, create_model_field
76
from ellar.common.serializer import SerializerFilter, serialize_object
7+
from ellar.pydantic import as_pydantic_validator, create_model_field
88
from ellar.reflect import reflect
99

1010
from ..response_types import JSONResponse, Response

ellar/common/responses/models/route.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from ellar.common.constants import SCOPE_RESPONSE_STARTED
44
from ellar.common.interfaces import IExecutionContext, IResponseModel
55
from ellar.common.logger import logger, request_logger
6-
from ellar.common.pydantic import BaseModel
6+
from ellar.pydantic import BaseModel
77

88
from ..response_types import Response
99
from .base import ResponseModel, ResponseResolver

ellar/common/responses/models/type_converter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33

44
from ellar.common.constants import primitive_types
55
from ellar.common.converters import TypeDefinitionConverter
6-
from ellar.common.pydantic import BaseModel
76
from ellar.common.serializer.base import (
87
BaseSerializer,
98
Serializer,
109
SerializerBase,
1110
convert_dataclass_to_pydantic_model,
1211
)
12+
from ellar.pydantic import BaseModel
1313

1414

1515
class ResponseTypeDefinitionConverter(TypeDefinitionConverter):

ellar/common/routing/schema.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22

33
from ellar.common.constants import ROUTE_METHODS
44
from ellar.common.interfaces import IResponseModel
5-
from ellar.common.pydantic import (
5+
from ellar.common.responses.models import EmptyAPIResponseModel, create_response_model
6+
from ellar.common.routing.websocket import WebSocketExtraHandler
7+
from ellar.common.serializer import BaseSerializer, Serializer
8+
from ellar.pydantic import (
69
BaseModel,
710
Field,
811
PrivateAttr,
912
as_pydantic_validator,
1013
field_validator,
1114
model_validator,
1215
)
13-
from ellar.common.responses.models import EmptyAPIResponseModel, create_response_model
14-
from ellar.common.routing.websocket import WebSocketExtraHandler
15-
from ellar.common.serializer import BaseSerializer, Serializer
1616

1717

1818
@as_pydantic_validator("__validate_input__")

ellar/common/routing/websocket/handler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from ellar.common.interfaces import IExecutionContext
66
from ellar.common.logger import request_logger
77
from ellar.common.params import WebsocketEndpointArgsModel
8-
from ellar.common.pydantic import as_pydantic_validator
8+
from ellar.pydantic import as_pydantic_validator
99
from starlette import status
1010
from starlette.exceptions import WebSocketException
1111
from starlette.status import WS_1008_POLICY_VIOLATION

ellar/common/serializer/base.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
from pathlib import PurePath
66
from types import GeneratorType
77

8-
from ellar.common.pydantic import (
9-
ENCODERS_BY_TYPE,
8+
from ellar.common.utils.functional import LazyStrImport
9+
from ellar.pydantic import (
1010
BaseConfig,
1111
BaseModel,
1212
TypeAdapter,
@@ -126,11 +126,18 @@ def convert_dataclass_to_pydantic_model(dataclass_type: t.Type) -> t.Type[BaseMo
126126
raise Exception(f"{dataclass_type} is not a dataclass")
127127

128128

129+
def _lazy_current_config() -> t.Any:
130+
return LazyStrImport("ellar.app:current_config")
131+
132+
129133
def serialize_object(
130134
obj: t.Any,
131-
encoders: t.Dict[t.Any, t.Callable[[t.Any], t.Any]] = ENCODERS_BY_TYPE,
135+
encoders: t.Optional[t.Dict[t.Any, t.Callable[[t.Any], t.Any]]] = None,
132136
serializer_filter: t.Optional[SerializerFilter] = None,
133137
) -> t.Any:
138+
_encoders = (
139+
encoders if encoders else _lazy_current_config().SERIALIZER_CUSTOM_ENCODER
140+
)
134141
if isinstance(obj, (BaseModel, BaseSerializer)):
135142
if isinstance(obj, BaseSerializer):
136143
obj_dict = obj.serialize(serializer_filter)
@@ -141,12 +148,12 @@ def serialize_object(
141148
**(serializer_filter or default_serializer_filter).dict(),
142149
)
143150

144-
return serialize_object(obj_dict, encoders)
151+
return serialize_object(obj_dict, _encoders)
145152
if is_dataclass(obj):
146-
return serialize_object(asdict(obj), encoders, serializer_filter)
153+
return serialize_object(asdict(obj), _encoders, serializer_filter)
147154
if isinstance(obj, dict):
148155
return {
149-
str(k): serialize_object(v, encoders, serializer_filter)
156+
str(k): serialize_object(v, _encoders, serializer_filter)
150157
for k, v in obj.items()
151158
}
152159
if isinstance(obj, Enum):
@@ -156,9 +163,9 @@ def serialize_object(
156163
if isinstance(obj, (str, int, float, type(None))):
157164
return obj
158165
if isinstance(obj, (list, set, frozenset, GeneratorType, tuple)):
159-
return [serialize_object(item, encoders, serializer_filter) for item in obj]
166+
return [serialize_object(item, _encoders, serializer_filter) for item in obj]
160167

161-
encoder = encoders.get(type(obj))
168+
encoder = _encoders.get(type(obj))
162169
if encoder:
163170
return encoder(obj)
164171

@@ -172,4 +179,4 @@ def serialize_object(
172179
except Exception as e2:
173180
errors.append(e2)
174181
raise ValueError(errors) from e2
175-
return serialize_object(data, encoders, serializer_filter)
182+
return serialize_object(data, _encoders, serializer_filter)

ellar/core/conf/app_settings_models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
LOG_LEVELS as log_levels,
99
)
1010
from ellar.common.interfaces import IAPIVersioning, IEllarMiddleware, IExceptionHandler
11-
from ellar.common.pydantic import ENCODERS_BY_TYPE as encoders_by_type
12-
from ellar.common.pydantic import field_validator
1311
from ellar.common.responses import JSONResponse, PlainTextResponse
1412
from ellar.common.serializer import Serializer, SerializerFilter
1513
from ellar.common.types import ASGIApp, TReceive, TScope, TSend
1614
from ellar.core.versioning import DefaultAPIVersioning
15+
from ellar.pydantic import ENCODERS_BY_TYPE as encoders_by_type
16+
from ellar.pydantic import field_validator
1717
from starlette.exceptions import HTTPException as StarletteHTTPException
1818
from starlette.websockets import WebSocketClose
1919

0 commit comments

Comments
 (0)