Skip to content
Open
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
10 changes: 6 additions & 4 deletions src/glean/api_client/models/answerlikes.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,25 @@
from __future__ import annotations
from glean.api_client.types import BaseModel
import pydantic
from typing import List, TYPE_CHECKING
from typing_extensions import Annotated, TypedDict
from typing import List, Optional, TYPE_CHECKING
from typing_extensions import Annotated, NotRequired, TypedDict

if TYPE_CHECKING:
from .answerlike import AnswerLike, AnswerLikeTypedDict


class AnswerLikesTypedDict(TypedDict):
liked_by: List["AnswerLikeTypedDict"]
liked_by: NotRequired[Optional[List["AnswerLikeTypedDict"]]]
liked_by_user: bool
r"""Whether the user in context liked the answer."""
num_likes: int
r"""The total number of likes for the answer."""


class AnswerLikes(BaseModel):
liked_by: Annotated[List["AnswerLike"], pydantic.Field(alias="likedBy")]
liked_by: Annotated[
Optional[List["AnswerLike"]], pydantic.Field(alias="likedBy")
] = None

liked_by_user: Annotated[bool, pydantic.Field(alias="likedByUser")]
r"""Whether the user in context liked the answer."""
Expand Down
2 changes: 1 addition & 1 deletion src/glean/api_client/models/documentcontent.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def serialize_model(self, handler):

for n, f in type(self).model_fields.items():
k = f.alias or n
val = serialized.get(k)
val = serialized.get(k, serialized.get(n, UNSET_SENTINEL))

if val != UNSET_SENTINEL:
if val is not None or k not in optional_fields:
Expand Down
23 changes: 23 additions & 0 deletions tests/test_model_regressions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from glean.api_client import models


def test_answer_likes_accepts_null_liked_by():
payload = {
"likedBy": None,
"likedByUser": False,
"numLikes": 0,
}

likes = models.AnswerLikes.model_validate(payload)

assert likes.liked_by is None
assert likes.liked_by_user is False
assert likes.num_likes == 0


def test_document_content_model_dump_keeps_alias_field_value():
content = models.DocumentContent(fullTextList=["This is a test document."])

dumped = content.model_dump()

assert dumped["fullTextList"] == ["This is a test document."]