def test_species_for_region_lookup(self): northeast = species_codes_for_regions(['NoEastXXX']) self.assertEqual(258, len(northeast)) south = species_codes_for_regions(['PiedmtCLT']) self.assertEqual(244, len(south)) combined = species_codes_for_regions(['NoEastXXX', 'PiedmtCLT']) self.assertEqual(338, len(combined)) combined_set = set(combined) self.assertEqual(len(combined), len(combined_set), "Getting the species for more than one region " "should result in a unique set of otm_codes")
def add_species_to_instance(instance): from treemap.models import ITreeRegion, Species # Create species for all regions that intersect the instance itree_regions = ITreeRegion.objects.filter( geometry__intersects=instance.bounds) eco_region_codes = itree_regions.values_list('code', flat=True) species_codes = species_codes_for_regions(eco_region_codes) # If there are no eco regions intersecting the map regions # default to using all species codes if not species_codes: species_codes = all_species_codes() # Convert the list to a set for fast lookups species_code_set = set(species_codes) # Create and save a Species for each otm_code # Saving one by one is SLOW. It takes many seconds # to do the average species list of ~250 items. # Using bulk_create bypasses auditing but keeps # speed up. # TODO: bulk create audit records for species rows instance_species_list = [] for species_dict in SPECIES: if species_dict['otm_code'] in species_code_set: species_dict['instance'] = instance instance_species_list.append(Species(**species_dict)) Species.objects.bulk_create(instance_species_list)
def test_species_for_none_region_lookup(self): self.assertIsNone(species_codes_for_regions(None))