def do_import(self, workbook: IngestWorkbook, is_update, project_uuid=None, update_project=False, worksheet_titles: List[str] = None): registry = _ImportRegistry(self.template_mgr) if worksheet_titles: importable_worksheets = workbook.select_importable_worksheets(worksheet_titles) else: importable_worksheets = workbook.importable_worksheets() workbook_errors = self.validate_worksheets(is_update, importable_worksheets) importable_worksheets = [ws for ws in importable_worksheets] for worksheet in importable_worksheets: try: self._import_worksheet(project_uuid, registry, update_project, workbook_errors, worksheet) except Exception as e: workbook_errors.append( {"location": f'sheet={worksheet.title}', "type": e.__class__.__name__, "detail": str(e)}) if not registry.has_project() and not project_uuid: e = NoProjectFound() workbook_errors.append({"location": "File", "type": e.__class__.__name__, "detail": str(e)}) if project_uuid and update_project and not registry.has_project(): workbook_errors.append({"location": "File", "type": "NoProjectWorksheet", "detail": "The option to update the project was specified but there is no project " "worksheet found."}) if project_uuid and not registry.has_project(): registry.add_project_reference(project_uuid) self._import_modules(registry, workbook_errors) return registry.flatten(), workbook_errors
def test_importable_worksheets(self): # given: importable_names = ['Organ From Donor', 'Cell Suspension', 'Project'] workbook = create_test_workbook(*importable_names) workbook.create_sheet('Schemas') # and: ingest_workbook = IngestWorkbook(workbook) # when: actual_worksheets = ingest_workbook.importable_worksheets() # then: actual_titles = [ingest_worksheet.title for ingest_worksheet in actual_worksheets] self.assertEqual(importable_names, actual_titles)
def do_import(self, workbook: IngestWorkbook, project_uuid=None): registry = _ImportRegistry() for worksheet in workbook.importable_worksheets(): metadata_entities = self.worksheet_importer.do_import(worksheet) module_field_name = worksheet.get_module_field_name() for entity in metadata_entities: if worksheet.is_module_tab(): entity.retain_content_fields(module_field_name) registry.add_module(entity) else: registry.add_submittable(entity) if registry.has_project(): registry.import_modules() else: raise NoProjectFound() return registry.flatten()
def do_import(self, workbook: IngestWorkbook, project_uuid=None): spreadsheet_json = {} self.import_or_reference_project(project_uuid, spreadsheet_json, workbook) for worksheet in workbook.importable_worksheets(): concrete_entity = self.template_mgr.get_concrete_entity_of_tab( worksheet.title) domain_entity = self.template_mgr.get_domain_entity( concrete_entity) entities_dict = self.worksheet_importer.do_import( worksheet, self.template_mgr) if spreadsheet_json.get(domain_entity) is None: spreadsheet_json[domain_entity] = {} spreadsheet_json[domain_entity].update(entities_dict) return spreadsheet_json
def test_importable_worksheets(self): # given: workbook = Workbook() # and: importable_names = ['Organ From Donor', 'Cell Suspension'] expected_worksheets = [ workbook.create_sheet(name) for name in importable_names ] workbook.create_sheet('Schemas') # and: default_worksheet = workbook.get_sheet_by_name('Sheet') workbook.remove_sheet(default_worksheet) # and: ingest_workbook = IngestWorkbook(workbook) # when: actual_worksheets = ingest_workbook.importable_worksheets() # then: self.assertEqual(expected_worksheets, actual_worksheets)