import queue from flask import Flask, render_template, request, make_response, flash from flask_socketio import SocketIO #https://pythonprogramminglanguage.com/python-flask-websocket/ import sqlite3 import time import atexit import sys db_path = 'mate.db' conn = sqlite3.connect(db_path, check_same_thread=False) c = conn.cursor() app = Flask(__name__) socketio = SocketIO(app) app.debug = True status = True users = queue.Queue() finished = None def exit_handler(): conn.close() sys.exit("Program sucsesfully exited") #website @app.route("/") def index(): return 'user and tag list
The creator of this website accepts no liability for any linguistic or technical errors!
' @app.route("/list") def list(): c.execute("SELECT * FROM users") users = c.fetchall() text = "" for i in users: text = text + f'{i[1]}: {i[2]}
{user[1]}: {user[2]}
' else: return "User does not exists" @app.route("/adduser") def new_user(): return render_template("adduser.html") @app.route("/adduser/user", methods=['GET']) def adduser(): user = request.args.get("username") c.execute(f"SELECT * FROM users WHERE username='{str(user)}'") if c.fetchall() == []: c.execute("INSERT or IGNORE INTO users (username, balance) VALUES ('%s', 0)" % user) conn.commit() return 'Added user user and tag listThe creator of this website accepts no liability for any linguistic or technical errors!
' else: return 'User already exists user and tag listThe creator of this website accepts no liability for any linguistic or technical errors!
' @app.route("/change", methods=['GET']) def change(): user_id = int(request.args.get("id")) try: change = int(request.args.get("change")) except ValueError: return 'Pleas enter a number!
tags and user list' if change < 0: text = "removed from" elif change > 0: text = "added to" elif change == 0: return "Nothing was done!
" c.execute(f"UPDATE users SET balance = balance + {change} WHERE id={user_id}") c.execute(f"SELECT * FROM users WHERE id={user_id}") user = c.fetchall()[0][1] return f'{change} was {text} {user}' @app.route("/addtag", methods=['GET']) def get_addtag_request(): global users try: user_id = int(request.args.get("id")) except: #except im Normalen Code! return "Wrong user id!" users.put(user_id) return render_template("addtag.html", user=user_id) @socketio.on('addtag') def request_addtag(data): global finished if len(users.queue) > 0: user = users.queue[len(users.queue) - 1] print(user) if user == data["data"]: socketio.emit("wait", "wait") i = 0 while finished != data["data"]: time.sleep(1) i += 1 if i > 20: socketio.emit("error", "timeout") break else: finished = None c.execute(f"SELECT * FROM users WHERE id ={user}") username = c.fetchall()[0][1] c.execute(f"SELECT * FROM tags WHERE userid={user}") tag_id = c.fetchall()[0][0] socketio.emit("finished", f"Added {tag_id} to {username}") else: socketio.emit("busy", "busy") else: socketio.emit("error", "error") #api @app.route("/api/tag_id", methods=['GET']) def get_id(): global finished tag_id = int(request.args.get("id")) c.execute(f"SELECT * FROM tags WHERE tagid ={tag_id}") tag_list = c.fetchall() if tag_list != []: tag = tag_list[0] if users.qsize() == 0: c.execute(f"UPDATE users SET balance = balance - 1 WHERE id={tag[1]}") conn.commit() return make_response("True") elif users.qsize() > 0: user = users.get() c.execute(f"INSERT OR IGNORE INTO tags (tagid, userid) VALUES ({tag_id}, {user})") conn.commit() finished = user return make_response("True") return make_response("False") def main(): atexit.register(exit_handler) socketio.run(app, host='0.0.0.0', port=5000)