Index: third_party/google-endpoints/future/builtins/disabled.py |
diff --git a/third_party/google-endpoints/future/builtins/disabled.py b/third_party/google-endpoints/future/builtins/disabled.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f6d6ea9b80c4f9ad098372d5b33e15679ff5747f |
--- /dev/null |
+++ b/third_party/google-endpoints/future/builtins/disabled.py |
@@ -0,0 +1,66 @@ |
+""" |
+This disables builtin functions (and one exception class) which are |
+removed from Python 3.3. |
+ |
+This module is designed to be used like this:: |
+ |
+ from future.builtins.disabled import * |
+ |
+This disables the following obsolete Py2 builtin functions:: |
+ |
+ apply, cmp, coerce, execfile, file, input, long, |
+ raw_input, reduce, reload, unicode, xrange |
+ |
+We don't hack __builtin__, which is very fragile because it contaminates |
+imported modules too. Instead, we just create new functions with |
+the same names as the obsolete builtins from Python 2 which raise |
+NameError exceptions when called. |
+ |
+Note that both ``input()`` and ``raw_input()`` are among the disabled |
+functions (in this module). Although ``input()`` exists as a builtin in |
+Python 3, the Python 2 ``input()`` builtin is unsafe to use because it |
+can lead to shell injection. Therefore we shadow it by default upon ``from |
+future.builtins.disabled import *``, in case someone forgets to import our |
+replacement ``input()`` somehow and expects Python 3 semantics. |
+ |
+See the ``future.builtins.misc`` module for a working version of |
+``input`` with Python 3 semantics. |
+ |
+(Note that callable() is not among the functions disabled; this was |
+reintroduced into Python 3.2.) |
+ |
+This exception class is also disabled: |
+ |
+ StandardError |
+ |
+""" |
+ |
+from __future__ import division, absolute_import, print_function |
+ |
+from future import utils |
+ |
+ |
+OBSOLETE_BUILTINS = ['apply', 'chr', 'cmp', 'coerce', 'execfile', 'file', |
+ 'input', 'long', 'raw_input', 'reduce', 'reload', |
+ 'unicode', 'xrange', 'StandardError'] |
+ |
+ |
+def disabled_function(name): |
+ ''' |
+ Returns a function that cannot be called |
+ ''' |
+ def disabled(*args, **kwargs): |
+ ''' |
+ A function disabled by the ``future`` module. This function is |
+ no longer a builtin in Python 3. |
+ ''' |
+ raise NameError('obsolete Python 2 builtin {0} is disabled'.format(name)) |
+ return disabled |
+ |
+ |
+if not utils.PY3: |
+ for fname in OBSOLETE_BUILTINS: |
+ locals()[fname] = disabled_function(fname) |
+ __all__ = OBSOLETE_BUILTINS |
+else: |
+ __all__ = [] |