authentic2-auth-kerberos/src/authentic2_auth_kerberos/utils.py

29 lines
1.1 KiB
Python

import urlparse
import urllib
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
def redirect_next(request, url, **kwargs):
'''Redirect to URL, add or replace parameters with kwargs
You can use relative or fully qualifier, or view names. You can provide
view args and kwargs using named argument args and kwargs.
'''
# specialize on the next url parameter as it is so frequent
if 'next' in request.REQUEST:
next_url = request.REQUEST.get('next')
kwargs['next'] = next_url
if not url.startswith('/') and not url.startswith('http:') and not url.startswith('https:'):
view_args = kwargs.pop('args', None)
view_kwargs = kwargs.pop('kwargs', None)
url = reverse(url, args=view_args, kwargs=view_kwargs)
parsed = urlparse.urlparse(url)
params = urlparse.parse_qs(parsed.query)
for key in kwargs.keys():
if kwargs[key] is None:
del kwargs[key]
params.update(kwargs)
url = urlparse.urlunparse(parsed[:4] + (urllib.urlencode(params),) + parsed[5:])
return HttpResponseRedirect(url)