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 []
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 []
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