diff --git a/ckan/lib/repoze_plugins/friendly_form.py b/ckan/lib/repoze_plugins/friendly_form.py index 1753491ca7a..1984b4c29a8 100644 --- a/ckan/lib/repoze_plugins/friendly_form.py +++ b/ckan/lib/repoze_plugins/friendly_form.py @@ -28,7 +28,12 @@ from six.moves.urllib.parse import urlparse, urlunparse, urlencode, parse_qs -from webob import Request, UnicodeMultiDict +from webob import Request +try: + from webob import UnicodeMultiDict as multidict +except ImportError: + from webob import multidict + from webob.exc import HTTPFound, HTTPUnauthorized from zope.interface import implementer @@ -182,7 +187,7 @@ def identify(self, environ): # We are on the URL where repoze.who logs the user out. # r = Request(environ) params = dict(list(r.GET.items()) + list(r.POST.items())) - form = UnicodeMultiDict(params) + form = multidict(params) form.update(query) referer = environ.get(u'HTTP_REFERER', script_name) came_from = form.get(u'came_from', referer) @@ -285,7 +290,13 @@ def _get_logins(self, environ, force_typecast=False): Otherwise, it will be ``None`` or an string. ''' - variables = Request(environ).queryvars + try: + # Webob 1.8.5 (py3) + variables = Request(environ).params + except AttributeError: + # Webob 1.0.8 (py2) + variables = Request(environ).queryvars + failed_logins = variables.get(self.login_counter_name) if force_typecast: try: