Skip to content

Commit 83e8b40

Browse files
committed
Apply pyupgrade fixes
1 parent cf6031a commit 83e8b40

33 files changed

+58
-162
lines changed

docs/conf.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#!/usr/bin/env python3
2-
# -*- coding: utf-8 -*-
32

43
import os
54
import re

drf_haystack/__init__.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
# -*- coding: utf-8 -*-
2-
3-
from __future__ import unicode_literals
41
import warnings
52

63

drf_haystack/fields.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
1-
# -*- coding: utf-8 -*-
2-
3-
from __future__ import absolute_import, unicode_literals
4-
51
import six
62
from rest_framework import fields
73

84

9-
class DRFHaystackFieldMixin(object):
5+
class DRFHaystackFieldMixin:
106
prefix_field_names = False
117

128
def __init__(self, **kwargs):
139
self.prefix_field_names = kwargs.pop('prefix_field_names', False)
14-
super(DRFHaystackFieldMixin, self).__init__(**kwargs)
10+
super().__init__(**kwargs)
1511

1612
def bind(self, field_name, parent):
1713
"""
@@ -95,11 +91,10 @@ class FacetDictField(fields.DictField):
9591
"""
9692

9793
def to_representation(self, value):
98-
return dict(
99-
[(six.text_type(key), self.child.to_representation(key, val))
94+
return {
95+
str(key): self.child.to_representation(key, val)
10096
for key, val in value.items()
101-
]
102-
)
97+
}
10398

10499

105100
class FacetListField(fields.ListField):

drf_haystack/filters.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
# -*- coding: utf-8 -*-
2-
3-
from __future__ import absolute_import, unicode_literals
4-
51
import operator
62
import six
73
from functools import reduce
@@ -154,7 +150,7 @@ class HaystackHighlightFilter(HaystackFilter):
154150
"""
155151

156152
def filter_queryset(self, request, queryset, view):
157-
queryset = super(HaystackHighlightFilter, self).filter_queryset(request, queryset, view)
153+
queryset = super().filter_queryset(request, queryset, view)
158154
if self.get_request_filters(request) and isinstance(queryset, SearchQuerySet):
159155
queryset = queryset.highlight()
160156
return queryset
@@ -225,7 +221,7 @@ class HaystackOrderingFilter(OrderingFilter):
225221
"""
226222

227223
def get_default_valid_fields(self, queryset, view, context={}):
228-
valid_fields = super(HaystackOrderingFilter, self).get_default_valid_fields(queryset, view, context)
224+
valid_fields = super().get_default_valid_fields(queryset, view, context)
229225

230226
# Check if we need to support aggregate serializers
231227
serializer_class = view.get_serializer_class()
@@ -255,7 +251,7 @@ def get_valid_fields(self, queryset, view, context={}):
255251
valid_fields = list(set(reduce(operator.concat, model_fields)))
256252
else:
257253
valid_fields = [
258-
(item, item) if isinstance(item, six.string_types) else item
254+
(item, item) if isinstance(item, str) else item
259255
for item in valid_fields
260256
]
261257

drf_haystack/generics.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
# -*- coding: utf-8 -*-
2-
3-
from __future__ import absolute_import, unicode_literals
4-
51
import six
62

73
from django.contrib.contenttypes.models import ContentType
@@ -72,7 +68,7 @@ def get_object(self):
7268
queryset = self.get_queryset()
7369
if "model" in self.request.query_params:
7470
try:
75-
app_label, model = map(six.text_type.lower, self.request.query_params["model"].split(".", 1))
71+
app_label, model = map(str.lower, self.request.query_params["model"].split(".", 1))
7672
ctype = ContentType.objects.get(app_label=app_label, model=model)
7773
queryset = self.get_queryset(index_models=[ctype.model_class()])
7874
except (ValueError, ContentType.DoesNotExist):
@@ -96,7 +92,7 @@ def get_object(self):
9692
raise Http404("No result matches the given query.")
9793

9894
def filter_queryset(self, queryset):
99-
queryset = super(HaystackGenericAPIView, self).filter_queryset(queryset)
95+
queryset = super().filter_queryset(queryset)
10096

10197
if self.load_all:
10298
queryset = queryset.load_all()

