background_job.py 1.8 KB

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