Example #1
0
class PostComment(db.Model):
    __tablename__ = 'post_comments'
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.Text)
    body_html = db.Column(db.Text)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    disabled = db.Column(db.Boolean)
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    post_id = db.Column(db.Integer, db.ForeignKey('posts.id'))

    @staticmethod
    def on_changed_body(target, value, oldvalue, initiator):
        allowed_tags = [
            'a', 'abbr', 'acronym', 'b', 'code', 'em', 'i', 'strong'
        ]
        target.body_html = bleach.linkify(
            bleach.clean(markdown(value, output_format='html'),
                         tags=allowed_tags,
                         strip=True))

    @staticmethod
    def from_json(json_comment):
        body = json_comment.get('body')
        if body is None or body == '':
            raise ValidationError('comment does not have a body')
        return PostComment(body=body)
Example #2
0
class UserFollow(db.Model):
    __tablename__ = 'user_follows'
    follower_id = db.Column(db.Integer,
                            db.ForeignKey('users.id'),
                            primary_key=True)
    followed_id = db.Column(db.Integer,
                            db.ForeignKey('users.id'),
                            primary_key=True)
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)
class UserRatedMovie(db.Model):
    __tablename__ = 'user_rated_movies'
    movie_id = db.Column(db.Integer,
                         db.ForeignKey('movies.id'),
                         primary_key=True)
    user_id = db.Column(db.Integer,
                        db.ForeignKey('users.id'),
                        primary_key=True)
    score = db.Column(db.Float, default=5.0)
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)
Example #4
0
class Song(db.Model):
    __tablename__ = 'songs'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(50), nullable=False)
    album_id = db.Column(db.Integer,
                         db.ForeignKey('albums.id'),
                         nullable=False)
    artist_id = db.Column(db.Integer,
                          db.ForeignKey('artists.id'),
                          nullable=False)
    file = db.relationship('File', backref='song', lazy=True)

    def __repr__(self):
        return f"Song('{self.title}','{self.album}', '{self.artist}', '{self.file}')"
Example #5
0
class Post(db.Model):
    __tablename__ = 'posts'
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.Text)
    body_html = db.Column(db.Text)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    comments = db.relationship('PostComment', backref='post', lazy='dynamic')

    @staticmethod
    def on_changed_body(target, value, oldvalue, initiator):
        allowed_tags = [
            'a', 'abbr', 'acronym', 'b', 'blockquote', 'code', 'em', 'i', 'li',
            'ol', 'pre', 'strong', 'ul', 'h1', 'h2', 'h3', 'p'
        ]
        target.body_html = bleach.linkify(
            bleach.clean(markdown(value, output_format='html'),
                         tags=allowed_tags,
                         strip=True))

    @staticmethod
    def from_json(json_post):
        body = json_post.get('body')
        if body is None or body == '':
            raise ValidationError('post does not have a body')
        return Post(body=body)
Example #6
0
class SmartAction(db.Model):
    __tablename__ = "smart_house_action"
    id = db.Column('id', db.Integer, primary_key=True)
    sensor_id = db.Column(db.Integer, db.ForeignKey('smart_sensor.id'))
    time = db.Column('time', db.DateTime)
    action = db.Column('action', db.String(50))
    outcome = db.Column('outcome', db.String(50))
Example #7
0
class CohortData(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    course_id = db.Column(db.Integer, db.ForeignKey("courses.id"))
    major = db.Column(db.String(12))
    freshman = db.Column(db.Integer)
    sophmores = db.Column(db.Integer)
    juniors = db.Column(db.Integer)
    seniors = db.Column(db.Integer)
Example #8
0
class ScheduleFinal(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    term_id = db.Column(db.Integer, db.ForeignKey("terms.id"))
    course_id = db.Column(db.Integer, db.ForeignKey("courses.id"))
    number_sections = db.Column(db.String(4))
    total_enrollment = db.Column(db.String(4))
    waitlist = db.Column(db.String(4))

    @property
    def serialize(self):
        return {
            'id': self.id,
            'course_major': self.course.major,
            'course_number': self.course.number,
            'number_sections': self.number_sections,
            'total_enrollment': self.total_enrollment,
            'waitlist': self.waitlist
        }
Example #9
0
class Album(db.Model):
    __tablename__ = 'albums'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    artist_id = db.Column(db.Integer, db.ForeignKey('artists.id'))
    songs = db.relationship('Song', backref='album', lazy=True)

    def __repr__(self):
        return f"Album('{self.name}','{self.songs}')"
Example #10
0
class File(db.Model):
    __tablename__ = 'files'
    id = db.Column(db.Integer, primary_key=True)
    extension = db.Column(db.String(255), nullable=False)
    name_on_server = db.Column(db.String(255), nullable=False)
    song_id = db.Column(db.Integer, db.ForeignKey('songs.id'))

    def __repr__(self):
        return f"File('{self.extension}','{self.name_on_server}')"
Example #11
0
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.now)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)

    def __repr__(self):
        return f"Post('{self.title}', '{self.date_posted}'"
