def test_convert_float_to_nice_number_it(self):
     for number, number_str in NUMBERS_FIXTURE_IT.items():
         self.assertEqual(nice_number(number, lang="it-it"),
                          number_str,
                          'should format {} as {} and not {}'.format(
                              number, number_str, nice_number(
                                  number, lang="it-it")))
Example #2
0
    def handle_windy(self, message):
        report = self.__initialize_report(message)

        when = extract_datetime(message.data.get('utterance'))[0]
        if when == extract_datetime(" ")[0]:
            weather = self.owm.weather_at_place(
                report['full_location'],
                report['lat'],
                report['lon']).get_weather()
        else:
            # Get forecast for that day
            weather = self.__get_forecast(
                when, report['full_location'], report['lat'], report['lon'])
        if not weather or weather.get_wind() == 0:
            self.speak_dialog("do not know")
            return

        wind = weather.get_wind()

        speed = wind["speed"]
        # get speed
        if self.__get_speed_unit() == "mph":
            speed *= 2.23694
            unit = self.__translate("miles per hour")
        else:
            unit = self.__translate("meters per second")
        speed = round(speed)

        # get direction, convert compass degrees to named direction
        if "deg" in wind:
            deg = wind["deg"]
            if deg < 22.5:
                dir = "N"
            elif deg < 67.5:
                dir = "NE"
            elif deg < 112.5:
                dir = "E"
            elif deg < 157.5:
                dir = "SE"
            elif deg < 202.5:
                dir = "S"
            elif deg < 247.5:
                dir = "SW"
            elif deg < 292.5:
                dir = "W"
            elif deg < 337.5:
                dir = "NW"
            else:
                dir = "N"
            dir = self.__translate(dir)
            value = self.__translate("wind.speed.dir",
                                     data={"dir": dir,
                                           "speed": nice_number(speed),
                                           "unit": unit})
        else:
            value = self.__translate("wind.speed",
                                     data={"speed": nice_number(speed),
                                           "unit": unit})

        self.__report_condition(self.__translate("winds"), value, when)
Example #3
0
 def test_unknown_language(self):
     """ An unknown / unhandled language should return the string
         representation of the input number.
     """
     self.assertEqual(
         nice_number(5.5, lang='as-fd'), '5.5',
         'should format 5.5 as 5.5 not {}'.format(
             nice_number(5.5, lang='as-df')))
Example #4
0
 def test_no_speech(self):
     self.assertEqual(nice_number(6.777, speech=False, lang="it"),
                      '6 7/9',
                      'dovrebbe formattare 6.777 come 6 7/9 non {}'.format(
                          nice_number(6.777, speech=False)))
     self.assertEqual(nice_number(6.0, speech=False, lang="it"),
                      '6',
                      'dovrebbe formattare 6.0 come 6 non {}'.format(
                          nice_number(6.0, speech=False)))
 def test_no_speech(self):
     self.assertEqual(
         nice_number(6.777, speech=False, lang="it"), '6 7/9',
         'dovrebbe formattare 6.777 come 6 7/9 non {}'.format(
             nice_number(6.777, speech=False)))
     self.assertEqual(
         nice_number(6.0, speech=False, lang="it"), '6',
         'dovrebbe formattare 6.0 come 6 non {}'.format(
             nice_number(6.0, speech=False)))
 def test_specify_denominator(self):
     self.assertEqual(
         nice_number(5.5, lang="hu-hu", denominators=[1, 2, 3]), '5 és fél',
         'should format 5.5 as 5 és fél not {}'.format(
             nice_number(5.5, denominators=[1, 2, 3])))
     self.assertEqual(
         nice_number(2.333, lang="hu-hu", denominators=[1, 2]), '2,333',
         'should format 2,333 as 2,333 not {}'.format(
             nice_number(2.333, lang="hu-hu", denominators=[1, 2])))
Example #7
0
 def test_specify_denominator(self):
     self.assertEqual(nice_number(5.5, denominators=[1, 2, 3]),
                      '5 and a half',
                      'should format 5.5 as 5 and a half not {}'.format(
                      nice_number(5.5, denominators=[1, 2, 3])))
     self.assertEqual(nice_number(2.333, denominators=[1, 2]),
                      '2.333',
                      'should format 2.333 as 2.333 not {}'.format(
                      nice_number(2.333, denominators=[1, 2])))
