[Checkins] SVN: BTrees/branches/pure_python/ Don't use __dict__ for BTrees objects in Python.
Tres Seaver
cvs-admin at zope.org
Wed Dec 5 00:59:58 UTC 2012
Log message for revision 128532:
Don't use __dict__ for BTrees objects in Python.
Changed:
_U BTrees/branches/pure_python/
U BTrees/branches/pure_python/BTrees/_base.py
U BTrees/branches/pure_python/BTrees/tests/test__base.py
-=-
Modified: BTrees/branches/pure_python/BTrees/_base.py
===================================================================
--- BTrees/branches/pure_python/BTrees/_base.py 2012-12-05 00:41:51 UTC (rev 128531)
+++ BTrees/branches/pure_python/BTrees/_base.py 2012-12-05 00:59:57 UTC (rev 128532)
@@ -28,6 +28,7 @@
class _Base(Persistent):
+ __slots__ = ()
_key_type = list
def __init__(self, items=None):
@@ -38,6 +39,11 @@
class _BucketBase(_Base):
+ __slots__ = ('_keys',
+ '_next',
+ '_to_key',
+ )
+
def clear(self):
self._keys = self._key_type()
self._next = None
@@ -148,6 +154,16 @@
class _SetIteration(object):
+ __slots__ = ('to_iterate',
+ 'useValues',
+ '_next',
+ 'active',
+ 'position',
+ 'key',
+ 'value',
+ )
+
+
def __init__(self, to_iterate, useValues=False, default=None):
if to_iterate is None:
to_iterate = ()
@@ -167,6 +183,7 @@
self._next = itmeth().next
self.active = True
self.position = 0
+ self.key = _marker
self.value = default
self.advance()
@@ -186,6 +203,7 @@
class Bucket(_BucketBase):
+ __slots__ = ()
_value_type = list
_to_value = lambda self, x: x
VALUE_SAME_CHECK = False
@@ -479,6 +497,8 @@
class Set(_BucketBase):
+ __slots__ = ()
+
def add(self, key):
return self._set(self._to_key(key))[0]
@@ -670,7 +690,9 @@
class _TreeItem(object):
- __slots__ = 'key', 'child'
+ __slots__ = ('key',
+ 'child',
+ )
def __init__(self, key, child):
self.key = key
@@ -679,6 +701,10 @@
class _Tree(_Base):
+ __slots__ = ('_data',
+ '_firstbucket',
+ )
+
def setdefault(self, key, value):
return self._set(self._to_key(key), self._to_value(value), True)[1]
@@ -1025,12 +1051,23 @@
class _TreeItems(object):
+ __slots__ = ('firstbucket',
+ 'itertype',
+ 'iterargs',
+ 'index',
+ 'it',
+ 'v',
+ '_len',
+ )
+
def __init__(self, firstbucket, itertype, iterargs):
self.firstbucket = firstbucket
self.itertype = itertype
self.iterargs = iterargs
self.index = -1
self.it = iter(self)
+ self.v = None
+ self._len = None
def __getitem__(self, i):
if isinstance(i, slice):
@@ -1054,14 +1091,12 @@
return self.v
def __len__(self):
- try:
- return self._len
- except AttributeError:
+ if self._len is None:
i = 0
for _ in self:
i += 1
self._len = i
- return self._len
+ return self._len
def __iter__(self):
bucket = self.firstbucket
@@ -1082,6 +1117,8 @@
class Tree(_Tree):
+ __slots__ = ()
+
def get(self, key, default=None):
bucket = self._findbucket(key)
if bucket:
@@ -1119,6 +1156,8 @@
class TreeSet(_Tree):
+ __slots__ = ()
+
#_next = None
def add(self, key):
return self._set(self._to_key(key))[0]
@@ -1138,6 +1177,10 @@
class set_operation(object):
+ __slots__ = ('func',
+ 'set_type',
+ )
+
def __init__(self, func, set_type):
self.func = func
self.set_type = set_type
Modified: BTrees/branches/pure_python/BTrees/tests/test__base.py
===================================================================
--- BTrees/branches/pure_python/BTrees/tests/test__base.py 2012-12-05 00:41:51 UTC (rev 128531)
+++ BTrees/branches/pure_python/BTrees/tests/test__base.py 2012-12-05 00:59:57 UTC (rev 128532)
@@ -398,9 +398,10 @@
return self._getTargetClass()(to_iterate, useValues, default)
def test_ctor_w_None(self):
+ from .._base import _marker
si = self._makeOne(None)
self.assertEqual(si.useValues, False)
- self.failIf('key' in si.__dict__)
+ self.assertTrue(si.key is _marker)
self.assertEqual(si.value, None)
self.assertEqual(si.active, False)
self.assertEqual(si.position, -1)
More information about the checkins
mailing list