Completed
Push — master ( 6ca66a...a573ac )
by Andrew
01:29
created

method_wrapper()   B

Complexity

Conditions 6

Size

Total Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
c 1
b 0
f 0
dl 0
loc 16
rs 8
1
from django.core.exceptions import PermissionDenied
2
from django.http import HttpRequest
3
from django.shortcuts import redirect
4
5
6
def login_required_no_redirect(do_redirect=None):
7
	"""
8
	@param do_redirect: throws exception on None, redirects to login on True, redirects to register of False
9
	@type do_redirect: bool
10
	"""
11
	def method_wrapper(f):
12
		def wrap(*args, **kwargs):
13
			# handle self
14
			request = args[0] if isinstance(args[0], HttpRequest) else args[1]
15
			if request.user.is_authenticated():
16
				return f(*args, **kwargs)
17
			else:
18
				if do_redirect is None:
19
					raise PermissionDenied
20
				else:
21
					type_arg = "login" if do_redirect else "register"
22
					return redirect('/register?type={}&next={}'.format(type_arg, request.path))
23
24
		wrap.__doc__ = f.__doc__
25
		wrap.__name__ = f.__name__
26
		return wrap
27
	return method_wrapper