From 08aa5c585b511cfaf97ced38f2b5f7fb96492203 Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Sat, 23 Jun 2007 03:18:22 +0000 Subject: [PATCH] Fixed #4607 -- Tweaked checks for features missing in Python 2.3 to not assume things Python does not guarantee. Patch from SmileyChris. git-svn-id: http://code.djangoproject.com/svn/django/trunk@5514 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/views/main.py | 8 ++++++-- django/contrib/auth/models.py | 10 +++++++--- django/core/management.py | 7 ++++--- django/db/models/fields/related.py | 7 ++++--- django/db/models/query.py | 7 ++++--- django/newforms/fields.py | 4 ++-- django/newforms/widgets.py | 5 +++-- django/template/defaulttags.py | 6 ++++-- 8 files changed, 34 insertions(+), 20 deletions(-) diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index 5edc1fc19d..e372b45439 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -14,6 +14,11 @@ from django.utils.html import escape from django.utils.text import capfirst, get_text_list import operator +try: + set +except NameError: + from sets import Set as set # Python 2.3 fallback + from django.contrib.admin.models import LogEntry, ADDITION, CHANGE, DELETION if not LogEntry._meta.installed: raise ImproperlyConfigured, "You'll need to put 'django.contrib.admin' in your INSTALLED_APPS setting before you can use the admin application." @@ -489,7 +494,6 @@ def _get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current perms_needed.add(related.opts.verbose_name) def delete_stage(request, app_label, model_name, object_id): - import sets model = models.get_model(app_label, model_name) object_id = unquote(object_id) if model is None: @@ -502,7 +506,7 @@ def delete_stage(request, app_label, model_name, object_id): # Populate deleted_objects, a data structure of all related objects that # will also be deleted. deleted_objects = ['%s: %s' % (capfirst(opts.verbose_name), object_id, escape(str(obj))), []] - perms_needed = sets.Set() + perms_needed = set() _get_deleted_objects(deleted_objects, perms_needed, request.user, obj, opts, 1) if request.POST: # The user has already confirmed the deletion. diff --git a/django/contrib/auth/models.py b/django/contrib/auth/models.py index 9ebef0f524..1552074a2d 100644 --- a/django/contrib/auth/models.py +++ b/django/contrib/auth/models.py @@ -5,6 +5,11 @@ from django.contrib.contenttypes.models import ContentType from django.utils.translation import gettext_lazy as _ import datetime +try: + set +except NameError: + from sets import Set as set # Python 2.3 fallback + def check_password(raw_password, enc_password): """ Returns a boolean of whether the raw_password was correct. Handles @@ -175,7 +180,6 @@ class User(models.Model): def get_group_permissions(self): "Returns a list of permission strings that this user has through his/her groups." if not hasattr(self, '_group_perm_cache'): - import sets cursor = connection.cursor() # The SQL below works out to the following, after DB quoting: # cursor.execute(""" @@ -200,13 +204,13 @@ class User(models.Model): backend.quote_name('id'), backend.quote_name('content_type_id'), backend.quote_name('user_id'),) cursor.execute(sql, [self.id]) - self._group_perm_cache = sets.Set(["%s.%s" % (row[0], row[1]) for row in cursor.fetchall()]) + self._group_perm_cache = set(["%s.%s" % (row[0], row[1]) for row in cursor.fetchall()]) return self._group_perm_cache def get_all_permissions(self): if not hasattr(self, '_perm_cache'): import sets - self._perm_cache = sets.Set(["%s.%s" % (p.content_type.app_label, p.codename) for p in self.user_permissions.select_related()]) + self._perm_cache = set(["%s.%s" % (p.content_type.app_label, p.codename) for p in self.user_permissions.select_related()]) self._perm_cache.update(self.get_group_permissions()) return self._perm_cache diff --git a/django/core/management.py b/django/core/management.py index 213eb4602c..d8bf8ea00b 100644 --- a/django/core/management.py +++ b/django/core/management.py @@ -7,9 +7,10 @@ from optparse import OptionParser from django.utils import termcolors import os, re, shutil, sys, textwrap -# For Python 2.3 -if not hasattr(__builtins__, 'set'): - from sets import Set as set +try: + set +except NameError: + from sets import Set as set # Python 2.3 fallback # For backwards compatibility: get_version() used to be in this module. get_version = django.get_version diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index 0739d0461a..e514b3f854 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -10,9 +10,10 @@ from django import oldforms from django import newforms as forms from django.dispatch import dispatcher -# For Python 2.3 -if not hasattr(__builtins__, 'set'): - from sets import Set as set +try: + set +except NameError: + from sets import Set as set # Python 2.3 fallback # Values for Relation.edit_inline. TABULAR, STACKED = 1, 2 diff --git a/django/db/models/query.py b/django/db/models/query.py index a6e702be18..8a43b1c90f 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -7,9 +7,10 @@ from django.contrib.contenttypes import generic import operator import re -# For Python 2.3 -if not hasattr(__builtins__, 'set'): - from sets import Set as set +try: + set +except NameError: + from sets import Set as set # Python 2.3 fallback # The string constant used to separate query parts LOOKUP_SEPARATOR = '__' diff --git a/django/newforms/fields.py b/django/newforms/fields.py index b73dd181e6..471318e95f 100644 --- a/django/newforms/fields.py +++ b/django/newforms/fields.py @@ -27,9 +27,9 @@ __all__ = ( EMPTY_VALUES = (None, '') try: - set # Only available in Python 2.4+ + set except NameError: - from sets import Set as set # Python 2.3 fallback + from sets import Set as set # Python 2.3 fallback try: from decimal import Decimal diff --git a/django/newforms/widgets.py b/django/newforms/widgets.py index 6ee3177a25..b0c9a70f57 100644 --- a/django/newforms/widgets.py +++ b/django/newforms/widgets.py @@ -3,9 +3,10 @@ HTML Widget classes """ try: - set # Only available in Python 2.4+ + set except NameError: - from sets import Set as set # Python 2.3 fallback + from sets import Set as set # Python 2.3 fallback + from itertools import chain from django.utils.datastructures import MultiValueDict diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index 0e26af0cac..66443fc3b3 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -8,8 +8,10 @@ from django.utils.itercompat import groupby import sys import re -if not hasattr(__builtins__, 'reversed'): - # For Python 2.3. +try: + reversed +except NameError: + # Python 2.3 fallback. # From http://www.python.org/doc/current/tut/node11.html def reversed(data): for index in xrange(len(data)-1, -1, -1):