コード例 #1
0
class Comment(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.Text)
    pub_date = db.Column(db.DateTime)

    # Foreign key relationship for users
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    # Apparently, there is no need to declare the backref on both
    # endpoints. Having it in Post is enough, apparently.
    #user = db.relationship('User',
    #    backref=db.backref('users', lazy='dynamic'))

    # Foreign key for parent post
    parent_post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
    parent_post = db.relationship('Post',
        backref=db.backref('posts', lazy='dynamic'))

    def __init__(self, user, parent_post, body, pub_date=None):
        self.user = user
        self.parent_post = parent_post
        self.body = body
        if pub_date is None:
            pub_date = datetime.utcnow()
        self.pub_date = pub_date

    def __repr__(self):
        return '<Comment by %r>' % self.user
コード例 #2
0
class Tag(db.Model):
    """ Tag class """
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), unique=True)

    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return '<Tag %r>' % self.name
コード例 #3
0
class User(db.Model):
    """ Declarative class for Users database table """
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)
    password_hash = db.Column(db.String(120))

    def __init__(self, username, email, password):
        self.name = username
        self.email = email
        self.password_hash = generate_password_hash(password)

    def __repr__(self):
        return '<User %r>' % self.name

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)
コード例 #4
0
class Image(db.Model):
    """ Image with metadata and attributes """
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    filename = db.Column(db.String(50))
    thumbfilename = db.Column(db.String(50))
    sha1sum = db.Column(db.String(40), unique=True) # 40 bytes SHA1

    def __init__(self, name, sha1sum):
        self.name = name
        self.sha1sum = sha1sum

        # FIXME: Ugly, ugly, ugly
        fext = os.path.splitext(self.name)[1]
        fnlist = [self.sha1sum, fext]
        tnlist = [self.sha1sum, '.thumbnail', fext]
        self.filename = ''.join(fnlist)
        self.thumbfilename = ''.join(tnlist)

    def __repr__(self):
        return '<Image %s with checksum %r>' % (self.name, self.sha1sum)
コード例 #5
0
class Post(db.Model):
    """ Declarative class for Posts database table """
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(80))
    note = db.Column(db.Text)
    pub_date = db.Column(db.DateTime)

    # Foreign key for image attached to post
    # :relationaldatabases:
    image_id = db.Column(db.Integer, db.ForeignKey('image.id'))
    image = db.relationship('Image',
        backref=db.backref('images', lazy='dynamic'))

    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship('User',
        backref=db.backref('users', lazy='dynamic'))

    def __init__(self, image, title=None, note=None, \
            pub_date=None, user=None):
        self.image = image
        self.title = title
        self.note = note
        if pub_date is None:
            pub_date = datetime.utcnow()
        self.pub_date = pub_date

        if user is None:
            # Bind post to Anonymous user
            # FIXME: Something should happen here if the 'anon' user
            #        does not exist. It should be created by init, but
            #        I would really like a saner way of doing this short
            #        of ensuring static user IDs. Not sure how that
            #        varies from database to database.
            self.user = User.query.filter_by(name="anon").first()
        else:
            self.user = user

    def __repr__(self):
        return '<Post %r>' % self.title
コード例 #6
0
from datetime import datetime

import os

from werkzeug.security import generate_password_hash, \
        check_password_hash

from kremlin import db

# Tags helper table
# Since this is a many to many relationship, I'm using an actual table
# instead of a dynamic model. It is much more efficient in that
# scenario.
tags = db.Table('tags',
    db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
    db.Column('post_id', db.Integer, db.ForeignKey('post.id'))
)

class Tag(db.Model):
    """ Tag class """
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), unique=True)

    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return '<Tag %r>' % self.name

class User(db.Model):