def logout(): try: logout_user() return jsonify({'message': 'Вы успешно вышли из системы', 'path': '/login'}) except Exception: app.logger.exception(process_log_string(request)) raise
def source_video(video): try: return send_from_directory(app.config['UPLOAD_FOLDER'], filename=video, as_attachment=False, mimetype='video/mp4') except Exception: app.logger.exception(process_log_string(request)) raise
def status_tasks(): try: tasks_id = op.get_user_tasks(current_user.username) all_user_task = {} for uuid in tasks_id: all_user_task[uuid] = video_processing.AsyncResult(uuid).state response = { 'tasks': all_user_task } return jsonify(response), 200 except Exception: app.logger.exception(process_log_string(request)) raise
def register(): try: if current_user.is_authenticated: return jsonify({'message': 'Вы уже зарегестрированы', 'path': '/'}) username = request.json.get('login', None) password = request.json.get('password', None) reg = op.add_user_to_db(username=str(username), password=str(password)) if reg: return jsonify({'message': 'Вы успешно зарегестрированы', 'path': '/login'}) else: return jsonify({'message': 'Пользователь с таким именем уже существует', 'path': '/register'}) except Exception: app.logger.exception(process_log_string(request)) raise
def delete_task(): try: task_id = request.args['task_id'] op.delete_user_task_id(task_id) path = app.config['UPLOAD_FOLDER'] filename = request.args['filename'] op.delete_user_video(path, filename) response = { 'filename': filename, 'task_id': task_id } return jsonify(response), 200 except Exception: app.logger.exception(process_log_string(request)) raise
def result_task(task_id): try: task = video_processing.AsyncResult(task_id) if task.state == 'PENDING': # Цвет -> Синий response = { 'task_id': task_id, 'state': task.state, 'task_result': { 'filename': None, 'video': None }, 'info': str(task.info) # Содержит task.result в формате json } elif task.state != 'FAILURE': # Цвет -> Зеленый/Желтай response = { 'task_id': task_id, 'state': task.state, 'task_result': task.result, 'info': str(task.info), } if task.state == 'SUCCESS': # Цвет -> Зеленый # Здесь можно получить результат после выполнения response = { 'task_id': task_id, 'state': task.state, 'task_result': task.result, 'info': str(task.info), 'date_done': task.date_done.strftime('%H:%M | %d %B %Y') } else: # Цвет -> Красный # Ошибка на стороне сервера (или где-то еще) response = { 'task_id': task_id, 'state': task.state, 'task_result': { 'filename': None, 'video': None }, 'info': str(task.info) # Информация об ошибке } return jsonify(response), 200 except Exception: app.logger.exception(process_log_string(request)) raise
def load_video(): try: if 'file' not in request.files: return jsonify({'file': 'Ошибка загрузки видео'}) file = request.files['file'] matrix = eval(request.form['matrix']) width = float(request.form['width']) if file.filename == '': return jsonify({'file': 'Нет выбранного файла'}) filename = secure_filename(file.filename) path = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(path) print("[INFO] starting save video...") username = current_user.username task = video_processing.delay(path, filename, matrix, width) op.send_task_progress(task.id, username) return jsonify({'file': filename, 'task_id': task.id, 'status': task.state}), 202 except Exception: app.logger.exception(process_log_string(request)) raise
def all_result_tasks(): try: response = [] tasks_id = op.get_user_tasks(current_user.username) for uuid in tasks_id: result = video_processing.AsyncResult(uuid) if result.state == 'PENDING': task = { 'task_id': uuid, 'filename': None, 'video': None, 'status': result.state } response.append(task) elif result.state != 'FAILURE': task = { 'task_id': uuid, 'filename': result.result['filename'], 'video': None, 'status': result.state } if result.state == 'SUCCESS': task = { 'task_id': uuid, 'filename': result.result['filename'], 'video': result.result['video'], 'status': result.state } response.append(task) else: task = { 'task_id': uuid, 'filename': None, 'video': None, 'status': result.state } response.append(task) return jsonify(response), 200 except Exception: app.logger.exception(process_log_string(request)) raise
def login(): try: if current_user.is_authenticated: # Можно пробовать не отправлять username, так как он перезаписывает уже существующий return jsonify({'message': 'Вы уже авторизировались в системе', 'username': current_user.username, 'path': '/'}) username = request.json.get('login', None) password = request.json.get('password', None) if op.check_validate_user(username=username, password=password): # Поскольку авторизация проходит не с помощью JWT токена # Ставим remember=True, иначе будут проблемы # Альтернатива -> поставить GET запрос и каждый раз проверять current_user op.check_login_user(username=username, remember=True) return jsonify({'message': 'Вы успешно авторизировались в системе', 'username': username, 'path': '/'}) else: return jsonify({'message': 'Неверный ввод пользователя или пароля', 'username': None, 'path': '/login'}) except Exception: app.logger.exception(process_log_string(request)) raise
def catch_all(path): try: return render_template("index.html") except Exception: app.logger.exception(process_log_string(request)) raise
def index(): try: return render_template('index.html') except Exception: app.logger.exception(process_log_string(request)) raise