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",