Skip to content

Commit

Permalink
Fix the taxa upload bug with multiple IUCN statuses (#4101)
Browse files Browse the repository at this point in the history
  • Loading branch information
dimasciput committed Jul 24, 2024
1 parent a09e3f1 commit 6ace0ed
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 28 deletions.
41 changes: 22 additions & 19 deletions bims/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,26 @@ class BimsAppConfig(AppConfig):
name = 'bims'

def ready(self):
from easyaudit.signals.model_signals import m2m_changed
is_ready = True
def easy_audit_m2m_changed(sender, instance, action, reverse, model, pk_set, using, **kwargs):
if not pk_set:
return
if len(list(pk_set)) == 0:
return
return m2m_changed(
sender,
instance,
action,
reverse,
model,
pk_set,
using,
**kwargs
)
try:
from easyaudit.signals.model_signals import m2m_changed
is_ready = True
def easy_audit_m2m_changed(sender, instance, action, reverse, model, pk_set, using, **kwargs):
if not pk_set:
return
if len(list(pk_set)) == 0:
return
return m2m_changed(
sender,
instance,
action,
reverse,
model,
pk_set,
using,
**kwargs
)

signals.m2m_changed.disconnect(dispatch_uid='easy_audit_signals_m2m_changed')
signals.m2m_changed.connect(easy_audit_m2m_changed, dispatch_uid='easy_audit_signals_m2m_changed')
signals.m2m_changed.disconnect(dispatch_uid='easy_audit_signals_m2m_changed')
signals.m2m_changed.connect(easy_audit_m2m_changed, dispatch_uid='easy_audit_signals_m2m_changed')
except RuntimeError:
pass
26 changes: 21 additions & 5 deletions bims/scripts/taxa_upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,10 @@ def endemism(self, row):

def conservation_status(self, row, global_cons = False):
"""Processing conservation status"""
national = False
if global_cons:
cons_status = DataCSVUpload.row_value(row, CONSERVATION_STATUS)
cons_status = DataCSVUpload.row_value(
row, CONSERVATION_STATUS)
if not cons_status:
cons_status = DataCSVUpload.row_value(
row, CONSERVATION_STATUS_GLOBAL)
Expand All @@ -72,10 +74,18 @@ def conservation_status(self, row, global_cons = False):
else:
cons_status = DataCSVUpload.row_value(
row, CONSERVATION_STATUS_NATIONAL)
national = True
if cons_status:
iucn_status, _ = IUCNStatus.objects.get_or_create(
category=IUCN_CATEGORIES[cons_status.lower()]
)
try:
iucn_status, _ = IUCNStatus.objects.get_or_create(
category=IUCN_CATEGORIES[cons_status.lower()],
national=national
)
except IUCNStatus.MultipleObjectsReturned:
iucn_status = IUCNStatus.objects.filter(
category=IUCN_CATEGORIES[cons_status.lower()],
national=national
).first()
return iucn_status
else:
return None
Expand Down Expand Up @@ -313,6 +323,7 @@ def synonym_key(self, field_key):

def process_data(self, row, taxon_group: TaxonGroup):
"""Processing row of the csv files"""

taxonomic_status = DataCSVUpload.row_value(row, TAXONOMIC_STATUS)
taxon_name = DataCSVUpload.row_value(row, TAXON)
accepted_taxon = None
Expand Down Expand Up @@ -462,8 +473,13 @@ def process_data(self, row, taxon_group: TaxonGroup):

# Data from GBIF couldn't be found, so add it manually
if not taxonomy:
max_try = 10
current_try = 0
parent_name = parent_rank(rank)
while not DataCSVUpload.row_value(row, parent_name) and parent_name != KINGDOM:
while (
not DataCSVUpload.row_value(row, parent_name) and parent_name != KINGDOM and current_try < max_try
):
current_try += 1
parent_name = parent_rank(parent_name)

parent = self.get_parent(row, parent_name)
Expand Down
22 changes: 18 additions & 4 deletions bims/tests/test_taxa_upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
UserF,
TaxonomyF,
Taxonomy,
VernacularName
VernacularName,
IUCNStatusF
)

test_data_directory = os.path.join(
Expand All @@ -30,6 +31,21 @@ def setUp(self):
)
self.taxonomy = TaxonomyF.create()

IUCNStatusF.create(
category='NE',
national=True
)

IUCNStatusF.create(
category='NE',
national=False
)

IUCNStatusF.create(
category='NE',
national=False
)

with open(os.path.join(
test_data_directory, 'taxa_upload_family.csv'
), 'rb') as file:
Expand Down Expand Up @@ -93,16 +109,14 @@ def test_taxa_upload(self, mock_fetch_all_species_from_gbif, mock_finish):
canonical_name='Ecnomidae'
).biographic_distributions.filter(
name='ANT',
doubtful=False
).exists()
)

self.assertTrue(
Taxonomy.objects.get(
canonical_name='Ecnomidae'
).biographic_distributions.filter(
name='AT',
doubtful=True
name='AT (?)',
).exists()
)

Expand Down

0 comments on commit 6ace0ed

Please sign in to comment.