Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
PendingModerationViewSet, PendingModerationObjViewSet, ) RecommendationListViewSet, RecommendationList, ) CountryTaggedItemViewSet, UniversityTaggedItemViewSet, ) ReadOnly, IsStaff, NoDelete, NoPost, IsAuthenticated, ) CourseFeedbackSerializer, ExchangeSerializerSimple, CourseSerializer, )
"exchange", "exchange__feedbacks", "exchange__feedbacks__moderated_by", "exchange__feedbacks__updated_by", "course_feedback", "course_feedback__moderated_by", "course_feedback__updated_by", )
""" Permission that checks that the requester is the student concern by the exchange / course. """
student = obj.course.exchange.student if student is None: return False return request.user.pk == student.pk
NoDelete & NoPost & (ReadOnly | IsStaff | CourseFeedbackPermission), ) "course", "updated_by", "moderated_by" )
Exchange.objects.filter(unlinked=False) .select_related("student") .prefetch_related("exchange_courses", "exchange_courses__course_feedback") )
SiteInformationViewSet, UserViewset, CountryViewSet, CountryDriViewSet, CountryScholarshipViewSet, CountryTaggedItemViewSet, CourseViewSet, CourseFeedbackViewSet, CurrencyViewSet, OfferViewSet, LanguageViewSet, PendingModerationViewSet, PendingModerationObjViewSet, FileViewSet, PictureViewSet, ExchangeViewSet, ExchangeFeedbackViewSet, UnivMajorMinorsViewSet, RecommendationListViewSet, UniversityViewSet, SharedUnivFeedbackViewSet, UniversityDriViewSet, UniversityInfoViewSet, UniversityScholarshipViewSet, UniversitySemestersDatesViewSet, UniversityTaggedItemViewSet, UserDataViewSet, VersionViewSet, ]
# We only register viewsets in a testing environment
""" Viewset to know what is the app moderation status """
# Since AppModerationStatusViewSet doesn't inherit from BaseModelViewSet # We need to link here the correct permissions
return Response( { "activated": settings.MODERATION_ACTIVATED, "moderator_level": OBJ_MODERATION_PERMISSIONS["moderator"], } )
""" Viewset to fetch the latest update dates of the external data """
# Since AppModerationStatusViewSet doesn't inherit from BaseModelViewSet # We need to link here the correct permissions
objects = ( ExternalDataUpdateInfo.objects.all() .order_by("source", "-timestamp") .distinct("source") )
return Response( list( map( lambda obj: dict(timestamp=obj.timestamp, source=obj.source), objects, ) ) )
""" Viewset to fetch the latest list of utc partners that are not linked to a univeristy """
partners = Partner.objects.filter(university=None)
return Response( [dict(partner_id=p.utc_id, partner_univ_name=p.univ_name) for p in partners] )
""" Viewset to be able to ban and un-ban users from the site """
user = request.user UtcData().update_one_student(user.username) return Response()
""" Viewset to handle the logging of errors coming from the frontend. """
logger = logging.getLogger("frontend") data = request.data if "componentStack" in data.keys(): logger.error(request.data["componentStack"]) else: logger.error(request.data) return Response(status=201)
""" Viewset to be able to ban and un-ban users from the site """
return Response( [ dict(user_id=user.pk, user_login=user.username) for user in User.objects.filter(is_banned=True) ] )
if pk is None: return Response(status=403)
user = User.objects.get(pk=pk) if user.is_staff: # Prevent ban of admin users return Response(status=403) user.is_banned = True user.save() return Response(status=200)
if pk is None: return Response(status=403)
user = User.objects.get(pk=pk) user.is_banned = False user.save() return Response(status=200)
""" Viewset to handle account deletion """
""" Line up the user from the request for deletion """ user = request.user user.delete_next_time = True user.save() return Response(status=201)
# Here only to have the correct routes automatically generated, not to be used. return Response(status=403)
""" Un-Line up the user from the request for deletion """ user = request.user user.delete_next_time = False user.save() return Response(status=200)
""" Viewset to be able to add or delete followers on a recommendation list """
# Since RecommendationListChangeFollowerViewSet doesn't inherit from BaseModelViewSet # We need to link here the correct permissions
if pk is None: return Response(status=403)
recommendation = RecommendationList.objects.get(pk=pk) if recommendation.is_public: recommendation.followers.add(request.user) recommendation.save() return Response(status=200) else: return Response(status=403)
if pk is None: return Response(status=403) # can delete folower even if list not public recommendation = RecommendationList.objects.get(pk=pk) recommendation.followers.remove(request.user) recommendation.save() return Response(status=200)
""" Viewset to update the LastVisitedUniversity model when a user looks at a university
Doc available here: https://www.django-rest-framework.org/api-guide/viewsets/#viewset-actions """
SELECT university_id as university, max(ts) AS ts FROM backend_app_lastvisiteduniversity WHERE user_id = %s GROUP BY university_id ORDER BY ts DESC LIMIT 5 """
user=request.user, university=University.objects.get(pk=request.data["university"]), )
AppModerationStatusViewSet, LatestUpdateExternalDataViewSet, UnlinkedUtcPartners, UpdateStudentExchangesViewSet, LogFrontendErrorsViewSet, BannedUserViewSet, RecommendationListChangeFollowerViewSet, DeleteUserViewSet, LastVisitedUniversityViewSet, ]
|