[Checkins] SVN: persistent/trunk/ Py3k compat:
Tres Seaver
cvs-admin at zope.org
Fri Jun 29 04:02:41 UTC 2012
Log message for revision 127178:
Py3k compat:
- Bytes everywhere for OID / serials.
- Different obejct comparison semantics.
- Replace class advice 'implments' w/ 'implementer' decorator.
- Flatten 'items()' / 'keys()' iterators for testing.
Changed:
_U persistent/trunk/
U persistent/trunk/persistent/_compat.py
U persistent/trunk/persistent/interfaces.py
U persistent/trunk/persistent/picklecache.py
U persistent/trunk/persistent/pyPersistence.py
U persistent/trunk/persistent/tests/cucumbers.py
U persistent/trunk/persistent/tests/testPersistent.py
U persistent/trunk/persistent/tests/test_mapping.py
U persistent/trunk/persistent/tests/test_persistence.py
U persistent/trunk/persistent/tests/test_picklecache.py
U persistent/trunk/persistent/tests/test_wref.py
-=-
Modified: persistent/trunk/persistent/_compat.py
===================================================================
--- persistent/trunk/persistent/_compat.py 2012-06-29 04:02:31 UTC (rev 127177)
+++ persistent/trunk/persistent/_compat.py 2012-06-29 04:02:37 UTC (rev 127178)
@@ -22,6 +22,11 @@
def _u(s):
return s
+ def _b(s):
+ if isinstance(s, str):
+ return s.encode('unicode_escape')
+ return s
+
def _native(s):
if isinstance(s, bytes):
return s.decode('unicode_escape')
@@ -43,5 +48,7 @@
return s.encode('unicode_escape')
return s
+ _b = _native
+
PYTHON3 = False
PYTHON2 = True
Modified: persistent/trunk/persistent/interfaces.py
===================================================================
--- persistent/trunk/persistent/interfaces.py 2012-06-29 04:02:31 UTC (rev 127177)
+++ persistent/trunk/persistent/interfaces.py 2012-06-29 04:02:37 UTC (rev 127178)
@@ -30,6 +30,8 @@
STICKY = 2
+OID_TYPE = SERIAL_TYPE = bytes
+
class IPersistent(Interface):
"""Python persistent interface
Modified: persistent/trunk/persistent/picklecache.py
===================================================================
--- persistent/trunk/persistent/picklecache.py 2012-06-29 04:02:31 UTC (rev 127177)
+++ persistent/trunk/persistent/picklecache.py 2012-06-29 04:02:37 UTC (rev 127178)
@@ -20,6 +20,8 @@
from persistent.interfaces import GHOST
from persistent.interfaces import IPickleCache
from persistent.interfaces import STICKY
+from persistent.interfaces import OID_TYPE
+from persistent.interfaces import SERIAL_TYPE
class RingNode(object):
# 32 byte fixed size wrapper.
@@ -61,8 +63,8 @@
def __setitem__(self, oid, value):
""" See IPickleCache.
"""
- if not isinstance(oid, str): # XXX bytes
- raise ValueError('OID must be string: %s' % oid)
+ if not isinstance(oid, OID_TYPE): # XXX bytes
+ raise ValueError('OID must be %s: %s' % (OID_TYPE, oid))
# XXX
if oid in self.persistent_classes or oid in self.data:
if self.data[oid] is not value:
@@ -80,7 +82,7 @@
def __delitem__(self, oid):
""" See IPickleCache.
"""
- if not isinstance(oid, str):
+ if not isinstance(oid, OID_TYPE):
raise ValueError('OID must be string: %s' % oid)
if oid in self.persistent_classes:
del self.persistent_classes[oid]
@@ -189,7 +191,7 @@
def reify(self, to_reify):
""" See IPickleCache.
"""
- if isinstance(to_reify, str): #bytes
+ if isinstance(to_reify, OID_TYPE): #bytes
to_reify = [to_reify]
for oid in to_reify:
value = self[oid]
Modified: persistent/trunk/persistent/pyPersistence.py
===================================================================
--- persistent/trunk/persistent/pyPersistence.py 2012-06-29 04:02:31 UTC (rev 127177)
+++ persistent/trunk/persistent/pyPersistence.py 2012-06-29 04:02:37 UTC (rev 127178)
@@ -20,12 +20,12 @@
from persistent.interfaces import UPTODATE
from persistent.interfaces import CHANGED
from persistent.interfaces import STICKY
+from persistent.interfaces import OID_TYPE
+from persistent.interfaces import SERIAL_TYPE
from persistent.timestamp import TimeStamp
from persistent.timestamp import _ZERO
from persistent._compat import copy_reg
-OID_TYPE = SERIAL_TYPE = bytes
-
_INITIAL_SERIAL = _ZERO
Modified: persistent/trunk/persistent/tests/cucumbers.py
===================================================================
--- persistent/trunk/persistent/tests/cucumbers.py 2012-06-29 04:02:31 UTC (rev 127177)
+++ persistent/trunk/persistent/tests/cucumbers.py 2012-06-29 04:02:37 UTC (rev 127178)
@@ -14,6 +14,7 @@
# Example objects for pickling.
from persistent import Persistent
+from persistent._compat import PYTHON2
def print_dict(d):
@@ -27,9 +28,14 @@
for attr in attrs:
if attr[:3] in ('_v_', '_p_'):
continue
- c = cmp(getattr(self, attr, None), getattr(other, attr, None))
- if c:
- return c
+ lhs, rhs = getattr(self, attr, None), getattr(other, attr, None)
+ if PYTHON2:
+ c = cmp(lhs, rhs)
+ if c:
+ return c
+ else:
+ if lhs != rhs:
+ return 1
return 0
class Simple(Persistent):
@@ -39,9 +45,14 @@
self._v_favorite_color = 'blue'
self._p_foo = 'bar'
- def __cmp__(self, other):
- return cmpattrs(self, other, '__class__', *(self.__dict__.keys()))
+ @property
+ def _attrs(self):
+ return list(self.__dict__.keys())
+ def __eq__(self, other):
+ return cmpattrs(self, other, '__class__', *self._attrs) == 0
+
+
class Custom(Simple):
def __new__(cls, x, y):
@@ -71,7 +82,14 @@
self._v_eek = 1
self._p_splat = 2
+ @property
+ def _attrs(self):
+ return list(self.__dict__.keys())
+ def __eq__(self, other):
+ return cmpattrs(self, other, '__class__', *self._attrs) == 0
+
+
class SubSlotted(Slotted):
__slots__ = 's3', 's4'
@@ -80,8 +98,9 @@
Slotted.__init__(self, s1, s2)
self.s3 = s3
- def __cmp__(self, other):
- return cmpattrs(self, other, '__class__', 's1', 's2', 's3', 's4')
+ @property
+ def _attrs(self):
+ return ('s1', 's2', 's3', 's4')
class SubSubSlotted(SubSlotted):
@@ -92,7 +111,6 @@
self._v_favorite_color = 'blue'
self._p_foo = 'bar'
- def __cmp__(self, other):
- return cmpattrs(self, other,
- '__class__', 's1', 's2', 's3', 's4',
- *(self.__dict__.keys()))
+ @property
+ def _attrs(self):
+ return ['s1', 's2', 's3', 's4'] + list(self.__dict__.keys())
Modified: persistent/trunk/persistent/tests/testPersistent.py
===================================================================
--- persistent/trunk/persistent/tests/testPersistent.py 2012-06-29 04:02:31 UTC (rev 127177)
+++ persistent/trunk/persistent/tests/testPersistent.py 2012-06-29 04:02:37 UTC (rev 127178)
@@ -34,7 +34,8 @@
self.assertEqual(obj._p_oid, None)
def test_oid_mutable_and_deletable_when_no_jar(self):
- OID = '\x01' * 8
+ from persistent._compat import _b
+ OID = _b('\x01' * 8)
obj = self._makeOne()
obj._p_oid = OID
self.assertEqual(obj._p_oid, OID)
@@ -42,7 +43,8 @@
self.assertEqual(obj._p_oid, None)
def test_oid_immutable_when_in_jar(self):
- OID = '\x01' * 8
+ from persistent._compat import _b
+ OID = _b('\x01' * 8)
obj = self._makeOne()
jar = self._makeJar()
jar.add(obj)
@@ -185,9 +187,9 @@
self.assertEqual(obj._p_state, GHOST)
def test_initial_serial(self):
- NOSERIAL = "\000" * 8
+ from persistent.timestamp import _ZERO
obj = self._makeOne()
- self.assertEqual(obj._p_serial, NOSERIAL)
+ self.assertEqual(obj._p_serial, _ZERO)
def test_setting_serial_w_invalid_types_raises(self):
# Serial must be an 8-digit string
@@ -203,11 +205,12 @@
self.assertRaises(ValueError, set, _u("01234567"))
def test_del_serial_returns_to_initial(self):
- NOSERIAL = "\000" * 8
+ from persistent.timestamp import _ZERO
+ from persistent._compat import _b
obj = self._makeOne()
- obj._p_serial = "01234567"
+ obj._p_serial = _b("01234567")
del obj._p_serial
- self.assertEqual(obj._p_serial, NOSERIAL)
+ self.assertEqual(obj._p_serial, _ZERO)
def test_initial_mtime(self):
obj = self._makeOne()
Modified: persistent/trunk/persistent/tests/test_mapping.py
===================================================================
--- persistent/trunk/persistent/tests/test_mapping.py 2012-06-29 04:02:31 UTC (rev 127177)
+++ persistent/trunk/persistent/tests/test_mapping.py 2012-06-29 04:02:37 UTC (rev 127178)
@@ -181,14 +181,14 @@
except KeyError:
pass
else:
- raise TestFailed("1 should not be poppable from u2")
+ self.fail("1 should not be poppable from u2")
x = u2.pop(1, 7)
eq(x, 7, "u2.pop(1, 7) == 7")
# Test popitem
- items = u2.items()
+ items = list(u2.items())
key, value = u2.popitem()
self.failUnless((key, value) in items, "key, value in items")
self.failUnless(key not in u2, "key not in u2")
Modified: persistent/trunk/persistent/tests/test_persistence.py
===================================================================
--- persistent/trunk/persistent/tests/test_persistence.py 2012-06-29 04:02:31 UTC (rev 127177)
+++ persistent/trunk/persistent/tests/test_persistence.py 2012-06-29 04:02:37 UTC (rev 127178)
@@ -19,11 +19,11 @@
return self._getTargetClass()(*args, **kw)
def _makeJar(self):
- from zope.interface import implements
+ from zope.interface import implementer
from persistent.interfaces import IPersistentDataManager
+ @implementer(IPersistentDataManager)
class _Jar(object):
- implements(IPersistentDataManager)
def __init__(self):
self._loaded = []
self._registered = []
Modified: persistent/trunk/persistent/tests/test_picklecache.py
===================================================================
--- persistent/trunk/persistent/tests/test_picklecache.py 2012-06-29 04:02:31 UTC (rev 127177)
+++ persistent/trunk/persistent/tests/test_picklecache.py 2012-06-29 04:02:37 UTC (rev 127178)
@@ -28,13 +28,14 @@
def _makePersist(self, state=None, oid='foo', jar=_marker):
from persistent.interfaces import GHOST
+ from persistent._compat import _b
if state is None:
state = GHOST
if jar is _marker:
jar = DummyConnection()
persist = DummyPersistent()
persist._p_state = state
- persist._p_oid = oid
+ persist._p_oid = _b(oid)
persist._p_jar = jar
return persist
@@ -89,13 +90,15 @@
self.fail("Didn't raise ValueError with non-string OID.")
def test___setitem___duplicate_oid_raises_KeyError(self):
+ from persistent._compat import _b
+ KEY = _b('original')
cache = self._makeOne()
original = self._makePersist()
- cache['original'] = original
+ cache[KEY] = original
duplicate = self._makePersist()
try:
- cache['original'] = duplicate
+ cache[KEY] = duplicate
except KeyError:
pass
else:
@@ -103,49 +106,57 @@
def test___setitem___ghost(self):
from persistent.interfaces import GHOST
+ from persistent._compat import _b
+ KEY = _b('ghost')
cache = self._makeOne()
ghost = self._makePersist(state=GHOST)
- cache['ghost'] = ghost
+ cache[KEY] = ghost
self.assertEqual(len(cache), 1)
- self.assertEqual(_len(cache.items()), 1)
+ items = list(cache.items())
+ self.assertEqual(len(items), 1)
self.assertEqual(_len(cache.klass_items()), 0)
- self.assertEqual(cache.items()[0][0], 'ghost')
+ self.assertEqual(items[0][0], KEY)
self.assertEqual(cache.ringlen(), 0)
- self.failUnless(cache.items()[0][1] is ghost)
- self.failUnless(cache['ghost'] is ghost)
+ self.failUnless(items[0][1] is ghost)
+ self.failUnless(cache[KEY] is ghost)
def test___setitem___non_ghost(self):
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
cache = self._makeOne()
uptodate = self._makePersist(state=UPTODATE)
- cache['uptodate'] = uptodate
+ cache[_b('uptodate')] = uptodate
self.assertEqual(len(cache), 1)
- self.assertEqual(_len(cache.items()), 1)
+ items = list(cache.items())
+ self.assertEqual(len(items), 1)
self.assertEqual(_len(cache.klass_items()), 0)
- self.assertEqual(cache.items()[0][0], 'uptodate')
+ self.assertEqual(items[0][0], 'uptodate')
self.assertEqual(cache.ringlen(), 1)
- self.failUnless(cache.items()[0][1] is uptodate)
+ self.failUnless(items[0][1] is uptodate)
self.failUnless(cache['uptodate'] is uptodate)
self.failUnless(cache.get('uptodate') is uptodate)
def test___setitem___persistent_class(self):
+ from persistent._compat import _b
+ KEY = _b('pclass')
class pclass(object):
pass
cache = self._makeOne()
- cache['pclass'] = pclass
+ cache[KEY] = pclass
+ kitems = list(cache.klass_items())
self.assertEqual(len(cache), 1)
self.assertEqual(_len(cache.items()), 0)
- self.assertEqual(_len(cache.klass_items()), 1)
- self.assertEqual(cache.klass_items()[0][0], 'pclass')
- self.failUnless(cache.klass_items()[0][1] is pclass)
- self.failUnless(cache['pclass'] is pclass)
- self.failUnless(cache.get('pclass') is pclass)
+ self.assertEqual(len(kitems), 1)
+ self.assertEqual(kitems[0][0], KEY)
+ self.failUnless(kitems[0][1] is pclass)
+ self.failUnless(cache[KEY] is pclass)
+ self.failUnless(cache.get(KEY) is pclass)
def test___delitem___non_string_oid_raises_ValueError(self):
cache = self._makeOne()
@@ -158,173 +169,203 @@
self.fail("Didn't raise ValueError with non-string OID.")
def test___delitem___nonesuch_raises_KeyError(self):
+ from persistent._compat import _b
cache = self._makeOne()
original = self._makePersist()
try:
- del cache['nonesuch']
+ del cache[_b('nonesuch')]
except KeyError:
pass
else:
self.fail("Didn't raise KeyError with nonesuch OID.")
def test___delitem___w_persistent_class(self):
+ from persistent._compat import _b
+ KEY = _b('pclass')
cache = self._makeOne()
class pclass(object):
pass
cache = self._makeOne()
- cache['pclass'] = pclass
- del cache['pclass']
- self.assertTrue(cache.get('pclass', self) is self)
- self.assertFalse('pclass' in cache.persistent_classes)
+ cache[KEY] = pclass
+ del cache[KEY]
+ self.assertTrue(cache.get(KEY, self) is self)
+ self.assertFalse(KEY in cache.persistent_classes)
self.assertEqual(cache.ringlen(), 0)
def test___delitem___w_normal_object(self):
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
+ KEY = _b('uptodate')
cache = self._makeOne()
uptodate = self._makePersist(state=UPTODATE)
- cache['uptodate'] = uptodate
+ cache[KEY] = uptodate
- del cache['uptodate']
- self.assertTrue(cache.get('uptodate', self) is self)
+ del cache[KEY]
+ self.assertTrue(cache.get(KEY, self) is self)
def test___delitem___w_ghost(self):
from persistent.interfaces import GHOST
+ from persistent._compat import _b
cache = self._makeOne()
ghost = self._makePersist(state=GHOST)
- cache['ghost'] = ghost
+ KEY = _b('ghost')
+ cache[KEY] = ghost
- del cache['ghost']
- self.assertTrue(cache.get('ghost', self) is self)
+ del cache[KEY]
+ self.assertTrue(cache.get(KEY, self) is self)
def test___delitem___w_remaining_object(self):
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
cache = self._makeOne()
remains = self._makePersist(state=UPTODATE)
uptodate = self._makePersist(state=UPTODATE)
- cache['remains'] = remains
- cache['uptodate'] = uptodate
+ REMAINS = _b('remains')
+ UPTODATE = _b('uptodate')
+ cache[REMAINS] = remains
+ cache[UPTODATE] = uptodate
- del cache['uptodate']
- self.assertTrue(cache.get('uptodate', self) is self)
- self.assertTrue(cache.get('remains', self) is remains)
+ del cache[UPTODATE]
+ self.assertTrue(cache.get(UPTODATE, self) is self)
+ self.assertTrue(cache.get(REMAINS, self) is remains)
def test_lruitems(self):
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
cache = self._makeOne()
- cache['one'] = self._makePersist(oid='one', state=UPTODATE)
- cache['two'] = self._makePersist(oid='two', state=UPTODATE)
- cache['three'] = self._makePersist(oid='three', state=UPTODATE)
+ ONE = _b('one')
+ TWO = _b('two')
+ THREE = _b('three')
+ cache[ONE] = self._makePersist(oid='one', state=UPTODATE)
+ cache[TWO] = self._makePersist(oid='two', state=UPTODATE)
+ cache[THREE] = self._makePersist(oid='three', state=UPTODATE)
items = cache.lru_items()
self.assertEqual(_len(items), 3)
- self.assertEqual(items[0][0], 'one')
- self.assertEqual(items[1][0], 'two')
- self.assertEqual(items[2][0], 'three')
+ self.assertEqual(items[0][0], ONE)
+ self.assertEqual(items[1][0], TWO)
+ self.assertEqual(items[2][0], THREE)
def test_mru_nonesuch_raises_KeyError(self):
cache = self._makeOne()
+ from persistent._compat import _b
+ self.assertRaises(KeyError, cache.mru, _b('nonesuch'))
- try:
- cache.mru('nonesuch')
- except KeyError:
- pass
- else:
- self.fail("Didn't raise KeyError with nonesuch OID.")
-
def test_mru_normal(self):
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
+ ONE = _b('one')
+ TWO = _b('two')
+ THREE = _b('three')
cache = self._makeOne()
- cache['one'] = self._makePersist(oid='one', state=UPTODATE)
- cache['two'] = self._makePersist(oid='two', state=UPTODATE)
- cache['three'] = self._makePersist(oid='three', state=UPTODATE)
+ cache[ONE] = self._makePersist(oid='one', state=UPTODATE)
+ cache[TWO] = self._makePersist(oid='two', state=UPTODATE)
+ cache[THREE] = self._makePersist(oid='three', state=UPTODATE)
- cache.mru('two')
+ cache.mru(TWO)
self.assertEqual(cache.ringlen(), 3)
items = cache.lru_items()
self.assertEqual(_len(items), 3)
- self.assertEqual(items[0][0], 'one')
- self.assertEqual(items[1][0], 'three')
- self.assertEqual(items[2][0], 'two')
+ self.assertEqual(items[0][0], ONE)
+ self.assertEqual(items[1][0], THREE)
+ self.assertEqual(items[2][0], TWO)
def test_mru_ghost(self):
from persistent.interfaces import UPTODATE
from persistent.interfaces import GHOST
+ from persistent._compat import _b
+ ONE = _b('one')
+ TWO = _b('two')
+ THREE = _b('three')
cache = self._makeOne()
- cache['one'] = self._makePersist(oid='one', state=UPTODATE)
- two = cache['two'] = self._makePersist(oid='two', state=GHOST)
- cache['three'] = self._makePersist(oid='three', state=UPTODATE)
+ cache[ONE] = self._makePersist(oid='one', state=UPTODATE)
+ two = cache[TWO] = self._makePersist(oid='two', state=GHOST)
+ cache[THREE] = self._makePersist(oid='three', state=UPTODATE)
- cache.mru('two')
+ cache.mru(TWO)
self.assertEqual(cache.ringlen(), 2)
items = cache.lru_items()
self.assertEqual(_len(items), 2)
- self.assertEqual(items[0][0], 'one')
- self.assertEqual(items[1][0], 'three')
+ self.assertEqual(items[0][0], ONE)
+ self.assertEqual(items[1][0], THREE)
def test_mru_was_ghost_now_active(self):
from persistent.interfaces import UPTODATE
from persistent.interfaces import GHOST
+ from persistent._compat import _b
+ ONE = _b('one')
+ TWO = _b('two')
+ THREE = _b('three')
cache = self._makeOne()
- cache['one'] = self._makePersist(oid='one', state=UPTODATE)
- two = cache['two'] = self._makePersist(oid='two', state=GHOST)
- cache['three'] = self._makePersist(oid='three', state=UPTODATE)
+ cache[ONE] = self._makePersist(oid='one', state=UPTODATE)
+ two = cache[TWO] = self._makePersist(oid='two', state=GHOST)
+ cache[THREE] = self._makePersist(oid='three', state=UPTODATE)
two._p_state = UPTODATE
- cache.mru('two')
+ cache.mru(TWO)
self.assertEqual(cache.ringlen(), 3)
items = cache.lru_items()
self.assertEqual(_len(items), 3)
- self.assertEqual(items[0][0], 'one')
- self.assertEqual(items[1][0], 'three')
- self.assertEqual(items[2][0], 'two')
+ self.assertEqual(items[0][0], ONE)
+ self.assertEqual(items[1][0], THREE)
+ self.assertEqual(items[2][0], TWO)
def test_mru_first(self):
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
+ ONE = _b('one')
+ TWO = _b('two')
+ THREE = _b('three')
cache = self._makeOne()
- cache['one'] = self._makePersist(oid='one', state=UPTODATE)
- cache['two'] = self._makePersist(oid='two', state=UPTODATE)
- cache['three'] = self._makePersist(oid='three', state=UPTODATE)
+ cache[ONE] = self._makePersist(oid='one', state=UPTODATE)
+ cache[TWO] = self._makePersist(oid='two', state=UPTODATE)
+ cache[THREE] = self._makePersist(oid='three', state=UPTODATE)
- cache.mru('one')
+ cache.mru(ONE)
self.assertEqual(cache.ringlen(), 3)
items = cache.lru_items()
self.assertEqual(_len(items), 3)
- self.assertEqual(items[0][0], 'two')
- self.assertEqual(items[1][0], 'three')
- self.assertEqual(items[2][0], 'one')
+ self.assertEqual(items[0][0], TWO)
+ self.assertEqual(items[1][0], THREE)
+ self.assertEqual(items[2][0], ONE)
def test_mru_last(self):
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
+ ONE = _b('one')
+ TWO = _b('two')
+ THREE = _b('three')
cache = self._makeOne()
- cache['one'] = self._makePersist(oid='one', state=UPTODATE)
- cache['two'] = self._makePersist(oid='two', state=UPTODATE)
- cache['three'] = self._makePersist(oid='three', state=UPTODATE)
+ cache[ONE] = self._makePersist(oid='one', state=UPTODATE)
+ cache[TWO] = self._makePersist(oid='two', state=UPTODATE)
+ cache[THREE] = self._makePersist(oid='three', state=UPTODATE)
- cache.mru('three')
+ cache.mru(THREE)
self.assertEqual(cache.ringlen(), 3)
items = cache.lru_items()
self.assertEqual(_len(items), 3)
- self.assertEqual(items[0][0], 'one')
- self.assertEqual(items[1][0], 'two')
- self.assertEqual(items[2][0], 'three')
+ self.assertEqual(items[0][0], ONE)
+ self.assertEqual(items[1][0], TWO)
+ self.assertEqual(items[2][0], THREE)
def test_incrgc_simple(self):
import gc
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
cache = self._makeOne()
oids = []
for i in range(100):
- oid = 'oid_%04d' % i
+ oid = _b('oid_%04d' % i)
oids.append(oid)
cache[oid] = self._makePersist(oid=oid, state=UPTODATE)
self.assertEqual(cache.cache_non_ghost_count, 100)
@@ -335,16 +376,16 @@
self.assertEqual(cache.cache_non_ghost_count, 10)
items = cache.lru_items()
self.assertEqual(_len(items), 10)
- self.assertEqual(items[0][0], 'oid_0090')
- self.assertEqual(items[1][0], 'oid_0091')
- self.assertEqual(items[2][0], 'oid_0092')
- self.assertEqual(items[3][0], 'oid_0093')
- self.assertEqual(items[4][0], 'oid_0094')
- self.assertEqual(items[5][0], 'oid_0095')
- self.assertEqual(items[6][0], 'oid_0096')
- self.assertEqual(items[7][0], 'oid_0097')
- self.assertEqual(items[8][0], 'oid_0098')
- self.assertEqual(items[9][0], 'oid_0099')
+ self.assertEqual(items[0][0], _b('oid_0090'))
+ self.assertEqual(items[1][0], _b('oid_0091'))
+ self.assertEqual(items[2][0], _b('oid_0092'))
+ self.assertEqual(items[3][0], _b('oid_0093'))
+ self.assertEqual(items[4][0], _b('oid_0094'))
+ self.assertEqual(items[5][0], _b('oid_0095'))
+ self.assertEqual(items[6][0], _b('oid_0096'))
+ self.assertEqual(items[7][0], _b('oid_0097'))
+ self.assertEqual(items[8][0], _b('oid_0098'))
+ self.assertEqual(items[9][0], _b('oid_0099'))
for oid in oids[:90]:
self.failUnless(cache.get(oid) is None)
@@ -354,11 +395,12 @@
def test_incrgc_w_smaller_drain_resistance(self):
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
cache = self._makeOne()
cache.drain_resistance = 2
oids = []
for i in range(100):
- oid = 'oid_%04d' % i
+ oid = _b('oid_%04d' % i)
oids.append(oid)
cache[oid] = self._makePersist(oid=oid, state=UPTODATE)
self.assertEqual(cache.cache_non_ghost_count, 100)
@@ -369,12 +411,13 @@
def test_incrgc_w_larger_drain_resistance(self):
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
cache = self._makeOne()
cache.drain_resistance = 2
cache.target_size = 90
oids = []
for i in range(100):
- oid = 'oid_%04d' % i
+ oid = _b('oid_%04d' % i)
oids.append(oid)
cache[oid] = self._makePersist(oid=oid, state=UPTODATE)
self.assertEqual(cache.cache_non_ghost_count, 100)
@@ -386,10 +429,11 @@
def test_full_sweep(self):
import gc
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
cache = self._makeOne()
oids = []
for i in range(100):
- oid = 'oid_%04d' % i
+ oid = _b('oid_%04d' % i)
oids.append(oid)
cache[oid] = self._makePersist(oid=oid, state=UPTODATE)
self.assertEqual(cache.cache_non_ghost_count, 100)
@@ -406,10 +450,11 @@
def test_minimize(self):
import gc
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
cache = self._makeOne()
oids = []
for i in range(100):
- oid = 'oid_%04d' % i
+ oid = _b('oid_%04d' % i)
oids.append(oid)
cache[oid] = self._makePersist(oid=oid, state=UPTODATE)
self.assertEqual(cache.cache_non_ghost_count, 100)
@@ -423,185 +468,226 @@
self.failUnless(cache.get(oid) is None)
def test_new_ghost_non_persistent_object(self):
+ from persistent._compat import _b
cache = self._makeOne()
- self.assertRaises(AttributeError, cache.new_ghost, '123', object())
+ self.assertRaises(AttributeError, cache.new_ghost, _b('123'), object())
def test_new_ghost_obj_already_has_oid(self):
+ from persistent._compat import _b
from persistent.interfaces import GHOST
- candidate = self._makePersist(oid='123', state=GHOST)
+ candidate = self._makePersist(oid=_b('123'), state=GHOST)
cache = self._makeOne()
- self.assertRaises(ValueError, cache.new_ghost, '123', candidate)
+ self.assertRaises(ValueError, cache.new_ghost, _b('123'), candidate)
def test_new_ghost_obj_already_has_jar(self):
+ from persistent._compat import _b
class Dummy(object):
_p_oid = None
_p_jar = object()
cache = self._makeOne()
candidate = self._makePersist(oid=None, jar=object())
- self.assertRaises(ValueError, cache.new_ghost, '123', candidate)
+ self.assertRaises(ValueError, cache.new_ghost, _b('123'), candidate)
def test_new_ghost_obj_already_in_cache(self):
+ from persistent._compat import _b
+ KEY = _b('123')
cache = self._makeOne()
candidate = self._makePersist(oid=None, jar=None)
- cache['123'] = candidate
- self.assertRaises(KeyError, cache.new_ghost, '123', candidate)
+ cache[KEY] = candidate
+ self.assertRaises(KeyError, cache.new_ghost, KEY, candidate)
def test_new_ghost_success_already_ghost(self):
from persistent.interfaces import GHOST
+ from persistent._compat import _b
+ KEY = _b('123')
cache = self._makeOne()
candidate = self._makePersist(oid=None, jar=None)
- cache.new_ghost('123', candidate)
- self.failUnless(cache.get('123') is candidate)
- self.assertEqual(candidate._p_oid, '123')
+ cache.new_ghost(KEY, candidate)
+ self.failUnless(cache.get(KEY) is candidate)
+ self.assertEqual(candidate._p_oid, KEY)
self.assertEqual(candidate._p_jar, cache.jar)
self.assertEqual(candidate._p_state, GHOST)
def test_new_ghost_success_not_already_ghost(self):
from persistent.interfaces import GHOST
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
+ KEY = _b('123')
cache = self._makeOne()
candidate = self._makePersist(oid=None, jar=None, state=UPTODATE)
- cache.new_ghost('123', candidate)
- self.failUnless(cache.get('123') is candidate)
- self.assertEqual(candidate._p_oid, '123')
+ cache.new_ghost(KEY, candidate)
+ self.failUnless(cache.get(KEY) is candidate)
+ self.assertEqual(candidate._p_oid, KEY)
self.assertEqual(candidate._p_jar, cache.jar)
self.assertEqual(candidate._p_state, GHOST)
def test_new_ghost_w_pclass_non_ghost(self):
+ from persistent._compat import _b
+ KEY = _b('123')
class Pclass(object):
_p_oid = None
_p_jar = None
cache = self._makeOne()
- cache.new_ghost('123', Pclass)
- self.failUnless(cache.get('123') is Pclass)
- self.failUnless(cache.persistent_classes['123'] is Pclass)
- self.assertEqual(Pclass._p_oid, '123')
+ cache.new_ghost(KEY, Pclass)
+ self.failUnless(cache.get(KEY) is Pclass)
+ self.failUnless(cache.persistent_classes[KEY] is Pclass)
+ self.assertEqual(Pclass._p_oid, KEY)
self.assertEqual(Pclass._p_jar, cache.jar)
def test_new_ghost_w_pclass_ghost(self):
+ from persistent._compat import _b
+ KEY = _b('123')
class Pclass(object):
_p_oid = None
_p_jar = None
cache = self._makeOne()
- cache.new_ghost('123', Pclass)
- self.failUnless(cache.get('123') is Pclass)
- self.failUnless(cache.persistent_classes['123'] is Pclass)
- self.assertEqual(Pclass._p_oid, '123')
+ cache.new_ghost(KEY, Pclass)
+ self.failUnless(cache.get(KEY) is Pclass)
+ self.failUnless(cache.persistent_classes[KEY] is Pclass)
+ self.assertEqual(Pclass._p_oid, KEY)
self.assertEqual(Pclass._p_jar, cache.jar)
def test_reify_miss_single(self):
+ from persistent._compat import _b
+ KEY = _b('123')
cache = self._makeOne()
- self.assertRaises(KeyError, cache.reify, '123')
+ self.assertRaises(KeyError, cache.reify, KEY)
def test_reify_miss_multiple(self):
+ from persistent._compat import _b
+ KEY = _b('123')
+ KEY2 = _b('456')
cache = self._makeOne()
- self.assertRaises(KeyError, cache.reify, ['123', '456'])
+ self.assertRaises(KeyError, cache.reify, [KEY, KEY2])
def test_reify_hit_single_ghost(self):
from persistent.interfaces import GHOST
+ from persistent._compat import _b
+ KEY = _b('123')
from persistent.interfaces import UPTODATE
cache = self._makeOne()
- candidate = self._makePersist(oid='123', jar=cache.jar, state=GHOST)
- cache['123'] = candidate
+ candidate = self._makePersist(oid=KEY, jar=cache.jar, state=GHOST)
+ cache[KEY] = candidate
self.assertEqual(cache.ringlen(), 0)
- cache.reify('123')
+ cache.reify(KEY)
self.assertEqual(cache.ringlen(), 1)
items = cache.lru_items()
- self.assertEqual(items[0][0], '123')
+ self.assertEqual(items[0][0], KEY)
self.failUnless(items[0][1] is candidate)
self.assertEqual(candidate._p_state, UPTODATE)
def test_reify_hit_single_non_ghost(self):
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
+ KEY = _b('123')
cache = self._makeOne()
- candidate = self._makePersist(oid='123', jar=cache.jar, state=UPTODATE)
- cache['123'] = candidate
+ candidate = self._makePersist(oid=KEY, jar=cache.jar, state=UPTODATE)
+ cache[KEY] = candidate
self.assertEqual(cache.ringlen(), 1)
- cache.reify('123')
+ cache.reify(KEY)
self.assertEqual(cache.ringlen(), 1)
self.assertEqual(candidate._p_state, UPTODATE)
def test_reify_hit_multiple_mixed(self):
from persistent.interfaces import GHOST
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
+ KEY = _b('123')
+ KEY2 = _b('456')
cache = self._makeOne()
- c1 = self._makePersist(oid='123', jar=cache.jar, state=GHOST)
- cache['123'] = c1
- c2 = self._makePersist(oid='456', jar=cache.jar, state=UPTODATE)
- cache['456'] = c2
+ c1 = self._makePersist(oid=KEY, jar=cache.jar, state=GHOST)
+ cache[KEY] = c1
+ c2 = self._makePersist(oid=KEY2, jar=cache.jar, state=UPTODATE)
+ cache[KEY2] = c2
self.assertEqual(cache.ringlen(), 1)
- cache.reify(['123', '456'])
+ cache.reify([KEY, KEY2])
self.assertEqual(cache.ringlen(), 2)
self.assertEqual(c1._p_state, UPTODATE)
self.assertEqual(c2._p_state, UPTODATE)
def test_invalidate_miss_single(self):
+ from persistent._compat import _b
+ KEY = _b('123')
cache = self._makeOne()
- cache.invalidate('123') # doesn't raise
+ cache.invalidate(KEY) # doesn't raise
def test_invalidate_miss_multiple(self):
+ from persistent._compat import _b
+ KEY = _b('123')
+ KEY2 = _b('456')
cache = self._makeOne()
- cache.invalidate(['123', '456']) # doesn't raise
+ cache.invalidate([KEY, KEY2]) # doesn't raise
def test_invalidate_hit_single_ghost(self):
from persistent.interfaces import GHOST
+ from persistent._compat import _b
+ KEY = _b('123')
cache = self._makeOne()
candidate = self._makePersist(oid='123', jar=cache.jar, state=GHOST)
- cache['123'] = candidate
+ cache[KEY] = candidate
self.assertEqual(cache.ringlen(), 0)
- cache.invalidate('123')
+ cache.invalidate(KEY)
self.assertEqual(cache.ringlen(), 0)
self.assertEqual(candidate._p_state, GHOST)
def test_invalidate_hit_single_non_ghost(self):
from persistent.interfaces import GHOST
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
+ KEY = _b('123')
cache = self._makeOne()
candidate = self._makePersist(oid='123', jar=cache.jar, state=UPTODATE)
- cache['123'] = candidate
+ cache[KEY] = candidate
self.assertEqual(cache.ringlen(), 1)
- cache.invalidate('123')
+ cache.invalidate(KEY)
self.assertEqual(cache.ringlen(), 0)
self.assertEqual(candidate._p_state, GHOST)
def test_invalidate_hit_multiple_mixed(self):
from persistent.interfaces import GHOST
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
+ KEY = _b('123')
+ KEY2 = _b('456')
cache = self._makeOne()
- c1 = self._makePersist(oid='123', jar=cache.jar, state=GHOST)
- cache['123'] = c1
- c2 = self._makePersist(oid='456', jar=cache.jar, state=UPTODATE)
- cache['456'] = c2
+ c1 = self._makePersist(oid=KEY, jar=cache.jar, state=GHOST)
+ cache[KEY] = c1
+ c2 = self._makePersist(oid=KEY2, jar=cache.jar, state=UPTODATE)
+ cache[KEY2] = c2
self.assertEqual(cache.ringlen(), 1)
- cache.invalidate(['123', '456'])
+ cache.invalidate([KEY, KEY2])
self.assertEqual(cache.ringlen(), 0)
self.assertEqual(c1._p_state, GHOST)
self.assertEqual(c2._p_state, GHOST)
def test_invalidate_hit_pclass(self):
+ from persistent._compat import _b
+ KEY = _b('123')
class Pclass(object):
_p_oid = None
_p_jar = None
cache = self._makeOne()
- cache['123'] = Pclass
- self.failUnless(cache.persistent_classes['123'] is Pclass)
- cache.invalidate('123')
- self.failIf('123' in cache.persistent_classes)
+ cache[KEY] = Pclass
+ self.failUnless(cache.persistent_classes[KEY] is Pclass)
+ cache.invalidate(KEY)
+ self.failIf(KEY in cache.persistent_classes)
def test_debug_info_w_persistent_class(self):
import gc
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
+ KEY = _b('pclass')
class pclass(object):
pass
cache = self._makeOne()
pclass._p_state = UPTODATE
- cache['pclass'] = pclass
+ cache[KEY] = pclass
info = cache.debug_info()
self.assertEqual(len(info), 1)
oid, refc, typ, state = info[0]
- self.assertEqual(oid, 'pclass')
+ self.assertEqual(oid, KEY)
self.assertEqual(refc, len(gc.get_referents(pclass)))
self.assertEqual(typ, 'type')
self.assertEqual(state, UPTODATE)
@@ -609,15 +695,17 @@
def test_debug_info_w_normal_object(self):
import gc
from persistent.interfaces import UPTODATE
+ from persistent._compat import _b
+ KEY = _b('uptodate')
cache = self._makeOne()
uptodate = self._makePersist(state=UPTODATE)
- cache['uptodate'] = uptodate
+ cache[KEY] = uptodate
info = cache.debug_info()
self.assertEqual(len(info), 1)
oid, refc, typ, state = info[0]
- self.assertEqual(oid, 'uptodate')
+ self.assertEqual(oid, KEY)
self.assertEqual(refc, len(gc.get_referents(uptodate)))
self.assertEqual(typ, 'DummyPersistent')
self.assertEqual(state, UPTODATE)
@@ -626,15 +714,17 @@
def test_debug_info_w_ghost(self):
import gc
from persistent.interfaces import GHOST
+ from persistent._compat import _b
+ KEY = _b('ghost')
cache = self._makeOne()
ghost = self._makePersist(state=GHOST)
- cache['ghost'] = ghost
+ cache[KEY] = ghost
info = cache.debug_info()
self.assertEqual(len(info), 1)
oid, refc, typ, state = info[0]
- self.assertEqual(oid, 'ghost')
+ self.assertEqual(oid, KEY)
self.assertEqual(refc, len(gc.get_referents(ghost)))
self.assertEqual(typ, 'DummyPersistent')
self.assertEqual(state, GHOST)
Modified: persistent/trunk/persistent/tests/test_wref.py
===================================================================
--- persistent/trunk/persistent/tests/test_wref.py 2012-06-29 04:02:31 UTC (rev 127177)
+++ persistent/trunk/persistent/tests/test_wref.py 2012-06-29 04:02:37 UTC (rev 127178)
@@ -177,23 +177,30 @@
def test___setstate___empty(self):
from persistent.wref import WeakRef
+ from persistent._compat import _b
jar = _makeJar()
- key = jar['key'] = _makeTarget(oid='KEY')
+ KEY = _b('KEY')
+ KEY2 = _b('KEY2')
+ KEY3 = _b('KEY3')
+ VALUE = _b('VALUE')
+ VALUE2 = _b('VALUE2')
+ VALUE3 = _b('VALUE3')
+ key = jar[KEY] = _makeTarget(oid=KEY)
key._p_jar = jar
kref = WeakRef(key)
- value = jar['value'] = _makeTarget(oid='VALUE')
+ value = jar[VALUE] = _makeTarget(oid=VALUE)
value._p_jar = jar
- key2 = _makeTarget(oid='KEY2')
+ key2 = _makeTarget(oid=KEY2)
key2._p_jar = jar # not findable
kref2 = WeakRef(key2)
del kref2._v_ob # force a miss
- value2 = jar['value2'] = _makeTarget(oid='VALUE2')
+ value2 = jar[VALUE2] = _makeTarget(oid=VALUE2)
value2._p_jar = jar
- key3 = jar['KEY3'] = _makeTarget(oid='KEY3') # findable
+ key3 = jar[KEY3] = _makeTarget(oid=KEY3) # findable
key3._p_jar = jar
kref3 = WeakRef(key3)
del kref3._v_ob # force a miss, but win in the lookup
- value3 = jar['value3'] = _makeTarget(oid='VALUE3')
+ value3 = jar[VALUE3] = _makeTarget(oid=VALUE3)
value3._p_jar = jar
pwkd = self._makeOne(None)
pwkd.__setstate__({'data':
@@ -308,6 +315,7 @@
def _makeTarget(oid='OID', **kw):
from persistent import Persistent
+ from persistent._compat import _b
class Derived(Persistent):
def __hash__(self):
return hash(self._p_oid)
@@ -318,7 +326,7 @@
derived = Derived()
for k, v in kw.items():
setattr(derived, k, v)
- derived._p_oid = oid
+ derived._p_oid = _b(oid)
return derived
def _makeJar():
More information about the checkins
mailing list