1
2
3 import flask
4 from flask import render_template, url_for
5 from coprs.exceptions import InsufficientRightsException
6 from coprs.forms import ActivateFasGroupForm
7 from coprs.helpers import Paginator
8 from coprs.logic import builds_logic
9 from coprs.logic.complex_logic import ComplexLogic
10 from coprs.logic.coprs_logic import CoprsLogic, PinnedCoprsLogic
11 from coprs.logic.users_logic import UsersLogic
12 from coprs import app
13
14 from ... import db
15 from ..misc import login_required
16 from ..user_ns import user_general
17
18 from . import groups_ns
19
20
21 @groups_ns.route("/activate/<fas_group>", methods=["GET", "POST"])
22 @login_required
23 -def activate_group(fas_group):
24 form = ActivateFasGroupForm()
25
26 if form.validate_on_submit():
27 if UsersLogic.is_blacklisted_group(fas_group):
28 flask.flash("This group is blacklisted and cannot be added.")
29 return flask.redirect(url_for(
30 "groups_ns.list_user_groups"))
31
32 if fas_group not in flask.g.user.user_teams:
33 raise InsufficientRightsException(
34 "User '{}' doesn't have access to fas group {}"
35 .format(flask.g.user.username, fas_group))
36
37 alias = form.name.data
38 group = UsersLogic.get_group_by_fas_name_or_create(
39 fas_group, alias)
40
41 db.session.add(group)
42 db.session.commit()
43
44 flask.flash(
45 "FAS group {} is activated in the Copr under the alias {} "
46 .format(fas_group, alias)
47 )
48 return flask.redirect(url_for(
49 "groups_ns.list_projects_by_group", group_name=alias))
50
51 else:
52 return flask.render_template(
53 "groups/activate_fas_group.html",
54 fas_group=fas_group,
55 form=form,
56 user=flask.g.user,
57 )
58
59
60 @groups_ns.route("/g/<group_name>/coprs/", defaults={"page": 1})
61 @groups_ns.route("/g/<group_name>/coprs/<int:page>")
62 -def list_projects_by_group(group_name, page=1):
63 group = ComplexLogic.get_group_by_name_safe(group_name)
64
65 pinned = [pin.copr for pin in PinnedCoprsLogic.get_by_group_id(group.id)] if page == 1 else []
66 query = CoprsLogic.get_multiple_by_group_id(group.id)
67 query = CoprsLogic.filter_without_ids(query, [copr.id for copr in pinned])
68 paginator = Paginator(query, query.count(), page)
69 coprs = paginator.sliced_query
70
71 data = builds_logic.BuildsLogic.get_small_graph_data('30min')
72
73 return render_template(
74 "coprs/show/group.html",
75 user=flask.g.user,
76 coprs=coprs,
77 pinned=pinned,
78 paginator=paginator,
79 tasks_info=ComplexLogic.get_queue_sizes(),
80 group=group,
81 graph=data
82 )
83
108