diff --git a/openstack/tests/test_utils.py b/openstack/tests/test_utils.py index 32e250f4..676a5de5 100644 --- a/openstack/tests/test_utils.py +++ b/openstack/tests/test_utils.py @@ -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) diff --git a/openstack/utils.py b/openstack/utils.py index 86c88112..367a5398 100644 --- a/openstack/utils.py +++ b/openstack/utils.py @@ -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())