Skip to content

Commit cf1ed1f

Browse files
fredrikhlGitHub Enterprise
authored and
GitHub Enterprise
committed
Merge pull request #38 from IT-CEREBRUM/CRB-3975-uit-greg-mapper
CRB-3975: Greg-refactoring for UiT
2 parents bade777 + dc426b2 commit cf1ed1f

File tree

5 files changed

+215
-129
lines changed

5 files changed

+215
-129
lines changed

Cerebrum/modules/greg/datasource.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# -*- coding: utf-8 -*-
22
#
3-
# Copyright 2021 University of Oslo, Norway
3+
# Copyright 2021-2023 University of Oslo, Norway
44
#
55
# This file is part of Cerebrum.
66
#
@@ -183,7 +183,7 @@ def _parse_person_id(d):
183183
return {
184184
'id': normalize_id(d['id']),
185185
'person': normalize_id(d['person']),
186-
# 'source': normalize_text(d['source']),
186+
'source': normalize_text(d['source'], allow_empty=True),
187187
'type': normalize_text(d['type']),
188188
'value': normalize_text(d['value'], allow_empty=True),
189189
'verified': normalize_text(d['verified'], allow_empty=True),

Cerebrum/modules/greg/importer.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
7079
class 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

Comments
 (0)