Exemple #1
0
class Bookmark(db.Model, RightMixin):
    """
    Represent a bookmark.
    """

    id = db.Column(db.Integer(), primary_key=True)
    href = db.Column(db.String(), default="")
    title = db.Column(db.String(), default="")
    description = db.Column(db.String(), default="")
    shared = db.Column(db.Boolean(), default=False)
    to_read = db.Column(db.Boolean(), default=False)
    time = db.Column(db.DateTime(), default=datetime.utcnow)
    user_id = db.Column(db.Integer(), db.ForeignKey("user.id"))

    # relationships
    tags = db.relationship(
        BookmarkTag,
        backref="of_bookmark",
        lazy="dynamic",
        cascade="all,delete-orphan",
        order_by=desc(BookmarkTag.text),
    )
    tags_proxy = association_proxy("tags", "text")

    @validates("description")
    def validates_title(self, key, value):
        return str(value).strip()

    @validates("extended")
    def validates_description(self, key, value):
        return str(value).strip()

    def __repr__(self):
        return "<Bookmark %r>" % (self.href)
Exemple #2
0
class Bookmark(db.Model, RightMixin):
    """
    Represent a bookmark.
    """
    id = db.Column(db.Integer(), primary_key=True)
    href = db.Column(db.String(), default="")
    title = db.Column(db.String(), default="")
    description = db.Column(db.String(), default="")
    shared = db.Column(db.Boolean(), default=False)
    to_read = db.Column(db.Boolean(), default=False)
    time = db.Column(db.DateTime(), default=datetime.utcnow)
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))

    # relationships
    tags = db.relationship(BookmarkTag, backref='of_bookmark', lazy='dynamic',
                               cascade='all,delete-orphan',
                               order_by=desc(BookmarkTag.text))
    tags_proxy = association_proxy('tags', 'text')


    @validates('description')
    def validates_title(self, key, value):
        return str(value).strip()

    @validates('extended')
    def validates_description(self, key, value):
        return str(value).strip()

    def __repr__(self):
        return '<Bookmark %r>' % (self.href)
Exemple #3
0
class Feed(db.Model, RightMixin):
    """
    Represent a feed.
    """
    id = db.Column(db.Integer(), primary_key=True)
    title = db.Column(db.String(), default="")
    description = db.Column(db.String(), default="FR")
    link = db.Column(db.String(), nullable=False)
    site_link = db.Column(db.String(), default="")
    enabled = db.Column(db.Boolean(), default=True)
    created_date = db.Column(db.DateTime(), default=datetime.utcnow)
    filters = db.Column(db.PickleType, default=[])
    private = db.Column(db.Boolean(), default=False)

    # cache handling
    etag = db.Column(db.String(), default="")
    last_modified = db.Column(db.String(), default="")
    last_retrieved = db.Column(db.DateTime(), default=datetime(1970, 1, 1))

    # error logging
    last_error = db.Column(db.String(), default="")
    error_count = db.Column(db.Integer(), default=0)

    # relationship
    icon_url = db.Column(db.String(), db.ForeignKey('icon.url'), default=None)
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
    category_id = db.Column(db.Integer(), db.ForeignKey('category.id'))
    articles = db.relationship(Article,
                               backref='source',
                               lazy='dynamic',
                               cascade='all,delete-orphan',
                               order_by=desc(Article.date))

    # index
    idx_feed_uid_cid = Index('user_id', 'category_id')
    idx_feed_uid = Index('user_id')

    # api whitelists
    @staticmethod
    def _fields_base_write():
        return {
            'title', 'description', 'link', 'site_link', 'enabled', 'filters',
            'last_error', 'error_count', 'category_id'
        }

    @staticmethod
    def _fields_base_read():
        return {'id', 'user_id', 'icon_url', 'last_retrieved'}

    @validates('title')
    def validates_title(self, key, value):
        return str(value).strip()

    @validates('description')
    def validates_description(self, key, value):
        return str(value).strip()

    def __repr__(self):
        return '<Feed %r>' % (self.title)
