@@ -67,6 +67,15 @@ def get_import_class(cereconf=cereconf):
67
67
return cls
68
68
69
69
70
+ def _is_deceased (person_obj , _today = None ):
71
+ """ helper - check if a Person object is deceased. """
72
+ today = _today or datetime .date .today ()
73
+ return (
74
+ person_obj
75
+ and person_obj .deceased_date
76
+ and date_compat .get_date (person_obj .deceased_date ) < today )
77
+
78
+
70
79
class GregImporter (object ):
71
80
72
81
REQUIRED_PERSON_ID = (
@@ -112,10 +121,11 @@ def get_person(self, greg_person):
112
121
raise ValueError ('invalid person: no external_ids' )
113
122
return search (self .db , criterias , required = False )
114
123
115
- def get_ou (self , greg_orgunit ):
124
+ def get_ou (self , orgunit_ids ):
116
125
""" Find matching ou from a Greg orgunit dict. """
117
126
search = OuMatcher ()
118
- criterias = tuple (self .mapper .get_orgunit_ids (greg_orgunit ))
127
+ criterias = tuple ((id_type , id_value )
128
+ for id_type , id_value in orgunit_ids )
119
129
if not criterias :
120
130
raise ValueError ('invalid orgunit: no external_ids' )
121
131
return search (self .db , criterias , required = True )
@@ -143,11 +153,7 @@ def handle_object(self, greg_person, person_obj):
143
153
"""
144
154
greg_id = greg_person ['id' ]
145
155
146
- is_deceased = (
147
- person_obj
148
- and person_obj .deceased_date
149
- and (date_compat .get_date (person_obj .deceased_date )
150
- < datetime .date .today ()))
156
+ is_deceased = _is_deceased (person_obj )
151
157
if is_deceased :
152
158
logger .warning ('person_id=%s is marked as deceased' ,
153
159
person_obj .entity_id )
@@ -215,20 +221,23 @@ def remove(self, greg_person, person_obj):
215
221
self ._sync_affs (person_obj , ())
216
222
self ._sync_consents (person_obj , ())
217
223
218
- def update (self , greg_person , person_obj ):
224
+ def update (self , greg_person , person_obj , _today = None ):
219
225
""" Update the Person object using employee_data. """
220
226
if not greg_person :
221
227
raise ValueError ('update() called without greg person data!' )
222
228
if person_obj is None or not person_obj .entity_id :
223
229
raise ValueError ('update() called without cerebrum person!' )
224
230
231
+ today = _today or datetime .date .today ()
232
+
225
233
self ._sync_name (person_obj , self .mapper .get_names (greg_person ))
226
234
self ._sync_ids (person_obj , self .mapper .get_person_ids (greg_person ))
227
235
self ._sync_cinfo (person_obj , self .mapper .get_contact_info (greg_person ))
228
236
affs = (
229
- (aff_status , self .get_ou (ou_data ).entity_id )
230
- for aff_status , ou_data
231
- in self .mapper .get_affiliations (greg_person )
237
+ (aff_status , self .get_ou (org_ids ).entity_id )
238
+ for aff_status , org_ids , start_date , end_date
239
+ in self .mapper .get_affiliations (greg_person ,
240
+ filter_active_at = today )
232
241
)
233
242
self ._sync_affs (person_obj , affs )
234
243
self ._sync_consents (person_obj , self .mapper .get_consents (greg_person ))
0 commit comments