Example #1
0
 def __init__(self, config, logger):
     """Create the translator object that will handle translation"""
     # Standalone translator (just passes data to a XMLRPC server that handles everything)
     if config.get('TRANSLATOR_TYPE', '').lower() == 'standalone':
         self._translator = StandaloneTranslator(config['TRANSLATE_PORT'], 
                                                 config.get('TRANSLATE_URL_PATH', ''),
                                                 config.get('SRC_KEY', 'text'),
                                                 config.get('TGT_KEY', 'translated'),
                                                 ast.literal_eval(config.get('TRANSL_SETTING', '{}')))
     # Moses translator (only the translation itself is done by Moses XMLRPC server)
     else:
         self._translator = MosesTranslator(config['TRANSLATE_PORT'],
                                            config.get('RECASE_PORT'),
                                            config.get('SOURCE_LANG', 'en'),
                                            config.get('TARGET_LANG', 'en'),
                                            int(config.get('THREADS', '4')))
     self._logger = logger
Example #2
0
class MTMonkeyWorker(object):
    """Processes tasks ('translate' is currently the only implemented one)"""

    def __init__(self, config, logger):
        """Create the translator object that will handle translation"""
        # Standalone translator (just passes data to a XMLRPC server that handles everything)
        if config.get('TRANSLATOR_TYPE', '').lower() == 'standalone':
            self._translator = StandaloneTranslator(config['TRANSLATE_PORT'], 
                                                    config.get('TRANSLATE_URL_PATH', ''),
                                                    config.get('SRC_KEY', 'text'),
                                                    config.get('TGT_KEY', 'translated'),
                                                    ast.literal_eval(config.get('TRANSL_SETTING', '{}')))
        # Moses translator (only the translation itself is done by Moses XMLRPC server)
        else:
            self._translator = MosesTranslator(config['TRANSLATE_PORT'],
                                               config.get('RECASE_PORT'),
                                               config.get('SOURCE_LANG', 'en'),
                                               config.get('TARGET_LANG', 'en'),
                                               int(config.get('THREADS', '4')))
        self._logger = logger

    def process_task(self, task):
        """Process one task. Only 'translate' action is currently implemented."""
        if task['action'] == 'translate':
            self._logger.info("New translate task")
            try:
                try:
                    return self._translator.process_task(task)
                # check for translation server overload, crash nicely
                except socket.error as se:
                    if se.strerror in ['Connection reset by peer', 'Connection timed out']:
                        self._logger.warning('Translation server overloaded: ' + str(se))
                        return {'error' : 'Translation server overloaded.',
                                'errorCode': 2}
                    raise se
            # crash badly if any other error occurs
            except Exception as e:
                import traceback
                etype, eobj, etb = sys.exc_info()
                fname = os.path.split(etb.tb_frame.f_code.co_filename)[1]
                self._logger.warning('Translation error ' + traceback.format_exc())
                return {'error' : str(etype) + ' at ' + fname + ':' +
                        str(etb.tb_lineno) + "\n" + traceback.format_exc()}
        else:
            self._logger.warning('Unknown task ' + task['action'])
            return {'error' : 'Unknown task ' + task['action']}

    def alive_check(self):
        """Just checking that the server is up and running."""
        return 1