예제 #1
0
파일: views.py 프로젝트: S0Imyr/Projet9
def create_review(request, id_ticket=None):
    review = None
    context = {}
    if id_ticket is not None:
        ticket = get_object_or_404(Ticket, pk=id_ticket)
        context = {'post': {'content': ticket}}
        review = Review(ticket=ticket,
                        rating=None,
                        headline=None,
                        body=None,
                        user=request.user,
                        time_created=None)
    else:
        review = Review(ticket=None,
                        rating=None,
                        headline=None,
                        body=None,
                        user=request.user,
                        time_created=None)
    if request.method == 'GET':
        form = ReviewForm(instance=review)
        context['form'] = form
        return render(request, 'review/addreview.html', context)
    elif request.method == 'POST':
        form = ReviewForm(request.POST)
        if form.is_valid():
            form.save()
            ticket.save()
            return redirect('flux')
        else:
            return render(request, 'review/addreview.html', context)
예제 #2
0
    def save(self):
        try:
            title = self.validated_data['title']
            body = self.validated_data['body']
            rating = self.validated_data['rating']
            comic = self.validated_data['comic']

            # Create new review unless one already exists for this comic by this user
            try:
                previously_reviewed = Review.objects.get(
                    author__id=self.context['request'].user.id,
                    comic__id=comic.id)
                if previously_reviewed:
                    raise serializers.ValidationError({
                        "response":
                        "You've already rated/reviewed this.",
                        "review":
                        ReviewSerializer(previously_reviewed).data
                    })
            except Review.DoesNotExist:
                review = Review(title=title,
                                body=body,
                                rating=rating,
                                author=self.context['request'].user,
                                comic=comic)
                review.save()
                return review

        except KeyError as e:
            raise serializers.ValidationError(
                {"response": "Please include all required fields"})
예제 #3
0
def showweibo(request, id, weiboid):
    iname = request.session["username"]
    iuser = User.objects.get(username=iname)
    iid = iuser.pk
    weibo = Weibo.objects.get(pk=weiboid)
    list_review = weibo.review_set.all()

    if request.method == "POST":
        form = reviewWeibo(request.POST)
        if form.is_valid():
            review = form.cleaned_data['review']
            user = User.objects.get(username=request.session['username'])
            r = Review(review=review, weibo=weibo, user=user)
            r.save()
            return render(request,
                          'weibo/showweibo.html',
                          context={
                              "weibo": weibo,
                              'list_review': list_review,
                              'form': form,
                              'iid': iid
                          })
    else:
        form = reviewWeibo()
    return render(request,
                  'weibo/showweibo.html',
                  context={
                      "weibo": weibo,
                      'list_review': list_review,
                      'form': form,
                      'iid': iid
                  })
예제 #4
0
    def __create_reviews(self):
        self.review_yoga_twist = Review()
        self.review_yoga_twist.owner = self.user_marie_houana
        self.review_yoga_twist.revision = self.rev_yoga_twist
        self.review_yoga_twist.rating = 2.5
        self.review_yoga_twist.description = "Not bad!"
        self.review_yoga_twist.is_draft = False
        self.review_yoga_twist.save()

        self.review_yoga_twist_2 = Review()
        self.review_yoga_twist_2.owner = self.user_mnieber
        self.review_yoga_twist_2.revision = self.rev_yoga_twist_2
        self.review_yoga_twist_2.rating = 4
        self.review_yoga_twist_2.description = "Good, good, good"
        self.review_yoga_twist_2.is_draft = False
        self.review_yoga_twist_2.save()
예제 #5
0
def handle_review_csv(csv_file, user_who_uploaded):
	csv_file_text_mode = codecs.iterdecode(csv_file, "utf-8")
	csv_reader = csv.reader(csv_file_text_mode, delimiter=',')
	for row in csv_reader:
		try:
			first_email = row[0]
			second_email = row[1]
			first_application = Application.objects.filter(email=first_email).first()
			second_application = Application.objects.filter(email=second_email).first()
			winner = True if row[2] == "1" else False
			user = user_who_uploaded
			time = datetime.now()
			in_prog = False
			completed = True
			review = Review(winner=winner, 
					user=user, 
					time=time, 
					in_prog=in_prog, 
					completed=completed)
			review.apps.add(first_application, second_application)
			review.full_clean()
		except ValidationError as e:
			"""Fields are not valid."""
			return True, "The csv fields are not valid."
		else:
			review.save()
	return False, "Uploaded reviews"
