75 lines
2.8 KiB
Python
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) |