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)