예제 #6
0
 def setUp(self):
     with open('secrets.json', 'r') as f:
         secret_key = json.load(f)
     LoginPlatform(name="airbnb").save()
     User(id=1,
          email='*****@*****.**',
          password=bcrypt.hashpw("qweasd123!".encode('utf-8'),
                                 bcrypt.gensalt()).decode('utf-8'),
          first_name='jiwon',
          last_name='ko',
          birth_date=datetime.datetime.strptime("1997-2-20", "%Y-%m-%d"),
          is_host=False,
          platform=LoginPlatform.objects.get(name="airbnb")).save()
     Amenity(name='amenity').save()
     Room(id=1,
          title='Room title',
          address='Room 주소',
          max_personnal='10',
          bed_room='침실',
          bed='퀸 사이즈',
          bath_room='욕실 한 개',
          price=100000,
          latitude=30,
          longitude=50,
          description='room 설명').save()
     BookingStatus(status='예약완료').save()
     PaymentMethod(name='체크카드').save()
     Booking(id=1,
             check_in=datetime.datetime.strptime("2020-08-10", "%Y-%m-%d"),
             check_out=datetime.datetime.strptime("2020-08-12", "%Y-%m-%d"),
             price=100000,
             cleaning_expense=10000,
             service_tax=3000,
             accomodation_tax=3000,
             adult=3,
             children=1,
             infants=0,
             user=User.objects.get(email='*****@*****.**'),
             room=Room.objects.get(title='Room title'),
             status=BookingStatus.objects.get(status='예약완료'),
             payment_method=PaymentMethod.objects.get(name='체크카드'),
             created_at=datetime.datetime.strptime("2020-08-09",
                                                   "%Y-%m-%d")).save()
     Review(booking=Booking.objects.get(id=1),
            content='리뷰 내용',
            cleanliness_score=4.0,
            communication_score=5.0,
            check_in_score=3.0,
            accuracy_score=2.5,
            location_score=3.5,
            satisfaction_score=4.0,
            created_at=datetime.datetime.strptime("2020-09-01",
                                                  "%Y-%m-%d")).save()
     self.token = jwt.encode(
         {
             'email': User.objects.get(email='*****@*****.**').email
         },
         secret_key['SECRET_KEY'],
         algorithm=ALGORITHM).decode('utf-8')
예제 #7
0
 def setUp(self):
     self.instructor = Instructor(name="Teacher")
     self.instructor.save()
     self.review = Review(
         section=get_or_create_course_and_section("CIS-120-001", TEST_SEMESTER)[1],
         instructor=self.instructor,
     )
     self.review.save()
예제 #8
0
def reviews(request):
    if ('author' in request.GET and 'comment' in request.GET
            and request.GET['author'] != '' and request.GET['comment'] != ''):
        review = Review(author=request.GET['author'], text=request.GET['comment'])
        review.save()

    all_reviews = reversed(Review.objects.all())
    return render(request, 'reviews.html', {'reviews': all_reviews})
예제 #9
0
    def __get_or_create_review(self, request, revision, all_reviews):
        review = all_reviews.filter(owner=request.global_user).first()
        if not review:
            review = Review()
            review.owner = request.global_user
            review.revision = revision
            review.save()

        return review
예제 #10
0
    def post(self, request, restaurant_id):
        user_who_wrote_review = request.user
        request_time = datetime.now(timezone.utc)
        review_data = json.loads(request.body)
        restaurant_for_review = Restaurants.objects.get(id=restaurant_id)
        orders_of_user = Order.objects.filter(
            user=user_who_wrote_review,
            restaurant=restaurant_for_review).order_by('-id')

        if len(orders_of_user) == 0:
            return JsonResponse({'message': 'INVALID_USER'}, status=401)

        latest_order_of_user = orders_of_user[0]
        date_of_latest_order = latest_order_of_user.created_at  #가장 최근 주문의 생성날짜
        #주문한지 7일이 지났다면 리뷰를 쓸수 없음
        days = 60 * 60 * 24
        if (request_time - date_of_latest_order).total_seconds() > (7 * days):
            return JsonResponse({'message': 'EXPIRED_PERIOD'}, status=401)

        rating = review_data['rating']
        #리뷰 등록
        Review(
            order=latest_order_of_user,
            user=user_who_wrote_review,
            restaurant=restaurant_for_review,
            comment=review_data['comment'],
            rating_taste=rating['taste'],
            rating_delivery=rating['delivery'],
            rating_quantity=rating['quantity'],
            rating_avg=sum(rating.values()) / len(rating),
            created_at=request_time,
        ).save()

        saved_review = Review.objects.latest('created_at')
        #menu와 review 연결
        join_review_menu_list = []
        for i in range(len(review_data['menus'])):
            join_review_menu_list.append(
                JoinReviewMenu(
                    review=saved_review,
                    menu=Menus.objects.get(id=review_data['menus'][i]['id']),
                    amount=review_data['amounts'][i],
                ))
        JoinReviewMenu.objects.bulk_create(join_review_menu_list)
        #review img와 review 연결
        if len(review_data['review_img']) != 0:
            review_img_list = []
            for i in range(len(review_data['review_img'])):
                review_img_list.append(
                    ReviewImage(
                        review=saved_review,
                        review_image=review_data['review_img'][i],
                    ))
            ReviewImage.objects.bulk_create(review_img_list)

        return JsonResponse({'message': 'SUCCESS'}, status=200)
