Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
 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"]
Beispiel #4
0
    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))
Beispiel #5
0
 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))
Beispiel #6
0
    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
Beispiel #7
0
 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))
Beispiel #8
0
    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))
Beispiel #9
0
    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
Beispiel #10
0
 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))
Beispiel #11
0
    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
Beispiel #12
0
    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')
Beispiel #13
0
    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))
Beispiel #14
0
    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
Beispiel #15
0
 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
Beispiel #16
0
    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
Beispiel #17
0
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
Beispiel #18
0
    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
Beispiel #19
0
 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
Beispiel #20
0
 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
Beispiel #21
0
    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))
Beispiel #22
0
 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
Beispiel #23
0
 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