docs.views: 49 total statements, 73.0% covered

Generated: Mon 2013-04-29 21:17 CST

Source file: /home/slam/workspace/django-docs/docs/views.py

Stats: 27 executed, 10 missed, 12 excluded, 43 ignored

  1. from django.views.generic import RedirectView
  2. from django.core.urlresolvers import reverse
  3. from django.views.static import serve
  4. from django.conf import settings
  5. from django.contrib.auth.decorators import login_required
  6. from functools import wraps
  7. from django.contrib.admin.forms import AdminAuthenticationForm
  8. from django.contrib.auth.views import login
  9. from django.contrib.admin.views.decorators import staff_member_required
  10. from django.contrib.auth import REDIRECT_FIELD_NAME
  11. from django.utils.translation import ugettext as _
  12. from exceptions import ValueError
  13. def superuser_required(view_func):
  14. """
  15. Decorator for views that checks that the user is logged in and is a staff
  16. member, displaying the login page if necessary.
  17. """
  18. @wraps(view_func)
  19. def _checklogin(request, *args, **kwargs):
  20. if request.user.is_active and request.user.is_superuser:
  21. # The user is valid. Continue to the admin page.
  22. return view_func(request, *args, **kwargs)
  23. assert hasattr(request, 'session'), "The Django admin requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'."
  24. defaults = {
  25. 'template_name': 'admin/login.html',
  26. 'authentication_form': AdminAuthenticationForm,
  27. 'extra_context': {
  28. 'title': _('Log in'),
  29. 'app_path': request.get_full_path(),
  30. REDIRECT_FIELD_NAME: request.get_full_path(),
  31. },
  32. }
  33. return login(request, **defaults)
  34. return _checklogin
  35. def public(function=None):
  36. """
  37. Dummy decorator that doesn't check anything.
  38. """
  39. return function
  40. class DocsAccessSettingError(ValueError):
  41. pass
  42. class DocsRootSettingError(ValueError):
  43. pass
  44. DOCS_ACCESS_CHOICES = (
  45. 'public',
  46. 'login_required',
  47. 'staff',
  48. 'superuser',
  49. )
  50. DOCS_ROOT = getattr(settings, 'DOCS_ROOT', None)
  51. DOCS_ACCESS = getattr(settings, 'DOCS_ACCESS', DOCS_ACCESS_CHOICES[0])
  52. if DOCS_ACCESS == 'public':
  53. decorator = public
  54. elif DOCS_ACCESS == 'login_required':
  55. decorator = login_required
  56. elif DOCS_ACCESS == 'staff':
  57. decorator = staff_member_required
  58. elif DOCS_ACCESS == 'superuser':
  59. decorator = superuser_required
  60. else:
  61. decorator = public
  62. @decorator
  63. def serve_docs(request, path, **kwargs):
  64. if DOCS_ACCESS not in DOCS_ACCESS_CHOICES:
  65. raise DocsAccessSettingError('DOCS_ACCESS setting value is incorrect: %s (choises are: %s)' % (
  66. DOCS_ACCESS,
  67. DOCS_ACCESS_CHOICES
  68. ))
  69. if 'document_root' not in kwargs and not DOCS_ROOT:
  70. raise DocsRootSettingError('DOCS_ROOT setting value is incorrect: %s (must be a valid path)' % DOCS_ROOT)
  71. if 'document_root' not in kwargs and DOCS_ROOT:
  72. kwargs['document_root'] = DOCS_ROOT
  73. return serve(request, path, **kwargs)
  74. class DocsRootView(RedirectView):
  75. def get_redirect_url(self, **kwargs):
  76. return reverse('docs_files', kwargs={'path': 'index.html'})