Beispiel #1
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")
Beispiel #2
0
 def __denorm_title_on_clusters(self, feed, attrs):
     if 'title' in attrs:
         if self.user_id:
             where_clause = and_(Article.user_id == self.user_id,
                                 Article.feed_id == feed.id)
         else:
             where_clause = Article.feed_id == feed.id
         stmt = update(Cluster)\
             .where(and_(Article.id == Cluster.main_article_id,
                         where_clause))\
             .values(dict(main_feed_title=attrs['title']))
         session.execute(stmt)
Beispiel #3
0
    def delete(self, obj_id, commit=True):
        from jarr.controllers.cluster import ClusterController
        feed = self.get(id=obj_id)
        logger.debug('DELETE %r - Found feed', feed)
        clu_ctrl = ClusterController(self.user_id)

        logger.info('DELETE %r - removing back ref from cluster to article',
                    feed)
        clu_ctrl.update(
            {
                'user_id':
                feed.user_id,
                'main_article_id__in':
                self.__actrl.read(feed_id=obj_id).with_entities('id')
            }, {'main_article_id': None})

        def select_art(col):
            return select([col]).where(and_(Cluster.id == Article.cluster_id,
                                            Article.user_id == feed.user_id))\
                                .order_by(Article.date.asc()).limit(1)

        logger.info('DELETE %r - removing articles', feed)
        session.execute(
            delete(Article).where(
                and_(Article.feed_id == feed.id,
                     Article.user_id == feed.user_id)))

        logger.info('DELETE %r - fixing cluster without main article', feed)
        clu_ctrl.update({
            'user_id': feed.user_id,
            'main_article_id': None
        }, {
            'main_title':
            select_art(Article.title),
            'main_article_id':
            select_art(Article.id),
            'main_feed_title':
            select([Feed.title]).where(
                and_(Cluster.id == Article.cluster_id, Article.user_id
                     == feed.user_id, Feed.id == Article.feed_id, Feed.user_id
                     == feed.user_id)).order_by(Article.date.asc()).limit(1)
        })

        logger.info('DELETE %r - removing clusters without main article', feed)
        session.execute(
            delete(Cluster).where(
                and_(Cluster.user_id == feed.user_id,
                     Cluster.main_article_id.__eq__(None))))
        return super().delete(obj_id)