def testdata(app, db, es_clear): """Create, index and return test data.""" indexer = RecordIndexer() locations = load_json_from_datadir("locations.json") for location in locations: record = Location.create(location) mint_record_pid(LOCATION_PID_TYPE, Location.pid_field, record) record.commit() db.session.commit() indexer.index(record) internal_locations = load_json_from_datadir("internal_locations.json") iloc_records = [] for internal_location in internal_locations: record = InternalLocation.create(internal_location) mint_record_pid(INTERNAL_LOCATION_PID_TYPE, InternalLocation.pid_field, record) record.commit() iloc_records.append(record) db.session.commit() indexer.index(record) documents = load_json_from_datadir("documents.json") for doc in documents: record = Document.create(doc) mint_record_pid(DOCUMENT_PID_TYPE, Document.pid_field, record) record.commit() db.session.commit() indexer.index(record) items = load_json_from_datadir("items.json") for item in items: record = Item.create(item) mint_record_pid(ITEM_PID_TYPE, Item.pid_field, record) record.commit() db.session.commit() indexer.index(record) loans = load_json_from_datadir("loans.json") for loan in loans: record = Loan.create(loan) mint_record_pid(CIRCULATION_LOAN_PID_TYPE, Loan.pid_field, record) record.commit() db.session.commit() indexer.index(record) # re-index item attached to the loan index_record_after_loan_change(app, record) # flush all indices after indexing, otherwise ES won't be ready for tests current_search.flush_and_refresh(index=None) return { "locations": locations, "documents": documents, "items": items, "loans": loans, }
def testdata(app, db, es_clear, system_user): """Create, index and return test data.""" indexer = RecordIndexer() locations = load_json_from_datadir("locations.json") for location in locations: record = Location.create(location) mint_record_pid(LOCATION_PID_TYPE, "pid", record) record.commit() db.session.commit() indexer.index(record) internal_locations = load_json_from_datadir("internal_locations.json") for internal_location in internal_locations: record = InternalLocation.create(internal_location) mint_record_pid(INTERNAL_LOCATION_PID_TYPE, "pid", record) record.commit() db.session.commit() indexer.index(record) documents = load_json_from_datadir("documents.json") for doc in documents: record = Document.create(doc) mint_record_pid(DOCUMENT_PID_TYPE, "pid", record) record.commit() db.session.commit() indexer.index(record) items = load_json_from_datadir("items.json") for item in items: record = Item.create(item) mint_record_pid(ITEM_PID_TYPE, "pid", record) record.commit() db.session.commit() indexer.index(record) loans = load_json_from_datadir("loans.json") for loan in loans: record = Loan.create(loan) mint_record_pid(CIRCULATION_LOAN_PID_TYPE, "pid", record) record.commit() db.session.commit() indexer.index(record) # flush all indices after indexing, otherwise ES won't be ready for tests current_search.flush_and_refresh(index='*') return { "locations": locations, "documents": documents, "items": items, "loans": loans, }
def create_multipart_volumes(pid, multipart_legacy_recid, migration_volumes): """Create multipart volume documents.""" volumes = {} # Combine all volume data by volume number for obj in migration_volumes: volume_number = obj['volume'] if volume_number not in volumes: volumes[volume_number] = {} volume = volumes[volume_number] for key in obj: if key != 'volume': if key in volume: raise KeyError( 'Duplicate key "{}" for multipart {}'.format( key, multipart_legacy_recid)) volume[key] = obj[key] volume_numbers = iter(sorted(volumes.keys())) # Re-use the current record for the first volume first_volume = next(volume_numbers) first = Document.get_record_by_pid(pid) if 'title' in volumes[first_volume]: first['title']['title'] = volumes[first_volume]['title'] first['volume'] = first_volume first['_migration']['multipart_legacy_recid'] = multipart_legacy_recid if 'legacy_recid' in first: del first['legacy_recid'] first.commit() yield first # Create new records for the rest for number in volume_numbers: temp = first.copy() temp['title']['title'] = volumes[number]['title'] temp['volume'] = number record_uuid = uuid.uuid4() provider = DocumentIdProvider.create( object_type='rec', object_uuid=record_uuid, ) temp['pid'] = provider.pid.pid_value record = Document.create(temp, record_uuid) record.commit() yield record
def create_record(cls, dump): """Create a new record from dump.""" # Reserve record identifier, create record and recid pid in one # operation. timestamp, data = dump.latest record = Record.create(data) record_uuid = uuid.uuid4() provider = DocumentIdProvider.create( object_type='rec', object_uuid=record_uuid, ) timestamp, json_data = dump.rest[-1] json_data['pid'] = provider.pid.pid_value record.model.json = json_data record.model.created = dump.created.replace(tzinfo=None) record.model.updated = timestamp.replace(tzinfo=None) document = Document.create(record.model.json, record_uuid) document.commit() db.session.commit() return document
def testdata(app, db, es_clear): """Create, index and return test data.""" indexer = RecordIndexer() locations = load_json_from_datadir("locations.json") for location in locations: record = Location.create(location) mint_record_pid(LOCATION_PID_TYPE, "pid", record) record.commit() db.session.commit() indexer.index(record) internal_locations = load_json_from_datadir("internal_locations.json") for internal_location in internal_locations: record = InternalLocation.create(internal_location) mint_record_pid(INTERNAL_LOCATION_PID_TYPE, "pid", record) record.commit() db.session.commit() indexer.index(record) keywords = load_json_from_datadir("keywords.json") for keyword in keywords: record = Keyword.create(keyword) mint_record_pid(KEYWORD_PID_TYPE, "pid", record) record.commit() db.session.commit() indexer.index(record) series_data = load_json_from_datadir("series.json") for series in series_data: record = Series.create(series) mint_record_pid(SERIES_PID_TYPE, "pid", record) record.commit() db.session.commit() indexer.index(record) documents = load_json_from_datadir("documents.json") for doc in documents: record = Document.create(doc) mint_record_pid(DOCUMENT_PID_TYPE, "pid", record) record.commit() db.session.commit() indexer.index(record) items = load_json_from_datadir("items.json") for item in items: record = Item.create(item) mint_record_pid(ITEM_PID_TYPE, "pid", record) record.commit() db.session.commit() indexer.index(record) eitems = load_json_from_datadir("eitems.json") for eitem in eitems: record = EItem.create(eitem) mint_record_pid(EITEM_PID_TYPE, "pid", record) record.commit() db.session.commit() indexer.index(record) loans = load_json_from_datadir("loans.json") for loan in loans: record = Loan.create(loan) mint_record_pid(CIRCULATION_LOAN_PID_TYPE, "pid", record) record.commit() db.session.commit() indexer.index(record) # flush all indices after indexing, otherwise ES won't be ready for tests current_search.flush_and_refresh(index='*') return { "locations": locations, "internal_locations": internal_locations, "documents": documents, "items": items, "loans": loans, "keywords": keywords, "series": series_data, }