-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodels.py
84 lines (65 loc) · 2.78 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
from datetime import datetime
from flask_admin.contrib.sqla import ModelView
from pytz import timezone
from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from CASClient import CASClient
from database import Base
class AdminView(ModelView):
def is_accessible(self):
netid = CASClient().authenticate()
return User.query.filter(User.netid == netid).first().is_admin
class AdminViewRestricted(AdminView):
can_create = False
can_delete = False
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
netid = Column(String(20), unique=True, nullable=False)
first_name = Column(String(50), default="", unique=False, nullable=True)
last_name = Column(String(50), default="", unique=False, nullable=True)
email = Column(String(50), default="", unique=True)
entry = relationship("Entry", backref="user", uselist=False)
email_log = relationship("EmailLog", backref="user")
is_admin = Column(Boolean, default=False, unique=False, nullable=True)
def __init__(self, netid):
self.netid = netid
self.email = f"{netid}@princeton.edu"
def __repr__(self):
return f"<User netid={self.netid!r}>"
class Config(Base):
__tablename__ = "config"
id = Column(Integer, primary_key=True)
due_date = Column(
DateTime, nullable=False, default=datetime.now(tz=timezone("US/Eastern"))
)
def __repr__(self):
return f"<Config due_date={self.due_date!r}>"
class Entry(Base):
__tablename__ = "entries"
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey("users.id"))
created_date = Column(
DateTime, nullable=False, default=datetime.now(tz=timezone("US/Eastern"))
)
last_modified_date = Column(
DateTime, nullable=False, default=datetime.now(tz=timezone("US/Eastern"))
)
skills = Column(String(500), nullable=False, default="")
interests = Column(String(500), nullable=False, default="")
project_name = Column(String(100), nullable=False, default="")
project_description = Column(String(500), nullable=False, default="")
def __repr__(self):
netid = self.user.netid if self.user else "Unknown"
return f"<Entry user={netid!r} project_name={self.project_name!r}>"
class EmailLog(Base):
__tablename__ = "email_logs"
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey("users.id"))
date = Column(
DateTime, nullable=False, default=datetime.now(tz=timezone("US/Eastern"))
)
email_type = Column(String(100), nullable=False)
def __repr__(self):
netid = self.user.netid if self.user else "Unknown"
return f"<EmailLog user={netid!r} email_type={self.email_type!r}>"