def description(self): """Return the description from the uPnP entry.""" url = self.values.get('location', '_NO_LOCATION') if url not in UPNPEntry.DESCRIPTION_CACHE: try: xml = requests.get(url).text if not xml: # Samsung Smart TV sometimes returns an empty document the # first time. Retry once. xml = requests.get(url).text tree = ElementTree.fromstring(xml) UPNPEntry.DESCRIPTION_CACHE[url] = \ etree_to_dict(tree).get('root', {}) except requests.RequestException: logging.getLogger(__name__).error( "Error fetching description at %s", url) UPNPEntry.DESCRIPTION_CACHE[url] = {} except ElementTree.ParseError: logging.getLogger(__name__).error( "Found malformed XML at %s: %s", url, xml) UPNPEntry.DESCRIPTION_CACHE[url] = {} return UPNPEntry.DESCRIPTION_CACHE[url]
def description(self): """Returns the description from the uPnP entry.""" url = self.values.get('location', '_NO_LOCATION') if url not in UPNPEntry.DESCRIPTION_CACHE: try: xml = requests.get(url).text tree = ElementTree.fromstring(xml) UPNPEntry.DESCRIPTION_CACHE[url] = \ etree_to_dict(tree).get('root', {}) except requests.RequestException: logging.getLogger(__name__).error( "Error fetching description at %s", url) UPNPEntry.DESCRIPTION_CACHE[url] = {} except ElementTree.ParseError: logging.getLogger(__name__).error( "Found malformed XML at %s: %s", url, xml) UPNPEntry.DESCRIPTION_CACHE[url] = {} return UPNPEntry.DESCRIPTION_CACHE[url]
async def _fetch_description(self, xml_location): """Fetch an XML description.""" session = self.opp.helpers.aiohttp_client.async_get_clientsession() try: for _ in range(2): resp = await session.get(xml_location, timeout=5) xml = await resp.text(errors="replace") # Samsung Smart TV sometimes returns an empty document the # first time. Retry once. if xml: break except (aiohttp.ClientError, asyncio.TimeoutError) as err: _LOGGER.debug("Error fetching %s: %s", xml_location, err) return {} try: tree = ElementTree.fromstring(xml) except ElementTree.ParseError as err: _LOGGER.debug("Error parsing %s: %s", xml_location, err) return {} return util.etree_to_dict(tree).get("root", {}).get("device", {})
def __init__(self, name): """Read and parse a MockUPNPEntry from a file.""" with open('tests/discoverables/yamaha_files/%s' % name, encoding='utf-8') as content: self.description = etree_to_dict( ElementTree.fromstring(content.read())).get('root', {})
def __init__(self, location, description_xml): self.location = location tree = ElementTree.fromstring(description_xml) self.description = etree_to_dict(tree).get("root", {})