mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-30 19:54:16 -04:00
Map Language
for pydantic
This commit is contained in:
parent
de199eeec4
commit
965cad76bb
@ -1,8 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from langcodes import Language
|
from ..utils import Language, Model
|
||||||
|
|
||||||
from ..utils import Model
|
|
||||||
from .genre import Genre
|
from .genre import Genre
|
||||||
from .metadataid import MetadataId
|
from .metadataid import MetadataId
|
||||||
|
|
||||||
|
@ -3,9 +3,7 @@ from __future__ import annotations
|
|||||||
from datetime import date
|
from datetime import date
|
||||||
from typing import Literal
|
from typing import Literal
|
||||||
|
|
||||||
from langcodes import Language
|
from ..utils import Language, Model
|
||||||
|
|
||||||
from ..utils import Model
|
|
||||||
from .metadataid import EpisodeId, MetadataId
|
from .metadataid import EpisodeId, MetadataId
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,9 +3,7 @@ from __future__ import annotations
|
|||||||
from datetime import date
|
from datetime import date
|
||||||
from enum import StrEnum
|
from enum import StrEnum
|
||||||
|
|
||||||
from langcodes import Language
|
from ..utils import Language, Model
|
||||||
|
|
||||||
from ..utils import Model
|
|
||||||
from .collection import Collection
|
from .collection import Collection
|
||||||
from .genre import Genre
|
from .genre import Genre
|
||||||
from .metadataid import MetadataId
|
from .metadataid import MetadataId
|
||||||
|
@ -2,9 +2,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from datetime import date
|
from datetime import date
|
||||||
|
|
||||||
from langcodes import Language
|
from ..utils import Language, Model
|
||||||
|
|
||||||
from ..utils import Model
|
|
||||||
from .metadataid import SeasonId
|
from .metadataid import SeasonId
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,9 +3,7 @@ from __future__ import annotations
|
|||||||
from datetime import date
|
from datetime import date
|
||||||
from enum import StrEnum
|
from enum import StrEnum
|
||||||
|
|
||||||
from langcodes import Language
|
from ..utils import Language, Model
|
||||||
|
|
||||||
from ..utils import Model
|
|
||||||
from .collection import Collection
|
from .collection import Collection
|
||||||
from .entry import Entry
|
from .entry import Entry
|
||||||
from .extra import Extra
|
from .extra import Extra
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
from langcodes import Language
|
from typing import Annotated, Any, Callable
|
||||||
from pydantic import AliasGenerator, BaseModel, ConfigDict
|
|
||||||
|
from langcodes import Language as BaseLanguage
|
||||||
|
from pydantic import AliasGenerator, BaseModel, ConfigDict, GetJsonSchemaHandler
|
||||||
from pydantic.alias_generators import to_camel
|
from pydantic.alias_generators import to_camel
|
||||||
|
from pydantic.json_schema import JsonSchemaValue
|
||||||
|
from pydantic_core import core_schema
|
||||||
def normalize_lang(lang: str) -> str:
|
|
||||||
return str(Language.get(lang))
|
|
||||||
|
|
||||||
|
|
||||||
def to_slug(title: str) -> str:
|
def to_slug(title: str) -> str:
|
||||||
return title
|
return title
|
||||||
|
|
||||||
|
|
||||||
def clean(val: str) -> str | None:
|
def clean(val: str) -> str | None:
|
||||||
return val or None
|
return val or None
|
||||||
|
|
||||||
@ -21,3 +22,41 @@ class Model(BaseModel):
|
|||||||
serialization_alias=lambda x: to_camel(x[:-1] if x[-1] == "_" else x),
|
serialization_alias=lambda x: to_camel(x[:-1] if x[-1] == "_" else x),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class _LanguagePydanticAnnotation:
|
||||||
|
@classmethod
|
||||||
|
def __get_pydantic_core_schema__(
|
||||||
|
cls,
|
||||||
|
_source_type: Any,
|
||||||
|
_handler: Callable[[Any], core_schema.CoreSchema],
|
||||||
|
) -> core_schema.CoreSchema:
|
||||||
|
def validate_from_str(value: str) -> BaseLanguage:
|
||||||
|
return BaseLanguage.get(value)
|
||||||
|
|
||||||
|
from_str_schema = core_schema.chain_schema(
|
||||||
|
[
|
||||||
|
core_schema.str_schema(),
|
||||||
|
core_schema.no_info_plain_validator_function(validate_from_str),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
return core_schema.json_or_python_schema(
|
||||||
|
json_schema=from_str_schema,
|
||||||
|
python_schema=core_schema.union_schema(
|
||||||
|
[
|
||||||
|
core_schema.is_instance_schema(BaseLanguage),
|
||||||
|
from_str_schema,
|
||||||
|
]
|
||||||
|
),
|
||||||
|
serialization=core_schema.to_string_ser_schema(),
|
||||||
|
)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def __get_pydantic_json_schema__(
|
||||||
|
cls, _core_schema: core_schema.CoreSchema, handler: GetJsonSchemaHandler
|
||||||
|
) -> JsonSchemaValue:
|
||||||
|
return handler(core_schema.str_schema())
|
||||||
|
|
||||||
|
|
||||||
|
Language = Annotated[BaseLanguage, _LanguagePydanticAnnotation]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user