Index: tools/telemetry/third_party/gsutilz/third_party/six/six.py |
diff --git a/tools/telemetry/third_party/gsutilz/third_party/six/six.py b/tools/telemetry/third_party/gsutilz/third_party/six/six.py |
index 21b0e8032f6e77289a54275bc9ea7d5660b153e9..ffa3fe166ad0357732556eee9640c87ba47cf909 100644 |
--- a/tools/telemetry/third_party/gsutilz/third_party/six/six.py |
+++ b/tools/telemetry/third_party/gsutilz/third_party/six/six.py |
@@ -1,6 +1,6 @@ |
"""Utilities for writing code that runs on Python 2 and 3""" |
-# Copyright (c) 2010-2014 Benjamin Peterson |
+# Copyright (c) 2010-2015 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,12 +23,13 @@ |
from __future__ import absolute_import |
import functools |
+import itertools |
import operator |
import sys |
import types |
__author__ = "Benjamin Peterson <benjamin@python.org>" |
-__version__ = "1.8.0" |
+__version__ = "1.9.0" |
# Useful for very coarse version differentiation. |
@@ -88,8 +89,12 @@ class _LazyDescr(object): |
def __get__(self, obj, tp): |
result = self._resolve() |
setattr(obj, self.name, result) # Invokes __set__. |
- # This is a bit ugly, but it avoids running this again. |
- delattr(obj.__class__, self.name) |
+ try: |
+ # This is a bit ugly, but it avoids running this again by |
+ # removing this descriptor. |
+ delattr(obj.__class__, self.name) |
+ except AttributeError: |
+ pass |
return result |
@@ -554,6 +559,12 @@ 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)) |
@@ -567,6 +578,12 @@ 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, |
@@ -593,6 +610,9 @@ if PY3: |
import io |
StringIO = io.StringIO |
BytesIO = io.BytesIO |
+ _assertCountEqual = "assertCountEqual" |
+ _assertRaisesRegex = "assertRaisesRegex" |
+ _assertRegex = "assertRegex" |
else: |
def b(s): |
return s |
@@ -605,14 +625,28 @@ else: |
return ord(bs[0]) |
def indexbytes(buf, i): |
return ord(buf[i]) |
- def iterbytes(buf): |
- return (ord(byte) for byte in buf) |
+ iterbytes = functools.partial(itertools.imap, ord) |
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") |
@@ -643,6 +677,21 @@ 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): |
@@ -697,6 +746,14 @@ 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.""") |
@@ -704,7 +761,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)(f) |
+ f = functools.wraps(wrapped, assigned, updated)(f) |
f.__wrapped__ = wrapped |
return f |
return wrapper |
@@ -737,6 +794,25 @@ 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. |