From 39274c62711756b8873db053aed664fe77825dd6 Mon Sep 17 00:00:00 2001 From: Ricardo Branco Date: Mon, 21 Aug 2023 22:24:56 +0200 Subject: [PATCH] Make classes inheriting from Type hashable --- libcloud/common/types.py | 2 +- libcloud/test/common/test_types.py | 32 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 libcloud/test/common/test_types.py diff --git a/libcloud/common/types.py b/libcloud/common/types.py index 673e0d9d75..e29b66f23d 100644 --- a/libcloud/common/types.py +++ b/libcloud/common/types.py @@ -82,7 +82,7 @@ def __repr__(self): return self.value def __hash__(self): - return id(self) + return hash(self.value) class LibcloudError(Exception): diff --git a/libcloud/test/common/test_types.py b/libcloud/test/common/test_types.py new file mode 100644 index 0000000000..339df341c1 --- /dev/null +++ b/libcloud/test/common/test_types.py @@ -0,0 +1,32 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +from libcloud.common.types import Type +from libcloud.compute.types import NodeState + + +class TypeTest(unittest.TestCase): + def test_Type(self): + class TestType(Type): + TESTING = "testing" + + self.assertEqual(hash(TestType.TESTING), hash("testing")) + self.assertIn(TestType.TESTING, {"testing"}) + + def test_NodeState(self): + self.assertEqual(hash(NodeState.RUNNING), hash("running")) + self.assertIn(NodeState.RUNNING, {"running"})