Initial commit

This commit is contained in:
Your Name
2025-02-04 18:07:08 +03:00
parent aa5cddf70f
commit 6f435fa74b
3 changed files with 62 additions and 21 deletions

80
main.py
View File

@@ -1,32 +1,70 @@
from flask import Flask, request, jsonify
import datetime
from transliterate import translit
import aiosqlite
import asyncio
DATABASE = 'translit.db' # Путь к файлу БД
app = Flask(__name__)
# Хранилище для истории запросов
history = []
@app.route('/api/store', methods=['POST'])
def api():
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('/api/store', methods=['POST']) # Транслитерация и сохранение в БД
async def history_store():
try:
data = request.json
if not data:
return jsonify({"error": "Invalid JSON"}), 400
# Добавляем данные в историю с меткой времени
entry = {
"timestamp": datetime.datetime.now().isoformat(),
"data": data
}
history.append(entry)
return jsonify({"message": "Data received successfully", "data": data}), 200
except Exception as e:
return jsonify({"error": str(e)}), 500
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
@app.route('/api/history', methods=['GET'])
def history_endpoint():
return jsonify(history), 200
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)

3
requirements.txt Normal file
View File

@@ -0,0 +1,3 @@
Flask==3.1.0
transliterate==1.10.2
lvldb==0.1.2

BIN
translit.db Normal file

Binary file not shown.