def test_load_multiple_fires_with_meta(self, monkeypatch, reset_config): monkeypatch.setattr(fires.FiresManager, '_stream', self._stream( '{"fires":[{"id":"a","bar":123,"baz":12.32,"bee":"12.12"},' '{"id":"b","bar":2, "baz": 1.1, "bee":"24.34"}],' '"foo": {"bar": "baz"}}')) monkeypatch.setattr(uuid, "uuid4", lambda: "abcd1234") fires_manager = fires.FiresManager() fires_manager.loads() expected_fires = [ fires.Fire({'id':'a', 'bar':123, 'baz':12.32, 'bee': "12.12"}), fires.Fire({'id':'b', 'bar':2, 'baz': 1.1, 'bee': '24.34'}) ] assert fires_manager.num_fires == 2 assert expected_fires == fires_manager.fires assert fires_manager.today == freezegun.api.FakeDatetime(2016,4,20) expected_meta = { "foo": {"bar": "baz"}, } assert expected_meta == fires_manager.meta
def test_setting_fires_and_meta(self, reset_config): fires_manager = fires.FiresManager() fire_objects = [ fires.Fire({'id': '1', 'name': 'n1', 'dfd':'a1', 'baz':'baz1'}), fires.Fire({'id': '2', 'name': 'n2', 'bar':'a1', 'baz':'baz1'}) ] fires_manager.fires = fire_objects fires_manager.a = 1 fires_manager.b = {'c': 2} # you can also set meta data directly fires_manager.meta['d'] = 123 assert fires_manager.num_fires == 2 assert set(['1','2']) == set(list(fires_manager._fires.keys())) assert {'1': [fire_objects[0]],'2': [fire_objects[1]]} == fires_manager._fires assert fires_manager.today == freezegun.api.FakeDate(2016, 4, 20) expected_meta = { 'a':1, 'b':{'c':2}, 'd': 123 } assert expected_meta == fires_manager._meta == fires_manager.meta
def test_fills_in_id(self, monkeypatch, reset_config): monkeypatch.setattr(uuid, "uuid4", lambda: "abcd1234") # if id is missing, the id is set to generated guid. # Note: id used to integrate start and/or end, if specified; # this is no longer the case f = fires.Fire({"a": 123, "b": "sdf"}) assert "abcd1234" == f["id"] f = fires.Fire({"a": 123, "b": "sdf", "start": "20120202 10:20:32"}) assert "abcd1234" == f["id"] f = fires.Fire({"a": 123, "b": "sdf", "end": "20120922 10:20:32"}) assert "abcd1234" == f["id"] f = fires.Fire({ "a": 123, "b": "sdf", "start": "20120202 10:20:32", "end": "20120922T10:20:32"}) assert "abcd1234" == f["id"] # if id exists, use it f = fires.Fire({ "a": 123, "b": "sdf", "start": "20120202 10:20:32", "end": "20120922T10:20:32", "id": "sdkjfh2rkjhsdf"}) assert "sdkjfh2rkjhsdf" == f["id"]
def test_remove_all_but_middle_aas_by_start_end(self, reset_config): Config().set({"start": "2019-01-03T00:00:00", "end": "2019-01-04T00:00:00"},'filter', 'time') expected = [ fires.Fire({'id': '1', 'activity': [ {'active_areas': [ {'start': '2019-01-02T17:00:00','end': "2019-01-03T17:00:00","utc_offset": "-07:00", 'specified_points':[{'lat': 40.2, 'lng': -80.2, "area": 90.0}]} ]} ]}), fires.Fire({'id': '2', 'activity': [ {'active_areas': [ {'start': '2019-01-02T20:00:00','end': "2019-01-03T20:00:00","utc_offset": "-04:00", 'specified_points':[{'lat': 30.0, 'lng': -90.0, "area": 90.0},{'lat': 30.5, 'lng': -90.5, "area": 90.0}]} ]} ]}) ] self.fm.filter_fires() assert self.fm.num_fires == 2 assert self.fm.num_locations == 3 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id))
def test_successful_filter_max(self, reset_config): Config().set({'max': 90}, 'filter', 'area') expected = [ fires.Fire({'id': '1', 'activity': [{'active_areas':[{'specified_points': [{'area': 45}]}]} ]}), fires.Fire({'id': '3', 'activity': [{'active_areas':[{'specified_points': [{'area': 55}]}]} ]}), fires.Fire({'id': '4', 'activity': [{'active_areas':[{'perimeter': {'area': 65}}]} ]}), fires.Fire({'id': '5', 'activity': [{'active_areas':[{'specified_points': [{'area': 85}]}]} ]}), fires.Fire({'id': '6', 'activity': [{'active_areas':[{'specified_points': [{'area': 75}], 'perimeter': {'area': 90}}]}]}), fires.Fire({'id': '7', 'activity': [{'active_areas':[{'specified_points': [{'area': 50}]}]} ]}), fires.Fire({'id': '8', 'activity': [{'active_areas':[{'specified_points': [{'area': 30}]}]} ]}), fires.Fire({'id': '9', 'activity': [ {'active_areas':[{'specified_points': [{'area': 45}]}]}, {'active_areas':[{'specified_points': [{'area': 40}]}]} ]}), fires.Fire({'id': '10', 'activity': [ {'active_areas':[{'specified_points': [{'area': 45}]}]}, {'active_areas':[{'perimeter': {'area': 65}}]} ]}), fires.Fire({'id': '11', 'activity': [{'active_areas':[{'specified_points': [{'area': 15}, {'area': 20}]}]} ]}) ] self.fm.filter_fires() assert self.fm.num_fires == 10 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id))
def _include_emissionscsv(self, data): if 'emissions' in data['modules']: return True locations_defined = False for f in data['fires']: for loc in fires.Fire(f).locations: locations_defined = True if not loc.get('fuelbeds') or any( [not fb.get('emissions') for fb in loc['fuelbeds']]): return False # there are fire locations defined, and all have emissions data return locations_defined
def test_merge_mixed_success_no_activity(self, reset_config): fm = fires.FiresManager() #Config().set(True, 'merge', 'skip_failures') f = fires.Fire({'id': '1', "type": "rx", "fuel_type": "natural"}) f2 = fires.Fire({'id': '1', "type": "rx", "fuel_type": "natural"}) f3 = fires.Fire({'id': '2', "type": "rx", "fuel_type": "natural"}) fm.fires = [f, f2, f3] assert fm.num_fires == 3 fm.merge_fires() expected = [ fires.Fire({ 'id': '1', "type": "rx", "fuel_type": "natural" }), fires.Fire({ 'id': '2', "type": "rx", "fuel_type": "natural" }) ] assert fm.num_fires == 2 assert expected == sorted(fm.fires, key=lambda e: int(e.id))
def test_remove_all_but_first_aa_by_end(self, reset_config): Config().set({"end": "2019-01-02T07:00:00"},'filter', 'time') expected = [ fires.Fire({'id': '1', 'activity': [ {'active_areas': [ {'start': '2019-01-01T17:00:00','end': "2019-01-02T17:00:00","utc_offset": "-07:00", 'specified_points':[{'lat': 40.0, 'lng': -80.0, "area": 90.0}]}, ]} ]}) ] self.fm.filter_fires() assert self.fm.num_fires == 1 assert self.fm.num_locations == 1 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id))
def test_load_multiple_streams(self, monkeypatch, reset_config): input_1 = io.StringIO('{"fires":[{"id":"a","bar":123,"baz":12.32,"bee":"12.12"},' '{"id":"b","bar":2, "baz": 1.1, "bee":"24.34"}],' '"foo": {"bar": "baz"}}') input_2 = io.StringIO('{"das": 1, "fires":[{"id":"c","bar":1223,"baz":1,"bee":"12"}]}') monkeypatch.setattr(uuid, "uuid4", lambda: "abcd1234") fires_manager = fires.FiresManager() fires_manager.loads(input_stream=input_1, append_fires=True) fires_manager.loads(input_stream=input_2, append_fires=True) expected_fires = [ fires.Fire({'id':'a', 'bar':123, 'baz':12.32, 'bee': "12.12"}), fires.Fire({'id':'b', 'bar':2, 'baz': 1.1, 'bee': '24.34'}), fires.Fire({"id":"c", "bar":1223,"baz":1,"bee":"12"}) ] assert fires_manager.num_fires == 3 assert expected_fires == fires_manager.fires assert fires_manager.today == freezegun.api.FakeDatetime(2016,4,20) expected_meta = { "foo": {"bar": "baz"}, "das": 1 } assert expected_meta == fires_manager.meta
def test_successful_filter_min(self): Config().set({'min': 47}, 'filter', 'area') expected = [ fires.Fire({'id': '2', 'activity': [{'active_areas':[{'specified_points': [{'area': 55}, {'area': 40}]}]} ]}), fires.Fire({'id': '3', 'activity': [{'active_areas':[{'specified_points': [{'area': 55}]}]} ]}), fires.Fire({'id': '4', 'activity': [{'active_areas':[{'perimeter': {'area': 65}}]} ]}), fires.Fire({'id': '5', 'activity': [{'active_areas':[{'specified_points': [{'area': 85}]}]} ]}), fires.Fire({'id': '6', 'activity': [{'active_areas':[{'specified_points': [{'area': 75}], 'perimeter': {'area': 90}}]}]}), fires.Fire({'id': '7', 'activity': [{'active_areas':[{'specified_points': [{'area': 50}]}]} ]}), fires.Fire({'id': '10', 'activity': [ {'active_areas':[{'perimeter': {'area': 65}}]} ]}) ] self.fm.filter_fires() assert self.fm.num_fires == 7 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id))
def test_fire_failure_handler(self, reset_config): def go(fire): if fire.id == '2': raise RuntimeError("oops") # Skip fires_manager = fires.FiresManager() fires_manager.fires = [ fires.Fire({'id': '1', 'name': 'n1'}), fires.Fire({'id': '2', 'name': 'n2'}) ] assert fires_manager.num_fires == 2 Config().set({"skip_failed_fires": True}) assert fires_manager.skip_failed_fires for fire in fires_manager.fires: with fires_manager.fire_failure_handler(fire): go(fire) assert fires_manager.fires == [ fires.Fire({'id': '1', 'name': 'n1'}) ] assert fires_manager.num_fires == 1 assert len(fires_manager.failed_fires) == 1 assert fires_manager.failed_fires[0].id == '2' assert fires_manager.failed_fires[0].name == 'n2' assert fires_manager.failed_fires[0]['error']['message'] == 'oops' assert fires_manager.failed_fires[0]['error']['traceback'] # Don't Skip fires_manager = fires.FiresManager() fires_manager.fires = [ fires.Fire({'id': '1', 'name': 'n1'}), fires.Fire({'id': '2', 'name': 'n2'}) ] Config().set({"skip_failed_fires": False}) assert fires_manager.num_fires == 2 assert not fires_manager.skip_failed_fires for fire in fires_manager.fires: if fire.id == '1': with fires_manager.fire_failure_handler(fire): go(fire) else: with raises(RuntimeError) as e_info: with fires_manager.fire_failure_handler(fire): go(fire) assert fires_manager.num_fires == 2 assert len(fires_manager.fires) == 2 assert fires_manager.fires[0] == fires.Fire({'id': '1', 'name': 'n1'}) assert fires_manager.fires[1].id == '2' assert fires_manager.fires[1].name == 'n2' assert fires_manager.fires[1]['error']['message'] == 'oops' assert fires_manager.fires[1]['error']['traceback'] assert fires_manager.failed_fires is None
def test_fills_in_or_validates_type_and_fuel_type(self, reset_config): # defaults 'type' and 'fuel_type f = fires.Fire({"a": 123, "b": "sdf"}) assert f['type'] == fires.Fire.DEFAULT_TYPE assert f['fuel_type'] == fires.Fire.DEFAULT_FUEL_TYPE # accepts 'type' and 'fuel_type values if specified and valid f = fires.Fire({"a": 123, "b": "sdf", "type": 'rx', 'fuel_type': 'piles'}) assert f['type'] == 'rx' assert f['fuel_type'] == 'piles' # converts to lowercase f = fires.Fire({"a": 123, "b": "sdf", "type": 'Rx', 'fuel_type': 'PILES'}) assert f['type'] == 'rx' assert f['fuel_type'] == 'piles' # validates 'type' on instantiation with raises(ValueError) as e_info: f = fires.Fire({"a": 123, "b": "sdf", "type": 'foo', 'fuel_type': 'piles'}) assert e_info.value.args[0] == fires.Fire.INVALID_TYPE_MSG.format('foo') f = fires.Fire() # validates 'type' on setattr with raises(ValueError) as e_info: f.type = 'foo' assert e_info.value.args[0] == fires.Fire.INVALID_TYPE_MSG.format('foo') # validates 'type' on dict set with raises(ValueError) as e_info: f['type'] = 'foo' assert e_info.value.args[0] == fires.Fire.INVALID_TYPE_MSG.format('foo') # validates 'fuel_type' on instantiation with raises(ValueError) as e_info: f = fires.Fire({"a": 123, "b": "sdf", "type": 'rx', 'fuel_type': 'bar'}) assert e_info.value.args[0] == fires.Fire.INVALID_FUEL_TYPE_MSG.format('bar') # validates 'fuel_type' on setattr with raises(ValueError) as e_info: f.fuel_type = 'bar' assert e_info.value.args[0] == fires.Fire.INVALID_FUEL_TYPE_MSG.format('bar') # validates 'fuel_type' on dict set with raises(ValueError) as e_info: f['fuel_type'] = 'bar' assert e_info.value.args[0] == fires.Fire.INVALID_FUEL_TYPE_MSG.format('bar')
def test_successful_filter_min_and_max(self, reset_config): # both min and max Config().set({'min': 52, 'max': 77.0}, 'filter', 'area') expected = [ fires.Fire({'id': '3', 'activity': [{'active_areas':[{'specified_points': [{'area': 55}]}]} ]}), fires.Fire({'id': '4', 'activity': [{'active_areas':[{'perimeter': {'area': 65}}]} ]}), fires.Fire({'id': '6', 'activity': [{'active_areas':[{'specified_points': [{'area': 75}], 'perimeter': {'area': 90}}]}]}), fires.Fire({'id': '10', 'activity': [ {'active_areas':[{'perimeter': {'area': 65}}]} ]}) ] self.fm.filter_fires() assert self.fm.num_fires == 4 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id)) # both min and max Config().set({'min': 65, 'max': 65.0}, 'filter', 'area') expected = [ fires.Fire({'id': '4', 'activity': [{'active_areas':[{'perimeter': {'area': 65}}]} ]}), fires.Fire({'id': '10', 'activity': [ {'active_areas':[{'perimeter': {'area': 65}}]} ]}) ] self.fm.filter_fires() assert self.fm.num_fires == 2 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id)) # filter out the rest Config().set({'min': 76, 'max': 77.0}, 'filter', 'area') self.fm.filter_fires() assert self.fm.num_fires == 0 assert [] == sorted(self.fm.fires, key=lambda e: int(e.id)) # call again with no fires self.fm.filter_fires() assert self.fm.num_fires == 0 assert [] == sorted(self.fm.fires, key=lambda e: int(e.id))
def test_different_fire_and_fuel_type(self, reset_config): # test in both skip and no-skip modes for s in (True, False): fm = fires.FiresManager() Config().set(s, 'merge', 'skip_failures') f = fires.Fire({ 'id': '1', "type": "rx", "fuel_type": "natural", # activity just used for assertion, below "activity": [{ "active_areas": [{ 'specified_points': [{ 'area': 123 }] }] }] }) f2 = fires.Fire({ 'id': '1', "type": "wf", "fuel_type": "natural", # activity just used for assertion, below "activity": [{ "active_areas": [{ 'specified_points': [{ 'area': 456 }] }] }] }) fm.fires = [f, f2] assert fm.num_fires == 2 if not s: with raises(ValueError) as e_info: fm.merge_fires() assert fm.num_fires == 2 assert e_info.value.args[0].index( fires.FiresMerger.FIRE_TYPE_MISMATCH_MSG) > 0 else: fm.merge_fires() assert fm.num_fires == 2 assert [f2, f] == fm.fires f2.type = f.type f2.fuel_type = "activity" fm.fires = [f, f2] assert fm.num_fires == 2 if not s: with raises(ValueError) as e_info: fm.merge_fires() assert fm.num_fires == 2 assert e_info.value.args[0].index( fires.FiresMerger.FUEL_TYPE_MISMATCH_MSG) > 0 else: fm.merge_fires() assert fm.num_fires == 2 assert [f2, f] == fm.fires
def test_merge_mixed_success(self, reset_config): fm = fires.FiresManager() #Config().set(True, 'merge', 'skip_failures') f = fires.Fire({ 'id': '1', "type": "rx", "fuel_type": "natural", "activity": [{ "active_areas": [{ "start": "2014-05-28T17:00:00", "end": "2014-05-29T17:00:00", 'specified_points': [{ 'area': 90, 'lat': 45.0, 'lng': -120.0 }] }, { "start": "2014-05-29T17:00:00", "end": "2014-05-30T17:00:00", 'specified_points': [{ 'area': 90, 'lat': 46.0, 'lng': -120.0 }] }] }] }) f2 = fires.Fire({ 'id': '1', "type": "rx", "fuel_type": "natural", "activity": [{ "active_areas": [{ "start": "2014-05-27T17:00:00", "end": "2014-05-28T17:00:00", 'specified_points': [{ 'area': 10, 'lat': 45.0, 'lng': -120.0 }] }] }] }) f3 = fires.Fire({ 'id': '2', "type": "rx", "fuel_type": "natural", "activity": [{ "active_areas": [{ "start": "2014-05-27T17:00:00", "end": "2014-05-30T17:00:00", 'specified_points': [{ 'area': 132, 'lat': 45.0, 'lng': -120.0 }] }] }] }) fm.fires = [f, f2, f3] assert fm.num_fires == 3 fm.merge_fires() assert fm.num_fires == 2 expected = [ fires.Fire({ 'id': '1', "type": "rx", "fuel_type": "natural", "activity": [{ "active_areas": [{ "start": "2014-05-28T17:00:00", "end": "2014-05-29T17:00:00", 'specified_points': [{ 'area': 90, 'lat': 45.0, 'lng': -120.0 }] }, { "start": "2014-05-29T17:00:00", "end": "2014-05-30T17:00:00", 'specified_points': [{ 'area': 90, 'lat': 46.0, 'lng': -120.0 }] }] }, { "active_areas": [{ "start": "2014-05-27T17:00:00", "end": "2014-05-28T17:00:00", 'specified_points': [{ 'area': 10, 'lat': 45.0, 'lng': -120.0 }] }] }] }), fires.Fire({ 'id': '2', "type": "rx", "fuel_type": "natural", "activity": [{ "active_areas": [{ "start": "2014-05-27T17:00:00", "end": "2014-05-30T17:00:00", 'specified_points': [{ 'area': 132, 'lat': 45.0, 'lng': -120.0 }] }] }] }) ] actual = sorted(fm.fires, key=lambda e: int(e.id)) assert expected == actual
def test_both_whitelist_or_blacklist_are_specified(self, reset_config): Config().set(False, 'filter', 'skip_failures') Config().set(["ZZ"], 'filter', 'country', 'blacklist') Config().set(["YY"], 'filter', 'country', 'whitelist') with raises(fires.FireActivityFilter.FilterError) as e_info: self.fm.filter_fires() assert self.fm.num_fires == 14 assert e_info.value.args[0] == fires.FireActivityFilter.SPECIFY_WHITELIST_OR_BLACKLIST_MSG Config().set(True, 'filter', 'skip_failures') self.fm.filter_fires() assert self.fm.num_fires == 14 assert self.init_fires == sorted(self.fm.fires, key=lambda e: int(e.id)) Config().set(False, 'filter', 'skip_failures') Config().set(["ZZ"], 'filter', 'country', 'blacklist') Config().set(None, 'filter', 'country', 'whitelist') self.fm.filter_fires() expected = [ fires.Fire({'id': '04', 'name': 'n4', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), fires.Fire({'id': '05', 'name': 'n5', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "USA"}]}]}), fires.Fire({'id': '06', 'name': 'n6', 'bar1': 1 , 'baz':'baz1', "activity": [{"active_areas": [{'country': ''}]}]}), fires.Fire({'id': '07', 'name': 'n7', 'bar2':'a2', 'baz':'baz2', "activity": [{"active_areas": [{'country': "CA"}]}]}), fires.Fire({'id': '08', 'name': 'n8', 'bar2':'adfsdf', 'baz':'baz2', "activity": [{"active_areas": [{'country': "CA"}]}]}), fires.Fire({'id': '09', 'name': 'n9', 'bar2': 2 , 'baz':'baz2', "activity": [{"active_areas": [{'country': 'Unknown'}]}]}), fires.Fire({'id': '10', 'name': 'n10', "barj": "jj", "baz": 99, "activity": [{"active_areas": [{"country": "USA"}]}]}), fires.Fire({'id': '11', 'name': 'n11', "barj": "jj", "baz": 99, "activity": [{"active_areas": [{"country": "BZ"}]}]}), fires.Fire({'id': '12', 'name': 'n3', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), fires.Fire({'id': '14', 'name': 'n3.5', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), ] assert self.fm.num_fires == 10 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id)) Config().set(["USA", "CA", "UK", "BZ"], 'filter', 'country', 'whitelist') Config().set(None, 'filter', 'country', 'blacklist') self.fm.filter_fires() expected = [ fires.Fire({'id': '04', 'name': 'n4', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), fires.Fire({'id': '05', 'name': 'n5', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "USA"}]}]}), fires.Fire({'id': '07', 'name': 'n7', 'bar2':'a2', 'baz':'baz2', "activity": [{"active_areas": [{'country': "CA"}]}]}), fires.Fire({'id': '08', 'name': 'n8', 'bar2':'adfsdf', 'baz':'baz2', "activity": [{"active_areas": [{'country': "CA"}]}]}), fires.Fire({'id': '10', 'name': 'n10', "barj": "jj", "baz": 99, "activity": [{"active_areas": [{"country": "USA"}]}]}), fires.Fire({'id': '11', 'name': 'n11', "barj": "jj", "baz": 99, "activity": [{"active_areas": [{"country": "BZ"}]}]}), fires.Fire({'id': '12', 'name': 'n3', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), fires.Fire({'id': '14', 'name': 'n3.5', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), ] assert self.fm.num_fires == 8 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id)) Config().set(["USA"], 'filter', 'country', 'blacklist') Config().set(None, 'filter', 'country', 'whitelist') self.fm.filter_fires() expected = [ fires.Fire({'id': '04', 'name': 'n4', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), fires.Fire({'id': '07', 'name': 'n7', 'bar2':'a2', 'baz':'baz2', "activity": [{"active_areas": [{'country': "CA"}]}]}), fires.Fire({'id': '08', 'name': 'n8', 'bar2':'adfsdf', 'baz':'baz2', "activity": [{"active_areas": [{'country': "CA"}]}]}), fires.Fire({'id': '11', 'name': 'n11', "barj": "jj", "baz": 99, "activity": [{"active_areas": [{"country": "BZ"}]}]}), fires.Fire({'id': '12', 'name': 'n3', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), fires.Fire({'id': '14', 'name': 'n3.5', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), ] assert self.fm.num_fires == 6 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id)) Config().set(["USA", "CA", "UK"], 'filter', 'country', 'whitelist') Config().set(None, 'filter', 'country', 'blacklist') self.fm.filter_fires() expected = [ fires.Fire({'id': '04', 'name': 'n4', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), fires.Fire({'id': '07', 'name': 'n7', 'bar2':'a2', 'baz':'baz2', "activity": [{"active_areas": [{'country': "CA"}]}]}), fires.Fire({'id': '08', 'name': 'n8', 'bar2':'adfsdf', 'baz':'baz2', "activity": [{"active_areas": [{'country': "CA"}]}]}), fires.Fire({'id': '12', 'name': 'n3', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), fires.Fire({'id': '14', 'name': 'n3.5', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), ] assert self.fm.num_fires == 5 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id)) Config().set(["USA", "CA"], 'filter', 'country', 'blacklist') Config().set(None, 'filter', 'country', 'whitelist') self.fm.filter_fires() expected = [ fires.Fire({'id': '04', 'name': 'n4', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), fires.Fire({'id': '12', 'name': 'n3', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), fires.Fire({'id': '14', 'name': 'n3.5', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), ] assert self.fm.num_fires == 3 assert expected == self.fm.fires Config().set(["UK", "CA"], 'filter', 'country', 'blacklist') Config().set(None, 'filter', 'country', 'whitelist') self.fm.filter_fires() assert self.fm.num_fires == 0 assert [] == self.fm.fires # call again with no fires self.fm.filter_fires() assert self.fm.num_fires == 0 assert [] == self.fm.fires
class TestFire(object): def test_fills_in_id(self, monkeypatch, reset_config): monkeypatch.setattr(uuid, "uuid4", lambda: "abcd1234") # if id is missing, the id is set to generated guid. # Note: id used to integrate start and/or end, if specified; # this is no longer the case f = fires.Fire({"a": 123, "b": "sdf"}) assert "abcd1234" == f["id"] f = fires.Fire({"a": 123, "b": "sdf", "start": "20120202 10:20:32"}) assert "abcd1234" == f["id"] f = fires.Fire({"a": 123, "b": "sdf", "end": "20120922 10:20:32"}) assert "abcd1234" == f["id"] f = fires.Fire({ "a": 123, "b": "sdf", "start": "20120202 10:20:32", "end": "20120922T10:20:32"}) assert "abcd1234" == f["id"] # if id exists, use it f = fires.Fire({ "a": 123, "b": "sdf", "start": "20120202 10:20:32", "end": "20120922T10:20:32", "id": "sdkjfh2rkjhsdf"}) assert "sdkjfh2rkjhsdf" == f["id"] def test_fills_in_or_validates_type_and_fuel_type(self, reset_config): # defaults 'type' and 'fuel_type f = fires.Fire({"a": 123, "b": "sdf"}) assert f['type'] == fires.Fire.DEFAULT_TYPE assert f['fuel_type'] == fires.Fire.DEFAULT_FUEL_TYPE # accepts 'type' and 'fuel_type values if specified and valid f = fires.Fire({"a": 123, "b": "sdf", "type": 'rx', 'fuel_type': 'piles'}) assert f['type'] == 'rx' assert f['fuel_type'] == 'piles' # converts to lowercase f = fires.Fire({"a": 123, "b": "sdf", "type": 'Rx', 'fuel_type': 'PILES'}) assert f['type'] == 'rx' assert f['fuel_type'] == 'piles' # validates 'type' on instantiation with raises(ValueError) as e_info: f = fires.Fire({"a": 123, "b": "sdf", "type": 'foo', 'fuel_type': 'piles'}) assert e_info.value.args[0] == fires.Fire.INVALID_TYPE_MSG.format('foo') f = fires.Fire() # validates 'type' on setattr with raises(ValueError) as e_info: f.type = 'foo' assert e_info.value.args[0] == fires.Fire.INVALID_TYPE_MSG.format('foo') # validates 'type' on dict set with raises(ValueError) as e_info: f['type'] = 'foo' assert e_info.value.args[0] == fires.Fire.INVALID_TYPE_MSG.format('foo') # validates 'fuel_type' on instantiation with raises(ValueError) as e_info: f = fires.Fire({"a": 123, "b": "sdf", "type": 'rx', 'fuel_type': 'bar'}) assert e_info.value.args[0] == fires.Fire.INVALID_FUEL_TYPE_MSG.format('bar') # validates 'fuel_type' on setattr with raises(ValueError) as e_info: f.fuel_type = 'bar' assert e_info.value.args[0] == fires.Fire.INVALID_FUEL_TYPE_MSG.format('bar') # validates 'fuel_type' on dict set with raises(ValueError) as e_info: f['fuel_type'] = 'bar' assert e_info.value.args[0] == fires.Fire.INVALID_FUEL_TYPE_MSG.format('bar') def test_accessing_attributes(self, reset_config): f = fires.Fire({'a': 123, 'b': 'sdf'}) assert 123 == f['a'] assert 123 == f.a assert 'sdf' == f['b'] assert 'sdf' == f.b with raises(KeyError) as e: f['sdfdsf'] with raises(AttributeError) as e: f.rifsijsflj def test_start_and_end(self, reset_config): # no activity windows f = fires.Fire({}) assert None == f.start assert None == f.start_utc assert None == f.end assert None == f.end_utc # empty activity list f = fires.Fire({"activity": []}) assert None == f.start assert None == f.start_utc assert None == f.end assert None == f.end_utc # one activity window with no 'start' f = fires.Fire({"activity": [{}]}) assert None == f.start assert None == f.start_utc assert None == f.end assert None == f.end_utc # one activity window with None 'start' f = fires.Fire({"activity": [{'start': None}]}) assert None == f.start assert None == f.start_utc assert None == f.end assert None == f.end_utc # multiple activity windows with no 'start' f = fires.Fire({"activity": [{}, {}]}) assert None == f.start assert None == f.start_utc assert None == f.end assert None == f.end_utc # multiple activity windows with None 'start' f = fires.Fire({"activity": [{'start': None}, {'start': None}]}) assert None == f.start assert None == f.start_utc assert None == f.end assert None == f.end_utc # multiple activity windows with None 'end' f = fires.Fire({"activity": [{'active_areas': [{'end': None}, {'end': None}]}]}) assert None == f.start assert None == f.start_utc assert None == f.end assert None == f.end_utc # one activity window with start defined f = fires.Fire({"activity": [{'active_areas': [{'start': "2014-05-27T17:00:00"}]}]}) assert datetime.datetime(2014,5,27,17,0,0) == f.start assert datetime.datetime(2014,5,27,17,0,0) == f.start_utc assert None == f.end assert None == f.end_utc # one activity window with end defined f = fires.Fire({"activity": [{'active_areas': [{'end': "2014-05-27T17:00:00"}]}]}) assert None == f.start assert None == f.start_utc assert datetime.datetime(2014,5,27,17,0,0) == f.end assert datetime.datetime(2014,5,27,17,0,0) == f.end_utc # multiple activity windows, some with 'start' defined, some with end # defined, out of order f = fires.Fire({"activity": [{'active_areas': [ {'start': None, 'end': '2014-05-30T17:00:00'}, {'start': "2014-05-29T17:00:00", 'end': None}, {'start': "2014-05-27T17:00:00", 'end': '2014-05-27T17:00:00'}, {'start': None, 'end': None} ]}]}) assert datetime.datetime(2014,5,27,17,0,0) == f.start assert datetime.datetime(2014,5,27,17,0,0) == f.start_utc assert datetime.datetime(2014,5,30,17,0,0) == f.end assert datetime.datetime(2014,5,30,17,0,0) == f.end_utc # multiple activity windows, all with 'start' & 'end' defined, out of order f = fires.Fire({"activity": [{'active_areas': [ {'start': "2014-05-29T17:00:00", 'end': "2014-05-30T17:00:00"}, {'start': "2014-05-27T17:00:00", 'end': "2014-05-28T17:00:00"}, {'start': "2014-05-28T17:00:00", 'end': "2014-05-29T17:00:00"} ]}]}) assert datetime.datetime(2014,5,27,17,0,0) == f.start assert datetime.datetime(2014,5,30,17,0,0) == f.end assert datetime.datetime(2014,5,27,17,0,0) == f.start_utc assert datetime.datetime(2014,5,30,17,0,0) == f.end_utc # multiple activity windows, all with 'start' & 'end' defined, out of # order, with utc_offset defined f = fires.Fire({ "activity": [ { 'active_areas': [ { "utc_offset": '-07:00', 'start': "2014-05-29T17:00:00", 'end': "2014-05-30T17:00:00" }, { "utc_offset": '-07:00', 'start': "2014-05-27T17:00:00", 'end': "2014-05-28T17:00:00" }, { "utc_offset": '-07:00', 'start': "2014-05-28T17:00:00", 'end': "2014-05-29T17:00:00" } ] } ] }) assert datetime.datetime(2014,5,27,17,0,0) == f.start assert datetime.datetime(2014,5,30,17,0,0) == f.end assert datetime.datetime(2014,5,28,0,0,0) == f.start_utc assert datetime.datetime(2014,5,31,0,0,0) == f.end_utc TEST_FIRE = fires.Fire({ 'id': '1', 'activity': [ { 'active_areas': [ { "start": "2014-05-27T17:00:00", "end": "2014-05-28T17:00:00", 'specified_points': [ {'area': 34, 'lat': 45.0, 'lng': -120.0}, ] }, { "start": "2014-05-25T17:00:00", "end": "2014-05-26T17:00:00", 'specified_points': [ {'area': 34, 'lat': 44.0, 'lng': -119.0}, ], "perimeter": { "polygon": [ [-122.45, 46.43], [-122.39, 46.43], [-122.39, 46.40], [-122.45, 46.40], [-122.45, 46.43] ] } } ] }, { 'active_areas': [ { "start": "2014-05-29T19:00:00", "end": "2014-05-30T19:00:00", "perimeter": { "polygon": [ [-121.45, 47.43], [-121.39, 47.43], [-121.39, 47.40], [-121.45, 47.40], [-121.45, 47.43] ] } } ] } ] }) TEST_FIRE_NO_ACTIVITY = fires.Fire({ 'id': '2' }) TEST_FIRE_ACTIVITY_NO_LOCATION_INFO = fires.Fire({ 'id': '1', 'activity': [ { 'active_areas': [ { "start": "2014-05-25T17:00:00", "end": "2014-05-26T17:00:00" # No location information } ] } ] }) TEST_FIRE_ACTIVITY_INVALID_SPECIFIED_POINTS = fires.Fire({ 'id': '1', 'activity': [ { 'active_areas': [ { "start": "2014-05-25T17:00:00", "end": "2014-05-26T17:00:00", 'specified_points': [ {'lat': 45.0, 'lng': -120.0}, # no area ] } ] } ] }) TEST_FIRE_ACTIVITY_INVALID_PERIMETER = fires.Fire({ 'id': '1', 'activity': [ { 'active_areas': [ { "start": "2014-05-25T17:00:00", "end": "2014-05-26T17:00:00", 'perimeter': { # missing polygon "foo": 123 } } ] } ] }) def test_active_areas(self): # no activity assert [] == self.TEST_FIRE_NO_ACTIVITY.active_areas # missing location information expected = [{ "start": "2014-05-25T17:00:00", "end": "2014-05-26T17:00:00" }] actual = self.TEST_FIRE_ACTIVITY_NO_LOCATION_INFO.active_areas assert actual == expected # invalid specified points expected = [{ "start": "2014-05-25T17:00:00", "end": "2014-05-26T17:00:00", 'specified_points': [ {'lat': 45.0, 'lng': -120.0}, # no area ] }] actual = self.TEST_FIRE_ACTIVITY_INVALID_SPECIFIED_POINTS.active_areas assert actual == expected # invalid active area expected = [{ "start": "2014-05-25T17:00:00", "end": "2014-05-26T17:00:00", 'perimeter': { # missing polygon "foo": 123 } }] actual = self.TEST_FIRE_ACTIVITY_INVALID_PERIMETER.active_areas assert actual == expected # mixed activity expected = [{ "start": "2014-05-27T17:00:00", "end": "2014-05-28T17:00:00", 'specified_points': [ {'area': 34, 'lat': 45.0, 'lng': -120.0}, ] }, { "start": "2014-05-25T17:00:00", "end": "2014-05-26T17:00:00", 'specified_points': [ {'area': 34, 'lat': 44.0, 'lng': -119.0} ], "perimeter": { "polygon": [ [-122.45, 46.43], [-122.39, 46.43], [-122.39, 46.40], [-122.45, 46.40], [-122.45, 46.43] ] } }, { "start": "2014-05-29T19:00:00", "end": "2014-05-30T19:00:00", "perimeter": { "polygon": [ [-121.45, 47.43], [-121.39, 47.43], [-121.39, 47.40], [-121.45, 47.40], [-121.45, 47.43] ] } }] actual = self.TEST_FIRE.active_areas assert actual == expected def test_locations(self): # no activity assert [] == self.TEST_FIRE_NO_ACTIVITY.locations # missing location information with raises(ValueError) as e_info: self.TEST_FIRE_ACTIVITY_NO_LOCATION_INFO.locations assert e_info.value.args[0] == activity.ActiveArea.MISSING_LOCATION_INFO_MSG # invalid specified points with raises(ValueError) as e_info: self.TEST_FIRE_ACTIVITY_INVALID_SPECIFIED_POINTS.locations assert e_info.value.args[0] == activity.INVALID_LOCATION_MSGS['specified_points'] # invalid perimeter with raises(ValueError) as e_info: self.TEST_FIRE_ACTIVITY_INVALID_PERIMETER.locations assert e_info.value.args[0] == activity.INVALID_LOCATION_MSGS['perimeter'] # mixed activity expected = [ {'area': 34, 'lat': 45.0, 'lng': -120.0}, {'area': 34, 'lat': 44.0, 'lng': -119.0}, { "polygon": [ [-121.45, 47.43], [-121.39, 47.43], [-121.39, 47.40], [-121.45, 47.40], [-121.45, 47.43] ] } ] actual = self.TEST_FIRE.locations assert actual == expected
def test_start_and_end(self, reset_config): # no activity windows f = fires.Fire({}) assert None == f.start assert None == f.start_utc assert None == f.end assert None == f.end_utc # empty activity list f = fires.Fire({"activity": []}) assert None == f.start assert None == f.start_utc assert None == f.end assert None == f.end_utc # one activity window with no 'start' f = fires.Fire({"activity": [{}]}) assert None == f.start assert None == f.start_utc assert None == f.end assert None == f.end_utc # one activity window with None 'start' f = fires.Fire({"activity": [{'start': None}]}) assert None == f.start assert None == f.start_utc assert None == f.end assert None == f.end_utc # multiple activity windows with no 'start' f = fires.Fire({"activity": [{}, {}]}) assert None == f.start assert None == f.start_utc assert None == f.end assert None == f.end_utc # multiple activity windows with None 'start' f = fires.Fire({"activity": [{'start': None}, {'start': None}]}) assert None == f.start assert None == f.start_utc assert None == f.end assert None == f.end_utc # multiple activity windows with None 'end' f = fires.Fire({"activity": [{'active_areas': [{'end': None}, {'end': None}]}]}) assert None == f.start assert None == f.start_utc assert None == f.end assert None == f.end_utc # one activity window with start defined f = fires.Fire({"activity": [{'active_areas': [{'start': "2014-05-27T17:00:00"}]}]}) assert datetime.datetime(2014,5,27,17,0,0) == f.start assert datetime.datetime(2014,5,27,17,0,0) == f.start_utc assert None == f.end assert None == f.end_utc # one activity window with end defined f = fires.Fire({"activity": [{'active_areas': [{'end': "2014-05-27T17:00:00"}]}]}) assert None == f.start assert None == f.start_utc assert datetime.datetime(2014,5,27,17,0,0) == f.end assert datetime.datetime(2014,5,27,17,0,0) == f.end_utc # multiple activity windows, some with 'start' defined, some with end # defined, out of order f = fires.Fire({"activity": [{'active_areas': [ {'start': None, 'end': '2014-05-30T17:00:00'}, {'start': "2014-05-29T17:00:00", 'end': None}, {'start': "2014-05-27T17:00:00", 'end': '2014-05-27T17:00:00'}, {'start': None, 'end': None} ]}]}) assert datetime.datetime(2014,5,27,17,0,0) == f.start assert datetime.datetime(2014,5,27,17,0,0) == f.start_utc assert datetime.datetime(2014,5,30,17,0,0) == f.end assert datetime.datetime(2014,5,30,17,0,0) == f.end_utc # multiple activity windows, all with 'start' & 'end' defined, out of order f = fires.Fire({"activity": [{'active_areas': [ {'start': "2014-05-29T17:00:00", 'end': "2014-05-30T17:00:00"}, {'start': "2014-05-27T17:00:00", 'end': "2014-05-28T17:00:00"}, {'start': "2014-05-28T17:00:00", 'end': "2014-05-29T17:00:00"} ]}]}) assert datetime.datetime(2014,5,27,17,0,0) == f.start assert datetime.datetime(2014,5,30,17,0,0) == f.end assert datetime.datetime(2014,5,27,17,0,0) == f.start_utc assert datetime.datetime(2014,5,30,17,0,0) == f.end_utc # multiple activity windows, all with 'start' & 'end' defined, out of # order, with utc_offset defined f = fires.Fire({ "activity": [ { 'active_areas': [ { "utc_offset": '-07:00', 'start': "2014-05-29T17:00:00", 'end': "2014-05-30T17:00:00" }, { "utc_offset": '-07:00', 'start': "2014-05-27T17:00:00", 'end': "2014-05-28T17:00:00" }, { "utc_offset": '-07:00', 'start': "2014-05-28T17:00:00", 'end': "2014-05-29T17:00:00" } ] } ] }) assert datetime.datetime(2014,5,27,17,0,0) == f.start assert datetime.datetime(2014,5,30,17,0,0) == f.end assert datetime.datetime(2014,5,28,0,0,0) == f.start_utc assert datetime.datetime(2014,5,31,0,0,0) == f.end_utc
def setup(self): self.fm = fires.FiresManager() self.init_fires = [ fires.Fire({'id': '1', 'name': 'n1', 'dfd':'a1', 'baz':'baz1'}), ] self.fm.fires = self.init_fires
def setup(self): self.fm = fires.FiresManager() self.init_fires = [ fires.Fire({'id': '1', 'activity': [{'active_areas': [{'specified_points':[{'lat': 40.0, 'lng': -80.0}]}]}]}), fires.Fire({'id': '2', 'activity': [{'active_areas': [{'specified_points':[{'lat': 45.0, 'lng': -81.0}, {'lat': 55.0, 'lng': -79.0}]}]}]}), fires.Fire({'id': '3', 'activity': [{'active_areas': [{'specified_points':[{'lat': 60.0, 'lng': -62.0}]}]}]}), fires.Fire({'id': '4', 'activity': [{'active_areas': [{'perimeter': {'polygon': [[-61, 71], [-61, 69], [-59, 69], [-59, 71], [-61, 71]]}}]}]}), fires.Fire({'id': '5', 'activity': [{'active_areas': [{'specified_points':[{'lat': 40.0, 'lng': -60.0}]}]}]}), fires.Fire({'id': '6', 'activity': [{'active_areas': [{'specified_points':[{'lat': 61.0, 'lng': -60.0}]}]}]}), fires.Fire({'id': '7', 'activity': [{'active_areas': [{'perimeter': {'polygon': [[-51,61], [-49, 61], [-49, 59], [-51, 59], [-51, 61]]}}]}]}), fires.Fire({'id': '8', 'activity': [{'active_areas': [{'specified_points':[{'lat': 70.0, 'lng': -120.0}]}]}]}), fires.Fire({'id': '9', 'activity': [{'active_areas': [{'specified_points':[{'lat': -10.0, 'lng': 10.0}]}]}]}), fires.Fire({'id': '10', 'activity': [ {'active_areas': [{'specified_points': [{'lat': -10.0, 'lng': -10.0}]}]}, {'active_areas': [{'specified_points': [{'lat': 40.0, 'lng': -80.0}]}]} ]}), fires.Fire({'id': '10', 'activity': [ {'active_areas': [{'specified_points': [{'lat': -10.0, 'lng': 10.0}]}]}, {'active_areas': [{'specified_points': [{'lat': -11.0, 'lng': 9.0}]}]}, ]}) ] self.fm.fires = self.init_fires assert self.fm.num_fires == 11
def test_successful_filtering(self, reset_config): """ TODO: split this method into separate test cases """ # squeeze sw lat Config().set({"ne": {"lat": 88.12, "lng": 40}, "sw": {"lat": -5.75,"lng": -131.5}}, 'filter', 'location', 'boundary') expected = [ fires.Fire({'id': '1', 'activity': [{'active_areas': [{'specified_points':[{'lat': 40.0, 'lng': -80.0}]}]}]}), fires.Fire({'id': '2', 'activity': [{'active_areas': [{'specified_points':[{'lat': 45.0, 'lng': -81.0}, {'lat': 55.0, 'lng': -79.0}]}]}]}), fires.Fire({'id': '3', 'activity': [{'active_areas': [{'specified_points':[{'lat': 60.0, 'lng': -62.0}]}]}]}), fires.Fire({'id': '4', 'activity': [{'active_areas': [{'perimeter': {'polygon': [[-61, 71], [-61, 69], [-59, 69], [-59, 71], [-61, 71]]}}]}]}), fires.Fire({'id': '5', 'activity': [{'active_areas': [{'specified_points':[{'lat': 40.0, 'lng': -60.0}]}]}]}), fires.Fire({'id': '6', 'activity': [{'active_areas': [{'specified_points':[{'lat': 61.0, 'lng': -60.0}]}]}]}), fires.Fire({'id': '7', 'activity': [{'active_areas': [{'perimeter': {'polygon': [[-51,61], [-49, 61], [-49, 59], [-51, 59], [-51, 61]]}}]}]}), fires.Fire({'id': '8', 'activity': [{'active_areas': [{'specified_points':[{'lat': 70.0, 'lng': -120.0}]}]}]}), fires.Fire({'id': '10', 'activity': [{'active_areas': [{'specified_points': [{'lat': 40.0, 'lng': -80.0}]}]}]}) ] self.fm.filter_fires() assert self.fm.num_fires == 9 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id)) # squeeze sw lng Config().set({"ne": {"lat": 88.12, "lng": 40}, "sw": {"lat": -5.75,"lng": -110.5}}, 'filter', 'location', 'boundary') expected = [ fires.Fire({'id': '1', 'activity': [{'active_areas': [{'specified_points':[{'lat': 40.0, 'lng': -80.0}]}]}]}), fires.Fire({'id': '2', 'activity': [{'active_areas': [{'specified_points':[{'lat': 45.0, 'lng': -81.0}, {'lat': 55.0, 'lng': -79.0}]}]}]}), fires.Fire({'id': '3', 'activity': [{'active_areas': [{'specified_points':[{'lat': 60.0, 'lng': -62.0}]}]}]}), fires.Fire({'id': '4', 'activity': [{'active_areas': [{'perimeter': {'polygon': [[-61, 71], [-61, 69], [-59, 69], [-59, 71], [-61, 71]]}}]}]}), fires.Fire({'id': '5', 'activity': [{'active_areas': [{'specified_points':[{'lat': 40.0, 'lng': -60.0}]}]}]}), fires.Fire({'id': '6', 'activity': [{'active_areas': [{'specified_points':[{'lat': 61.0, 'lng': -60.0}]}]}]}), fires.Fire({'id': '7', 'activity': [{'active_areas': [{'perimeter': {'polygon': [[-51,61], [-49, 61], [-49, 59], [-51, 59], [-51, 61]]}}]}]}), fires.Fire({'id': '10', 'activity': [{'active_areas': [{'specified_points': [{'lat': 40.0, 'lng': -80.0}]}]}]}) ] self.fm.filter_fires() assert self.fm.num_fires == 8 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id)) # squeeze ne lat Config().set({"ne": {"lat": 66.12, "lng": 40}, "sw": {"lat": -5.75,"lng": -110.5}}, 'filter', 'location', 'boundary') expected = [ fires.Fire({'id': '1', 'activity': [{'active_areas': [{'specified_points':[{'lat': 40.0, 'lng': -80.0}]}]}]}), fires.Fire({'id': '2', 'activity': [{'active_areas': [{'specified_points':[{'lat': 45.0, 'lng': -81.0}, {'lat': 55.0, 'lng': -79.0}]}]}]}), fires.Fire({'id': '3', 'activity': [{'active_areas': [{'specified_points':[{'lat': 60.0, 'lng': -62.0}]}]}]}), fires.Fire({'id': '5', 'activity': [{'active_areas': [{'specified_points':[{'lat': 40.0, 'lng': -60.0}]}]}]}), fires.Fire({'id': '6', 'activity': [{'active_areas': [{'specified_points':[{'lat': 61.0, 'lng': -60.0}]}]}]}), fires.Fire({'id': '7', 'activity': [{'active_areas': [{'perimeter': {'polygon': [[-51,61], [-49, 61], [-49, 59], [-51, 59], [-51, 61]]}}]}]}), fires.Fire({'id': '10', 'activity': [{'active_areas': [{'specified_points': [{'lat': 40.0, 'lng': -80.0}]}]}]}) ] self.fm.filter_fires() assert self.fm.num_fires == 7 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id)) # squeeze ne lng Config().set({"ne": {"lat": 66.12, "lng": -55}, "sw": {"lat": -5.75,"lng": -110.5}}, 'filter', 'location', 'boundary') expected = [ fires.Fire({'id': '1', 'activity': [{'active_areas': [{'specified_points':[{'lat': 40.0, 'lng': -80.0}]}]}]}), fires.Fire({'id': '2', 'activity': [{'active_areas': [{'specified_points':[{'lat': 45.0, 'lng': -81.0}, {'lat': 55.0, 'lng': -79.0}]}]}]}), fires.Fire({'id': '3', 'activity': [{'active_areas': [{'specified_points':[{'lat': 60.0, 'lng': -62.0}]}]}]}), fires.Fire({'id': '5', 'activity': [{'active_areas': [{'specified_points':[{'lat': 40.0, 'lng': -60.0}]}]}]}), fires.Fire({'id': '6', 'activity': [{'active_areas': [{'specified_points':[{'lat': 61.0, 'lng': -60.0}]}]}]}), fires.Fire({'id': '10', 'activity': [{'active_areas': [{'specified_points': [{'lat': 40.0, 'lng': -80.0}]}]}]}) ] self.fm.filter_fires() assert self.fm.num_fires == 6 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id)) # squeeze ne lng Config().set({"ne": {"lat": 63.12, "lng": -61}, "sw": {"lat": 58.75,"lng": -62}}, 'filter', 'location', 'boundary') expected = [ fires.Fire({'id': '3', 'activity': [{'active_areas': [{'specified_points':[{'lat': 60.0, 'lng': -62.0}]}]}]}) ] self.fm.filter_fires() assert self.fm.num_fires == 1 assert expected == sorted(self.fm.fires, key=lambda e: int(e.id)) # squeeze out last fire Config().set({"ne": {"lat": 63.12, "lng": -61}, "sw": {"lat": 60.75,"lng": -62}}, 'filter', 'location', 'boundary') self.fm.filter_fires() assert self.fm.num_fires == 0 assert [] == sorted(self.fm.fires, key=lambda e: int(e.id)) # call again with no fires self.fm.filter_fires() assert self.fm.num_fires == 0 assert [] == sorted(self.fm.fires, key=lambda e: int(e.id))
def setup(self): self.fm = fires.FiresManager() self.init_fires = [ fires.Fire({'id': '01', 'name': 'n1', 'dfd':'a1', 'baz':'baz1'}), fires.Fire({'id': '02', 'name': 'n2', 'bar':'a1', 'baz':'baz1'}), fires.Fire({'id': '03', 'name': 'n3', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "ZZ"}, {'country': "ZZ"}]}]}), fires.Fire({'id': '04', 'name': 'n4', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "UK"}]}]}), fires.Fire({'id': '05', 'name': 'n5', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "USA"}]}]}), fires.Fire({'id': '06', 'name': 'n6', 'bar1': 1 , 'baz':'baz1', "activity": [{"active_areas": [{'country': ''}]}]}), fires.Fire({'id': '07', 'name': 'n7', 'bar2':'a2', 'baz':'baz2', "activity": [{"active_areas": [{'country': "CA"}]}]}), fires.Fire({'id': '08', 'name': 'n8', 'bar2':'adfsdf', 'baz':'baz2', "activity": [{"active_areas": [{'country': "CA"}]}]}), fires.Fire({'id': '09', 'name': 'n9', 'bar2': 2 , 'baz':'baz2', "activity": [{"active_areas": [{'country': 'Unknown'}]}]}), fires.Fire({'id': '10', 'name': 'n10', "barj": "jj", "baz": 99, "activity": [{"active_areas": [{"country": "USA"}]}]}), fires.Fire({'id': '11', 'name': 'n11', "barj": "jj", "baz": 99, "activity": [{"active_areas": [{"country": "BZ"}]}]}), fires.Fire({'id': '12', 'name': 'n3', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "ZZ"}]}, {"active_areas": [{'country': "UK"}]}]}), fires.Fire({'id': '13', 'name': 'n3', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "ZZ"}]}, {"active_areas": [{'country': "ZZ"}]}]}), # 14 is same as 12 exept the two active area objects are with the same activity object fires.Fire({'id': '14', 'name': 'n3.5', 'bar1':'a1', 'baz':'baz1', "activity": [{"active_areas": [{'country': "ZZ"}, {'country': "UK"}]}]}) ] self.fm.fires = self.init_fires assert self.fm.num_fires == 14
def setup(self): self.fm = fires.FiresManager() self.init_fires = [ fires.Fire({'id': '1', 'activity': [{'active_areas':[{'specified_points': [{'area': 45}]}]} ]}), fires.Fire({'id': '2', 'activity': [{'active_areas':[{'specified_points': [{'area': 55}, {'area': 40}]}]} ]}), fires.Fire({'id': '3', 'activity': [{'active_areas':[{'specified_points': [{'area': 55}]}]} ]}), fires.Fire({'id': '4', 'activity': [{'active_areas':[{'perimeter': {'area': 65}}]} ]}), fires.Fire({'id': '5', 'activity': [{'active_areas':[{'specified_points': [{'area': 85}]}]} ]}), fires.Fire({'id': '6', 'activity': [{'active_areas':[{'specified_points': [{'area': 75}], 'perimeter': {'area': 90}}]}]}), fires.Fire({'id': '7', 'activity': [{'active_areas':[{'specified_points': [{'area': 50}]}]} ]}), fires.Fire({'id': '8', 'activity': [{'active_areas':[{'specified_points': [{'area': 30}]}]} ]}), fires.Fire({'id': '9', 'activity': [ {'active_areas':[{'specified_points': [{'area': 45}]}]}, {'active_areas':[{'specified_points': [{'area': 40}]}]} ]}), fires.Fire({'id': '10', 'activity': [ {'active_areas':[{'specified_points': [{'area': 45}]}]}, {'active_areas':[{'perimeter': {'area': 65}}]} ]}), fires.Fire({'id': '11', 'activity': [{'active_areas':[{'specified_points': [{'area': 15}, {'area': 20}]}]} ]}) ] self.fm.fires = self.init_fires assert self.fm.num_fires == 11