@@ -44,7 +44,8 @@ def fix_boolean_fields(row) -> None:
4444 return row
4545
4646
47- def process_pathogen (row ) -> None :
47+ def process_pathogens (row ) -> None :
48+ pathogen_ids = []
4849 if row ["Pathogen/\n Disease Area" ]:
4950 pathogens = row ["Pathogen/\n Disease Area" ].split ("," )
5051 for pathogen in pathogens :
@@ -57,6 +58,21 @@ def process_pathogen(row) -> None:
5758 "used_in" : "indicators" ,
5859 },
5960 )
61+ pathogen_ids .append (pathogen_obj .id )
62+ row ["Pathogen/\n Disease Area" ] = "," .join (str (el ) for el in pathogen_ids )
63+
64+
65+ def process_indicator_set (row , source_type = "covidcast" ) -> None :
66+ if row ["Indicator Set" ]:
67+ indicator_set_name = row ["Indicator Set" ].strip ()
68+ indicator_set_obj , _ = IndicatorSet .objects .get_or_create (
69+ name = indicator_set_name ,
70+ defaults = {
71+ "display_name" : indicator_set_name ,
72+ "source_type" : source_type ,
73+ },
74+ )
75+ row ["Indicator Set" ] = indicator_set_obj .id
6076
6177
6278def process_indicator_type (row ) -> None :
@@ -246,7 +262,7 @@ class IndicatorBaseResource(ModelResource):
246262 base = Field (
247263 attribute = "base" ,
248264 column_name = "base" ,
249- widget = PermissiveForeignKeyWidget (Indicator , field = "id" ),
265+ widget = PermissiveForeignKeyWidget (Indicator ),
250266 )
251267 source = Field (
252268 attribute = "source" ,
@@ -281,7 +297,7 @@ class IndicatorResource(ModelResource):
281297 pathogens = Field (
282298 attribute = "pathogens" ,
283299 column_name = "Pathogen/\n Disease Area" ,
284- widget = ManyToManyWidget (Pathogen , field = "name" , separator = "," ),
300+ widget = ManyToManyWidget (Pathogen ),
285301 )
286302 indicator_type = Field (
287303 attribute = "indicator_type" ,
@@ -364,7 +380,7 @@ class IndicatorResource(ModelResource):
364380 indicator_set = Field (
365381 attribute = "indicator_set" ,
366382 column_name = "Indicator Set" ,
367- widget = PermissiveForeignKeyWidget (IndicatorSet , field = "name" ),
383+ widget = PermissiveForeignKeyWidget (IndicatorSet ),
368384 )
369385
370386 class Meta :
@@ -421,14 +437,16 @@ def get_instance(self, instance_loader, row):
421437 # Try to match by (name, source)
422438 if name and source :
423439 try :
424- return self ._meta .model .objects .get (name = name , source__name = source )
440+ return self ._meta .model .objects .get (name = name , source__id = source )
425441 except self ._meta .model .DoesNotExist :
426442 pass
427443
428444 # Try to match by (name, indicator_set)
429445 if name and indicator_set :
430446 try :
431- return self ._meta .model .objects .get (name = name , indicator_set__name = indicator_set )
447+ return self ._meta .model .objects .get (
448+ name = name , indicator_set__id = indicator_set
449+ )
432450 except self ._meta .model .DoesNotExist :
433451 pass
434452
@@ -437,14 +455,15 @@ def get_instance(self, instance_loader, row):
437455 def before_import_row (self , row , ** kwargs ) -> None :
438456 """Post-processes each row after importing."""
439457 fix_boolean_fields (row )
440- process_pathogen (row )
458+ process_pathogens (row )
441459 process_indicator_type (row )
442460 process_format_type (row )
443461 process_category (row )
444462 process_geographic_scope (row )
445463 process_source (row )
446464 process_severity_pyramid_rungs (row )
447465 process_available_geographies (row )
466+ process_indicator_set (row )
448467
449468 def after_import_row (self , row , row_result , ** kwargs ):
450469 process_indicator_geography (row )
@@ -558,7 +577,7 @@ class OtherEndpointIndicatorResource(ModelResource):
558577 indicator_set = Field (
559578 attribute = "indicator_set" ,
560579 column_name = "Indicator Set" ,
561- widget = PermissiveForeignKeyWidget (IndicatorSet , field = "name" ),
580+ widget = PermissiveForeignKeyWidget (IndicatorSet ),
562581 )
563582
564583 class Meta :
@@ -611,13 +630,14 @@ def before_import_row(self, row, **kwargs) -> None:
611630 """Post-processes each row after importing."""
612631 fix_boolean_fields (row )
613632 process_source (row )
614- process_pathogen (row )
633+ process_pathogens (row )
615634 process_indicator_type (row )
616635 process_format_type (row )
617636 process_category (row )
618637 process_geographic_scope (row )
619638 process_severity_pyramid_rungs (row )
620639 process_available_geographies (row )
640+ process_indicator_set (row , source_type = "other_endpoint" )
621641
622642 def skip_row (self , instance , original , row , import_validation_errors = None ):
623643 if not row ["Include in indicator app" ]:
@@ -640,7 +660,7 @@ class NonDelphiIndicatorResource(resources.ModelResource):
640660 indicator_set = Field (
641661 attribute = "indicator_set" ,
642662 column_name = "Indicator Set" ,
643- widget = PermissiveForeignKeyWidget (NonDelphiIndicatorSet , field = "name" ),
663+ widget = PermissiveForeignKeyWidget (NonDelphiIndicatorSet ),
644664 )
645665
646666 class Meta :
@@ -658,6 +678,7 @@ class Meta:
658678 def before_import_row (self , row , ** kwargs ) -> None :
659679 """Post-processes each row after importing."""
660680 fix_boolean_fields (row )
681+ process_indicator_set (row , source_type = "non_delphi" )
661682
662683 def skip_row (self , instance , original , row , import_validation_errors = None ):
663684 if not row ["Include in indicator app" ]:
0 commit comments