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")
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)
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)