[Zodb-checkins] CVS: StandaloneZODB/bsddb3Storage/bsddb3Storage - BerkeleyBase.py:1.13

Barry Warsaw barry@wooz.org
Fri, 2 Nov 2001 12:40:11 -0500


Update of /cvs-repository/StandaloneZODB/bsddb3Storage/bsddb3Storage
In directory cvs.zope.org:/tmp/cvs-serv26772

Modified Files:
	BerkeleyBase.py 
Log Message:
__init__(): Add back the ability to pass in your own DBEnv object for
the environment.  No type checking is done, except that if env is not
a string or not None, then it's the caller's responsibility to pass in
a valid DBEnv.


=== StandaloneZODB/bsddb3Storage/bsddb3Storage/BerkeleyBase.py 1.12 => 1.13 ===
         getName() method.
 
-        Optional env is the database environment name, essentially the name of
-        a directory into which BerkeleyDB will store all its supporting files.
-        If env is a non-empty string, it is passed directly to DbEnv().open(),
-        which in turn is passed to the BerkeleyDB function
+        Optional env, if given, is either a string or a DBEnv object.  If it
+        is a non-empty string, it names the database environment,
+        i.e. essentially the name of a directory into which BerkeleyDB will
+        store all its supporting files.  It is passed directly to
+        DbEnv().open(), which in turn is passed to the BerkeleyDB function
         DBEnv->open() as the db_home parameter.
 
+        Note that if you want to customize the underlying Berkeley DB
+        parameters, this directory can contain a DB_CONFIG file as per the
+        Sleepycat documentation.
+
+        If env is given and it is not a string, it must be an opened DBEnv
+        object as returned by bsddb3.db.DBEnv().  In this case, it is your
+        responsibility to create the object and open it with the proper
+        flags.
+
         Optional prefix is the string to prepend to name when passed to
         DB.open() as the dbname parameter.  IOW, prefix+name is passed to the
         BerkeleyDb function DB->open() as the database parameter.  It defaults
@@ -59,19 +69,14 @@
 
         if env == '':
             raise TypeError, 'environment name is empty'
-        elif not isinstance(env, StringType):
-            # We used to test isinstance(env, db.DBEnv) but that isn't a valid
-            # test since db.DBEnv() is a factory function, not a class.
-            # AFAIK, there's no way to pass an existing DBEnv into this
-            # constructor.  Note that the most likely reason for wanting to do
-            # this is to increase the lock size of the environment.  Use a
-            # DB_CONFIG file for that instead (see www.sleepycat.com).
-            raise TypeError, 'env must be a string: %s' % env
+        elif isinstance(env, StringType):
+            self._env = env_from_string(env)
+        else:
+            self._env = env
 
         BaseStorage.__init__(self, name)
 
         # Initialize a few other things
-        self._env = env_from_string(env)
         self._prefix = prefix
         self._commitlog = None
         # Give the subclasses a chance to interpose into the database setup