示例#1
0
    def test_missing_unique_field(self):
        # Contains fields 'First Name', "Last Name', 'Age', 'ID'
        spreadsheet = 'bulkimport/testdata/names.xlsx'

        bi = BulkDataImportHandler()
        bi.add_mapping(Person, {
            'First Name': 'first_name',
            'Last Name': 'last_name',
            'Age': 'age'
        }, 'PersonID', 'id')

        with self.assertRaises(MissingUniqueHeaderException):
            affected_records, stats = bi.process_spreadsheet(spreadsheet)
示例#2
0
def setup_accessions_importer():
    bi = BulkDataImportHandler()
    bi.add_mapping(Accession, {
        'UQ Accession': 'uq_accession',
        'Material': 'material',
        'Source': 'source',
        'State': 'state',
        'Family': 'family',
        'SUBFAM': 'subfam',
        'TRIBE': 'tribe',
        'Genus': 'genus',
        'Species': 'species',
        'AUTHOR': 'author',
        'SSPNA': 'sspna',
        'SSPAU': 'sspau',
        'VARNA': 'varna',
        'VARAU': 'varau',
        'CULTIVAR': 'cultivar',
        'Common Name': 'common_name',
        'Biological Synonym': 'biological_synonym',
        'FAMNO': 'famno',
        'GENNO': 'genno',
        'SPNO': 'spno',
        'SSPNO': 'sspno',
        'VARNO': 'varno',
        'DETNA': 'detna',
        'DETDATE': 'detdate',
        'Collector': 'collector',
        'Collector Serial No.': 'collector_serial_no',
        'Collection Date': 'collection_date',
        'SOURCE': 'source',
        'SOURCE NUMBER': 'source_number',
        'id level flag': 'id_level_flag',
        'Country': 'country',
        'Site Name': 'site_name',
        'Lat/Long.': 'lat_long',
        'Altitude': 'altitude',
        'Notes': 'notes',
        'Related Accession': 'related_accession',
        'GRIN & Seed Atlas?': 'grin__seed_atlas',
        })

    bi.header_row = 1
    bi.first_data_row = 2

    return bi
示例#3
0
    def test_read_simple_spreadsheet(self):
        """
        Load in a simple spreadsheet
        """
        spreadsheet = 'bulkimport/testdata/names.xlsx'

        bi = BulkDataImportHandler()
        bi.add_mapping(Person, {
            'First Name': 'first_name',
            'Last Name': 'last_name',
            'Age': 'age'
        })

        affected_records, stats = bi.process_spreadsheet(spreadsheet)

        self.assertEqual(3, len(affected_records))
        self.assertEqual('Bob', affected_records[0][0].first_name)
        self.assertEqual(50, affected_records[2][0].age)
示例#4
0
    def test_read_spreadsheet_case_insensitive(self):
        """
        Test the column names to be mapped are case insensitive
        """
        spreadsheet = 'bulkimport/testdata/names.xlsx'

        bi = BulkDataImportHandler()
        bi.add_mapping(Person, {
            'First name': 'first_name',
            'Last NaMe': 'last_name',
            'Age': 'age'
        })

        affected_records, stats = bi.process_spreadsheet(spreadsheet)

        self.assertEqual(3, len(affected_records))
        self.assertEqual('Bob', affected_records[0][0].first_name)
        self.assertEqual(50, affected_records[2][0].age)
示例#5
0
    def test_unique_field(self):
        # Contains fields 'First Name', "Last Name', 'Age', 'ID'
        spreadsheet = 'bulkimport/testdata/names.xlsx'

        bi = BulkDataImportHandler()
        bi.add_mapping(
            Person, {
                'First Name': 'first_name',
                'Last Name': 'last_name',
                'Age': 'age',
                'ID': 'id'
            }, 'ID', 'id')

        affected_records, stats = bi.process_spreadsheet(spreadsheet)

        self.assertEqual(3, len(affected_records))
        self.assertEqual('Bob', affected_records[0][0].first_name)
        self.assertEqual(50, affected_records[2][0].age)
示例#6
0
    def test_process_row_multi(self):
        mapping_1 = {'one': 'one'}
        save_mock_1 = mock.Mock(return_value=None)
        model_1 = mock.Mock(MyModel)
        model_1.return_value.save = save_mock_1

        mapping_2 = {'two': 'two'}
        save_mock_2 = mock.Mock(return_value=None)
        model_2 = mock.Mock(MyModel)
        model_2.return_value.save = save_mock_2

        linking_func = mock.Mock()

        bdih = BulkDataImportHandler()
        bdih.add_mapping(model_1, mapping_1)
        bdih.add_mapping(model_2, mapping_2)
        bdih.add_linking_function(linking_func)

        headers = ['one', 'two']
        vals = ['val1', 'spot']

        affected_records, stats = bdih.process_row(headers, vals)
        result_1, result_2 = affected_records

        # make sure one class each was created
        self.assertEqual(model_1.call_count, 1)
        self.assertEqual(model_2.call_count, 1)

        # now make sure each save was called once
        self.assertEqual(save_mock_1.call_count, 1)
        self.assertEqual(save_mock_2.call_count, 1)

        # check values were saved onto each instance
        self.assertEqual('val1', result_1.one)
        self.assertEqual('spot', result_2.two)

        # check the linking function was called
        self.assertTrue(linking_func.called)
        linking_func.assert_called_with(result_1, result_2)
