Skip to content

Commit 9698083

Browse files
committed
Remove BaseNewObject as a base class for other metaclass bases of future types.
It may be safer to remove BaseNewObject until we're sure it's needed because it adds an extra layer of complexity. However, this doesn't fix the tests introduced in f905bd for multiple inheritance with other future types than ``newobject``; these still give a ``metaclass error``. So we mark the new tests as still failing.
1 parent f905bd8 commit 9698083

File tree

11 files changed

+47
-19
lines changed

11 files changed

+47
-19
lines changed

future/tests/test_bytes.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,7 @@ def test_mod(self):
600600
with self.assertRaises(TypeError):
601601
bytes(b'%r' % 'abc')
602602

603+
@expectedFailurePY2
603604
def test_multiple_inheritance(self):
604605
"""
605606
Issue #96 (for newbytes instead of newobject)
@@ -613,6 +614,7 @@ class Foo(Base, collections.Container):
613614
def __contains__(self, item):
614615
return False
615616

617+
@expectedFailurePY2
616618
def test_with_metaclass_and_bytes(self):
617619
"""
618620
Issue #91 (for newdict instead of newobject)

future/tests/test_dict.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ def test_braces_create_newdict_object(self):
106106
d = self.d1
107107
self.assertTrue(type(d) == dict)
108108

109+
@expectedFailurePY2
109110
def test_multiple_inheritance(self):
110111
"""
111112
Issue #96 (for newdict instead of newobject)
@@ -119,6 +120,7 @@ class Foo(Base, collections.Container):
119120
def __contains__(self, item):
120121
return False
121122

123+
@expectedFailurePY2
122124
def test_with_metaclass_and_dict(self):
123125
"""
124126
Issue #91 (for newdict instead of newobject)

future/tests/test_int.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,6 +1038,7 @@ class myint(int):
10381038
self.assertRaises(TypeError, myint.from_bytes, mytype(0), 'big')
10391039
# self.assertRaises(TypeError, int.from_bytes, mytype(0), 'big', True)
10401040

1041+
@expectedFailurePY2
10411042
def test_multiple_inheritance(self):
10421043
"""
10431044
Issue #96 (for newint instead of newobject)
@@ -1051,6 +1052,7 @@ class Foo(Base, collections.Container):
10511052
def __add__(self, other):
10521053
return 0
10531054

1055+
@expectedFailurePY2
10541056
def test_with_metaclass_and_int(self):
10551057
"""
10561058
Issue #91 (for newint instead of newobject)

future/tests/test_list.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from __future__ import absolute_import, unicode_literals, print_function
77
from future.builtins import *
88
from future import utils
9-
from future.tests.base import unittest
9+
from future.tests.base import unittest, expectedFailurePY2
1010

1111

1212
class TestList(unittest.TestCase):
@@ -157,6 +157,33 @@ def test_bool(self):
157157
l2.clear()
158158
self.assertFalse(bool(l2))
159159

160+
@expectedFailurePY2
161+
def test_multiple_inheritance(self):
162+
"""
163+
Issue #96 (for newdict instead of newobject)
164+
"""
165+
import collections
166+
167+
class Base(list):
168+
pass
169+
170+
class Foo(Base, collections.Container):
171+
def __contains__(self, item):
172+
return False
173+
174+
@expectedFailurePY2
175+
def test_with_metaclass_and_list(self):
176+
"""
177+
Issue #91 (for newdict instead of newobject)
178+
"""
179+
from future.utils import with_metaclass
180+
181+
class MetaClass(type):
182+
pass
183+
184+
class TestClass(with_metaclass(MetaClass, list)):
185+
pass
186+
160187

161188
if __name__ == '__main__':
162189
unittest.main()

future/tests/test_str.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from __future__ import absolute_import, unicode_literals, print_function
77
from future.builtins import *
88
from future import utils
9-
from future.tests.base import unittest
9+
from future.tests.base import unittest, expectedFailurePY2
1010

1111
import os
1212

@@ -524,6 +524,7 @@ def test_maketrans_translate(self):
524524
self.assertRaises(TypeError, 'hello'.translate)
525525
self.assertRaises(TypeError, 'abababc'.translate, 'abc', 'xyz')
526526

527+
@expectedFailurePY2
527528
def test_multiple_inheritance(self):
528529
"""
529530
Issue #96 (for newstr instead of newobject)
@@ -537,6 +538,7 @@ class Foo(Base, collections.Container):
537538
def __contains__(self, item):
538539
return False
539540

541+
@expectedFailurePY2
540542
def test_with_metaclass_and_str(self):
541543
"""
542544
Issue #91 (for newstr instead of newobject)

future/types/newbytes.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +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, BaseNewObject
14+
from future.types.newobject import newobject
1515

1616

1717
_builtin_bytes = bytes
@@ -21,7 +21,7 @@
2121
unicode = str
2222

2323

24-
class BaseNewBytes(BaseNewObject):
24+
class BaseNewBytes(type):
2525
def __instancecheck__(cls, instance):
2626
if cls == newbytes:
2727
return isinstance(instance, _builtin_bytes)

future/types/newdict.py

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

2121
from future.utils import with_metaclass
22-
from future.types.newobject import newobject, BaseNewObject
22+
from future.types.newobject import newobject
2323

2424

2525
_builtin_dict = dict
2626
ver = sys.version_info[:2]
2727

2828

29-
class BaseNewDict(BaseNewObject):
29+
class BaseNewDict(type):
3030
def __instancecheck__(cls, instance):
3131
if cls == newdict:
3232
return isinstance(instance, _builtin_dict)

future/types/newint.py

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

1313
from future.types.newbytes import newbytes
14-
from future.types.newobject import newobject, BaseNewObject
14+
from future.types.newobject import newobject
1515
from future.utils import PY3, isint, istext, isbytes, with_metaclass, native
1616

1717

1818
if PY3:
1919
long = int
2020

2121

22-
class BaseNewInt(BaseNewObject):
22+
class BaseNewInt(type):
2323
def __instancecheck__(cls, instance):
2424
if cls == newint:
2525
# Special case for Py2 short or long int

future/types/newlist.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
import copy
1717

1818
from future.utils import with_metaclass
19-
from future.types.newobject import newobject, BaseNewObject
19+
from future.types.newobject import newobject
2020

2121

2222
_builtin_list = list
2323
ver = sys.version_info[:2]
2424

2525

26-
class BaseNewList(BaseNewObject):
26+
class BaseNewList(type):
2727
def __instancecheck__(cls, instance):
2828
if cls == newlist:
2929
return isinstance(instance, _builtin_list)

future/types/newobject.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,6 @@ def __iter__(self):
4646
ver = sys.version_info[:2]
4747

4848

49-
class BaseNewObject(type):
50-
def __instancecheck__(cls, instance):
51-
if cls == newobject:
52-
return isinstance(instance, _builtin_object)
53-
else:
54-
return issubclass(instance.__class__, cls)
55-
5649
# We no longer define a metaclass for newobject because this breaks multiple
5750
# inheritance and custom metaclass use with this exception:
5851

0 commit comments

Comments
 (0)