Ejemplo n.º 1
0
 def test_create_trigger_fails_with_wrong_inputs(self):
     instance = self.factory(MockHttpClient)
     with self.assertRaises(AssertionError):
         instance.create_trigger(None,
                                 1527809375, [self._cond1, self._cond2],
                                 [geo.Point(13.6, 46.9)],
                                 alert_channels=None)
     with self.assertRaises(AssertionError):
         instance.create_trigger(1526809375,
                                 None, [self._cond1, self._cond2],
                                 [geo.Point(13.6, 46.9)],
                                 alert_channels=None)
     with self.assertRaises(ValueError):
         instance.create_trigger(1526809375,
                                 1327809375, [self._cond1, self._cond2],
                                 [geo.Point(13.6, 46.9)],
                                 alert_channels=None)
     with self.assertRaises(AssertionError):
         instance.create_trigger(1526809375,
                                 1527809375,
                                 None, [geo.Point(13.6, 46.9)],
                                 alert_channels=None)
     with self.assertRaises(ValueError):
         instance.create_trigger(1526809375,
                                 1527809375, [], [geo.Point(13.6, 46.9)],
                                 alert_channels=None)
     with self.assertRaises(AssertionError):
         instance.create_trigger(1526809375,
                                 1527809375, [self._cond1, self._cond2],
                                 None,
                                 alert_channels=None)
     with self.assertRaises(ValueError):
         instance.create_trigger(1526809375,
                                 1527809375, [self._cond1, self._cond2], [],
                                 alert_channels=None)
Ejemplo n.º 2
0
 def test_multipoint_from_points(self):
     expected = geo.MultiPoint([(34, -56.3), (35, 8), (36, 12)])
     list_of_points = [
         geo.Point(34, -56.3),
         geo.Point(35, 8),
         geo.Point(36, 12)]
     result = geo.MultiPoint.from_points(list_of_points)
     self.assertIsInstance(result, geo.MultiPoint)
     self.assertEqual(expected.as_dict(), result.as_dict())
Ejemplo n.º 3
0
 def test_polygon_from_points(self):
     expected = geo.Polygon([[[2.3, 57.32], [23.19, -20.2], [2.3, 57.32]]])
     list_of_lists = [[
         geo.Point(2.3, 57.32),
         geo.Point(23.19, -20.2),
         geo.Point(2.3, 57.32)
     ]]
     result = geo.Polygon.from_points(list_of_lists)
     self.assertIsInstance(result, geo.Polygon)
     self.assertEqual(expected.to_dict(), result.to_dict())
Ejemplo n.º 4
0
 def test_point_as_dict(self):
     expected = {
         "coordinates": [34, -56.3],
         "type": "Point"
     }
     point = geo.Point(34, -56.3)
     self.assertEqual(expected, point.as_dict())
Ejemplo n.º 5
0
 def test_get_alerts(self):
     cond = Condition('humidity', 'LESS_THAN', 10)
     alert1 = Alert('alert1', 'trigger1', [{
         "current_value": 263.576,
         "condition": cond
     }], {
         "lon": 37,
         "lat": 53
     }, 1481802090232)
     alert2 = Alert('alert2', 'trigger1', [{
         "current_value": 111.576,
         "condition": cond
     }], {
         "lon": 37,
         "lat": 53
     }, 1481802100000)
     alerts = [alert1, alert2]
     instance = Trigger(1526809375,
                        1527809375, [cond], [geo.Point(13.6, 46.9)],
                        alerts=alerts,
                        alert_channels=None)
     result = instance.get_alerts()
     self.assertTrue(isinstance(result, list))
     self.assertTrue(alert1 in result)
     self.assertTrue(alert2 in result)
Ejemplo n.º 6
0
 def test_bulding_points(self):
     the_dict = {"coordinates": [34, -56.3], "type": "Point"}
     expected = geo.Point(34, -56.3)
     result = geo.GeometryBuilder.build(the_dict)
     self.assertIsInstance(result, geo.Point)
     self.assertEqual(expected.lat, result.lat)
     self.assertEqual(expected.lon, result.lon)
