View raw

1 # -*- mode: python; -*- 2 3 4 from flask_sqlalchemy import SQLAlchemy 5 from sqlalchemy.sql import func 6 7 from flask_login import UserMixin 8 9 db = SQLAlchemy() 10 11 12 class User(UserMixin, db.Model): 13 """UserMixin inheritance required for features described here: 14 15 https://stackoverflow.com/questions/63231163/what-is-the-usermixin-in-flask""" 16 17 __tablename__ = "User" 18 19 def get_id(self): 20 return self.primary_key 21 22 primary_key = db.Column("UserId", db.Integer, primary_key=True) 23 username = db.Column("Username", db.String(20), nullable=False) 24 hashed_password = db.Column("HashedPassword", db.String(100), nullable=False) 25 name_first = db.Column("NameFirst", db.String(20), nullable=False) 26 name_last = db.Column("NameLast", db.String(20), nullable=False) 27 date_time_created = db.Column( 28 "DateTimeCreated", db.String, server_default=func.now() 29 ) 30 date_time_updated = db.Column( 31 "DateTimeUpdated", db.String, server_onupdate=func.now() 32 ) 33 downloads = db.relationship("Download", back_populates="user") 34 35 def __repr__(self): 36 return f"<User {self.name_first} {self.name_last}>" 37 38 39 class Download(db.Model): 40 """One record per file downloaded.""" 41 42 __tablename__ = "Download" 43 primary_key = db.Column("DownloadId", db.Integer, primary_key=True) 44 title = db.Column("Title", db.String(20), nullable=False) 45 url = db.Column("URL", db.String, nullable=False) 46 date_time_downloaded = db.Column( 47 "DateTimeDownloaded", db.String, server_default=func.now() 48 ) 49 user_id = db.Column("UserId", db.Integer, db.ForeignKey("User.UserId")) 50 user = db.relationship("User", back_populates="downloads") 51 52 def __init__( 53 self, 54 title, 55 url, 56 user_id, 57 ): 58 self.title = title 59 self.url = url 60 self.user_id = user_id 61 62 def __repr__(self): 63 return f"<Download {self.user.title} for {self.user.first_name} downloaded {self.date_time_downloaded}>" 64