Mercurial > hg
view mercurial/thirdparty/attr/_compat.py @ 37045:a708e1e4d7a8
url: support suppressing Accept header
Sending this header automatically could interfere with future
testing and client behavior. Let's add a knob to disable the
behavior.
We don't have a control for User-Agent because urllib will send
it if we don't set something. I don't feel like hacking into the
bowels of urllib to figure out how to suppress that. UA shouldn't
be used for anything meaningful. So it shouldn't pose any problems
beyond non-determinism (since the header has the Mercurial version in
it).
Differential Revision: https://phab.mercurial-scm.org/D2843
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Tue, 13 Mar 2018 10:34:36 -0700 |
parents | 765eb17a7eb8 |
children | e1c586b9a43c |
line wrap: on
line source
from __future__ import absolute_import, division, print_function import sys import types PY2 = sys.version_info[0] == 2 if PY2: from UserDict import IterableUserDict # We 'bundle' isclass instead of using inspect as importing inspect is # fairly expensive (order of 10-15 ms for a modern machine in 2016) def isclass(klass): return isinstance(klass, (type, types.ClassType)) # TYPE is used in exceptions, repr(int) is different on Python 2 and 3. TYPE = "type" def iteritems(d): return d.iteritems() def iterkeys(d): return d.iterkeys() # Python 2 is bereft of a read-only dict proxy, so we make one! class ReadOnlyDict(IterableUserDict): """ Best-effort read-only dict wrapper. """ def __setitem__(self, key, val): # We gently pretend we're a Python 3 mappingproxy. raise TypeError("'mappingproxy' object does not support item " "assignment") def update(self, _): # We gently pretend we're a Python 3 mappingproxy. raise AttributeError("'mappingproxy' object has no attribute " "'update'") def __delitem__(self, _): # We gently pretend we're a Python 3 mappingproxy. raise TypeError("'mappingproxy' object does not support item " "deletion") def clear(self): # We gently pretend we're a Python 3 mappingproxy. raise AttributeError("'mappingproxy' object has no attribute " "'clear'") def pop(self, key, default=None): # We gently pretend we're a Python 3 mappingproxy. raise AttributeError("'mappingproxy' object has no attribute " "'pop'") def popitem(self): # We gently pretend we're a Python 3 mappingproxy. raise AttributeError("'mappingproxy' object has no attribute " "'popitem'") def setdefault(self, key, default=None): # We gently pretend we're a Python 3 mappingproxy. raise AttributeError("'mappingproxy' object has no attribute " "'setdefault'") def __repr__(self): # Override to be identical to the Python 3 version. return "mappingproxy(" + repr(self.data) + ")" def metadata_proxy(d): res = ReadOnlyDict() res.data.update(d) # We blocked update, so we have to do it like this. return res else: def isclass(klass): return isinstance(klass, type) TYPE = "class" def iteritems(d): return d.items() def iterkeys(d): return d.keys() def metadata_proxy(d): return types.MappingProxyType(dict(d))