Skip to content

Commit 4d7d5c4

Browse files
committed
Fixes for issue #89: bytes, dict, int, list, str
1 parent eb52669 commit 4d7d5c4

File tree

6 files changed

+33
-11
lines changed

6 files changed

+33
-11
lines changed

future/types/newbytes.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
from future.utils import istext, isbytes, PY3, with_metaclass
1313
from future.types import no, issubset
14+
from future.types.newobject import newobject
1415

1516

1617
_builtin_bytes = bytes
@@ -22,10 +23,13 @@
2223

2324
class BaseNewBytes(type):
2425
def __instancecheck__(cls, instance):
25-
return isinstance(instance, _builtin_bytes)
26+
if cls == newbytes:
27+
return isinstance(instance, _builtin_bytes)
28+
else:
29+
return issubclass(instance.__class__, cls)
2630

2731

28-
class newbytes(with_metaclass(BaseNewBytes, _builtin_bytes)):
32+
class newbytes(with_metaclass(BaseNewBytes, _builtin_bytes, newobject)):
2933
"""
3034
A backport of the Python 3 bytes object to Py2
3135
"""

future/types/newdict.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import sys
2020

2121
from future.utils import with_metaclass
22+
from future.types.newobject import newobject
2223

2324

2425
_builtin_dict = dict
@@ -27,9 +28,13 @@
2728

2829
class BaseNewDict(type):
2930
def __instancecheck__(cls, instance):
30-
return isinstance(instance, _builtin_dict)
31+
if cls == newdict:
32+
return isinstance(instance, _builtin_dict)
33+
else:
34+
return issubclass(instance.__class__, cls)
35+
3136

32-
class newdict(with_metaclass(BaseNewDict, _builtin_dict)):
37+
class newdict(with_metaclass(BaseNewDict, _builtin_dict, newobject)):
3338
"""
3439
A backport of the Python 3 dict object to Py2
3540
"""

future/types/newint.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import collections
1212

1313
from future.types.newbytes import newbytes
14+
from future.types.newobject import newobject
1415
from future.utils import PY3, isint, istext, isbytes, with_metaclass, native
1516

1617

@@ -20,11 +21,14 @@
2021

2122
class BaseNewInt(type):
2223
def __instancecheck__(cls, instance):
23-
# Special case for Py2 short or long int
24-
return isinstance(instance, (int, long))
24+
if cls == newint:
25+
# Special case for Py2 short or long int
26+
return isinstance(instance, (int, long))
27+
else:
28+
return issubclass(instance.__class__, cls)
2529

2630

27-
class newint(with_metaclass(BaseNewInt, long)):
31+
class newint(with_metaclass(BaseNewInt, long, newobject)):
2832
"""
2933
A backport of the Python 3 int object to Py2
3034
"""

future/types/newlist.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@
2525

2626
class BaseNewList(type):
2727
def __instancecheck__(cls, instance):
28-
return isinstance(instance, _builtin_list)
28+
if cls == newlist:
29+
return isinstance(instance, _builtin_list)
30+
else:
31+
return issubclass(instance.__class__, cls)
32+
2933

3034
class newlist(with_metaclass(BaseNewList, _builtin_list, newobject)):
3135
"""

future/types/newobject.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ def __iter__(self):
5151
# def __instancecheck__(cls, instance):
5252
# return isinstance(instance, _builtin_object)
5353

54+
5455
class newobject(_builtin_object):
5556
"""
5657
A magical object class that provides Python 2 compatibility methods::

future/types/newstr.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,11 @@
4141
"""
4242

4343
from collections import Iterable
44-
4544
from numbers import Number
45+
4646
from future.utils import PY3, istext, with_metaclass, isnewbytes
4747
from future.types import no, issubset
48+
from future.types.newobject import newobject
4849

4950

5051
if PY3:
@@ -54,10 +55,13 @@
5455

5556
class BaseNewStr(type):
5657
def __instancecheck__(cls, instance):
57-
return isinstance(instance, unicode)
58+
if cls == newstr:
59+
return isinstance(instance, unicode)
60+
else:
61+
return issubclass(instance.__class__, cls)
5862

5963

60-
class newstr(with_metaclass(BaseNewStr, unicode)):
64+
class newstr(with_metaclass(BaseNewStr, unicode, newobject)):
6165
"""
6266
A backport of the Python 3 str object to Py2
6367
"""

0 commit comments

Comments
 (0)