Skip to content

Commit 62c81f4

Browse files
author
Dmytro Trotsko
committed
FIxed import
1 parent 9fdfa01 commit 62c81f4

File tree

2 files changed

+47
-16
lines changed

2 files changed

+47
-16
lines changed

src/indicators/resources.py

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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/\nDisease Area"]:
4950
pathogens = row["Pathogen/\nDisease 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/\nDisease 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

6278
def 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/\nDisease 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"]:

src/indicatorsets/resources.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ def process_geographic_scope(row) -> None:
2222

2323

2424
def process_severity_pyramid_rungs(row) -> None:
25+
severity_pyramid_rung_ids = []
2526
if row["Surveillance Categories"]:
2627
severity_pyramid_rungs = row["Surveillance Categories"].split(",")
2728
for spr in severity_pyramid_rungs:
@@ -31,9 +32,12 @@ def process_severity_pyramid_rungs(row) -> None:
3132
used_in="indicatorsets",
3233
defaults={"display_name": spr_name.capitalize()},
3334
)
35+
severity_pyramid_rung_ids.append(severity_pyramid_rung_obj.id)
36+
row["Surveillance Categories"] = ",".join(map(str, severity_pyramid_rung_ids))
3437

3538

3639
def process_pathogens(row) -> None:
40+
pathogen_ids = []
3741
if row["Pathogen(s)/Syndrome(s)"]:
3842
pathogens = row["Pathogen(s)/Syndrome(s)"].split(",")
3943
for pathogen in pathogens:
@@ -46,10 +50,13 @@ def process_pathogens(row) -> None:
4650
"used_in": "indicatorsets",
4751
},
4852
)
53+
pathogen_ids.append(pathogen_obj.id)
54+
row["Pathogen(s)/Syndrome(s)"] = ",".join(map(str, pathogen_ids))
4955

5056

5157
def process_available_geographies(row) -> None:
5258
available_geographies = []
59+
available_geographies_ids = []
5360
try:
5461
if row["Geographic Granularity - Delphi"]:
5562
available_geographies = row["Geographic Granularity - Delphi"].split(",")
@@ -71,6 +78,9 @@ def process_available_geographies(row) -> None:
7178
used_in="indicatorsets",
7279
defaults=default_params,
7380
)
81+
available_geographies_ids.append(geography_obj.id)
82+
row["Geographic Levels"] = ",".join(map(str, available_geographies_ids))
83+
row["Geographic Granularity - Delphi"] = row["Geographic Levels"]
7484

7585

7686
def fix_boolean_fields(row) -> None:
@@ -120,7 +130,7 @@ class IndicatorSetResource(resources.ModelResource):
120130
pathogens = Field(
121131
attribute="pathogens",
122132
column_name="Pathogen(s)/Syndrome(s)",
123-
widget=ManyToManyWidget(Pathogen, field="name", separator=","),
133+
widget=ManyToManyWidget(Pathogen),
124134
)
125135
data_type = Field(attribute="data_type", column_name="Type(s) of Data*")
126136
geographic_scope = Field(
@@ -131,7 +141,7 @@ class IndicatorSetResource(resources.ModelResource):
131141
geographic_levels = Field(
132142
attribute="geographic_levels",
133143
column_name="Geographic Granularity - Delphi",
134-
widget=ManyToManyWidget(Geography, field="name", separator=","),
144+
widget=ManyToManyWidget(Geography),
135145
)
136146
preprocessing_description = Field(
137147
attribute="preprocessing_description",
@@ -172,7 +182,7 @@ class IndicatorSetResource(resources.ModelResource):
172182
severity_pyramid_rungs = Field(
173183
attribute="severity_pyramid_rungs",
174184
column_name="Surveillance Categories",
175-
widget=ManyToManyWidget(SeverityPyramidRung, field="name", separator=","),
185+
widget=ManyToManyWidget(SeverityPyramidRung),
176186
)
177187

178188
class Meta:
@@ -260,7 +270,7 @@ class NonDelphiIndicatorSetResource(resources.ModelResource):
260270
pathogens = Field(
261271
attribute="pathogens",
262272
column_name="Pathogen(s)/Syndrome(s)",
263-
widget=ManyToManyWidget(Pathogen, field="name", separator=","),
273+
widget=ManyToManyWidget(Pathogen),
264274
)
265275
data_type = Field(attribute="data_type", column_name="Type(s) of Data*")
266276
geographic_scope = Field(
@@ -271,7 +281,7 @@ class NonDelphiIndicatorSetResource(resources.ModelResource):
271281
geographic_levels = Field(
272282
attribute="geographic_levels",
273283
column_name="Geographic Levels",
274-
widget=ManyToManyWidget(Geography, field="name", separator=","),
284+
widget=ManyToManyWidget(Geography),
275285
)
276286
preprocessing_description = Field(
277287
attribute="preprocessing_description",
@@ -312,7 +322,7 @@ class NonDelphiIndicatorSetResource(resources.ModelResource):
312322
severity_pyramid_rungs = Field(
313323
attribute="severity_pyramid_rungs",
314324
column_name="Surveillance Categories",
315-
widget=ManyToManyWidget(SeverityPyramidRung, field="name", separator=","),
325+
widget=ManyToManyWidget(SeverityPyramidRung),
316326
)
317327

318328
class Meta:

0 commit comments

Comments
 (0)