コード例 #1
0
def authorized_users_api_feed(users, sort_by='lastName'):
    if not users:
        return ()
    calnet_users = calnet.get_calnet_users_for_uids(app,
                                                    [u.uid for u in users])
    profiles = []
    for user in users:
        profile = calnet_users[user.uid]
        if not profile:
            continue
        profile['name'] = ((profile.get('firstName') or '') + ' ' +
                           (profile.get('lastName') or '')).strip()
        profile.update({
            'id': user.id,
            'isAdmin': user.is_admin,
            'departments': {},
        })
        for m in user.department_memberships:
            profile['departments'].update({
                m.university_dept.dept_code: {
                    'isAdvisor': m.is_advisor,
                    'isDirector': m.is_director,
                },
            })
        profiles.append(profile)
    return sorted(profiles, key=lambda p: p.get(sort_by) or '')
コード例 #2
0
def user_search():
    snippet = request.get_json().get('snippet', '').strip()
    if snippet:
        search_by_uid = re.match(r'\d+', snippet)
        if search_by_uid:
            users = AuthorizedUser.users_with_uid_like(snippet,
                                                       include_deleted=True)
        else:
            users = AuthorizedUser.get_all_active_users(include_deleted=True)
        users = list(
            calnet.get_calnet_users_for_uids(app,
                                             [u.uid for u in users]).values())
        if not search_by_uid:
            any_ = r'.*'
            pattern = re.compile(any_ + any_.join(snippet.split()) + any_,
                                 re.IGNORECASE)
            users = list(
                filter(lambda u: u.get('name') and pattern.match(u['name']),
                       users))
    else:
        users = []

    def _label(user):
        name = user['name']
        return f"{name} ({user['uid']})" if name else user['uid']

    return tolerant_jsonify([{
        'label': _label(u),
        'uid': u['uid']
    } for u in users])
コード例 #3
0
def refresh_calnet_attributes():
    from boac.merged import calnet
    from boac.models.authorized_user import AuthorizedUser
    from boac.models import json_cache
    active_uids = {u.uid for u in AuthorizedUser.get_all_active_users()}
    json_cache.clear('calnet_user_for_uid_%')
    new_attrs = calnet.get_calnet_users_for_uids(app, active_uids)
    app.logger.info(f'Cached {len(new_attrs)} CalNet records for {len(active_uids)} active users')
コード例 #4
0
ファイル: cohort_utils.py プロジェクト: ets-berkeley-edu/boac
def get_coe_profiles():
    users = list(
        filter(lambda _user: '******' in _get_dept_codes(_user),
               AuthorizedUser.get_all_active_users()))
    calnet_users = get_calnet_users_for_uids(app, [u.uid for u in users])
    profiles = []
    for user in users:
        uid = user.uid
        calnet_user = calnet_users[uid]
        first_name = calnet_user.get('firstName')
        last_name = calnet_user.get('lastName')
        name = f'{first_name} {last_name}' if first_name or last_name else f'UID: {uid}'
        profiles.append({'name': name, 'value': uid})
    return sorted(profiles, key=lambda p: p['name'])
コード例 #5
0
def all_cohorts():
    scope = get_query_scope(current_user)
    uids = AuthorizedUser.get_all_uids_in_scope(scope)
    cohorts_per_uid = dict((uid, []) for uid in uids)
    for cohort in CohortFilter.get_cohorts_owned_by_uids(uids):
        for uid in cohort['owners']:
            cohorts_per_uid[uid].append(cohort)
    api_json = []
    for uid, user in calnet.get_calnet_users_for_uids(app, uids).items():
        cohorts = cohorts_per_uid[uid]
        api_json.append({
            'user': user,
            'cohorts': sorted(cohorts, key=lambda c: c['name']),
        })
    api_json = sorted(api_json, key=lambda v: v['user']['name'])
    return tolerant_jsonify(api_json)
コード例 #6
0
def all_curated_groups():
    scope = get_query_scope(current_user)
    uids = AuthorizedUser.get_all_uids_in_scope(scope)
    groups_per_uid = dict((uid, []) for uid in uids)
    for group in CuratedGroup.get_groups_owned_by_uids(uids=uids):
        groups_per_uid[group['ownerUid']].append(group)
    api_json = []
    for uid, user in calnet.get_calnet_users_for_uids(app, uids).items():
        groups = groups_per_uid[uid]
        api_json.append({
            'user': user,
            'groups': sorted(groups, key=lambda g: g['name']),
        })
    api_json = sorted(
        api_json,
        key=lambda v: v['user']['name'] or f"UID: {v['user']['uid']}")
    return tolerant_jsonify(api_json)