Example #12
0
class Todo(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    comment = db.Column(db.Text, nullable=False)
    date_created = db.Column(db.DateTime, nullable=False, default=datetime.now)
    priority = db.Column(db.String, nullable=False)
    todo_mail = db.Column(db.String, db.ForeignKey('users.mail'))

    def __repr__(self):
        return f"Todo('{self.comment}', '{self.priority}')"
Example #13
0
class FacultyCoursePreferences(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    faculty_id = db.Column(db.Integer, db.ForeignKey("faculty.id"))
    term_id = db.Column(db.Integer, db.ForeignKey("terms.id"))
    course_id = db.Column(db.Integer, db.ForeignKey("courses.id"))
    preference = db.Column(
        db.String(1))  # M - Most wanted, A - able to teach, C - cannot teach

    @property
    def serialize(self):
        return {
            'id': self.id,
            'faculty_id': self.faculty_id,
            'faculty_first_name': self.faculty.first_name,
            'faculty_last_name': self.faculty.last_name,
            'course_name': self.course.course_name,  #course_name
            'preference': self.preference
        }
Example #14
0
class SmartSensor(db.Model):
    id = db.Column('id', db.Integer, primary_key=True)
    controller_id = db.Column(db.Integer, db.ForeignKey('smart_controller.id'))
    sensor = db.Column('sensor', db.Boolean)
    gpio = db.Column('gpio', db.Integer)
    description = db.Column('description', db.String(50))
    registered_on = db.Column('registered_on', db.DateTime)
    last_connetion = db.Column('last_connetion', db.DateTime)
    actions = db.relationship('SmartAction', backref='sensor', lazy='dynamic')
Example #15
0
class SmartController(db.Model):
    id = db.Column('id', db.Integer, primary_key=True)
    house_id = db.Column(db.Integer, db.ForeignKey('smart_house.id'))
    ctype = db.Column('type', db.String(50))
    floor = db.Column('floor', db.Integer)
    registered_on = db.Column('registered_on', db.DateTime)
    last_connetion = db.Column('last_login_date', db.DateTime)
    sensors = db.relationship('SmartSensor',
                              backref='controller',
                              lazy='dynamic')
Example #16
0
class StudentPlanningData(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    term_id = db.Column(db.Integer, db.ForeignKey("terms.id"))
    course_id = db.Column(db.Integer, db.ForeignKey("courses.id"))
    number_sections = db.Column(db.Integer)
    capacity = db.Column(db.Integer)
    seat_demand = db.Column(db.Integer)
    unmet_seat_demand = db.Column(db.Integer)

    @property
    def serialize(self):
        return {
            'id': self.id,
            'course_major': self.course.major,
            'course_number': self.course.number,
            'number_sections': self.number_sections,
            'capacity': self.capacity,
            'seat_demand': self.seat_demand,
            'unmet_seat_demand': self.unmet_seat_demand
        }
Example #17
0
class FacultyPreferences(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    faculty_id = db.Column(db.Integer, db.ForeignKey("faculty.id"))
    term_id = db.Column(db.Integer, db.ForeignKey("terms.id"))
    day = db.Column(db.String(1))  # 'M', 'T', etc.
    time_start = db.Column(db.Time)
    time_end = db.Column(db.Time)
    preference = db.Column(db.String(15))

    @property
    def serialize(self):
        return {
            'id': self.id,
            'faculty_id': self.faculty_id,
            'day': self.day,
            'time_start': self.time_start.isoformat()
            [:-3],  #[:-3] Removes the seconds from time
            'time_end': self.time_end.isoformat()
            [:-3],  #[:-3] Removes the seconds from time
            'choice': self.preference
        }
Example #18
0
class SmartHouse(db.Model):
    id = db.Column('id', db.Integer, primary_key=True)
    admin_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    location = db.Column('location', db.String(50))
    url = db.Column('url', db.String(50))
    port = db.Column('port', db.Integer)
    floors = db.Column('floors', db.Integer)
    registered_on = db.Column('registered_on', db.DateTime)
    last_connetion = db.Column('last_connetion', db.DateTime)
    controllers = db.relationship('SmartController',
                                  backref='house',
                                  lazy='dynamic')
Example #19
0
class ThumbnailImage(db.Model):
    __tablename__ = 'thumbnail_image'
    id = db.Column(db.Integer, primary_key=True)
    path = db.Column(db.String(250), nullable=False)
    original_image_id = db.Column(db.Integer, db.ForeignKey('image.id'))
    dimensions = db.Column(db.String(25), nullable=True)
    original_image = relationship('Image', back_populates='thumbnail_image')

    def __init__(self, image_name, original_image):
        self.path = image_name
        self.original_image = original_image

        width, height = PilImage.open(get_full_path(image_name)).size
        self.dimensions = '{}x{}'.format(width, height)
Example #20
0
class Sections(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    course_id = db.Column(db.Integer, db.ForeignKey("courses.id"))
    term_id = db.Column(db.Integer, db.ForeignKey("terms.id"))
    faculty_id = db.Column(db.Integer, db.ForeignKey("faculty.id"))
    room_id = db.Column(db.Integer, db.ForeignKey("rooms.id"))
    number = db.Column(db.Integer)
    section_type = db.Column(db.String(15))  # lecture of lab
    time_start = db.Column(db.Integer)
    time_end = db.Column(db.Integer)
    days = db.Column(db.String(3))  # 'MWF' or "TR"
    #schedule_id = db.Column(db.Integer, db.ForeignKey("schedule.id"))

    # want course name, faculty name, room number,
    @property
    def serialize(self):
        #"""Return object data in easily serializeable format"""
        return {
            'id': self.id,
            'course': self.course.major,
            'course_id': self.course.id,
            'course_num':
            (Courses.query.filter_by(id=self.course_id).first()).number,
            'term_id': self.term_id,
            'faculty': self.faculty.last_name,  #faculty name
            'faculty_id': self.faculty.id,
            'room': self.room.number,  #room number/id
            'room_id': self.room.id,
            'number': self.number,
            'section_type': self.section_type,
            'time_start': timeCalculations.twelveHourTime(self.time_start),
            'time_end': timeCalculations.twelveHourTime(self.time_end),
            'hours': timeCalculations.hoursBetween(self.time_end,
                                                   self.time_start),
            'days': self.days,
            'capacity': self.room.capacity
        }
Example #21
0
class Components(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20))
    course_id = db.Column(db.Integer, db.ForeignKey("courses.id"))
    workload_units = db.Column(db.String(5))
    hours = db.Column(db.String(5))

    @property
    def serialize(self):
        #"""Return object data in easily serializeable format"""
        return {
            'id': self.id,
            'name': self.name,
            'course_id': self.course_id,
            'workload_units': self.workload_units,
            'hours': self.hours
        }
Example #22
0
class Byke_trip(db.Model):
	time = db.Column(db.String(30), nullable=True)
	speed = db.Column(db.Float, nullable=True)
	lat = db.Column(db.Float, nullable=True)
	lng = db.Column(db.Float, nullable=True)
	climb = db.Column(db.Float, nullable=True)
	trip_id = db.Column(db.Integer, nullable=False)
	entry_id = db.Column(db.Integer, primary_key=True, nullable=False)
	user_id = db.Column(db.Integer, db.ForeignKey('byke_user.id'), nullable=False)
	
	# -----------------------------------------------------
	# Function: __repr__
	# Author:  Tanner L
	# Modified:
	# Date: 01/10/19
	# Desc: specifies what to return for class query
	# Inputs:
	# Outputs: returns entry_id, trip_id, user_id
	# -----------------------------------------------------	
	def __repr__(self):
		return f"Byke_trip_gps('{self.entry_id}', '{self.trip_id}', '{self.user_id}')"
Example #23
0
class Comments(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    term_id = db.Column(db.Integer, db.ForeignKey("terms.id"))
    username = db.Column(db.String(32))
    comment = db.Column(db.Text)
    time = db.Column(db.String(30))
    unread = db.Column(db.Boolean, default=True)
    type = db.Column(db.String(20))

    @property
    def serialize(self):
        # """Return object data in easily serializeable format"""
        return {
            'id': self.id,
            'term_id': self.term_id,
            'username': self.username,
            'comment': self.comment,
            'time': self.time,
            'unread': self.unread,
            'type': self.type
        }
Example #24
0
class Byke_trip_stats(db.Model):
	date = db.Column(db.String(20), nullable=True)
	time = db.Column(db.Float, nullable=True)
	max_speed = db.Column(db.Float, nullable=True)
	avg_speed = db.Column(db.Float, nullable=True)
	uphill = db.Column(db.Float, nullable=True)
	downhill = db.Column(db.Float, nullable=True)
	distance = db.Column(db.Float, nullable=True)
	trip_id = db.Column(db.Integer, primary_key=True, nullable=False)
	user_id = db.Column(db.Integer, db.ForeignKey('byke_user.id'), nullable=False)
	
	# -----------------------------------------------------
	# Function: __repr__
	# Author: Tanner L
	# Modified: 
	# Date: 01/10/19
	# Desc: specifies what to return for class query
	# Inputs:
	# Outputs: returns date, trip_id, user_id
	# -----------------------------------------------------	
	def __repr__(self):
		return f"Byke_trip_stats('{self.date}', '{self.trip_id}', '{self.user_id}')"
		
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.String(140))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
Example #26
0
class User(UserMixin, db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(64), unique=True, index=True)
    username = db.Column(db.String(64), unique=True, index=True)
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    password_hash = db.Column(db.String(128))
    confirmed = db.Column(db.Boolean, default=False)
    name = db.Column(db.String(64))
    location = db.Column(db.String(64))
    about_me = db.Column(db.Text())
    member_since = db.Column(db.DateTime(), default=datetime.utcnow)
    last_seen = db.Column(db.DateTime(), default=datetime.utcnow)
    avatar_hash = db.Column(db.String(32))
    posts = db.relationship('Post', backref='author', lazy='dynamic')
    followed = db.relationship('UserFollow',
                               foreign_keys=[UserFollow.follower_id],
                               backref=db.backref('follower', lazy='joined'),
                               lazy='dynamic',
                               cascade='all, delete-orphan')
    followers = db.relationship('UserFollow',
                                foreign_keys=[UserFollow.followed_id],
                                backref=db.backref('followed', lazy='joined'),
                                lazy='dynamic',
                                cascade='all, delete-orphan')
    comments = db.relationship('PostComment', backref='author', lazy='dynamic')

    @staticmethod
    def add_self_follows():
        for user in User.query.all():
            if not user.is_following(user):
                user.follow(user)
                db.session.add(user)
                db.session.commit()

    def __init__(self, **kwargs):
        super(User, self).__init__(**kwargs)
        if self.role is None:
            if self.email == current_app.config['SITE_ADMIN']:
                self.role = Role.query.filter_by(name='Administrator').first()
            if self.role is None:
                self.role = Role.query.filter_by(default=True).first()
        if self.email is not None and self.avatar_hash is None:
            self.avatar_hash = self.gravatar_hash()
        self.follow(self)

    @property
    def password(self):
        raise AttributeError('password is not a readable attribute')

    @password.setter
    def password(self, password):
        self.password_hash = generate_password_hash(password)

    def verify_password(self, password):
        return check_password_hash(self.password_hash, password)

    def generate_confirmation_token(self, expiration=3600):
        s = Serializer(current_app.config['SECRET_KEY'], expiration)
        return s.dumps({'confirm': self.id}).decode('utf-8')

    def confirm(self, token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token.encode('utf-8'))
        except:
            return False
        if data.get('confirm') != self.id:
            return False
        self.confirmed = True
        db.session.add(self)
        return True

    def generate_reset_token(self, expiration=3600):
        s = Serializer(current_app.config['SECRET_KEY'], expiration)
        return s.dumps({'reset': self.id}).decode('utf-8')

    @staticmethod
    def reset_password(token, new_password):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token.encode('utf-8'))
        except:
            return False
        user = User.query.get(data.get('reset'))
        if user is None:
            return False
        user.password = new_password
        db.session.add(user)
        return True

    def generate_email_change_token(self, new_email, expiration=3600):
        s = Serializer(current_app.config['SECRET_KEY'], expiration)
        return s.dumps({
            'change_email': self.id,
            'new_email': new_email
        }).decode('utf-8')

    def change_email(self, token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token.encode('utf-8'))
        except:
            return False
        if data.get('change_email') != self.id:
            return False
        new_email = data.get('new_email')
        if new_email is None:
            return False
        if self.query.filter_by(email=new_email).first() is not None:
            return False
        self.email = new_email
        self.avatar_hash = self.gravatar_hash()
        db.session.add(self)
        return True

    def can(self, perm):
        return self.role is not None and self.role.has_permission(perm)

    def is_administrator(self):
        return self.can(Permission.ADMIN)

    def ping(self):
        self.last_seen = datetime.utcnow()
        db.session.add(self)

    def gravatar_hash(self):
        return hashlib.md5(self.email.lower().encode('utf-8')).hexdigest()

    def gravatar(self, size=100, default='identicon', rating='g'):
        url = 'https://secure.gravatar.com/avatar'
        hash = self.avatar_hash or self.gravatar_hash()
        return '{url}/{hash}?s={size}&d={default}&r={rating}'.format(
            url=url, hash=hash, size=size, default=default, rating=rating)

    def follow(self, user):
        if not self.is_following(user):
            f = UserFollow(follower=self, followed=user)
            db.session.add(f)

    def unfollow(self, user):
        f = self.followed.filter_by(followed_id=user.id).first()
        if f:
            db.session.delete(f)

    def is_following(self, user):
        if user.id is None:
            return False
        return self.followed.filter_by(followed_id=user.id).first() is not None

    def is_followed_by(self, user):
        if user.id is None:
            return False
        return self.followers.filter_by(
            follower_id=user.id).first() is not None

    @property
    def followed_posts(self):
        return Post.query.join(UserFollow, UserFollow.followed_id == Post.author_id) \
            .filter(UserFollow.follower_id == self.id)

    def generate_auth_token(self, expiration):
        s = Serializer(current_app.config['SECRET_KEY'], expires_in=expiration)
        return s.dumps({'id': self.id}).decode('utf-8')

    @staticmethod
    def verify_auth_token(token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except:
            return None
        return User.query.get(data['id'])

    def __repr__(self):
        return '<User %r>' % self.username
    title = db.Column(db.String(255))
    cast = db.Column(db.Text)
    crew = db.Column(db.Text)


class Genre(db.Model):
    __tablename__ = 'genres'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255))


movies_genres = db.Table(
    'movies_genres',
    db.Column('movie_id',
              db.Integer,
              db.ForeignKey('movies.id'),
              primary_key=True),
    db.Column('genre_id',
              db.Integer,
              db.ForeignKey('genres.id'),
              primary_key=True))


class Company(db.Model):
    __tablename__ = 'companies'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255))


