Skip to content

Instantly share code, notes, and snippets.

@SonyaEick
Created August 21, 2014 14:53
Show Gist options
  • Save SonyaEick/19e4b1c585413cbfabc5 to your computer and use it in GitHub Desktop.
Save SonyaEick/19e4b1c585413cbfabc5 to your computer and use it in GitHub Desktop.
DataDork files
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship, backref, scoped_session
from flask.views import MethodView
USER_COLS = ["id", "email", "password", "age"]
engine = create_engine("sqlite:///ratings.db", echo=True)
session = scoped_session(sessionmaker(bind=engine, autocommit=False, autoflush=False))
Base = declarative_base()
Base.query = session.query_property()
Base.metadata.create_all(engine)
class User(Base):
__tablename__ = "Users"
id = Column(Integer, primary_key = True)
email = Column(String(64), nullable=True)
password = Column(String(64), nullable=True)
age = Column(Integer, nullable=True)
def __init__(self, email = None, password = None, age=None):
self.email = email
self.password = password
self.age = age
class Rating(Base):
__tablename__ = "Ratings"
id = Column(Integer, primary_key = True)
user_id = Column(Integer)
recipient_id = Column(Integer, nullable = True)
star1 = Column(Integer, nullable = True)
text1 = Column(String(150), nullable=True)
star2 = Column(Integer, nullable = True)
text2 = Column(String(150), nullable=True)
star3 = Column(Integer, nullable = True)
text3 = Column(String(150), nullable=True)
def __init__(self, user_id, recipient_id, star1, text1, star2, text2, star3, text3):
self.user_id = user_id
self.recipient_id = recipient_id
self.star1 = star1
self.text1 = text1
self.star2 = star2
self.text2 = text2
self.star3 = star3
self.text3 = text3
class Feedback(Base):
__tablename__ = "Feedback"
id = Column(Integer, primary_key = True)
user_id = Column(Integer)
rater_id = Column(Integer)
star1 = Column(Integer, nullable = True)
text1 = Column(String(150), nullable=True)
star2 = Column(Integer, nullable = True)
text2 = Column(String(150), nullable=True)
star3 = Column(Integer, nullable = True)
text3 = Column(String(150), nullable=True)
def __init__(self, user_id, rater_id, star1, text1, star2, text2, star3, text3):
self.user_id = user_id
self.rater_id = rater_id
self.star1 = star1
self.text1 = text1
self.star2 = star2
self.text2 = text2
self.star3 = star3
self.text3 = text3
def new_user(email, password, age):
session.add(User(email, password, age))
session.commit()
# recipient_id taken out in session & paramenters
def new_rating(user_id, recipient_id, star1, text1, star2, text2, star3, text3):
session.add(Rating(user_id, recipient_id, star1, text1, star2, text2, star3, text3))
session.commit()
def feedback(user_id, rater_id, star1, text1, star2, text2, star3, text3):
session.add(Feedback(user_id, rater_id, star1, text1, star2, text2, star3, text3))
session.commit()
def make_user(row):
fields = ["id", "email", "password", "username"]
return dict(zip(fields, row))
# def new_rating(user_id, recipient_id, q1, feed1, q2, feed2, q3, feed3):
# session.add(Ratings(user_id, recipient_id, q1, feed1, q2, feed2, q3, feed3))
# session.commit()
def insert_into_table(db, table, columns, values):
c = db.cursor()
query_template = """INSERT into %s values (%s)"""
num_cols = len(columns)
q_marks = ", ".join(["NULL"] + (["?"] * (num_cols-1)))
query = query_template%(table, q_marks)
res = c.execute(query, tuple(values))
if res:
db.commit()
return res.lastrowid
#def get_profile():
#def main():
if __name__ == "__main__":
main()
from flask import (
Flask, render_template, redirect, request, session, flash,
g, get_flashed_messages, url_for, request, signals_available)
import model
app = Flask(__name__)
SECRET_KEY = '' #removed for gist
app.config.from_object(__name__)
@app.route("/")
def index():
return redirect("/login")
# @login_manager.user_loader
# def load_user(userid):
# return User.get(userid)
@app.route("/login", methods=["GET", "POST"])
def login():
return render_template("login.html")
@app.route("/logout", methods=["GET", "POST"])
def logout():
session.pop('user_id')
return redirect("/login")
@app.route("/authenticate", methods=["POST"])
def authenticate():
# try:
email_entered = str(request.form['email_field'])
password_entered = str(request.form['password_field'])
logged_in_user = model.session.query(model.User).filter(
model.User.email == email_entered,
model.User.password == password_entered).one()
if logged_in_user:
session['user_id'] = logged_in_user.id
return redirect("/profile")
# except:
# flash("Invalid user id")
# return redirect("/login")
@app.route("/save_user", methods=["POST"])
def new_user():
user_email= request.form['user_email']
user_pass= request.form['password_field']
user_age= request.form['age_field']
model.new_user(user_email, user_pass, user_age)
return redirect("/profile")
# We are making a rating. The data
# will be stored directly into the database
# where the session id matches the user logged in
@app.route("/save_rating", methods=["POST"])
def new_rating():
# current_session = session(id).one()
# print current_session
user_id = session['user_id']
recipient_id = request.form.get('recipient_id')
star1 = request.form.get('star1')
text1 = request.form.get('text1')
star2 = request.form.get('star2')
text2 = request.form.get('text2')
star3 = request.form.get('star3')
text3 = request.form.get('text3')
model.new_rating(user_id, recipient_id, star1, text1, star2, text2, star3, text3)
return redirect("/profile")
@app.route("/new_feedback", methods=["POST"])
def new_feedback():
user_id = session['user_id']
rater_id = request.form.get('rater_id')
print rater_id
star1 = request.form.get('star1')
text1 = request.form.get('text1')
star2 = request.form.get('star2')
text2 = request.form.get('text2')
star3 = request.form.get('star3')
text3 = request.form.get('text3')
model.feedback(user_id, rater_id, star1, text1, star2, text2, star3, text3)
return redirect("/profile")
@app.route("/profile")
def show_profile():
user_id = session['user_id']
user = model.session.query(model.User).filter(model.User.id == user_id).one()
votes = model.session.query(model.Rating).filter(model.Rating.recipient_id == user_id).all()
# recipient_id because I want to get the id of the user getting rated,
# which will be the current user logged in.
# We made another user variable because the first one queries
fuser = model.session.query(model.User).filter(model.User.id == user_id).one()
fvotes = model.session.query(model.Feedback).filter(model.Feedback.rater_id == user_id).all()
number_of_voters = model.session.query(model.Rating).filter(model.Rating.recipient_id == user_id).count()
fnumber_of_voters = model.session.query(model.Feedback).filter(model.Feedback.rater_id == user_id).count()
# select count(*) from users where email="admin";
sum_of_votes = 0
dating = 0
feedback = 0
# Dating Score
if number_of_voters != 0:
for vote in votes:
sum_of_votes += vote.star1 + vote.star2 + vote.star3
number_of_voters = len(votes) * 3
dating = float(sum_of_votes) / number_of_voters
# Feedback Score
if fnumber_of_voters != 0:
for fvote in fvotes:
sum_of_votes += vote.star1 + vote.star2 + vote.star3
number_of_voters = len(fvotes) * 3
feedback = float(sum_of_votes) / number_of_voters
return render_template("profile.html", user = user,
dating=dating, feedback=feedback, fuser = fuser)
@app.route("/rating")
def rating():
all_users = model.session.query(model.User).all()
return render_template("rating.html", users = all_users)
@app.route("/feedback")
def feedback():
all_users = model.session.query(model.User).all()
return render_template("feedback.html", users = all_users)
if __name__ == "__main__":
app.run(debug = True)
@SonyaEick
Copy link
Author

All of these need plenty of work!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment