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
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
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)
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()
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)
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()