Mercurial > public > src > rhodecode
comparison pylons_app/controllers/users.py @ 333:4402f4041696 demo
Merge with c12f4d19c95065f313eefcd45eac9ef507f5fa55
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Tue, 29 Jun 2010 20:57:19 +0200 |
parents | a7608dbe47fc fdf9f6ee5217 |
children |
comparison
equal
deleted
inserted
replaced
307:8d2c51f23131 | 333:4402f4041696 |
---|---|
20 """ | 20 """ |
21 Created on April 4, 2010 | 21 Created on April 4, 2010 |
22 users controller for pylons | 22 users controller for pylons |
23 @author: marcink | 23 @author: marcink |
24 """ | 24 """ |
25 import logging | 25 from formencode import htmlfill |
26 from pylons import request, session, tmpl_context as c, url | 26 from pylons import request, session, tmpl_context as c, url |
27 from pylons.controllers.util import abort, redirect | 27 from pylons.controllers.util import abort, redirect |
28 from pylons.i18n.translation import _ | 28 from pylons.i18n.translation import _ |
29 from pylons_app.lib import helpers as h | 29 from pylons_app.lib import helpers as h |
30 from pylons_app.lib.auth import LoginRequired, CheckPermissionAll | 30 from pylons_app.lib.auth import LoginRequired, HasPermissionAllDecorator |
31 from pylons_app.lib.base import BaseController, render | 31 from pylons_app.lib.base import BaseController, render |
32 from pylons_app.model.db import User, UserLog | 32 from pylons_app.model.db import User, UserLog |
33 from pylons_app.model.forms import UserForm | 33 from pylons_app.model.forms import UserForm |
34 from pylons_app.model.user_model import UserModel | 34 from pylons_app.model.user_model import UserModel, DefaultUserException |
35 import formencode | 35 import formencode |
36 from formencode import htmlfill | 36 import logging |
37 | 37 |
38 log = logging.getLogger(__name__) | 38 log = logging.getLogger(__name__) |
39 | 39 |
40 class UsersController(BaseController): | 40 class UsersController(BaseController): |
41 """REST Controller styled on the Atom Publishing Protocol""" | 41 """REST Controller styled on the Atom Publishing Protocol""" |
42 # To properly map this controller, ensure your config/routing.py | 42 # To properly map this controller, ensure your config/routing.py |
43 # file has a resource setup: | 43 # file has a resource setup: |
44 # map.resource('user', 'users') | 44 # map.resource('user', 'users') |
45 | |
45 @LoginRequired() | 46 @LoginRequired() |
47 @HasPermissionAllDecorator('hg.admin') | |
46 def __before__(self): | 48 def __before__(self): |
47 c.admin_user = session.get('admin_user') | 49 c.admin_user = session.get('admin_user') |
48 c.admin_username = session.get('admin_username') | 50 c.admin_username = session.get('admin_username') |
49 super(UsersController, self).__before__() | 51 super(UsersController, self).__before__() |
50 | 52 |
89 # <input type="hidden" name="_method" value="PUT" /> | 91 # <input type="hidden" name="_method" value="PUT" /> |
90 # Or using helpers: | 92 # Or using helpers: |
91 # h.form(url('user', id=ID), | 93 # h.form(url('user', id=ID), |
92 # method='put') | 94 # method='put') |
93 # url('user', id=ID) | 95 # url('user', id=ID) |
94 h.flash(_('User updated succesfully - disabled for demo :)'), category='success') | |
95 return redirect(url('users')) | |
96 | |
97 user_model = UserModel() | 96 user_model = UserModel() |
98 _form = UserForm(edit=True)() | 97 _form = UserForm(edit=True)() |
99 try: | 98 try: |
100 form_result = _form.to_python(dict(request.POST)) | 99 form_result = _form.to_python(dict(request.POST)) |
101 user_model.update(id, form_result) | 100 user_model.update(id, form_result) |
111 except Exception: | 110 except Exception: |
112 h.flash(_('error occured during update of user %s') \ | 111 h.flash(_('error occured during update of user %s') \ |
113 % form_result['username'], category='error') | 112 % form_result['username'], category='error') |
114 | 113 |
115 return redirect(url('users')) | 114 return redirect(url('users')) |
116 | 115 |
117 def delete(self, id): | 116 def delete(self, id): |
118 """DELETE /users/id: Delete an existing item""" | 117 """DELETE /users/id: Delete an existing item""" |
119 # Forms posted to this method should contain a hidden field: | 118 # Forms posted to this method should contain a hidden field: |
120 # <input type="hidden" name="_method" value="DELETE" /> | 119 # <input type="hidden" name="_method" value="DELETE" /> |
121 # Or using helpers: | 120 # Or using helpers: |
126 return redirect(url('users')) | 125 return redirect(url('users')) |
127 user_model = UserModel() | 126 user_model = UserModel() |
128 try: | 127 try: |
129 user_model.delete(id) | 128 user_model.delete(id) |
130 h.flash(_('sucessfully deleted user'), category='success') | 129 h.flash(_('sucessfully deleted user'), category='success') |
130 except DefaultUserException as e: | |
131 h.flash(str(e), category='warning') | |
131 except Exception: | 132 except Exception: |
132 h.flash(_('An error occured during deletion of user'), | 133 h.flash(_('An error occured during deletion of user'), |
133 category='error') | 134 category='error') |
134 | |
135 return redirect(url('users')) | 135 return redirect(url('users')) |
136 | 136 |
137 def show(self, id, format='html'): | 137 def show(self, id, format='html'): |
138 """GET /users/id: Show a specific item""" | 138 """GET /users/id: Show a specific item""" |
139 # url('user', id=ID) | 139 # url('user', id=ID) |
141 | 141 |
142 def edit(self, id, format='html'): | 142 def edit(self, id, format='html'): |
143 """GET /users/id/edit: Form to edit an existing item""" | 143 """GET /users/id/edit: Form to edit an existing item""" |
144 # url('edit_user', id=ID) | 144 # url('edit_user', id=ID) |
145 c.user = self.sa.query(User).get(id) | 145 c.user = self.sa.query(User).get(id) |
146 if c.user.username == 'default': | |
147 h.flash(_("You can't edit this user since it's" | |
148 " crucial for entire application"), category='warning') | |
149 return redirect(url('users')) | |
150 | |
146 defaults = c.user.__dict__ | 151 defaults = c.user.__dict__ |
147 return htmlfill.render( | 152 return htmlfill.render( |
148 render('admin/users/user_edit.html'), | 153 render('admin/users/user_edit.html'), |
149 defaults=defaults, | 154 defaults=defaults, |
150 encoding="UTF-8", | 155 encoding="UTF-8", |