def process_form(category_id=None): form = CategoryForm() form.set_feed_choices(FeedController(current_user.id).read()) cat_contr = CategoryController(current_user.id) feed_contr = FeedController(current_user.id) if not form.validate(): return render_template("edit_category.html", form=form) existing_cats = list(cat_contr.read(name=form.name.data)) if existing_cats and category_id is None: flash(gettext("Couldn't add category: already exists."), "warning") return redirect( url_for("category.form", category_id=existing_cats[0].id)) # Edit an existing category category_attr = {"name": form.name.data} if category_id is not None: cat_contr.update({"id": category_id}, category_attr) # Update the relation with feeds for feed_id in form.feeds.data: feed_contr.update({"id": feed_id}, {"category_id": category_id}) for feed in current_user.feeds: if feed.category_id == category_id and feed.id not in form.feeds.data: feed_contr.update({"id": feed.id}, {"category_id": None}) flash( gettext( "Category %(cat_name)r successfully updated.", cat_name=category_attr["name"], ), "success", ) return redirect(url_for("category.form", category_id=category_id)) # Create a new category new_category = cat_contr.create(**category_attr) # Update the relation with feeds for feed_id in form.feeds.data: feed_contr.update({"id": feed_id}, {"category_id": new_category.id}) flash( gettext( "Category %(category_name)r successfully created.", category_name=new_category.name, ), "success", ) return redirect(url_for("category.form", category_id=new_category.id))
def home(): """Displays the home page of the connected user. """ filters = _get_filters(request.args) category_contr = CategoryController(current_user.id) art_contr = ArticleController(current_user.id) categories = {cat.id: cat for cat in category_contr.read().all()} unread = art_contr.count_by_feed(readed=False) nb_unread = art_contr.read_light(readed=False).count() unread_by_cat = art_contr.count_by_category(readed=False) feeds = { feed.id: feed for feed in sorted( current_user.feeds, key=lambda x: x.title.lower(), reverse=False ) } filter_ = request.args.get("filter_", "unread") feed_id = int(request.args.get("feed", 0)) liked = int(request.args.get("liked", 0)) == 1 limit = request.args.get("limit", 1000) query = request.args.get("query", "") search_title = request.args.get("search_title", "off") search_content = request.args.get("search_content", "off") if filter_ in ["read", "unread"]: filters["readed"] = filter_ == "read" if feed_id: filters["feed_id"] = feed_id if liked: filters["like"] = int(liked) == 1 articles = art_contr.read_ordered(**filters) if limit != "all": limit = int(limit) articles = articles.limit(limit) in_error = { feed.id: feed.error_count for feed in FeedController(current_user.id).read(error_count__gt=0).all() } def gen_url( filter_=filter_, limit=limit, feed=feed_id, liked=liked, query=query, search_title=search_title, search_content=search_content, ): return ( "?filter_=%s&limit=%s&feed=%d&liked=%s&query=%s&search_title=%s&search_content=%s" % ( filter_, limit, feed, 1 if liked else 0, query, search_title, search_content, ) ) return render_template( "home.html", nb_unread=nb_unread, gen_url=gen_url, feed_id=feed_id, filter_=filter_, limit=limit, feeds=feeds, categories=categories, unread_by_cat=unread_by_cat, liked=liked, unread=dict(unread), articles=articles.all(), in_error=in_error, )