def write_data(self, book): new_models = [model for model in self.models if model is not None] batch_size = self.keywords.get(params.BATCH_SIZE, None) initializers = self.keywords.get(params.INITIALIZERS, None) if initializers is None: initializers = [None] * len(new_models) mapdicts = self.keywords.get(params.MAPDICTS, None) if mapdicts is None: mapdicts = [None] * len(new_models) for sheet in book: if len(sheet.colnames) == 0: sheet.name_columns_by_row(0) colnames_array = [sheet.colnames for sheet in book] scattered = zip(new_models, colnames_array, mapdicts, initializers) importer = DjangoModelImporter() for each_model in scattered: adapter = DjangoModelImportAdapter(each_model[0]) adapter.set_column_names(each_model[1]) adapter.set_column_name_mapping_dict(each_model[2]) adapter.set_row_initializer(each_model[3]) importer.append(adapter) to_store = OrderedDict() for sheet_name in book.sheet_names(): # due book.to_dict() brings in column_names # which corrupts the data to_store[sheet_name] = book[sheet_name].array save_data(importer, to_store, file_type=DB_DJANGO, batch_size=batch_size)
def test_reading_from_more_models(self): model1=FakeDjangoModel() model2=FakeDjangoModel() importer = DjangoModelImporter() adapter1 = DjangoModelImportAdapter(model1) adapter1.set_column_names(self.content['Sheet1'][0]) adapter2 = DjangoModelImportAdapter(model2) adapter2.set_column_names(self.content['Sheet2'][0]) importer.append(adapter1) importer.append(adapter2) to_store = { adapter1.get_name(): self.content['Sheet1'][1:], adapter2.get_name(): self.content['Sheet2'][1:] } save_data(importer, to_store, file_type=DB_DJANGO) assert model1.objects.objs == self.result1 assert model2.objects.objs == self.result2 model1._meta.model_name = "Sheet1" model2._meta.model_name = "Sheet2" model1._meta.update(["X", "Y", "Z"]) model2._meta.update(["A", "B", "C"]) exporter = DjangoModelExporter() adapter1 = DjangoModelExportAdapter(model1) adapter2 = DjangoModelExportAdapter(model2) exporter.append(adapter1) exporter.append(adapter2) reader = DjangoBookReader() reader.open_content(exporter) data = reader.read_all() for key in data.keys(): data[key] = list(data[key]) assert data == self.content
def write_data(self, sheet): headers = sheet.colnames if len(headers) == 0: headers = sheet.rownames importer = DjangoModelImporter() adapter = DjangoModelImportAdapter(self.model) adapter.set_column_names(headers) adapter.set_column_name_mapping_dict(self.keywords.get(params.MAPDICT, None)) adapter.set_row_initializer(self.keywords.get(params.INITIALIZER, None)) importer.append(adapter) save_data(importer, {adapter.get_name(): sheet.array}, file_type=DB_DJANGO, **self.keywords)
def test_load_sheet_from_django_model(self): model=FakeDjangoModel() importer = DjangoModelImporter() adapter = DjangoModelImportAdapter(model) adapter.set_column_names(self.data[0]) importer.append(adapter) save_data(importer, {adapter.get_name(): self.data[1:]}, file_type=DB_DJANGO) assert model.objects.objs == self.result model._meta.update(["X", "Y", "Z"]) reader = DjangoModelReader(model) data = reader.to_array() assert list(data) == self.data
def write_data(self, sheet): headers = sheet.colnames if len(headers) == 0: headers = sheet.rownames importer = DjangoModelImporter() adapter = DjangoModelImportAdapter(self.model) adapter.set_column_names(headers) adapter.set_column_name_mapping_dict( self.keywords.get(params.MAPDICT, None)) adapter.set_row_initializer(self.keywords.get(params.INITIALIZER, None)) importer.append(adapter) save_data(importer, {adapter.get_name(): sheet.array}, file_type=DB_DJANGO)
def test_save_to_more_models(self): model1=FakeDjangoModel() model2=FakeDjangoModel() importer = DjangoModelImporter() adapter1 = DjangoModelImportAdapter(model1) adapter1.set_column_names(self.content['Sheet1'][0]) adapter2 = DjangoModelImportAdapter(model2) adapter2.set_column_names(self.content['Sheet2'][0]) importer.append(adapter1) importer.append(adapter2) to_store = { adapter1.get_name(): self.content['Sheet1'][1:], adapter2.get_name(): self.content['Sheet2'][1:] } writer = DjangoBookWriter() writer.open_content(importer) writer.write(to_store) writer.close() assert model1.objects.objs == self.result1 assert model2.objects.objs == self.result2
def test_special_case_where_only_one_model_used(self): model1=FakeDjangoModel() importer = DjangoModelImporter() adapter = DjangoModelImportAdapter(model1) adapter.set_column_names(self.content['Sheet1'][0]) importer.append(adapter) to_store = { adapter.get_name(): self.content['Sheet1'][1:], "Sheet2": self.content['Sheet2'][1:] } save_data(importer, to_store, file_type=DB_DJANGO) assert model1.objects.objs == self.result1 model1._meta.model_name = "Sheet1" model1._meta.update(["X", "Y", "Z"]) exporter = DjangoModelExporter() adapter = DjangoModelExportAdapter(model1) exporter.append(adapter) reader = DjangoBookReader() reader.open_content(exporter) data = reader.read_all() assert list(data['Sheet1']) == self.content['Sheet1']