Skip to content

Commit

Permalink
Merge 636de13 into af157bb
Browse files Browse the repository at this point in the history
  • Loading branch information
andylolz committed Jun 11, 2018
2 parents af157bb + 636de13 commit 19c9643
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 2 deletions.
6 changes: 4 additions & 2 deletions stats/dashboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -1215,6 +1215,8 @@ def humanitarian(self):
is_not_humanitarian_by_attrib_transaction = 1 if not is_humanitarian_by_attrib_transaction and set(self.element.xpath('transaction/@humanitarian')).intersection(['0', 'false']) else 0
is_humanitarian_by_attrib = (self._version() in ['2.02', '2.03']) and (is_humanitarian_by_attrib_activity or (is_humanitarian_by_attrib_transaction and not is_not_humanitarian_by_attrib_activity))

is_humanitarian_by_scope = (self._version() in ['2.02', '2.03']) and (self.element.xpath('humanitarian-scope') != [])

# logic around DAC sector codes deemed to be humanitarian
is_humanitarian_by_sector_5_digit_activity = 1 if set(self.element.xpath('sector[@vocabulary="{0}" or not(@vocabulary)]/@code'.format(self._dac_5_code()))).intersection(humanitarian_sectors_dac_5_digit) else 0
is_humanitarian_by_sector_5_digit_transaction = 1 if set(self.element.xpath('transaction[not(@humanitarian="0" or @humanitarian="false")]/sector[@vocabulary="{0}" or not(@vocabulary)]/@code'.format(self._dac_5_code()))).intersection(humanitarian_sectors_dac_5_digit) else 0
Expand All @@ -1226,15 +1228,15 @@ def humanitarian(self):
is_humanitarian_by_sector = is_humanitarian_by_sector_activity or (is_humanitarian_by_sector_transaction and (self._major_version() in ['2']))

# combine the various ways in which an activity may be humanitarian
is_humanitarian = 1 if (is_humanitarian_by_attrib or is_humanitarian_by_sector) else 0
is_humanitarian = 1 if (is_humanitarian_by_attrib or is_humanitarian_by_scope or is_humanitarian_by_sector) else 0
# deal with some edge cases that have veto
if is_not_humanitarian_by_attrib_activity:
is_humanitarian = 0

return {
'is_humanitarian': is_humanitarian,
'is_humanitarian_by_attrib': is_humanitarian_by_attrib,
'contains_humanitarian_scope': 1 if (self._version() in ['2.02', '2.03']) and self.element.xpath('humanitarian-scope/@type') and self.element.xpath('humanitarian-scope/@code') else 0,
'contains_humanitarian_scope': 1 if is_humanitarian_by_scope and self.element.xpath('humanitarian-scope/@type') and self.element.xpath('humanitarian-scope/@code') else 0,
'uses_humanitarian_clusters_vocab': 1 if (self._version() in ['2.02', '2.03']) and self.element.xpath('sector/@vocabulary="10"') else 0
}

Expand Down
6 changes: 6 additions & 0 deletions stats/tests/test_humanitarian.py
Original file line number Diff line number Diff line change
Expand Up @@ -619,7 +619,10 @@ def test_humanitarian_scope_valid(version):
<humanitarian-scope type="" code="" />
</iati-activity>
''')
assert activity_stats.humanitarian()['is_humanitarian'] == 1
assert activity_stats.humanitarian()['is_humanitarian_by_attrib'] == 0
assert activity_stats.humanitarian()['contains_humanitarian_scope'] == 1
assert activity_stats.humanitarian()['uses_humanitarian_clusters_vocab'] == 0


@pytest.mark.parametrize('version', ['2.02', '2.03'])
Expand All @@ -634,7 +637,10 @@ def test_humanitarian_scope_invalid(version):
<humanitarian-scope />
</iati-activity>
''')
assert activity_stats.humanitarian()['is_humanitarian'] == 1
assert activity_stats.humanitarian()['is_humanitarian_by_attrib'] == 0
assert activity_stats.humanitarian()['contains_humanitarian_scope'] == 0
assert activity_stats.humanitarian()['uses_humanitarian_clusters_vocab'] == 0


@pytest.mark.parametrize('version', ['2.02', '2.03'])
Expand Down

0 comments on commit 19c9643

Please sign in to comment.