def get_person(emplid, commit=True, force=False, grad_data=False): """ Get/update personal info for this emplid and return (updated & saved) Person object. """ global imported_people # use imported_people as a cache if emplid in imported_people: return imported_people[emplid] # either get old or create new Person object p_old = Person.objects.filter(emplid=emplid) if len(p_old) > 1: # should be dead code, since emplid is a unique key in the DB raise KeyError("Already duplicate people: %r" % (p_old)) elif len(p_old) == 1: p = p_old[0] else: p = Person(emplid=emplid) imported_people[emplid] = p if 'lastimport' in p.config: import_age = time.time() - p.config['lastimport'] else: import_age = IMPORT_THRESHOLD * 2 # active students with no userid: pay more attention to try to get their userid for login/email. if p.userid is None and import_age > NO_USERID_IMPORT_THRESHOLD: new_p = import_person(p, commit=commit, grad_data=grad_data) if new_p: return new_p elif p_old: return p # only import if data is older than IMPORT_THRESHOLD (unless forced) # Randomly occasionally import anyway, so new students don't stay bunched-up. elif not force and import_age < IMPORT_THRESHOLD and random.random( ) < 0.99: return p # actually import their data else: new_p = import_person(p, commit=commit, grad_data=grad_data) if new_p: return new_p elif p_old: return p
def get_person(emplid, commit=True, force=False, grad_data=False): """ Get/update personal info for this emplid and return (updated & saved) Person object. """ global imported_people # use imported_people as a cache if emplid in imported_people: return imported_people[emplid] # either get old or create new Person object p_old = Person.objects.filter(emplid=emplid) if len(p_old)>1: # should be dead code, since emplid is a unique key in the DB raise KeyError("Already duplicate people: %r" % (p_old)) elif len(p_old)==1: p = p_old[0] else: p = Person(emplid=emplid) imported_people[emplid] = p if 'lastimport' in p.config: import_age = time.time() - p.config['lastimport'] else: import_age = IMPORT_THRESHOLD * 2 # active students with no userid: pay more attention to try to get their userid for login/email. if p.userid is None and import_age > NO_USERID_IMPORT_THRESHOLD: new_p = import_person(p, commit=commit, grad_data=grad_data) if new_p: return new_p elif p_old: return p # only import if data is older than IMPORT_THRESHOLD (unless forced) # Randomly occasionally import anyway, so new students don't stay bunched-up. elif not force and import_age < IMPORT_THRESHOLD and random.random() < 0.99: return p # actually import their data else: new_p = import_person(p, commit=commit, grad_data=grad_data) if new_p: return new_p elif p_old: return p