Exemple #1
0
class CommentModel(db.Model):

    __tablename__ = 'comments'

    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.Text, nullable=False)
    created_date = db.Column(db.DateTime, default=datetime.now)
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    post_id = db.Column(db.Integer, db.ForeignKey('posts.id'))
    likes = db.relationship('LikeModel', cascade='all,delete', backref='comment')

    @classmethod
    def find_by_id(cls, comment_id):
        return cls.query.filter_by(id=comment_id).first()

    def verify_comment_author(self, user_id):
        if user_id == self.author_id:
            return True
        else:
            return False

    def save_to_db(self):
        db.session.add(self)
        db.session.commit()


    def delete_from_db(self):
        db.session.delete(self)
        db.session.commit()
Exemple #2
0
class Approval(db.Model):
    __tablename__ = "approval_status"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)

    def __init__(self, name):
        self.name = name
Exemple #3
0
class Direction(db.Model):
    __tablename__ = "direction"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)

    def __init__(self, name, code):
        self.name = name
Exemple #4
0
class Quad(db.Model):
    __tablename__ = "quad"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)

    def __init__(self, name):
        self.name = name
Exemple #5
0
class Ethnicity(db.Model):
    __tablename__ = "ethnicity"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)
    code = db.Column(db.String(64), nullable=False)
    continent_id = db.relationship('continent_id',
                                   backref='continent',
                                   uselist=False)
Exemple #6
0
class Owner(db.Model):
    __tablename__ = "owners"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)
    pet = db.relationship('Pet', backref='owner', uselist=False)

    def __init__(self, name):
        self.name = name
class ProductCode(db.Model):
    __tablename__ = "product_code"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)
    pcode = db.Column(db.String(64), nullable=False)

    def __init__(self, name, pcode):
        self.name = name
        self.pcode = pcode
Exemple #8
0
class Catalog(db.Model):
    __tablename__ = "catalog_detail"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)
    pcode = db.relationship('pcode', backref='product_code', uselist=False)

    def __init__(self, pcode, name):
        self.pcode = pcode
        self.name = name
Exemple #9
0
class Pet(db.Model):
    __tablename__ = 'pets'
    id = db.Column(db.Integer, primary_key = True)
    owner_id = db.Column(db.Integer, db.ForeignKey('owners.id'))
    name = db.Column(db.String(100), nullable=False)


    def __init__(self, owner_id, name):
        self. owner_id = owner_id
        self.name = name
Exemple #10
0
class FeatureType(db.Model):
    __tablename__ = "feature_types"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)
    code = db.Column(db.String(64), nullable=False)
    feature = db.relationship('Feature', backref='feature', uselist=False)

    def __init__(self, name, code):
        self.name = name
        self.code = code
Exemple #11
0
class Continent(db.Model):
    __tablename__ = "continents"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)
    code = db.Column(db.String(64), nullable=False)
    ethnicity = db.relationship('Ethnicity',
                                backref='continent',
                                uselist=False)

    def __init__(self, name, code):
        self.name = name
        self.code = code
Exemple #12
0
class Ethnicity(db.Model):
    __tablename__ = 'ethnicitys'
    id = db.Column(db.Integer, primary_key=True, nullable=False)
    continent_id = db.Column(db.Integer,
                             db.ForeignKey('continents.id'),
                             nullable=False)
    name = db.Column(db.String(100), nullable=False)
    code = db.Column(db.String(100), nullable=False)

    #feature = db.relationship('Feature', backref='ethnicity', uselist=False)

    def __init__(self, continent_id, name, code):
        self.continent_id = continent_id
        self.name = name
        self.code = code
Exemple #13
0
class Feature(db.Model):
    __tablename__ = "feature"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)
    ethnicity_id = db.relationship('ethnicity_id',
                                   backref='ethnicity',
                                   uselist=False)
    approval_status_id = db.relationship('approval_status_id',
                                         backref='approval_status',
                                         uselist=False)
    feature_type_id = db.relationship('feature_type_id',
                                      backref='feature_type',
                                      uselist=False)
    direction_id = db.relationship('direction_id',
                                   backref='direction',
                                   uselist=False)
    map_id = db.relationship('map_id', backref='map', uselist=False)
Exemple #14
0
class LikeModel(db.Model):

    __tablename__ = 'likes'

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    comment_id = db.Column(db.Integer, db.ForeignKey('comments.id'))

    @classmethod
    def find(cls, user_id, comment_id):
        return cls.query.filter_by(user_id=user_id, comment_id=comment_id).first()

    def save_to_db(self):
        db.session.add(self)
        db.session.commit()

    def delete_from_db(self):
        db.session.delete(self)
        db.session.commit()
