コード例 #1
0
ファイル: test_request.py プロジェクト: scorphus/holmes-api
    def test_can_save_requests(self):
        self.db.query(Request).delete()

        domain = DomainFactory.create(name='t.com')
        page = PageFactory.create(domain=domain, url='http://t.com/a.html')

        requests = []
        for x in range(3):
            url = 'http://t.com/file%d.html' % x
            response_mock = Mock(
                status_code=100 * x,
                text='OK',
                request_time=0.1 * x,
                effective_url=url
            )
            requests.append((url, response_mock))

        publish = Mock()

        Request.save_requests(self.db, publish, page, requests)

        loaded_requests = self.db.query(Request).all()

        expect(loaded_requests).to_length(3)

        for idx, request in enumerate(loaded_requests):
            expect(request.url).to_equal('http://t.com/file%d.html' % idx)
            expect(request.status_code).to_equal(100 * idx)
            expect(request.response_time).to_equal(0.1 * idx)
            expect(request.domain_name).to_equal('t.com')
            expect(request.review_url).to_equal('http://t.com/a.html')

        expect(publish.called).to_be_true()

        publish.assert_called_once_with(
            dumps({'url': url, 'type': 'new-request'})
        )
コード例 #2
0
ファイル: review.py プロジェクト: skyonamine/holmes-api
    def save_review(
        cls,
        page_uuid,
        review_data,
        db,
        search_provider,
        fact_definitions,
        violation_definitions,
        cache,
        publish,
        config,
    ):
        from holmes.models import Page, Request

        page = Page.by_uuid(page_uuid, db)

        if page is None:
            return

        if review_data["requests"]:
            Request.save_requests(db, publish, page, review_data["requests"])

        last_review = page.last_review

        review = Review(
            domain_id=page.domain.id,
            page_id=page.id,
            is_active=True,
            is_complete=False,
            completed_date=datetime.utcnow(),
            uuid=uuid4(),
        )

        db.add(review)

        for fact in review_data["facts"]:
            name = fact["key"]
            key = fact_definitions[name]["key"]
            review.add_fact(key, fact["value"])

        for violation in review_data["violations"]:
            name = violation["key"]
            key = violation_definitions[name]["key"]
            review.add_violation(key, violation["value"], violation["points"], page.domain)

        page.expires = review_data["expires"]
        page.last_modified = review_data["lastModified"]
        page.last_review_uuid = review.uuid
        page.last_review = review
        page.last_review_date = review.completed_date
        page.violations_count = len(review_data["violations"])

        review.is_complete = True

        if not last_review:
            cache.increment_active_review_count(page.domain)
        else:
            for violation in last_review.violations:
                violation.review_is_active = False

            last_review.is_active = False

        Review.delete_old_reviews(db, config, page)

        search_provider.index_review(review)

        publish(dumps({"type": "new-review", "reviewId": str(review.uuid)}))