コード例 #7
0
def get_degree_checks(uid):
    sid = get_sid_by_uid(uid)
    if sid:
        degrees = DegreeProgressTemplate.find_by_sid(student_sid=sid)
        uids = list(
            set([d['createdByUid']
                 for d in degrees] + [d['updatedByUid'] for d in degrees]))
        calnet_users_by_uid = calnet.get_calnet_users_for_uids(app, uids)
        for degree in degrees:

            def _get_name(uid):
                return calnet_users_by_uid[uid][
                    'name'] if uid in calnet_users_by_uid else None

            degree['createdByName'] = _get_name(degree['createdByUid'])
            degree['updatedByName'] = _get_name(degree['updatedByUid'])
        return tolerant_jsonify(degrees)
    else:
        raise ResourceNotFoundError('Student not found')
コード例 #8
0
def all_cohorts():
    scope = get_query_scope(current_user)
    uids = AuthorizedUser.get_all_uids_in_scope(scope)
    cohorts_per_uid = dict((uid, []) for uid in uids)
    domain = get_param(request.args, 'domain', 'default')
    if is_unauthorized_domain(domain):
        raise ForbiddenRequestError(
            f'You are unauthorized to query the \'{domain}\' domain')
    for cohort in CohortFilter.get_cohorts_owned_by_uids(uids, domain=domain):
        cohorts_per_uid[cohort['ownerUid']].append(cohort)
    api_json = []
    for uid, user in calnet.get_calnet_users_for_uids(app, uids).items():
        cohorts = cohorts_per_uid[uid]
        api_json.append({
            'user': user,
            'cohorts': sorted(cohorts, key=lambda c: c['name']),
        })
    api_json = sorted(
        api_json,
        key=lambda v: v['user']['name'] or f"UID: {v['user']['uid']}")
    return tolerant_jsonify(api_json)
コード例 #9
0
def authorized_users_api_feed(users, sort_by=None, sort_descending=False):
    if not users:
        return ()
    calnet_users = calnet.get_calnet_users_for_uids(app, [u.uid for u in users])
    profiles = []
    for user in users:
        profile = calnet_users[user.uid]
        if not profile:
            continue
        if not profile.get('name'):
            profile['name'] = ((profile.get('firstName') or '') + ' ' + (profile.get('lastName') or '')).strip()

        degree_progress_permission = user.degree_progress_permission if app.config['FEATURE_FLAG_DEGREE_CHECK'] else None
        profile.update({
            'id': user.id,
            'isAdmin': user.is_admin,
            'isBlocked': user.is_blocked,
            'canAccessAdvisingData': user.can_access_advising_data,
            'canAccessCanvasData': user.can_access_canvas_data,
            'canEditDegreeProgress': degree_progress_permission == 'read_write' or user.is_admin,
            'canReadDegreeProgress': degree_progress_permission in ['read', 'read_write'] or user.is_admin,
            'degreeProgressPermission': degree_progress_permission,
            'deletedAt': _isoformat(user.deleted_at),
            'departments': [],
        })
        for m in user.department_memberships:
            profile['departments'].append({
                'code': m.university_dept.dept_code,
                'name': m.university_dept.dept_name,
                'role': m.role,
                'automateMembership': m.automate_membership,
            })
        profile['dropInAdvisorStatus'] = [d.to_api_json() for d in user.drop_in_departments]
        profile['sameDayAdvisorStatus'] = [d.to_api_json() for d in user.same_day_departments]
        user_login = UserLogin.last_login(user.uid)
        profile['lastLogin'] = _isoformat(user_login.created_at) if user_login else None
        profiles.append(profile)
    sort_by = sort_by or 'lastName'
    return sorted(profiles, key=lambda p: (p.get(sort_by) is None, p.get(sort_by)), reverse=sort_descending)
コード例 #10
0
def authorized_users_api_feed(users, sort_by='lastName'):
    if not users:
        return ()
    calnet_users = calnet.get_calnet_users_for_uids(app,
                                                    [u.uid for u in users])
    profiles = []
    for user in users:
        profile = calnet_users[user.uid]
        if not profile:
            continue
        profile['name'] = ((profile.get('firstName') or '') + ' ' +
                           (profile.get('lastName') or '')).strip()
        profile.update({
            'id': user.id,
            'isAdmin': user.is_admin,
            'isBlocked': user.is_blocked,
            'canAccessCanvasData': user.can_access_canvas_data,
            'deletedAt': _isoformat(user.deleted_at),
            'departments': {},
        })
        for m in user.department_memberships:
            profile['departments'].update({
                m.university_dept.dept_code: {
                    'deptName': m.university_dept.dept_name,
                    'isAdvisor': m.is_advisor,
                    'isDirector': m.is_director,
                    'isScheduler': m.is_scheduler,
                    'automateMembership': m.automate_membership,
                },
            })
        if user.drop_in_departments:
            profile['dropInAdvisorStatus'] = [
                d.to_api_json() for d in user.drop_in_departments
            ]
        profiles.append(profile)
    return sorted(profiles, key=lambda p: p.get(sort_by) or '')