SVN: ZODB/trunk/src/ New Feature:

Jim Fulton <[email protected]>
Newsgroups gmane.comp.python.zope.zodb.cvs
Message-ID <[email protected]>
Log message for revision 112425:
  New Feature:
    The filestorage packer configuration option noe accepts calues of
    the form ``modname:expression``, allowing the use of packer
    factories with options.
  

Changed:
  U   ZODB/trunk/src/CHANGES.txt
  U   ZODB/trunk/src/ZODB/FileStorage/zconfig.txt
  U   ZODB/trunk/src/ZODB/component.xml
  U   ZODB/trunk/src/ZODB/config.py

-=-
Modified: ZODB/trunk/src/CHANGES.txt
===================================================================
--- ZODB/trunk/src/CHANGES.txt	2010-05-17 17:54:16 UTC (rev 112424)
+++ ZODB/trunk/src/CHANGES.txt	2010-05-17 18:23:26 UTC (rev 112425)
@@ -41,6 +41,10 @@
   index file if an output file name is given via the --output/-o
   option.
 
+- The filestorage packer configuration option noe accepts calues of
+  the form ``modname:expression``, allowing the use of packer
+  factories with options.
+
 Bugs Fixed
 ----------
 

Modified: ZODB/trunk/src/ZODB/FileStorage/zconfig.txt
===================================================================
--- ZODB/trunk/src/ZODB/FileStorage/zconfig.txt	2010-05-17 17:54:16 UTC (rev 112424)
+++ ZODB/trunk/src/ZODB/FileStorage/zconfig.txt	2010-05-17 18:23:26 UTC (rev 112425)
@@ -134,6 +134,33 @@
 
     >>> fs.close()
 
+    If the packer contains a ':', then the text after the first ':' is
+    interpreted as an expression. This is handy to pass limited
+    configuration information to the packer:
+
+    >>> def packer_factory(name):
+    ...     def packer(storage, referencesf, stop, gc):
+    ...         print repr(name), referencesf, storage is fs, gc,
+    ...         print storage.pack_keep_old
+    ...     return packer
+    >>> ZODB.FileStorage.config_demo_printing_packer_factory = packer_factory
+
+    >>> fs = ZODB.config.storageFromString("""
+    ... <filestorage>
+    ...     path my.fs
+    ...     packer ZODB.FileStorage:config_demo_printing_packer_factory('bob ')
+    ... </filestorage>
+    ... """)
+
+    >>> import time
+    >>> db = ZODB.DB(fs) # writes object 0
+    >>> fs.pack(time.time(), 42)
+    'bob ' 42 True True True
+
+    >>> fs.close()
+
+
+
 pack-gc
     If false, then no garbage collection will be performed when
     packing.  This can make packing go much faster and can avoid

Modified: ZODB/trunk/src/ZODB/component.xml
===================================================================
--- ZODB/trunk/src/ZODB/component.xml	2010-05-17 17:54:16 UTC (rev 112424)
+++ ZODB/trunk/src/ZODB/component.xml	2010-05-17 18:23:26 UTC (rev 112425)
@@ -44,7 +44,7 @@
         raised.
       </description>
     </key>
-    <key name="packer" datatype="dotted-name">
+    <key name="packer" datatype="string">
       <description>
         The dotted name (dotted module name and object name) of a
         packer object.  This is used to provide an alternative pack

Modified: ZODB/trunk/src/ZODB/config.py
===================================================================
--- ZODB/trunk/src/ZODB/config.py	2010-05-17 17:54:16 UTC (rev 112424)
+++ ZODB/trunk/src/ZODB/config.py	2010-05-17 18:23:26 UTC (rev 112425)
@@ -158,8 +158,15 @@
         config = self.config
         options = {}
         if getattr(config, 'packer', None):
-            m, name = config.packer.rsplit('.', 1)
-            options['packer'] = getattr(__import__(m, {}, {}, ['*']), name)
+            packer = config.packer
+            if ':' in packer:
+                m, expr = packer.split(':', 1)
+                m = __import__(m, {}, {}, ['*'])
+                options['packer'] = eval(expr, m.__dict__)
+            else:
+                m, name = config.packer.rsplit('.', 1)
+                m = __import__(m, {}, {}, ['*'])
+                options['packer'] = getattr(m, name)
 
         for name in ('blob_dir', 'create', 'read_only', 'quota', 'pack_gc',
                      'pack_keep_old'):
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.