def process_feedback(request): if request.user.is_authenticated: try: recommendation_id = request.POST.get('recommendation_id') form_data = request.POST h.add_feedback(form_data, request.user.id) # getting newly filled user data recommendation = model.Recommendation.objects.get( id=recommendation_id) # check if it is system recommendation if model.SystemAlgorithmRecommendationLog.objects.filter( recommendation=recommendation).exists(): algo = 'ScipR System' else: algo = recommendation.algorithm.name # pagination related page = request.POST.get('page', 1) # divide results into 10 entry per page paginator = Paginator( h.process_user_recommendations(recommendation), 10) recom = paginator.page(page) response = render( request, 'GUIManager/displayrecommendation.html', { 'recommendations': recom, 'algo': algo, 'recommendation': recommendation_id, 'Success': "YOur feedback and " "changes were updated succesfully" }) return response except ValueError: response = render( request, 'GUIManager/displayrecommendation.html', { 'recommendations': recom, 'algo': recommendation.algorithm, 'recommendation': recommendation_id, 'Error': 'There was some problem' }) return response else: return redirect('login')
def show_ratedpapers(request): if request.user.is_authenticated: papers = h.get_rated_papers(request.user) paper_manager = PaperDataManager() return render(request, 'GUIManager/paper_list_rated.html', { 'paper_list': papers, 'title': "Papers marked relevant" }) else: return redirect('login')
def update_system_recommendation(request): if request.user.is_authenticated: if request.method == "POST": h.set_system_recommendation(request.user,request.POST.get('algo_id'), request.POST.get('comment')) ratings = DBH.get_feedback_ratings() all_algorithms = AlgorithmManager().get_available_algorithms() response = render(request, 'GUIManager/evaluation_manager.html', {'ratings': ratings, 'all_algorithms':all_algorithms, 'past_system_algo': model.SystemRecommendations.objects.all(), 'Success': "Your changes were updated succesfully" } ) return response else: return redirect('login')
def get_recommendations(self, user_id, algorithm_id): try: recommendation_results = [] algorithm_name = Algorithm.objects.get(pk=algorithm_id).name im = ImportManager() im.load(algorithm_name) results = im.algorithm.get_recommendations( UserMapping.objects.get(user_id=user_id).external_user_id) doc_ids = [result[0] for result in results] paper_objs = Paper.objects.filter(doc_id__in=doc_ids) paper_dict = dict() for paper in paper_objs: paper_dict[paper.doc_id] = paper for index, result in enumerate(results): recommendation_results.append( [index + 1, paper_dict[result[0]], result[1]]) return recommendation_results except: return h.get_recommendations(user_id, algorithm_id)
def add_ctr(request): page = request.GET.get('page', 1) h.update_ctr(request.GET.get('rec_id'), page) return redirect(request.GET.get('exurl'))
def getrecommendation(request): """ Gets recommendations from the specified algorithm (step 0) and does these things: 1. adds a query entry into Recommendation Table 2. And inserts recommendations corresponding to previous query into RecommendationResult 3. Process the result before sending to user :param request: :return: """ if request.user.is_authenticated: if request.method == "POST": algoid = request.POST.get('algorithm') print(algoid, request.user.id) algo = model.Algorithm.objects.get(pk=algoid) usr = request.user # step 0: get recommendations from the requested algorithm # recommendations = h.get_recommendations(userid=usr.id, # algoid=algo.id) recommendations = AlgorithmManager().get_recommendations( user_id=usr.id, algorithm_id=algo.id) # try: # step 1: insert an entry into Recommendation table reclog = model.Recommendation( algorithm=algo, user=usr, input_rating_count=h.get_rating_matrix_size()) reclog.save() # step 2: insert the algorithm results corresponding to previous # reclog id is_system_rec = request.POST.get('systemreco', None) h.add_recommendation(reclog, recommendations, is_system_rec) # step 3: Process the result before sending to user formatted_result_dict = h.process_user_recommendations(reclog) # except: # return redirect('home') # pagination related code # initial page result is sent as 1 page = 1 # divide results into 10 entry per page paginator = Paginator(formatted_result_dict, 10) # update CTR h.update_ctr(reclog.id, page, for_pagination=True) try: recom = paginator.page(page) except PageNotAnInteger: recom = paginator.page(1) except EmptyPage: recom = paginator.page(paginator.num_pages) response = render( request, 'GUIManager/displayrecommendation.html', { 'recommendations': recom, 'algo': 'ScipR System' if is_system_rec is not None else algo.name, 'recommendation': reclog.id, # to display alert message in result page 'message': '1' }) return response elif request.method == "GET": # Pagination related # get the recommendation list again try: recommendation = model.Recommendation.objects.get( id=request.GET.get('rec_id')) except: return redirect('home') if model.SystemAlgorithmRecommendationLog.objects.filter( recommendation=recommendation).exists(): algo = 'ScipR System' else: algo = recommendation.algorithm.name page = request.GET.get('page', 1) # update CTR when a new page is shown h.update_ctr(request.GET.get('rec_id'), page, for_pagination=True) # divide results into 10 entry per page paginator = Paginator( h.process_user_recommendations(recommendation), 10) try: recom = paginator.page(page) # to prevent unauthorised attempts to view previous # recommendations based on rec_id if request.user.id != recommendation.user_id: return redirect('home') except PageNotAnInteger: recom = paginator.page(1) except EmptyPage: recom = paginator.page(paginator.num_pages) response = render( request, 'GUIManager/displayrecommendation.html', { 'recommendations': recom, 'algo': algo, 'recommendation': request.GET.get('rec_id') }) return response # return HttpResponseRedirect(reverse('display_recommendation')) else: return redirect('login')