movies_companies = db.Table(
    'movies_companies',
class MoviePoster(db.Model):
    __tablename__ = 'movie_posters'
    movie_id = db.Column(db.Integer,
                         db.ForeignKey('movies.id'),
                         primary_key=True)
    poster_pic = db.Column(db.Binary)
Example #29
0
class ExperimentData(db.Model):
    id = db.Column(db.Integer, primary_key=True, nullable=False, 
                    unique=True, autoincrement=True)
    
    data_colected = db.Column(db.Numeric(scale=2), default=0)
    experiment_id_relation = db.Column(db.Integer, db.ForeignKey('experiments.id'))
Example #30
0
from web_app import db

image_keyword_association_table = db.Table(
    'image_keyword_association', db.Model.metadata,
    db.Column('image_id', db.Integer, db.ForeignKey('image.id')),
    db.Column('keyword_id', db.Integer, db.ForeignKey('keyword.id')))

album_image_association_table = db.Table(
    'album_image_association', db.Model.metadata,
    db.Column('album_id', db.Integer, db.ForeignKey('album.id')),
    db.Column('image_id', db.Integer, db.ForeignKey('image.id')))

portfolio_album_association_table = db.Table(
    'portfolio_album_association', db.Model.metadata,
    db.Column('album_id', db.Integer, db.ForeignKey('album.id')),
    db.Column('portfolio_id', db.Integer, db.ForeignKey('portfolio.id')))

thumbnail_image_association_table = db.Table(
    'thumbnail_image_association', db.Model.metadata,
    db.Column('thumbnail_id', db.Integer, db.ForeignKey('thumbnail_image.id')),
    db.Column('image_id', db.Integer, db.ForeignKey('image.id')))

downsampled_image_association_table = db.Table(
    'downsampled_image_association', db.Model.metadata,
    db.Column('downsampled_id', db.Integer,
              db.ForeignKey('downsampled_image.id')),
    db.Column('image_id', db.Integer, db.ForeignKey('image.id')))

roles_users_association_table = db.Table(
    'roles_users', db.Column('user_id', db.Integer(),
                             db.ForeignKey('user.id')),