Fixed #12164 -- Removed the Python 2.3 compatibility imports and workarounds. Thanks to timo and claudep for the patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@13094 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Russell Keith-Magee 2010-05-04 14:00:30 +00:00
parent 7202eb8e31
commit 5211f48ae3
59 changed files with 32 additions and 3399 deletions

View File

@ -12,10 +12,6 @@ from django.utils.html import escape
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.text import capfirst from django.utils.text import capfirst
from django.utils.translation import ugettext_lazy, ugettext as _ from django.utils.translation import ugettext_lazy, ugettext as _
try:
set
except NameError:
from sets import Set as set # Python 2.3 fallback
def delete_selected(modeladmin, request, queryset): def delete_selected(modeladmin, request, queryset):
""" """

View File

@ -23,10 +23,6 @@ from django.utils.text import capfirst, get_text_list
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.utils.translation import ungettext, ugettext_lazy from django.utils.translation import ungettext, ugettext_lazy
from django.utils.encoding import force_unicode from django.utils.encoding import force_unicode
try:
set
except NameError:
from sets import Set as set # Python 2.3 fallback
HORIZONTAL, VERTICAL = 1, 2 HORIZONTAL, VERTICAL = 1, 2
# returns the <ul> class for a given radio_admin field # returns the <ul> class for a given radio_admin field

View File

@ -14,10 +14,6 @@ from django.utils.text import capfirst
from django.utils.translation import ugettext_lazy, ugettext as _ from django.utils.translation import ugettext_lazy, ugettext as _
from django.views.decorators.cache import never_cache from django.views.decorators.cache import never_cache
from django.conf import settings from django.conf import settings
try:
set
except NameError:
from sets import Set as set # Python 2.3 fallback
ERROR_MESSAGE = ugettext_lazy("Please enter a correct username and password. Note that both fields are case-sensitive.") ERROR_MESSAGE = ugettext_lazy("Please enter a correct username and password. Note that both fields are case-sensitive.")
LOGIN_FORM_KEY = 'this_is_the_login_form' LOGIN_FORM_KEY = 'this_is_the_login_form'

View File

@ -2,7 +2,7 @@ import base64
try: try:
from functools import wraps from functools import wraps
except ImportError: except ImportError:
from django.utils.functional import wraps # Python 2.3, 2.4 fallback. from django.utils.functional import wraps # Python 2.4 fallback.
from django import http, template from django import http, template
from django.conf import settings from django.conf import settings

View File

@ -9,11 +9,6 @@ from django.utils.translation import ugettext
from django.utils.http import urlencode from django.utils.http import urlencode
import operator import operator
try:
set
except NameError:
from sets import Set as set # Python 2.3 fallback
# The system will display a "Show all" link on the change list only if the # The system will display a "Show all" link on the change list only if the
# total result count is less than or equal to this setting. # total result count is less than or equal to this setting.
MAX_SHOW_ALL_ALLOWED = 200 MAX_SHOW_ALL_ALLOWED = 200

View File

@ -1,8 +1,3 @@
try:
set
except NameError:
from sets import Set as set # Python 2.3 fallback
from django.db import connection from django.db import connection
from django.contrib.auth.models import User, Permission from django.contrib.auth.models import User, Permission

View File

@ -1,7 +1,7 @@
try: try:
from functools import update_wrapper, wraps from functools import update_wrapper, wraps
except ImportError: except ImportError:
from django.utils.functional import update_wrapper, wraps # Python 2.3, 2.4 fallback. from django.utils.functional import update_wrapper, wraps # Python 2.4 fallback.
from django.contrib.auth import REDIRECT_FIELD_NAME from django.contrib.auth import REDIRECT_FIELD_NAME
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect

View File

@ -32,7 +32,7 @@ def security_hash(request, form, *args):
data.append(settings.SECRET_KEY) data.append(settings.SECRET_KEY)
# Use HIGHEST_PROTOCOL because it's the most efficient. It requires # Use HIGHEST_PROTOCOL because it's the most efficient. It requires
# Python 2.3, but Django requires 2.3 anyway, so that's OK. # Python 2.3, but Django requires 2.4 anyway, so that's OK.
pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL) pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL)
return md5_constructor(pickled).hexdigest() return md5_constructor(pickled).hexdigest()

