SVN: ZODB/branches/tseaver-python_picklecache-2/src/persistent/ Allow deleting _p_oid only if None.
Tres Seaver <[email protected]> Wed, 16 Feb 2011 00:04:37 -0500 (EST)
| Newsgroups | gmane.comp.python.zope.zodb.cvs |
|---|---|
| Message-ID | <[email protected]> |
Log message for revision 120368:
Allow deleting _p_oid only if None.
Changed:
U ZODB/branches/tseaver-python_picklecache-2/src/persistent/pyPersistence.py
U ZODB/branches/tseaver-python_picklecache-2/src/persistent/tests/test_pyPersistence.py
-=-
Modified: ZODB/branches/tseaver-python_picklecache-2/src/persistent/pyPersistence.py
===================================================================
--- ZODB/branches/tseaver-python_picklecache-2/src/persistent/pyPersistence.py 2011-02-16 05:04:35 UTC (rev 120367)
+++ ZODB/branches/tseaver-python_picklecache-2/src/persistent/pyPersistence.py 2011-02-16 05:04:36 UTC (rev 120368)
@@ -107,8 +107,12 @@
raise ValueError('Already assigned an OID')
self.__oid = value
- _p_oid = property(_get_oid, _set_oid)
+ def _del_oid(self):
+ if self.__oid is not None:
+ raise ValueError('Cannot delete OID once assigned')
+ _p_oid = property(_get_oid, _set_oid, _del_oid)
+
# _p_serial: see IPersistent.
def _get_serial(self):
if self.__serial is not None:
Modified: ZODB/branches/tseaver-python_picklecache-2/src/persistent/tests/test_pyPersistence.py
===================================================================
--- ZODB/branches/tseaver-python_picklecache-2/src/persistent/tests/test_pyPersistence.py 2011-02-16 05:04:35 UTC (rev 120367)
+++ ZODB/branches/tseaver-python_picklecache-2/src/persistent/tests/test_pyPersistence.py 2011-02-16 05:04:36 UTC (rev 120368)
@@ -117,6 +117,19 @@
inst._p_oid = OID2
self.assertRaises(ValueError, _test)
+ def test_delete_p_oid_wo_real_oid(self):
+ inst = self._makeOne()
+ del inst._p_oid
+ self.assertEqual(inst._p_oid, None)
+
+ def test_delete_p_oid_w_real_oid(self):
+ OID = '1' * 8
+ inst = self._makeOne()
+ inst._p_oid = OID
+ def _test():
+ del inst._p_oid
+ self.assertRaises(ValueError, _test)
+
def test_assign_p_serial_w_invalid_serial(self):
inst = self._makeOne()
def _test():