def translate_text(): """Translate some text""" text = request.args.get('text', None) if not text or text == "": raise APIException.translate(msg='No translation text given') source_lang = request.args.get('from', None) if not source_lang: raise APIException.translate(msg='No source language given') dest_lang = request.args.get('to', None) if not dest_lang: raise APIException.translate(msg='No destination language given') bytelen = len(text.encode('utf-8')) conf = app.config['SERVER']['sizelimit'] if conf['enabled'] and bytelen > conf['limit']: raise APIException.sizelimit(len=bytelen, limit=conf['limit']) # Try each translator sequentially (sorted by preference) until one works backends = manager.find_all(source_lang, dest_lang) # List of translator backend names that the client does not want to use excludes = request.args.getlist('exclude') if len(backends) == 0: raise APIException.pair(from_lang=source_lang, to_lang=dest_lang, text=text) tried = [] for backend in backends: if backend.name in excludes: log.info("Skipping %s, client disapproved.", backend.name) continue tried.append(backend.name) try: trans = backend.translate(text, source_lang, dest_lang) if trans is None or trans == "": raise TranslationException("Received empty result text") return flask.Response(json.dumps({ 'from': source_lang, 'to': dest_lang, 'result': trans, 'translator': backend.name }), mimetype='application/json') except TranslationException as exc: log.warning('{0} failed to translate text: {1}' .format(backend.name, exc)) raise APIException.translator(from_lang=source_lang, to_lang=dest_lang, text=text, tried=tried)
def on_over_limit(): """Callback function to call when API method goes over the ratelimit""" raise APIException.ratelimit(limit=RateLimit.limit, per=RateLimit.per, reset=RateLimit.reset)
def translate_text(): """Translate some text""" text = request.args.get('text', None) if not text or text == "": raise APIException.translate(msg='No translation text given') source_lang = request.args.get('from', None) if not source_lang: raise APIException.translate(msg='No source language given') dest_lang = request.args.get('to', None) if not dest_lang: raise APIException.translate(msg='No destination language given') bytelen = len(text.encode('utf-8')) conf = app.config['SERVER']['sizelimit'] if conf['enabled'] and bytelen > conf['limit']: raise APIException.sizelimit(len=bytelen, limit=conf['limit']) # Try each translator sequentially (sorted by preference) until one works backends = manager.find_all(source_lang, dest_lang) # List of translator backend names that the client does not want to use excludes = request.args.getlist('exclude') if len(backends) == 0: raise APIException.pair(from_lang=source_lang, to_lang=dest_lang, text=text) tried = [] for backend in backends: if backend.name in excludes: log.info("Skipping %s, client disapproved.", backend.name) continue tried.append(backend.name) try: trans = backend.translate(text, source_lang, dest_lang) if trans is None or trans == "": raise TranslationException("Received empty result text") return flask.Response(json.dumps({ 'from': source_lang, 'to': dest_lang, 'result': trans, 'translator': backend.name }), mimetype='application/json') except TranslationException as exc: log.warning('{0} failed to translate text: {1}'.format( backend.name, exc)) raise APIException.translator(from_lang=source_lang, to_lang=dest_lang, text=text, tried=tried)