Coverage for functions \ flipdare \ wrapper \ group_wrapper.py: 83%

127 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.app_globals import string_has_alpha 

16from flipdare.generated.model.group_model import GroupKeys, GroupModel 

17from flipdare.generated.model.internal.dare_stats_model import DareStatsModel 

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

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

20from flipdare.generated.shared.model.app_visibility import AppVisibility 

21from flipdare.wrapper._persisted_wrapper import PersistedWrapper 

22 

23__all__ = ["GroupWrapper"] 

24 

25 

26_K = GroupKeys 

27 

28 

29class GroupWrapper(PersistedWrapper[GroupModel]): 

30 MODEL_CLASS = GroupModel 

31 

32 @property 

33 def can_share(self) -> bool: 

34 return self.model.can_share 

35 

36 def reindex(self) -> None: 

37 self.model.reindex() 

38 

39 @property 

40 def views(self) -> int: 

41 return self.model.view_stats.views 

42 

43 @property 

44 def processing_complete(self) -> bool: 

45 return ( 

46 self.processed and self.hash_generated and self.member_created and self.search_indexed 

47 ) 

48 

49 @property 

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

51 values = [] 

52 if string_has_alpha(self.name): 

53 values.append(self.name) 

54 if string_has_alpha(self.description): 

55 values.append(self.description) 

56 return values 

57 

58 # <AUTO_GENERATED_CONTENT> - do not edit 

59 

60 @property 

61 def visibility(self) -> AppVisibility: 

62 return self._model.visibility 

63 

64 @visibility.setter 

65 def visibility(self, value: AppVisibility) -> None: 

66 self.update_field(_K.VISIBILITY, value) 

67 

68 @property 

69 def uid(self) -> str: 

70 return self._model.uid 

71 

72 @uid.setter 

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

74 self.update_field(_K.UID, value) 

75 

76 @property 

77 def name(self) -> str: 

78 return self._model.name 

79 

80 @name.setter 

81 def name(self, value: str) -> None: 

82 self.update_field(_K.NAME, value) 

83 

84 @property 

85 def description(self) -> str: 

86 return self._model.description 

87 

88 @description.setter 

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

90 self.update_field(_K.DESCRIPTION, value) 

91 

92 @property 

93 def avatar(self) -> ImageModel | None: 

94 return self._model.avatar 

95 

96 @avatar.setter 

97 def avatar(self, value: ImageModel | None) -> None: 

98 self.update_field(_K.AVATAR, value) 

99 

100 @property 

101 def flag_id(self) -> str | None: 

102 return self._model.flag_id 

103 

104 @flag_id.setter 

105 def flag_id(self, value: str | None) -> None: 

106 self.update_field(_K.FLAG_ID, value) 

107 

108 @property 

109 def member_ct(self) -> int: 

110 return self._model.member_ct 

111 

112 @member_ct.setter 

113 def member_ct(self, value: int) -> None: 

114 self.update_field(_K.MEMBER_CT, value) 

115 

116 @property 

117 def invite_ct(self) -> int: 

118 return self._model.invite_ct 

119 

120 @invite_ct.setter 

121 def invite_ct(self, value: int) -> None: 

122 self.update_field(_K.INVITE_CT, value) 

123 

124 @property 

125 def dare_stats(self) -> DareStatsModel: 

126 return self._model.dare_stats 

127 

128 @dare_stats.setter 

129 def dare_stats(self, value: DareStatsModel) -> None: 

130 self.update_field(_K.DARE_STATS, value) 

131 

132 @property 

133 def view_stats(self) -> ViewStatsModel: 

134 return self._model.view_stats 

135 

136 @view_stats.setter 

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

138 self.update_field(_K.VIEW_STATS, value) 

139 

140 # base internal fields 

141 @property 

142 def version(self) -> int: 

143 return self._model.version 

144 

145 @version.setter 

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

147 self.update_field(_K.VERSION, value) 

148 

149 @property 

150 def processed(self) -> bool: 

151 return self._model.processed 

152 

153 @processed.setter 

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

155 self.update_field(_K.PROCESSED, value) 

156 

157 @property 

158 def error_count(self) -> int: 

159 return self._model.error_count 

160 

161 @error_count.setter 

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

163 self.update_field(_K.ERROR_COUNT, value) 

164 

165 # group specific internal fields 

166 @property 

167 def hash_generated(self) -> bool: 

168 return self._model.hash_generated 

169 

170 @hash_generated.setter 

171 def hash_generated(self, value: bool) -> None: 

172 self.update_field(_K.HASH_GENERATED, value) 

173 

174 @property 

175 def member_created(self) -> bool: 

176 return self._model.member_created 

177 

178 @member_created.setter 

179 def member_created(self, value: bool) -> None: 

180 self.update_field(_K.MEMBER_CREATED, value) 

181 

182 @property 

183 def search_indexed(self) -> bool: 

184 return self._model.search_indexed 

185 

186 @search_indexed.setter 

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

188 self.update_field(_K.SEARCH_INDEXED, value) 

189 

190 # </AUTO_GENERATED_CONTENT> - do not edit