1313from reportlab .platypus import Paragraph , Spacer , SimpleDocTemplate
1414from reportlab .pdfbase import pdfmetrics
1515from reportlab .pdfbase .ttfonts import TTFont
16+ from reportlab .pdfbase .pdfmetrics import registerFontFamily
1617
1718from bims .scripts .species_keys import (
1819 ACCEPTED_TAXON , TAXON_RANK ,
1920 COMMON_NAME , CLASS , SUBSPECIES ,
20- CITES_LISTING , FADA_ID , ON_GBIF , GBIF_LINK
21+ CITES_LISTING , FADA_ID , ON_GBIF , GBIF_LINK ,
22+ SPECIES_GROUP , SUBGENUS , SUBTRIBE , SUBFAMILY ,
23+ SUBORDER , SUBCLASS , SUBPHYLUM , SPECIES , GENUS ,
24+ TRIBE , FAMILY , ORDER , PHYLUM , KINGDOM , AUTHORS
2125)
2226from bims .utils .domain import get_current_domain
2327
@@ -41,22 +45,14 @@ def process_download_csv_taxa_list(request, csv_file_path, filename, user_id, do
4145 from bims .models .taxon_group import TaxonGroup
4246 from bims .models import TaxonGroupCitation
4347 from bims .templatetags import is_fada_site
48+ from bims .fada .taxa_list import (
49+ FADA_ADDITIONAL_KEYS ,
50+ reorder_headers_for_fada ,
51+ )
4452
4553 is_fada = is_fada_site ()
4654 sanparks_project = is_sanparks_project ()
4755
48- # FADA-only additional_data keys (column names)
49- FADA_ADDITIONAL_KEYS = [
50- 'Taxonomic Comments' ,
51- 'Taxonomic References' ,
52- 'Biogeographic Comments' ,
53- 'Biogeographic References' ,
54- 'Environmental Comments' ,
55- 'Environmental References' ,
56- 'Conservation Comments' ,
57- 'Conservation References' ,
58- ]
59-
6056 def _from_additional_data (instance , k ):
6157 data = getattr (instance , 'additional_data' , None )
6258 if not data :
@@ -120,25 +116,45 @@ def __init__(self, get_data, user=None):
120116 additional_attributes_titles = set ()
121117
122118 def update_headers (_headers ):
119+ header_map = {
120+ 'class_name' : CLASS ,
121+ 'taxon_rank' : TAXON_RANK ,
122+ 'common_name' : COMMON_NAME ,
123+ 'accepted_taxon' : ACCEPTED_TAXON ,
124+ 'fada_id' : FADA_ID ,
125+ 'species_group' : SPECIES_GROUP ,
126+ 'subgenus' : SUBGENUS ,
127+ 'subtribe' : SUBTRIBE ,
128+ 'subfamily' : SUBFAMILY ,
129+ 'suborder' : SUBORDER ,
130+ 'subclass' : SUBCLASS ,
131+ 'subphylum' : SUBPHYLUM ,
132+ 'subspecies' : SUBSPECIES ,
133+ 'species' : SPECIES ,
134+ 'genus' : GENUS ,
135+ 'tribe' : TRIBE ,
136+ 'family' : FAMILY ,
137+ 'order' : ORDER ,
138+ 'phylum' : PHYLUM ,
139+ 'kingdom' : KINGDOM ,
140+ 'cites_listing' : CITES_LISTING ,
141+ 'author' : AUTHORS ,
142+ 'taxonomic_status' : 'Taxonomic Status' ,
143+ }
144+
123145 _updated_headers = []
124146 for header in _headers :
125147 if header in FADA_ADDITIONAL_KEYS :
126148 _updated_headers .append (header )
127149 continue
128150 original = header
129- if header == 'class_name' :
130- header = CLASS
131- elif header == 'taxon_rank' :
132- header = TAXON_RANK
133- elif header == 'common_name' :
134- header = COMMON_NAME
135- elif header == 'accepted_taxon' :
136- header = ACCEPTED_TAXON
137- elif header == 'fada_id' :
138- header = FADA_ID
151+
152+ if header .lower () in header_map :
153+ header = header_map [header .lower ()]
139154 _updated_headers .append (header )
140155 continue
141- elif header .lower ().strip () in ['on_gbif' , 'on gbif' ]:
156+
157+ if header .lower ().strip () in ['on_gbif' , 'on gbif' ]:
142158 header = ON_GBIF
143159 _updated_headers .append (header )
144160 continue
@@ -159,10 +175,6 @@ def update_headers(_headers):
159175 and original not in additional_attributes_titles
160176 ):
161177 header = header .replace ('_' , ' ' ).capitalize ()
162- if header == 'Subspecies' :
163- header = SUBSPECIES
164- if header .lower ().strip () == 'cites_listing' :
165- header = CITES_LISTING
166178
167179 _updated_headers .append (header )
168180 return _updated_headers
@@ -189,6 +201,7 @@ def update_headers(_headers):
189201 for k in FADA_ADDITIONAL_KEYS :
190202 if k not in raw_headers :
191203 raw_headers .append (k )
204+ raw_headers = reorder_headers_for_fada (raw_headers )
192205
193206 updated_headers = update_headers (raw_headers )
194207
@@ -296,8 +309,6 @@ def get_checklist_paragraphs(taxon_group, taxonomies):
296309 pdfmetrics .registerFont (TTFont ('Garamond-Italic' , os .path .join (font_dir , 'EBGaramond-Italic.ttf' )))
297310 pdfmetrics .registerFont (TTFont ('Garamond-BoldItalic' , os .path .join (font_dir , 'EBGaramond-BoldItalic.ttf' )))
298311
299- # Register font family so <i> and <b> tags work in Paragraphs
300- from reportlab .pdfbase .pdfmetrics import registerFontFamily
301312 registerFontFamily (
302313 'Garamond' ,
303314 normal = 'Garamond' ,
@@ -401,15 +412,15 @@ def get_checklist_paragraphs(taxon_group, taxonomies):
401412 genus_line = g_obj .canonical_name
402413 genus_author = ''
403414 if g_obj .author and g_obj .author not in genus_line :
404- genus_author += f", { g_obj .author } "
415+ genus_author += f" { g_obj .author } "
405416
406417 paragraphs .append (Paragraph (f"<i>{ genus_line } </i>{ genus_author } " , genus_style ))
407418 paragraphs .append (Spacer (1 , 10 ))
408419
409420 for s_obj in info ['species' ]:
410421 sp_line = f'<i>{ s_obj .canonical_name } </i>'
411422 if s_obj .author :
412- sp_line += f", { s_obj .author } "
423+ sp_line += f" { s_obj .author } "
413424 if s_obj .origin :
414425 sp_line += f" : { s_obj .origin .upper ()} "
415426 if "type species" in (s_obj .additional_data or {}):
0 commit comments