def coprs_by_user(username=None, page=1): user = users_logic.UsersLogic.get(username).first() if not user: return page_not_found("User {0} does not exist.".format(username)) pinned = [pin.copr for pin in PinnedCoprsLogic.get_by_user_id(user.id) ] if page == 1 else [] query = CoprsLogic.get_multiple_owned_by_username(username) query = CoprsLogic.filter_without_ids(query, [copr.id for copr in pinned]) query = CoprsLogic.filter_without_group_projects(query) query = CoprsLogic.set_query_order(query, desc=True) paginator = helpers.Paginator(query, query.count(), page) coprs = paginator.sliced_query # flask.g.user is none when no user is logged - showing builds from everyone users_builds = builds_logic.BuildsLogic.get_recent_tasks(flask.g.user, 4) data = builds_logic.BuildsLogic.get_small_graph_data('30min') return flask.render_template("coprs/show/user.html", user=user, coprs=coprs, pinned=pinned, paginator=paginator, tasks_info=ComplexLogic.get_queue_sizes(), users_builds=users_builds, graph=data)
def coprs_show(page=1): query = CoprsLogic.get_multiple(include_unlisted_on_hp=False) query = CoprsLogic.set_query_order(query, desc=True) paginator = helpers.Paginator(query, query.count(), page) coprs = paginator.sliced_query # flask.g.user is none when no user is logged - showing builds from everyone # TODO: builds_logic.BuildsLogic.get_recent_tasks(flask.g.user, 5) takes too much time, optimize sql # users_builds = builds_logic.BuildsLogic.get_recent_tasks(flask.g.user, 5) users_builds = builds_logic.BuildsLogic.get_recent_tasks(None, 4) data = builds_logic.BuildsLogic.get_small_graph_data('30min') return flask.render_template("coprs/show/all.html", coprs=coprs, pinned=[], paginator=paginator, tasks_info=ComplexLogic.get_queue_sizes(), users_builds=users_builds, graph=data)
def render_pinned_projects(owner, form=None): pinned = [pin.copr for pin in PinnedCoprsLogic.get_by_owner(owner)] if isinstance(owner, models.Group): UsersLogic.raise_if_not_in_group(flask.g.user, owner) coprs = CoprsLogic.get_multiple_by_group_id(owner.id).filter( models.Copr.unlisted_on_hp.is_(False)).all() else: coprs = ComplexLogic.get_coprs_permissible_by_user(owner) coprs = sorted(coprs, key=lambda copr: copr.full_name) selected = [copr.id for copr in pinned] selected += (app.config["PINNED_PROJECTS_LIMIT"] - len(pinned)) * [None] for i, copr_id in enumerate(form.copr_ids.data if form else []): selected[i] = int(copr_id) if copr_id else None graph = BuildsLogic.get_small_graph_data('30min') return flask.render_template("pinned.html", owner=owner, pinned=pinned, selected=selected, coprs=coprs, form=form, tasks_info=ComplexLogic.get_queue_sizes(), graph=graph)
def coprs_fulltext_search(page=1): fulltext = flask.request.args.get("fulltext", "") try: query = coprs_logic.CoprsLogic.get_multiple_fulltext(fulltext) except ValueError as e: flask.flash(str(e), "error") return flask.redirect(flask.request.referrer or flask.url_for("coprs_ns.coprs_show")) paginator = helpers.Paginator(query, query.count(), page, additional_params={"fulltext": fulltext}) data = builds_logic.BuildsLogic.get_small_graph_data('30min') coprs = paginator.sliced_query return render_template("coprs/show/fulltext.html", coprs=coprs, pinned=[], paginator=paginator, fulltext=fulltext, tasks_info=ComplexLogic.get_queue_sizes(), graph=data)
def render_user_info(user): graph = BuildsLogic.get_small_graph_data('30min') return flask.render_template("user_info.html", user=user, tasks_info=ComplexLogic.get_queue_sizes(), graph=graph)