from flask import Flask, render_template, request, jsonify
from flask_socketio import SocketIO, emit
from flask_sqlalchemy import SQLAlchemy
import os

app = Flask(name)
app.config['SECRET_KEY'] = 'secret!'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///notes.db'
db = SQLAlchemy(app)
socketio = SocketIO(app)

UPLOAD_FOLDER = 'static/uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

class Note(db.Model):
id = db.Column(db.Integer, primary_key=True)
text = db.Column(db.String(500), nullable=False)
x = db.Column(db.Integer, nullable=False)
y = db.Column(db.Integer, nullable=False)
width = db.Column(db.Integer, nullable=False)
height = db.Column(db.Integer, nullable=False)

class Image(db.Model):
id = db.Column(db.Integer, primary_key=True)
url = db.Column(db.String(500), nullable=False)
x = db.Column(db.Integer, nullable=False)
y = db.Column(db.Integer, nullable=False)
width = db.Column(db.Integer, nullable=False)
height = db.Column(db.Integer, nullable=False)

@app.route('/')
def index():
notes = Note.query.all()
images = Image.query.all()
return render_template('index.html', notes=notes, images=images)

@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return jsonify({'error': 'No file part'}), 400


file = request.files['file']
if file.filename == '':
    return jsonify({'error': 'No selected file'}), 400

filename = file.filename
filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(filepath)

return jsonify({'url': os.path.join('/', app.config['UPLOAD_FOLDER'], filename)})
@socketio.on('create_note')
def handle_create_note(data):
text = data['text']
x = data['x']
y = data['y']
width = data['width']
height = data['height']
new_note = Note(text=text, x=x, y=y, width=width, height=height)
db.session.add(new_note)
db.session.commit()
emit('new_note', {'id': new_note.id, 'text': text, 'x': x, 'y': y, 'width': width, 'height': height},
broadcast=True)

@socketio.on('update_note')
def handle_update_note(data):
note = Note.query.get(data['id'])
note.text = data['text']
note.x = data['x']
note.y = data['y']
note.width = data['width']
note.height = data['height']
db.session.commit()
emit('updated_note',
{'id': note.id, 'text': note.text, 'x': note.x, 'y': note.y, 'width': note.width, 'height': note.height},
broadcast=True)

@socketio.on('create_image')
def handle_create_image(data):
url = data.get('url')
x = data.get('x')
y = data.get('y')
width = data.get('width')
height = data.get('height')


if not url or not x or not y or not width or not height:
    return jsonify({'error': 'Missing required data'}), 400

new_image = Image(url=url, x=x, y=y, width=width, height=height)
db.session.add(new_image)
db.session.commit()
emit('new_image', {'id': new_image.id, 'url': url, 'x': x, 'y': y, 'width': width, 'height': height},
     broadcast=True)
@socketio.on('update_image')
def handle_update_image(data):
image = Image.query.get(data['id'])
image.url = data.get('url', image.url)
image.x = data.get('x', image.x)
image.y = data.get('y', image.y)
image.width = data.get('width', image.width)
image.height = data.get('height', image.height)
db.session.commit()
emit('updated_image',
{'id': image.id, 'url': image.url, 'x': image.x, 'y': image.y, 'width': image.width, 'height': image.height},
broadcast=True)

@socketio.on('delete_element')
def handle_delete_element(data):
element_id = data['id']
element_type = data.get('type') # Добавляем тип элемента (note или image)


if element_type == 'note':
    element = Note.query.get(element_id)
elif element_type == 'image':
    element = Image.query.get(element_id)
else:
    return jsonify({'error': 'Invalid element type'}), 400

if element:
    # Если это изображение, удаляем также файл
    if element_type == 'image':
        image_path = os.path.join(app.config['UPLOAD_FOLDER'], os.path.basename(element.url))
        # Проверяем, существует ли файл
        if os.path.exists(image_path):
            os.remove(image_path)

    db.session.delete(element)
    db.session.commit()
    emit('element_deleted', {'id': element_id, 'type': element_type}, broadcast=True)
else:
    return jsonify({'error': 'Element not found'}), 404
if name == 'main':
with app.app_context():
if not os.path.exists('notes.db'):
db.create_all()
socketio.run(app, host='192.168.0.105', port=7846, debug=True, allow_unsafe_werkzeug=True)

C:\Developing\Python\Network\app.py:105: LegacyAPIWarning: The Query.get() method is considered legacy as of the 1.x series of SQLAlchemy and becomes a legacy construct in 2.0. The method is now available as Session.get() (deprecated since: 2.0) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)
image = Image.query.get(data['id'])

как исправить ошибку?