[Zodb-checkins] SVN: ZODB/trunk/ Fixed bug 127182: Blobs were not
intended to be subclasses, now we're actively
Christian Theune
ct at gocept.com
Fri Sep 21 02:36:42 EDT 2007
Log message for revision 79780:
Fixed bug 127182: Blobs were not intended to be subclasses, now we're actively
preventing it.
Changed:
U ZODB/trunk/NEWS.txt
U ZODB/trunk/src/ZODB/blob.py
U ZODB/trunk/src/ZODB/tests/blob_basic.txt
-=-
Modified: ZODB/trunk/NEWS.txt
===================================================================
--- ZODB/trunk/NEWS.txt 2007-09-21 05:55:02 UTC (rev 79779)
+++ ZODB/trunk/NEWS.txt 2007-09-21 06:36:41 UTC (rev 79780)
@@ -28,6 +28,8 @@
Blobs
-----
+- (3.9.0a1) Fixed bug #127182: Blobs were subclassable which was not desired.
+
- (3.9.0a1) Fixed bug #126007: tpc_abort had untested code path that was
broken.
Modified: ZODB/trunk/src/ZODB/blob.py
===================================================================
--- ZODB/trunk/src/ZODB/blob.py 2007-09-21 05:55:02 UTC (rev 79779)
+++ ZODB/trunk/src/ZODB/blob.py 2007-09-21 06:36:41 UTC (rev 79780)
@@ -60,14 +60,20 @@
_p_blob_committed = None # Filename of the committed data
readers = writers = None
+
+ def __init__(self):
+ # Raise exception if Blobs are getting subclassed
+ # refer to ZODB-Bug No.127182 by Jim Fulton on 2007-07-20
+ if (self.__class__ is not Blob):
+ raise TypeError('Blobs do not support subclassing.')
+ self.__setstate__()
+
def __setstate__(self, state=None):
- # We use lists here because it will allow is to add and remove
+ # we use lists here because it will allow us to add and remove
# atomically
self.readers = []
self.writers = []
- __init__ = __setstate__
-
def __getstate__(self):
return None
Modified: ZODB/trunk/src/ZODB/tests/blob_basic.txt
===================================================================
--- ZODB/trunk/src/ZODB/tests/blob_basic.txt 2007-09-21 05:55:02 UTC (rev 79779)
+++ ZODB/trunk/src/ZODB/tests/blob_basic.txt 2007-09-21 06:36:41 UTC (rev 79780)
@@ -160,3 +160,16 @@
>>> import transaction
>>> transaction.get().abort()
+
+Subclassing Blobs
+-----------------
+
+Blobs are not subclassable::
+
+ >>> class SubBlob(Blob):
+ ... pass
+ >>> my_sub_blob = SubBlob()
+ Traceback (most recent call last):
+ ...
+ TypeError: Blobs do not support subclassing.
+
More information about the Zodb-checkins
mailing list