Files
study-task-1/main.py
2025-02-04 18:37:42 +03:00

75 lines
2.8 KiB
Python

from flask import Flask, request, jsonify, send_from_directory
import datetime
from transliterate import translit
import aiosqlite
import asyncio
DATABASE = 'translit.db' # Путь к файлу БД
app = Flask(__name__)
async def init_db(): # Инициализация БД
async with aiosqlite.connect(DATABASE) as db:
await db.execute("""
CREATE TABLE IF NOT EXISTS translit (
id INTEGER PRIMARY KEY,
original_text TEXT NOT NULL,
translit TEXT NOT NULL
)
""")
await db.commit()
@app.route('/')
def serve_index():
return send_from_directory('./static', 'index.html')
@app.route('/api/store', methods=['POST']) # Транслитерация и сохранение в БД
async def history_store():
try:
async with aiosqlite.connect(DATABASE) as db:
data = request.json
if not data: # Проверка json
return jsonify({"status":"error","error_message": "Invalid JSON"}), 400
if not data.get("data"): # Проверка на наличие ввода текста
return jsonify({"status":"error","error_message": "Enter text to transliterate"}), 400
tranliterated = translit(str(data.get("data")),reversed=True)
await db.execute("INSERT INTO translit (original_text, translit) VALUES (?, ?)",
(str(data.get("data")), tranliterated))
await db.commit()
return jsonify({"status":"success","data":tranliterated}), 200
except Exception as e:
return jsonify({"status":"error","error_message": str(e)}), 500
@app.route('/api/history', methods=['GET']) # Получение истории транслитов
async def history_get():
try:
limit = request.args.get('limit') or 1 # Дефолтный лимит = 1
if int(limit) <= 0: # проверка лимита выборки
return jsonify({"status":"error","error_message": "Limit must be >0"}), 400
async with aiosqlite.connect(DATABASE) as db:
db.row_factory = aiosqlite.Row
async with db.execute("SELECT * FROM translit ORDER BY id DESC LIMIT "+str(limit)) as cursor:
rows = await cursor.fetchall()
await cursor.close()
response_data = []
for row in rows:
response_data.append(dict(row)) # Преобразование в словарь
return jsonify({"status":"success","data":response_data}), 200
except Exception as e:
return jsonify({"status":"error","error_message": str(e)}), 500
if __name__ == '__main__':
asyncio.run(init_db())
app.run(debug=True)