Example #8
0
 def test_no_speech(self):
     self.assertEqual(nice_number(6.777, speech=False),
                      '6 7/9',
                      'should format 6.777 as 6 7/9 not {}'.format(
                      nice_number(6.777, speech=False)))
     self.assertEqual(nice_number(6.0, speech=False),
                      '6',
                      'should format 6.0 as 6 not {}'.format(
                      nice_number(6.0, speech=False)))
Example #9
0
 def test_no_speech(self):
     self.assertEqual(nice_number(6.777, speech=False),
                      '6 7/9',
                      'should format 6.777 as 6 7/9 not {}'.format(
                          nice_number(6.777, speech=False)))
     self.assertEqual(nice_number(6.0, speech=False),
                      '6',
                      'should format 6.0 as 6 not {}'.format(
                          nice_number(6.0, speech=False)))
Example #10
0
 def test_specify_denominator(self):
     self.assertEqual(nice_number(5.5, denominators=[1, 2, 3]),
                      '5 and a half',
                      'should format 5.5 as 5 and a half not {}'.format(
                          nice_number(5.5, denominators=[1, 2, 3])))
     self.assertEqual(nice_number(2.333, denominators=[1, 2]),
                      '2.333',
                      'should format 2.333 as 2.333 not {}'.format(
                          nice_number(2.333, denominators=[1, 2])))
 def test_specify_denominator_es(self):
     self.assertEqual(
         nice_number(5.5, lang="es-es", denominators=[1, 2, 3]),
         '5 y medio', 'should format 5.5 as 5 y medio not {}'.format(
             nice_number(5.5, lang="es-es", denominators=[1, 2, 3])))
     self.assertEqual(
         nice_number(2.333, lang="es-es", denominators=[1, 2]), '2,333',
         'should format 2.333 as 2,333 not {}'.format(
             nice_number(2.333, lang="es-es", denominators=[1, 2])))
Example #12
0
 def test_specify_danominator(self):
     self.assertEqual(
         nice_number(5.5, lang="da-dk", denominators=[1, 2, 3]),
         '5 og 1 halv', 'should format 5.5 as 5 und ein halb not {}'.format(
             nice_number(5.5, denominators=[1, 2, 3])))
     self.assertEqual(
         nice_number(2.333, lang="da-dk", denominators=[1, 2]), '2,333',
         'should format 2,333 as 2,333 not {}'.format(
             nice_number(2.333, lang="da-dk", denominators=[1, 2])))
Example #13
0
 def test_specify_denominator(self):
     self.assertEqual(nice_number(5.5, lang="nl-nl",
                                  denominators=[1, 2, 3]), '5 en één half',
                      'should format 5.5 as 5 en één half not {}'.format(
                          nice_number(5.5, denominators=[1, 2, 3])))
     self.assertEqual(nice_number(2.333, lang="nl-nl", denominators=[1, 2]),
                      '2,333',
                      'should format 2,333 as 2,333 not {}'.format(
                          nice_number(2.333, lang="nl-nl",
                                      denominators=[1, 2])))
Example #14
0
 def test_specify_denominator(self):
     self.assertEqual(
         nice_number(5.5, lang="nl-nl", denominators=[1, 2,
                                                      3]), '5 en één half',
         'should format 5.5 as 5 en één half not {}'.format(
             nice_number(5.5, denominators=[1, 2, 3])))
     self.assertEqual(
         nice_number(2.333, lang="nl-nl", denominators=[1, 2]), '2,333',
         'should format 2,333 as 2,333 not {}'.format(
             nice_number(2.333, lang="nl-nl", denominators=[1, 2])))
Example #15
0
 def test_specify_denominator(self):
     self.assertEqual(nice_number(5.5, lang="de-de",
                                  denominators=[1, 2, 3]), '5 und ein halb',
                      'should format 5.5 as 5 und ein halb not {}'.format(
                          nice_number(5.5, denominators=[1, 2, 3])))
     self.assertEqual(nice_number(2.333, lang="de-de", denominators=[1, 2]),
                      '2,333',
                      'should format 2,333 as 2,333 not {}'.format(
                          nice_number(2.333, lang="de-de",
                                      denominators=[1, 2])))
Example #16
0
 def test_specify_denominator(self):
     self.assertEqual(nice_number(5.5, lang="hu-hu",
                                  denominators=[1, 2, 3]), '5 és fél',
                      'should format 5.5 as 5 és fél not {}'.format(
                          nice_number(5.5, denominators=[1, 2, 3])))
     self.assertEqual(nice_number(2.333, lang="hu-hu", denominators=[1, 2]),
                      '2,333',
                      'should format 2,333 as 2,333 not {}'.format(
                          nice_number(2.333, lang="hu-hu",
                                      denominators=[1, 2])))
 def test_specify_denominator(self):
     self.assertEqual(
         nice_number(5.5, denominators=[1, 2, 3],
                     lang="it"), '5 e un mezzo',
         'dovrebbe dare 5.5 come 5 e un mezzo non {}'.format(
             nice_number(5.5, denominators=[1, 2, 3], lang="it")))
     self.assertEqual(
         nice_number(2.333, denominators=[1, 2], lang="it"), '2.333',
         'dovrebbe dare 2.333 come 2.333 non {}'.format(
             nice_number(2.333, denominators=[1, 2], lang="it")))
Example #18
0
 def test_specify_denominator(self):
     self.assertEqual(nice_number(5.5, denominators=[1, 2, 3],
                                  lang="it"), '5 e un mezzo',
                      'dovrebbe dare 5.5 come 5 e un mezzo non {}'.format(
                          nice_number(5.5, denominators=[1, 2, 3],
                                      lang="it")))
     self.assertEqual(nice_number(2.333, denominators=[1, 2],
                                  lang="it"), '2.333',
                      'dovrebbe dare 2.333 come 2.333 non {}'.format(
                          nice_number(2.333, denominators=[1, 2],
                                      lang="it")))
Example #19
0
 def test_specify_denominator_fr(self):
     self.assertEqual(nice_number(5.5, lang="fr-fr",
                                  denominators=[1, 2, 3]),
                      '5 et demi',
                      'should format 5.5 as 5 et demi not {}'.format(
                          nice_number(5.5, lang="fr-fr",
                                      denominators=[1, 2, 3])))
     self.assertEqual(nice_number(2.333, lang="fr-fr",
                                  denominators=[1, 2]),
                      '2,333',
                      'should format 2.333 as 2,333 not {}'.format(
                          nice_number(2.333, lang="fr-fr",
                                      denominators=[1, 2])))
Example #20
0
 def test_specify_denominator_fr(self):
     self.assertEqual(nice_number(5.5, lang="fr-fr",
                                  denominators=[1, 2, 3]),
                      '5 et demi',
                      'should format 5.5 as 5 et demi not {}'.format(
                          nice_number(5.5, lang="fr-fr",
                                      denominators=[1, 2, 3])))
     self.assertEqual(nice_number(2.333, lang="fr-fr",
                                  denominators=[1, 2]),
                      '2,333',
                      'should format 2.333 as 2,333 not {}'.format(
                          nice_number(2.333, lang="fr-fr",
                                      denominators=[1, 2])))
Example #21
0
 def test_specify_denominator_es(self):
     self.assertEqual(nice_number(5.5, lang="es-es",
                                  denominators=[1, 2, 3]),
                      '5 y medio',
                      'should format 5.5 as 5 y medio not {}'.format(
                          nice_number(5.5, lang="es-es",
                                      denominators=[1, 2, 3])))
     self.assertEqual(nice_number(2.333, lang="es-es",
                                  denominators=[1, 2]),
                      '2,333',
                      'should format 2.333 as 2,333 not {}'.format(
                          nice_number(2.333, lang="es-es",
                                      denominators=[1, 2])))