View File

@ -10,11 +10,6 @@ from django.utils.encoding import smart_unicode
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
import re import re
try:
set
except NameError:
from sets import Set as set # For Python 2.3
phone_digits_re = re.compile(r'^(\d{2})[-\.]?(\d{4})[-\.]?(\d{4})$') phone_digits_re = re.compile(r'^(\d{2})[-\.]?(\d{4})[-\.]?(\d{4})$')
class BRZipCodeField(RegexField): class BRZipCodeField(RegexField):

View File

@ -1,11 +1,6 @@
from django.contrib.messages.storage.base import BaseStorage from django.contrib.messages.storage.base import BaseStorage
from django.contrib.messages.storage.cookie import CookieStorage from django.contrib.messages.storage.cookie import CookieStorage
from django.contrib.messages.storage.session import SessionStorage from django.contrib.messages.storage.session import SessionStorage
try:
set
except NameError:
from sets import Set as set # Python 2.3
class FallbackStorage(BaseStorage): class FallbackStorage(BaseStorage):
""" """

View File

@ -77,7 +77,7 @@ class CacheClass(BaseCache):
def set(self, key, value, timeout=None): def set(self, key, value, timeout=None):
self._lock.writer_enters() self._lock.writer_enters()
# Python 2.3 and 2.4 don't allow combined try-except-finally blocks. # Python 2.4 doesn't allow combined try-except-finally blocks.
try: try:
try: try:
self._set(key, pickle.dumps(value), timeout) self._set(key, pickle.dumps(value), timeout)

View File

@ -13,11 +13,6 @@ from django.core.exceptions import ImproperlyConfigured
from django.core.management.color import color_style from django.core.management.color import color_style
from django.utils.encoding import smart_str from django.utils.encoding import smart_str
try:
set
except NameError:
from sets import Set as set # For Python 2.3
class CommandError(Exception): class CommandError(Exception):
""" """
Exception class indicating a problem while executing a management Exception class indicating a problem while executing a management

View File

@ -9,11 +9,6 @@ from django.db import models
from django.db.models import get_models from django.db.models import get_models
from django.db.backends.util import truncate_name from django.db.backends.util import truncate_name
try:
set
except NameError:
from sets import Set as set # Python 2.3 fallback
def sql_create(app, style, connection): def sql_create(app, style, connection):
"Returns a list of the CREATE TABLE SQL statements for the given app." "Returns a list of the CREATE TABLE SQL statements for the given app."

View File

@ -3,6 +3,7 @@ Serialize data to/from JSON
""" """
import datetime import datetime
import decimal
from StringIO import StringIO from StringIO import StringIO
from django.core.serializers.python import Serializer as PythonSerializer from django.core.serializers.python import Serializer as PythonSerializer
@ -10,11 +11,6 @@ from django.core.serializers.python import Deserializer as PythonDeserializer
from django.utils import datetime_safe from django.utils import datetime_safe
from django.utils import simplejson from django.utils import simplejson
try:
import decimal
except ImportError:
from django.utils import _decimal as decimal # Python 2.3 fallback
class Serializer(PythonSerializer): class Serializer(PythonSerializer):
""" """
Convert a queryset to JSON. Convert a queryset to JSON.

View File

@ -19,12 +19,6 @@ from django.utils.importlib import import_module
from django.utils.regex_helper import normalize from django.utils.regex_helper import normalize
from django.utils.thread_support import currentThread from django.utils.thread_support import currentThread
try:
reversed
except NameError:
from django.utils.itercompat import reversed # Python 2.3 fallback
from sets import Set as set
_resolver_cache = {} # Maps URLconf modules to RegexURLResolver instances. _resolver_cache = {} # Maps URLconf modules to RegexURLResolver instances.
_callable_cache = {} # Maps view and url pattern names to their view functions. _callable_cache = {} # Maps view and url pattern names to their view functions.

View File

@ -1,10 +1,5 @@
import sys import sys
import time import time
try:
set
except NameError:
# Python 2.3 compat
from sets import Set as set
from django.conf import settings from django.conf import settings
from django.core.management import call_command from django.core.management import call_command

