Remove CaseInsensitiveDict

Now that we have resource.header and it ends up being populated with
requests.structures.CaseInsensitiveDict, we don't need to hook up our
own implementation.

Change-Id: I62202e9c5dbe4f59e0c49d590d81aee7c05eac3d
This commit is contained in:
Brian Curtin
2015-03-04 16:06:12 -06:00
parent 6662c05eff
commit d0a93649dd
2 changed files with 0 additions and 123 deletions

View File

@@ -70,68 +70,3 @@ class Test_urljoin(testtools.TestCase):
result = utils.urljoin(root, *leaves)
self.assertEqual(result, "http://www.example.com/foo/")
class Test_CaseInsensitiveDict(testtools.TestCase):
def test_create(self):
sot1 = utils.CaseInsensitiveDict()
self.assertEqual(sot1, {})
d = {"hello": "hi"}
sot2 = utils.CaseInsensitiveDict(d)
self.assertEqual(sot2, d)
def test_get_set(self):
sot = utils.CaseInsensitiveDict()
value = 100
sot["LOL"] = value
self.assertEqual(sot["lol"], value)
self.assertIn("LOL", sot._dict)
self.assertRaises(KeyError, sot.__setitem__, None, None)
self.assertRaises(KeyError, sot.__getitem__, None)
def test_del(self):
sot = utils.CaseInsensitiveDict()
value = 200
sot["ROFL"] = value
self.assertEqual(sot["rofl"], value)
del sot["rOfL"]
self.assertNotIn("ROFL", sot)
def test_contains(self):
sot = utils.CaseInsensitiveDict()
sot["LMAO"] = 1
self.assertIn("lMaO", sot)
self.assertNotIn("lol", sot)
def test_iter(self):
parent = {"a": 1, "b": 2}
sot = utils.CaseInsensitiveDict(parent)
for key in sot:
self.assertIn(key, parent)
def test_len(self):
parent = {"a": 1, "b": 2}
sot = utils.CaseInsensitiveDict(parent)
self.assertEqual(len(parent), len(sot))
def test_repr(self):
parent = {"a": 1, "b": 2}
sot = utils.CaseInsensitiveDict(parent)
self.assertEqual(repr(parent), repr(sot))
def test_copy(self):
parent = {"a": 1, "b": 2}
sot = utils.CaseInsensitiveDict(parent)
new = sot.copy()
self.assertEqual(new, sot)
self.assertIsNot(new, sot)

View File

@@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import collections
import logging
import sys
@@ -58,60 +57,3 @@ def urljoin(*args):
link. We generally won't care about that in client.
"""
return '/'.join(str(a or '').strip('/') for a in args)
class CaseInsensitiveDict(collections.MutableMapping):
"""A case insensitive dict for handling properties
In order to have resource.prop work properly for header keys,
the attribute dictionary in resource.Resource has to
be case insensitive. This class implements a MutableMapping
that stores an unmodified dictionary of user-set keys and
values, and an internal mapping of the user-set keys to
their lower case equivalent.
"""
def __init__(self, parent=None):
if parent is not None:
self._keys = dict((key.lower(), key) for key in parent)
else:
self._keys = {}
self._dict = parent or {}
def __getitem__(self, key):
if key is None:
raise KeyError("key is None")
return self._dict[self._keys[key.lower()]]
def __setitem__(self, key, value):
if key is None:
raise KeyError("key is None")
self._dict[key] = value
self._keys[key.lower()] = key
def __delitem__(self, key):
if key is None:
raise KeyError("key is None")
del self._dict[self._keys[key.lower()]]
def __contains__(self, key):
try:
key = self._keys[key.lower()]
except KeyError:
return False
return key in self._dict
def __iter__(self):
return iter(self._dict)
def __len__(self):
return len(self._dict)
def __repr__(self):
return repr(self._dict)
def copy(self):
return CaseInsensitiveDict(self._dict.copy())