|
10 | 10 | logger = logging.getLogger(__name__) |
11 | 11 |
|
12 | 12 |
|
13 | | -FDRS_INDICATORS_FIELD_MAP = ( |
| 13 | +FDRS_INDICATORS_FIELD_MAP = { |
14 | 14 | # INFORM API Indicator, Databank Field |
15 | 15 | # Country Key Indicators |
16 | | - ("Population", CO.population), |
17 | | - ("UrbPop", CO.urban_population), |
18 | | - ("GDP", CO.gdp), |
19 | | - ("GNIPC", CO.gnipc), |
20 | | - ("Poverty", CO.poverty), |
21 | | - ("LifeExp", CO.life_expectancy), |
22 | | - ("Literacy", CO.literacy), |
| 16 | + "Population": (CO.fdrs_population, CO.fdrs_population_data_year), |
| 17 | + "UrbPop": (CO.fdrs_urban_population, CO.fdrs_urban_population_data_year), |
| 18 | + "GDP": (CO.fdrs_gdp, CO.fdrs_gdp_data_year), |
| 19 | + "GNIPC": (CO.fdrs_gnipc, CO.fdrs_gnipc_data_year), |
| 20 | + "Poverty": (CO.fdrs_poverty, CO.fdrs_poverty_data_year), |
| 21 | + "LifeExp": (CO.fdrs_life_expectancy, CO.fdrs_life_expectancy_data_year), |
| 22 | + "Literacy": (CO.fdrs_literacy, CO.fdrs_literacy_data_year), |
23 | 23 | # National Society Indicators (Using Script: FDRS API) |
24 | | - ("KPI_IncomeLC_CHF", CO.income), |
25 | | - ("KPI_expenditureLC_CHF", CO.expenditures), |
26 | | - ("KPI_PeopleVol_Tot", CO.volunteers), |
27 | | - ("KPI_TrainFA_Tot", CO.trained_in_first_aid), |
28 | | - ("KPI_noBranches", CO.branches), |
| 24 | + "KPI_IncomeLC_CHF": (CO.fdrs_income, CO.fdrs_income_data_year), |
| 25 | + "KPI_expenditureLC_CHF": (CO.fdrs_expenditures, CO.fdrs_expenditures_data_year), |
| 26 | + "KPI_TrainFA_Tot": (CO.fdrs_trained_in_first_aid, CO.fdrs_trained_in_first_aid_data_year), |
| 27 | + "KPI_noBranches": (CO.fdrs_branches, CO.fdrs_branches_data_year), |
| 28 | +} |
| 29 | + |
| 30 | +FDRS_VOLUNTEERS_DISAGGREGATION_INDICATORS_FIELD_MAP = ( |
29 | 31 | # volunteers |
30 | | - ("KPI_PeopleVol_M_age_13_17", CO.male_volunteer_age_13_17), |
31 | | - ("KPI_PeopleVol_M_age_18_29", CO.male_volunteer_age_18_29), |
32 | | - ("KPI_PeopleVol_M_age_18_49", CO.male_volunteer_age_18_49), |
33 | | - ("KPI_PeopleVol_M_age_30_39", CO.male_volunteer_age_30_39), |
34 | | - ("KPI_PeopleVol_M_age_40_49", CO.male_volunteer_age_40_49), |
35 | | - ("KPI_PeopleVol_M_age_50_59", CO.male_volunteer_age_50_59), |
36 | | - ("KPI_PeopleVol_M_age_6_12", CO.male_volunteer_age_6_12), |
37 | | - ("KPI_PeopleVol_M_age_60_69", CO.male_volunteer_age_60_69), |
38 | | - ("KPI_PeopleVol_M_age_70_79", CO.male_volunteer_age_70_79), |
39 | | - ("KPI_PeopleVol_M_age_80", CO.male_volunteer_age_80), |
40 | | - ("KPI_PeopleVol_M_age_Other", CO.male_volunteer_age_other), |
41 | | - ("KPI_PeopleVol_Tot_M", CO.male_volunteer_total), |
42 | | - ("KPI_PeopleVol_F_age_13_17", CO.female_volunteer_age_13_17), |
43 | | - ("KPI_PeopleVol_F_age_18_29", CO.female_volunteer_age_18_29), |
44 | | - ("KPI_PeopleVol_F_age_18_49", CO.female_volunteer_age_18_49), |
45 | | - ("KPI_PeopleVol_F_age_30_39", CO.female_volunteer_age_30_39), |
46 | | - ("KPI_PeopleVol_F_age_40_49", CO.female_volunteer_age_40_49), |
47 | | - ("KPI_PeopleVol_F_age_50_59", CO.female_volunteer_age_50_59), |
48 | | - ("KPI_PeopleVol_F_age_6_12", CO.female_volunteer_age_6_12), |
49 | | - ("KPI_PeopleVol_F_age_60_69", CO.female_volunteer_age_60_69), |
50 | | - ("KPI_PeopleVol_F_age_70_79", CO.female_volunteer_age_70_79), |
51 | | - ("KPI_PeopleVol_F_age_80", CO.female_volunteer_age_80), |
52 | | - ("KPI_PeopleVol_F_age_Other", CO.female_volunteer_age_other), |
53 | | - ("KPI_PeopleVol_Tot_F", CO.female_volunteer_total), |
54 | | - ("KPI_PeopleVol_Tot", CO.volunteer_total), |
55 | | - ("KPI_PeopleVol_Tot_age_6_12", CO.volunteer_age_6_12), |
56 | | - ("KPI_PeopleVol_Tot_age_13_17", CO.volunteer_age_13_17), |
57 | | - ("KPI_PeopleVol_Tot_age_18_29", CO.volunteer_age_18_29), |
| 32 | + ("KPI_PeopleVol_M_age_13_17", CO.fdrs_male_volunteer_age_13_17), |
| 33 | + ("KPI_PeopleVol_M_age_18_29", CO.fdrs_male_volunteer_age_18_29), |
| 34 | + ("KPI_PeopleVol_M_age_18_49", CO.fdrs_male_volunteer_age_18_49), |
| 35 | + ("KPI_PeopleVol_M_age_30_39", CO.fdrs_male_volunteer_age_30_39), |
| 36 | + ("KPI_PeopleVol_M_age_40_49", CO.fdrs_male_volunteer_age_40_49), |
| 37 | + ("KPI_PeopleVol_M_age_50_59", CO.fdrs_male_volunteer_age_50_59), |
| 38 | + ("KPI_PeopleVol_M_age_6_12", CO.fdrs_male_volunteer_age_6_12), |
| 39 | + ("KPI_PeopleVol_M_age_60_69", CO.fdrs_male_volunteer_age_60_69), |
| 40 | + ("KPI_PeopleVol_M_age_70_79", CO.fdrs_male_volunteer_age_70_79), |
| 41 | + ("KPI_PeopleVol_M_age_80", CO.fdrs_male_volunteer_age_80), |
| 42 | + ("KPI_PeopleVol_M_age_Other", CO.fdrs_male_volunteer_age_other), |
| 43 | + ("KPI_PeopleVol_Tot_M", CO.fdrs_male_volunteer_total), |
| 44 | + ("KPI_PeopleVol_F_age_13_17", CO.fdrs_female_volunteer_age_13_17), |
| 45 | + ("KPI_PeopleVol_F_age_18_29", CO.fdrs_female_volunteer_age_18_29), |
| 46 | + ("KPI_PeopleVol_F_age_18_49", CO.fdrs_female_volunteer_age_18_49), |
| 47 | + ("KPI_PeopleVol_F_age_30_39", CO.fdrs_female_volunteer_age_30_39), |
| 48 | + ("KPI_PeopleVol_F_age_40_49", CO.fdrs_female_volunteer_age_40_49), |
| 49 | + ("KPI_PeopleVol_F_age_50_59", CO.fdrs_female_volunteer_age_50_59), |
| 50 | + ("KPI_PeopleVol_F_age_6_12", CO.fdrs_female_volunteer_age_6_12), |
| 51 | + ("KPI_PeopleVol_F_age_60_69", CO.fdrs_female_volunteer_age_60_69), |
| 52 | + ("KPI_PeopleVol_F_age_70_79", CO.fdrs_female_volunteer_age_70_79), |
| 53 | + ("KPI_PeopleVol_F_age_80", CO.fdrs_female_volunteer_age_80), |
| 54 | + ("KPI_PeopleVol_F_age_Other", CO.fdrs_female_volunteer_age_other), |
| 55 | + ("KPI_PeopleVol_Tot_F", CO.fdrs_female_volunteer_total), |
| 56 | + ("KPI_PeopleVol_Tot", CO.fdrs_volunteer_total), |
| 57 | + ("KPI_PeopleVol_Tot_age_6_12", CO.fdrs_volunteer_age_6_12), |
| 58 | + ("KPI_PeopleVol_Tot_age_13_17", CO.fdrs_volunteer_age_13_17), |
| 59 | + ("KPI_PeopleVol_Tot_age_18_29", CO.fdrs_volunteer_age_18_29), |
| 60 | +) |
| 61 | + |
| 62 | +FDRS_STAFF_DISAGGREGATION_INDICATORS_FIELD_MAP = ( |
58 | 63 | # Staff |
59 | | - ("KPI_PStaff_M_age_18_29", CO.male_staff_age_18_29), |
60 | | - ("KPI_PStaff_M_age_18_49", CO.male_staff_age_18_49), |
61 | | - ("KPI_PStaff_M_age_30_39", CO.male_staff_age_30_39), |
62 | | - ("KPI_PStaff_M_age_40_49", CO.male_staff_age_40_49), |
63 | | - ("KPI_PStaff_M_age_50_59", CO.male_staff_age_50_59), |
64 | | - ("KPI_PStaff_M_age_60_69", CO.male_staff_age_60_69), |
65 | | - ("KPI_PStaff_M_age_70_79", CO.male_staff_age_70_79), |
66 | | - ("KPI_PStaff_M_age_80", CO.male_staff_age_80), |
67 | | - ("KPI_PStaff_M_age_Other", CO.male_staff_age_other), |
68 | | - ("KPI_PStaff_Tot_M", CO.male_staff_total), |
69 | | - ("KPI_PStaff_F_age_18_29", CO.female_staff_age_18_29), |
70 | | - ("KPI_PStaff_F_age_18_49", CO.female_staff_age_18_49), |
71 | | - ("KPI_PStaff_F_age_30_39", CO.female_staff_age_30_39), |
72 | | - ("KPI_PStaff_F_age_40_49", CO.female_staff_age_40_49), |
73 | | - ("KPI_PStaff_F_age_50_59", CO.female_staff_age_50_59), |
74 | | - ("KPI_PStaff_F_age_60_69", CO.female_staff_age_60_69), |
75 | | - ("KPI_PStaff_F_age_70_79", CO.female_staff_age_70_79), |
76 | | - ("KPI_PStaff_F_age_80", CO.female_staff_age_80), |
77 | | - ("KPI_PStaff_F_age_Other", CO.female_staff_age_other), |
78 | | - ("KPI_PStaff_Tot_F", CO.female_staff_total), |
79 | | - ("KPI_PStaff_Tot", CO.staff_total), |
80 | | - ("KPI_PStaff_Tot_age_18_29", CO.staff_age_18_29), |
| 64 | + ("KPI_PStaff_M_age_18_29", CO.fdrs_male_staff_age_18_29), |
| 65 | + ("KPI_PStaff_M_age_18_49", CO.fdrs_male_staff_age_18_49), |
| 66 | + ("KPI_PStaff_M_age_30_39", CO.fdrs_male_staff_age_30_39), |
| 67 | + ("KPI_PStaff_M_age_40_49", CO.fdrs_male_staff_age_40_49), |
| 68 | + ("KPI_PStaff_M_age_50_59", CO.fdrs_male_staff_age_50_59), |
| 69 | + ("KPI_PStaff_M_age_60_69", CO.fdrs_male_staff_age_60_69), |
| 70 | + ("KPI_PStaff_M_age_70_79", CO.fdrs_male_staff_age_70_79), |
| 71 | + ("KPI_PStaff_M_age_80", CO.fdrs_male_staff_age_80), |
| 72 | + ("KPI_PStaff_M_age_Other", CO.fdrs_male_staff_age_other), |
| 73 | + ("KPI_PStaff_Tot_M", CO.fdrs_male_staff_total), |
| 74 | + ("KPI_PStaff_F_age_18_29", CO.fdrs_female_staff_age_18_29), |
| 75 | + ("KPI_PStaff_F_age_18_49", CO.fdrs_female_staff_age_18_49), |
| 76 | + ("KPI_PStaff_F_age_30_39", CO.fdrs_female_staff_age_30_39), |
| 77 | + ("KPI_PStaff_F_age_40_49", CO.fdrs_female_staff_age_40_49), |
| 78 | + ("KPI_PStaff_F_age_50_59", CO.fdrs_female_staff_age_50_59), |
| 79 | + ("KPI_PStaff_F_age_60_69", CO.fdrs_female_staff_age_60_69), |
| 80 | + ("KPI_PStaff_F_age_70_79", CO.fdrs_female_staff_age_70_79), |
| 81 | + ("KPI_PStaff_F_age_80", CO.fdrs_female_staff_age_80), |
| 82 | + ("KPI_PStaff_F_age_Other", CO.fdrs_female_staff_age_other), |
| 83 | + ("KPI_PStaff_Tot_F", CO.fdrs_female_staff_total), |
| 84 | + ("KPI_PStaff_Tot", CO.fdrs_staff_total), |
| 85 | + ("KPI_PStaff_Tot_age_18_29", CO.fdrs_staff_age_18_29), |
81 | 86 | ) |
82 | | -FDRS_INDICATORS = [indicator for indicator, _ in FDRS_INDICATORS_FIELD_MAP] |
| 87 | +FDRS_INDICATORS = ( |
| 88 | + [indicator for indicator in FDRS_INDICATORS_FIELD_MAP.keys()] |
| 89 | + + [indicator for indicator, _ in FDRS_VOLUNTEERS_DISAGGREGATION_INDICATORS_FIELD_MAP] |
| 90 | + + [indicator for indicator, _ in FDRS_STAFF_DISAGGREGATION_INDICATORS_FIELD_MAP] |
| 91 | +) |
| 92 | + |
83 | 93 |
|
84 | 94 | # To fetch NS ID |
85 | 95 | FDRS_NS_API_ENDPOINT = f"https://data-api.ifrc.org/api/entities/ns?apiKey={settings.FDRS_APIKEY}" |
@@ -124,16 +134,29 @@ def load(country, overview, fdrs_data): |
124 | 134 | if country.iso is None or fdrs_data is None: |
125 | 135 | return |
126 | 136 |
|
127 | | - fdrs_data_fetched_year = max( |
128 | | - int(item["year"]) for item in fdrs_data.values() if item is not None and item.get("year") is not None |
129 | | - ) |
| 137 | + for indicator, (field, year_field) in FDRS_INDICATORS_FIELD_MAP.items(): |
| 138 | + data = fdrs_data.get(f"{country.iso.upper()}-{indicator}") |
| 139 | + if data: |
| 140 | + setattr(overview, field.field.name, data.get("value")) |
| 141 | + setattr(overview, year_field.field.name, data.get("year")) |
| 142 | + |
| 143 | + def set_disaggregation_data(disaggregation_map, data_year_field): |
| 144 | + """ |
| 145 | + Set disaggregation data for volunteers or staff for the latest year |
| 146 | + """ |
| 147 | + latest_year = None |
| 148 | + for indicator, field in disaggregation_map: |
| 149 | + data = fdrs_data.get(f"{country.iso.upper()}-{indicator}") |
| 150 | + if data: |
| 151 | + year = data.get("year") |
| 152 | + if latest_year is None or (year and int(year) > latest_year): |
| 153 | + latest_year = int(year) |
| 154 | + setattr(overview, field.field.name, data.get("value")) |
| 155 | + setattr(overview, data_year_field.field.name, latest_year) |
| 156 | + |
| 157 | + # Volunteer disaggregation |
| 158 | + set_disaggregation_data(FDRS_VOLUNTEERS_DISAGGREGATION_INDICATORS_FIELD_MAP, CO.fdrs_volunteer_data_year) |
| 159 | + # Staff disaggregation |
| 160 | + set_disaggregation_data(FDRS_STAFF_DISAGGREGATION_INDICATORS_FIELD_MAP, CO.fdrs_staff_data_year) |
130 | 161 |
|
131 | | - # NOTE: We are getting the only latest year specific data |
132 | | - for fdrs_indicator, field in FDRS_INDICATORS_FIELD_MAP: |
133 | | - data = fdrs_data.get(f"{country.iso.upper()}-{fdrs_indicator}") |
134 | | - value = None |
135 | | - if data and int(data.get("year")) == fdrs_data_fetched_year: |
136 | | - value = data.get("value") |
137 | | - setattr(overview, field.field.name, value) |
138 | | - overview.fdrs_data_fetched_year = str(fdrs_data_fetched_year) |
139 | 162 | overview.save() |
0 commit comments