예제 #11
0
def create(request):
    # 여기서 글을 DB에 저장
    title = request.GET["title"]
    body = request.GET["body"]
    review = Review()
    review.title = title
    review.body = body
    review.pub_date = timezone.now()
    review.save()
    return redirect('home')
예제 #12
0
 def test_one_rating(self):
     review1 = Review(
                 rating = 5,
                 reviewer = self.user,
                 parkingspot= self.test_spot1
             )
     review1.save()
     rating = self.test_spot1.get_avg_rating()
     self.assertEqual(5, rating)
     review1.delete()
예제 #13
0
def review_create(request):

    # Получение данных из формы в переменную
    form = ReviewForm(request.POST)
    dbl.log("Форма" + str(form))

    # global list_crumb_for_software
    list_crumb_for_software = [['Главная', 'main:index'],
                               ['Отзывы', 'review:list_review']]
    #  Получение данных из формы и сохранение в бд
    if request.method == "POST":
        try:

            # Проверка принадлежности запрашиваемого заказа к текущему пользователю
            # Получения пользователя
            user = CustomUser.get_user(request)

            # Здесь автоматически проверяются все поля формы методами clean_...
            if form.is_valid():

                new_review = Review()
                new_review.kind = 'com'
                if user:
                    new_review.client = user

                new_review.content = form.cleaned_data['content']
                new_review.star = form.cleaned_data['star']
                new_review.name = form.cleaned_data['name']
                new_review.email_phone = form.cleaned_data['email_phone']
                new_review.save()

                addition_file = request.FILES.getlist('file')

                # Сохранение приложений файлов к отзыву (происходит тогда, когда все поля валидны)
                for file in addition_file:
                    dbl.log("777")
                    new_addition = Review_Addition()

                    new_addition.review = new_review
                    new_addition.photo = file
                    new_addition.save()

                return redirect('review:review_success')

        except Exception as error:
            pass
            dbl.log("Ошибка работы с отзывом" + str(error))

    rating = [5, 4, 3, 2, 1]
    return render(request, 'review/review_create.html', {
        'form': form,
        'rating': rating,
        'list_crumb': list_crumb_for_software
    })
예제 #14
0
파일: views.py 프로젝트: pythexcel/fab
 def post(self, request, pk=None):
     rating = request.data.get("rating")
     user_one = self.request.user
     user_two = User.objects.get(id=pk)
     reviewed = Review.objects.filter(user_id=user_one.id,
                                      rated_user_id=user_two.id).delete()
     review = Review(user_id=user_one.id,
                     rated_user_id=user_two.id,
                     rating=rating)
     review.save()
     return Response({"Message": "Rating submitted"})
예제 #15
0
 def test_validate_review_post_request_review_exists(self):
     # Review exists already
     test_data = {"courseCode": "TDT4290",
                  "score": 1,
                  "workload": 1,
                  "difficulty": 1,
                  "reviewText": "Lorem ipsum"}
     test_review = Review(user_email="*****@*****.**", course_code="TDT4290", score=4, workload=5, difficulty=3,
                          review_text="Test review", full_name="Test Testesen", study_programme="MTDT")
     test_review.save()
     with self.assertRaises(ValueError):
         validate_review_post_request(test_data, ["TDT4290", "TMA4125"], "*****@*****.**")
예제 #16
0
def review(request, pk):
    if "form_submit" in request.POST:
        form = ReviewForm(request.POST)
        if form.is_valid():
            r = Review(
                user=request.user,
                location=Location.objects.only("id").get(id=pk),
                content=form.cleaned_data["content"],
                rating=form.cleaned_data["rating"],
            )
            r.save()
    return HttpResponseRedirect(reverse("location", args=(pk, )))