View File

@ -9,10 +9,7 @@ import datetime
import os import os
import sys import sys
import time import time
try: from decimal import Decimal
from decimal import Decimal
except ImportError:
from django.utils._decimal import Decimal
# Oracle takes client-side character set encoding from the environment. # Oracle takes client-side character set encoding from the environment.
os.environ['NLS_LANG'] = '.UTF8' os.environ['NLS_LANG'] = '.UTF8'

View File

@ -1,7 +1,7 @@
""" """
SQLite3 backend for django. SQLite3 backend for django.
Python 2.3 and 2.4 require pysqlite2 (http://pysqlite.org/). Python 2.4 requires pysqlite2 (http://pysqlite.org/).
Python 2.5 and later can use a pysqlite2 module or the sqlite3 module in the Python 2.5 and later can use a pysqlite2 module or the sqlite3 module in the
standard library. standard library.

View File

@ -1,13 +1,9 @@
import datetime import datetime
import decimal
from time import time from time import time
from django.utils.hashcompat import md5_constructor from django.utils.hashcompat import md5_constructor
try:
import decimal
except ImportError:
from django.utils import _decimal as decimal # for Python 2.3
class CursorDebugWrapper(object): class CursorDebugWrapper(object):
def __init__(self, cursor, db): def __init__(self, cursor, db):
self.cursor = cursor self.cursor = cursor

View File

@ -3,6 +3,7 @@ import decimal
import re import re
import time import time
import math import math
from itertools import tee
import django.utils.copycompat as copy import django.utils.copycompat as copy
@ -14,7 +15,6 @@ from django import forms
from django.core import exceptions, validators from django.core import exceptions, validators
from django.utils.datastructures import DictWrapper from django.utils.datastructures import DictWrapper
from django.utils.functional import curry from django.utils.functional import curry
from django.utils.itercompat import tee
from django.utils.text import capfirst from django.utils.text import capfirst
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.encoding import smart_unicode, force_unicode, smart_str from django.utils.encoding import smart_unicode, force_unicode, smart_str

View File

@ -1,9 +1,5 @@
import re import re
from bisect import bisect from bisect import bisect
try:
set
except NameError:
from sets import Set as set # Python 2.3 fallback
from django.conf import settings from django.conf import settings
from django.db.models.related import RelatedObject from django.db.models.related import RelatedObject

View File

@ -19,7 +19,7 @@ except ImportError:
try: try:
from functools import wraps from functools import wraps
except ImportError: except ImportError:
from django.utils.functional import wraps # Python 2.3, 2.4 fallback. from django.utils.functional import wraps # Python 2.4 fallback.
from django.db import connections, DEFAULT_DB_ALIAS from django.db import connections, DEFAULT_DB_ALIAS
from django.conf import settings from django.conf import settings

View File

@ -1,8 +1,4 @@
import weakref import weakref
try:
set
except NameError:
from sets import Set as set # Python 2.3 fallback
from django.dispatch import saferef from django.dispatch import saferef

View File

@ -18,11 +18,6 @@ from widgets import SelectMultiple, HiddenInput, MultipleHiddenInput
from widgets import media_property from widgets import media_property
from formsets import BaseFormSet, formset_factory, DELETION_FIELD_NAME from formsets import BaseFormSet, formset_factory, DELETION_FIELD_NAME
try:
set
except NameError:
from sets import Set as set # Python 2.3 fallback
__all__ = ( __all__ = (
'ModelForm', 'BaseModelForm', 'model_to_dict', 'fields_for_model', 'ModelForm', 'BaseModelForm', 'model_to_dict', 'fields_for_model',
'save_instance', 'form_for_fields', 'ModelChoiceField', 'save_instance', 'form_for_fields', 'ModelChoiceField',

View File

@ -1,17 +1,12 @@
"""Default variable filters.""" """Default variable filters."""
import re import re
from decimal import Decimal, InvalidOperation, ROUND_HALF_UP
try:
from decimal import Decimal, InvalidOperation, ROUND_HALF_UP
except ImportError:
from django.utils._decimal import Decimal, InvalidOperation, ROUND_HALF_UP
import random as random_module import random as random_module
try: try:
from functools import wraps from functools import wraps
except ImportError: except ImportError:
from django.utils.functional import wraps # Python 2.3, 2.4 fallback. from django.utils.functional import wraps # Python 2.4 fallback.
from django.template import Variable, Library from django.template import Variable, Library
from django.conf import settings from django.conf import settings

View File

@ -2,7 +2,7 @@
import sys import sys
import re import re
from itertools import cycle as itertools_cycle from itertools import groupby, cycle as itertools_cycle
from django.template import Node, NodeList, Template, Context, Variable from django.template import Node, NodeList, Template, Context, Variable
from django.template import TemplateSyntaxError, VariableDoesNotExist, BLOCK_TAG_START, BLOCK_TAG_END, VARIABLE_TAG_START, VARIABLE_TAG_END, SINGLE_BRACE_START, SINGLE_BRACE_END, COMMENT_TAG_START, COMMENT_TAG_END from django.template import TemplateSyntaxError, VariableDoesNotExist, BLOCK_TAG_START, BLOCK_TAG_END, VARIABLE_TAG_START, VARIABLE_TAG_END, SINGLE_BRACE_START, SINGLE_BRACE_END, COMMENT_TAG_START, COMMENT_TAG_END
@ -10,7 +10,6 @@ from django.template import get_library, Library, InvalidTemplateLibrary
from django.template.smartif import IfParser, Literal from django.template.smartif import IfParser, Literal
from django.conf import settings from django.conf import settings
from django.utils.encoding import smart_str, smart_unicode from django.utils.encoding import smart_str, smart_unicode
from django.utils.itercompat import groupby
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
register = Library() register = Library()

View File

@ -185,14 +185,6 @@ def build_test(label):
# Construct a suite out of the tests that matched. # Construct a suite out of the tests that matched.
return unittest.TestSuite(tests) return unittest.TestSuite(tests)
# Python 2.3 compatibility: TestSuites were made iterable in 2.4.
# We need to iterate over them, so we add the missing method when
# necessary.
try:
getattr(unittest.TestSuite, '__iter__')
except AttributeError:
setattr(unittest.TestSuite, '__iter__', lambda s: iter(s._tests))
def partition_suite(suite, classes, bins): def partition_suite(suite, classes, bins):
""" """
Partitions a test suite by test type. Partitions a test suite by test type.

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@ import types
try: try:
from functools import wraps, update_wrapper, WRAPPER_ASSIGNMENTS from functools import wraps, update_wrapper, WRAPPER_ASSIGNMENTS
except ImportError: except ImportError:
from django.utils.functional import wraps, update_wrapper, WRAPPER_ASSIGNMENTS # Python 2.3, 2.4 fallback. from django.utils.functional import wraps, update_wrapper, WRAPPER_ASSIGNMENTS # Python 2.4 fallback.
def method_decorator(decorator): def method_decorator(decorator):

View File

@ -3,15 +3,10 @@ import urllib
import locale import locale
import datetime import datetime
import codecs import codecs
from decimal import Decimal
from django.utils.functional import Promise from django.utils.functional import Promise
try:
from decimal import Decimal
except ImportError:
from django.utils._decimal import Decimal # Python 2.3 fallback
class DjangoUnicodeDecodeError(UnicodeDecodeError): class DjangoUnicodeDecodeError(UnicodeDecodeError):
def __init__(self, obj, *args): def __init__(self, obj, *args):
self.obj = obj self.obj = obj

View File

@ -60,9 +60,6 @@ def curry(_curried_func, *args, **kwargs):
# Summary of changes made to the Python 2.5 code below: # Summary of changes made to the Python 2.5 code below:
# * swapped ``partial`` for ``curry`` to maintain backwards-compatibility # * swapped ``partial`` for ``curry`` to maintain backwards-compatibility
# in Django. # in Django.
# * Wrapped the ``setattr`` call in ``update_wrapper`` with a try-except
# block to make it compatible with Python 2.3, which doesn't allow
# assigning to ``__name__``.
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Python Software Foundation. # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Python Software Foundation.
# All Rights Reserved. # All Rights Reserved.
@ -90,10 +87,7 @@ def update_wrapper(wrapper,
function (defaults to functools.WRAPPER_UPDATES) function (defaults to functools.WRAPPER_UPDATES)
""" """
for attr in assigned: for attr in assigned:
try:
setattr(wrapper, attr, getattr(wrapped, attr)) setattr(wrapper, attr, getattr(wrapped, attr))
except TypeError: # Python 2.3 doesn't allow assigning to __name__.
pass
for attr in updated: for attr in updated:
getattr(wrapper, attr).update(getattr(wrapped, attr)) getattr(wrapper, attr).update(getattr(wrapped, attr))
# Return the wrapper so this can be used as a decorator via curry() # Return the wrapper so this can be used as a decorator via curry()

View File

@ -6,45 +6,7 @@ these implementations if necessary.
import itertools import itertools
def compat_tee(iterable): # Fallback for Python 2.4, Python 2.5
"""
Return two independent iterators from a single iterable.
Based on http://www.python.org/doc/2.3.5/lib/itertools-example.html
"""
# Note: Using a dictionary and a list as the default arguments here is
# deliberate and safe in this instance.
def gen(next, data={}, cnt=[0]):
dpop = data.pop
for i in itertools.count():
if i == cnt[0]:
item = data[i] = next()
cnt[0] += 1
else:
item = dpop(i)
yield item
next = iter(iterable).next
return gen(next), gen(next)
def groupby(iterable, keyfunc=None):
"""
Taken from http://docs.python.org/lib/itertools-functions.html
"""
if keyfunc is None:
keyfunc = lambda x:x
iterable = iter(iterable)
l = [iterable.next()]
lastkey = keyfunc(l[0])
for item in iterable:
key = keyfunc(item)
if key != lastkey:
yield lastkey, l
lastkey = key
l = [item]
else:
l.append(item)
yield lastkey, l
def product(*args, **kwds): def product(*args, **kwds):
""" """
Taken from http://docs.python.org/library/itertools.html#itertools.product Taken from http://docs.python.org/library/itertools.html#itertools.product
@ -58,18 +20,6 @@ def product(*args, **kwds):
for prod in result: for prod in result:
yield tuple(prod) yield tuple(prod)
# Not really in itertools, since it's a builtin in Python 2.4 and later, but it
# does operate as an iterator.
def reversed(data):
for index in xrange(len(data)-1, -1, -1):
yield data[index]
if hasattr(itertools, 'tee'):
tee = itertools.tee
else:
tee = compat_tee
if hasattr(itertools, 'groupby'):
groupby = itertools.groupby
if hasattr(itertools, 'product'): if hasattr(itertools, 'product'):
product = itertools.product product = itertools.product
@ -82,12 +32,6 @@ def is_iterable(x):
else: else:
return True return True
def sorted(in_value):
"A naive implementation of sorted"
out_value = in_value[:]
out_value.sort()
return out_value
def all(iterable): def all(iterable):
for item in iterable: for item in iterable:
if not item: if not item:

View File

@ -14,7 +14,7 @@ account on caching -- just like the middleware does.
try: try:
from functools import wraps from functools import wraps
except ImportError: except ImportError:
from django.utils.functional import wraps # Python 2.3, 2.4 fallback. from django.utils.functional import wraps # Python 2.4 fallback.
from django.utils.decorators import decorator_from_middleware_with_args, available_attrs from django.utils.decorators import decorator_from_middleware_with_args, available_attrs
from django.utils.cache import patch_cache_control, add_never_cache_headers from django.utils.cache import patch_cache_control, add_never_cache_headers

View File

@ -4,7 +4,7 @@ from django.utils.decorators import decorator_from_middleware, available_attrs
try: try:
from functools import wraps from functools import wraps
except ImportError: except ImportError:
from django.utils.functional import wraps # Python 2.3, 2.4 fallback. from django.utils.functional import wraps # Python 2.4 fallback.
csrf_protect = decorator_from_middleware(CsrfViewMiddleware) csrf_protect = decorator_from_middleware(CsrfViewMiddleware)
csrf_protect.__name__ = "csrf_protect" csrf_protect.__name__ = "csrf_protect"

View File

@ -5,7 +5,7 @@ Decorators for views based on HTTP headers.
try: try:
from functools import wraps from functools import wraps
except ImportError: except ImportError:
from django.utils.functional import wraps # Python 2.3, 2.4 fallback. from django.utils.functional import wraps # Python 2.4 fallback.
from calendar import timegm from calendar import timegm
from datetime import timedelta from datetime import timedelta

View File

@ -1,7 +1,7 @@
try: try:
from functools import wraps from functools import wraps
except ImportError: except ImportError:
from django.utils.functional import wraps # Python 2.3, 2.4 fallback. from django.utils.functional import wraps # Python 2.4 fallback.
from django.utils.cache import patch_vary_headers from django.utils.cache import patch_vary_headers
from django.utils.decorators import available_attrs from django.utils.decorators import available_attrs

View File

@ -1,11 +1,6 @@
# coding: utf-8 # coding: utf-8
from django.db import models from django.db import models
try:
sorted
except NameError:
from django.utils.itercompat import sorted # For Python 2.3
class Author(models.Model): class Author(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
age = models.IntegerField() age = models.IntegerField()
@ -48,10 +43,7 @@ class Store(models.Model):
# Different backends and numbers. # Different backends and numbers.
__test__ = {'API_TESTS': """ __test__ = {'API_TESTS': """
>>> from django.core import management >>> from django.core import management
>>> try: >>> from decimal import Decimal
... from decimal import Decimal
... except:
... from django.utils._decimal import Decimal
>>> from datetime import date >>> from datetime import date
# Reset the database representation of this app. # Reset the database representation of this app.

View File

@ -4,18 +4,6 @@
This is a basic model with only two non-primary-key fields. This is a basic model with only two non-primary-key fields.
""" """
# Python 2.3 doesn't have set as a builtin
try:
set
except NameError:
from sets import Set as set
# Python 2.3 doesn't have sorted()
try:
sorted
except NameError:
from django.utils.itercompat import sorted
from django.db import models, DEFAULT_DB_ALIAS from django.db import models, DEFAULT_DB_ALIAS
class Article(models.Model): class Article(models.Model):

View File

@ -2,11 +2,6 @@ import datetime
from django import forms from django import forms
from django.db import models from django.db import models
try:
sorted
except NameError:
from django.utils.itercompat import sorted
class Author(models.Model): class Author(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)

View File

@ -8,11 +8,6 @@ Alternatively, use positional arguments, and pass one or more expressions of
clauses using the variable ``django.db.models.Q`` (or any object with an clauses using the variable ``django.db.models.Q`` (or any object with an
``add_to_query`` method). ``add_to_query`` method).
""" """
# Python 2.3 doesn't have sorted()
try:
sorted
except NameError:
from django.utils.itercompat import sorted
from django.db import models from django.db import models

View File

@ -6,11 +6,7 @@
``QuerySet`` objects to and from "flat" data (i.e. strings). ``QuerySet`` objects to and from "flat" data (i.e. strings).
""" """
try: from decimal import Decimal
from decimal import Decimal
except ImportError:
from django.utils._decimal import Decimal # Python 2.3 fallback
from django.db import models from django.db import models
class Category(models.Model): class Category(models.Model):

View File

@ -1,9 +1,4 @@
from django.core.management.base import AppCommand from django.core.management.base import AppCommand
# Python 2.3 doesn't have sorted()
try:
sorted
except NameError:
from django.utils.itercompat import sorted
class Command(AppCommand): class Command(AppCommand):
help = 'Test Application-based commands' help = 'Test Application-based commands'

View File

@ -1,10 +1,5 @@
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from optparse import make_option from optparse import make_option
# Python 2.3 doesn't have sorted()
try:
sorted
except NameError:
from django.utils.itercompat import sorted
class Command(BaseCommand): class Command(BaseCommand):
option_list = BaseCommand.option_list + ( option_list = BaseCommand.option_list + (

View File

@ -1,9 +1,4 @@
from django.core.management.base import LabelCommand from django.core.management.base import LabelCommand
# Python 2.3 doesn't have sorted()
try:
sorted
except NameError:
from django.utils.itercompat import sorted
class Command(LabelCommand): class Command(LabelCommand):
help = "Test Label-based commands" help = "Test Label-based commands"

View File

@ -1,9 +1,4 @@
from django.core.management.base import NoArgsCommand from django.core.management.base import NoArgsCommand
# Python 2.3 doesn't have sorted()
try:
sorted
except NameError:
from django.utils.itercompat import sorted
class Command(NoArgsCommand): class Command(NoArgsCommand):
help = "Test No-args commands" help = "Test No-args commands"

View File

@ -4,11 +4,6 @@ import pickle
from django.db import connection, models, DEFAULT_DB_ALIAS from django.db import connection, models, DEFAULT_DB_ALIAS
from django.conf import settings from django.conf import settings
try:
sorted
except NameError:
from django.utils.itercompat import sorted # For Python 2.3
class Author(models.Model): class Author(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
age = models.IntegerField() age = models.IntegerField()

View File

@ -3,7 +3,7 @@ from sys import version_info
try: try:
from functools import wraps from functools import wraps
except ImportError: except ImportError:
from django.utils.functional import wraps # Python 2.3, 2.4 fallback. from django.utils.functional import wraps # Python 2.4 fallback.
from django.http import HttpResponse, HttpRequest from django.http import HttpResponse, HttpRequest
from django.utils.functional import allow_lazy, lazy, memoize from django.utils.functional import allow_lazy, lazy, memoize

View File

@ -580,12 +580,6 @@ u'123'
from django.template.defaultfilters import * from django.template.defaultfilters import *
import datetime import datetime
# Python 2.3 doesn't have sorted()
try:
sorted
except NameError:
from django.utils.itercompat import sorted
if __name__ == '__main__': if __name__ == '__main__':
import doctest import doctest
doctest.testmod() doctest.testmod()

View File

@ -5,10 +5,7 @@ tests = r"""
>>> import datetime >>> import datetime
>>> import time >>> import time
>>> import re >>> import re
>>> try: >>> from decimal import Decimal
... from decimal import Decimal
... except ImportError:
... from django.utils._decimal import Decimal
############### ###############
# Extra stuff # # Extra stuff #

View File

@ -28,6 +28,7 @@ import datetime
import time import time
import re import re
import os import os
from decimal import Decimal
from unittest import TestCase from unittest import TestCase
@ -35,11 +36,6 @@ from django.core.files.uploadedfile import SimpleUploadedFile
from django.forms import * from django.forms import *
from django.forms.widgets import RadioFieldRenderer from django.forms.widgets import RadioFieldRenderer
try:
from decimal import Decimal
except ImportError:
from django.utils._decimal import Decimal
def fix_os_paths(x): def fix_os_paths(x):
if isinstance(x, basestring): if isinstance(x, basestring):

View File

@ -5,10 +5,7 @@ tests = r"""
>>> import datetime >>> import datetime
>>> import time >>> import time
>>> import re >>> import re
>>> try: >>> from decimal import Decimal
... from decimal import Decimal
... except ImportError:
... from django.utils._decimal import Decimal
######### #########
# Forms # # Forms #

View File

@ -7,10 +7,7 @@ tests = r"""
>>> import datetime >>> import datetime
>>> import time >>> import time
>>> import re >>> import re
>>> try: >>> from decimal import Decimal
... from decimal import Decimal
... except ImportError:
... from django.utils._decimal import Decimal
>>> from django.utils.translation import activate, deactivate >>> from django.utils.translation import activate, deactivate
>>> from django.conf import settings >>> from django.conf import settings

View File

@ -1,11 +1,6 @@
import os import os
import tempfile import tempfile
try:
import decimal
except ImportError:
from django.utils import _decimal as decimal # Python 2.3 fallback
# Try to import PIL in either of the two ways it can end up installed. # Try to import PIL in either of the two ways it can end up installed.
# Checking for the existence of Image is enough for CPython, but for PyPy, # Checking for the existence of Image is enough for CPython, but for PyPy,
# you need to check for the underlying modules. # you need to check for the underlying modules.

View File

@ -1,5 +1,6 @@
import datetime import datetime
import unittest import unittest
from decimal import Decimal
import django.test import django.test
from django import forms from django import forms
@ -8,12 +9,6 @@ from django.core.exceptions import ValidationError
from models import Foo, Bar, Whiz, BigD, BigS, Image, BigInt, Post, NullBooleanModel, BooleanModel from models import Foo, Bar, Whiz, BigD, BigS, Image, BigInt, Post, NullBooleanModel, BooleanModel
try:
from decimal import Decimal
except ImportError:
from django.utils._decimal import Decimal
# If PIL available, do these tests. # If PIL available, do these tests.
if Image: if Image:
from imagefield import \ from imagefield import \

View File

@ -6,12 +6,6 @@ import datetime
from django.db import models from django.db import models
# Python 2.3 doesn't have sorted()
try:
sorted
except NameError:
from django.utils.itercompat import sorted
class Place(models.Model): class Place(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
address = models.CharField(max_length=80) address = models.CharField(max_length=80)

View File

@ -12,12 +12,6 @@ from django.db import models, DEFAULT_DB_ALIAS
from django.db.models import Count from django.db.models import Count
from django.db.models.query import Q, ITER_CHUNK_SIZE, EmptyQuerySet from django.db.models.query import Q, ITER_CHUNK_SIZE, EmptyQuerySet
# Python 2.3 doesn't have sorted()
try:
sorted
except NameError:
from django.utils.itercompat import sorted
class DumbCategory(models.Model): class DumbCategory(models.Model):
pass pass
@ -1279,12 +1273,12 @@ True
"""} """}
# In Python 2.3 and the Python 2.6 beta releases, exceptions raised in __len__ # In Python 2.6 beta releases, exceptions raised in __len__
# are swallowed (Python issue 1242657), so these cases return an empty list, # are swallowed (Python issue 1242657), so these cases return an empty list,
# rather than raising an exception. Not a lot we can do about that, # rather than raising an exception. Not a lot we can do about that,
# unfortunately, due to the way Python handles list() calls internally. Thus, # unfortunately, due to the way Python handles list() calls internally. Thus,
# we skip the tests for Python 2.3 and 2.6. # we skip the tests for Python 2.6.
if (2, 4) <= sys.version_info < (2, 6): if sys.version_info < (2, 6):
__test__["API_TESTS"] += """ __test__["API_TESTS"] += """
# If you're not careful, it's possible to introduce infinite loops via default # If you're not careful, it's possible to introduce infinite loops via default
# ordering on foreign keys in a cycle. We detect that. # ordering on foreign keys in a cycle. We detect that.

View File

@ -1,15 +0,0 @@
"""
# Tests of the utils itercompat library.
>>> from django.utils.itercompat import sorted as compat_sorted
# Check the replacement version of sorted
>>> x = [5,1,4,2,3]
>>> y = compat_sorted(x)
>>> print y
[1, 2, 3, 4, 5]
>>> print x
[5, 1, 4, 2, 3]
"""

View File

@ -10,25 +10,16 @@ from django.utils.functional import SimpleLazyObject
import timesince import timesince
import datastructures import datastructures
import datetime_safe import datetime_safe
import itercompat
import tzinfo import tzinfo
from decorators import DecoratorFromMiddlewareTests from decorators import DecoratorFromMiddlewareTests
from functional import FunctionalTestCase from functional import FunctionalTestCase
# We need this because "datastructures" uses sorted() and the tests are run in
# the scope of this module.
try:
sorted
except NameError:
from django.utils.itercompat import sorted # For Python 2.3
# Extra tests # Extra tests
__test__ = { __test__ = {
'timesince': timesince, 'timesince': timesince,
'datastructures': datastructures, 'datastructures': datastructures,
'datetime_safe': datetime_safe, 'datetime_safe': datetime_safe,
'itercompat': itercompat,
'tzinfo': tzinfo, 'tzinfo': tzinfo,
} }

View File

@ -5,12 +5,6 @@ import unittest
import django.contrib as contrib import django.contrib as contrib
try:
set
except NameError:
from sets import Set as set # For Python 2.3
CONTRIB_DIR_NAME = 'django.contrib' CONTRIB_DIR_NAME = 'django.contrib'
MODEL_TESTS_DIR_NAME = 'modeltests' MODEL_TESTS_DIR_NAME = 'modeltests'
REGRESSION_TESTS_DIR_NAME = 'regressiontests' REGRESSION_TESTS_DIR_NAME = 'regressiontests'