Package coprs :: Package views :: Package user_ns :: Module user_general
[hide private]
[frames] | no frames]

Source Code for Module coprs.views.user_ns.user_general

  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 
10 11 12 -def render_user_info(user):
13 graph = BuildsLogic.get_small_graph_data('30min') 14 return flask.render_template("user_info.html", 15 user=user, 16 tasks_info=ComplexLogic.get_queue_sizes(), 17 graph=graph)
18
19 20 @user_ns.route("/info") 21 @login_required 22 -def user_info():
23 return render_user_info(flask.g.user)
24
25 26 @user_ns.route("/info/download") 27 @login_required 28 -def user_info_download():
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():
40 UsersLogic.delete_user_data(flask.g.user.username) 41 flask.flash("Your data were successfully deleted.") 42 return render_user_info(flask.g.user)
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):
49 owner = flask.g.user if not group_name else ComplexLogic.get_group_by_name_safe(group_name) 50 return render_pinned_projects(owner)
51
52 53 -def render_pinned_projects(owner, form=None):
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):
81 owner = flask.g.user if not group_name else ComplexLogic.get_group_by_name_safe(group_name) 82 url_on_success = helpers.owner_url(owner) 83 return process_pinned_projects_post(owner, url_on_success)
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