Example #22
0
    def handle_heating_wiser_boost(self, message):
        LOGGER.info(message.data)
        my_room = message.data["wiserroom"].lower()
        myparams = ""
        try:
            mytemp = message.data["wisertemp"]
        except KeyError:
            mytemp = 2
        else:
            mytemp = round(float(mytemp)*2)/2
        myparams += ",{} deg ".format(str(mytemp))
        try:
            mytime = int(message.data['wisertime'])
        except KeyError:
            mytime = 30
        myparams += ",{} mins ".format(str(mytime))

        logresponse = ""
        try:
            self.wh.refreshData()
        except ValueError as e:
            LOGGER.error(e)
            self.speak_dialog('heating.wiser.lostcomms')		
            self._setup()			
        else:
            wiserrooms = self.wh.getRooms()
            my_room = self.match_room(my_room, wiserrooms) # get the nearest matching room
            for room in wiserrooms:
                name = room.get("Name").lower()
                roomId = room.get("id")
                if my_room == self.my_house or name == my_room:
                    if mytemp == 2:
                        dtemp = float(room.get("CalculatedTemperature")/10 +2)
                        settemp = dtemp
                    else:
                        settemp = mytemp
                    #LOGGER.info("boost: id:{} {} {}".format(roomId,settemp,mytime))
                    try:
                        self.wh.setRoomMode(roomId,"boost",settemp,mytime)
                    except ValueError as e:
                        LOGGER.error("boost: {}".format(e))
                    except AttributeError:
                        self.speak_dialog('heating.wiser.lostcomms')
                        self._setup()			
                    else:
                        nice_settemp = nice_number(settemp, lang=None, speech=True, denominators=None)
                        self.speak_dialog('heating.wiser.boost', 
                            {"wiserroom": name, "wisertemp": nice_settemp, "wisertime": int(mytime)})
                        logresponse += "{} ".format(name)
            logresponse += myparams
            logresponse = logresponse.replace('2 deg','+2 deg')
            LOGGER.info("boost: {}".format(logresponse))
            if logresponse == "":
                self.speak_dialog('heating.wiser.unknown.room', {
                                  "wiserroom": my_room})
Example #23
0
    def _handle_sensor(self, message):
        entity = message.data["Entity"]
        self.log.debug("Entity: %s" % entity)

        ha_entity = self._find_entity(entity, ['sensor', 'switch'])
        if not ha_entity or not self._check_availability(ha_entity):
            return

        entity = ha_entity['id']

        # IDEA: set context for 'read it out again' or similar
        # self.set_context('Entity', ha_entity['dev_name'])

        unit_measurement = self.ha.find_entity_attr(entity)
        sensor_unit = unit_measurement.get('unit_measure') or ''

        sensor_name = unit_measurement['name']
        sensor_state = unit_measurement['state']
        # extract unit for correct pronounciation
        # this is fully optional
        try:
            from quantulum3 import parser
            quantulumImport = True
        except ImportError:
            quantulumImport = False

        if quantulumImport and unit_measurement != '':
            quantity = parser.parse(
                (u'{} is {} {}'.format(sensor_name, sensor_state,
                                       sensor_unit)))
            if len(quantity) > 0:
                quantity = quantity[0]
                if (quantity.unit.name != "dimensionless"
                        and (quantity.uncertainty is None
                             or quantity.uncertainty <= 0.5)):
                    sensor_unit = quantity.unit.name
                    sensor_state = quantity.value

        try:
            value = float(sensor_state)
            sensor_state = nice_number(value, lang=self.language)
        except ValueError:
            pass

        self.speak_dialog('homeassistant.sensor',
                          data={
                              "dev_name": sensor_name,
                              "value": sensor_state,
                              "unit": sensor_unit
                          })
 def test_no_speech_es(self):
     self.assertEqual(
         nice_number(6.777, lang="es-es", speech=False), '6 7/9',
         'should format 6.777 as 6 7/9 not {}'.format(
             nice_number(6.777, lang="es-es", speech=False)))
     self.assertEqual(
         nice_number(6.0, lang="es-es", speech=False), '6',
         'should format 6.0 as 6 not {}'.format(
             nice_number(6.0, lang="es-es", speech=False)))
     self.assertEqual(
         nice_number(1234567890, lang="es-es", speech=False),
         '1 234 567 890', 'should format 1234567890 as'
         '1 234 567 890 not {}'.format(
             nice_number(1234567890, lang="es-es", speech=False)))
     self.assertEqual(
         nice_number(12345.6789, lang="es-es", speech=False), '12 345,679',
         'should format 12345.6789 as'
         '12 345,679 not {}'.format(
             nice_number(12345.6789, lang="es-es", speech=False)))
