Skip to content

Commit

Permalink
[#3309|GTK] Fix cmp function for None types
Browse files Browse the repository at this point in the history
Comparisons on Python 3 are much stricter resulting in the following
error comparing with None:

    TypeError: '>' not supported between instances of 'NoneType' and 'str'

Fix this by getting the type of the other value and getting it's default
value.
  • Loading branch information
cas-- committed Apr 30, 2020
1 parent d02fa72 commit 23a48dd
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 1 deletion.
34 changes: 34 additions & 0 deletions deluge/tests/test_ui_gtk3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
#
# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with
# the additional special exception to link portions of this program with the OpenSSL library.
# See LICENSE for more details.
#

from __future__ import unicode_literals

import sys

import mock
import pytest
from twisted.trial import unittest


@pytest.mark.gtkui
class GTK3CommonTestCase(unittest.TestCase):
def setUp(self):
sys.modules['gi.repository'] = mock.MagicMock()

def tearDown(self):
pass

def test_cmp(self):
from deluge.ui.gtk3.common import cmp

self.assertEqual(cmp(None, None), 0)
self.assertEqual(cmp(1, None), 1)
self.assertEqual(cmp(0, None), 1)
self.assertEqual(cmp(None, 7), -1)
self.assertEqual(cmp(None, 'bar'), -1)
self.assertEqual(cmp('foo', None), 1)
self.assertEqual(cmp('', None), 1)
13 changes: 12 additions & 1 deletion deluge/ui/gtk3/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,18 @@ def cmp(x, y):
and strictly positive if x > y.
"""

return (x > y) - (x < y)
try:
return (x > y) - (x < y)
except TypeError:
# Handle NoneType comparison
if x is None:
if y is None:
return 0
return -1
elif y is None:
return 1
else:
raise


def create_blank_pixbuf(size=16):
Expand Down

0 comments on commit 23a48dd

Please sign in to comment.