def get_queryset(self): api_version = self.kwargs.get('api_version') enrollments = self.queryset.filter( user__username=self.kwargs['username'], is_active=True ).order_by('created').reverse() org = self.request.query_params.get('org', None) same_org = ( enrollment for enrollment in enrollments if enrollment.course_overview and self.is_org(org, enrollment.course_overview.org) ) mobile_available = ( enrollment for enrollment in same_org if is_mobile_available_for_user(self.request.user, enrollment.course_overview) ) not_hidden_for_experiments = ( enrollment for enrollment in mobile_available if not self.hide_course_for_enrollment_fee_experiment(self.request.user, enrollment) ) not_duration_limited = ( enrollment for enrollment in not_hidden_for_experiments if check_course_expired(self.request.user, enrollment.course) == ACCESS_GRANTED ) if api_version == API_V05: # for v0.5 don't return expired courses return list(not_duration_limited) else: # return all courses, with associated expiration return list(mobile_available)
def get_queryset(self): api_version = self.kwargs.get('api_version') enrollments = self.queryset.filter( user__username=self.kwargs['username'], is_active=True ).order_by('created').reverse() org = self.request.query_params.get('org', None) same_org = ( enrollment for enrollment in enrollments if enrollment.course_overview and self.is_org(org, enrollment.course_overview.org) ) mobile_available = ( enrollment for enrollment in same_org if is_mobile_available_for_user(self.request.user, enrollment.course_overview) ) not_duration_limited = ( enrollment for enrollment in mobile_available if check_course_expired(self.request.user, enrollment.course) == ACCESS_GRANTED ) if api_version == API_V05: # for v0.5 don't return expired courses return list(not_duration_limited) else: # return all courses, with associated expiration return list(mobile_available)
def can_load(): """ Can this user load this course? NOTE: this is not checking whether user is actually enrolled in the course. """ # N.B. I'd love a better way to handle this pattern, without breaking the # shortcircuiting logic. Maybe AccessResponse needs to grow a # fluent interface? # # return ( # _visible_to_nonstaff_users(courselike).and( # check_course_open_for_learner, user, courselike # ).and( # _can_view_courseware_with_prerequisites, user, courselike # ) # ).or( # _has_staff_access_to_descriptor, user, courselike, courselike.id # ) if courselike.id.deprecated: # we no longer support accessing Old Mongo courses return OldMongoAccessError(courselike) visible_to_nonstaff = _visible_to_nonstaff_users(courselike) if not visible_to_nonstaff: staff_access = _has_staff_access_to_descriptor( user, courselike, courselike.id) if staff_access: return staff_access else: return visible_to_nonstaff open_for_learner = check_course_open_for_learner(user, courselike) if not open_for_learner: staff_access = _has_staff_access_to_descriptor( user, courselike, courselike.id) if staff_access: return staff_access else: return open_for_learner view_with_prereqs = _can_view_courseware_with_prerequisites( user, courselike) if not view_with_prereqs: staff_access = _has_staff_access_to_descriptor( user, courselike, courselike.id) if staff_access: return staff_access else: return view_with_prereqs has_not_expired = check_course_expired(user, courselike) if not has_not_expired: staff_access = _has_staff_access_to_descriptor( user, courselike, courselike.id) if staff_access: return staff_access else: return has_not_expired return ACCESS_GRANTED
def get_queryset(self): api_version = self.kwargs.get('api_version') enrollments = self.queryset.filter( user__username=self.kwargs['username'], is_active=True).order_by('created').reverse() org = self.request.query_params.get('org', None) if api_version == API_V05: # for v0.5 don't return expired courses return [ enrollment for enrollment in enrollments if enrollment.course_overview and self.is_org(org, enrollment.course_overview.org) and is_mobile_available_for_user(self.request.user, enrollment.course_overview) and not self.hide_course_for_enrollment_fee_experiment( self.request.user, enrollment) and ( not CONTENT_TYPE_GATING_FLAG.is_enabled() or check_course_expired(self.request.user, enrollment. course) == ACCESS_GRANTED) ] else: # return all courses, with associated expiration return [ enrollment for enrollment in enrollments if enrollment.course_overview and self.is_org(org, enrollment.course_overview.org) and is_mobile_available_for_user(self.request.user, enrollment.course_overview) ]
def can_load(): """ Can this user load this course? NOTE: this is not checking whether user is actually enrolled in the course. """ # N.B. I'd love a better way to handle this pattern, without breaking the # shortcircuiting logic. Maybe AccessResponse needs to grow a # fluent interface? # # return ( # _visible_to_nonstaff_users(courselike).and( # check_course_open_for_learner, user, courselike # ).and( # _can_view_courseware_with_prerequisites, user, courselike # ) # ).or( # _has_staff_access_to_descriptor, user, courselike, courselike.id # ) visible_to_nonstaff = _visible_to_nonstaff_users(courselike) if not visible_to_nonstaff: staff_access = _has_staff_access_to_descriptor(user, courselike, courselike.id) if staff_access: return staff_access else: return visible_to_nonstaff open_for_learner = check_course_open_for_learner(user, courselike) if not open_for_learner: staff_access = _has_staff_access_to_descriptor(user, courselike, courselike.id) if staff_access: return staff_access else: return open_for_learner view_with_prereqs = _can_view_courseware_with_prerequisites(user, courselike) if not view_with_prereqs: staff_access = _has_staff_access_to_descriptor(user, courselike, courselike.id) if staff_access: return staff_access else: return view_with_prereqs has_not_expired = check_course_expired(user, courselike) if not has_not_expired: staff_access = _has_staff_access_to_descriptor(user, courselike, courselike.id) if staff_access: return staff_access else: return has_not_expired return ACCESS_GRANTED