diff mbox

wireless-regdb: Fix comparison of WmmRule with NoneType in python 3

Message ID 20180518144701.25138-1-seth.forshee@canonical.com (mailing list archive)
State Not Applicable
Delegated to: Kalle Valo
Headers show

Commit Message

Seth Forshee May 18, 2018, 2:47 p.m. UTC
Python 3 gives errors as a result of the changes to add wmm
rules since Permission.wmmrule can be set to None:

 TypeError: '<' not supported between instances of 'WmmRule' and 'NoneType'

To fix this, supply compairson methods for WmmRule instead of
using the ones provided by attrs. Doing this means we also need
to supply a __hash__ method.

Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
---
 dbparse.py | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

Comments

Seth Forshee May 25, 2018, 4:34 p.m. UTC | #1
On Fri, May 18, 2018 at 09:47:01AM -0500, Seth Forshee wrote:
> Python 3 gives errors as a result of the changes to add wmm
> rules since Permission.wmmrule can be set to None:
> 
>  TypeError: '<' not supported between instances of 'WmmRule' and 'NoneType'
> 
> To fix this, supply compairson methods for WmmRule instead of
> using the ones provided by attrs. Doing this means we also need
> to supply a __hash__ method.
> 
> Signed-off-by: Seth Forshee <seth.forshee@canonical.com>

Applied.
diff mbox

Patch

diff --git a/dbparse.py b/dbparse.py
index 5cb8b3f13266..5fe752b4ff31 100755
--- a/dbparse.py
+++ b/dbparse.py
@@ -32,7 +32,7 @@  dfs_regions = {
 
 @total_ordering
 
-@attr.s(frozen=True)
+@attr.s(frozen=True, cmp=False)
 class WmmRule(object):
     vo_c = attr.ib()
     vi_c = attr.ib()
@@ -47,6 +47,22 @@  class WmmRule(object):
         return (self.vo_c, self.vi_c, self.be_c, self.bk_c,
                 self.vo_ap, self.vi_ap, self.be_ap, self.bk_ap)
 
+    def __eq__(self, other):
+        if other is None:
+            return False
+        return (self._as_tuple() == other._as_tuple())
+
+    def __ne__(self, other):
+        return not (self == other)
+
+    def __lt__(self, other):
+        if other is None:
+            return False
+        return (self._as_tuple() < other._as_tuple())
+
+    def __hash__(self):
+        return hash(self._as_tuple())
+
 class FreqBand(object):
     def __init__(self, start, end, bw, comments=None):
         self.start = start