[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