Index: third_party/google-endpoints/Crypto/Util/py21compat.py |
diff --git a/third_party/google-endpoints/Crypto/Util/py21compat.py b/third_party/google-endpoints/Crypto/Util/py21compat.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..624408bd2aa0b87037d2b8e138033dcf91b30bd8 |
--- /dev/null |
+++ b/third_party/google-endpoints/Crypto/Util/py21compat.py |
@@ -0,0 +1,84 @@ |
+# -*- coding: utf-8 -*- |
+# |
+# Util/py21compat.py : Compatibility code for Python 2.1 |
+# |
+# Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net> |
+# |
+# =================================================================== |
+# The contents of this file are dedicated to the public domain. To |
+# the extent that dedication to the public domain is not available, |
+# everyone is granted a worldwide, perpetual, royalty-free, |
+# non-exclusive license to exercise all rights associated with the |
+# contents of this file for any purpose whatsoever. |
+# No rights are reserved. |
+# |
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
+# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
+# SOFTWARE. |
+# =================================================================== |
+ |
+"""Compatibility code for Python 2.1 |
+ |
+Currently, this just defines: |
+ - True and False |
+ - object |
+ - isinstance |
+""" |
+ |
+__revision__ = "$Id$" |
+__all__ = [] |
+ |
+import sys |
+import __builtin__ |
+ |
+# 'True' and 'False' aren't defined in Python 2.1. Define them. |
+try: |
+ True, False |
+except NameError: |
+ (True, False) = (1, 0) |
+ __all__ += ['True', 'False'] |
+ |
+# New-style classes were introduced in Python 2.2. Defining "object" in Python |
+# 2.1 lets us use new-style classes in versions of Python that support them, |
+# while still maintaining backward compatibility with old-style classes |
+try: |
+ object |
+except NameError: |
+ class object: pass |
+ __all__ += ['object'] |
+ |
+# Starting with Python 2.2, isinstance allows a tuple for the second argument. |
+# Also, builtins like "tuple", "list", "str", "unicode", "int", and "long" |
+# became first-class types, rather than functions. We want to support |
+# constructs like: |
+# isinstance(x, (int, long)) |
+# So we hack it for Python 2.1. |
+try: |
+ isinstance(5, (int, long)) |
+except TypeError: |
+ __all__ += ['isinstance'] |
+ _builtin_type_map = { |
+ tuple: type(()), |
+ list: type([]), |
+ str: type(""), |
+ unicode: type(u""), |
+ int: type(0), |
+ long: type(0L), |
+ } |
+ def isinstance(obj, t): |
+ if not __builtin__.isinstance(t, type(())): |
+ # t is not a tuple |
+ return __builtin__.isinstance(obj, _builtin_type_map.get(t, t)) |
+ else: |
+ # t is a tuple |
+ for typ in t: |
+ if __builtin__.isinstance(obj, _builtin_type_map.get(typ, typ)): |
+ return True |
+ return False |
+ |
+# vim:set ts=4 sw=4 sts=4 expandtab: |