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 coprs import app, db, models, helpers 
  3  from coprs.forms import PinnedCoprsForm 
  4  from coprs.views.misc import login_required 
  5  from coprs.logic.users_logic import UsersLogic, UserDataDumper 
  6  from coprs.logic.builds_logic import BuildsLogic 
  7  from coprs.logic.complex_logic import ComplexLogic 
  8  from coprs.logic.coprs_logic import PinnedCoprsLogic 
  9  from coprs.logic.outdated_chroots_logic import OutdatedChrootsLogic 
 10  from coprs.views.coprs_ns.coprs_general import process_copr_repositories 
 11  from . import user_ns 
12 13 14 -def render_user_info(user):
15 graph = BuildsLogic.get_small_graph_data('30min') 16 return flask.render_template("user_info.html", 17 user=user, 18 tasks_info=ComplexLogic.get_queue_sizes(), 19 graph=graph)
20
21 22 @user_ns.route("/info") 23 @login_required 24 -def user_info():
25 return render_user_info(flask.g.user)
26
27 28 @user_ns.route("/info/download") 29 @login_required 30 -def user_info_download():
31 user = flask.g.user 32 dumper = UserDataDumper(user) 33 response = flask.make_response(dumper.dumps(pretty=True)) 34 response.mimetype = "application/json" 35 response.headers["Content-Disposition"] = "attachment; filename={0}.json".format(user.name) 36 return response
37
38 39 @user_ns.route("/delete") 40 @login_required 41 -def delete_data():
42 UsersLogic.delete_user_data(flask.g.user) 43 db.session.commit() 44 flask.flash("Your data were successfully deleted.") 45 return render_user_info(flask.g.user)
46
47 48 @user_ns.route("/customize-pinned/") 49 @user_ns.route("/customize-pinned/<group_name>") 50 @login_required 51 -def pinned_projects(group_name=None):
52 owner = flask.g.user if not group_name else ComplexLogic.get_group_by_name_safe(group_name) 53 return render_pinned_projects(owner)
54
55 56 -def render_pinned_projects(owner, form=None):
57 pinned = [pin.copr for pin in PinnedCoprsLogic.get_by_owner(owner)] 58 coprs = ComplexLogic.get_coprs_pinnable_by_owner(owner) 59 selected = [copr.id for copr in pinned] 60 selected += (app.config["PINNED_PROJECTS_LIMIT"] - len(pinned)) * [None] 61 for i, copr_id in enumerate(form.copr_ids.data if form else []): 62 selected[i] = int(copr_id) if copr_id else None 63 64 graph = BuildsLogic.get_small_graph_data('30min') 65 return flask.render_template("pinned.html", 66 owner=owner, 67 pinned=pinned, 68 selected=selected, 69 coprs=coprs, 70 form=form, 71 tasks_info=ComplexLogic.get_queue_sizes(), 72 graph=graph)
73
74 75 @user_ns.route("/customize-pinned/", methods=["POST"]) 76 @user_ns.route("/customize-pinned/<group_name>", methods=["POST"]) 77 @login_required 78 -def pinned_projects_post(group_name=None):
79 owner = flask.g.user if not group_name else ComplexLogic.get_group_by_name_safe(group_name) 80 url_on_success = helpers.owner_url(owner) 81 return process_pinned_projects_post(owner, url_on_success)
82
83 84 -def process_pinned_projects_post(owner, url_on_success):
85 if isinstance(owner, models.Group): 86 UsersLogic.raise_if_not_in_group(flask.g.user, owner) 87 88 form = PinnedCoprsForm(owner) 89 if not form.validate_on_submit(): 90 return render_pinned_projects(owner, form=form) 91 92 PinnedCoprsLogic.delete_by_owner(owner) 93 for i, copr_id in enumerate(filter(None, form.copr_ids.data)): 94 PinnedCoprsLogic.add(owner, int(copr_id), i) 95 db.session.commit() 96 97 return flask.redirect(url_on_success)
98
99 100 @user_ns.route("/repositories/") 101 @login_required 102 -def repositories():
103 return render_repositories()
104
105 106 -def render_repositories(*_args, **_kwargs):
107 owner = flask.g.user 108 projects = ComplexLogic.get_coprs_permissible_by_user(owner) 109 projects = sorted(projects, key=lambda p: p.full_name) 110 OutdatedChrootsLogic.make_review(owner) 111 db.session.commit() 112 return flask.render_template("repositories.html", 113 tasks_info=ComplexLogic.get_queue_sizes(), 114 graph=BuildsLogic.get_small_graph_data('30min'), 115 owner=owner, 116 projects=projects)
117
118 119 @user_ns.route("/repositories/", methods=["POST"]) 120 @login_required 121 -def repositories_post():
122 return process_copr_repositories(copr=None, on_success=render_repositories)
123