Exemple #4
0
class Feed(db.Model):
    """
    Represent a feed.
    """
    id = db.Column(db.Integer(), primary_key=True)
    title = db.Column(db.String(), default="")
    description = db.Column(db.String(), default="FR")
    link = db.Column(db.String())
    site_link = db.Column(db.String(), default="")
    enabled = db.Column(db.Boolean(), default=True)
    created_date = db.Column(db.DateTime(), default=datetime.now)
    filters = db.Column(db.PickleType, default=[])

    # cache handling
    etag = db.Column(db.String(), default="")
    last_modified = db.Column(db.String(), default="")
    last_retrieved = db.Column(db.DateTime(), default=datetime(1970, 1, 1))

    # error logging
    last_error = db.Column(db.String(), default="")
    error_count = db.Column(db.Integer(), default=0)

    # relationship
    icon_url = db.Column(db.String(), db.ForeignKey('icon.url'), default=None)
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
    category_id = db.Column(db.Integer(), db.ForeignKey('category.id'))
    articles = db.relationship('Article',
                               backref='source',
                               lazy='dynamic',
                               cascade='all,delete-orphan',
                               order_by=desc("date"))

    def __repr__(self):
        return '<Feed %r>' % (self.title)

    def dump(self):
        return {
            "id": self.id,
            "user_id": self.user_id,
            "category_id": self.category_id,
            "title": self.title,
            "description": self.description,
            "link": self.link,
            "site_link": self.site_link,
            "etag": self.etag,
            "enabled": self.enabled,
            "filters": self.filters,
            "icon_url": self.icon_url,
            "error_count": self.error_count,
            "last_error": self.last_error,
            "created_date": self.created_date,
            "last_modified": self.last_modified,
            "last_retrieved": self.last_retrieved,
            "nb_articles": self.articles.count()
        }
Exemple #5
0
class Article(db.Model):
    "Represent an article from a feed."
    id = db.Column(db.Integer(), primary_key=True)
    entry_id = db.Column(db.String())
    link = db.Column(db.String())
    title = db.Column(db.String())
    content = db.Column(db.String())
    readed = db.Column(db.Boolean(), default=False)
    like = db.Column(db.Boolean(), default=False)
    date = db.Column(db.DateTime(), default=datetime.now)
    updated_date = db.Column(db.DateTime(), default=datetime.now)
    retrieved_date = db.Column(db.DateTime(), default=datetime.now)

    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
    feed_id = db.Column(db.Integer(), db.ForeignKey('feed.id'))
    category_id = db.Column(db.Integer(), db.ForeignKey('category.id'))

    def previous_article(self):
        """
        Returns the previous article (older).
        """
        return Article.query.filter(Article.date < self.date,
                                    Article.feed_id == self.feed_id)\
                            .order_by(desc("date")).first()

    def next_article(self):
        """
        Returns the next article (newer).
        """
        return Article.query.filter(Article.date > self.date,
                                    Article.feed_id == self.feed_id)\
                            .order_by(asc("date")).first()

    def __repr__(self):
        return "<Article(id=%d, entry_id=%s, title=%r, " \
               "date=%r, retrieved_date=%r)>" % (self.id, self.entry_id,
                       self.title, self.date, self.retrieved_date)

    def dump(self):
        return {
            "id": self.id,
            "user_id": self.user_id,
            "entry_id": self.entry_id,
            "title": self.title,
            "link": self.link,
            "content": self.content,
            "readed": self.readed,
            "like": self.like,
            "date": self.date,
            "updated_date": self.updated_date,
            "retrieved_date": self.retrieved_date,
            "feed_id": self.feed_id,
            "category_id": self.category_id
        }
class Project(db.Model):
    """Represent a project.
    """
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), unique=True)
    short_description = db.Column(db.String(300), unique=True)
    description = db.Column(db.String(), unique=True)
    website = db.Column(db.String())
    enabled = db.Column(db.Boolean(), default=True)
    last_updated = db.Column(db.DateTime(), default=datetime.utcnow())

    # if cve_vendor is the empty string use the parent property
    # (organization.cve_vendor)
    cve_vendor = db.Column(db.String(), default='')
    cve_product = db.Column(db.String(), unique=True, nullable=False)

    automatic_release_tracking = db.Column(db.String())

    notification_email = db.Column(db.String(), default='')
    required_informations = db.Column(JSON, default=None)

    # foreign keys
    organization_id = db.Column(db.Integer(), db.ForeignKey('organization.id'))
    manager_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
    icon_url = db.Column(db.String(), db.ForeignKey('icon.url'), default=None)

    # relationships
    tag_objs = db.relationship('Tag',
                               back_populates='project',
                               cascade='all,delete-orphan',
                               lazy=False,
                               foreign_keys='[Tag.project_id]')
    tags = association_proxy('tag_objs', 'text')
    licenses = db.relationship("License",
                               secondary=lambda: association_table,
                               backref="projects")
    cves = db.relationship('CVE',
                           backref='project',
                           lazy='dynamic',
                           cascade='all,delete-orphan')
    releases = db.relationship('Release',
                               backref='project',
                               lazy='dynamic',
                               cascade='all,delete-orphan')

    @validates('name')
    def validates_name(self, key, value):
        assert len(value) <= 100, \
            AssertionError("maximum length for name: 100")
        return value.replace(' ', '').strip()

    def __repr__(self):
        return '<Name %r>' % (self.name)
Exemple #7
0
class Article(db.Model, RightMixin):
    "Represent an article from a feed."
    id = db.Column(db.Integer(), primary_key=True)
    entry_id = db.Column(db.String(), nullable=False)
    link = db.Column(db.String())
    title = db.Column(db.String())
    content = db.Column(db.String())
    readed = db.Column(db.Boolean(), default=False)
    like = db.Column(db.Boolean(), default=False)
    date = db.Column(db.DateTime(), default=datetime.utcnow)
    updated_date = db.Column(db.DateTime(), default=datetime.utcnow)
    retrieved_date = db.Column(db.DateTime(), default=datetime.utcnow)

    # foreign keys
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
    feed_id = db.Column(db.Integer(), db.ForeignKey('feed.id'))
    category_id = db.Column(db.Integer(), db.ForeignKey('category.id'))

    # relationships
    tag_objs = db.relationship('ArticleTag',
                               back_populates='article',
                               cascade='all,delete-orphan',
                               lazy=False,
                               foreign_keys='[ArticleTag.article_id]')
    tags = association_proxy('tag_objs', 'text')

    # indexes
    __table_args__ = (Index('user_id'), Index('user_id', 'category_id'),
                      Index('user_id', 'feed_id'),
                      Index('ix_article_uid_fid_eid', user_id, feed_id,
                            entry_id))

    # api whitelists
    @staticmethod
    def _fields_base_write():
        return {'readed', 'like', 'feed_id', 'category_id'}

    @staticmethod
    def _fields_base_read():
        return {
            'id', 'entry_id', 'link', 'title', 'content', 'date',
            'retrieved_date', 'user_id', 'tags'
        }

    @staticmethod
    def _fields_api_write():
        return {'tags'}

    def __repr__(self):
        return "<Article(id=%d, entry_id=%s, title=%r, " \
               "date=%r, retrieved_date=%r)>" % (self.id, self.entry_id,
                       self.title, self.date, self.retrieved_date)
Exemple #8
0
class Article(db.Model, RightMixin):
    "Represent an article from a feed."
    id = db.Column(db.Integer(), primary_key=True)
    entry_id = db.Column(db.String())
    link = db.Column(db.String())
    title = db.Column(db.String())
    content = db.Column(db.String())
    readed = db.Column(db.Boolean(), default=False)
    like = db.Column(db.Boolean(), default=False)
    date = db.Column(db.DateTime(), default=datetime.utcnow)
    retrieved_date = db.Column(db.DateTime(), default=datetime.utcnow)
    readability_parsed = db.Column(db.Boolean(), default=False)

    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
    feed_id = db.Column(db.Integer(), db.ForeignKey('feed.id'))
    category_id = db.Column(db.Integer(), db.ForeignKey('category.id'))

    idx_article_uid = Index('user_id')
    idx_article_uid_cid = Index('user_id', 'category_id')
    idx_article_uid_fid = Index('user_id', 'feed_id')

    # api whitelists
    @staticmethod
    def _fields_base_write():
        return {'readed', 'like', 'readability_parsed',
                'feed_id', 'category_id'}

    @staticmethod
    def _fields_base_read():
        return {'id', 'entry_id', 'link', 'title', 'content', 'date',
                'retrieved_date', 'user_id'}

    def previous_article(self):
        """
        Returns the previous article (older).
        """
        return Article.query.filter(Article.date < self.date,
                                    Article.feed_id == self.feed_id)\
                            .order_by(desc("date")).first()

    def next_article(self):
        """
        Returns the next article (newer).
        """
        return Article.query.filter(Article.date > self.date,
                                    Article.feed_id == self.feed_id)\
                            .order_by(asc("date")).first()

    def __repr__(self):
        return "<Article(id=%d, entry_id=%s, title=%r, " \
               "date=%r, retrieved_date=%r)>" % (self.id, self.entry_id,
                       self.title, self.date, self.retrieved_date)
