コード例 #1
0
ファイル: calnet.py プロジェクト: ssilverm/boac
def _get_calnet_users(app, id_type, ids):
    cached_users = fetch_bulk(
        [f'calnet_user_for_{id_type}_{_id}' for _id in ids])
    users_by_id = {
        k.replace(f'calnet_user_for_{id_type}_', ''): v
        for k, v in cached_users.items()
    }
    uncached_ids = [c for c in ids if c not in users_by_id]
    calnet_client = calnet.client(app)
    if id_type == 'uid':
        calnet_results = calnet_client.search_uids(uncached_ids)
    elif id_type == 'csid':
        calnet_results = calnet_client.search_csids(uncached_ids)
    else:
        raise InternalServerError(
            f'get_calnet_users: {id_type} is an invalid id type')
    # Cache rows individually so that an isolated conflict doesn't sink the rest of the update.
    for _id in uncached_ids:
        calnet_result = next((r for r in calnet_results if r[id_type] == _id),
                             None)
        feed = {
            **_calnet_user_api_feed(calnet_result),
            **{
                id_type: _id
            },
        }
        insert_row(f'calnet_user_for_{id_type}_{_id}', feed)
        users_by_id[_id] = feed
    return users_by_id
コード例 #2
0
 def create(cls, uid, name, filter_criteria, **kwargs):
     if all(not isinstance(value, bool) and not value
            for value in filter_criteria.values()):
         raise InternalServerError(
             'Cohort creation requires at least one filter specification.')
     cohort = cls(name=name, filter_criteria=filter_criteria)
     user = AuthorizedUser.find_by_uid(uid)
     user.cohort_filters.append(cohort)
     db.session.flush()
     std_commit()
     return cohort.to_api_json(**kwargs)
コード例 #3
0
ファイル: cohort_filter.py プロジェクト: lyttam/boac
 def create(cls, uid, label, **kwargs):
     at_least_one_is_defined = False
     filter_criteria = {}
     for k, v in kwargs.items():
         at_least_one_is_defined = at_least_one_is_defined or (
             len(v) if isinstance(v, list) else v is not None)
         filter_criteria[util.camelize(k)] = v
     if not at_least_one_is_defined:
         raise InternalServerError(
             'Cohort creation requires at least one filter specification.')
     cohort = CohortFilter(label=label, filter_criteria=filter_criteria)
     user = AuthorizedUser.find_by_uid(uid)
     user.cohort_filters.append(cohort)
     db.session.flush()
     std_commit()
     return cohort