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
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