Ejemplo n.º 7
0
 def test_point_from_dict(self):
     the_dict = {"coordinates": [34, -56.3], "type": "Point"}
     expected = geo.Point(34, -56.3)
     result = geo.Point.from_dict(the_dict)
     self.assertIsInstance(result, geo.Point)
     self.assertEqual(expected.lat, result.lat)
     self.assertEqual(expected.lon, result.lon)
 def test_to_dict(self):
     cond = Condition('humidity', 'LESS_THAN', 10)
     instance = Trigger(1526809375,
                        1527809375, [cond], [geo.Point(13.6, 46.9)],
                        alerts=[],
                        alert_channels=None,
                        id='myid')
     result = instance.to_dict()
     self.assertIsInstance(result, dict)
     self.assertEqual('myid', result['id'])
     self.assertEqual(1526809375, result['start_after_millis'])
     self.assertEqual(1527809375, result['end_after_millis'])
     self.assertEqual([dict(name='OWM API POLLING')],
                      result['alert_channels'])
     self.assertEqual(list(), result['alerts'])
     self.assertEqual([{
         'type': 'Point',
         'coordinates': [13.6, 46.9]
     }], result['area'])
     self.assertEqual([{
         'id': None,
         'weather_param': 'humidity',
         'operator': 'LESS_THAN',
         'amount': 10
     }], result['conditions'])
Ejemplo n.º 9
0
 def test_point_geojson(self):
     expected = {
         "coordinates": [34, -56.3],
         "type": "Point"
     }
     point = geo.Point(34, -56.3)
     self.assertEqual(sorted(json.dumps(expected)),
                      sorted(point.geojson()))
Ejemplo n.º 10
0
 def test_create_trigger(self):
     instance = self.factory(MockHttpClient)
     result = instance.create_trigger(1526809375,
                                      1527809375,
                                      [self._cond1, self._cond2],
                                      [geo.Point(13.6, 46.9)],
                                      alert_channels=None)
     self.assertIsInstance(result, Trigger)
 def test_repr(self):
     instance = Trigger(1526809375,
                        1527809375,
                        [Condition('humidity', 'LESS_THAN', 10)],
                        [geo.Point(13.6, 46.9)],
                        alerts=None,
                        alert_channels=None)
     print(instance)
 def test_init(self):
     alert_channels = [AlertChannelsEnum.items()]
     instance = Trigger(1526809375,
                        1527809375,
                        [Condition('humidity', 'LESS_THAN', 10)],
                        [geo.Point(13.6, 46.9)],
                        alerts=None,
                        alert_channels=alert_channels)
     self.assertEqual(instance.alert_channels, alert_channels)
Ejemplo n.º 13
0
    def to_geopoint(self):
        """
        Returns the geoJSON compliant representation of the place for this One Call

        :returns: a ``pyowm.utils.geo.Point`` instance

        """
        if self.lon is None or self.lat is None:
            return None
        return geo.Point(self.lon, self.lat)
Ejemplo n.º 14
0
 def test_defaulted_parameters(self):
     instance = Trigger(1526809375,
                        1527809375,
                        [Condition('humidity', 'LESS_THAN', 10)],
                        [geo.Point(13.6, 46.9)],
                        alerts=None,
                        alert_channels=None)
     self.assertIsInstance(instance.alerts, list)
     self.assertEqual(0, len(instance.alerts))
     self.assertIsInstance(instance.alert_channels, list)
     self.assertEqual(1, len(instance.alert_channels))
     self.assertEqual(instance.alert_channels[0],
                      AlertChannelsEnum.OWM_API_POLLING)
