1 import flask
2 from . import user_ns
3 from coprs import app, db, models, helpers
4 from coprs.forms import PinnedCoprsForm
5 from coprs.views.misc import login_required
6 from coprs.logic.users_logic import UsersLogic, UserDataDumper
7 from coprs.logic.builds_logic import BuildsLogic
8 from coprs.logic.complex_logic import ComplexLogic
9 from coprs.logic.coprs_logic import CoprsLogic, PinnedCoprsLogic
18
19
20 @user_ns.route("/info")
21 @login_required
22 -def user_info():
24
29 user = flask.g.user
30 dumper = UserDataDumper(user)
31 response = flask.make_response(dumper.dumps(pretty=True))
32 response.mimetype = "application/json"
33 response.headers["Content-Disposition"] = "attachment; filename={0}.json".format(user.name)
34 return response
35
36
37 @user_ns.route("/delete")
38 @login_required
39 -def delete_data():
43
44
45 @user_ns.route("/customize-pinned/")
46 @user_ns.route("/customize-pinned/<group_name>")
47 @login_required
48 -def pinned_projects(group_name=None):
51
54 pinned = [pin.copr for pin in PinnedCoprsLogic.get_by_owner(owner)]
55 if isinstance(owner, models.Group):
56 UsersLogic.raise_if_not_in_group(flask.g.user, owner)
57 coprs = CoprsLogic.get_multiple_by_group_id(owner.id).filter(models.Copr.unlisted_on_hp.is_(False)).all()
58 else:
59 coprs = ComplexLogic.get_coprs_permissible_by_user(owner)
60 coprs = sorted(coprs, key=lambda copr: copr.full_name)
61 selected = [copr.id for copr in pinned]
62 selected += (app.config["PINNED_PROJECTS_LIMIT"] - len(pinned)) * [None]
63 for i, copr_id in enumerate(form.copr_ids.data if form else []):
64 selected[i] = int(copr_id) if copr_id else None
65
66 graph = BuildsLogic.get_small_graph_data('30min')
67 return flask.render_template("pinned.html",
68 owner=owner,
69 pinned=pinned,
70 selected=selected,
71 coprs=coprs,
72 form=form,
73 tasks_info=ComplexLogic.get_queue_sizes(),
74 graph=graph)
75
76
77 @user_ns.route("/customize-pinned/", methods=["POST"])
78 @user_ns.route("/customize-pinned/<group_name>", methods=["POST"])
79 @login_required
80 -def pinned_projects_post(group_name=None):
84
85
86 -def process_pinned_projects_post(owner, url_on_success):
87 if isinstance(owner, models.Group):
88 UsersLogic.raise_if_not_in_group(flask.g.user, owner)
89
90 form = PinnedCoprsForm()
91 if not form.validate_on_submit():
92 return render_pinned_projects(owner, form=form)
93
94 PinnedCoprsLogic.delete_by_owner(owner)
95 for i, copr_id in enumerate(filter(None, form.copr_ids.data)):
96 PinnedCoprsLogic.add(owner, int(copr_id), i)
97 db.session.commit()
98
99 return flask.redirect(url_on_success)
100