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():
44
45
46 @user_ns.route("/customize-pinned/")
47 @user_ns.route("/customize-pinned/<group_name>")
48 @login_required
49 -def pinned_projects(group_name=None):
52
55 pinned = [pin.copr for pin in PinnedCoprsLogic.get_by_owner(owner)]
56 if isinstance(owner, models.Group):
57 UsersLogic.raise_if_not_in_group(flask.g.user, owner)
58 coprs = CoprsLogic.get_multiple_by_group_id(owner.id).filter(models.Copr.unlisted_on_hp.is_(False)).all()
59 else:
60 coprs = ComplexLogic.get_coprs_permissible_by_user(owner)
61 coprs = sorted(coprs, key=lambda copr: copr.full_name)
62 selected = [copr.id for copr in pinned]
63 selected += (app.config["PINNED_PROJECTS_LIMIT"] - len(pinned)) * [None]
64 for i, copr_id in enumerate(form.copr_ids.data if form else []):
65 selected[i] = int(copr_id) if copr_id else None
66
67 graph = BuildsLogic.get_small_graph_data('30min')
68 return flask.render_template("pinned.html",
69 owner=owner,
70 pinned=pinned,
71 selected=selected,
72 coprs=coprs,
73 form=form,
74 tasks_info=ComplexLogic.get_queue_sizes(),
75 graph=graph)
76
77
78 @user_ns.route("/customize-pinned/", methods=["POST"])
79 @user_ns.route("/customize-pinned/<group_name>", methods=["POST"])
80 @login_required
81 -def pinned_projects_post(group_name=None):
85
86
87 -def process_pinned_projects_post(owner, url_on_success):
88 if isinstance(owner, models.Group):
89 UsersLogic.raise_if_not_in_group(flask.g.user, owner)
90
91 form = PinnedCoprsForm()
92 if not form.validate_on_submit():
93 return render_pinned_projects(owner, form=form)
94
95 PinnedCoprsLogic.delete_by_owner(owner)
96 for i, copr_id in enumerate(filter(None, form.copr_ids.data)):
97 PinnedCoprsLogic.add(owner, int(copr_id), i)
98 db.session.commit()
99
100 return flask.redirect(url_on_success)
101