Exemple #1
0
    def index(self, force_delete=None, delay=True):
        """Index record in ES.

        Args:
            force_delete: set to True if record has to be deleted,
                If not set, tries to determine automatically if record should be deleted
            delay: if True will start the index task async otherwise async.
        """
        from inspirehep.indexer.tasks import index_record

        arguments = {
            "uuid": str(self.id),
            "record_version": self.model.version_id,
            "force_delete": force_delete,
        }
        LOGGER.info(
            "Record indexing",
            recid=self.get("control_number"),
            uuid=str(self.id),
            arguments=arguments,
        )
        if delay:
            index_record.delay(**arguments)
            return
        index_record(**arguments)
def test_indexer_restarts_when_db_exception_ResourceClosedError_occurs(
        retry_mock, get_record_mock):
    expected_uuid = 1234
    with pytest.raises(Retry):
        index_record(expected_uuid)
    get_record_mock.assert_called_once_with(expected_uuid,
                                            record_version=None,
                                            with_deleted=True)
    retry_mock.assert_called_once()
def test_indexer_do_not_restarts_when_no_exception(indexer_mock, retry_mock,
                                                   get_record_mock):
    expected_uuid = 1234
    index_record(expected_uuid)
    get_record_mock.assert_called_once_with(expected_uuid,
                                            record_version=None,
                                            with_deleted=True)
    retry_mock.assert_not_called()
    indexer_mock.assert_called_once()
def test_gracefully_handle_records_updating_in_wrong_order(
        inspire_app, clean_celery_session):
    # We want to run indexing in weird order, so disable auto indexing
    models_committed.disconnect(index_after_commit)

    cited_record = LiteratureRecord.create(data=faker.record("lit"))
    record_data = faker.record(
        "lit", literature_citations=[cited_record.control_number])
    record = LiteratureRecord.create(data=record_data)
    db.session.commit()

    record = LiteratureRecord.get_record_by_pid_value(record.control_number)

    index_record(record.id, record.model.versions[-1].version_id)
    assert LiteratureSearch().get_source(
        cited_record.id)["citation_count"] == 1

    data = dict(record)
    del data["references"]

    record.update(data)
    db.session.commit()
    record = LiteratureRecord.get_record_by_pid_value(record.control_number)
    data = dict(record)
    data["titles"][0] = {"title": "New Title"}
    record.update(data)
    db.session.commit()

    record = LiteratureRecord.get_record_by_pid_value(record.control_number)

    index_record(record.id, record.model.versions[-1].version_id)

    record = LiteratureRecord.get_record_by_pid_value(record.control_number)

    assert LiteratureSearch().get_source(
        cited_record.id)["citation_count"] == 1
    assert LiteratureSearch().get_source(record.id)["titles"] == [{
        "title":
        "New Title"
    }]

    index_record(record.id, record.model.versions[-2].version_id)

    assert LiteratureSearch().get_source(
        cited_record.id)["citation_count"] == 0
    assert LiteratureSearch().get_source(record.id)["titles"] == [{
        "title":
        "New Title"
    }]
    models_committed.connect(index_after_commit)