diff options
author | François Schmidts <francois.schmidts@gmail.com> | 2015-05-19 00:12:00 +0200 |
---|---|---|
committer | François Schmidts <francois.schmidts@gmail.com> | 2015-07-02 15:34:16 +0200 |
commit | 6b4d80849649fb68c7c3283dccd84f9a2db02acb (patch) | |
tree | fa0c5c5cf559b7242b9419595b9384a5e3476b0a /pyaggr3g470r | |
parent | adding filters field (diff) | |
download | newspipe-6b4d80849649fb68c7c3283dccd84f9a2db02acb.tar.gz newspipe-6b4d80849649fb68c7c3283dccd84f9a2db02acb.tar.bz2 newspipe-6b4d80849649fb68c7c3283dccd84f9a2db02acb.zip |
adding filters mechanism + splitting tests + adding tests for filters
Diffstat (limited to 'pyaggr3g470r')
-rw-r--r-- | pyaggr3g470r/controllers/article.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/pyaggr3g470r/controllers/article.py b/pyaggr3g470r/controllers/article.py index d22911bd..9051a910 100644 --- a/pyaggr3g470r/controllers/article.py +++ b/pyaggr3g470r/controllers/article.py @@ -1,9 +1,14 @@ +import re +import logging from sqlalchemy import func from bootstrap import db from .abstract import AbstractController +from pyaggr3g470r.controllers import FeedController from pyaggr3g470r.models import Article +logger = logging.getLogger(__name__) + class ArticleController(AbstractController): _db_cls = Article @@ -26,3 +31,37 @@ class ArticleController(AbstractController): .filter(*self._to_filters(readed=False, user_id=self.user_id)) .group_by(Article.feed_id).all()) + + def create(self, **attrs): + assert 'feed_id' in attrs + feed = FeedController( + attrs.get('user_id', self.user_id)).get(id=attrs['feed_id']) + if 'user_id' in attrs: + assert feed.user_id == attrs['user_id'] or self.user_id is None + attrs['user_id'] = feed.user_id + if not feed.filters: + return super().create(**attrs) + for filter_ in feed.filters: + match = False + if filter_.get('type') == 'regex': + match = re.match(filter_['pattern'], attrs.get('title', '')) + elif filter_.get('type') == 'simple match': + match = filter_['pattern'] in attrs.get('title', '') + take_action = match and filter_.get('action on') == 'match' \ + or not match and filter_.get('action on') == 'no match' + + if not take_action: + continue + + if filter_.get('action') == 'mark as read': + attrs['readed'] = True + logger.warn("article %s will be created as read", + attrs['link']) + elif filter_.get('action') == 'mark as favorite': + attrs['like'] = True + logger.warn("article %s will be created as liked", + attrs['link']) + + return super().create(**attrs) + + |