-
Notifications
You must be signed in to change notification settings - Fork 26
/
models.py
66 lines (51 loc) · 2.25 KB
/
models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
""" Represents the persistent models for the sniper application"""
from flask.ext.sqlalchemy import SQLAlchemy
from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db/production.db'
db = SQLAlchemy(app)
class Snipe(db.Model):
""" A snipe model represents the course info pertaining to a snipe"""
id = db.Column(db.Integer, primary_key=True)
subject = db.Column(db.String(8))
course_number = db.Column(db.String(8))
section = db.Column(db.String(8))
# set up the many to one relationship with the User model.
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
@classmethod
def create(cls, email, subject, course_number, section):
""" Creates a snipe, and its corresponding user if they don't already exist"""
# see if the user exists already
user = User.query.filter_by(email=email).first()
if not user:
return Snipe(email, subject, course_number, section)
# see if the snipe exists already
snipe = Snipe.query.filter_by(user=user, subject=subject, course_number=course_number, section=section).first()
if not snipe:
return Snipe(email, subject, course_number, section)
return snipe
def __init__(self, email, subject, course_number, section):
user = User.query.filter_by(email=email).first()
if user:
self.user = user
else:
user = User(email)
self.subject = subject
self.course_number = course_number
self.section = section
self.user = user
def __repr__(self):
return '(%s:%s:%s)' % (self.subject, self.course_number, self.section)
class User(db.Model):
""" Represents a user in the database (phone_number and email pair). """
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(255))
phone_number = db.Column(db.String(16))
# Set up the one to many relationship with the Snipe model.
snipes = db.relationship('Snipe', backref='user')
def __init__(self, email=None, phone_number=None):
if not email:
raise Exception('I don\'t have an email for a user')
self.email = email
def __repr__(self):
return '(%s)' % (self.email)