background_job.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import random
  2. from threading import Thread
  3. from time import sleep
  4. from django.utils import timezone
  5. from .models import Review, CustomReply
  6. from nlu_job.nlu_utils import is_a_name
  7. from review.review_utils import reply_review
  8. def un_replied_reviews_with_no_comment():
  9. now = timezone.now()
  10. date = now - timezone.timedelta(days=30)
  11. reviews = Review.objects.filter(comment=None, reply=None, star_rating=5, update_time__gte=date).order_by('update_time')
  12. return reviews
  13. def generate_reply(review):
  14. replies = CustomReply.objects.filter(reply_category='no_comment')
  15. reply = random.choice(replies)
  16. name = review.reviewer_name
  17. if is_a_name(name):
  18. parsable_name = ', '+name.split()[0].capitalize()
  19. else:
  20. parsable_name = ''
  21. replied_text = reply.reply %parsable_name
  22. return replied_text
  23. def task():
  24. while True:
  25. reviews = un_replied_reviews_with_no_comment()
  26. # TODO: reply reviews in background
  27. for review in reviews:
  28. replied_text = generate_reply(review)
  29. response = reply_review(review=review, replied_text=replied_text)
  30. if response.status_code == 200:
  31. print(f'Reply for {review.reviewer_name}\'s comment in {review.location} has successfully done!')
  32. sleep(60*random.randint(2, 5))
  33. thread = Thread(target=task)
  34. # thread.start()