-
Notifications
You must be signed in to change notification settings - Fork 28
/
raise_h2_budget_data_to_h1.py
60 lines (52 loc) · 2.65 KB
/
raise_h2_budget_data_to_h1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
def raise_h2_budget_data_to_h1(data):
"""
Data is the complete dataset of activities
Check if data is h1, if so, check if it has related-activities
"""
for activity in data:
if 'hierarchy' in activity and activity['hierarchy'] == 1 and 'related-activity' in activity:
if type(activity['related-activity']) is dict:
activity['related-activity'] = [activity['related-activity']]
data_present, related_data = pull_related_data_to_h1(data, activity)
if data_present:
for r in related_data:
activity[r] = related_data[r]
return data
def pull_related_data_to_h1(data, activity):
"""
we want to collect the following data:
budget.period-end.quarter,
budget.period-start.quarter
budget_period_start_iso_date
budget_period_end_iso_date
budget_value
data: has all the activities in a dataset
activity: the activity for which we are pulling data
"""
related_data = False
related_budget_value = []
related_budget_period_start_quarter = []
related_budget_period_end_quarter = []
related_budget_period_start_iso_date = []
related_budget_period_end_iso_date = []
related_activity_refs = [rel['ref'] for rel in activity.get('related-activity', []) if 'ref' in rel]
for _activity in data:
if 'iati-identifier' in _activity and _activity['iati-identifier'] in related_activity_refs:
if 'budget' in _activity:
related_data = True
if type(_activity['budget']) is dict:
_activity['budget'] = [_activity['budget']]
for budget in _activity['budget']:
related_budget_value.append(budget['value'])
# use hardcoded [0] as there is always one period-start and one period-end
related_budget_period_start_iso_date.append(budget['period-start'][0]['iso-date'])
related_budget_period_end_iso_date.append(budget['period-end'][0]['iso-date'])
related_budget_period_start_quarter.extend(_activity.get('budget.period-start.quarter', []))
related_budget_period_end_quarter.extend(_activity.get('budget.period-end.quarter', []))
return related_data, {
'related_budget_value': related_budget_value,
'related_budget_period_start_quarter': related_budget_period_start_quarter,
'related_budget_period_end_quarter': related_budget_period_end_quarter,
'related_budget_period_start_iso_date': related_budget_period_start_iso_date,
'related_budget_period_end_iso_date': related_budget_period_end_iso_date,
}