drf_haystack/mixins.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
# -*- coding: utf-8 -*-
2-
3-
from __future__ import absolute_import, unicode_literals
4-
51
from rest_framework.decorators import action
62
from rest_framework.response import Response
73

84
from drf_haystack.filters import HaystackFacetFilter
95

106

11-
class MoreLikeThisMixin(object):
7+
class MoreLikeThisMixin:
128
"""
139
Mixin class for supporting "more like this" on an API View.
1410
"""
@@ -33,7 +29,7 @@ def more_like_this(self, request, pk=None):
3329
return Response(serializer.data)
3430

3531

36-
class FacetMixin(object):
32+
class FacetMixin:
3733
"""
3834
Mixin class for supporting faceting on an API View.
3935
"""
@@ -58,7 +54,7 @@ def facets(self, request):
5854

5955
field, value = facet.split(":", 1)
6056
if value:
61-
queryset = queryset.narrow('%s:"%s"' % (field, queryset.query.clean(value)))
57+
queryset = queryset.narrow(f'{field}:"{queryset.query.clean(value)}"')
6258

6359
serializer = self.get_facet_serializer(queryset.facet_counts(), objects=queryset, many=False)
6460
return Response(serializer.data)
@@ -119,4 +115,4 @@ def get_facet_objects_serializer_class(self):
119115
Defaults to using the views ``self.serializer_class`` if not
120116
``self.facet_objects_serializer_class`` is set.
121117
"""
122-
return self.facet_objects_serializer_class or super(FacetMixin, self).get_serializer_class()
118+
return self.facet_objects_serializer_class or super().get_serializer_class()

drf_haystack/query.py

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,16 @@
1-
# -*- coding: utf-8 -*-
2-
3-
from __future__ import absolute_import, unicode_literals
4-
51
import operator
62
import six
73
import warnings
84
from itertools import chain
95

106

11-
from six.moves import zip
127
from dateutil import parser
138

149
from drf_haystack import constants
1510
from drf_haystack.utils import merge_dict
1611

1712

18-
class BaseQueryBuilder(object):
13+
class BaseQueryBuilder:
1914
"""
2015
Query builder base class.
2116
"""
@@ -79,12 +74,12 @@ class FilterQueryBuilder(BaseQueryBuilder):
7974
"""
8075

8176
def __init__(self, backend, view):
82-
super(FilterQueryBuilder, self).__init__(backend, view)
77+
super().__init__(backend, view)
8378

8479
assert getattr(self.backend, "default_operator", None) in (operator.and_, operator.or_), (
85-
"%(cls)s.default_operator must be either 'operator.and_' or 'operator.or_'." % {
86-
"cls": self.backend.__class__.__name__
87-
})
80+
"{cls}.default_operator must be either 'operator.and_' or 'operator.or_'.".format(
81+
cls=self.backend.__class__.__name__
82+
))
8883
self.default_operator = self.backend.default_operator
8984
self.default_same_param_operator = getattr(self.backend, "default_same_param_operator", self.default_operator)
9085

@@ -227,7 +222,7 @@ def parse_field_options(self, *options):
227222
"""
228223
defaults = {}
229224
for option in options:
230-
if isinstance(option, six.text_type):
225+
if isinstance(option, str):
231226
tokens = [token.strip() for token in option.split(self.view.lookup_sep)]
232227

233228
for token in tokens:
@@ -257,7 +252,7 @@ class SpatialQueryBuilder(BaseQueryBuilder):
257252
"""
258253

259254
def __init__(self, backend, view):
260-
super(SpatialQueryBuilder, self).__init__(backend, view)
255+
super().__init__(backend, view)
261256

