views.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. from django.shortcuts import render
  2. from django.shortcuts import redirect
  3. from django.views.generic import View
  4. from django.contrib import messages
  5. from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  6. from django.contrib.auth.mixins import LoginRequiredMixin
  7. from django.utils import timezone
  8. from nlu_job.nlu_utils import model_inference, analyze_model_inference, clean_text
  9. from .models import FacebookReview, FacebookReviewReply
  10. from .forms import ReplyForm
  11. from review.models import CustomReply
  12. from .review_utils import reply2facebook_review
  13. from nlu_job.nlu_utils import filter_with_last_ten_reviews
  14. class FacebookReviews(LoginRequiredMixin, View):
  15. def post(self, request, *args, **kwargs):
  16. form = ReplyForm(self.request.POST)
  17. if form.is_valid():
  18. replied_text = form.cleaned_data.get('reply')
  19. review_id = self.request.POST['review_id']
  20. print('review-id', review_id)
  21. # TODO: Reply this review using selenium...
  22. reply2facebook_review(
  23. review_id=review_id,
  24. reply=replied_text,
  25. like=True
  26. )
  27. FacebookReviewReply.objects.create(
  28. review_id=review_id,
  29. create_time=timezone.now(),
  30. replied_text=replied_text
  31. )
  32. messages.success(request, f'Your reply has been posted!')
  33. return redirect('facebook-reviews')
  34. def get(self, request, *args, **kwargs):
  35. now = timezone.now()
  36. form = ReplyForm()
  37. date = now - timezone.timedelta(days=15)
  38. reviews = FacebookReview.objects.filter(
  39. facebookreviewreply=None,
  40. create_time__gte=date
  41. ).order_by('create_time')
  42. page = request.GET.get('page', 1)
  43. paginator = Paginator(reviews, 10)
  44. try:
  45. reviews = paginator.page(page)
  46. except PageNotAnInteger:
  47. reviews = paginator.page(1)
  48. except EmptyPage:
  49. reviews = paginator.page(paginator.num_pages)
  50. context = {'reviews': reviews, 'form': form}
  51. return render(request, 'facebook-reviews.html', context=context)
  52. class FacebookReviewPrediction(View):
  53. def get(self, request, id, *args, **kwargs):
  54. review = FacebookReview.objects.get(pk=id)
  55. review_text = clean_text(review.review_text)
  56. res = model_inference(review_text)
  57. intents = analyze_model_inference(res)
  58. replies = {}
  59. for intent in intents.keys():
  60. r = CustomReply.objects.filter(reply_category=intent)
  61. filtered_replies = filter_with_last_ten_reviews(review.page.location_id, r)
  62. replies[intent] = filtered_replies
  63. now = timezone.now()
  64. form = ReplyForm()
  65. date = now - timezone.timedelta(days=15)
  66. reviews = FacebookReview.objects.filter(
  67. facebookreviewreply=None,
  68. create_time__gte=date
  69. ).order_by('create_time')
  70. page = request.GET.get('page', 1)
  71. paginator = Paginator(reviews, 10)
  72. try:
  73. reviews = paginator.page(page)
  74. except PageNotAnInteger:
  75. reviews = paginator.page(1)
  76. except EmptyPage:
  77. reviews = paginator.page(paginator.num_pages)
  78. context = {
  79. 'reviews': reviews,
  80. 'form': form,
  81. 'intents': intents,
  82. 'replies': replies,
  83. }
  84. return render(request, 'facebook-reviews.html', context=context)