diff --git a/tests/test_watson/models.py b/tests/test_watson/models.py index 9e7ba5b..b56fc80 100644 --- a/tests/test_watson/models.py +++ b/tests/test_watson/models.py @@ -1,6 +1,6 @@ import uuid from django.db import models -from django.utils.encoding import force_text +from django.utils.encoding import force_str class TestModelBase(models.Model): @@ -21,7 +21,7 @@ class TestModelBase(models.Model): ) def __str__(self): - return force_text(self.title) + return force_str(self.title) class Meta: abstract = True diff --git a/tests/test_watson/tests.py b/tests/test_watson/tests.py index dd82787..6d45704 100644 --- a/tests/test_watson/tests.py +++ b/tests/test_watson/tests.py @@ -22,7 +22,7 @@ from django.core.management import call_command from django.conf import settings from django.contrib.auth.models import User from django import template -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.db.models import Case, When, Value, IntegerField from watson import search as watson @@ -708,7 +708,7 @@ class SiteSearchTest(SearchTestBase): # Test a search that should find everything. response = self.client.get("/simple/json/?q=title") self.assertEqual(response["Content-Type"], "application/json; charset=utf-8") - results = set(result["title"] for result in json.loads(force_text(response.content))["results"]) + results = set(result["title"] for result in json.loads(force_str(response.content))["results"]) self.assertEqual(len(results), 6) self.assertTrue("title model1 instance11" in results) self.assertTrue("title model1 instance12" in results) @@ -753,7 +753,7 @@ class SiteSearchTest(SearchTestBase): # Test a search that should find everything. response = self.client.get("/custom/json/?fooo=title&page=last") self.assertEqual(response["Content-Type"], "application/json; charset=utf-8") - results = set(result["title"] for result in json.loads(force_text(response.content))["results"]) + results = set(result["title"] for result in json.loads(force_str(response.content))["results"]) self.assertEqual(len(results), 6) self.assertTrue("title model1 instance11" in results) self.assertTrue("title model1 instance12" in results) diff --git a/watson/backends.py b/watson/backends.py index 07b2504..d08d46a 100644 --- a/watson/backends.py +++ b/watson/backends.py @@ -10,7 +10,7 @@ from django.contrib.contenttypes.models import ContentType from django.db import transaction, connections, router from django.db.models import Q, FloatField from django.db.models.expressions import RawSQL, Value -from django.utils.encoding import force_text +from django.utils.encoding import force_str from watson.models import SearchEntry, has_int_pk @@ -35,7 +35,7 @@ def escape_query(text, re_escape_chars): normalizes the query text to a format that can be consumed by the backend database """ - text = force_text(text) + text = force_str(text) text = RE_SPACE.sub(" ", text) # Standardize spacing. text = re_escape_chars.sub(" ", text) # Replace harmful characters with space. text = text.strip() diff --git a/watson/management/commands/buildwatson.py b/watson/management/commands/buildwatson.py index 6eb3292..895abf9 100644 --- a/watson/management/commands/buildwatson.py +++ b/watson/management/commands/buildwatson.py @@ -7,7 +7,7 @@ from django.apps import apps from django.contrib import admin from django.contrib.contenttypes.models import ContentType from django.db import transaction -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.translation import activate from django.conf import settings @@ -26,7 +26,7 @@ def get_engine(engine_slug_): try: return [x[1] for x in SearchEngine.get_created_engines() if x[0] == engine_slug_][0] except IndexError: - raise CommandError("Search Engine \"%s\" is not registered!" % force_text(engine_slug_)) + raise CommandError("Search Engine \"%s\" is not registered!" % force_str(engine_slug_)) def rebuild_index_for_model(model_, engine_slug_, verbosity_, slim_=False, batch_size_=100, non_atomic_=False): @@ -51,18 +51,18 @@ def rebuild_index_for_model(model_, engine_slug_, verbosity_, slim_=False, batch print( "Refreshed search entry for {model} {obj} " "in {engine_slug!r} search engine.".format( - model=force_text(model_._meta.verbose_name), - obj=force_text(obj), - engine_slug=force_text(engine_slug_), + model=force_str(model_._meta.verbose_name), + obj=force_str(obj), + engine_slug=force_str(engine_slug_), ) ) if verbosity_ == 2: print( "Refreshed {local_refreshed_model_count} {model} search entry(s) " "in {engine_slug!r} search engine.".format( - model=force_text(model_._meta.verbose_name), + model=force_str(model_._meta.verbose_name), local_refreshed_model_count=local_refreshed_model_count[0], - engine_slug=force_text(engine_slug_), + engine_slug=force_str(engine_slug_), ) ) if non_atomic_: @@ -150,7 +150,7 @@ class Command(BaseCommand): if model is None or not search_engine.is_registered(model): raise CommandError( "Model \"%s\" is not registered with django-watson search engine \"%s\"!" - % (force_text(model_name), force_text(engine_slug)) + % (force_str(model_name), force_str(engine_slug)) ) models.append(model) @@ -173,7 +173,7 @@ class Command(BaseCommand): engine_slugs = [engine_slug] if verbosity >= 2: # let user know the search engine if they selected one - print("Rebuilding models registered with search engine \"%s\"" % force_text(engine_slug)) + print("Rebuilding models registered with search engine \"%s\"" % force_str(engine_slug)) else: # loop through all engines engine_slugs = [x[0] for x in SearchEngine.get_created_engines()] @@ -206,7 +206,7 @@ class Command(BaseCommand): "Deleted {stale_entry_count} stale search entry(s) " "in {engine_slug!r} search engine.".format( stale_entry_count=stale_entry_count, - engine_slug=force_text(engine_slug), + engine_slug=force_str(engine_slug), ) ) @@ -215,6 +215,6 @@ class Command(BaseCommand): "Refreshed {refreshed_model_count} search entry(s) " "in {engine_slug!r} search engine.".format( refreshed_model_count=refreshed_model_count, - engine_slug=force_text(engine_slug), + engine_slug=force_str(engine_slug), ) ) diff --git a/watson/models.py b/watson/models.py index db881bb..89962cf 100644 --- a/watson/models.py +++ b/watson/models.py @@ -6,7 +6,7 @@ import uuid from django.db import models from django.contrib.contenttypes.models import ContentType -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.functional import cached_property try: @@ -36,7 +36,7 @@ def has_int_pk(model): def get_str_pk(obj, connection): - return obj.pk.hex if isinstance(obj.pk, uuid.UUID) and connection.vendor != "postgresql" else force_text(obj.pk) + return obj.pk.hex if isinstance(obj.pk, uuid.UUID) and connection.vendor != "postgresql" else force_str(obj.pk) META_CACHE_KEY = "_meta_cache" diff --git a/watson/search.py b/watson/search.py index ce222ab..41d3584 100644 --- a/watson/search.py +++ b/watson/search.py @@ -17,7 +17,7 @@ from django.db.models import Q from django.db.models.expressions import RawSQL from django.db.models.query import QuerySet from django.db.models.signals import post_save, pre_delete -from django.utils.encoding import force_text +from django.utils.encoding import force_str from django.utils.html import strip_tags from django.core.serializers.json import DjangoJSONEncoder try: @@ -86,11 +86,11 @@ class SearchAdapter(object): # Look up recursive fields. if len(name_parts) == 2: if isinstance(value, (QuerySet, models.Manager)): - return " ".join(force_text(self._resolve_field(obj, name_parts[1])) for obj in value.all()) + return " ".join(force_str(self._resolve_field(obj, name_parts[1])) for obj in value.all()) return self._resolve_field(value, name_parts[1]) # Resolve querysets. if isinstance(value, (QuerySet, models.Manager)): - value = " ".join(force_text(related) for related in value.all()) + value = " ".join(force_str(related) for related in value.all()) # Resolution complete! return value @@ -107,9 +107,9 @@ class SearchAdapter(object): You can access the title of the search entry as `entry.title` in your search results. - The default implementation returns `force_text(obj)` truncated to 1000 characters. + The default implementation returns `force_str(obj)` truncated to 1000 characters. """ - return force_text(obj)[:1000] + return force_str(obj)[:1000] def get_description(self, obj): """ @@ -144,7 +144,7 @@ class SearchAdapter(object): field_names = (field_name for field_name in field_names if field_name not in self.exclude) # Create the text. return self.prepare_content(" ".join( - force_text(self._resolve_field(obj, field_name)) + force_str(self._resolve_field(obj, field_name)) for field_name in field_names ))