262257
assert getattr(self.backend, "point_field", None) is not None, (
263258
"%(cls)s.point_field cannot be None. Set the %(cls)s.point_field "
@@ -293,9 +288,9 @@ def build_query(self, **filters):
293288

294289
applicable_filters = None
295290

296-
filters = dict((k, filters[k]) for k in chain(self.D.UNITS.keys(),
297-
[constants.DRF_HAYSTACK_SPATIAL_QUERY_PARAM]) if k in filters)
298-
distance = dict((k, v) for k, v in filters.items() if k in self.D.UNITS.keys())
291+
filters = {k: filters[k] for k in chain(self.D.UNITS.keys(),
292+
[constants.DRF_HAYSTACK_SPATIAL_QUERY_PARAM]) if k in filters}
293+
distance = {k: v for k, v in filters.items() if k in self.D.UNITS.keys()}
299294

300295
try:
301296
latitude, longitude = map(float, self.tokenize(filters[constants.DRF_HAYSTACK_SPATIAL_QUERY_PARAM],

drf_haystack/serializers.py

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
# -*- coding: utf-8 -*-
2-
3-
from __future__ import absolute_import, unicode_literals
4-
51
import copy
62
import six
73
import warnings
@@ -46,7 +42,7 @@ class Meta(type):
4642
index_aliases = {}
4743

4844
def __new__(mcs, name, bases, attrs):
49-
cls = super(Meta, mcs).__new__(mcs, str(name), bases, attrs)
45+
cls = super().__new__(mcs, str(name), bases, attrs)
5046

5147
if cls.fields and cls.exclude:
5248
raise ImproperlyConfigured("%s cannot define both 'fields' and 'exclude'." % name)
@@ -69,7 +65,7 @@ class HaystackSerializerMeta(serializers.SerializerMetaclass):
6965
def __new__(mcs, name, bases, attrs):
7066
attrs.setdefault("_abstract", False)
7167

72-
cls = super(HaystackSerializerMeta, mcs).__new__(mcs, str(name), bases, attrs)
68+
cls = super().__new__(mcs, str(name), bases, attrs)
7369

7470
if getattr(cls, "Meta", None):
7571
cls.Meta = Meta("Meta", (Meta,), dict(cls.Meta.__dict__))
@@ -80,7 +76,7 @@ def __new__(mcs, name, bases, attrs):
8076
return cls
8177

8278

83-
class HaystackSerializer(six.with_metaclass(HaystackSerializerMeta, serializers.Serializer)):
79+
class HaystackSerializer(serializers.Serializer, metaclass=HaystackSerializerMeta):
8480
"""
8581
A `HaystackSerializer` which populates fields based on
8682
which models that are available in the SearchQueryset.
@@ -111,7 +107,7 @@ class HaystackSerializer(six.with_metaclass(HaystackSerializerMeta, serializers.
111107
})
112108

113109
def __init__(self, instance=None, data=empty, **kwargs):
114-
super(HaystackSerializer, self).__init__(instance, data, **kwargs)
110+
super().__init__(instance, data, **kwargs)
115111

116112
if not self.Meta.index_classes and not self.Meta.serializers:
117113
raise ImproperlyConfigured("You must set either the 'index_classes' or 'serializers' "
@@ -183,9 +179,9 @@ def get_fields(self):
183179
prefix = ""
184180
if prefix_field_names:
185181
prefix = "_%s__" % self._get_index_class_name(index_cls)
186-
for field_name, field_type in six.iteritems(index_cls.fields):
182+
for field_name, field_type in index_cls.fields.items():
187183
orig_name = field_name
188-
field_name = "%s%s" % (prefix, field_name)
184+
field_name = f"{prefix}{field_name}"
189185

190186
# Don't use this field if it is in `ignore_fields`
191187
if orig_name in ignore_fields or field_name in ignore_fields:
@@ -223,7 +219,7 @@ def to_representation(self, instance):
223219
if self.Meta.serializers:
224220
ret = self.multi_serializer_representation(instance)
225221
else:
226-
ret = super(HaystackSerializer, self).to_representation(instance)
222+
ret = super().to_representation(instance)
227223
prefix_field_names = len(getattr(self.Meta, "index_classes")) > 1
228224
current_index = self._get_index_class_name(type(instance.searchindex))
229225
for field in self.fields.keys():
@@ -264,7 +260,7 @@ class FacetFieldSerializer(serializers.Serializer):
264260

265261
def __init__(self, *args, **kwargs):
266262
self._parent_field = None
267-
super(FacetFieldSerializer, self).__init__(*args, **kwargs)
263+
super().__init__(*args, **kwargs)
268264

269265
@property
270266
def parent_field(self):
@@ -317,7 +313,7 @@ def get_text(self, instance):
317313
The text field should contain the faceted value.
318314
"""
319315
instance = instance[0]
320-
if isinstance(instance, (six.text_type, six.string_types)):
316+
if isinstance(instance, (str, (str,))):
321317
return serializers.CharField(read_only=True).to_representation(instance)
322318
elif isinstance(instance, datetime):
323319
return serializers.DateTimeField(read_only=True).to_representation(instance)
@@ -346,10 +342,10 @@ def get_narrow_url(self, instance):
346342
del query_params[page_query_param]
347343

348344
selected_facets = set(query_params.pop(self.root.facet_query_params_text, []))
349-
selected_facets.add("%(field)s_exact:%(text)s" % {"field": self.parent_field, "text": text})
345+
selected_facets.add(f"{self.parent_field}_exact:{text}")
350346
query_params.setlist(self.root.facet_query_params_text, sorted(selected_facets))
351347

352-
path = "%(path)s?%(query)s" % {"path": request.path_info, "query": query_params.urlencode()}
348+
path = f"{request.path_info}?{query_params.urlencode()}"
353349
url = request.build_absolute_uri(path)
354350
return serializers.Hyperlink(url, "narrow-url")
355351

@@ -359,10 +355,10 @@ def to_representation(self, field, instance):
359355
so that each field can query it to see what kind of attribute they are processing.
360356
"""
361357
self.parent_field = field
362-
return super(FacetFieldSerializer, self).to_representation(instance)
358+
return super().to_representation(instance)
363359

364360

365-
class HaystackFacetSerializer(six.with_metaclass(HaystackSerializerMeta, serializers.Serializer)):
361+
class HaystackFacetSerializer(serializers.Serializer, metaclass=HaystackSerializerMeta):
366362
"""
367363
The ``HaystackFacetSerializer`` is used to serialize the ``facet_counts()``
368364
dictionary results on a ``SearchQuerySet`` instance.
@@ -426,7 +422,7 @@ def facet_query_params_text(self):
426422
return self.context["facet_query_params_text"]
427423

428424

429-
class HaystackSerializerMixin(object):
425+
class HaystackSerializerMixin:
430426
"""
431427
This mixin can be added to a serializer to use the actual object as the data source for serialization rather
432428
than the data stored in the search index fields. This makes it easy to return data from search results in
@@ -435,10 +431,10 @@ class HaystackSerializerMixin(object):
435431

436432
def to_representation(self, instance):
437433
obj = instance.object
438-
return super(HaystackSerializerMixin, self).to_representation(obj)
434+
return super().to_representation(obj)
439435

440436

441-
class HighlighterMixin(object):
437+
class HighlighterMixin:
442438
"""
443439
This mixin adds support for ``highlighting`` (the pure python, portable
444440
version, not SearchQuerySet().highlight()). See Haystack docs
@@ -474,11 +470,11 @@ def get_terms(self, data):
474470
"""
475471
Returns the terms to be highlighted
476472
"""
477-
terms = " ".join(six.itervalues(self.context["request"].GET))
473+
terms = " ".join(self.context["request"].GET.values())
478474
return terms
479475

480476
def to_representation(self, instance):
481-
ret = super(HighlighterMixin, self).to_representation(instance)
477+
ret = super().to_representation(instance)
482478
terms = self.get_terms(ret)
483479
if terms:
484480
highlighter = self.get_highlighter()(terms, **{

drf_haystack/utils.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
# -*- coding: utf-8 -*-
2-
3-
from __future__ import absolute_import, unicode_literals
4-
51
import six
62
from copy import deepcopy
73

@@ -20,7 +16,7 @@ def merge_dict(a, b):
2016
return b
2117

2218
result = deepcopy(a)
23-
for key, val in six.iteritems(b):
19+
for key, val in b.items():
2420
if key in result and isinstance(result[key], dict):
2521
result[key] = merge_dict(result[key], val)
2622
elif key in result and isinstance(result[key], list):

drf_haystack/viewsets.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
# -*- coding: utf-8 -*-
2-
3-
from __future__ import absolute_import, unicode_literals
4-
51
from rest_framework.mixins import ListModelMixin, RetrieveModelMixin
62
from rest_framework.viewsets import ViewSetMixin
73

0 commit comments

Comments
 (0)