views.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. status_code = reply2facebook_review(
  22. review_id=review_id,
  23. reply=replied_text
  24. )
  25. if status_code == 201:
  26. FacebookReviewReply.objects.create(
  27. review_id=review_id,
  28. create_time=timezone.now(),
  29. replied_text=replied_text
  30. )
  31. messages.success(request, f'Your reply has been posted!')
  32. elif status_code == 404:
  33. FacebookReviewReply.objects.create(
  34. review_id=review_id,
  35. create_time=timezone.now(),
  36. replied_text=replied_text
  37. )
  38. messages.warning(request, f'User might delete this reply.!')
  39. else:
  40. messages.error(request, 'Something going wrong please notify the developers.')
  41. return redirect('facebook-reviews')
  42. def get(self, request, *args, **kwargs):
  43. now = timezone.now()
  44. form = ReplyForm()
  45. date = now - timezone.timedelta(days=15)
  46. reviews = FacebookReview.objects.filter(
  47. facebookreviewreply=None,
  48. create_time__gte=date
  49. ).order_by('create_time')
  50. page = request.GET.get('page', 1)
  51. paginator = Paginator(reviews, 10)
  52. try:
  53. reviews = paginator.page(page)
  54. except PageNotAnInteger:
  55. reviews = paginator.page(1)
  56. except EmptyPage:
  57. reviews = paginator.page(paginator.num_pages)
  58. context = {'reviews': reviews, 'form': form}
  59. return render(request, 'facebook-reviews.html', context=context)
  60. class FacebookReviewPrediction(View):
  61. def get(self, request, id, *args, **kwargs):
  62. review = FacebookReview.objects.get(pk=id)
  63. review_text = clean_text(review.review_text)
  64. res = model_inference(review_text)
  65. intents = analyze_model_inference(res)
  66. replies = {}
  67. for intent in intents.keys():
  68. r = CustomReply.objects.filter(reply_category=intent)
  69. filtered_replies = filter_with_last_ten_reviews(review.page.location_id, r)
  70. replies[intent] = filtered_replies
  71. now = timezone.now()
  72. form = ReplyForm()
  73. date = now - timezone.timedelta(days=15)
  74. reviews = FacebookReview.objects.filter(
  75. facebookreviewreply=None,
  76. create_time__gte=date
  77. ).order_by('create_time')
  78. page = request.GET.get('page', 1)
  79. paginator = Paginator(reviews, 10)
  80. try:
  81. reviews = paginator.page(page)
  82. except PageNotAnInteger:
  83. reviews = paginator.page(1)
  84. except EmptyPage:
  85. reviews = paginator.page(paginator.num_pages)
  86. context = {
  87. 'reviews': reviews,
  88. 'form': form,
  89. 'intents': intents,
  90. 'replies': replies,
  91. }
  92. return render(request, 'facebook-reviews.html', context=context)