mirror of
https://github.com/LibreTranslate/LibreTranslate.git
synced 2024-11-17 04:50:11 +01:00
Dynamic limit costs
This commit is contained in:
parent
0aa4bcac7f
commit
f3bf89375f
@ -205,6 +205,8 @@ def create_app(args):
|
|||||||
args.req_limit, args.hourly_req_limit, args.daily_req_limit, api_keys_db
|
args.req_limit, args.hourly_req_limit, args.daily_req_limit, api_keys_db
|
||||||
),
|
),
|
||||||
storage_uri=args.req_limit_storage,
|
storage_uri=args.req_limit_storage,
|
||||||
|
default_limits_deduct_when=lambda req: True, # Force cost to be called after the request
|
||||||
|
default_limits_cost=lambda: getattr(request, 'req_cost', 1)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
from .no_limiter import Limiter
|
from .no_limiter import Limiter
|
||||||
@ -515,6 +517,7 @@ def create_app(args):
|
|||||||
type: string
|
type: string
|
||||||
description: Error message
|
description: Error message
|
||||||
"""
|
"""
|
||||||
|
print("/translate")
|
||||||
if request.is_json:
|
if request.is_json:
|
||||||
json = get_json_dict(request)
|
json = get_json_dict(request)
|
||||||
q = json.get("q")
|
q = json.get("q")
|
||||||
@ -550,6 +553,9 @@ def create_app(args):
|
|||||||
description=_("Invalid request: request (%(size)s) exceeds text limit (%(limit)s)", size=batch_size, limit=args.batch_limit),
|
description=_("Invalid request: request (%(size)s) exceeds text limit (%(limit)s)", size=batch_size, limit=args.batch_limit),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if batch:
|
||||||
|
request.req_cost = max(1, len(q))
|
||||||
|
|
||||||
if args.char_limit != -1:
|
if args.char_limit != -1:
|
||||||
chars = sum([len(text) for text in q]) if batch else len(q)
|
chars = sum([len(text) for text in q]) if batch else len(q)
|
||||||
|
|
||||||
@ -755,6 +761,14 @@ def create_app(args):
|
|||||||
|
|
||||||
file.save(filepath)
|
file.save(filepath)
|
||||||
|
|
||||||
|
# Not an exact science: take the number of bytes and divide by
|
||||||
|
# the character limit. Assuming a plain text file, this will
|
||||||
|
# set the cost of the request to N = bytes / char_limit, which is
|
||||||
|
# roughly equivalent to a batch process of N batches assuming
|
||||||
|
# each batch uses all available limits
|
||||||
|
if args.char_limit != -1:
|
||||||
|
request.req_cost = max(1, int(os.path.getsize(filepath) / args.char_limit))
|
||||||
|
|
||||||
translated_file_path = argostranslatefiles.translate_file(src_lang.get_translation(tgt_lang), filepath)
|
translated_file_path = argostranslatefiles.translate_file(src_lang.get_translation(tgt_lang), filepath)
|
||||||
translated_filename = os.path.basename(translated_file_path)
|
translated_filename = os.path.basename(translated_file_path)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user