def permissions(self): # type: () -> frozenset[Tuple[Text, Optional[Text]]] if self.participation is None: if self._permissions_cache is not None: return self._permissions_cache from course.enrollment import get_participation_permissions perm = get_participation_permissions(self.course, self.participation) self._permissions_cache = perm return perm else: return self.participation.permissions()
def permissions(self): # type: () -> FrozenSet[Tuple[Text, Optional[Text]]] if self.participation is None: if self._permissions_cache is not None: return self._permissions_cache from course.enrollment import get_participation_permissions perm = get_participation_permissions(self.course, self.participation) self._permissions_cache = perm return perm else: return self.participation.permissions()
def home(request): # type: (http.HttpRequest) -> http.HttpResponse now_datetime = get_now_or_fake_time(request) current_courses = [] past_courses = [] for course in Course.objects.filter(listed=True): participation = get_participation_for_request(request, course) show = True if course.hidden: perms = get_participation_permissions(course, participation) if (pperm.view_hidden_course_page, None) not in perms: show = False if not course.listed: show = False if show: if (course.end_date is None or now_datetime.date() <= course.end_date): current_courses.append(course) else: past_courses.append(course) def course_sort_key_minor(course): return course.number if course.number is not None else "" def course_sort_key_major(course): return (course.start_date if course.start_date is not None else now_datetime.date()) current_courses.sort(key=course_sort_key_minor) past_courses.sort(key=course_sort_key_minor) current_courses.sort(key=course_sort_key_major, reverse=True) past_courses.sort(key=course_sort_key_major, reverse=True) return render(request, "course/home.html", { "current_courses": current_courses, "past_courses": past_courses, })
def get_repo_file_backend( request, # type: http.HttpRequest course, # type: Course participation, # type: Optional[Participation] commit_sha, # type: bytes path, # type: str ): # type: (...) -> http.HttpResponse # noqa """ Check if a file should be accessible. Then call for it if the permission is not denied. Order is important here. An in-exam request takes precedence. Note: an access_role of "public" is equal to "unenrolled" """ # check to see if the course is hidden check_course_state(course, participation) # set access to public (or unenrolled), student, etc if request.relate_exam_lockdown: access_kinds = ["in_exam"] else: from course.enrollment import get_participation_permissions access_kinds = [ arg for perm, arg in get_participation_permissions( course, participation) if perm == pperm.access_files_for and arg is not None ] from course.content import is_repo_file_accessible_as # retrieve local path for the repo for the course with get_course_repo(course) as repo: if not is_repo_file_accessible_as(access_kinds, repo, commit_sha, path): raise PermissionDenied() return get_repo_file_response(repo, path, commit_sha)
def get_repo_file_backend( request, # type: http.HttpRequest course, # type: Course participation, # type: Optional[Participation] commit_sha, # type: bytes path, # type: str ): # type: (...) -> http.HttpResponse # noqa """ Check if a file should be accessible. Then call for it if the permission is not denied. Order is important here. An in-exam request takes precedence. Note: an access_role of "public" is equal to "unenrolled" """ # check to see if the course is hidden check_course_state(course, participation) # retrieve local path for the repo for the course repo = get_course_repo(course) # set access to public (or unenrolled), student, etc if request.relate_exam_lockdown: access_kinds = ["in_exam"] else: from course.enrollment import get_participation_permissions access_kinds = [ arg for perm, arg in get_participation_permissions(course, participation) if perm == pperm.access_files_for and arg is not None] from course.content import is_repo_file_accessible_as if not is_repo_file_accessible_as(access_kinds, repo, commit_sha, path): raise PermissionDenied() return get_repo_file_response(repo, path, commit_sha)