def test_play_status_netradio(self): from defusedxml import cElementTree as ET res = ET.XML(sample_content('rx-v1030-netradio-response.xml')) self.assertTrue(rxv.RXV.safe_get(res, ["Playback_Info"]) == "Play") self.assertEqual('', rxv.RXV.safe_get(res, rxv.rxv.ARTIST_OPTIONS)) self.assertEqual('Undertow', rxv.RXV.safe_get(res, rxv.rxv.ALBUM_OPTIONS)) self.assertEqual('Sober', rxv.RXV.safe_get(res, rxv.rxv.SONG_OPTIONS)) self.assertEqual('NDR 2 (HH)', rxv.RXV.safe_get(res, rxv.rxv.STATION_OPTIONS))
def test_play_status_spotify(self): from defusedxml import cElementTree as ET res = ET.XML(sample_content('rx-v1030-spotify-response.xml')) self.assertTrue(rxv.RXV.safe_get(res, ["Playback_Info"]) == "Play") self.assertEqual('Lenny Kravitz', rxv.RXV.safe_get(res, rxv.rxv.ARTIST_OPTIONS)) self.assertEqual('It\'s Enough', rxv.RXV.safe_get(res, rxv.rxv.ALBUM_OPTIONS)) self.assertEqual('It\'s Enough', rxv.RXV.safe_get(res, rxv.rxv.SONG_OPTIONS)) self.assertEqual('', rxv.RXV.safe_get(res, rxv.rxv.STATION_OPTIONS))
def test_play_status_tuner(self): from defusedxml import cElementTree as ET res = ET.XML(sample_content('rx-v1030-tuner-response.xml')) src_name = "Tuner" self.assertTrue( rxv.RXV.safe_get(res, ["Playback_Info"]) == "Play" or src_name == "Tuner") self.assertEqual('ROCK M', rxv.RXV.safe_get(res, rxv.rxv.ARTIST_OPTIONS)) self.assertEqual('RADIO & BOB!', rxv.RXV.safe_get(res, rxv.rxv.ALBUM_OPTIONS)) self.assertEqual('Black Stone Cherry - Burnin\'_', rxv.RXV.safe_get(res, rxv.rxv.SONG_OPTIONS)) self.assertEqual('RADIOBOB', rxv.RXV.safe_get(res, rxv.rxv.STATION_OPTIONS))
def rxv_details(location): """Looks under given UPNP url, and checks if Yamaha amplituner lives there returns RxvDetails if yes, None otherwise""" try: res = cElementTree.XML(requests.get(location).content) except xml.etree.ElementTree.ParseError: return None url_base_el = res.find(URL_BASE_QUERY) if url_base_el is None: return None ctrl_url_local = res.find(CONTROL_URL_QUERY).text ctrl_url = urljoin(url_base_el.text, ctrl_url_local) unit_desc_url_local = res.find(UNITDESC_URL_QUERY).text unit_desc_url = urljoin(url_base_el.text, unit_desc_url_local) model_name = res.find(MODEL_NAME_QUERY).text friendly_name = res.find(FRIENDLY_NAME_QUERY).text return RxvDetails(ctrl_url, unit_desc_url, model_name, friendly_name)
def _request(self, command, request_text, zone_cmd=True): if zone_cmd: payload = Zone.format(request_text=request_text, zone=self._zone) else: payload = request_text request_text = YamahaCommand.format(command=command, payload=payload) try: res = self._session.post(self.ctrl_url, data=request_text, headers={"Content-Type": "text/xml"}) # releases connection to the pool response = cElementTree.XML(res.content) if response.get("RC") != "0": logger.error("Request %s failed with %s", request_text, res.content) raise ResponseException(res.content) return response except xml.etree.ElementTree.ParseError: logger.exception("Invalid XML returned for request %s: %s", request_text, res.content) raise