Exemple #9
0
class FeedSet(db.Model):
    """Represents a set of feeds.
    """
    id = db.Column(db.Integer(), primary_key=True)
    title = db.Column(db.String(), default="")
    description = db.Column(db.String(), default="")
    date_created = db.Column(db.DateTime(), default=datetime.utcnow())
    ui_position = db.Column(db.Integer(), default=0)

    # relationships
    feeds = db.relationship(Feed,
                            backref='set',
                            cascade='all, delete-orphan',
                            foreign_keys=[Feed.set_id])
Exemple #10
0
class Feed(db.Model):
    """Represents a feed.
    """
    id = db.Column(db.Integer(), primary_key=True)
    title = db.Column(db.String(), default="")
    description = db.Column(db.String(), default="")
    language = db.Column(db.String(), default="")
    link = db.Column(db.String(), nullable=False)
    date_created = db.Column(db.DateTime(), default=datetime.utcnow())

    # foreign keys
    set_id = db.Column(db.Integer(), db.ForeignKey('feed_set.id'))

    def output(self, key, obj):
        return {'title': self.title}
Exemple #11
0
class Category(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String())

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

    def dump(self):
        return {key: getattr(self, key) for key in ('id', 'name', 'user_id')}
Exemple #12
0
class CVE(db.Model):
    """Represent a CVE.
    """
    id = db.Column(db.Integer, primary_key=True)
    cve_id = db.Column(db.String(), nullable=False)
    summary = db.Column(db.String(), default='')
    published_at = db.Column(db.DateTime(), default=datetime.utcnow())

    # foreign keys
    project_id = db.Column(db.Integer(),
                           db.ForeignKey('project.id'),
                           default=None)
Exemple #13
0
class Category(db.Model, RightMixin):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String())

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

    idx_category_uid = Index('user_id')

    # api whitelists
    @staticmethod
    def _fields_base_read():
        return {'id', 'user_id'}

    @staticmethod
    def _fields_base_write():
        return {'name'}
Exemple #14
0
class Category(db.Model, RightMixin):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String())

    # relationships
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    feeds = db.relationship('Feed', cascade='all,delete-orphan')
    articles = db.relationship('Article', cascade='all,delete-orphan')

    # index
    idx_category_uid = Index('user_id')

    # api whitelists
    @staticmethod
    def _fields_base_read():
        return {'id', 'user_id'}

    @staticmethod
    def _fields_base_write():
        return {'name'}
Exemple #15
0
class Request(db.Model, UserMixin):
    """Represent a request.
    """
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(), nullable=False)
    firstname = db.Column(db.String(), nullable=False)
    lastname = db.Column(db.String(), nullable=False)

    checked = db.Column(db.Boolean(), default=False)
    notification_sent = db.Column(db.Boolean(), default=False)

    created_at = db.Column(db.DateTime(), default=datetime.utcnow)

    required_informations = db.Column(JSON)

    # foreign keys
    project_id = db.Column(db.Integer(), db.ForeignKey('project.id'))

    # relationships
    project = db.relationship('Project', backref="requests")

    @validates('email')
    def validates_email(self, key, value):
        assert len(value) <= 100, 'email too long'
        assert validate_email(value), 'email not valid'
        return str(value).strip()

    @validates('firstname')
    def validates_firstname(self, key, value):
        assert len(value) <= 100, 'firstname too long'
        return str(value).strip()

    @validates('lastname')
    def validates_lastname(self, key, value):
        assert len(value) <= 100, 'lastname too long'
        return str(value).strip()
