Index: third_party/google-endpoints/past/types/olddict.py |
diff --git a/third_party/google-endpoints/past/types/olddict.py b/third_party/google-endpoints/past/types/olddict.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b213e28fa9cd9ebf10ac26c334cb832a3d05e5ae |
--- /dev/null |
+++ b/third_party/google-endpoints/past/types/olddict.py |
@@ -0,0 +1,97 @@ |
+""" |
+A dict subclass for Python 3 that behaves like Python 2's dict |
+ |
+Example use: |
+ |
+>>> from past.builtins import dict |
+>>> d1 = dict() # instead of {} for an empty dict |
+>>> d2 = dict(key1='value1', key2='value2') |
+ |
+The keys, values and items methods now return lists on Python 3.x and there are |
+methods for iterkeys, itervalues, iteritems, and viewkeys etc. |
+ |
+>>> for d in (d1, d2): |
+... assert isinstance(d.keys(), list) |
+... assert isinstance(d.values(), list) |
+... assert isinstance(d.items(), list) |
+""" |
+ |
+import sys |
+ |
+from past.utils import with_metaclass |
+ |
+ |
+_builtin_dict = dict |
+ver = sys.version_info[:2] |
+ |
+ |
+class BaseOldDict(type): |
+ def __instancecheck__(cls, instance): |
+ return isinstance(instance, _builtin_dict) |
+ |
+ |
+class olddict(with_metaclass(BaseOldDict, _builtin_dict)): |
+ """ |
+ A backport of the Python 3 dict object to Py2 |
+ """ |
+ iterkeys = _builtin_dict.keys |
+ viewkeys = _builtin_dict.keys |
+ |
+ def keys(self): |
+ return list(super(olddict, self).keys()) |
+ |
+ itervalues = _builtin_dict.values |
+ viewvalues = _builtin_dict.values |
+ |
+ def values(self): |
+ return list(super(olddict, self).values()) |
+ |
+ iteritems = _builtin_dict.items |
+ viewitems = _builtin_dict.items |
+ |
+ def items(self): |
+ return list(super(olddict, self).items()) |
+ |
+ def has_key(self, k): |
+ """ |
+ D.has_key(k) -> True if D has a key k, else False |
+ """ |
+ return k in self |
+ |
+ # def __new__(cls, *args, **kwargs): |
+ # """ |
+ # dict() -> new empty dictionary |
+ # dict(mapping) -> new dictionary initialized from a mapping object's |
+ # (key, value) pairs |
+ # dict(iterable) -> new dictionary initialized as if via: |
+ # d = {} |
+ # for k, v in iterable: |
+ # d[k] = v |
+ # dict(**kwargs) -> new dictionary initialized with the name=value pairs |
+ # in the keyword argument list. For example: dict(one=1, two=2) |
+ |
+ # """ |
+ # |
+ # if len(args) == 0: |
+ # return super(olddict, cls).__new__(cls) |
+ # # Was: elif isinstance(args[0], newbytes): |
+ # # We use type() instead of the above because we're redefining |
+ # # this to be True for all unicode string subclasses. Warning: |
+ # # This may render newstr un-subclassable. |
+ # elif type(args[0]) == olddict: |
+ # return args[0] |
+ # # elif isinstance(args[0], _builtin_dict): |
+ # # value = args[0] |
+ # else: |
+ # value = args[0] |
+ # return super(olddict, cls).__new__(cls, value) |
+ |
+ def __native__(self): |
+ """ |
+ Hook for the past.utils.native() function |
+ """ |
+ return super(oldbytes, self) |
+ |
+ |
+__all__ = ['olddict'] |
+ |