|
10 | 10 | from sys import version_info
|
11 | 11 | from typing import Any, Dict, Optional
|
12 | 12 |
|
13 |
| -from pydantic import BaseModel, ConfigDict |
| 13 | +from pydantic import BaseModel, ConfigDict, field_serializer |
14 | 14 |
|
15 | 15 | if version_info >= (3, 11):
|
16 | 16 | from typing import Self
|
@@ -59,6 +59,43 @@ class Hit(BaseModel):
|
59 | 59 | extra="allow",
|
60 | 60 | )
|
61 | 61 |
|
| 62 | + @staticmethod |
| 63 | + def __dump_item(item): |
| 64 | + return ( |
| 65 | + item.model_dump( |
| 66 | + by_alias=True, |
| 67 | + exclude_none=True, |
| 68 | + exclude_unset=True, |
| 69 | + warnings="none", |
| 70 | + ) |
| 71 | + if isinstance(item, BaseModel) |
| 72 | + else item |
| 73 | + ) |
| 74 | + |
| 75 | + @field_serializer("highlight_result") |
| 76 | + def serialize_highlight_result(self, v: HighlightResult | None): |
| 77 | + if v is None: |
| 78 | + return None |
| 79 | + |
| 80 | + if isinstance(v, dict): |
| 81 | + return {k: self.__dump_item(val) for k, val in v.items()} |
| 82 | + elif isinstance(v, list): |
| 83 | + return [self.__dump_item(val) for val in v] |
| 84 | + else: |
| 85 | + return self.__dump_item(v) |
| 86 | + |
| 87 | + @field_serializer("snippet_result") |
| 88 | + def serialize_snippet_result(self, v: SnippetResult | None): |
| 89 | + if v is None: |
| 90 | + return None |
| 91 | + |
| 92 | + if isinstance(v, dict): |
| 93 | + return {k: self.__dump_item(val) for k, val in v.items()} |
| 94 | + elif isinstance(v, list): |
| 95 | + return [self.__dump_item(val) for val in v] |
| 96 | + else: |
| 97 | + return self.__dump_item(v) |
| 98 | + |
62 | 99 | def to_json(self) -> str:
|
63 | 100 | return self.model_dump_json(by_alias=True, exclude_unset=True)
|
64 | 101 |
|
|
0 commit comments