/kai/lib/decorators.py

https://bitbucket.org/bbangert/kai/ · Python · 44 lines · 35 code · 5 blank · 4 comment · 7 complexity · a11c3a94da17112a809e518beb1ec03f MD5 · raw file

  1. """Solon decorators"""
  2. import logging
  3. import pylons
  4. from decorator import decorator
  5. from pylons.controllers.util import abort
  6. from tw2.core import ValidationError
  7. log = logging.getLogger(__name__)
  8. def in_group(group):
  9. """Requires a user to be logged in, and the group specified"""
  10. def wrapper(func, *args, **kwargs):
  11. user = pylons.tmpl_context.user
  12. if not user:
  13. log.debug("No user logged in for permission restricted function")
  14. abort(401, "Not Authorized")
  15. if user.in_group(group):
  16. log.debug("User %s verified in group %s", user, group)
  17. return func(*args, **kwargs)
  18. else:
  19. log.debug("User %s not in group %s", user, group)
  20. abort(401, "Not Authorized")
  21. return decorator(wrapper)
  22. @decorator
  23. def logged_in(func, *args, **kwargs):
  24. if not pylons.tmpl_context.user:
  25. abort(401, "Not Authorized")
  26. else:
  27. return func(*args, **kwargs)
  28. def validate(form, error_handler):
  29. """Validate a form with tw2"""
  30. @decorator
  31. def wrapper(func, self, *args, **kwargs):
  32. try:
  33. self.form_result=form.validate(pylons.request.params.mixed())
  34. except ValidationError, e:
  35. #Don't bother saving the widget, it's saved by tw2 on the request object anyway
  36. pylons.request.method = 'GET'
  37. return getattr(self, error_handler)(*args, **kwargs)
  38. return func(self, *args, **kwargs)
  39. return wrapper