Skip to content

Commit

Permalink
feat: Clean up deprecated code for django-4
Browse files Browse the repository at this point in the history
- Replaced force_text with force_str
- Removed old case for django-1.3 in mongo_admin/views

Refs #156
  • Loading branch information
dqfort authored Feb 2, 2022
1 parent 36a4966 commit c82cbc6
Show file tree
Hide file tree
Showing 10 changed files with 48 additions and 84 deletions.
4 changes: 2 additions & 2 deletions django_mongoengine/forms/document_options.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from django.core.exceptions import FieldDoesNotExist
from django.utils.text import capfirst
from django.utils.encoding import smart_text
from django.utils.encoding import smart_str
from django.db.models.options import Options

try:
Expand Down Expand Up @@ -39,7 +39,7 @@ def value_to_string(self, obj):
Returns a string value of this field from the passed obj.
This is used by the serialization framework.
"""
return smart_text(obj.pk)
return smart_str(obj.pk)

def get_internal_type(self):
return "CharField"
Expand Down
16 changes: 8 additions & 8 deletions django_mongoengine/mongo_admin/actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
from django.contrib.admin.utils import get_deleted_objects, model_ngettext
from django.db import router
from django.shortcuts import render_to_response
from django.utils.translation import ugettext_lazy, ugettext as _
from django.utils.translation import gettext_lazy, gettext as _
from django.db import models

from django.contrib.admin.actions import delete_selected as django_delete_selected

from django_mongoengine.utils import force_text
from django_mongoengine.utils import force_str


def delete_selected(modeladmin, request, queryset):
Expand Down Expand Up @@ -53,13 +53,13 @@ def _delete_selected(modeladmin, request, queryset):
n = len(queryset)
if n:
for obj in queryset:
obj_display = force_text(obj)
obj_display = force_str(obj)
modeladmin.log_deletion(request, obj, obj_display)
# call the objects delete method to ensure signals are
# processed.
obj.delete()
# This is what you get if you have to monkey patch every object in a changelist
# No queryset object, I can tell ya. So we get a new one and delete that.
# No queryset object, I can tell ya. So we get a new one and delete that.
#pk_list = [o.pk for o in queryset]
#klass = queryset[0].__class__
#qs = klass.objects.filter(pk__in=pk_list)
Expand All @@ -71,9 +71,9 @@ def _delete_selected(modeladmin, request, queryset):
return None

if len(queryset) == 1:
objects_name = force_text(opts.verbose_name)
objects_name = force_str(opts.verbose_name)
else:
objects_name = force_text(opts.verbose_name_plural)
objects_name = force_str(opts.verbose_name_plural)

if perms_needed or protected:
title = _("Cannot delete %(name)s") % {"name": objects_name}
Expand All @@ -92,12 +92,12 @@ def _delete_selected(modeladmin, request, queryset):
"app_label": app_label,
'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
}

# Display the confirmation page
return render_to_response(modeladmin.delete_selected_confirmation_template or [
"admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.object_name.lower()),
"admin/%s/delete_selected_confirmation.html" % app_label,
"admin/delete_selected_confirmation.html"
], context, context_instance=template.RequestContext(request))

delete_selected.short_description = ugettext_lazy("Delete selected %(verbose_name_plural)s")
delete_selected.short_description = gettext_lazy("Delete selected %(verbose_name_plural)s")
2 changes: 1 addition & 1 deletion django_mongoengine/mongo_admin/apps.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.apps import AppConfig
from django.core import checks
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import gettext_lazy as _

def check_admin_app(**kwargs):
from .sites import system_check_errors
Expand Down
4 changes: 2 additions & 2 deletions django_mongoengine/mongo_admin/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from django.contrib.admin.helpers import AdminField
from django.core.exceptions import ObjectDoesNotExist

from django.utils.encoding import smart_text
from django.utils.encoding import smart_str
from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe

Expand Down Expand Up @@ -86,7 +86,7 @@ def contents(self):
if boolean:
result_repr = _boolean_icon(value)
else:
result_repr = smart_text(value)
result_repr = smart_str(value)
if getattr(attr, "allow_tags", False):
result_repr = mark_safe(result_repr)
else:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from django_mongoengine.sessions import DEFAULT_CONNECTION_NAME
from django.core import exceptions
from django.core.management.base import BaseCommand, CommandError
from django.utils.translation import ugettext as _
from django.utils.translation import gettext as _

get_default_username = lambda: "admin"

Expand Down
20 changes: 10 additions & 10 deletions django_mongoengine/mongo_admin/options.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@
from django.http import Http404
from django.template.response import TemplateResponse
from django.utils.text import capfirst
from django.utils.translation import ugettext as _
from django.utils.translation import gettext as _
from django.forms.utils import pretty_name
from django.forms.models import modelform_defines_fields
from django.conf import settings
from django.apps import apps

from django_mongoengine.utils import force_text
from django_mongoengine.utils import force_str
from django_mongoengine.fields import (ListField, EmbeddedDocumentField,
ReferenceField, StringField)

Expand Down Expand Up @@ -301,7 +301,7 @@ def changeform_view(self, request, object_id=None, form_url='', extra_context=No

if obj is None:
raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {
'name': force_text(opts.verbose_name), 'key': escape(object_id)})
'name': force_str(opts.verbose_name), 'key': escape(object_id)})

ModelForm = self.get_form(request, obj)
if request.method == 'POST':
Expand Down Expand Up @@ -348,7 +348,7 @@ def changeform_view(self, request, object_id=None, form_url='', extra_context=No

context = dict(
self.admin_site.each_context(request),
title=(_('Add %s') if add else _('Change %s')) % force_text(opts.verbose_name),
title=(_('Add %s') if add else _('Change %s')) % force_str(opts.verbose_name),
adminform=adminForm,
object_id=object_id,
original=obj,
Expand Down Expand Up @@ -391,7 +391,7 @@ def delete_view(self, request, object_id, extra_context=None):
if obj is None:
raise Http404(
_('%(name)s object with primary key %(key)r does not exist.') %
{'name': force_text(opts.verbose_name), 'key': escape(object_id)}
{'name': force_str(opts.verbose_name), 'key': escape(object_id)}
)

# Populate deleted_objects, a data structure of all related objects that
Expand All @@ -402,15 +402,15 @@ def delete_view(self, request, object_id, extra_context=None):
if request.POST: # The user has already confirmed the deletion.
if perms_needed:
raise PermissionDenied
obj_display = force_text(obj)
obj_display = force_str(obj)
attr = str(to_field) if to_field else opts.pk.attname
obj_id = obj.serializable_value(attr)
self.log_deletion(request, obj, obj_display)
self.delete_model(request, obj)

return self.response_delete(request, obj_display, obj_id)

object_name = force_text(opts.verbose_name)
object_name = force_str(opts.verbose_name)

if perms_needed or protected:
title = _("Cannot delete %(name)s") % {"name": object_name}
Expand Down Expand Up @@ -445,7 +445,7 @@ def history_view(self, request, object_id, extra_context=None):
obj = self.get_object(request, unquote(object_id))
if obj is None:
raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {
'name': force_text(model._meta.verbose_name),
'name': force_str(model._meta.verbose_name),
'key': escape(object_id),
})

Expand All @@ -462,9 +462,9 @@ def history_view(self, request, object_id, extra_context=None):

context = dict(
self.admin_site.each_context(request),
title=_('Change history: %s') % force_text(obj),
title=_('Change history: %s') % force_str(obj),
action_list=action_list,
module_name=capfirst(force_text(opts.verbose_name_plural)),
module_name=capfirst(force_str(opts.verbose_name_plural)),
object=obj,
opts=opts,
preserved_filters=self.get_preserved_filters(request),
Expand Down
10 changes: 5 additions & 5 deletions django_mongoengine/mongo_admin/util.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from django.utils.encoding import smart_text, smart_str
from django.utils.encoding import smart_str
from django.forms.utils import pretty_name
from django.core.exceptions import FieldDoesNotExist
from django.utils import formats

from mongoengine import fields

from django_mongoengine.utils import force_text
from django_mongoengine.utils import force_str


class RelationWrapper(object):
Expand All @@ -24,7 +24,7 @@ def label_for_field(name, model, model_admin=None, return_attr=False):
label = field.name.replace('_', ' ')
except FieldDoesNotExist:
if name == "__unicode__":
label = force_text(model._meta.verbose_name)
label = force_str(model._meta.verbose_name)
elif name == "__str__":
label = smart_str(model._meta.verbose_name)
else:
Expand Down Expand Up @@ -74,12 +74,12 @@ def display_for_field(value, field):
elif isinstance(field, fields.FloatField):
return formats.number_format(value)
else:
return smart_text(value)
return smart_str(value)


def help_text_for_field(name, model):
try:
help_text = model._meta.get_field_by_name(name)[0].help_text
except FieldDoesNotExist:
help_text = ""
return smart_text(help_text, strings_only=True)
return smart_str(help_text, strings_only=True)
61 changes: 15 additions & 46 deletions django_mongoengine/mongo_admin/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@

from django.core.exceptions import SuspiciousOperation, ImproperlyConfigured
from django.contrib.admin.views.main import (
ChangeList, ORDER_VAR, ALL_VAR, ORDER_TYPE_VAR, SEARCH_VAR, IS_POPUP_VAR,
TO_FIELD_VAR)
ChangeList, ORDER_VAR)
from django.contrib.admin.options import IncorrectLookupParameters
from django.core.paginator import InvalidPage
from django.utils.encoding import smart_str

from mongoengine import Q
from functools import reduce
Expand Down Expand Up @@ -122,38 +120,6 @@ def get_ordering(self, request=None, queryset=None):
ordering.append('pk')
return ordering

def _lookup_param_1_3(self):
lookup_params = self.params.copy() # a dictionary of the query string
for i in (ALL_VAR, ORDER_VAR, ORDER_TYPE_VAR, SEARCH_VAR,
IS_POPUP_VAR, TO_FIELD_VAR):
if i in lookup_params:
del lookup_params[i]
for key, value in lookup_params.items():
if not isinstance(key, str):
# 'key' will be used as a keyword argument later, so Python
# requires it to be a string.
del lookup_params[key]
lookup_params[smart_str(key)] = value

# if key ends with __in, split parameter into separate values
if key.endswith('__in'):
value = value.split(',')
lookup_params[key] = value

# if key ends with __isnull, special case '' and false
if key.endswith('__isnull'):
if value.lower() in ('', 'false'):
value = False
else:
value = True
lookup_params[key] = value

if not self.model_admin.lookup_allowed(key, value):
raise SuspiciousOperation(
"Filtering by %s not allowed" % key
)
return lookup_params

def get_queryset(self, request=None):
# root_query_set has been changed to root_queryset
try:
Expand All @@ -163,18 +129,21 @@ def get_queryset(self, request=None):
# First, we collect all the declared list filters.
qs = self.root_query_set.clone()

try:
filter_values = self.get_filters(request)
if len(filter_values) == 4: # for Django 2
(self.filter_specs, self.has_filters, remaining_lookup_params,
use_distinct) = filter_values
else: # for Django >2
(self.filter_specs, self.has_filters, remaining_lookup_params,
use_distinct) = self.get_filters(request)

# Then, we let every list filter modify the queryset to its liking.
for filter_spec in self.filter_specs:
new_qs = filter_spec.queryset(request, qs)
if new_qs is not None:
qs = new_qs
except ValueError:
# Django < 1.4.
remaining_lookup_params = self._lookup_param_1_3()
use_distinct, has_active_filters) = filter_values


# Then, we let every list filter modify the queryset to its liking.
for filter_spec in self.filter_specs:
new_qs = filter_spec.queryset(request, qs)
if new_qs is not None:
qs = new_qs


try:
# Finally, we apply the remaining lookup parameters from the query
Expand Down
6 changes: 3 additions & 3 deletions django_mongoengine/sessions.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from mongoengine.queryset import OperationError
from mongoengine.connection import DEFAULT_CONNECTION_NAME

from .utils import datetime_now, force_text
from .utils import datetime_now, force_str


MONGOENGINE_SESSION_DB_ALIAS = getattr(
Expand Down Expand Up @@ -59,14 +59,14 @@ def load(self):
s = MongoSession.objects(session_key=self.session_key,
expire_date__gt=datetime_now)[0]
if MONGOENGINE_SESSION_DATA_ENCODE:
return self.decode(force_text(s.session_data))
return self.decode(force_str(s.session_data))
else:
return s.session_data
except (IndexError, SuspiciousOperation) as e:
if isinstance(e, SuspiciousOperation):
logger = logging.getLogger('django.security.%s' %
e.__class__.__name__)
logger.warning(force_text(e))
logger.warning(force_str(e))
self._session_key = None
return {}

Expand Down
7 changes: 1 addition & 6 deletions django_mongoengine/utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,7 @@
from datetime import datetime
datetime_now = datetime.now

try:
# python3 and new django versions
from django.utils.encoding import force_text
except ImportError:
# some very old django versions
from django.utils.encoding import force_unicode as force_text
from django.utils.encoding import force_str

try:
from django.db.models.utils import resolve_callables
Expand Down

0 comments on commit c82cbc6

Please sign in to comment.