예제 #17
0
 def setUp(self) -> None:
     courses = [
         Course(course_code="TDT4120", course_name="AlgDat", credit=7.5, average_grade=1, pass_rate=100.0),
         Course(course_code="TMA4100", course_name="Matte 1", credit=7.5, average_grade=1, pass_rate=100.0),
         Course(course_code="EXPH0004", course_name="Exphil", credit=7.5, average_grade=1, pass_rate=100.0),
         Course(course_code="TFE4101", course_name="KretsDigtek", credit=7.5, average_grade=1, pass_rate=100.0),
         Course(course_code="TFY4125", course_name="Fysikk", credit=7.5, average_grade=1, pass_rate=100.0),
         Course(course_code="TDT4290", course_name="KPro", credit=7.5, average_grade=1, pass_rate=100.0),
         Course(course_code="TDT4136", course_name="AI Intro", credit=7.5, average_grade=1, pass_rate=100.0),
     ]
     for c in courses: c.save()
     reviews = [
         Review(id=1, course_code="TMA4100", user_email="*****@*****.**", score=5, workload=1, difficulty=2,
                review_text="Bra f*g", full_name="Test test", study_programme="MTDT"),
         Review(id=2, course_code="TMA4100", user_email="*****@*****.**", score=3, workload=0, difficulty=0,
                review_text="Givende", full_name="KPro Kproson", study_programme="MTKPRO"),
         Review(id=3, course_code="TMA4100", user_email="*****@*****.**", score=4, workload=1, difficulty=2,
                review_text="Lattice", full_name="Heman 2015", study_programme="MTDT"),
         Review(id=4, course_code="TDT4120", user_email="*****@*****.**", score=5, workload=2, difficulty=2,
                review_text="Kult", full_name="KPro Kproson", study_programme="MTKPRO"),
         Review(id=5, course_code="TDT4120", user_email="*****@*****.**", score=1, workload=0, difficulty=0,
                review_text="Kjipt", full_name="Test test", study_programme="MTDT"),
         Review(id=6, course_code="EXPH0004", user_email="*****@*****.**", score=3, workload=1, difficulty=0,
                review_text="<3", full_name="KPro Kproson", study_programme="MTDT")
     ]
     for r in reviews: r.save()
     UserAuth(expiring_token="valid_token", access_token="valid_token", user_email="*****@*****.**").save()
     User.objects.create(username="******", email="*****@*****.**").save()
예제 #18
0
    def setUp(self):
        self.course, self.section = create_mock_data("CIS-120-001", TEST_SEMESTER)
        _, self.section2 = create_mock_data("CIS-120-002", TEST_SEMESTER)
        self.instructor = Instructor(name="Person1")
        self.instructor.save()
        self.rev1 = Review(
            section=create_mock_data("CIS-120-003", "2005C")[1],
            instructor=self.instructor,
            responses=100,
        )
        self.rev1.save()
        self.rev1.set_averages(
            {
                "course_quality": 4,
                "instructor_quality": 4,
                "difficulty": 4,
            }
        )
        self.instructor2 = Instructor(name="Person2")
        self.instructor2.save()
        self.rev2 = Review(
            section=create_mock_data("CIS-120-002", "2015A")[1],
            instructor=self.instructor2,
            responses=100,
        )
        self.rev2.instructor = self.instructor2
        self.rev2.save()
        self.rev2.set_averages(
            {
                "course_quality": 2,
                "instructor_quality": 2,
                "difficulty": 2,
            }
        )

        self.section.instructors.add(self.instructor)
        self.section2.instructors.add(self.instructor2)
        self.client = APIClient()
        set_semester()
예제 #19
0
 def setUp(self):
     UserAuth(expiring_token="valid_token",
              access_token="valid_token",
              user_email="*****@*****.**").save()
     self.api_client = APIClient()
     self.api_client.credentials(HTTP_AUTHORIZATION="valid_token")
     User.objects.create(username="******",
                         email="*****@*****.**").save()
     User.objects.create(username="******",
                         email="*****@*****.**").save()
     Course(course_code="TMA4100",
            course_name="Matte 1",
            credit=7.5,
            average_grade=1,
            pass_rate=100.0).save()
     Review(course_code="TMA4100",
            user_email="*****@*****.**",
            score=5,
            workload=1,
            difficulty=2,
            review_text="Bra f*g",
            full_name="Test test",
            study_programme="MTDT").save()
     Review(course_code="TMA4100",
            user_email="*****@*****.**",
            score=3,
            workload=1,
            difficulty=2,
            review_text="Givende",
            full_name="KPro Kproson",
            study_programme="MTKPRO").save()
     self.curr_user = User.objects.get(username="******")
     self.other_user = User.objects.get(username="******")
     self.review1 = Review.objects.get(course_code="TMA4100",
                                       user_email="*****@*****.**")
     self.review2 = Review.objects.get(course_code="TMA4100",
                                       user_email="*****@*****.**")
     Upvote(user=self.curr_user, review=self.review1).save()
     Upvote(user=self.other_user, review=self.review1).save()
