Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 5 additions & 10 deletions pydantic_xml/fields.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import dataclasses as dc
import typing
from typing import Any, Callable, Optional, Type, TypeVar, Union
from typing import Any, Callable, Optional, TypeVar, Union

import pydantic as pd
import pydantic_core as pdc
from pydantic._internal._model_construction import ModelMetaclass # noqa
from pydantic.root_model import _RootModelMetaclass as RootModelMetaclass # noqa

from . import config, model, utils
from .element import XmlElementReader, XmlElementWriter
from .typedefs import EntityLocation
from .utils import NsMap

Expand All @@ -22,8 +21,6 @@
'xml_field_serializer',
'xml_field_validator',
'ComputedXmlEntityInfo',
'SerializerFunc',
'ValidatorFunc',
'XmlEntityInfo',
'XmlEntityInfoP',
'XmlFieldSerializer',
Expand Down Expand Up @@ -295,8 +292,7 @@ def computed_element(
return computed_entity(EntityLocation.ELEMENT, prop, path=tag, ns=ns, nsmap=nsmap, nillable=nillable, **kwargs)


ValidatorFunc = Callable[[Type['model.BaseXmlModel'], XmlElementReader, str], Any]
ValidatorFuncT = TypeVar('ValidatorFuncT', bound=ValidatorFunc)
ValidatorFuncT = TypeVar('ValidatorFuncT', bound='model.SerializerFunc')


def xml_field_validator(field: str, /, *fields: str) -> Callable[[ValidatorFuncT], ValidatorFuncT]:
Expand All @@ -314,8 +310,7 @@ def wrapper(func: ValidatorFuncT) -> ValidatorFuncT:
return wrapper


SerializerFunc = Callable[['model.BaseXmlModel', XmlElementWriter, Any, str], Any]
SerializerFuncT = TypeVar('SerializerFuncT', bound=SerializerFunc)
SerializerFuncT = TypeVar('SerializerFuncT', bound='model.SerializerFunc')


def xml_field_serializer(field: str, /, *fields: str) -> Callable[[SerializerFuncT], SerializerFuncT]:
Expand All @@ -335,9 +330,9 @@ def wrapper(func: SerializerFuncT) -> SerializerFuncT:

@dc.dataclass(frozen=True)
class XmlFieldValidator:
func: ValidatorFunc
func: 'model.ValidatorFunc'


@dc.dataclass(frozen=True)
class XmlFieldSerializer:
func: SerializerFunc
func: 'model.SerializerFunc'
11 changes: 7 additions & 4 deletions pydantic_xml/model.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import typing
from typing import Any, ClassVar, Dict, Generic, Optional, Tuple, Type, TypeVar, Union
from typing import Any, Callable, ClassVar, Dict, Generic, Optional, Tuple, Type, TypeVar, Union

import pydantic as pd
import pydantic_core as pdc
Expand All @@ -9,10 +9,9 @@
from pydantic.root_model import _RootModelMetaclass as RootModelMetaclass # noqa

from . import config, errors, utils
from .element import SearchMode
from .element import SearchMode, XmlElementReader, XmlElementWriter
from .element.native import ElementT, XmlElement, etree
from .fields import SerializerFunc, ValidatorFunc, XmlEntityInfo, XmlFieldSerializer, XmlFieldValidator, attr, element
from .fields import wrapped
from .fields import XmlEntityInfo, XmlFieldSerializer, XmlFieldValidator, attr, element, wrapped
from .serializers.factories.model import BaseModelSerializer
from .serializers.serializer import Serializer
from .typedefs import EntityLocation
Expand All @@ -22,6 +21,8 @@
'BaseXmlModel',
'create_model',
'RootXmlModel',
'SerializerFunc',
'ValidatorFunc',
'XmlModelMeta',
)

Expand Down Expand Up @@ -136,6 +137,8 @@ def _collect_xml_field_serializers_validators(mcls, cls: Type['BaseXmlModel']) -
cls.__xml_field_validators__[field] = func


ValidatorFunc = Callable[[Type['BaseXmlModel'], XmlElementReader, str], Any]
SerializerFunc = Callable[['BaseXmlModel', XmlElementWriter, Any, str], Any]
ModelT = TypeVar('ModelT', bound='BaseXmlModel')


Expand Down