|
@@ -1,44 +1,62 @@
|
|
|
import random
|
|
|
-from threading import Thread
|
|
|
from time import sleep
|
|
|
from django.utils import timezone
|
|
|
-from .models import Review, CustomReply
|
|
|
+from .models import Review, CustomReply, Reply
|
|
|
from nlu_job.nlu_utils import is_a_name
|
|
|
from review.review_utils import reply_review
|
|
|
+from review.review_utils import populate_reviews
|
|
|
+
|
|
|
+from nameparser import HumanName
|
|
|
|
|
|
|
|
|
def un_replied_reviews_with_no_comment():
|
|
|
now = timezone.now()
|
|
|
date = now - timezone.timedelta(days=30)
|
|
|
- reviews = Review.objects.filter(comment=None, reply=None, star_rating=5, update_time__gte=date).order_by('update_time')
|
|
|
+ reviews = Review.objects.filter(comment=None, reply=None, star_rating=5, update_time__gte=date)\
|
|
|
+ .order_by('update_time')
|
|
|
return reviews
|
|
|
|
|
|
|
|
|
+def make_parsable_name(name):
|
|
|
+ name = HumanName(name)
|
|
|
+ if name.first == '':
|
|
|
+ if name.title:
|
|
|
+ parsable_name = ' ' + name.title + ' ' + name.last
|
|
|
+ else:
|
|
|
+ parsable_name = ' ' + name.last
|
|
|
+ else:
|
|
|
+ parsable_name = ' ' + name.first.capitalize()
|
|
|
+ return parsable_name
|
|
|
+
|
|
|
+
|
|
|
def generate_reply(review):
|
|
|
replies = CustomReply.objects.filter(reply_category='no_comment')
|
|
|
reply = random.choice(replies)
|
|
|
name = review.reviewer_name
|
|
|
if is_a_name(name):
|
|
|
- parsable_name = ' '+name.split()[0].capitalize()
|
|
|
+ parsable_name = make_parsable_name(name)
|
|
|
else:
|
|
|
parsable_name = ''
|
|
|
replied_text = reply.reply %parsable_name
|
|
|
return replied_text
|
|
|
|
|
|
|
|
|
-def task():
|
|
|
- while True:
|
|
|
- reviews = un_replied_reviews_with_no_comment()
|
|
|
- # TODO: reply reviews in background
|
|
|
- for review in reviews:
|
|
|
- replied_text = generate_reply(review)
|
|
|
- response = reply_review(review=review, replied_text=replied_text)
|
|
|
-
|
|
|
- if response.status_code == 200:
|
|
|
- print(f'Reply for {review.reviewer_name}\'s comment in {review.location} has successfully done!')
|
|
|
+def reply_uncommented_reviews():
|
|
|
+ reviews = un_replied_reviews_with_no_comment()
|
|
|
+ # TODO: reply reviews in background
|
|
|
+ for review in reviews:
|
|
|
+ replied_text = generate_reply(review)
|
|
|
+ response = reply_review(review=review, replied_text=replied_text)
|
|
|
|
|
|
- sleep(60*random.randint(2, 5))
|
|
|
+ if response.status_code == 200:
|
|
|
+ review_reply = Reply(replied_text=replied_text, create_time=timezone.now())
|
|
|
+ review_reply.save()
|
|
|
+ review.reply = review_reply
|
|
|
+ review.save()
|
|
|
+ sleep(60*random.randint(2, 5))
|
|
|
|
|
|
|
|
|
-thread = Thread(target=task)
|
|
|
-# thread.start()
|
|
|
+def background_task():
|
|
|
+ populate_reviews()
|
|
|
+ sleep(60 * random.randint(2, 5))
|
|
|
+ reply_uncommented_reviews()
|