|  | @@ -12,6 +12,15 @@ TTS_CONTENT_TYPE = "audio/mpeg"
 | 
	
		
			
				|  |  |  TTS_TIMEOUT_SEC = 30
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +class TCPTimeOutError(Exception):
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  | +    This error is raised when the TCP connection has been lost. Probably due to a low internet
 | 
	
		
			
				|  |  | +    connection while trying to access the remote API.
 | 
	
		
			
				|  |  | +    """
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    pass
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  class Acapela(TTSModule):
 | 
	
		
			
				|  |  |      def __init__(self, **kwargs):
 | 
	
		
			
				|  |  |          super(Acapela, self).__init__(**kwargs)
 | 
	
	
		
			
				|  | @@ -32,28 +41,32 @@ class Acapela(TTSModule):
 | 
	
		
			
				|  |  |          Generic method used as a Callback in TTSModule
 | 
	
		
			
				|  |  |              - must provided the audio file and write it on the disk
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        .. raises:: FailToLoadSoundFile
 | 
	
		
			
				|  |  | +        .. raises:: FailToLoadSoundFile, TCPTimeOutError
 | 
	
		
			
				|  |  |          """
 | 
	
		
			
				|  |  |          # Prepare payload
 | 
	
		
			
				|  |  |          payload = self.get_payload()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        # Get the mp3 URL from the page
 | 
	
		
			
				|  |  | -        url = Acapela.get_audio_link(TTS_URL, payload)
 | 
	
		
			
				|  |  | +        try:
 | 
	
		
			
				|  |  | +            # Get the mp3 URL from the page
 | 
	
		
			
				|  |  | +            url = Acapela.get_audio_link(TTS_URL, payload)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            # getting the mp3
 | 
	
		
			
				|  |  | +            r = requests.get(url, params=payload, stream=True, timeout=TTS_TIMEOUT_SEC)
 | 
	
		
			
				|  |  | +            content_type = r.headers['Content-Type']
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        # getting the mp3
 | 
	
		
			
				|  |  | -        r = requests.get(url, params=payload, stream=True, timeout=TTS_TIMEOUT_SEC)
 | 
	
		
			
				|  |  | -        content_type = r.headers['Content-Type']
 | 
	
		
			
				|  |  | +            logger.debug("Acapela : Trying to get url: %s response code: %s and content-type: %s",
 | 
	
		
			
				|  |  | +                         r.url,
 | 
	
		
			
				|  |  | +                         r.status_code,
 | 
	
		
			
				|  |  | +                         content_type)
 | 
	
		
			
				|  |  | +            # Verify the response status code and the response content type
 | 
	
		
			
				|  |  | +            if r.status_code != requests.codes.ok or content_type != TTS_CONTENT_TYPE:
 | 
	
		
			
				|  |  | +                raise FailToLoadSoundFile("Acapela : Fail while trying to remotely access the audio file")
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        logger.debug("Acapela : Trying to get url: %s response code: %s and content-type: %s",
 | 
	
		
			
				|  |  | -                     r.url,
 | 
	
		
			
				|  |  | -                     r.status_code,
 | 
	
		
			
				|  |  | -                     content_type)
 | 
	
		
			
				|  |  | -        # Verify the response status code and the response content type
 | 
	
		
			
				|  |  | -        if r.status_code != requests.codes.ok or content_type != TTS_CONTENT_TYPE:
 | 
	
		
			
				|  |  | -            raise FailToLoadSoundFile("Acapela : Fail while trying to remotely access the audio file")
 | 
	
		
			
				|  |  | +            # OK we get the audio we can write the sound file
 | 
	
		
			
				|  |  | +            FileManager.write_in_file(self.file_path, r.content)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        # OK we get the audio we can write the sound file
 | 
	
		
			
				|  |  | -        FileManager.write_in_file(self.file_path, r.content)
 | 
	
		
			
				|  |  | +        except:
 | 
	
		
			
				|  |  | +            raise TCPTimeOutError("TCP timeout, the connection to the remote API has been lost")
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def get_payload(self):
 | 
	
		
			
				|  |  |          """
 |