示例#7
0
    def test_process_row_single(self):
        mapping = {'one': 'one'}

        save_mock = mock.Mock(return_value=None)

        model = mock.Mock(MyModel)
        model.return_value.save = save_mock

        bdih = BulkDataImportHandler()
        bdih.add_mapping(model, mapping)

        headers = ['one', 'two']
        vals = ['val1', 'spot']

        affected_records, used_cols = bdih.process_row(headers, vals)
        new_record = affected_records[0]

        # make sure class was created
        self.assertEqual(model.call_count, 1)

        # now make sure save was called once
        self.assertEqual(save_mock.call_count, 1)

        self.assertEqual('val1', new_record.one)
示例#8
0
def setup_wood_importer():
    bi = BulkDataImportHandler()
    bi.add_mapping(Accession, {
        'family': 'family',
        'Genus': 'genus',
        'Species': 'species',
        'Common Name': 'common_name',
#        'Indigenous Name': 'indigenous_name',
        'Accession': 'uq_accession',
        'Specimen Collection Date': 'collection_date',
#        'Specimen Collection Location': 'specimen_collection_location',
#        'Specimen Collection Information': 'specimen_collection_information',
#        'Voucher Category': 'voucher_category',
#        'Geographic Range': 'geographic_range',
#        'Habitat': 'habitat',
#        'Plant part': 'plant_part',
        'State': 'state',
#        'Type of Plant': 'type_of_plant',
        })
    bi.add_mapping(WoodFeatures, {
        'aggregate rays': 'aggregate_rays',
        'Australia': 'australia',
        'axial canals': 'axial_canals',
        'axial parenchyma arrangment': 'axial_parenchyma_arrangment',
        'axial parenchyma bands': 'axial_parenchyma_bands',
        'axial parenchyma present': 'axial_parenchyma_present',
        'cambial variants': 'cambial_variants',
        'druses': 'druses',
        'family': 'family',
        'fibre helical thickenings': 'fibre_helical_thickenings',
        'fibre pits': 'fibre_pits',
        'fibres wall thickeness': 'fibres_wall_thickeness',
        'fusiform parenchyma cells': 'fusiform_parenchyma_cells',
        'helical thickenings': 'helical_thickenings',
        'included phloem': 'included_phloem',
        'Indigenous name': 'indigenous_name',
        'intervessels pits arrangment': 'intervessels_pits_arrangment',
        'intervessels pits size': 'intervessels_pits_size',
        'intervessels pits specific shapes': 'intervessels_pits_specific_shapes',
        'lactifers tanniferous tubes': 'lactifers_tanniferous_tubes',
        'New Caledonia': 'new_caledonia',
        'NOTES': 'notes',
        'parenchyma like fibres present': 'parenchyma_like_fibres_present',
        'perforation plates types': 'perforation_plates_types',
        'prismatic crystal': 'prismatic_crystal',
        'radial secretory canals': 'radial_secretory_canals',
        'radial tracheids for gymnosperms': 'radial_tracheids_for_gymnosperms',
        'rays': 'rays',
        'rays cellular composition': 'rays_cellular_composition',
        'rays height': 'rays_height',
        'rays sheat cells': 'rays_sheat_cells',
        'RAYS STRUCTURE': 'rays_structure',
        'rays width': 'rays_width',
        'Reference Specimens': 'reference_specimens',
        'silica': 'silica',
        'solitary vessels with angular outline': 'solitary_vessels_with_angular_outline',
        'Species': 'species',
        'spetate fibres present': 'spetate_fibres_present',
        'storied structure': 'storied_structure',
        'tile cells': 'tile_cells',
        'Turkey': 'turkey',
        'vascular-vasicentric tracheids present': 'vascularvasicentric_tracheids_present',
        'vessels': 'vessels',
        'vessels arrangment': 'vessels_arrangment',
        'vessels deposits': 'vessels_deposits',
        'vessels grouping': 'vessels_grouping',
        'vessels porosity': 'vessels_porosity',
        'vessels rays pitting': 'vessels_rays_pitting',
        'vessels tyloses': 'vessels_tyloses',
        'walls': 'walls',
        'Contributor': 'contributor',
        'DATE': 'date',
        })

    def link(accession, wood_details):
        wood_details.accession = accession
        wood_details.save()

    bi.add_linking_function(link)

    return bi