From 1ae10296fc4b97477f29d38fef25d91df941bd47 Mon Sep 17 00:00:00 2001 From: Alexander Huddleston Date: Sun, 8 Mar 2020 01:21:41 -0600 Subject: [PATCH] Partial integration of database. --- uwume/lib/classUser.py | 3 +++ uwume/lib/databaseMethods.py | 36 +++++++++++++++++++++++++++++++++--- uwume/uwume.py | 8 ++++++-- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/uwume/lib/classUser.py b/uwume/lib/classUser.py index 061c2e7..204fef0 100644 --- a/uwume/lib/classUser.py +++ b/uwume/lib/classUser.py @@ -1,7 +1,9 @@ try: from classUwuCounter import UwuCounter + from databaseMethods import create_user except: from .classUwuCounter import UwuCounter + from .databaseMethods import create_user from flask import Flask, Response from flask_login import LoginManager, UserMixin, login_required @@ -16,6 +18,7 @@ class User(UserMixin): self.id = username self.password = password self.count = UwuCounter(initialCount) + create_user(0, username, password, 0) @classmethod def get(cls, id): diff --git a/uwume/lib/databaseMethods.py b/uwume/lib/databaseMethods.py index f85a9c9..863dd03 100644 --- a/uwume/lib/databaseMethods.py +++ b/uwume/lib/databaseMethods.py @@ -1,15 +1,15 @@ -from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Boolean +from sqlalchemy import create_engine, insert, update, select, MetaData, Table, Column, Integer, String, Boolean from os import environ pg_pass_file = open(environ['POSTGRES_PASSWORD_FILE']) pg_pass = pg_pass_file.readline().strip('\n') engine = create_engine( f"postgresql+psycopg2://{environ['POSTGRES_USER']}:{pg_pass}@{environ['POSTGRES_HOST']}:{environ['POSTGRES_PORT']}/{environ['POSTGRES_DB']}") +conn = engine.connect() +md = MetaData() def initialize_database(): - conn = engine.connect() - md = MetaData() users = Table('users', md, Column('id', Integer()), Column('name', String(255)), @@ -19,3 +19,33 @@ def initialize_database(): md.create_all(engine) except Exception as e: print(f'{e}') + + +def create_user(idn, name, password, count): + users = Table('users', md, autoload=True, autoload_with=engine) + query = insert(users) + values = [{ + 'id': idn, + 'name': name, + 'password': password, + 'count': count + }] + output = conn.execute(query, values) + + +def get_table(): + users = Table('users', md, autoload=True, autoload_with=engine) + return users.columns.keys() + + +def get_count(user): + users = Table('users', md, autoload=True, autoload_with=engine) + query = select([users.columns.count]).where(users.columns.name == user) + output = conn.execute(query) + return output.fetchone()[0] + + +def update_count(user, count): + users = Table('users', md, autoload=True, autoload_with=engine) + query = update(users).values(count=count).where(users.columns.name == user) + return conn.execute(query) diff --git a/uwume/uwume.py b/uwume/uwume.py index 5e54536..50f0a79 100644 --- a/uwume/uwume.py +++ b/uwume/uwume.py @@ -2,10 +2,12 @@ try: from .lib.helpers import get_static_paths, get_content_text from .lib.classUser import User from .lib.classUwuCounter import UwuCounter + from .lib.databaseMethods import get_table, get_count, update_count except: from lib.classUser import User from lib.helpers import get_static_paths, get_content_text from lib.classUwuCounter import UwuCounter + from lib.databaseMethods import get_table, get_count, update_count from . import app from flask import Flask, render_template, redirect, url_for, request, flash from flask_login import LoginManager, UserMixin, login_required, login_user, current_user, logout_user @@ -44,7 +46,9 @@ def get_curval(username): error = '' if(request.method == 'GET'): try: - return f'{User.user_database[username][2].curval}' + new_count = f'{User.user_database[username][2].curval}' + update_count(username, new_count) + return new_count except Exception as e: error = f'{e}' return f'ERROR: {error}' @@ -55,7 +59,7 @@ def user_page(username): error = '' if(request.method == 'GET'): if(username in User.user_database.keys()): - return render_template('user/index.html', this_user=username, user_curval=str(User.user_database[username][2].curval), static_paths=get_static_paths(), content_text=get_content_text()) + return render_template('user/index.html', this_user=username, user_curval=str(get_count(username)), static_paths=get_static_paths(), content_text=get_content_text()) else: error = 'User doesn\'t exist.' elif(request.method == 'POST'):