Coverage for apps/kwai-api/src/kwai_api/v1/news/schemas.py: 100%

23 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2024-01-01 00:00 +0000

1"""Schemas for a news item.""" 

2 

3from kwai_core.json_api import ( 

4 Meta, 

5 Relationship, 

6 ResourceMeta, 

7) 

8from pydantic import BaseModel, Field 

9 

10from kwai_api.schemas.resources import ( 

11 ApplicationResourceIdentifier, 

12 NewsItemResourceIdentifier, 

13) 

14 

15 

16class NewsApplicationAttributes(BaseModel): 

17 """Attributes of a news application JSON:API resource.""" 

18 

19 name: str 

20 title: str 

21 

22 

23class NewsApplicationResource(ApplicationResourceIdentifier): 

24 """A JSON:API resource for a news application.""" 

25 

26 attributes: NewsApplicationAttributes 

27 

28 

29class NewsApplicationDocument(BaseModel): 

30 """A JSON:API document for a news application.""" 

31 

32 data: NewsApplicationResource 

33 

34 

35class NewsItemText(BaseModel): 

36 """Schema for the text of a news item.""" 

37 

38 locale: str 

39 format: str 

40 title: str 

41 summary: str 

42 content: str | None = None 

43 original_summary: str 

44 original_content: str | None = None 

45 

46 

47class NewsItemAttributes(BaseModel): 

48 """Attributes of a news item JSON:API resource.""" 

49 

50 priority: int = 0 

51 publish_date: str 

52 end_date: str | None = None 

53 enabled: bool = False 

54 remark: str = "" 

55 promotion_end_date: str | None = None 

56 texts: list[NewsItemText] 

57 

58 

59class NewsItemRelationships(BaseModel): 

60 """Relationships of a news item JSON:API resource.""" 

61 

62 application: Relationship[ApplicationResourceIdentifier] 

63 

64 

65class NewsItemResource(NewsItemResourceIdentifier): 

66 """A JSON:API resource for a news item.""" 

67 

68 meta: ResourceMeta | None = None 

69 attributes: NewsItemAttributes 

70 relationships: NewsItemRelationships 

71 

72 

73class NewsItemDocument(BaseModel): 

74 """A JSON:API document for a news item resource.""" 

75 

76 data: NewsItemResource 

77 included: set[NewsApplicationResource] = Field(default_factory=set) 

78 

79 

80class NewsItemsDocument(BaseModel): 

81 """A JSON:API document for multiple news item resources.""" 

82 

83 meta: Meta 

84 data: list[NewsItemResource] = Field(default_factory=list) 

85 included: set[NewsApplicationResource] = Field(default_factory=set)