diff --git a/.gitignore b/.gitignore index 92ab989..01c2c5a 100644 --- a/.gitignore +++ b/.gitignore @@ -164,3 +164,4 @@ cython_debug/ *.session .vscode/settings.json *session_journal +uploads \ No newline at end of file diff --git a/app/blueprints/api/sessions/routes.py b/app/blueprints/api/sessions/routes.py index ce749e4..a4f56b5 100644 --- a/app/blueprints/api/sessions/routes.py +++ b/app/blueprints/api/sessions/routes.py @@ -1,16 +1,23 @@ -from flask import Blueprint, Response, jsonify, request +import os + +from flask import Blueprint, jsonify, request, current_app, redirect +from werkzeug.utils import secure_filename from app.extensions import db from app.models.session import Session -from app.models.task import Task from paper.errors import NeedPasswordException from paper.parser import PaperParser sessions = Blueprint("sessions", __name__, url_prefix="/sessions") -@sessions.route("/", methods=["POST"]) -async def create_session(**kwargs): - data = kwargs or request.json or request.form +ALLOWED_EXTENSIONS = ['zip'] + +def allowed_file(filename): + return '.' in filename and \ + filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS + +async def create_session_form(): + data = request.json data["name"] = data["name"].replace("/", "").replace("\\", "") session = Session.query.filter_by(name=data.get("name")).first() @@ -54,9 +61,39 @@ async def create_session(**kwargs): finally: db.session.commit() - + return jsonify(response) +def create_session_from_file(): + archive = request.files['archive'] + + if archive.filename == '': + return 'Not Found', 404 + + if not allowed_file(archive.filename): + return 'File Extension Not Allowed', 406 + + session_upload_path = os.path.join(current_app.config['UPLOAD_DIR'], "sessions") + + if not os.path.exists(session_upload_path): + os.makedirs(session_upload_path) + + filename = secure_filename(archive.filename) + file_path = os.path.join(session_upload_path, filename) + + archive.save(file_path) + + return 'Ok', 200 + # return redirect('/') + +@sessions.route("/", methods=["POST"]) +async def create_session(): + files = request.files + if not 'archive' in files: + return await create_session_form() + else: + return create_session_from_file() + @sessions.route("/", methods=["GET"]) def get_sessions(**kwargs): return Session.query.filter_by(authorized=True).all() @@ -72,10 +109,11 @@ async def remove_session(id: int): try: await parser.client.log_out() + db.session.delete(session) + db.session.commit() + except Exception as e: - return Response(e, 500) + return str(e), 500 - db.session.delete(session) - db.session.commit() - - return Response('ok', status=200) \ No newline at end of file + return 'ok', 200 + \ No newline at end of file diff --git a/app/blueprints/api/tasks/handlers.py b/app/blueprints/api/tasks/handlers.py index d5d72fc..4243fa9 100644 --- a/app/blueprints/api/tasks/handlers.py +++ b/app/blueprints/api/tasks/handlers.py @@ -2,18 +2,18 @@ from app.extensions import db from app.models.task import Task def success_state(task_id): - task = Task.query.filter_by(task_id=task_id).one() + task = Task.query.get(task_id) task.status = "SUCCESS" - task.status_message = "Задача выполнена успешно" + task.status_message = "задача выполнена успешно" db.session.commit() def failure_state(task_id, exception): - task = Task.query.filter_by(task_id=task_id).one() + task = Task.query.get(task_id) task.status = "FAILURE" - task.status_message = f"Произошла ошибка: {str(exception)}" + task.status_message = f"произошла ошибка {str(exception)}" db.session.commit() @@ -22,6 +22,6 @@ def run_state(task_id, task_record_id): task.task_id = task_id task.status = "RUNNING" - task.status_message = "Задача запущена" + task.status_message = "задача запущена" db.session.commit() \ No newline at end of file diff --git a/app/blueprints/api/tasks/routes.py b/app/blueprints/api/tasks/routes.py index 7ba6a79..e163b96 100644 --- a/app/blueprints/api/tasks/routes.py +++ b/app/blueprints/api/tasks/routes.py @@ -12,7 +12,7 @@ tasks = Blueprint("tasks", __name__, url_prefix="/tasks", template_folder="templ @tasks.route("/", methods=["GET"]) def get_tasks(): tasks = Task.query.all() - sessions = Session.query.all() + sessions = Session.query.filter_by(authorized=True).all() return render_template("tasks_cards.j2", tasks=tasks, sessions=sessions) diff --git a/app/blueprints/api/tasks/tasks.py b/app/blueprints/api/tasks/tasks.py index c4a3e5c..99526e0 100644 --- a/app/blueprints/api/tasks/tasks.py +++ b/app/blueprints/api/tasks/tasks.py @@ -31,11 +31,11 @@ def add_to_group_task(self, task_id): ) except Exception as e: - failure_state(self.request.id, e) + failure_state(task_id, e) raise e else: - success_state(self.request.id) + success_state(task_id) diff --git a/app/blueprints/frontend/templates/add.j2 b/app/blueprints/frontend/templates/add.j2 index e407810..9e91f09 100644 --- a/app/blueprints/frontend/templates/add.j2 +++ b/app/blueprints/frontend/templates/add.j2 @@ -91,10 +91,11 @@ PaperParser: Вход в аккаунт