예제 #20
0
 def test_insert_review(self):
     """ Test if the review document is inserted properly """
     req = self.factory.post('/api/review/insert/',
                             self.expected,
                             content_type='application/json')
     actual = json.loads(view_response.insert_review_page(req).content)
     del actual['Timestamp']
     expected = Review(_id=actual['_id'],
                       restaurant_id="111111111111111111111111",
                       user_email="*****@*****.**",
                       title="title2",
                       content="content2",
                       rating=3)
     self.assertDictEqual(model_to_dict(expected), actual)
예제 #21
0
    def create(self, request, *args, **kwargs):
        restaurant = Restaurant.objects.get(id=kwargs['pk'])
        rating = self.request.data['rating']

        if rating in [1, 2, 3, 4, 5]:
            review = Review(author=self.request.user,
                            rating=rating,
                            restaurant=restaurant,
                            content=self.request.data['content'])
            review.save()
            return Response(self.get_serializer(review).data)
        else:
            return JsonResponse(
                {'detail': 'Please provide valid rating(1 to 5)!'})
예제 #22
0
def review(request):
    user = request.user
    if Profile.objects.filter(user=user, is_council=True).exists():
        submission = request.POST.get('task')
        feedback = request.POST.get('feedback')
        rating = request.POST.get('rating')
        review = Review(user=Profile.objects.get(user=user),
                        submission_id=submission,
                        feedback=feedback,
                        rating=rating)
        review.save()
        return redirect('/portal/home?success=True')

    return redirect('/portal/home')
예제 #23
0
 def test_multiple_ratings(self):
     review1 = Review(
                 rating = 5,
                 reviewer = self.user,
                 parkingspot= self.test_spot1
             )
     review2 = Review(
                 rating = 4,
                 reviewer = self.user,
                 parkingspot= self.test_spot1
             )
     review3 = Review(
                 rating = 3,
                 reviewer = self.user,
                 parkingspot= self.test_spot1
             )
     review1.save()
     review2.save()
     review3.save()
     rating = self.test_spot1.get_avg_rating()
     self.assertEqual(4, rating)
     review1.delete()
     review2.delete()
     review3.delete()
예제 #24
0
    def setUpClass(cls):
        """Method called to prepare the test fixture."""
        super(BaseViewTestCase, cls).setUpClass()

        # create user
        cls.user = get_user_model().objects.create(
            username='******',
            email='*****@*****.**'
        )
        cls.user.set_password('123test')
        cls.user.save()

        # create pictures
        small_gif = (
            b'\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x00\x00\x00\x21\xf9\x04'
            b'\x01\x0a\x00\x01\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02'
            b'\x02\x4c\x01\x00\x3b'
        )

        cls.picture = Picture(
            title='test_title',
            file_name=SimpleUploadedFile(
                name='small.gif', content=small_gif, content_type='image/gif'),
            description='test_description',
            technical='test_technical',
            camera='test_camera',
            place='test_place',
            taken_date=date(2021, 1, 1),
            user=cls.user,
            upload_date=datetime.now(),
        )
        cls.picture.save()

        cls.review = Review(
            score_intention=4,
            score_technical=4,
            score_picture=4,
            score_global=4,
            comment_intention="test",
            picture=cls.picture,
            user=cls.user
        )
        cls.review.save()

        cls.client_login = Client(HTTP_REFERER=reverse('gallery:home'))
        cls.logged_in = cls.client_login.login(
            username='******', password='******')
