コード例 #1
0
ファイル: importer.py プロジェクト: ebi-ait/ingest-client
    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
コード例 #2
0
    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)
コード例 #3
0
    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()
コード例 #4
0
ファイル: importer.py プロジェクト: achave11/ingest-client
    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
コード例 #5
0
    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)