Exemple #15
0
class User(db.Model, UserMixin):
    __tablename__ = 'user'
    id              = db.Column(db.Integer(), primary_key=True)
    name            = db.Column(db.Unicode(255), unique=True)
    email           = db.Column(db.String(255), unique=True)
    password        = db.Column(db.String(255))
    active          = db.Column(db.Boolean())
    confirmed_at    = db.Column(db.DateTime())
    created_at      = db.Column(db.DateTime(), default=datetime.utcnow)
    models          = db.relationship('Model')
    roles           = db.relationship('Role', secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic'))
Exemple #16
0
class UserModel(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(120), nullable=False, unique=True)
    email = db.Column(db.String(120), nullable=False, unique=True)
    name = db.Column(db.String(150), nullable=False)
    password = db.Column(db.String(100), nullable=False)
    posts = db.relationship('PostModel',
                            cascade='all,delete',
                            backref='author')
    comments = db.relationship('CommentModel',
                               cascade='all,delete',
                               backref='author')
    likes = db.relationship('LikeModel', cascade='all,delete', backref='user')
    activated = db.Column(db.Boolean, default=False)

    @classmethod
    def find_by_username(cls, username):
        return cls.query.filter_by(username=username).first()

    @classmethod
    def find_by_email(cls, email):
        return cls.query.filter_by(email=email).first()

    @classmethod
    def find_by_id(cls, user_id):
        return cls.query.filter_by(id=user_id).first()

    @classmethod
    def set_password(cls, password):
        return password_hasher.hash(password)

    def send_confirmation_email(self):
        link = request.url_root[:-1] + url_for(
            'resources.users.activate_account', user_id=self.id)
        subject = 'Account Confirmation'
        text = f"Please click the link to register: {link}"
        html = f'<html>Please click the link to register: <a href="{link}"> {link}</a></html>'
        return Mailer.send(self.email, subject, text, html)

    def verify_password(self, password):
        return password_hasher.verify(self.password, password)

    def save_to_db(self):
        db.session.add(self)
        db.session.commit()

    def delete_from_db(self):
        db.session.delete(self)
        db.session.commit()
Exemple #17
0
class Continent(db.Model):
    __tablename__ = "continent"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)
    code = db.Column(db.String(64), nullable=False)
Exemple #18
0
class Role(db.Model, RoleMixin):
    __tablename__ = 'role'
    id              = db.Column(db.Integer(), primary_key=True)
    name            = db.Column(db.Unicode(80), unique=True)
    description     = db.Column(db.Unicode(255))
Exemple #19
0
class Quad(db.Model):
    __tablename__ = "quad"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)
Exemple #20
0
class Model(db.Model):
    __tablename__   = 'model'
    query_class     = ModelQuery
    id              = db.Column(db.Integer(), primary_key=True)
    name            = db.Column(db.Unicode(255), unique=True)
    description     = db.Column(db.Unicode())
    owner           = db.relationship('User')
    owner_id        = db.Column(db.Integer(), db.ForeignKey('user.id'))
    created_at      = db.Column(db.DateTime(), default=datetime.utcnow)
    updated_at      = db.Column(db.DateTime(), default=datetime.utcnow)
    search_vector   = db.Column(TSVectorType('name', 'description'))

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

    @property
    def repo_path(self):
        return path.join(current_app.config['REPO_DIR'], self.name)

    @property
    def archive_path(self):
        return path.join(current_app.config['ARCHIVE_DIR'], self.name)

    @property
    def meta_path(self):
        return path.join(self.repo_path, 'meta.json')

    @property
    def model_path(self):
        return path.join(self.repo_path, 'model.json')

    @property
    def repo(self):
        return Repo(self.repo_path) if path.exists(self.repo_path) else None

    def register(self, user):
        """registers the model to the specified user"""
        self.owner = user
        if self.repo is None:
            self.make_repo()

    def archive(self, version=None):
        """returns path for a specific version's archive.
        if version is None, returns latest version"""
        if self.repo is None:
            raise ModelNotFoundException

        if version is None:
            version = self.latest
        if version not in self.versions:
            raise ModelNotFoundException
        return path.join(self.archive_path, '{}.tar'.format(version))

    def make_repo(self):
        """creates a new git repo for the model,
        if it doesn't already exist"""
        if path.exists(self.repo_path):
            raise ModelConflictException
        Repo.init(self.repo_path)

    @property
    def latest(self):
        """returns the latest version"""
        if not self.versions:
            return None
        return self.versions[-1]

    @property
    def versions(self):
        """all available versions"""
        repo = self.repo
        if repo is None or not repo.tags:
            return []
        return [tag.name for tag in repo.tags]

    def publish(self, meta_data, model_data, version):
        """updates a repo for the model (publishes a new version)"""
        repo = self.repo
        if repo is None:
            raise ModelNotFoundException

        # the new version must be the newest
        if self.latest is not None and LooseVersion(self.latest) >= LooseVersion(version):
            raise ModelConflictException('Published version must be newer than {}'.format(self.latest))

        with open(self.meta_path, 'w') as f:
            json.dump(meta_data, f)

        # TODO this should be PMML or something
        with open(self.model_path, 'w') as f:
            json.dump(model_data, f)

        repo.index.add(['*'])
        author = Actor(self.owner.name, self.owner.email)
        repo.index.commit(version, author=author, committer=author)
        repo.create_tag(version)
        self.description = meta_data.get('description', '')
        self.updated_at = datetime.utcnow()

    def make_archive(self, version):
        """creates a tar archive for a specific version of the model"""
        if not path.exists(self.archive_path):
            makedirs(self.archive_path)
        self.repo.archive(open(self.archive(version), 'wb'), version)

    def delete(self, version):
        """deletes a specific version"""
        if version not in self.versions:
            raise ModelNotFoundException
        remove(self.archive(version))
        self.repo.delete_tag(version)

    def destroy(self):
        """destroys the entire package"""
        shutil.rmtree(self.repo_path)
        shutil.rmtree(self.archive_path)

    @property
    def meta(self):
        """model metadata"""
        return json.load(open(self.meta_path, 'r'))
Exemple #21
0
class ProductCode(db.Model):
    __tablename__ = "product_code"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)
    pcode = db.Column(db.String(64), nullable=False)
Exemple #22
0
class FeatureType(db.Model):
    __tablename__ = "feature_type"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)
    code = db.Column(db.String(64), nullable=False)
Exemple #23
0
class Direction(db.Model):
    __tablename__ = "direction"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)
Exemple #24
0
from lib.db import db
from datetime import datetime
from flask_security import UserMixin, RoleMixin


# Table connecting users and roles
roles_users = db.Table('roles_users',
        db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
        db.Column('role_id', db.Integer(), db.ForeignKey('role.id')))


class Role(db.Model, RoleMixin):
    __tablename__ = 'role'
    id              = db.Column(db.Integer(), primary_key=True)
    name            = db.Column(db.Unicode(80), unique=True)
    description     = db.Column(db.Unicode(255))


class User(db.Model, UserMixin):
    __tablename__ = 'user'
    id              = db.Column(db.Integer(), primary_key=True)
    name            = db.Column(db.Unicode(255), unique=True)
    email           = db.Column(db.String(255), unique=True)
    password        = db.Column(db.String(255))
    active          = db.Column(db.Boolean())
    confirmed_at    = db.Column(db.DateTime())
    created_at      = db.Column(db.DateTime(), default=datetime.utcnow)
    models          = db.relationship('Model')
    roles           = db.relationship('Role', secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic'))
Exemple #25
0
class Feature(db.Model):
    __tablename__ = "features"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), nullable=False)
    latitude = db.Column(db.Integer, nullable=False)
    longitude = db.Column(db.Integer, nullable=False)
    starting_latitude = db.Column(db.Integer, nullable=False)
    ending_latitude = db.Column(db.Integer, nullable=False)
    starting_longitude = db.Column(db.Integer, nullable=False)
    ending_longitude = db.Column(db.Integer, nullable=False)
    direction_id = db.Column(db.Integer, db.ForeignKey('direction.id'))
    diameter = db.Column(db.Integer, nullable=False)
    ethnicity_id = db.Column(db.Integer, db.ForeignKey('ethnicity.id'))
    quad_id = db.Column(db.Integer, db.ForeignKey('quad.id'))
    map_id = db.Column(db.Integer, db.ForeignKey('map.id'))
    approval_status_id = db.Column(db.Integer,
                                   db.ForeignKey('approval_status.id'))
    approval_date = db.Column(db.DateTime, nullable=False)
    ref = db.Column(db.Integer, nullable=False)
    reference_text = db.Column(db.String(64), nullable=False)
    feature_type_id = db.Column(db.Integer, db.ForeignKey('feature_type.id'))
    origin = db.Column(db.String(64), nullable=False)
    location = db.Column(db.String(64), nullable=False)
    circle_area = db.Column(db.Integer, nullable=False)
    square_area = db.Column(db.Integer, nullable=False)
    circle_area_mod = db.Column(db.Integer, nullable=False)

    def __init__(self, name, latitude, longitude, starting_latitude,
                 ending_latitude, starting_longitude, ending_longitude,
                 direction_id, diameter, ethnicity_id, quad_id, map_id,
                 approval_status_id, approval_date, ref, reference_text,
                 feature_type_id, origin, location, circle_area, square_area,
                 circle_area_mod):
        name = name
        latitude = latitude
        longitude = longitude
        starting_latitude = starting_latitude
        ending_latitude = ending_latitude
        starting_longitude = starting_longitude
        ending_longitude = ending_longitude
        direction_id = direction_id
        diameter = diameter
        ethnicity_id = ethnicity_id
        quad_id = quad_id
        map_id = map_id
        approval_status_id = approval_status_id
        approval_date = approval_date
        ref = ref
        reference_text = reference_text
        feature_type_id = feature_type_id
        origin = origin
        location = location
        circle_area = circle_area
        square_area = square_area
        circle_area_mod = circle_area_mod