Index: third_party/logilab/common/compat.py |
=================================================================== |
--- third_party/logilab/common/compat.py (revision 292986) |
+++ third_party/logilab/common/compat.py (working copy) |
@@ -26,7 +26,6 @@ |
:mod:`unittest2.compatibility` |
""" |
-from __future__ import generators |
__docformat__ = "restructuredtext en" |
@@ -35,7 +34,8 @@ |
import types |
from warnings import warn |
-import __builtin__ as builtins # 2to3 will tranform '__builtin__' to 'builtins' |
+# not used here, but imported to preserve API |
+from six.moves import builtins |
if sys.version_info < (3, 0): |
str_to_bytes = str |
@@ -51,15 +51,6 @@ |
def str_encode(string, encoding): |
return str(string) |
-# XXX callable built-in seems back in all python versions |
-try: |
- callable = builtins.callable |
-except AttributeError: |
- from collections import Callable |
- def callable(something): |
- return isinstance(something, Callable) |
- del Callable |
- |
# See also http://bugs.python.org/issue11776 |
if sys.version_info[0] == 3: |
def method_type(callable, instance, klass): |
@@ -69,11 +60,6 @@ |
# alias types otherwise |
method_type = types.MethodType |
-if sys.version_info < (3, 0): |
- raw_input = raw_input |
-else: |
- raw_input = input |
- |
# Pythons 2 and 3 differ on where to get StringIO |
if sys.version_info < (3, 0): |
from cStringIO import StringIO |
@@ -84,160 +70,9 @@ |
from io import FileIO, BytesIO, StringIO |
from imp import reload |
-# Where do pickles come from? |
-try: |
- import cPickle as pickle |
-except ImportError: |
- import pickle |
- |
from logilab.common.deprecation import deprecated |
-from itertools import izip, chain, imap |
-if sys.version_info < (3, 0):# 2to3 will remove the imports |
- izip = deprecated('izip exists in itertools since py2.3')(izip) |
- imap = deprecated('imap exists in itertools since py2.3')(imap) |
-chain = deprecated('chain exists in itertools since py2.3')(chain) |
- |
-sum = deprecated('sum exists in builtins since py2.3')(sum) |
-enumerate = deprecated('enumerate exists in builtins since py2.3')(enumerate) |
-frozenset = deprecated('frozenset exists in builtins since py2.4')(frozenset) |
-reversed = deprecated('reversed exists in builtins since py2.4')(reversed) |
-sorted = deprecated('sorted exists in builtins since py2.4')(sorted) |
-max = deprecated('max exists in builtins since py2.4')(max) |
- |
- |
-# Python2.5 builtins |
-try: |
- any = any |
- all = all |
-except NameError: |
- def any(iterable): |
- """any(iterable) -> bool |
- |
- Return True if bool(x) is True for any x in the iterable. |
- """ |
- for elt in iterable: |
- if elt: |
- return True |
- return False |
- |
- def all(iterable): |
- """all(iterable) -> bool |
- |
- Return True if bool(x) is True for all values x in the iterable. |
- """ |
- for elt in iterable: |
- if not elt: |
- return False |
- return True |
- |
- |
-# Python2.5 subprocess added functions and exceptions |
-try: |
- from subprocess import Popen |
-except ImportError: |
- # gae or python < 2.3 |
- |
- class CalledProcessError(Exception): |
- """This exception is raised when a process run by check_call() returns |
- a non-zero exit status. The exit status will be stored in the |
- returncode attribute.""" |
- def __init__(self, returncode, cmd): |
- self.returncode = returncode |
- self.cmd = cmd |
- def __str__(self): |
- return "Command '%s' returned non-zero exit status %d" % (self.cmd, |
- self.returncode) |
- |
- def call(*popenargs, **kwargs): |
- """Run command with arguments. Wait for command to complete, then |
- return the returncode attribute. |
- |
- The arguments are the same as for the Popen constructor. Example: |
- |
- retcode = call(["ls", "-l"]) |
- """ |
- # workaround: subprocess.Popen(cmd, stdout=sys.stdout) fails |
- # see http://bugs.python.org/issue1531862 |
- if "stdout" in kwargs: |
- fileno = kwargs.get("stdout").fileno() |
- del kwargs['stdout'] |
- return Popen(stdout=os.dup(fileno), *popenargs, **kwargs).wait() |
- return Popen(*popenargs, **kwargs).wait() |
- |
- def check_call(*popenargs, **kwargs): |
- """Run command with arguments. Wait for command to complete. If |
- the exit code was zero then return, otherwise raise |
- CalledProcessError. The CalledProcessError object will have the |
- return code in the returncode attribute. |
- |
- The arguments are the same as for the Popen constructor. Example: |
- |
- check_call(["ls", "-l"]) |
- """ |
- retcode = call(*popenargs, **kwargs) |
- cmd = kwargs.get("args") |
- if cmd is None: |
- cmd = popenargs[0] |
- if retcode: |
- raise CalledProcessError(retcode, cmd) |
- return retcode |
- |
-try: |
- from os.path import relpath |
-except ImportError: # python < 2.6 |
- from os.path import curdir, abspath, sep, commonprefix, pardir, join |
- def relpath(path, start=curdir): |
- """Return a relative version of a path""" |
- |
- if not path: |
- raise ValueError("no path specified") |
- |
- start_list = abspath(start).split(sep) |
- path_list = abspath(path).split(sep) |
- |
- # Work out how much of the filepath is shared by start and path. |
- i = len(commonprefix([start_list, path_list])) |
- |
- rel_list = [pardir] * (len(start_list)-i) + path_list[i:] |
- if not rel_list: |
- return curdir |
- return join(*rel_list) |
- |
- |
-# XXX don't know why tests don't pass if I don't do that : |
-_real_set, set = set, deprecated('set exists in builtins since py2.4')(set) |
-if (2, 5) <= sys.version_info[:2]: |
- InheritableSet = _real_set |
-else: |
- class InheritableSet(_real_set): |
- """hacked resolving inheritancy issue from old style class in 2.4""" |
- def __new__(cls, *args, **kwargs): |
- if args: |
- new_args = (args[0], ) |
- else: |
- new_args = () |
- obj = _real_set.__new__(cls, *new_args) |
- obj.__init__(*args, **kwargs) |
- return obj |
- |
-# XXX shouldn't we remove this and just let 2to3 do his job ? |
-# range or xrange? |
-try: |
- range = xrange |
-except NameError: |
- range = range |
- |
-# ConfigParser was renamed to the more-standard configparser |
-try: |
- import configparser |
-except ImportError: |
- import ConfigParser as configparser |
- |
-try: |
- import json |
-except ImportError: |
- try: |
- import simplejson as json |
- except ImportError: |
- json = None |
+# Other projects import these from here, keep providing them for |
+# backwards compat |
+any = deprecated('use builtin "any"')(any) |
+all = deprecated('use builtin "all"')(all) |