@@ -67,6 +67,15 @@ def get_import_class(cereconf=cereconf):
6767 return cls
6868
6969
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+
7079class GregImporter (object ):
7180
7281 REQUIRED_PERSON_ID = (
@@ -112,10 +121,11 @@ def get_person(self, greg_person):
112121 raise ValueError ('invalid person: no external_ids' )
113122 return search (self .db , criterias , required = False )
114123
115- def get_ou (self , greg_orgunit ):
124+ def get_ou (self , orgunit_ids ):
116125 """ Find matching ou from a Greg orgunit dict. """
117126 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 )
119129 if not criterias :
120130 raise ValueError ('invalid orgunit: no external_ids' )
121131 return search (self .db , criterias , required = True )
@@ -143,11 +153,7 @@ def handle_object(self, greg_person, person_obj):
143153 """
144154 greg_id = greg_person ['id' ]
145155
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 )
151157 if is_deceased :
152158 logger .warning ('person_id=%s is marked as deceased' ,
153159 person_obj .entity_id )
@@ -215,20 +221,23 @@ def remove(self, greg_person, person_obj):
215221 self ._sync_affs (person_obj , ())
216222 self ._sync_consents (person_obj , ())
217223
218- def update (self , greg_person , person_obj ):
224+ def update (self , greg_person , person_obj , _today = None ):
219225 """ Update the Person object using employee_data. """
220226 if not greg_person :
221227 raise ValueError ('update() called without greg person data!' )
222228 if person_obj is None or not person_obj .entity_id :
223229 raise ValueError ('update() called without cerebrum person!' )
224230
231+ today = _today or datetime .date .today ()
232+
225233 self ._sync_name (person_obj , self .mapper .get_names (greg_person ))
226234 self ._sync_ids (person_obj , self .mapper .get_person_ids (greg_person ))
227235 self ._sync_cinfo (person_obj , self .mapper .get_contact_info (greg_person ))
228236 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 )
232241 )
233242 self ._sync_affs (person_obj , affs )
234243 self ._sync_consents (person_obj , self .mapper .get_consents (greg_person ))
0 commit comments