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) 41 db.session.commit() 42 flask.flash("Your data were successfully deleted.") 43 return render_user_info(flask.g.user)
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):
50 owner = flask.g.user if not group_name else ComplexLogic.get_group_by_name_safe(group_name) 51 return render_pinned_projects(owner)
52
53 54 -def render_pinned_projects(owner, form=None):
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):
82 owner = flask.g.user if not group_name else ComplexLogic.get_group_by_name_safe(group_name) 83 url_on_success = helpers.owner_url(owner) 84 return process_pinned_projects_post(owner, url_on_success)
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