def _update_drop_in_availability(uid, dept_code, new_availability): dept_code = dept_code.upper() if uid != current_user.get_uid(): authorized_to_toggle = current_user.is_admin or dept_code in [ d['code'] for d in current_user.departments if d.get('role') == 'scheduler' ] if not authorized_to_toggle: raise errors.ForbiddenRequestError( f'Unauthorized to toggle drop-in availability for department {dept_code}' ) drop_in_membership = None user = AuthorizedUser.find_by_uid(uid) if user: drop_in_membership = next( (d for d in user.drop_in_departments if d.dept_code == dept_code), None) if drop_in_membership: if drop_in_membership.is_available is True and new_availability is False: Appointment.unreserve_all_for_advisor(uid, current_user.get_id()) drop_in_membership.update_availability(new_availability) UserSession.flush_cache_for_id(user.id) return tolerant_jsonify(drop_in_membership.to_api_json()) else: raise errors.ResourceNotFoundError( f'No drop-in advisor membership found: (uid={uid}, dept_code={dept_code})' )
def all_user_profiles(): # This feature is not available in production if app.config['DEVELOPER_AUTH_ENABLED']: users = AuthorizedUser.query.all() return tolerant_jsonify(authorized_users_api_feed(users)) else: raise errors.ResourceNotFoundError('Unknown path')
def _update_drop_in_status(uid, dept_code, active): dept_code = dept_code.upper() if uid == 'me': uid = current_user.get_uid() else: authorized_to_toggle = current_user.is_admin or dept_code in [ d['code'] for d in current_user.departments if d.get('isScheduler') ] if not authorized_to_toggle: raise errors.ForbiddenRequestError( f'Unauthorized to toggle drop-in status for department {dept_code}' ) drop_in_status = None user = AuthorizedUser.find_by_uid(uid) if user: drop_in_status = next( (d for d in user.drop_in_departments if d.dept_code == dept_code), None) if drop_in_status: drop_in_status.update_availability(active) UserSession.flush_cache_for_id(user.id) return tolerant_jsonify(drop_in_status.to_api_json()) else: raise errors.ResourceNotFoundError( f'No drop-in advisor status found: (uid={uid}, dept_code={dept_code})' )
def user_analytics(uid): canvas_profile = canvas.get_user_for_uid(uid) if canvas_profile is False: raise errors.ResourceNotFoundError('No Canvas profile found for user') elif not canvas_profile: raise errors.InternalServerError('Unable to reach bCourses') canvas_id = canvas_profile['id'] user_courses = canvas.get_student_courses_in_term(uid) courses_api_feed = api_util.canvas_courses_api_feed(user_courses) cohort_data = TeamMember.query.filter_by(member_uid=uid).first() if cohort_data and len(user_courses): term_id = sis_term_id_for_name(user_courses[0].get('term', {}).get('name')) merge_sis_enrollments(courses_api_feed, cohort_data.member_csid, term_id) merge_analytics_for_user(courses_api_feed, canvas_id) if cohort_data: sis_profile = merge_sis_profile(cohort_data.member_csid) cohort_data = cohort_data.to_api_json() else: sis_profile = False return tolerant_jsonify({ 'uid': uid, 'canvasProfile': canvas_profile, 'cohortData': cohort_data, 'courses': courses_api_feed, 'sisProfile': sis_profile, })
def user_by_uid(uid): ignore_deleted = to_bool_or_none(util.get(request.args, 'ignoreDeleted')) user = _find_user_by_uid(uid, ignore_deleted) if user: users_feed = authorized_users_api_feed([user]) return tolerant_jsonify(users_feed[0]) else: raise errors.ResourceNotFoundError('User not found')
def set_demo_mode(): if app.config['DEMO_MODE_AVAILABLE']: in_demo_mode = request.get_json().get('demoMode', None) if in_demo_mode is None: raise errors.BadRequestError('Parameter \'demoMode\' not found') user = AuthorizedUser.find_by_id(current_user.get_id()) user.in_demo_mode = bool(in_demo_mode) current_user.flush_cached() app.login_manager.reload_user() return tolerant_jsonify(current_user.to_api_json()) else: raise errors.ResourceNotFoundError('Unknown path')
def delete_university_dept_membership(university_dept_id, authorized_user_id): if not UniversityDeptMember.delete_membership(university_dept_id, authorized_user_id): raise errors.ResourceNotFoundError( f'University dept membership not found: university_dept_id={university_dept_id} authorized_user_id={authorized_user_id}', ) return tolerant_jsonify( { 'message': f'University dept membership deleted: university_dept_id={university_dept_id} authorized_user_id={authorized_user_id}' }, status=200, )
def set_drop_in_advising_status(dept_code): user = AuthorizedUser.find_by_id(current_user.get_id()) drop_in_membership = next((d for d in user.drop_in_departments if d.dept_code == dept_code.upper()), None) if not drop_in_membership: raise errors.ResourceNotFoundError( f'No drop-in advisor membership found: (uid={current_user.get_uid()}, dept_code={dept_code})' ) params = request.get_json() if 'status' not in params: raise errors.BadRequestError('Missing status') if params['status'] and len(params['status']) > 255: raise errors.BadRequestError('Invalid status') drop_in_membership.update_status(params['status']) UserSession.flush_cache_for_id(user.id) return tolerant_jsonify(drop_in_membership.to_api_json())
def calnet_profile_by_user_id(user_id): user = AuthorizedUser.find_by_id(user_id) if user: return tolerant_jsonify(calnet.get_calnet_user_for_uid(app, user.uid)) else: raise errors.ResourceNotFoundError('User not found')
def user_profile(uid): if not AuthorizedUser.find_by_uid(uid): raise errors.ResourceNotFoundError('Unknown path') return tolerant_jsonify(calnet.get_calnet_user_for_uid(app, uid))
def user_profile(uid): match = next((u for u in AuthorizedUser.query.all() if u.uid == uid), None) if not match: raise errors.ResourceNotFoundError('Unknown path') return tolerant_jsonify(calnet.get_calnet_user_for_uid(app, uid))