Example #25
0
 def test_no_speech_es(self):
     self.assertEqual(nice_number(6.777, lang="es-es", speech=False),
                      '6 7/9',
                      'should format 6.777 as 6 7/9 not {}'.format(
                          nice_number(6.777, lang="es-es", speech=False)))
     self.assertEqual(nice_number(6.0, lang="es-es", speech=False),
                      '6',
                      'should format 6.0 as 6 not {}'.format(
                          nice_number(6.0, lang="es-es", speech=False)))
     self.assertEqual(nice_number(1234567890, lang="es-es", speech=False),
                      '1 234 567 890',
                      'should format 1234567890 as'
                      '1 234 567 890 not {}'.format(
                          nice_number(1234567890, lang="es-es",
                                      speech=False)))
     self.assertEqual(nice_number(12345.6789, lang="es-es", speech=False),
                      '12 345,679',
                      'should format 12345.6789 as'
                      '12 345,679 not {}'.format(
                          nice_number(12345.6789, lang="es-es",
                                      speech=False)))
Example #26
0
    def handle_movie_information(self, message):
        """ Gets the short version and adds the TagLine for good measure.
		"""
        movie = message.data.get("movie")
        try:
            movieDetails = MOVIE.details(MOVIE.search(movie)[:1][0].id)
            self.speak_dialog(
                "movie.info.response", {
                    "movie":
                    movieDetails.title,
                    "year":
                    nice_date(
                        datetime.strptime(
                            movieDetails.release_date.replace("-", " "),
                            "%Y %m %d")),
                    "budget":
                    nice_number(movieDetails.budget)
                })
            self.speak(movieDetails.tagline)

        # If the title can not be found, it creates an IndexError
        except IndexError:
            self.speak_dialog("no.info", {"movie": movie})
 def test_convert_float_to_nice_number(self):
     for number, number_str in numbers_fixture.items():
         self.assertEqual(nice_number(number), number_str,
                          'should format {} as {} and not {}'.format(
                          number, number_str, nice_number(number)))
Example #28
0
 def test_different_language(self):
     self.assertEqual(nice_number(5.5, lang="es-us"), '5.5',
                      'should format 5.5 as 5.5 not {}'.format(
                      nice_number(5.5, lang="es-us")))
 def test_convert_float_to_nice_number_it(self):
     for number, number_str in NUMBERS_FIXTURE_IT.items():
         self.assertEqual(
             nice_number(number, lang='it'), number_str,
             'dovrebbe formattare {} come {} e none {}'.format(
                 number, number_str, nice_number(number, lang="it")))
Example #30
0
 def test_convert_float_to_nice_number(self):
     for number, number_str in numbers_fixture.items():
         self.assertEqual(nice_number(number), number_str,
                          'should format {} as {} and not {}'.format(
                          number, number_str, nice_number(number)))
Example #31
0
 def test_different_language(self):
     self.assertEqual(nice_number(5.5, lang="es-us"), '5.5',
                      'should format 5.5 as 5.5 not {}'.format(
                          nice_number(5.5, lang="es-us")))
Example #32
0
 def test_convert_float_to_nice_number_it(self):
     for number, number_str in NUMBERS_FIXTURE_IT.items():
         self.assertEqual(nice_number(number, lang='it'), number_str,
                          'dovrebbe formattare {} come {} e none {}'.format(
                              number, number_str, nice_number(
                                  number, lang="it")))
Example #33
0
 def getMovieRuntime(self):
     return nice_number(self.movieDetails.runtime)
Example #34
0
 def test_convert_float_to_nice_number(self):
     for number, number_str in NUMBERS_FIXTURE_EN.items():
         self.assertEqual(nice_number(number), number_str,
                          'should format {} as {} and not {}'.format(
                              number, number_str, nice_number(number)))