summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlavio Curella <flavio.curella@gmail.com>2016-12-08 12:10:25 -0600
committerFlavio Curella <flavio.curella@gmail.com>2016-12-08 12:19:30 -0600
commit6f239fbf29109d39d3cfed0650c9ffe217c681a8 (patch)
tree3df0bab5e1e9a0468a240382997d3e0eb17550be
parentd024b1bd78808faafb9d1ccc57d7520e4d04a5f6 (diff)
downloaddocker-py-6f239fbf29109d39d3cfed0650c9ffe217c681a8.tar.gz
Make resources hashable, so that they can be added to `set`s
Signed-off-by: Flavio Curella <flavio.curella@gmail.com>
-rw-r--r--docker/models/resource.py3
-rw-r--r--tests/unit/models_resources_test.py14
2 files changed, 17 insertions, 0 deletions
diff --git a/docker/models/resource.py b/docker/models/resource.py
index 95712ae..ed3900a 100644
--- a/docker/models/resource.py
+++ b/docker/models/resource.py
@@ -23,6 +23,9 @@ class Model(object):
def __eq__(self, other):
return isinstance(other, self.__class__) and self.id == other.id
+ def __hash__(self):
+ return hash("%s:%s" % (self.__class__.__name__, self.id))
+
@property
def id(self):
"""
diff --git a/tests/unit/models_resources_test.py b/tests/unit/models_resources_test.py
index 25c6a3e..5af24ee 100644
--- a/tests/unit/models_resources_test.py
+++ b/tests/unit/models_resources_test.py
@@ -12,3 +12,17 @@ class ModelTest(unittest.TestCase):
container.reload()
assert client.api.inspect_container.call_count == 2
assert container.attrs['Name'] == "foobar"
+
+ def test_hash(self):
+ client = make_fake_client()
+ container1 = client.containers.get(FAKE_CONTAINER_ID)
+ my_set = set([container1])
+ assert len(my_set) == 1
+
+ container2 = client.containers.get(FAKE_CONTAINER_ID)
+ my_set.add(container2)
+ assert len(my_set) == 1
+
+ image1 = client.images.get(FAKE_CONTAINER_ID)
+ my_set.add(image1)
+ assert len(my_set) == 2