from django.shortcuts import render from django.shortcuts import redirect from django.views.generic import View from django.contrib import messages from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.contrib.auth.mixins import LoginRequiredMixin from django.utils import timezone from nlu_job.nlu_utils import model_inference, analyze_model_inference, clean_text from .models import FacebookReview, FacebookReviewReply from .forms import ReplyForm from review.models import CustomReply from .review_utils import reply2facebook_review from nlu_job.nlu_utils import filter_with_last_ten_reviews class FacebookReviews(LoginRequiredMixin, View): def post(self, request, *args, **kwargs): form = ReplyForm(self.request.POST) if form.is_valid(): replied_text = form.cleaned_data.get('reply') review_id = self.request.POST['review_id'] print('review-id', review_id) # TODO: Reply this review using selenium... reply2facebook_review( review_id=review_id, reply=replied_text, like=True ) FacebookReviewReply.objects.create( review_id=review_id, create_time=timezone.now(), replied_text=replied_text ) messages.success(request, f'Your reply has been posted!') return redirect('facebook-reviews') def get(self, request, *args, **kwargs): now = timezone.now() form = ReplyForm() date = now - timezone.timedelta(days=15) reviews = FacebookReview.objects.filter( facebookreviewreply=None, create_time__gte=date ).order_by('create_time') page = request.GET.get('page', 1) paginator = Paginator(reviews, 10) try: reviews = paginator.page(page) except PageNotAnInteger: reviews = paginator.page(1) except EmptyPage: reviews = paginator.page(paginator.num_pages) context = {'reviews': reviews, 'form': form} return render(request, 'facebook-reviews.html', context=context) class FacebookReviewPrediction(View): def get(self, request, id, *args, **kwargs): review = FacebookReview.objects.get(pk=id) review_text = clean_text(review.review_text) res = model_inference(review_text) intents = analyze_model_inference(res) replies = {} for intent in intents.keys(): r = CustomReply.objects.filter(reply_category=intent) filtered_replies = filter_with_last_ten_reviews(review.page.location_id, r) replies[intent] = filtered_replies now = timezone.now() form = ReplyForm() date = now - timezone.timedelta(days=15) reviews = FacebookReview.objects.filter( facebookreviewreply=None, create_time__gte=date ).order_by('create_time') page = request.GET.get('page', 1) paginator = Paginator(reviews, 10) try: reviews = paginator.page(page) except PageNotAnInteger: reviews = paginator.page(1) except EmptyPage: reviews = paginator.page(paginator.num_pages) context = { 'reviews': reviews, 'form': form, 'intents': intents, 'replies': replies, } return render(request, 'facebook-reviews.html', context=context)