from flask import Flask, render_template, request, redirect, make_response, Request import mysql.connector import os # TODO: add breadcrumb class HTTPMethodOverrideMiddleware(object): def __init__(self, app): self.app = app def __call__(self, environ, start_response): request = Request(environ) if request.args.get('_method'): environ['REQUEST_METHOD'] = request.args.get('_method') return self.app(environ, start_response) mydb = mysql.connector.connect( host=os.environ.get("HOST"), user=os.environ.get("USER"), password=os.environ.get("PASSWORD"), database="new_trello" ) mydb.autocommit = True cursor = mydb.cursor() app = Flask(__name__) app.wsgi_app = HTTPMethodOverrideMiddleware(app.wsgi_app) @app.get("/") def show_all(): cursor.execute('SELECT * FROM items WHERE parent_id IS NULL') if request.cookies.get('movingItemId'): return render_template('show.html', cursor=cursor, moving_item_id=request.cookies.get('movingItemId')) else: return render_template('show.html', cursor=cursor) @app.post("/") def create(): if 'parent_id' in request.form: cursor.execute( 'INSERT INTO items (title, description,parent_id) VALUES(%s,%s,%s)', [request.form['title'],request.form['description'],int(request.form['parent_id'])] ) return redirect('/'+request.form['parent_id']) else: cursor.execute( 'INSERT INTO items (title, description) VALUES(%s,%s)', [request.form['title'],request.form['description']] ) return redirect('/') @app.put("/") def deleteUpdate(id): cursor.execute( 'UPDATE items SET title=%s, description=%s, parent_id=%s WHERE id=%s', [request.form['title'], request.form['description'], request.form['parent_id'] if request.form['parent_id'] != '' else None, id] ) if 'parent_id' in request.form: return redirect('/'+request.form['parent_id']) else: return redirect('/') @app.delete('/') def delete(id): # TODO: deal with deleting item that has children cursor.execute('DELETE FROM items WHERE id=%s LIMIT 1', [id]) if 'parent_id' in request.form: return redirect('/'+request.form['parent_id']) else: return redirect('/') @app.get("/") def show(id): cursor.execute('SELECT * FROM items WHERE id=%s', [id]) parent=cursor.fetchone() cursor.execute('SELECT * FROM items WHERE parent_id=%s',[id]) if request.cookies.get('movingItemId'): return render_template('show.html', parent=parent, cursor=cursor, moving_item_id=request.cookies.get('movingItemId')) else: return render_template('show.html', parent=parent, cursor=cursor) @app.get('//edit') def edit(id): cursor.execute('SELECT * FROM items WHERE id=%s', [id]) return render_template('edit.html', item=cursor.fetchone()) @app.post('//move') @app.post('/move') def move(id=None): if request.args.get('_method') == 'PUT': cursor.execute('UPDATE items SET parent_id = %s WHERE id = %s LIMIT 1', [id if id else None, request.cookies.get('movingItemId')]) response = make_response(redirect('/' + id)) response.set_cookie('movingItemId', '', expires = 0) return response else: if 'parent_id' in request.form: response = make_response(redirect('/'+request.form['parent_id'])) else: response = make_response(redirect('/')) response.set_cookie('movingItemId', id) return response