From 9877e84caaf42b307086dcc62003e1d2e7c80671 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Anssi=20K=C3=A4=C3=A4ri=C3=A4inen?= <akaariai@gmail.com>
Date: Mon, 7 May 2012 20:38:14 +0300
Subject: [PATCH] Fixed total_ordering for Python < 2.7.2

The total_ordering in Python versions prior to 2.7.2 is buggy, and
this caused infinite recursion for Field comparisons on those
versions. Use the borrowed total_ordering for all Python versions
prior to 2.7.2.

The buggy total_ordering was introduced in commit
5cbfb48b92cb26a335f9c8c0f79d3390290103e2
---
 django/utils/functional.py | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/django/utils/functional.py b/django/utils/functional.py
index 86bbed7a7b..5b88c3f3cb 100644
--- a/django/utils/functional.py
+++ b/django/utils/functional.py
@@ -1,6 +1,7 @@
 import copy
 import operator
 from functools import wraps, update_wrapper
+import sys
 
 
 # You can't trivially replace this `functools.partial` because this binds to
@@ -311,11 +312,13 @@ def partition(predicate, values):
         results[predicate(item)].append(item)
     return results
 
-try:
+if sys.version_info >= (2,7,2):
     from functools import total_ordering
-except ImportError:
-    # For Python < 2.7
-    # Code borrowed from python 2.7.3 stdlib
+else:
+    # For Python < 2.7.2. Python 2.6 does not have total_ordering, and
+    # total_ordering in 2.7 versions prior to 2.7.2 is buggy. See
+    # http://bugs.python.org/issue10042 for details. For these versions use
+    # code borrowed from Python 2.7.3.
     def total_ordering(cls):
         """Class decorator that fills in missing ordering methods"""
         convert = {