Example #1
0
 def delete(self, obj_id, commit=True):
     obj = self.get(url=obj_id)
     session.delete(obj)
     if commit:
         session.flush()
         session.commit()
     return obj
Example #2
0
 def enrich_cluster(cluster,
                    article,
                    cluster_read=None,
                    cluster_liked=False,
                    force_article_as_main=False):
     article.cluster = cluster
     # a cluster
     if cluster_read is not None:
         cluster.read = cluster.read and cluster_read
         cluster.read_reason = ReadReason.filtered
         logger.debug('marking as read because of filter %r', cluster)
     elif (cluster.read and cluster.read_reason in WAKABLE_REASONS
           and get_config(article, 'cluster_wake_up')
           and get_config(cluster, 'cluster_wake_up')):
         cluster.read = False
         logger.debug('waking up %r', cluster)
     # once one article is liked the cluster is liked
     cluster.liked = cluster.liked or cluster_liked
     if cluster.main_date > article.date or force_article_as_main:
         cluster.main_title = article.title
         cluster.main_date = article.date
         cluster.main_feed_title = article.feed.title
         cluster.main_article_id = article.id
     if not cluster.content:
         success, content = generate_content(article)
         if success:
             cluster.content = content
     session.add(cluster)
     session.add(article)
     session.commit()
     ARTICLE_CREATION.labels(read_reason=cluster.read_reason,
                             read='read' if cluster.read else 'unread',
                             cluster=article.cluster_reason.value).inc()
     return cluster
Example #3
0
def populate_db():
    fcontr = FeedController()
    ccontr = CategoryController()
    UserController().create(
        **{
            'is_admin': True,
            'is_api': True,
            'cluster_enabled': False,
            'login': '******',
            'password': '******'
        })
    user1, user2 = [
        UserController().create(login=name,
                                cluster_enabled=False,
                                email="*****@*****.**" % name,
                                password=name) for name in ["user1", "user2"]
    ]

    for iteration in range(2):
        article_total = 0

        for user in (user1, user2):
            for iter_cat in range(3):
                cat_id = None
                if iter_cat:
                    cat_id = ccontr.create(user_id=user.id,
                                           name=to_name(
                                               user, iteration, iter_cat)).id
                feed_id = fcontr.create(
                    link="feed%d%d" % (iteration, iter_cat),
                    user_id=user.id,
                    category_id=cat_id,
                    title=to_name(user, iteration, iter_cat, iter_cat)).id
                for iter_art in range(3):
                    entry = to_name(user, iteration, iter_cat, iter_cat,
                                    iter_art)

                    tags = [
                        to_name(user, iteration, iter_cat, iter_cat, iter_art,
                                str(i)) for i in range(2)
                    ]
                    article_total += 1
                    ArticleController().create(
                        entry_id=entry,
                        link='http://test.te/%d' % article_total,
                        feed_id=feed_id,
                        user_id=user.id,
                        tags=tags,
                        category_id=cat_id,
                        title=entry,
                        date=utc_now() + timedelta(seconds=iteration),
                        content="content %d" % article_total)

    session.commit()
    session.flush()
    ClusterController().clusterize_pending_articles()
Example #4
0
 def _drop_all():
     try:
         session.expunge_all()
         session.execute(
             'DROP TABLE IF EXISTS %s CASCADE' %
             ', '.join([('"%s"' % table) if table == 'user' else table
                        for table in list(Base.metadata.tables)]))
         session.commit()
     except Exception:
         logger.exception("Dropping db failed")
Example #5
0
 def update(self, filters, attrs, return_objs=False, commit=True):
     if not attrs:
         logger.error("nothing to update, doing nothing")
         result, commit = {}, False
     else:
         result = self._get(**filters).update(attrs,
                                              synchronize_session=False)
     if commit:
         session.flush()
         session.commit()
     if return_objs:
         return self._get(**filters)
     return result
Example #6
0
    def create(self, **attrs):
        if not attrs:
            raise ValueError("attributes to update must not be empty")
        if self._user_id_key is not None and self._user_id_key not in attrs:
            attrs[self._user_id_key] = self.user_id
        if not (self._user_id_key is None or self._user_id_key in attrs
                or self.user_id is None):
            raise Unauthorized("You must provide user_id one way or another")

        obj = self._db_cls(**attrs)
        session.add(obj)
        session.flush()
        session.commit()
        return obj
Example #7
0
 def enhance(article):
     save = False
     if article.feed.truncated_content:
         vector = article.content_generator.get_vector()
         if vector is not None:
             article.vector = vector
             save = True
         for key in 'title', 'lang', 'tags':
             value = article.content_generator.extracted_infos.get(key)
             if value and getattr(article, key) != value:
                 setattr(article, key, value)
                 save = True
     if save:
         session.add(article)
         session.commit()
Example #8
0
 def enrich_cluster(self,
                    cluster,
                    article,
                    cluster_read=None,
                    cluster_liked=False,
                    force_article_as_main=False):
     article.cluster = cluster
     # handling read status
     if cluster.read is None:  # no read status, new cluster
         cluster.read = bool(cluster_read)
     elif cluster_read is not None:  # filters indicate a read status
         cluster.read = cluster.read and cluster_read
         cluster.read_reason = ReadReason.filtered
         logger.debug('marking as read because of filter %r', cluster)
     elif (cluster.read  # waking up a cluster
           and cluster.read_reason in WAKABLE_REASONS
           and self.get_config(article, 'cluster_wake_up')
           and self.get_config(cluster, 'cluster_wake_up')):
         cluster.read = False
         logger.debug('waking up %r', cluster)
     # once one article is liked the cluster is liked
     cluster.liked = cluster.liked or cluster_liked
     if force_article_as_main or cluster.main_date > article.date \
             or (not article.feed.truncated_content
                 and all(cluster_article.feed.truncated_content
                         for cluster_article in cluster.articles)):
         cluster.main_title = article.title
         cluster.main_date = article.date
         cluster.main_link = article.link
         cluster.main_feed_title = article.feed.title
         cluster.main_article_id = article.id
     if not cluster.content:
         success, content = article.content_generator.generate()
         if success:
             cluster.content = content
     self.add_to_corpus(article)
     session.add(cluster)
     session.add(article)
     session.commit()
     ARTICLE_CREATION.labels(read_reason=cluster.read_reason,
                             read='read' if cluster.read else 'unread',
                             cluster=article.cluster_reason.value).inc()
     return cluster
Example #9
0
 def update_all_no_ctrl(**kwargs):
     for feed in FeedController().read():
         for key, value in kwargs.items():
             setattr(feed, key, value)
         session.add(feed)
     session.commit()
Example #10
0
 def delete_only_article(article, commit):
     session.delete(article)
     if commit:
         session.flush()
         session.commit()
     return article