in tts/src/tts/amazonpolly.py [0:0]
def _node_request_handler(self, request):
"""The callback function for processing service request.
It never raises. If anything unexpected happens, it will return a PollyResponse with details of the exception.
:param request: an instance of PollyRequest
:return: a PollyResponse
"""
rospy.loginfo('Amazon Polly Request: {}'.format(request))
try:
response = self._dispatch(request)
rospy.loginfo('will return {}'.format(response))
return PollyResponse(result=response)
except Exception as e:
current_dir = os.path.dirname(os.path.abspath(__file__))
exc_type = sys.exc_info()[0]
# not using `issubclass(exc_type, ConnectionError)` for the condition below because some versions
# of urllib3 raises exception when doing `from requests.exceptions import ConnectionError`
error_ogg_filename = 'connerror.ogg' if 'ConnectionError' in exc_type.__name__ else 'error.ogg'
error_details = {
'Audio File': os.path.join(current_dir, 'data', error_ogg_filename),
'Audio Type': 'ogg',
'Exception': {
'Type': str(exc_type),
'Module': exc_type.__module__,
'Name': exc_type.__name__,
'Value': str(e),
},
'Traceback': traceback.format_exc()
}
error_str = json.dumps(error_details)
rospy.logerr(error_str)
return PollyResponse(result=error_str)