Exemple #16
0
class Article(db.Model, RightMixin):
    "Represent an article from a feed."
    id = db.Column(db.Integer(), primary_key=True)
    entry_id = db.Column(db.String(), nullable=False)
    link = db.Column(db.String())
    title = db.Column(db.String())
    content = db.Column(db.String())
    readed = db.Column(db.Boolean(), default=False)
    like = db.Column(db.Boolean(), default=False)
    date = db.Column(db.DateTime(), default=datetime.utcnow)
    updated_date = db.Column(db.DateTime(), default=datetime.utcnow)
    retrieved_date = db.Column(db.DateTime(), default=datetime.utcnow)

    # foreign keys
    user_id = db.Column(db.Integer(), db.ForeignKey("user.id"))
    feed_id = db.Column(db.Integer(), db.ForeignKey("feed.id"))
    category_id = db.Column(db.Integer(), db.ForeignKey("category.id"))

    # relationships
    tag_objs = db.relationship(
        "ArticleTag",
        back_populates="article",
        cascade="all,delete-orphan",
        lazy=False,
        foreign_keys="[ArticleTag.article_id]",
    )
    tags = association_proxy("tag_objs", "text")

    # indexes
    # __table_args__ = (
    #    Index('user_id'),
    #    Index('user_id', 'category_id'),
    #    Index('user_id', 'feed_id'),
    #    Index('ix_article_uid_fid_eid', user_id, feed_id, entry_id)
    # )

    # api whitelists
    @staticmethod
    def _fields_base_write():
        return {"readed", "like", "feed_id", "category_id"}

    @staticmethod
    def _fields_base_read():
        return {
            "id",
            "entry_id",
            "link",
            "title",
            "content",
            "date",
            "retrieved_date",
            "user_id",
            "tags",
        }

    @staticmethod
    def _fields_api_write():
        return {"tags"}

    def __repr__(self):
        return ("<Article(id=%d, entry_id=%s, title=%r, "
                "date=%r, retrieved_date=%r)>" %
                (self.id, self.entry_id, self.title, self.date,
                 self.retrieved_date))
Exemple #17
0
class Feed(db.Model, RightMixin):
    """
    Represent a feed.
    """

    id = db.Column(db.Integer(), primary_key=True)
    title = db.Column(db.String(), default="")
    description = db.Column(db.String(), default="FR")
    link = db.Column(db.String(), nullable=False)
    site_link = db.Column(db.String(), default="")
    enabled = db.Column(db.Boolean(), default=True)
    created_date = db.Column(db.DateTime(), default=datetime.utcnow)
    filters = db.Column(db.PickleType, default=[])
    private = db.Column(db.Boolean(), default=False)

    # cache handling
    etag = db.Column(db.String(), default="")
    last_modified = db.Column(db.String(), default="")
    last_retrieved = db.Column(db.DateTime(), default=datetime(1970, 1, 1))

    # error logging
    last_error = db.Column(db.String(), default="")
    error_count = db.Column(db.Integer(), default=0)

    # relationship
    icon_url = db.Column(db.String(), db.ForeignKey("icon.url"), default=None)
    user_id = db.Column(db.Integer(), db.ForeignKey("user.id"))
    category_id = db.Column(db.Integer(), db.ForeignKey("category.id"))
    articles = db.relationship(
        Article,
        backref="source",
        lazy="dynamic",
        cascade="all,delete-orphan",
        order_by=desc(Article.date),
    )

    # index
    idx_feed_uid_cid = Index("user_id", "category_id")
    idx_feed_uid = Index("user_id")

    # api whitelists
    @staticmethod
    def _fields_base_write():
        return {
            "title",
            "description",
            "link",
            "site_link",
            "enabled",
            "filters",
            "last_error",
            "error_count",
            "category_id",
        }

    @staticmethod
    def _fields_base_read():
        return {"id", "user_id", "icon_url", "last_retrieved"}

    @validates("title")
    def validates_title(self, key, value):
        return str(value).strip()

    @validates("description")
    def validates_description(self, key, value):
        return str(value).strip()

    def __repr__(self):
        return "<Feed %r>" % (self.title)