Ejemplo n.º 15
0
    def test_get_alerts_since(self):
        cond = Condition('humidity', 'LESS_THAN', 10)
        alert1 = Alert('alert1', 'trigger1', [{
            "current_value": 263.576,
            "condition": cond
        }], {
            "lon": 37,
            "lat": 53
        }, 1000)
        alert2 = Alert('alert2', 'trigger1', [{
            "current_value": 111.576,
            "condition": cond
        }], {
            "lon": 37,
            "lat": 53
        }, 3000)
        alert3 = Alert('alert3', 'trigger1', [{
            "current_value": 119.332,
            "condition": cond
        }], {
            "lon": 37,
            "lat": 53
        }, 9000)
        alert4 = Alert('alert4', 'trigger1', [{
            "current_value": 119.332,
            "condition": cond
        }], {
            "lon": 37,
            "lat": 53
        }, 12000)
        alerts = [alert1, alert2, alert3, alert4]
        instance = Trigger(1526809375,
                           1527809375, [cond], [geo.Point(13.6, 46.9)],
                           alerts=alerts,
                           alert_channels=None)

        result = instance.get_alerts_since(4000)
        self.assertEqual(2, len(result))
        self.assertTrue(alert3 in result)
        self.assertTrue(alert4 in result)

        result = instance.get_alerts_since(3000)
        self.assertEqual(3, len(result))
        self.assertTrue(alert2 in result)
        self.assertTrue(alert3 in result)
        self.assertTrue(alert4 in result)

        result = instance.get_alerts_since(15000)
        self.assertEqual(0, len(result))
Ejemplo n.º 16
0
 def test_get_alert(self):
     cond = Condition('humidity', 'LESS_THAN', 10)
     alert = Alert('alert1', 'trigger1', [{
         "current_value": 263.576,
         "condition": cond
     }], {
         "lon": 37,
         "lat": 53
     }, 1481802090232)
     alerts = [alert]
     instance = Trigger(1526809375,
                        1527809375, [cond], [geo.Point(13.6, 46.9)],
                        alerts=alerts,
                        alert_channels=None)
     self.assertEqual(alert, instance.get_alert('alert1'))
Ejemplo n.º 17
0
    def test_get_alerts_on(self):
        cond1 = Condition('humidity', 'LESS_THAN', 10)
        cond2 = Condition('temp', 'GREATER_THAN_EQUAL', 100.6)
        alert1 = Alert('alert1', 'trigger1', [{
            "current_value": 8.576,
            "condition": cond1
        }], {
            "lon": 37,
            "lat": 53
        }, 1000)
        alert2 = Alert('alert2', 'trigger1', [{
            "current_value": 111.576,
            "condition": cond2
        }], {
            "lon": 37,
            "lat": 53
        }, 3000)
        alert3 = Alert('alert3', 'trigger1', [{
            "current_value": 119.332,
            "condition": cond2
        }], {
            "lon": 37,
            "lat": 53
        }, 9000)
        alert4 = Alert('alert4', 'trigger1', [{
            "current_value": 7.332,
            "condition": cond1
        }], {
            "lon": 37,
            "lat": 53
        }, 12000)
        alerts = [alert1, alert2, alert3, alert4]
        instance = Trigger(1526809375,
                           1527809375, [cond1, cond2], [geo.Point(13.6, 46.9)],
                           alerts=alerts,
                           alert_channels=None)
        result = instance.get_alerts_on('temp')
        self.assertEqual(2, len(result))
        self.assertTrue(alert2 in result)
        self.assertTrue(alert3 in result)

        result = instance.get_alerts_on('humidity')
        self.assertEqual(2, len(result))
        self.assertTrue(alert1 in result)
        self.assertTrue(alert4 in result)

        result = instance.get_alerts_on('wind_direction')
        self.assertEqual(0, len(result))
    def test_get_alert(self):
        cond = Condition('humidity', 'LESS_THAN', 10)
        alert = Alert('alert1', 'trigger1', [{
            "current_value": 263.576,
            "condition": cond
        }], {
            "lon": 37,
            "lat": 53
        }, 1481802090232)
        alert_two = copy.deepcopy(alert)
        alert_two.id = 'alert_two'
        alerts = [alert_two, alert
                  ]  # Second alert has to be 1st element to have full coverage
        instance = Trigger(1526809375,
                           1527809375, [cond], [geo.Point(13.6, 46.9)],
                           alerts=alerts,
                           alert_channels=None)
        self.assertEqual(alert, instance.get_alert('alert1'))

        # Trigger without alerts
        instance.alerts = []
        self.assertIsNone(instance.get_alert(alert_id='alert1'))
