summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gaynor <alex.gaynor@gmail.com>2009-12-17 22:18:23 +0000
committerAlex Gaynor <alex.gaynor@gmail.com>2009-12-17 22:18:23 +0000
commit601db0d2df9dfdf639b2a32f7cac41a31e6329dc (patch)
treea8c1ea246dc8c591939136cfb87e4671f5cf42ef
parent2269813616d7b5f3acd4a2a5a098362a00604937 (diff)
downloaddjango-601db0d2df9dfdf639b2a32f7cac41a31e6329dc.tar.gz
[soc2009/multidb] Merged up to trunk r11901.
git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/multidb@11904 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/admin/widgets.py2
-rw-r--r--django/contrib/gis/geos/tests/test_geos.py2
-rw-r--r--django/contrib/gis/geos/tests/test_geos_mutation.py4
-rw-r--r--django/contrib/gis/tests/layermap/tests.py12
-rw-r--r--django/db/models/base.py2
-rw-r--r--django/db/models/expressions.py2
-rw-r--r--django/db/models/fields/__init__.py3
-rw-r--r--django/db/models/fields/files.py3
-rw-r--r--django/db/models/manager.py2
-rw-r--r--django/db/models/query.py1
-rw-r--r--django/db/models/query_utils.py7
-rw-r--r--django/db/models/sql/query.py2
-rw-r--r--django/forms/fields.py13
-rw-r--r--django/forms/forms.py3
-rw-r--r--django/forms/widgets.py7
-rw-r--r--django/http/__init__.py2
-rw-r--r--django/utils/_decimal.py2
-rw-r--r--django/utils/copycompat.py14
-rw-r--r--django/utils/datastructures.py4
-rw-r--r--django/utils/functional.py6
-rw-r--r--django/utils/tree.py2
-rw-r--r--tests/regressiontests/dispatch/tests/test_dispatcher.py2
-rw-r--r--tests/regressiontests/extra_regress/models.py3
-rw-r--r--tests/regressiontests/utils/tests.py2
24 files changed, 54 insertions, 48 deletions
diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py
index 105de48ed3..0392b642bb 100644
--- a/django/contrib/admin/widgets.py
+++ b/django/contrib/admin/widgets.py
@@ -2,7 +2,7 @@
Form Widget classes specific to the Django admin site.
"""
-import copy
+import django.utils.copycompat as copy
from django import forms
from django.forms.widgets import RadioFieldRenderer
diff --git a/django/contrib/gis/geos/tests/test_geos.py b/django/contrib/gis/geos/tests/test_geos.py
index 440075dd49..4f2e33f9a0 100644
--- a/django/contrib/gis/geos/tests/test_geos.py
+++ b/django/contrib/gis/geos/tests/test_geos.py
@@ -821,7 +821,7 @@ class GEOSTest(unittest.TestCase):
def test22_copy(self):
"Testing use with the Python `copy` module."
- import copy
+ import django.utils.copycompat as copy
poly = GEOSGeometry('POLYGON((0 0, 0 23, 23 23, 23 0, 0 0), (5 5, 5 10, 10 10, 10 5, 5 5))')
cpy1 = copy.copy(poly)
cpy2 = copy.deepcopy(poly)
diff --git a/django/contrib/gis/geos/tests/test_geos_mutation.py b/django/contrib/gis/geos/tests/test_geos_mutation.py
index 260a4689a6..28f484dca7 100644
--- a/django/contrib/gis/geos/tests/test_geos_mutation.py
+++ b/django/contrib/gis/geos/tests/test_geos_mutation.py
@@ -2,9 +2,11 @@
# Modified from original contribution by Aryeh Leib Taurog, which was
# released under the New BSD license.
import unittest
+
+import django.utils.copycompat as copy
+
from django.contrib.gis.geos import *
from django.contrib.gis.geos.error import GEOSIndexError
-import copy
def getItem(o,i): return o[i]
def delItem(o,i): del o[i]
diff --git a/django/contrib/gis/tests/layermap/tests.py b/django/contrib/gis/tests/layermap/tests.py
index 1f2de66539..f8239cb46d 100644
--- a/django/contrib/gis/tests/layermap/tests.py
+++ b/django/contrib/gis/tests/layermap/tests.py
@@ -1,10 +1,14 @@
-import os, unittest
-from copy import copy
+import os
+import unittest
from decimal import Decimal
-from models import City, County, CountyFeat, Interstate, ICity1, ICity2, State, city_mapping, co_mapping, cofeat_mapping, inter_mapping
-from django.contrib.gis.utils.layermapping import LayerMapping, LayerMapError, InvalidDecimal, MissingForeignKey
+
+from django.utils.copycompat import copy
+
from django.contrib.gis.gdal import DataSource
from django.contrib.gis.tests.utils import mysql
+from django.contrib.gis.utils.layermapping import LayerMapping, LayerMapError, InvalidDecimal, MissingForeignKey
+
+from models import City, County, CountyFeat, Interstate, ICity1, ICity2, State, city_mapping, co_mapping, cofeat_mapping, inter_mapping
shp_path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', 'data'))
city_shp = os.path.join(shp_path, 'cities', 'cities.shp')
diff --git a/django/db/models/base.py b/django/db/models/base.py
index 73c2c3903c..3464ae6712 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -1,4 +1,3 @@
-import copy
import types
import sys
import os
@@ -13,6 +12,7 @@ from django.db.models.options import Options
from django.db import connections, transaction, DatabaseError, DEFAULT_DB_ALIAS
from django.db.models import signals
from django.db.models.loading import register_models, get_model
+import django.utils.copycompat as copy
from django.utils.functional import curry
from django.utils.encoding import smart_str, force_unicode, smart_unicode
from django.conf import settings
diff --git a/django/db/models/expressions.py b/django/db/models/expressions.py
index e782d98c61..f760e4c5f3 100644
--- a/django/db/models/expressions.py
+++ b/django/db/models/expressions.py
@@ -1,7 +1,7 @@
-from copy import deepcopy
from datetime import datetime
from django.utils import tree
+from django.utils.copycompat import deepcopy
class ExpressionNode(tree.Node):
"""
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index c86e63a6fc..b70f320df3 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -1,10 +1,11 @@
-import copy
import datetime
import decimal
import os
import re
import time
+import django.utils.copycompat as copy
+
from django.db import connection
from django.db.models import signals
from django.db.models.fields.subclassing import LegacyConnection
diff --git a/django/db/models/fields/files.py b/django/db/models/fields/files.py
index d3ba975412..6dfeddbc41 100644
--- a/django/db/models/fields/files.py
+++ b/django/db/models/fields/files.py
@@ -1,7 +1,8 @@
-import copy
import datetime
import os
+import django.utils.copycompat as copy
+
from django.conf import settings
from django.db.models.fields import Field
from django.core.files.base import File, ContentFile
diff --git a/django/db/models/manager.py b/django/db/models/manager.py
index d752519f5c..baaa1c9cd9 100644
--- a/django/db/models/manager.py
+++ b/django/db/models/manager.py
@@ -1,4 +1,4 @@
-import copy
+import django.utils.copycompat as copy
from django.db.models.query import QuerySet, EmptyQuerySet, insert_query
from django.db.models import signals
from django.db.models.fields import FieldDoesNotExist
diff --git a/django/db/models/query.py b/django/db/models/query.py
index 5b5a2e7f76..7d2b2df28e 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -9,6 +9,7 @@ from django.db.models.aggregates import Aggregate
from django.db.models.fields import DateField
from django.db.models.query_utils import Q, select_related_descend, CollectedObjects, CyclicDependency, deferred_class_factory
from django.db.models import signals, sql
+from django.utils.copycompat import deepcopy
# Used to control how many objects are worked with at once in some cases (e.g.
# when deleting objects).
diff --git a/django/db/models/query_utils.py b/django/db/models/query_utils.py
index cdee1c7dfc..54bb91ea02 100644
--- a/django/db/models/query_utils.py
+++ b/django/db/models/query_utils.py
@@ -7,16 +7,11 @@ circular import difficulties.
"""
import weakref
-from copy import deepcopy
+from django.utils.copycompat import deepcopy
from django.utils import tree
from django.utils.datastructures import SortedDict
-try:
- sorted
-except NameError:
- from django.utils.itercompat import sorted # For Python 2.3.
-
class CyclicDependency(Exception):
"""
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index d1217bf048..60d70baf21 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -7,7 +7,7 @@ databases). The abstraction barrier only works one way: this module has to know
all about the internals of models in order to get the information it needs.
"""
-from copy import deepcopy
+from django.utils.copycompat import deepcopy
from django.utils.tree import Node
from django.utils.datastructures import SortedDict
from django.utils.encoding import force_unicode
diff --git a/django/forms/fields.py b/django/forms/fields.py
index 0aef355d0f..c0ee2f0955 100644
--- a/django/forms/fields.py
+++ b/django/forms/fields.py
@@ -2,28 +2,19 @@
Field classes.
"""
-import copy
import datetime
import os
import re
import time
import urlparse
+from decimal import Decimal, DecimalException
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
-# Python 2.3 fallbacks
-try:
- from decimal import Decimal, DecimalException
-except ImportError:
- from django.utils._decimal import Decimal, DecimalException
-try:
- set
-except NameError:
- from sets import Set as set
-
import django.core.exceptions
+import django.utils.copycompat as copy
from django.utils.translation import ugettext_lazy as _
from django.utils.encoding import smart_unicode, smart_str
diff --git a/django/forms/forms.py b/django/forms/forms.py
index e854de8a7a..7f6fa51287 100644
--- a/django/forms/forms.py
+++ b/django/forms/forms.py
@@ -2,8 +2,7 @@
Form classes
"""
-from copy import deepcopy
-
+from django.utils.copycompat import deepcopy
from django.utils.datastructures import SortedDict
from django.utils.html import conditional_escape
from django.utils.encoding import StrAndUnicode, smart_unicode, force_unicode
diff --git a/django/forms/widgets.py b/django/forms/widgets.py
index b1d2cb7cda..d59e6343e5 100644
--- a/django/forms/widgets.py
+++ b/django/forms/widgets.py
@@ -2,12 +2,7 @@
HTML Widget classes
"""
-try:
- set
-except NameError:
- from sets import Set as set # Python 2.3 fallback
-
-import copy
+import django.utils.copycompat as copy
from itertools import chain
from django.conf import settings
from django.utils.datastructures import MultiValueDict, MergeDict
diff --git a/django/http/__init__.py b/django/http/__init__.py
index 446659b560..7b0c469c51 100644
--- a/django/http/__init__.py
+++ b/django/http/__init__.py
@@ -183,7 +183,7 @@ class QueryDict(MultiValueDict):
return result
def __deepcopy__(self, memo):
- import copy
+ import django.utils.copycompat as copy
result = self.__class__('', mutable=True)
memo[id(self)] = result
for key, value in dict.items(self):
diff --git a/django/utils/_decimal.py b/django/utils/_decimal.py
index 677d26bb32..2801046cf1 100644
--- a/django/utils/_decimal.py
+++ b/django/utils/_decimal.py
@@ -134,7 +134,7 @@ __all__ = [
'setcontext', 'getcontext'
]
-import copy as _copy
+import django.utils.copycompat as _copy
#Rounding
ROUND_DOWN = 'ROUND_DOWN'
diff --git a/django/utils/copycompat.py b/django/utils/copycompat.py
new file mode 100644
index 0000000000..22b3cfbef7
--- /dev/null
+++ b/django/utils/copycompat.py
@@ -0,0 +1,14 @@
+"""
+Fixes Python 2.4's failure to deepcopy unbound functions.
+"""
+
+import copy
+import types
+
+# Monkeypatch copy's deepcopy registry to handle functions correctly.
+if (hasattr(copy, '_deepcopy_dispatch') and types.FunctionType not in copy._deepcopy_dispatch):
+ copy._deepcopy_dispatch[types.FunctionType] = copy._deepcopy_atomic
+
+# Pose as the copy module now.
+del copy, types
+from copy import *
diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py
index 2b586d7efe..06cf6c6b75 100644
--- a/django/utils/datastructures.py
+++ b/django/utils/datastructures.py
@@ -1,4 +1,4 @@
-from copy import deepcopy
+from django.utils.copycompat import deepcopy
class MergeDict(object):
@@ -214,7 +214,7 @@ class MultiValueDict(dict):
return self.__class__(super(MultiValueDict, self).items())
def __deepcopy__(self, memo=None):
- import copy
+ import django.utils.copycompat as copy
if memo is None:
memo = {}
result = self.__class__()
diff --git a/django/utils/functional.py b/django/utils/functional.py
index 823cda4587..43b7ab1437 100644
--- a/django/utils/functional.py
+++ b/django/utils/functional.py
@@ -335,8 +335,10 @@ class SimpleLazyObject(LazyObject):
memo[id(self)] = result
return result
else:
- import copy
- return copy.deepcopy(self._wrapped, memo)
+ # Changed to use deepcopy from copycompat, instead of copy
+ # For Python 2.4.
+ from django.utils.copycompat import deepcopy
+ return deepcopy(self._wrapped, memo)
# Need to pretend to be the wrapped class, for the sake of objects that care
# about this (especially in equality tests)
diff --git a/django/utils/tree.py b/django/utils/tree.py
index a9028b834b..a6cfec27ad 100644
--- a/django/utils/tree.py
+++ b/django/utils/tree.py
@@ -3,7 +3,7 @@ A class for storing a tree graph. Primarily used for filter constructs in the
ORM.
"""
-from copy import deepcopy
+from django.utils.copycompat import deepcopy
class Node(object):
"""
diff --git a/tests/regressiontests/dispatch/tests/test_dispatcher.py b/tests/regressiontests/dispatch/tests/test_dispatcher.py
index adf760386c..ad3a05f2cd 100644
--- a/tests/regressiontests/dispatch/tests/test_dispatcher.py
+++ b/tests/regressiontests/dispatch/tests/test_dispatcher.py
@@ -1,8 +1,8 @@
from django.dispatch import Signal
import unittest
-import copy
import sys
import gc
+import django.utils.copycompat as copy
if sys.platform.startswith('java'):
def garbage_collect():
diff --git a/tests/regressiontests/extra_regress/models.py b/tests/regressiontests/extra_regress/models.py
index 2b5791f5e3..d4d7cb86e5 100644
--- a/tests/regressiontests/extra_regress/models.py
+++ b/tests/regressiontests/extra_regress/models.py
@@ -1,6 +1,7 @@
-import copy
import datetime
+import django.utils.copycompat as copy
+
from django.contrib.auth.models import User
from django.db import models
from django.db.models.query import Q
diff --git a/tests/regressiontests/utils/tests.py b/tests/regressiontests/utils/tests.py
index a7a6e4c3a1..6258b81200 100644
--- a/tests/regressiontests/utils/tests.py
+++ b/tests/regressiontests/utils/tests.py
@@ -220,7 +220,7 @@ class TestUtilsSimpleLazyObject(TestCase):
self.assertEqual(_ComplexObject, SimpleLazyObject(complex_object).__class__)
def test_deepcopy(self):
- import copy
+ import django.utils.copycompat as copy
# Check that we *can* do deep copy, and that it returns the right
# objects.