Example #1
0
    def _fetch_feeds_common(self):
        query = self.query
        if query and len(query) > 2:
            if self.is_url(query):
                match_feed = Feed.query.filter((Feed.url == query) | (Feed.channel_url == query)).first()
                if match_feed:
                    return [match_feed]
                match_alias = FeedAliasUrl.query.filter(FeedAliasUrl.url == query).options(
                    db.joinedload(FeedAliasUrl.feed)
                ).all()
                if match_alias:
                    return lists.unique([m.feed for m in match_alias])
                try:
                    return self._resolve(query)
                except Exception as e:
                    app.logger.exception(e)
                return []

            #todo: add active
            matches = []
            match_alias = FeedAliasKeyword.query.filter(FeedAliasKeyword.keyword.ilike('%' + query + '%')).options(
                db.joinedload(FeedAliasKeyword.feed)
            ).all()
            if match_alias:
                for alias in match_alias:
                    matches.append(alias.feed)
            feeds = Feed.query.filter(Feed.title.ilike('%' + query + '%')).all()
            if feeds:
                for feed in feeds:
                    matches.append(feed)
            return lists.unique(matches)

        return []
Example #2
0
 def _fetch_feeds_channel(self):
     query = self.query
     if self.is_url(query):
         match_feed = Feed.query.filter(Feed.channel_url == query).first()
         if match_feed:
             return [match_feed]
         match_alias = FeedAliasUrl.query.filter(FeedAliasUrl.url == query).options(
             db.joinedload(FeedAliasUrl.feed)
         ).all()
         if match_alias:
             return lists.unique([m.feed for m in match_alias])
         try:
             return self._resolve(query)
         except Exception as e:
             app.logger.exception(e)
     return []
Example #3
0
    def generate(self):
        date_from = self._get_date_from()
        if date_from is None:
            return []
        stats = db.session.query(ArticleStatus.article_id, db.func.count(ArticleStatus.id).label('total')) \
            .join(ArticleStatus.article) \
            .join(Subscribe, ((Subscribe.type == Subscribe.TYPE_FEED) & (Subscribe.feed_id == Article.feed_id))) \
            .group_by(ArticleStatus.article_id).filter(
                (ArticleStatus.status == ArticleStatus.STATUS_READ) &
                (Subscribe.user_id == self.user.id) &
                (Article.fetched >= date_from)
            ).order_by(db.desc('total')).limit(self.articles_count)

        article_ids = []
        for (article_id, _count) in stats:
            article_ids.append(article_id)

        article_ids = list(unique(article_ids))
        return article_ids