Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)