Ejemplo n.º 19
0
def weather_alerts(owm_api, lat, lng):
    owm_obj = OWM(owm_api)
    am = owm_obj.alert_manager()

    # available types: Point, MultiPoint, Polygon, MultiPolygon
    geom_1 = geo.Point(lng, lat)

    # TBD: Alert should be cast over a wide area.
    # Alerts will have far reaching effects.
    #geom_1.geojson()
    #'''
    #{
    #  "type": "Point",
    #  "coordinates":[ lon, lat ]
    #}
    #'''
    # Pune - Mumbai - Satara - Pune
    # Indore - Nagpur - Hyderabad - Indore
    #geom_2 = geo.MultiPolygon([[73.856743, 18.520430], [72.877655, 19.075983]])

    # -- conditions --
    condition_1 = Condition(WeatherParametersEnum.TEMPERATURE,
                        OperatorsEnum.GREATER_THAN,
                        310.15)  # kelvin, 35C
    condition_2 = Condition(WeatherParametersEnum.CLOUDS,
                        OperatorsEnum.GREATER_THAN,
                        60) # clouds % coverage

    # create a trigger
    trigger = am.create_trigger(start_after_millis=355000, end_after_millis=487000,\
                            conditions=[condition_1, condition_2],\
                            area=[geom_1],\
                            alert_channel=AlertChannelsEnum.OWM_API_POLLING)

    # read all triggers
    triggers_list = am.get_triggers()
    print("Read all Weather triggers: {}".format(triggers_list))