예제 #25
0
 def test_can_review_review_exists(self):
     c = APIClient()
     c.credentials(HTTP_AUTHORIZATION='valid_token')
     Review(course_code="TMA4100",
            user_email="*****@*****.**",
            score=5,
            workload=1,
            difficulty=2,
            review_text="Bra f*g",
            full_name="Test testesen",
            study_programme="MTDT").save()
     with patch("course.views.Course.objects.filter") as mock_course_db:
         mock_course_db.return_value = MockQuerySet(
             [Course.create("AAA9999", "Test course", 0, 0, 100.0)])
         res = c.get("/review/check/?courseCode=TMA4100")
     self.assertEqual(res.status_code, 200)
     self.assertEqual(res.data, 2)
예제 #26
0
    def post(self, request, *args, **kwargs):
        submission = Submission.objects.get(pk=kwargs.get('pk', None))

        if submission.status == 0:
            submission.status = 1
            submission.save()
            return redirect('review', submission.pk)
        elif submission.status == 1:
            form = ReviewForm(request.POST)
            if form.is_valid():
                review = Review(reviewer=request.user.judge,
                                submission=submission,
                                comment=request.POST['comment'])
                review.save()
                submission.status = request.POST['status']
                submission.save()
            return redirect('reviews')
예제 #27
0
 def post(self, request, pk, host):
     user = request.user
     data = json.loads(request.body)
     rating = Rating.objects.create(
         cleanliness = data['inputs'].get('cleanliness', 0),
         communication = data['inputs'].get('communication', 0),
         check_in = data['inputs'].get('check_in', 0),
         accuracy = data['inputs'].get('accuracy', 0),
         location = data['inputs'].get('location', 0),
         value = data.get('value', 0))
     Review(
         room_id = pk,
         reviewer_id = TOHOST,
         host_id = host,
         guest_id = user.id,
         rating = rating,
         content = data['inputs'].get('content', ' ')).save()
     return HttpResponse(status = 200)
예제 #28
0
def create_mock_data_with_reviews(code, semester, number_of_instructors):
    course, section = create_mock_data(code, semester)
    reviews = []
    for i in range(1, number_of_instructors + 1):
        instr, _ = Instructor.objects.get_or_create(name="Instructor" + str(i))
        section.instructors.add(instr)
        review = Review(section=section, instructor=instr, responses=100)
        review.save()
        review.set_averages(
            {
                "course_quality": 4 / i,
                "instructor_quality": 4 / (i + 1),
                "difficulty": 4 / (i + 2),
                "work_required": 4 / (i + 3),
            }
        )
        reviews.append(review)
    return course, section, reviews
예제 #29
0
    def save(self, commit=True):
        """
        Though this form is linked to an Application instance, it's actually
        used to save the corresponding review instance.
        """

        data = {
            "reviewer": self.request.user,
            "interest": int(self.cleaned_data["interest"]),
            "experience": int(self.cleaned_data["experience"]),
            "quality": int(self.cleaned_data["quality"]),
            "reviewer_comments": self.cleaned_data["reviewer_comments"],
            "status": self.cleaned_data["status"],
        }

        review = getattr(self.instance, "review", None)

        if review is None:
            data["application"] = self.instance
            review = Review(**data)
        else:
            old_status = review.status

            for attr, value in data.items():
                setattr(review, attr, value)

            # If they were previously waitlisted and the status has been changed to
            # accepted or rejected, allow sending a new decision by clearing
            # decision_sent_date
            if old_status == "Waitlisted" and review.status != old_status:
                review.decision_sent_date = None

        if commit:
            review.save()
        else:
            self.review = review

            # If commit=False, super().save(commit=False) will set
            # self.save_m2m = self._save_m2m, for the user to call at a later time.
            # This will now also save the review instance.
            self._save_m2m = self._save_m2m_and_review

        return super().save(commit)
예제 #30
0
def get_reviews(url, movie, base=None):
    from requests import get
    from bs4 import BeautifulSoup as BS
    from time import sleep
    from random import randint

    reviews = 0

    try:
        response = get(url)

        html_soup = BS(response.text, 'html.parser')
        review_containers = html_soup.find_all('div',
                                               class_='imdb-user-review')

        for review in review_containers:
            title, comment, date, rating = get_review_info(review)

            review = Review()
            review.title = title
            review.comment = comment
            review.date = date
            review.movie = movie
            review.rating = rating
            review.url = url

            review.save()

        if html_soup.find('div', class_='load-more-data') is not None:
            if base is None:
                base = url

            _key = html_soup.find('div', class_='load-more-data')['data-key']
            _url = base + '/_ajax?paginationKey=' + _key
            sleep(randint(3, 8))
            get_reviews(_url, movie, base)
    except Exception as e:
        print('ERROR: ', e)
        print(movie, url)

    return reviews