Initial commit
This commit is contained in:
74
main.py
74
main.py
@@ -1,32 +1,70 @@
|
|||||||
from flask import Flask, request, jsonify
|
from flask import Flask, request, jsonify
|
||||||
import datetime
|
import datetime
|
||||||
|
from transliterate import translit
|
||||||
|
import aiosqlite
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
|
||||||
|
DATABASE = 'translit.db' # Путь к файлу БД
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
# Хранилище для истории запросов
|
|
||||||
history = []
|
|
||||||
|
|
||||||
@app.route('/api/store', methods=['POST'])
|
async def init_db(): # Инициализация БД
|
||||||
def api():
|
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:
|
try:
|
||||||
data = request.json
|
async with aiosqlite.connect(DATABASE) as db:
|
||||||
if not data:
|
data = request.json
|
||||||
return jsonify({"error": "Invalid JSON"}), 400
|
if not data: # Проверка json
|
||||||
|
return jsonify({"status":"error","error_message": "Invalid JSON"}), 400
|
||||||
|
|
||||||
# Добавляем данные в историю с меткой времени
|
if not data.get("data"): # Проверка на наличие ввода текста
|
||||||
entry = {
|
return jsonify({"status":"error","error_message": "Enter text to transliterate"}), 400
|
||||||
"timestamp": datetime.datetime.now().isoformat(),
|
|
||||||
"data": data
|
tranliterated = translit(str(data.get("data")),reversed=True)
|
||||||
}
|
|
||||||
history.append(entry)
|
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
|
||||||
|
|
||||||
return jsonify({"message": "Data received successfully", "data": data}), 200
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return jsonify({"error": str(e)}), 500
|
return jsonify({"status":"error","error_message": str(e)}), 500
|
||||||
|
|
||||||
@app.route('/api/history', methods=['GET'])
|
|
||||||
def history_endpoint():
|
|
||||||
return jsonify(history), 200
|
@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__':
|
if __name__ == '__main__':
|
||||||
|
asyncio.run(init_db())
|
||||||
app.run(debug=True)
|
app.run(debug=True)
|
||||||
3
requirements.txt
Normal file
3
requirements.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Flask==3.1.0
|
||||||
|
transliterate==1.10.2
|
||||||
|
lvldb==0.1.2
|
||||||
BIN
translit.db
Normal file
BIN
translit.db
Normal file
Binary file not shown.
Reference in New Issue
Block a user