libbytesize/size_instances_hashable.patch
Vratislav Podzimek acef3dd342 New version
- Make Size instances hashable (vpodzime)
2016-03-07 12:07:08 +01:00

48 lines
1.4 KiB
Diff

From 5463719b1a0c27e9c7f6017531a1d90ac762b31b Mon Sep 17 00:00:00 2001
From: Vratislav Podzimek <vpodzime@redhat.com>
Date: Mon, 7 Mar 2016 11:56:14 +0100
Subject: [PATCH] Make Size instances hashable
This is useful e.g. for getting rid of duplicate items in lists and/or creation
of sets of sizes in general.
---
src/python/bytesize.py | 3 +++
tests/lbs_py_override_unittest.py | 8 ++++++++
2 files changed, 11 insertions(+)
diff --git a/src/python/bytesize.py b/src/python/bytesize.py
index e3c9098..179719c 100644
--- a/src/python/bytesize.py
+++ b/src/python/bytesize.py
@@ -547,5 +547,8 @@ class Size(object):
def __reduce__(self):
return (self.__class__, (self.get_bytes(),))
+ def __hash__(self):
+ return self.get_bytes()
+
def __del__(self):
del(self._c_size)
diff --git a/tests/lbs_py_override_unittest.py b/tests/lbs_py_override_unittest.py
index 17043ac..b502b30 100755
--- a/tests/lbs_py_override_unittest.py
+++ b/tests/lbs_py_override_unittest.py
@@ -244,6 +244,14 @@ class SizeTestCase(unittest.TestCase):
self.assertIsNot(size1, size2)
self.assertEqual(size1, size2)
+ def testHashable(self):
+ size = Size("1 KiB")
+ hs = hash(size)
+ self.assertIsNotNone(hs)
+
+ size_set = set((Size("1 KiB"), Size("1 KiB"), Size("1 KiB"), Size("2 KiB"), Size(0)))
+ self.assertEqual(len(size_set), 3)
+
#endclass
# script entry point
--
2.5.0