Commit 2fd8054f authored by Tim Graham's avatar Tim Graham
Browse files

[1.4.x] Fixed #24081 -- Downgraded six to 1.8.0.

This reverts commit a25c444b.

six 1.9+ requires Python 2.6 so this commit restores Python 2.5 compatibility.
parent 032ffade
Loading
Loading
Loading
Loading
+20 −84
Original line number Diff line number Diff line
"""Utilities for writing code that runs on Python 2 and 3"""

# Copyright (c) 2010-2015 Benjamin Peterson
# Copyright (c) 2010-2014 Benjamin Peterson
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -23,13 +23,12 @@
from __future__ import absolute_import

import functools
import itertools
import operator
import sys
import types

__author__ = "Benjamin Peterson <benjamin@python.org>"
__version__ = "1.9.0"
__version__ = "1.8.0"


# Useful for very coarse version differentiation.
@@ -89,12 +88,8 @@ class _LazyDescr(object):
    def __get__(self, obj, tp):
        result = self._resolve()
        setattr(obj, self.name, result) # Invokes __set__.
        try:
            # This is a bit ugly, but it avoids running this again by
            # removing this descriptor.
        # This is a bit ugly, but it avoids running this again.
        delattr(obj.__class__, self.name)
        except AttributeError:
            pass
        return result


@@ -559,12 +554,6 @@ if PY3:

    def iterlists(d, **kw):
        return iter(d.lists(**kw))

    viewkeys = operator.methodcaller("keys")

    viewvalues = operator.methodcaller("values")

    viewitems = operator.methodcaller("items")
else:
    def iterkeys(d, **kw):
        return iter(d.iterkeys(**kw))
@@ -578,12 +567,6 @@ else:
    def iterlists(d, **kw):
        return iter(d.iterlists(**kw))

    viewkeys = operator.methodcaller("viewkeys")

    viewvalues = operator.methodcaller("viewvalues")

    viewitems = operator.methodcaller("viewitems")

_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.")
_add_doc(itervalues, "Return an iterator over the values of a dictionary.")
_add_doc(iteritems,
@@ -610,9 +593,6 @@ if PY3:
    import io
    StringIO = io.StringIO
    BytesIO = io.BytesIO
    _assertCountEqual = "assertCountEqual"
    _assertRaisesRegex = "assertRaisesRegex"
    _assertRegex = "assertRegex"
else:
    def b(s):
        return s
@@ -625,28 +605,14 @@ else:
        return ord(bs[0])
    def indexbytes(buf, i):
        return ord(buf[i])
    iterbytes = functools.partial(itertools.imap, ord)
    def iterbytes(buf):
        return (ord(byte) for byte in buf)
    import StringIO
    StringIO = BytesIO = StringIO.StringIO
    _assertCountEqual = "assertItemsEqual"
    _assertRaisesRegex = "assertRaisesRegexp"
    _assertRegex = "assertRegexpMatches"
_add_doc(b, """Byte literal""")
_add_doc(u, """Text literal""")


def assertCountEqual(self, *args, **kwargs):
    return getattr(self, _assertCountEqual)(*args, **kwargs)


def assertRaisesRegex(self, *args, **kwargs):
    return getattr(self, _assertRaisesRegex)(*args, **kwargs)


def assertRegex(self, *args, **kwargs):
    return getattr(self, _assertRegex)(*args, **kwargs)


if PY3:
    exec_ = getattr(moves.builtins, "exec")

@@ -677,21 +643,6 @@ else:
""")


if sys.version_info[:2] == (3, 2):
    exec_("""def raise_from(value, from_value):
    if from_value is None:
        raise value
    raise value from from_value
""")
elif sys.version_info[:2] > (3, 2):
    exec_("""def raise_from(value, from_value):
    raise value from from_value
""")
else:
    def raise_from(value, from_value):
        raise value


print_ = getattr(moves.builtins, "print", None)
if print_ is None:
    def print_(*args, **kwargs):
@@ -746,14 +697,6 @@ if print_ is None:
                write(sep)
            write(arg)
        write(end)
if sys.version_info[:2] < (3, 3):
    _print = print_
    def print_(*args, **kwargs):
        fp = kwargs.get("file", sys.stdout)
        flush = kwargs.pop("flush", False)
        _print(*args, **kwargs)
        if flush and fp is not None:
            fp.flush()

_add_doc(reraise, """Reraise an exception.""")

@@ -761,7 +704,7 @@ if sys.version_info[0:2] < (3, 4):
    def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS,
              updated=functools.WRAPPER_UPDATES):
        def wrapper(f):
            f = functools.wraps(wrapped, assigned, updated)(f)
            f = functools.wraps(wrapped)(f)
            f.__wrapped__ = wrapped
            return f
        return wrapper
@@ -794,25 +737,6 @@ def add_metaclass(metaclass):
        return metaclass(cls.__name__, cls.__bases__, orig_vars)
    return wrapper


def python_2_unicode_compatible(klass):
    """
    A decorator that defines __unicode__ and __str__ methods under Python 2.
    Under Python 3 it does nothing.

    To support Python 2 and 3 with a single code base, define a __str__ method
    returning text and apply this decorator to the class.
    """
    if PY2:
        if '__str__' not in klass.__dict__:
            raise ValueError("@python_2_unicode_compatible cannot be applied "
                             "to %s because it doesn't define __str__()." %
                             klass.__name__)
        klass.__unicode__ = klass.__str__
        klass.__str__ = lambda self: self.__unicode__().encode('utf-8')
    return klass


# Complete the moves implementation.
# This code is at the end of this module to speed up module loading.
# Turn this module into a package.
@@ -841,12 +765,24 @@ sys.meta_path.append(_importer)
### Additional customizations for Django ###

if PY3:
    _assertRaisesRegex = "assertRaisesRegex"
    _assertRegex = "assertRegex"
    memoryview = memoryview
else:
    # memoryview and buffer are not strictly equivalent, but should be fine for
    _assertRaisesRegex = "assertRaisesRegexp"
    _assertRegex = "assertRegexpMatches"
    # memoryview and buffer are not stricly equivalent, but should be fine for
    # django core usage (mainly BinaryField). However, Jython doesn't support
    # buffer (see http://bugs.jython.org/issue1521), so we have to be careful.
    if sys.platform.startswith('java'):
        memoryview = memoryview
    else:
        memoryview = buffer


def assertRaisesRegex(self, *args, **kwargs):
    return getattr(self, _assertRaisesRegex)(*args, **kwargs)


def assertRegex(self, *args, **kwargs):
    return getattr(self, _assertRegex)(*args, **kwargs)
+14 −0
Original line number Diff line number Diff line
===========================
Django 1.4.18 release notes
===========================

*Under development*

Django 1.4.18 fixes a regression on Python 2.5 in the 1.4.17 release.

Bugfixes
========

* To maintain compatibility with Python 2.5, Django's vendored version of six,
  :mod:`django.utils.six`, has been downgraded to 1.8.0 which is the last
  version to support Python 2.5.
+1 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ Final releases
.. toctree::
   :maxdepth: 1

   1.4.18
   1.4.17
   1.4.16
   1.4.15