Index: third_party/google-endpoints/past/__init__.py |
diff --git a/third_party/google-endpoints/past/__init__.py b/third_party/google-endpoints/past/__init__.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..08eeb58d6d8483f3fbf732bd1bf12ebb0e14dddb |
--- /dev/null |
+++ b/third_party/google-endpoints/past/__init__.py |
@@ -0,0 +1,93 @@ |
+# coding=utf-8 |
+""" |
+past: compatibility with Python 2 from Python 3 |
+=============================================== |
+ |
+``past`` is a package to aid with Python 2/3 compatibility. Whereas ``future`` |
+contains backports of Python 3 constructs to Python 2, ``past`` provides |
+implementations of some Python 2 constructs in Python 3 and tools to import and |
+run Python 2 code in Python 3. It is intended to be used sparingly, as a way of |
+running old Python 2 code from Python 3 until the code is ported properly. |
+ |
+Potential uses for libraries: |
+ |
+- as a step in porting a Python 2 codebase to Python 3 (e.g. with the ``futurize`` script) |
+- to provide Python 3 support for previously Python 2-only libraries with the |
+ same APIs as on Python 2 -- particularly with regard to 8-bit strings (the |
+ ``past.builtins.str`` type). |
+- to aid in providing minimal-effort Python 3 support for applications using |
+ libraries that do not yet wish to upgrade their code properly to Python 3, or |
+ wish to upgrade it gradually to Python 3 style. |
+ |
+ |
+Here are some code examples that run identically on Python 3 and 2:: |
+ |
+ >>> from past.builtins import str as oldstr |
+ |
+ >>> philosopher = oldstr(u'\u5b54\u5b50'.encode('utf-8')) |
+ >>> # This now behaves like a Py2 byte-string on both Py2 and Py3. |
+ >>> # For example, indexing returns a Python 2-like string object, not |
+ >>> # an integer: |
+ >>> philosopher[0] |
+ '\xe5' |
+ >>> type(philosopher[0]) |
+ <past.builtins.oldstr> |
+ |
+ >>> # List-producing versions of range, reduce, map, filter |
+ >>> from past.builtins import range, reduce |
+ >>> range(10) |
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] |
+ >>> reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) |
+ 15 |
+ |
+ >>> # Other functions removed in Python 3 are resurrected ... |
+ >>> from past.builtins import execfile |
+ >>> execfile('myfile.py') |
+ |
+ >>> from past.builtins import raw_input |
+ >>> name = raw_input('What is your name? ') |
+ What is your name? [cursor] |
+ |
+ >>> from past.builtins import reload |
+ >>> reload(mymodule) # equivalent to imp.reload(mymodule) in Python 3 |
+ |
+ >>> from past.builtins import xrange |
+ >>> for i in xrange(10): |
+ ... pass |
+ |
+ |
+It also provides import hooks so you can import and use Python 2 modules like |
+this:: |
+ |
+ $ python3 |
+ |
+ >>> from past import autotranslate |
+ >>> authotranslate('mypy2module') |
+ >>> import mypy2module |
+ |
+until the authors of the Python 2 modules have upgraded their code. Then, for |
+example:: |
+ |
+ >>> mypy2module.func_taking_py2_string(oldstr(b'abcd')) |
+ |
+ |
+Credits |
+------- |
+ |
+:Author: Ed Schofield |
+:Sponsor: Python Charmers Pty Ltd, Australia: http://pythoncharmers.com |
+ |
+ |
+Licensing |
+--------- |
+Copyright 2013-2016 Python Charmers Pty Ltd, Australia. |
+The software is distributed under an MIT licence. See LICENSE.txt. |
+""" |
+ |
+ |
+from past.translation import install_hooks as autotranslate |
+from future import __version__, __copyright__, __license__ |
+ |
+__title__ = 'past' |
+__author__ = 'Ed Schofield' |
+ |