feat: support batch translation

This commit is contained in:
Claas Augner 2021-01-19 17:51:10 +01:00
parent 72248f0050
commit 2c5eba14b4
2 changed files with 36 additions and 19 deletions

View file

@ -126,10 +126,13 @@ def create_app(char_limit=-1, req_limit=-1, ga_id=None, debug=False, frontend_la
- in: formData - in: formData
name: q name: q
schema: schema:
type: string oneOf:
- type: string
example: Hello world! example: Hello world!
- type: array
example: ['Hello world!']
required: true required: true
description: Text to translate description: Text(s) to translate
- in: formData - in: formData
name: source name: source
schema: schema:
@ -152,8 +155,10 @@ def create_app(char_limit=-1, req_limit=-1, ga_id=None, debug=False, frontend_la
type: object type: object
properties: properties:
translatedText: translatedText:
type: string oneOf:
description: Translated text - type: string
- type: array
description: Translated text(s)
400: 400:
description: Invalid request description: Invalid request
schema: schema:
@ -200,8 +205,16 @@ def create_app(char_limit=-1, req_limit=-1, ga_id=None, debug=False, frontend_la
if not target_lang: if not target_lang:
abort(400, description="Invalid request: missing target parameter") abort(400, description="Invalid request: missing target parameter")
batch = isinstance(q, list)
if char_limit != -1: if char_limit != -1:
q = q[:char_limit] if batch:
chars = sum([len(text) for text in q])
else:
chars = len(q)
if char_limit < chars:
abort(400, description="Invalid request: Request (%d) exceeds character limit (%d)" % (chars, char_limit))
if source_lang == 'auto': if source_lang == 'auto':
candidate_langs = list(filter(lambda l: l.lang in language_map, detect_langs(q))) candidate_langs = list(filter(lambda l: l.lang in language_map, detect_langs(q)))
@ -230,7 +243,11 @@ def create_app(char_limit=-1, req_limit=-1, ga_id=None, debug=False, frontend_la
abort(400, description="%s is not supported" % target_lang) abort(400, description="%s is not supported" % target_lang)
translator = src_lang.get_translation(tgt_lang) translator = src_lang.get_translation(tgt_lang)
try: try:
if batch:
return jsonify({"translatedText": [translator.translate(text) for text in q] })
else:
return jsonify({"translatedText": translator.translate(q) }) return jsonify({"translatedText": translator.translate(q) })
except Exception as e: except Exception as e:
abort(500, description="Cannot translate text: %s" % str(e)) abort(500, description="Cannot translate text: %s" % str(e))