Coverage for functions \ flipdare \ wrapper \ content_wrapper.py: 73%

113 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-05-08 12:22 +1000

1#!/usr/bin/env python 

2# Copyright (c) 2026 Flipdare Pty Ltd. All rights reserved. 

3# 

4# This file is part of Flipdare's proprietary software and contains 

5# confidential and copyrighted material. Unauthorised copying, 

6# modification, distribution, or use of this file is strictly 

7# prohibited without prior written permission from Flipdare Pty Ltd. 

8# 

9# This software includes third-party components licensed under MIT, 

10# BSD, and Apache 2.0 licences. See THIRD_PARTY_NOTICES for details. 

11# 

12 

13from __future__ import annotations 

14 

15from flipdare.generated.model.content_model import ContentKeys, ContentModel 

16from flipdare.generated.model.internal.image_model import ImageModel 

17from flipdare.generated.model.internal.video_model import VideoModel 

18from flipdare.generated.model.internal.view_stats_model import ViewStatsModel 

19from flipdare.generated.shared.model.model_obj_type import ModelObjType 

20from flipdare.wrapper._persisted_wrapper import PersistedWrapper 

21 

22__all__ = ["ContentWrapper"] 

23 

24_K = ContentKeys 

25 

26 

27class ContentWrapper(PersistedWrapper[ContentModel]): 

28 MODEL_CLASS = ContentModel 

29 

30 @property 

31 def searchable_values(self) -> list[str]: 

32 return [self.description] if self.description is not None else [] 

33 

34 @property 

35 def is_user(self) -> bool: 

36 return self.model.obj_type == ModelObjType.USER 

37 

38 @property 

39 def is_group(self) -> bool: 

40 return self.model.obj_type == ModelObjType.GROUP 

41 

42 @property 

43 def is_video(self) -> bool: 

44 return self.model.video is not None 

45 

46 @property 

47 def is_image(self) -> bool: 

48 return self.model.image is not None 

49 

50 @property 

51 def processing_complete(self) -> bool: 

52 return ( 

53 self.processed 

54 and self.thumbnail_created 

55 and self.hash_created 

56 and self.optimized_video 

57 and self.search_indexed 

58 ) 

59 

60 # <AUTO_GENERATED_CONTENT> - do not edit 

61 

62 @property 

63 def obj_id(self) -> str: 

64 return self._model.obj_id 

65 

66 @obj_id.setter 

67 def obj_id(self, value: str) -> None: 

68 self.update_field(_K.OBJ_ID, value) 

69 

70 @property 

71 def uid(self) -> str: 

72 return self._model.uid 

73 

74 @uid.setter 

75 def uid(self, value: str) -> None: 

76 self.update_field(_K.UID, value) 

77 

78 @property 

79 def obj_type(self) -> ModelObjType: 

80 return self._model.obj_type 

81 

82 @obj_type.setter 

83 def obj_type(self, value: ModelObjType) -> None: 

84 self.update_field(_K.OBJ_TYPE, value) 

85 

86 @property 

87 def view_stats(self) -> ViewStatsModel: 

88 return self._model.view_stats 

89 

90 @view_stats.setter 

91 def view_stats(self, value: ViewStatsModel) -> None: 

92 self.update_field(_K.VIEW_STATS, value) 

93 

94 @property 

95 def video(self) -> VideoModel | None: 

96 return self._model.video 

97 

98 @video.setter 

99 def video(self, value: VideoModel | None) -> None: 

100 self.update_field(_K.VIDEO, value) 

101 

102 @property 

103 def image(self) -> ImageModel | None: 

104 return self._model.image 

105 

106 @image.setter 

107 def image(self, value: ImageModel | None) -> None: 

108 self.update_field(_K.IMAGE, value) 

109 

110 @property 

111 def description(self) -> str | None: 

112 return self._model.description 

113 

114 @description.setter 

115 def description(self, value: str | None) -> None: 

116 self.update_field(_K.DESCRIPTION, value) 

117 

118 # base internal fields 

119 @property 

120 def version(self) -> int: 

121 return self._model.version 

122 

123 @version.setter 

124 def version(self, value: int) -> None: 

125 self.update_field(_K.VERSION, value) 

126 

127 @property 

128 def processed(self) -> bool: 

129 return self._model.processed 

130 

131 @processed.setter 

132 def processed(self, value: bool) -> None: 

133 self.update_field(_K.PROCESSED, value) 

134 

135 @property 

136 def error_count(self) -> int: 

137 return self._model.error_count 

138 

139 @error_count.setter 

140 def error_count(self, value: int) -> None: 

141 self.update_field(_K.ERROR_COUNT, value) 

142 

143 # content specific internal fields 

144 @property 

145 def thumbnail_created(self) -> bool: 

146 return self._model.thumbnail_created 

147 

148 @thumbnail_created.setter 

149 def thumbnail_created(self, value: bool) -> None: 

150 self.update_field(_K.THUMBNAIL_CREATED, value) 

151 

152 @property 

153 def hash_created(self) -> bool: 

154 return self._model.hash_created 

155 

156 @hash_created.setter 

157 def hash_created(self, value: bool) -> None: 

158 self.update_field(_K.HASH_CREATED, value) 

159 

160 @property 

161 def optimized_video(self) -> bool: 

162 return self._model.optimized_video 

163 

164 @optimized_video.setter 

165 def optimized_video(self, value: bool) -> None: 

166 self.update_field(_K.OPTIMIZED_VIDEO, value) 

167 

168 @property 

169 def search_indexed(self) -> bool: 

170 return self._model.search_indexed 

171 

172 @search_indexed.setter 

173 def search_indexed(self, value: bool) -> None: 

174 self.update_field(_K.SEARCH_INDEXED, value) 

175 

176 # </AUTO_GENERATED_CONTENT> - do not edit