Rooni commited on
Commit
1cde8f8
·
verified ·
1 Parent(s): b251148

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -7
app.py CHANGED
@@ -2,15 +2,27 @@ from flask import Flask, request, jsonify
2
  from deep_translator import GoogleTranslator
3
  from langdetect import detect, LangDetectException
4
  import logging
 
 
5
 
6
  app = Flask(__name__)
7
 
 
 
 
8
  # Настройка логирования
9
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
10
 
 
 
 
 
 
 
11
  def translate_text(text):
12
  """
13
- Определяет язык текста и переводит его на английский, если необходимо.
 
14
 
15
  Args:
16
  text (str): Текст для перевода.
@@ -19,25 +31,41 @@ def translate_text(text):
19
  dict: Словарь с результатом перевода или оригинальным текстом, а также информацией об ошибке.
20
  Формат: {"result": "переведенный текст", "original": "исходный текст", "error": null/сообщение об ошибке}
21
  """
 
 
 
 
 
 
 
22
  try:
23
  language = detect(text)
24
  app.logger.info(f"Detected language: {language}")
25
  except LangDetectException as e:
26
  app.logger.error(f"Error detecting language: {e}")
27
- return {"result": text, "original": text, "error": f"Error detecting language: {e}"}
 
 
28
 
29
  if language != 'en':
30
  try:
31
  translator = GoogleTranslator(source=language, target='en')
32
  translated_text = translator.translate(text)
33
  app.logger.info(f"Translated from {language} to en")
34
- return {"result": translated_text, "original": text, "error": None}
 
 
35
  except Exception as e:
36
  app.logger.error(f"Error translating prompt: {e}")
37
- return {"result": text, "original": text, "error": f"Error translating text: {e}"}
 
 
38
  else:
39
  app.logger.info("Text is already in English")
40
- return {"result": text, "original": text, "error": None}
 
 
 
41
 
42
  @app.route('/', methods=['POST'])
43
  def translate_endpoint():
@@ -60,7 +88,8 @@ def translate_endpoint():
60
  app.logger.error(f"Error processing request: {e}")
61
  return jsonify({"error": f"Error processing request: {e}"}), 500
62
  else:
63
- return jsonify({"error": "Request must be in json format"}), 400
 
64
 
65
  if __name__ == '__main__':
66
- app.run(host='0.0.0.0', port=7860, debug=True)
 
2
  from deep_translator import GoogleTranslator
3
  from langdetect import detect, LangDetectException
4
  import logging
5
+ from cachetools import TTLCache
6
+ import hashlib
7
 
8
  app = Flask(__name__)
9
 
10
+ # Настройка кэширования
11
+ cache = TTLCache(maxsize=1024, ttl=86400) # Максимальный размер кэша 1024, срок жизни 24 часа (86400 секунд)
12
+
13
  # Настройка логирования
14
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
15
 
16
+
17
+ def generate_cache_key(text):
18
+ """Генерирует ключ для кэша на основе текста."""
19
+ return hashlib.md5(text.encode('utf-8')).hexdigest()
20
+
21
+
22
  def translate_text(text):
23
  """
24
+ Определяет язык текста и переводит его на английский, если необходимо,
25
+ используя кэширование результатов с TTLCache.
26
 
27
  Args:
28
  text (str): Текст для перевода.
 
31
  dict: Словарь с результатом перевода или оригинальным текстом, а также информацией об ошибке.
32
  Формат: {"result": "переведенный текст", "original": "исходный текст", "error": null/сообщение об ошибке}
33
  """
34
+ cache_key = generate_cache_key(text)
35
+
36
+ cached_result = cache.get(cache_key)
37
+ if cached_result:
38
+ app.logger.info(f"Cache hit for key: {cache_key}")
39
+ return cached_result
40
+
41
  try:
42
  language = detect(text)
43
  app.logger.info(f"Detected language: {language}")
44
  except LangDetectException as e:
45
  app.logger.error(f"Error detecting language: {e}")
46
+ result = {"result": text, "original": text, "error": f"Error detecting language: {e}"}
47
+ cache[cache_key] = result # Кэшируем ошибку
48
+ return result
49
 
50
  if language != 'en':
51
  try:
52
  translator = GoogleTranslator(source=language, target='en')
53
  translated_text = translator.translate(text)
54
  app.logger.info(f"Translated from {language} to en")
55
+ result = {"result": translated_text, "original": text, "error": None}
56
+ cache[cache_key] = result # Кэшируем результат
57
+ return result
58
  except Exception as e:
59
  app.logger.error(f"Error translating prompt: {e}")
60
+ result = {"result": text, "original": text, "error": f"Error translating text: {e}"}
61
+ cache[cache_key] = result # Кэшируем ошибку
62
+ return result
63
  else:
64
  app.logger.info("Text is already in English")
65
+ result = {"result": text, "original": text, "error": None}
66
+ cache[cache_key] = result # Кэшируем результат
67
+ return result
68
+
69
 
70
  @app.route('/', methods=['POST'])
71
  def translate_endpoint():
 
88
  app.logger.error(f"Error processing request: {e}")
89
  return jsonify({"error": f"Error processing request: {e}"}), 500
90
  else:
91
+ return jsonify({"error": "Request must be in json format"}), 400
92
+
93
 
94
  if __name__ == '__main__':
95
+ app.run(host='0.0.0.0', port=7860, debug=True)