Skip to content

Commit a902d2e

Browse files
authored
Merge pull request #552 from yaseen-mowzer-hexagon/basestring-subclasscheck
Add __subclasscheck__ for past.types.basestring
2 parents a85b667 + c9bc0ff commit a902d2e

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

src/past/types/basestring.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,8 @@ class BaseBaseString(type):
2525
def __instancecheck__(cls, instance):
2626
return isinstance(instance, (bytes, str))
2727

28-
def __subclasshook__(cls, thing):
29-
# TODO: What should go here?
30-
raise NotImplemented
28+
def __subclasscheck__(cls, subclass):
29+
return super(BaseBaseString, cls).__subclasscheck__(subclass) or issubclass(subclass, (bytes, str))
3130

3231

3332
class basestring(with_metaclass(BaseBaseString)):

tests/test_past/test_basestring.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,25 @@ def test_isinstance(self):
1919
s2 = oldstr(b'abc')
2020
self.assertTrue(isinstance(s2, basestring))
2121

22+
def test_issubclass(self):
23+
self.assertTrue(issubclass(str, basestring))
24+
self.assertTrue(issubclass(bytes, basestring))
25+
self.assertTrue(issubclass(basestring, basestring))
26+
self.assertFalse(issubclass(int, basestring))
27+
self.assertFalse(issubclass(list, basestring))
28+
self.assertTrue(issubclass(basestring, object))
29+
30+
class CustomString(basestring):
31+
pass
32+
class NotString(object):
33+
pass
34+
class OldStyleClass:
35+
pass
36+
self.assertTrue(issubclass(CustomString, basestring))
37+
self.assertFalse(issubclass(NotString, basestring))
38+
self.assertFalse(issubclass(OldStyleClass, basestring))
39+
40+
2241

2342
if __name__ == '__main__':
2443
unittest.main()

0 commit comments

Comments
 (0)