error handling
This commit is contained in:
parent
ba87ce9496
commit
f8b1a1326a
3 changed files with 22 additions and 18 deletions
|
@ -1,4 +1,4 @@
|
||||||
__version__ = "0.0.1a10"
|
__version__ = "0.0.1a11"
|
||||||
__name__ = "txupnp"
|
__name__ = "txupnp"
|
||||||
__author__ = "Jack Robison"
|
__author__ = "Jack Robison"
|
||||||
__maintainer__ = "Jack Robison"
|
__maintainer__ = "Jack Robison"
|
||||||
|
|
|
@ -58,10 +58,12 @@ class _SCPDCommand(object):
|
||||||
|
|
||||||
def extract_response(self, body):
|
def extract_response(self, body):
|
||||||
body = handle_fault(body) # raises UPnPError if there is a fault
|
body = handle_fault(body) # raises UPnPError if there is a fault
|
||||||
if '%sResponse' % self.method in body:
|
response_key = None
|
||||||
response_key = '%sResponse' % self.method
|
for key in body:
|
||||||
else:
|
if self.method in key:
|
||||||
log.error(body.keys())
|
response_key = key
|
||||||
|
break
|
||||||
|
if not response_key:
|
||||||
raise UPnPError("unknown response fields")
|
raise UPnPError("unknown response fields")
|
||||||
response = body[response_key]
|
response = body[response_key]
|
||||||
extracted_response = tuple([response[n] for n in self.returns])
|
extracted_response = tuple([response[n] for n in self.returns])
|
||||||
|
@ -91,6 +93,8 @@ class _SCPDCommand(object):
|
||||||
xml_response = yield response.content()
|
xml_response = yield response.content()
|
||||||
try:
|
try:
|
||||||
response = self.extract_response(self.extract_body(xml_response))
|
response = self.extract_response(self.extract_body(xml_response))
|
||||||
|
except UPnPError:
|
||||||
|
raise
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
log.debug("error extracting response (%s) to %s:\n%s", err, self.method, xml_response)
|
log.debug("error extracting response (%s) to %s:\n%s", err, self.method, xml_response)
|
||||||
raise err
|
raise err
|
||||||
|
|
|
@ -109,20 +109,23 @@ class UPnP(object):
|
||||||
NewEnabled=1, NewPortMappingDescription=description, NewLeaseDuration=""
|
NewEnabled=1, NewPortMappingDescription=description, NewLeaseDuration=""
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
def get_port_mapping_by_index(self, index):
|
def get_port_mapping_by_index(self, index):
|
||||||
return self.commands.GetGenericPortMappingEntry(NewPortMappingIndex=index)
|
try:
|
||||||
|
redirect = yield self.commands.GetGenericPortMappingEntry(NewPortMappingIndex=index)
|
||||||
|
defer.returnValue(redirect)
|
||||||
|
except UPnPError:
|
||||||
|
defer.returnValue(None)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def get_redirects(self):
|
def get_redirects(self):
|
||||||
redirects = []
|
redirects = []
|
||||||
cnt = 0
|
cnt = 0
|
||||||
while True:
|
|
||||||
try:
|
|
||||||
redirect = yield self.get_port_mapping_by_index(cnt)
|
redirect = yield self.get_port_mapping_by_index(cnt)
|
||||||
|
while redirect:
|
||||||
redirects.append(redirect)
|
redirects.append(redirect)
|
||||||
cnt += 1
|
cnt += 1
|
||||||
except UPnPError:
|
redirect = yield self.get_port_mapping_by_index(cnt)
|
||||||
break
|
|
||||||
defer.returnValue(redirects)
|
defer.returnValue(redirects)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
|
@ -138,11 +141,8 @@ class UPnP(object):
|
||||||
NewRemoteHost=None, NewExternalPort=external_port, NewProtocol=protocol
|
NewRemoteHost=None, NewExternalPort=external_port, NewProtocol=protocol
|
||||||
)
|
)
|
||||||
defer.returnValue(result)
|
defer.returnValue(result)
|
||||||
except UPnPError as err:
|
except UPnPError:
|
||||||
if 'NoSuchEntryInArray' in str(err):
|
|
||||||
defer.returnValue(None)
|
defer.returnValue(None)
|
||||||
else:
|
|
||||||
raise err
|
|
||||||
|
|
||||||
def delete_port_mapping(self, external_port, protocol, new_remote_host=""):
|
def delete_port_mapping(self, external_port, protocol, new_remote_host=""):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue