2023-05-31 18:33:45 +00:00
import queue
2023-05-31 20:29:47 +00:00
from flask import Flask , render_template , request , make_response , flash
2023-05-31 18:33:45 +00:00
from flask_socketio import SocketIO #https://pythonprogramminglanguage.com/python-flask-websocket/
import sqlite3
import time
import atexit
import sys
db_path = ' mate.db '
2023-05-31 19:23:40 +00:00
conn = sqlite3 . connect ( db_path , check_same_thread = False )
2023-05-31 18:33:45 +00:00
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 ' <a href= " /list " >user and tag list</a> <p>The creator of this website accepts no liability for any linguistic or technical errors!</p> '
@app.route ( " /list " )
def list ( ) :
c . execute ( " SELECT * FROM users " )
users = c . fetchall ( )
text = " "
for i in users :
text = text + f ' <p> { i [ 1 ] } : { i [ 2 ] } <form action= " /addtag " method= " get " ><input name= " id " type= " hidden " value= " { i [ 0 ] } " ><button type= " submit " >Add Tag</button></form><form action= " /change " method= " get " ><input name= " id " type= " hidden " value= " { i [ 0 ] } " > Change balance: <input name= " change " ><input type= " submit " ></form></p><br></br> '
return ' <form action= " /list/user " method= " get " > Search for User: <input name= " user " ><input type= " submit " ></form> <form action= " /adduser " method= " get " ><button type= " submit " >Add User</button></form> <br></br> ' + text
@app.route ( " /list/user " , methods = [ ' GET ' ] )
2023-05-31 20:29:47 +00:00
def user_info ( ) :
2023-05-31 18:33:45 +00:00
username = request . args . get ( " user " )
c . execute ( " SELECT * FROM users WHERE username = ' %s ' " % username )
user = c . fetchall ( )
if user != [ ] :
user = user [ 0 ]
return f ' <p> { user [ 1 ] } : { user [ 2 ] } <form action= " /addtag " method= " get " ><input name= " id " type= " hidden " value= " { user [ 0 ] } " ><button type= " submit " >Add Tag</button></form><form action= " /change " method= " get " ><input name= " id " type= " hidden " value= " { user [ 0 ] } " > Change balance: <input name= " change " ><input type= " submit " ></form></p> '
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 " )
2023-05-31 19:23:40 +00:00
c . execute ( f " SELECT * FROM users WHERE username= ' { str ( user ) } ' " )
2023-05-31 18:33:45 +00:00
if c . fetchall ( ) == [ ] :
c . execute ( " INSERT or IGNORE INTO users (username, balance) VALUES ( ' %s ' , 0) " % user )
conn . commit ( )
2023-05-31 19:23:40 +00:00
return ' Added user <a href= " /list " >user and tag list</a> <p>The creator of this website accepts no liability for any linguistic or technical errors!</p> '
2023-05-31 18:33:45 +00:00
else :
2023-05-31 19:23:40 +00:00
return ' User already exists <a href= " /list " >user and tag list</a> <p>The creator of this website accepts no liability for any linguistic or technical errors!</p> '
2023-05-31 18:33:45 +00:00
@app.route ( " /change " , methods = [ ' GET ' ] )
def change ( ) :
user_id = int ( request . args . get ( " id " ) )
try :
change = int ( request . args . get ( " change " ) )
except ValueError :
return ' <p>Pleas enter a number!</p><a href= " /list " >tags and user list</a> '
if change < 0 :
text = " removed from "
elif change > 0 :
text = " added to "
elif change == 0 :
return " <p>Nothing was done!</p> "
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 ' <p> { 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 ]
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 " )
2023-06-09 17:11:45 +00:00
notimportant = users . get ( )
2023-05-31 20:29:47 +00:00
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 } " )
2023-05-31 18:33:45 +00:00
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 " ) )
2023-06-09 16:52:38 +00:00
print ( tag_id )
2023-05-31 18:33:45 +00:00
c . execute ( f " SELECT * FROM tags WHERE tagid = { tag_id } " )
tag_list = c . fetchall ( )
2023-06-09 16:52:38 +00:00
print ( tag_list )
2023-05-31 18:33:45 +00:00
if tag_list != [ ] :
tag = tag_list [ 0 ]
2023-06-09 16:59:07 +00:00
print ( " aha " )
2023-06-09 17:01:48 +00:00
print ( users . qsize ( ) )
2023-05-31 18:33:45 +00:00
if users . qsize ( ) == 0 :
2023-06-09 16:59:07 +00:00
print ( " wants to change " )
2023-05-31 18:33:45 +00:00
c . execute ( f " UPDATE users SET balance = balance - 1 WHERE id= { tag [ 1 ] } " )
2023-06-09 16:52:38 +00:00
print ( " changed " )
2023-05-31 18:33:45 +00:00
conn . commit ( )
return make_response ( " True " )
elif users . qsize ( ) > 0 :
2023-06-09 16:52:38 +00:00
print ( " added " )
2023-05-31 18:33:45 +00:00
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 " )
2023-06-09 16:52:38 +00:00
else :
print ( " Error " )
2023-05-31 18:33:45 +00:00
return make_response ( " False " )
def main ( ) :
atexit . register ( exit_handler )
2023-05-31 19:23:40 +00:00
socketio . run ( app , host = ' 0.0.0.0 ' , port = 5000 )