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
« 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#
13from __future__ import annotations
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
23__all__ = ["GroupWrapper"]
26_K = GroupKeys
29class GroupWrapper(PersistedWrapper[GroupModel]):
30 MODEL_CLASS = GroupModel
32 @property
33 def can_share(self) -> bool:
34 return self.model.can_share
36 def reindex(self) -> None:
37 self.model.reindex()
39 @property
40 def views(self) -> int:
41 return self.model.view_stats.views
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 )
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
58 # <AUTO_GENERATED_CONTENT> - do not edit
60 @property
61 def visibility(self) -> AppVisibility:
62 return self._model.visibility
64 @visibility.setter
65 def visibility(self, value: AppVisibility) -> None:
66 self.update_field(_K.VISIBILITY, value)
68 @property
69 def uid(self) -> str:
70 return self._model.uid
72 @uid.setter
73 def uid(self, value: str) -> None:
74 self.update_field(_K.UID, value)
76 @property
77 def name(self) -> str:
78 return self._model.name
80 @name.setter
81 def name(self, value: str) -> None:
82 self.update_field(_K.NAME, value)
84 @property
85 def description(self) -> str:
86 return self._model.description
88 @description.setter
89 def description(self, value: str) -> None:
90 self.update_field(_K.DESCRIPTION, value)
92 @property
93 def avatar(self) -> ImageModel | None:
94 return self._model.avatar
96 @avatar.setter
97 def avatar(self, value: ImageModel | None) -> None:
98 self.update_field(_K.AVATAR, value)
100 @property
101 def flag_id(self) -> str | None:
102 return self._model.flag_id
104 @flag_id.setter
105 def flag_id(self, value: str | None) -> None:
106 self.update_field(_K.FLAG_ID, value)
108 @property
109 def member_ct(self) -> int:
110 return self._model.member_ct
112 @member_ct.setter
113 def member_ct(self, value: int) -> None:
114 self.update_field(_K.MEMBER_CT, value)
116 @property
117 def invite_ct(self) -> int:
118 return self._model.invite_ct
120 @invite_ct.setter
121 def invite_ct(self, value: int) -> None:
122 self.update_field(_K.INVITE_CT, value)
124 @property
125 def dare_stats(self) -> DareStatsModel:
126 return self._model.dare_stats
128 @dare_stats.setter
129 def dare_stats(self, value: DareStatsModel) -> None:
130 self.update_field(_K.DARE_STATS, value)
132 @property
133 def view_stats(self) -> ViewStatsModel:
134 return self._model.view_stats
136 @view_stats.setter
137 def view_stats(self, value: ViewStatsModel) -> None:
138 self.update_field(_K.VIEW_STATS, value)
140 # base internal fields
141 @property
142 def version(self) -> int:
143 return self._model.version
145 @version.setter
146 def version(self, value: int) -> None:
147 self.update_field(_K.VERSION, value)
149 @property
150 def processed(self) -> bool:
151 return self._model.processed
153 @processed.setter
154 def processed(self, value: bool) -> None:
155 self.update_field(_K.PROCESSED, value)
157 @property
158 def error_count(self) -> int:
159 return self._model.error_count
161 @error_count.setter
162 def error_count(self, value: int) -> None:
163 self.update_field(_K.ERROR_COUNT, value)
165 # group specific internal fields
166 @property
167 def hash_generated(self) -> bool:
168 return self._model.hash_generated
170 @hash_generated.setter
171 def hash_generated(self, value: bool) -> None:
172 self.update_field(_K.HASH_GENERATED, value)
174 @property
175 def member_created(self) -> bool:
176 return self._model.member_created
178 @member_created.setter
179 def member_created(self, value: bool) -> None:
180 self.update_field(_K.MEMBER_CREATED, value)
182 @property
183 def search_indexed(self) -> bool:
184 return self._model.search_indexed
186 @search_indexed.setter
187 def search_indexed(self, value: bool) -> None:
188 self.update_field(_K.SEARCH_INDEXED, value)
190 # </AUTO_GENERATED_CONTENT> - do not edit