Example #1
0
class FeedGroup(db.Model):
    __tablename__ = "feed_groups"
    id = db.Column(db.Integer(), primary_key=True)
    key_id = db.Column(db.Integer(), db.ForeignKey("api_keys.id"))
    uid = db.Column(db.String(), default=uid())
    name = db.Column(db.String(80))
    feeds = db.relationship('Feed', backref="group")
    created = db.Column(db.DateTime(timezone=True), default=db.func.now())
    active = db.Column(db.Boolean(), default=True)

    def __repr__(self):
        if self.name:
            return '<FeedGroup "%s" with %i feeds>' % (self.name,
                                                       len(self.feeds))
        return "<FeedGroup>"

    def jsonify(self):
        response = {}
        if self.created:
            response['name'] = self.name
            response['uid'] = self.uid
            response['created'] = time.mktime(self.created.timetuple())
            response['active'] = self.active
            response['feeds'] = [feed.jsonify() for feed in self.feeds]
        return response
Example #2
0
class Feed(db.Model):
    __tablename__ = "feeds"
    id = db.Column(db.Integer(), primary_key=True)
    key_id = db.Column(db.Integer(), db.ForeignKey("api_keys.id"))
    group_id = db.Column(db.Integer(), db.ForeignKey("feed_groups.id"))
    uid = db.Column(db.String(), default=uid())
    name = db.Column(db.String(80))
    url = db.Column(db.String(80))
    schedule = db.Column(db.String(80))
    active = db.Column(db.Boolean(), default=True)
    created = db.Column(db.DateTime(timezone=True), default=db.func.now())
    articles = db.relationship('Article', backref="feed")

    def __repr__(self):
        if self.name:
            return '<Feed "%s" with %i articles>' % (self.name,
                                                     len(self.articles))
        return "<Feed>"

    def is_running(self):
        """
		 Ask the feedmanager what's happening.
		"""
        if not app.inbox:
            return None

        response_queue = app.queues[-1]
        qid = hex(id(response_queue))
        app.inbox.put([qid, "check", self])

        # Wait two seconds max for a response
        then = time.time()
        while response_queue.empty():
            now = time.time()
            if (now - then) >= 0.5:
                return None

        return response_queue.get()

    def jsonify(self, articles=False):
        response = {}
        if self.created:
            response['name'] = self.name
            response['uid'] = self.uid
            response['url'] = self.url
            response['created'] = time.mktime(self.created.timetuple())
            response['schedule'] = self.schedule
            response['active'] = self.active
            response['article_count'] = len(self.articles)
            response['running'] = self.is_running()
        if self.group:
            response['group'] = self.group.name
        else:
            response['group'] = None
        return response
Example #3
0
def commit_to_feed(feed, article):
    """
	 Place a new article on the api key of a feed, the feed itself,
	 and commit changes.
	"""

    # We give articles UIDs manually to ensure unique time data is used.
    article.uid = uid()

    session = feed._sa_instance_state.session
    feed.articles.append(article)
    feed.key.articles.append(article)

    session.add(article)
    session.add(feed)
    session.commit()
Example #4
0
def commit_to_feed(feed, article):
	"""
	 Place a new article on the api key of a feed, the feed itself,
	 and commit changes.
	"""

	# We give articles UIDs manually to ensure unique time data is used.
	article.uid = uid()

	session = feed._sa_instance_state.session
	feed.articles.append(article)
	feed.key.articles.append(article)

	session.add(article)
	session.add(feed)
	session.commit()
Example #5
0
        article.content = article_content
    else:
        article.ccontent = snappy.compress(
            article_content.encode("utf-8", "ignore"))
        article.compress = True

    for s in app.scripts.scripts.values():
        try:
            s.execute(env={'article': article, 'feed': None})
            article = s['article']
        except Exception, e:
            log("Error executing %s: %s" % (s.file, e.message), "error")

    key.articles.append(article)

    article.uid = uid()

    db.session.add(article)
    db.session.add(key)
    db.session.commit()

    now = int(time.time())
    duration = tconv(now - then)
    log('%s: Stored %s "%s" (%s)' %
        (key.name, article.uid, article.title, duration))
    return article


def commit_to_feed(feed, article):
    """
     Place a new article on the api key of a feed, the feed itself,
Example #6
0
    if not app.config['COMPRESS_ARTICLES']:
        article.content = article_content
    else:
        article.ccontent = snappy.compress(article_content.encode("utf-8", "ignore"))
        article.compress = True

    for s in app.scripts.scripts.values():
        try:
            s.execute(env={'article':article, 'feed':None})
            article = s['article']
        except Exception, e:
            log("Error executing %s: %s" % (s.file, e.message), "error")

    key.articles.append(article)

    article.uid = uid()

    db.session.add(article)
    db.session.add(key)
    db.session.commit()

    now      = int(time.time())
    duration = tconv(now-then)
    log('%s: Stored %s "%s" (%s)' % (key.name, article.uid, article.title, duration))
    return article

def commit_to_feed(feed, article):
    """
     Place a new article on the api key of a feed, the feed itself,
     and commit changes.
    """