docs: def _extractErrorString(request):
          """Extract error string from a failed UPnP call.
  
          :param request: the failed request result
          :type request: requests.Response
          :return: an extracted error text or empty str
          :rtype: str
          """
          errorStr = ""
  
          tag = None
  
          # noinspection PyBroadException
          try:
              # parse XML return
              root = ET.fromstring(request.text.encode('utf-8'))
              tag = root[0][0]
          except:
              # return an empty string as we can not parse the structure
              return errorStr
  
          for element in tag.getiterator():
              tagName = element.tag.lower()
  
              if tagName.endswith("string"):
                  errorStr += element.text + " "
              elif tagName.endswith("description"):
                  errorStr += element.text + " "
  
          return errorStr