Ejemplo n.º 20
0
class TestAlertManager(unittest.TestCase):
    _cond1 = Condition('humidity', 'LESS_THAN', 10)
    _cond2 = Condition('temp', 'GREATER_THAN_EQUAL', 100.6)
    _trigger = Trigger(1526809375,
                       1527809375, [_cond1, _cond2], [geo.Point(13.6, 46.9)],
                       alerts=[],
                       alert_channels=None,
                       id='trigger-id')
    _alert = Alert('alert1', 'trigger1', [{
        "current_value": 263.576,
        "condition": _cond1
    }], {
        "lon": 37,
        "lat": 53
    }, 1481802090232)

    def factory(self, _kls):
        sm = AlertManager('APIKey')
        sm.http_client = _kls()
        return sm

    def test_instantiation_fails_without_api_key(self):
        self.assertRaises(AssertionError, AlertManager, None)

    def test_get_alert_api_version(self):
        instance = AlertManager('APIKey')
        result = instance.alert_api_version()
        self.assertIsInstance(result, tuple)
        self.assertEqual(result, ALERT_API_VERSION)

    def test_get_triggers(self):
        instance = self.factory(MockHttpClientTwoTriggers)
        results = instance.get_triggers()
        self.assertEqual(2, len(results))
        t = results[0]
        self.assertIsInstance(t, Trigger)

    def test_get_trigger_fails_with_wrong_input(self):
        instance = AlertManager('APIKey')
        with self.assertRaises(AssertionError):
            instance.get_trigger(None)
        with self.assertRaises(AssertionError):
            instance.get_trigger(123)

    def test_get_trigger(self):
        instance = self.factory(MockHttpClientOneTrigger)
        result = instance.get_trigger('any-id')
        self.assertIsInstance(result, Trigger)

    def test_create_trigger(self):
        instance = self.factory(MockHttpClient)
        result = instance.create_trigger(1526809375,
                                         1527809375,
                                         [self._cond1, self._cond2],
                                         [geo.Point(13.6, 46.9)],
                                         alert_channels=None)
        self.assertIsInstance(result, Trigger)

    def test_create_trigger_fails_with_wrong_inputs(self):
        instance = self.factory(MockHttpClient)
        with self.assertRaises(AssertionError):
            instance.create_trigger(None,
                                    1527809375, [self._cond1, self._cond2],
                                    [geo.Point(13.6, 46.9)],
                                    alert_channels=None)
        with self.assertRaises(AssertionError):
            instance.create_trigger(1526809375,
                                    None, [self._cond1, self._cond2],
                                    [geo.Point(13.6, 46.9)],
                                    alert_channels=None)
        with self.assertRaises(ValueError):
            instance.create_trigger(1526809375,
                                    1327809375, [self._cond1, self._cond2],
                                    [geo.Point(13.6, 46.9)],
                                    alert_channels=None)
        with self.assertRaises(AssertionError):
            instance.create_trigger(1526809375,
                                    1527809375,
                                    None, [geo.Point(13.6, 46.9)],
                                    alert_channels=None)
        with self.assertRaises(ValueError):
            instance.create_trigger(1526809375,
                                    1527809375, [], [geo.Point(13.6, 46.9)],
                                    alert_channels=None)
        with self.assertRaises(AssertionError):
            instance.create_trigger(1526809375,
                                    1527809375, [self._cond1, self._cond2],
                                    None,
                                    alert_channels=None)
        with self.assertRaises(ValueError):
            instance.create_trigger(1526809375,
                                    1527809375, [self._cond1, self._cond2], [],
                                    alert_channels=None)

    def test_delete_trigger_fails_with_wrong_input(self):
        instance = AlertManager('APIKey')
        with self.assertRaises(AssertionError):
            instance.delete_trigger(None)
        with self.assertRaises(AssertionError):
            self._trigger.id = 123
            instance.delete_trigger(self._trigger)

    def test_delete_trigger(self):
        instance = self.factory(MockHttpClient)
        parser = TriggerParser()
        trigger = parser.parse_JSON(MockHttpClient.test_trigger_json)
        result = instance.delete_trigger(trigger)
        self.assertIsNone(result)

    def test_update_trigger_fails_with_wrong_input(self):
        instance = AlertManager('APIKey')
        with self.assertRaises(AssertionError):
            instance.update_trigger(None)
        with self.assertRaises(AssertionError):
            self._trigger.id = 123
            instance.update_trigger(self._trigger)

    def test_update_trigger(self):
        instance = self.factory(MockHttpClient)
        parser = TriggerParser()
        modified_trigger = parser.parse_JSON(MockHttpClient.test_trigger_json)
        modified_trigger.id = '5852816a9aaacb00153134a3'
        modified_trigger.end = self._trigger.end_after_millis + 10000
        result = instance.update_trigger(modified_trigger)
        self.assertIsNone(result)

    def test_get_alerts_for_fails_with_wrong_input(self):
        instance = AlertManager('APIKey')
        with self.assertRaises(AssertionError):
            instance.get_alerts_for(None)
        with self.assertRaises(AssertionError):
            self._trigger.id = 123
            instance.get_alerts_for(self._trigger)

    def test_get_alerts_for(self):
        instance = self.factory(MockHttpClientTwoAlerts)
        self._trigger.id = 'trigger-id'
        results = instance.get_alerts_for(self._trigger)
        self.assertEqual(2, len(results))
        self.assertIsInstance(results[0], Alert)
        self.assertIsInstance(results[1], Alert)

    def test_get_alert_fails_with_wrong_input(self):
        instance = AlertManager('APIKey')
        with self.assertRaises(AssertionError):
            instance.get_alert(None, self._trigger)
        with self.assertRaises(AssertionError):
            instance.get_alert(123, self._trigger)
        with self.assertRaises(AssertionError):
            instance.get_alert('alert-id', None)
        with self.assertRaises(AssertionError):
            self._trigger.id = 123
            instance.get_alert('alert-id', self._trigger)

    def test_get_alert(self):
        self._trigger.id = 'trigger-id'
        instance = self.factory(MockHttpClientOneAlert)
        result = instance.get_alert('alert-id', self._trigger)
        self.assertIsInstance(result, Alert)

    def test_delete_all_alerts_for_fails_with_wrong_input(self):
        instance = AlertManager('APIKey')
        with self.assertRaises(AssertionError):
            instance.delete_all_alerts_for(None)
        with self.assertRaises(AssertionError):
            self._trigger.id = 123
            instance.delete_all_alerts_for(self._trigger)

    def test_delete_all_alerts_for(self):
        instance = self.factory(MockHttpClientTwoAlerts)
        result = instance.delete_all_alerts_for(self._trigger)
        self.assertIsNone(result)

    def test_delete_alert_fails_with_wrong_input(self):
        instance = AlertManager('APIKey')
        with self.assertRaises(AssertionError):
            instance.delete_alert(None)
        with self.assertRaises(AssertionError):
            self._alert.id = 123
            instance.delete_alert(self._alert)
        self._alert.id = 'alert-id'
        self._alert.trigger_id = None
        with self.assertRaises(AssertionError):
            instance.delete_alert(self._alert)
        self._alert.trigger_id = 789
        with self.assertRaises(AssertionError):
            instance.delete_alert(self._alert)

    def test_delete_alert(self):
        instance = self.factory(MockHttpClientOneAlert)
        result = instance.delete_alert(self._alert)
        self.assertIsNone(result)
