Skip to content

Commit

Permalink
fixes for Python 3, Django 2.1
Browse files Browse the repository at this point in the history
  • Loading branch information
PetrDlouhy committed Aug 7, 2019
1 parent 90c19eb commit 273ae94
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 19 deletions.
15 changes: 8 additions & 7 deletions query_exchange/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from django.utils.http import urlencode
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.utils.itercompat import is_iterable
from six import string_types


def reverse_with_query(viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None,
Expand Down Expand Up @@ -28,33 +29,33 @@ def process_query(params, keep=None, exclude=None, add=None, remove=None):
if add:
add = dict(_extract_items(add))

for k, v in add.iteritems():
for k, v in add.items():
if k in data and keep and k in keep:
data[k].extend(v)
else:
data[k] = v

if remove:
remove = dict(_extract_items(remove))
for k, v in remove.iteritems():
for k, v in remove.items():
if k in data:
for value in v:
if value in data[k]:
data[k].remove(value)


return urlencode([(k, v) for k, l in sorted(data.iteritems()) for v in l])
return urlencode([(k, v) for k, l in sorted(data.items()) for v in l])


def _is_iterable(iterable):
return not isinstance(iterable, basestring) and is_iterable(iterable)
return not isinstance(iterable, string_types) and is_iterable(iterable)


def _extract_items(iterable):
if hasattr(iterable, 'iterlists'):
return ((k, v[:]) for k, v in iterable.iterlists())

return ((k, _is_iterable(v) and list(v) or [v])
for k, v in (iterable.iteritems()
if hasattr(iterable, 'iteritems')
for k, v in (iterable.items()
if hasattr(iterable, 'items')
else iterable))
19 changes: 7 additions & 12 deletions query_exchange/templatetags/query_exchange_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ def render(self, context):
params,
self.keep and [v.resolve(context) for v in self.keep],
self.exclude and [v.resolve(context) for v in self.exclude],
self.add and dict([(k, v.resolve(context)) for k, v in self.add.iteritems()]),
self.remove and dict([(k, v.resolve(context)) for k, v in self.remove.iteritems()]),
self.add and dict([(k, v.resolve(context)) for k, v in self.add.items()]),
self.remove and dict([(k, v.resolve(context)) for k, v in self.remove.items()]),
)
if query:
url += '?' + query
Expand All @@ -54,11 +54,6 @@ def __init__(self, view_name, args, kwargs, asvar, keep, exclude, add, remove):
self.remove = remove

def get_url(self, context):
try:
self.view_name = self.view_name.resolve(context)
except AttributeError:
pass

return URLNode.render(self, context), context['request'].GET.copy()

class WithQueryNode(BaseQueryNode, template.Node):
Expand Down Expand Up @@ -146,16 +141,16 @@ def url_with_query(parser, token):
bits = iter(bits[2:])
for bit in bits:
if bit == 'as':
asvar = bits.next()
asvar = next(bits)
break
elif bit == 'keep':
keep, _ = parse_args(parser, bits.next())
keep, _ = parse_args(parser, next(bits))
elif bit == 'exclude':
exclude, _ = parse_args(parser, bits.next())
exclude, _ = parse_args(parser, next(bits))
elif bit == 'add':
_, add = parse_args(parser, bits.next())
_, add = parse_args(parser, next(bits))
elif bit == 'remove':
_, remove = parse_args(parser, bits.next())
_, remove = parse_args(parser, next(bits))
else:
args, kwargs = parse_args(parser, bit)

Expand Down

0 comments on commit 273ae94

Please sign in to comment.