def delete(self, obj_id, commit=True): obj = self.get(url=obj_id) session.delete(obj) if commit: session.flush() session.commit() return obj
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
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()
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 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
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
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()
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
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()
def delete_only_article(article, commit): session.delete(article) if commit: session.flush() session.commit() return article