Example #1
0
def test_json(httpbin):
    url = httpbin.url + "/response-headers"
    js_api = JSONApi(url, foo="bar")
    assert js_api.get().data["foo"] == "bar"
    more_js_api = JSONApi(url, foo="bar")
    assert js_api is more_js_api

    even_more_js_api = JSONApi(url, herp="derp")
    assert js_api is not even_more_js_api
Example #2
0
def test_json(httpbin):
    url = httpbin.url + '/response-headers'
    js_api = JSONApi(url, foo='bar')
    assert js_api.get().data['foo'] == 'bar'
    more_js_api = JSONApi(url, foo='bar')
    assert js_api is more_js_api

    even_more_js_api = JSONApi(url, herp='derp')
    assert js_api is not even_more_js_api
Example #3
0
    def setup(self, line, stop, direction):
        jakdojade_url = self.settings.jakdojade_url
        self.line, self.stop, self.direction = line, stop, direction

        self.api = JSONApi(jakdojade_url,
                           line=self.line,
                           stop=self.stop,
                           direction=self.direction,
                           _cacheme=False)
Example #4
0
class ZTMSound(Sound):
    name = 'ztm'

    def setup(self, line, stop, direction):
        jakdojade_url = self.settings.jakdojade_url
        self.line, self.stop, self.direction = line, stop, direction

        self.api = JSONApi(jakdojade_url,
                           line=self.line,
                           stop=self.stop,
                           direction=self.direction,
                           _cacheme=False)

    @staticmethod
    def _get_type(content):
        if 'type' in content:
            return content['type']
        line = content['line']
        if re.match(r'^[0-9]{1,2}$', line):
            return 'train'
        elif re.match(r'^[0-9]{3}$', line):
            return 'bus'
        elif re.match(r'^m[0-9]+$', line.lower()):
            return 'metro'
        else:
            return 'transportation'

    @classmethod
    def _ztm2text(cls, content):
        transport_prefix = {
            'train': 'topside train number {line}',
            'bus': 'day bust number {line}',
            'metro': 'subsurface train line {line}',
            'transportation': 'transportation',
        }
        line = content['line']
        minutes = content['minutes']
        hours = content['hours']
        heading = 'accelerating {} {}'.format(*content['heading'])
        transport_type = cls._get_type(content)

        sentence = ' '.join([transport_prefix[transport_type],
                             heading,
                             'will reach location at {h}{m} zulu'])

        return sentence.format(line=line, h=hours, m=minutes)

    def play(self):
        sound = VoxSound(mixer=self.mixer, base_dir=self.dir)
        req = self.api.get()
        if req.status != JSONApi.OK:
            logger.critical(req)
            sound.setup(req.status)
        else:
            sentence = self._ztm2text(req.data)
            sound.setup(sentence)
        sound.play()
Example #5
0
    def setup(self, location_id, weather_url=None, interval=None):
        weather_url = weather_url or self.settings.weather_url
        interval = interval or self.settings.weather_interval

        location = int(location_id)
        self.location_id = location_id

        self.api = JSONApi(weather_url,
                           id=location_id,
                           units='metric',
                           appid='44db6a862fba0b067b1930da0d769e98',
                           _interval=interval)
Example #6
0
class WeatherSound(Sound):
    name = 'weather'
    location_id = 'warsaw,pl'
    sentence = 'topside temperature is %s degrees'
    below_zero = 'sub zero'
    temperature = 2137

    def setup(self, location_id, weather_url=None, interval=None):
        weather_url = weather_url or self.settings.weather_url
        interval = interval or self.settings.weather_interval

        location = int(location_id)
        self.location_id = location_id

        self.api = JSONApi(weather_url,
                           id=location_id,
                           units='metric',
                           appid='44db6a862fba0b067b1930da0d769e98',
                           _interval=interval)

    @classmethod
    def _weather2text(cls, temperature):
        text = cls.sentence + ' ' + (cls.below_zero if temperature < 0 else '')
        return text % abs(temperature)

    def play(self):
        sound = VoxSound(mixer=self.mixer, base_dir=self.dir)
        req = self.api.get()
        if req.status != JSONApi.OK:
            logger.critical(req)
            sound.setup(req.status)
        else:
            temperature = req.data.get('main', {}).get('temp')
            self.temperature = temperature
            sentence = self._weather2text(temperature)
            sound.setup(sentence)
        sound.play()