3
3
4
4
begin : 2022-01-15
5
5
git sha : $Format:%H$
6
- copyright : (C) 2022 by Cryptodira
6
+ copyright : (C) 2022-2024 by Cryptodira
7
7
8
8
9
9
/***************************************************************************
33
33
overload
34
34
)
35
35
36
- from qgis .PyQt .QtCore import pyqtSignal
36
+ from qgis .PyQt .QtCore import (
37
+ QObject ,
38
+ pyqtSignal
39
+ )
37
40
38
41
from ..utils import tr
39
42
from .base import (
40
- MISSING ,
41
- Factory ,
42
- RdsBaseModel ,
43
43
SortedKeyedList ,
44
44
in_range ,
45
45
not_empty ,
51
51
)
52
52
53
53
54
- class RdsDistrict (RdsBaseModel ):
54
+ class RdsDistrict (QObject ):
55
55
BASE_COLUMNS = list (DistrictColumns )
56
56
STATS_COLUMNS = list (MetricsColumns )
57
57
WRITABLE_ATTRIBUTES = (DistrictColumns .NAME , int (DistrictColumns .NAME ),
@@ -62,29 +62,29 @@ class RdsDistrict(RdsBaseModel):
62
62
descriptionChanged = pyqtSignal ()
63
63
64
64
district : int
65
- name : Annotated [str , not_empty ] = rds_property (
66
- notify = nameChanged , strict = True , factory = Factory (lambda self : str (self .district ))
67
- )
68
- members : Annotated [int , in_range (0 , 9999 )] = rds_property (notify = membersChanged , strict = True , default = 1 )
65
+ name : Annotated [str , not_empty ] = rds_property (notify = nameChanged )
66
+ members : Annotated [int , in_range (0 , 9999 )] = rds_property (notify = membersChanged )
69
67
population : int = 0
70
68
deviation : int = 0
71
69
pct_deviation : float = 0.0
72
- description : str = rds_property (private = True , notify = descriptionChanged , strict = True , default = "" )
70
+ description : str = rds_property (private = True , notify = descriptionChanged )
73
71
fid : int = - 1
74
72
75
- def __pre_init__ (self ):
73
+ def __init__ (self , district : int , name : Optional [str ] = None , members : Optional [int ] = 1 , description : str = '' , fid = - 1 , ** kwargs ):
74
+ super ().__init__ ()
75
+ self .fid = fid
76
76
self ._data = {
77
- DistrictColumns .DISTRICT : MISSING ,
78
- DistrictColumns .NAME : MISSING ,
79
- DistrictColumns .MEMBERS : 1 ,
77
+ DistrictColumns .DISTRICT : district ,
78
+ DistrictColumns .NAME : name or str ( district ) ,
79
+ DistrictColumns .MEMBERS : members ,
80
80
DistrictColumns .POPULATION : 0 ,
81
81
DistrictColumns .DEVIATION : 0 ,
82
82
DistrictColumns .PCT_DEVIATION : 0.0 ,
83
83
}
84
+ self ._description = description
84
85
self ._data .update (zip (RdsDistrict .STATS_COLUMNS , repeat (None )))
85
86
86
- def __post_init__ (self , ** data ):
87
- self .update (data )
87
+ self .update (kwargs )
88
88
89
89
def __key__ (self ):
90
90
return str (self .district ).rjust (4 , "0" )
@@ -138,18 +138,15 @@ def __eq__(self, __value: "RdsDistrict"):
138
138
return self ._data == __value ._data
139
139
140
140
def __getattr__ (self , name ):
141
- if not name in self ._data :
142
- raise AttributeError (tr ("District object has no attribute {name}" ).format (name = name ))
143
- return self ._data [name ]
141
+ if name in self ._data :
142
+ return self ._data [name ]
143
+
144
+ return super ().__getattr__ (name )
144
145
145
- @rds_property ( readonly = True )
146
+ @rds_property
146
147
def district (self ):
147
148
return self ._data [DistrictColumns .DISTRICT ]
148
149
149
- @district .setter
150
- def district (self , value : int ):
151
- self ._data [DistrictColumns .DISTRICT ] = value
152
-
153
150
@name .getter
154
151
def name (self ):
155
152
return self ._data [DistrictColumns .NAME ]
@@ -166,23 +163,23 @@ def members(self):
166
163
def members (self , value : int ):
167
164
self ._data [DistrictColumns .MEMBERS ] = value
168
165
169
- @rds_property ( strict = True )
166
+ @rds_property
170
167
def population (self ):
171
168
return self ._data [DistrictColumns .POPULATION ]
172
169
173
170
@population .setter
174
171
def population (self , value : int ):
175
172
self ._data [DistrictColumns .POPULATION ] = value
176
173
177
- @rds_property ( strict = True )
174
+ @rds_property
178
175
def deviation (self ):
179
176
return self ._data [DistrictColumns .DEVIATION ]
180
177
181
178
@deviation .setter
182
179
def deviation (self , value : int ):
183
180
self ._data [DistrictColumns .DEVIATION ] = value
184
181
185
- @rds_property ( strict = True )
182
+ @rds_property
186
183
def pct_deviation (self ):
187
184
return self ._data [DistrictColumns .PCT_DEVIATION ]
188
185
@@ -218,20 +215,22 @@ def update(self, data: Union["RdsDistrict", dict[str, Any]]):
218
215
219
216
220
217
class RdsUnassigned (RdsDistrict ):
221
- district : Literal [0 ] = rds_property (
222
- init = False , readonly = True , default = 0 , fget = RdsDistrict .district .fget , fset = RdsDistrict .district .fset )
223
- name : str = rds_property (init = False , readonly = True , default = tr ("Unassigned" ),
224
- fget = RdsDistrict .name .fget , fset = RdsDistrict .name .fset )
218
+ district : Literal [0 ] = rds_property (fget = RdsDistrict .district .fget )
219
+ name : str = rds_property (fget = RdsDistrict .name .fget )
225
220
members : Optional [int ] = None
226
221
deviation : Optional [int ] = None
227
222
pct_deviation : Optional [float ] = None
228
223
229
- def __pre_init__ (self ):
230
- super ().__pre_init__ ()
231
- self ._data [DistrictColumns .MEMBERS ] = None
232
- self ._data [DistrictColumns .POPULATION ] = None
233
- self ._data [DistrictColumns .DEVIATION ] = None
234
- self ._data [DistrictColumns .PCT_DEVIATION ] = None
224
+ def __init__ (self , * , fid = - 1 , ** kwargs ):
225
+ if DistrictColumns .DISTRICT in kwargs :
226
+ del kwargs [DistrictColumns .DISTRICT ]
227
+ if DistrictColumns .NAME in kwargs :
228
+ del kwargs [DistrictColumns .NAME ]
229
+ kwargs [DistrictColumns .MEMBERS ] = None
230
+ kwargs [DistrictColumns .DEVIATION ] = None
231
+ kwargs [DistrictColumns .PCT_DEVIATION ] = None
232
+
233
+ super ().__init__ (0 , tr ("Unassigned" ), fid = fid , ** kwargs )
235
234
236
235
def __setitem__ (self , key : Union [str , int , slice ], value : Any ):
237
236
raise IndexError (tr ("'{key}' field is readonly for Unassigned goegraphies" ).format (key = key ))
0 commit comments