background_job.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import random
  2. from time import sleep
  3. from django.utils import timezone
  4. from .models import Review, CustomReply, Reply
  5. from nlu_job.nlu_utils import is_a_name
  6. from review.review_utils import reply_review
  7. from review.review_utils import populate_reviews, get_bad_reviews
  8. from analytics.background_job import send_email_bad_reviews
  9. from nameparser import HumanName
  10. def un_replied_reviews_with_no_comment():
  11. now = timezone.now()
  12. date = now - timezone.timedelta(days=30)
  13. reviews = Review.objects.filter(comment=None, reply=None, star_rating=5, update_time__gte=date)\
  14. .order_by('update_time')
  15. return reviews
  16. def make_parsable_name(name):
  17. name = HumanName(name)
  18. if name.first == '':
  19. if name.title:
  20. parsable_name = ' ' + name.title + ' ' + name.last
  21. else:
  22. parsable_name = ' ' + name.last
  23. else:
  24. parsable_name = ' ' + name.first.capitalize()
  25. return parsable_name
  26. def generate_reply(review):
  27. replies = CustomReply.objects.filter(reply_category='no_comment')
  28. reply = random.choice(replies)
  29. name = review.reviewer_name
  30. if is_a_name(name):
  31. parsable_name = make_parsable_name(name)
  32. else:
  33. parsable_name = ''
  34. replied_text = reply.reply %parsable_name
  35. return replied_text
  36. def reply_uncommented_reviews():
  37. reviews = un_replied_reviews_with_no_comment()
  38. # TODO: reply reviews in background
  39. for review in reviews:
  40. replied_text = generate_reply(review)
  41. response = reply_review(review=review, replied_text=replied_text)
  42. if response.status_code == 200:
  43. review_reply = Reply(replied_text=replied_text, create_time=timezone.now())
  44. review_reply.save()
  45. review.reply = review_reply
  46. review.save()
  47. sleep(60*random.randint(2, 5))
  48. def background_task():
  49. populate_reviews()
  50. send_email_bad_reviews()
  51. sleep(60 * random.randint(2, 5))
  52. reply_uncommented_reviews()