def get_builder_with_new_record(self, data): if "$schema" not in data: data["$schema"] = url_for( "invenio_jsonschemas.get_schema", schema_path="records/jobs.json", _external=True, ) if not is_superuser_or_cataloger_logged_in(): data["status"] = "pending" builder = JobBuilder(record=data) if "acquisition_source" not in builder.record: acquisition_source = self.get_acquisition_source() builder.add_acquisition_source(**acquisition_source) return builder
def get_builder_with_updated_record(self, data, record): optional_fields = [ "external_job_identifier", "accelerator_experiments", "urls", "contact_details", "reference_letters", ] record_data = get_updated_record_data(record, data, optional_fields) builder = JobBuilder(record=record_data) return builder
def get_builder_with_updated_record(self, data, record): # This contains all fields which can be removed from record (they are optional) # if new value sent from the form is None, or empty in any other way # (after de-serialization if it's missing from input data) # this fields will be removed from record additional_fields = [ "external_job_identifier", "accelerator_experiments", "urls", "contact_details", "reference_letters", ] record_data = dict(record) for key in additional_fields: if key not in data and key in record_data: del record_data[key] record_data.update(data) builder = JobBuilder(record=record_data) return builder
def test_job_builder(job_data): start_data = { '_collections': ['Jobs'], 'control_number': job_data['control_number'], 'deleted': job_data['deleted'], 'deleted_records': job_data['deleted_records'], 'legacy_creation_date': job_data['legacy_creation_date'], 'legacy_version': job_data['legacy_version'], 'new_record': job_data['new_record'], 'public_notes': job_data['public_notes'], 'self': job_data['self'] } builder = JobBuilder(start_data) private_note = job_data['_private_notes'] builder.add_private_note(**private_note[0]) assert builder.record['_private_notes'] == private_note experiments = job_data['accelerator_experiments'] builder.add_accelerator_experiment(**experiments[0]) builder.add_accelerator_experiment(**experiments[1]) assert builder.record['accelerator_experiments'] == experiments acquisition_source = job_data['acquisition_source'] builder.add_acquisition_source(**acquisition_source) assert builder.record['acquisition_source'] == acquisition_source arxiv = job_data['arxiv_categories'] builder.add_arxiv_category(arxiv[0]) builder.add_arxiv_category(arxiv[1]) builder.add_arxiv_category(arxiv[2]) assert builder.record['arxiv_categories'] == arxiv contact_details = job_data['contact_details'] builder.add_contact(**contact_details[0]) builder.add_contact(**contact_details[1]) builder.add_contact(**contact_details[2]) assert builder.record['contact_details'] == contact_details deadline = job_data['deadline_date'] builder.set_deadline(deadline) assert builder.record['deadline_date'] == deadline description = job_data['description'] builder.set_description(description) assert builder.record['description'] == description external_job_id = job_data['external_job_identifier'] builder.set_external_job_identifier(external_job_id) assert builder.record['external_job_identifier'] == external_job_id external_system_id = job_data['external_system_identifiers'] builder.add_external_system_identifiers(**external_system_id[0]) assert builder.record['external_system_identifiers'] == external_system_id institutions = job_data['institutions'] builder.add_institution(**institutions[0]) builder.add_institution(**institutions[1]) assert builder.record['institutions'] == institutions position = job_data['position'] builder.set_title(position) assert builder.record['position'] == position ranks = job_data['ranks'] builder.add_rank(ranks[0]) assert builder.record['ranks'] == ranks ref_letters = job_data['reference_letters'] builder.add_reference_email(ref_letters['emails'][0]) builder.add_reference_email(ref_letters['emails'][1]) builder.add_reference_url(**ref_letters['urls'][0]) builder.add_reference_url(**ref_letters['urls'][1]) builder.add_reference_url(**ref_letters['urls'][2]) builder.add_reference_url(**ref_letters['urls'][3]) builder.add_reference_url(**ref_letters['urls'][4]) assert builder.record['reference_letters'] == ref_letters regions = job_data['regions'] builder.add_region(regions[0]) builder.add_region(regions[1]) builder.add_region(regions[2]) builder.add_region(regions[3]) assert builder.record['regions'] == regions status = job_data['status'] builder.set_status(status) assert builder.record['status'] == status urls = job_data['urls'] builder.add_url(**urls[0]) builder.add_url(**urls[1]) assert builder.record['urls'] == urls assert builder.record == job_data builder.validate_record()