Ejemplo n.º 21
0
 def test_point_properties(self):
     lon = -56.3
     lat = 34
     point = geo.Point(lon, lat)
     self.assertEqual(lon, point.lon)
     self.assertEqual(lat, point.lat)
Ejemplo n.º 22
0
    def test_trigger_fails_with_wrong_parameters(self):
        start_after_millis = 450000
        end_after_millis = 470000
        conditions = [Condition('humidity', 'LESS_THAN', 10)]
        area = [geo.Point(13.6, 46.9)]

        self.assertRaises(AssertionError,
                          Trigger,
                          None,
                          end_after_millis,
                          conditions,
                          area,
                          alerts=None,
                          alert_channels=None,
                          id=None)
        self.assertRaises(AssertionError,
                          Trigger,
                          start_after_millis,
                          None,
                          conditions,
                          area,
                          alerts=None,
                          alert_channels=None,
                          id=None)
        self.assertRaises(AssertionError,
                          Trigger,
                          'test',
                          end_after_millis,
                          conditions,
                          area,
                          alerts=None,
                          alert_channels=None,
                          id=None)
        self.assertRaises(AssertionError,
                          Trigger,
                          start_after_millis,
                          'test',
                          conditions,
                          area,
                          alerts=None,
                          alert_channels=None,
                          id=None)
        self.assertRaises(ValueError,
                          Trigger,
                          end_after_millis,
                          start_after_millis,
                          conditions,
                          area,
                          alerts=None,
                          alert_channels=None,
                          id=None)

        self.assertRaises(AssertionError,
                          Trigger,
                          start_after_millis,
                          end_after_millis,
                          None,
                          area,
                          alerts=None,
                          alert_channels=None,
                          id=None)
        self.assertRaises(ValueError,
                          Trigger,
                          start_after_millis,
                          end_after_millis, [],
                          area,
                          alerts=None,
                          alert_channels=None,
                          id=None)

        self.assertRaises(AssertionError,
                          Trigger,
                          start_after_millis,
                          end_after_millis,
                          conditions,
                          None,
                          alerts=None,
                          alert_channels=None,
                          id=None)
        self.assertRaises(ValueError,
                          Trigger,
                          start_after_millis,
                          end_after_millis,
                          conditions, [],
                          alerts=None,
                          alert_channels=None,
                          id=None)

        _ = Trigger(start_after_millis,
                    end_after_millis,
                    conditions,
                    area,
                    alerts=None,
                    alert_channels=None)