[Zope-Checkins] CVS: Zope/lib/python/App - ApplicationManager.py:1.88.4.1 Extensions.py:1.21.12.1 Product.py:1.63.2.1 Undo.py:1.32.44.1 config.py:1.4.2.1 version_txt.py:1.11.12.1

Chris McDonough chrism@zope.com
Mon, 21 Jul 2003 12:39:19 -0400


Update of /cvs-repository/Zope/lib/python/App
In directory cvs.zope.org:/tmp/cvs-serv17213/lib/python/App

Modified Files:
      Tag: Zope-2_7-branch
	ApplicationManager.py Extensions.py Product.py Undo.py 
	config.py version_txt.py 
Log Message:
Merge changes from HEAD since the release of Zope 2.7a1 into the Zope-2_7-branch in preparation for release of Zope 2.7b1.


=== Zope/lib/python/App/ApplicationManager.py 1.88 => 1.88.4.1 ===
--- Zope/lib/python/App/ApplicationManager.py:1.88	Sat Apr 12 21:56:07 2003
+++ Zope/lib/python/App/ApplicationManager.py	Mon Jul 21 12:35:11 2003
@@ -28,6 +28,7 @@
 from version_txt import version_txt
 from cStringIO import StringIO
 from AccessControl import getSecurityManager
+from Products.PageTemplates.PageTemplateFile import PageTemplateFile
 import zLOG
 import Lifetime
 
@@ -39,7 +40,7 @@
     def locked_in_version(self): return 0
 
 class DatabaseManager(Fake, SimpleItem.Item, Acquisition.Implicit):
-    """Database management"""
+    """Database management (legacy) """
     manage=manage_main=DTMLFile('dtml/dbMain', globals())
     manage_main._setName('manage_main')
     id        ='DatabaseManagement'
@@ -69,6 +70,70 @@
 
 Globals.default__class_init__(DatabaseManager)
 
+class FakeConnection:
+    # Supports the methods of Connection that CacheManager needs
+
+    def __init__(self, db, parent_jar):
+        self._db = db
+        self.version = parent_jar.getVersion()
+
+    def db(self):
+        return self._db
+
+    def getVersion(self):
+        return self.version
+
+class DatabaseChooser (SimpleItem.SimpleItem):
+    """Lets you choose which database to view
+    """
+    meta_type = 'Database Management'
+    name = title = 'Database Management'
+    icon = 'p_/DatabaseManagement_icon'
+    isPrincipiaFolderish = 1
+
+    manage_options=(
+        {'label':'Databases', 'action':'manage_main'},
+        )
+
+    manage_main = PageTemplateFile('www/chooseDatabase.pt', globals())
+
+    def __init__(self, id):
+        self.id = id
+
+    def getDatabaseNames(self):
+        configuration = getConfiguration()
+        names = configuration.dbtab.listDatabaseNames()
+        names.sort()
+        return names
+
+    def __getitem__(self, name):
+        configuration = getConfiguration()
+        db = configuration.dbtab.getDatabase(name=name)
+        m = AltDatabaseManager()
+        m.id = name
+        m._p_jar = FakeConnection(db, self.getPhysicalRoot()._p_jar)
+        return m.__of__(self)
+
+    def __bobo_traverse__(self, request, name):
+        configuration = getConfiguration()
+        if configuration.dbtab.hasDatabase(name):
+            return self[name]
+        return getattr(self, name)
+
+    def tpValues(self):
+        names = self.getDatabaseNames()
+        res = []
+        for name in names:
+            m = AltDatabaseManager()
+            m.id = name
+            # Avoid opening the database just for the tree widget.
+            m._p_jar = None
+            res.append(m.__of__(self))
+        return res
+
+Globals.InitializeClass(DatabaseChooser)
+
+
 class VersionManager(Fake, SimpleItem.Item, Acquisition.Implicit):
     """Version management"""
     manage=manage_main=DTMLFile('dtml/versionManager', globals())
@@ -207,7 +272,7 @@
 
     __roles__=('Manager',)
     isPrincipiaFolderish=1
-    Database= DatabaseManager()
+    Database= DatabaseChooser('Database') #DatabaseManager()
     Versions= VersionManager()
     DebugInfo=DebugManager()
     DavLocks = DavLockManager()
@@ -465,3 +530,11 @@
             self._objects = tuple(lst)
 
         return Folder.objectIds(self, spec)
+
+class AltDatabaseManager(DatabaseManager, CacheManager):
+    """Database management DBTab-style
+    """
+    db_name = ApplicationManager.db_name
+    db_size = ApplicationManager.db_size
+    manage_pack = ApplicationManager.manage_pack
+


=== Zope/lib/python/App/Extensions.py 1.21 => 1.21.12.1 ===
--- Zope/lib/python/App/Extensions.py:1.21	Tue Feb 11 12:17:04 2003
+++ Zope/lib/python/App/Extensions.py	Mon Jul 21 12:35:11 2003
@@ -17,7 +17,7 @@
 $Id$'''
 __version__='$Revision$'[11:-2]
 
-import os, zlib, rotor, imp
+import os, zlib, imp
 import Products
 path_split=os.path.split
 path_join=os.path.join
@@ -110,6 +110,7 @@
 
     base, ext = os.path.splitext(module)
     if ext in ('py', 'pyp', 'pyc'):
+        # XXX should never happen; splitext() keeps '.' with the extension
         p = base
     else:
         p = module
@@ -128,6 +129,7 @@
         m=binmod.__dict__
 
     elif ext=='.pyp':
+        import rotor
         prod_id=module.split('.', 1)[0]
         data=zlib.decompress(
             rotor.newrotor(prod_id +' shshsh').decrypt(open(p,'rb').read())


=== Zope/lib/python/App/Product.py 1.63 => 1.63.2.1 ===
--- Zope/lib/python/App/Product.py:1.63	Mon Jun  9 10:22:57 2003
+++ Zope/lib/python/App/Product.py	Mon Jul 21 12:35:11 2003
@@ -34,7 +34,7 @@
 #   on restart if there is still a product directory.
 
 
-import os, re, zlib, marshal, rotor, cPickle
+import os, re, zlib, marshal, cPickle
 from cgi import escape
 from urllib import quote
 
@@ -197,6 +197,7 @@
 
         id=self.id
 
+        import rotor
         import tar
         rot=rotor.newrotor(id+' shshsh')
         ar=tar.tgzarchive("%s-%s" % (id, self.version))
@@ -437,7 +438,9 @@
     def __init__(self, f, rot):
         self._c=zlib.decompressobj()
         self._b=''
-        if type(rot) is type(''): rot=rotor.newrotor(rot)
+        if isinstance(rot, str):
+            import rotor
+            rot=rotor.newrotor(rot)
         self._rot=rot
         rot.decrypt('')
         self._f=f


=== Zope/lib/python/App/Undo.py 1.32 => 1.32.44.1 ===
--- Zope/lib/python/App/Undo.py:1.32	Thu Oct  3 14:28:54 2002
+++ Zope/lib/python/App/Undo.py	Mon Jul 21 12:35:11 2003
@@ -16,6 +16,7 @@
 
 import base64
 
+from Acquisition import aq_base, aq_parent, aq_inner
 from AccessControl import getSecurityManager
 from DateTime import DateTime
 import Globals, ExtensionClass
@@ -86,11 +87,17 @@
             path=''
         if path: spec['user_name']=Prefix(path)
 
-        # We also only want to undo things done here
-        opath='/'.join(self.getPhysicalPath())
+        if getattr(aq_parent(aq_inner(self)), '_p_jar', None) == self._p_jar:
+            # We only want to undo things done here (and not in mounted
+            # databases)
+            opath='/'.join(self.getPhysicalPath())
+        else:
+            # Special case: at the root of a database,
+            # allow undo of any path.
+            opath = None
         if opath: spec['description']=Prefix(opath)
 
-        r=Globals.UndoManager.undoInfo(
+        r = self._p_jar.db().undoInfo(
             first_transaction, last_transaction, spec)
 
         encode = base64.encodestring
@@ -114,7 +121,8 @@
     def manage_undo_transactions(self, transaction_info=(), REQUEST=None):
         """
         """
-        undo=Globals.UndoManager.undo
+        undo=self._p_jar.db().undo
+
         for tid in transaction_info:
             tid=tid.split()
             if tid:


=== Zope/lib/python/App/config.py 1.4 => 1.4.2.1 ===
--- Zope/lib/python/App/config.py:1.4	Mon May 19 09:09:49 2003
+++ Zope/lib/python/App/config.py	Mon Jul 21 12:35:11 2003
@@ -71,14 +71,11 @@
 class DefaultConfiguration:
     def __init__(self):
         from App import FindHomes
-        from Zope.Startup.datatypes import getDefaultDatabaseFactory
         self.clienthome = FindHomes.CLIENT_HOME
         self.instancehome = FindHomes.INSTANCE_HOME
         self.softwarehome = FindHomes.SOFTWARE_HOME
         self.zopehome = FindHomes.ZOPE_HOME
         self.debug_mode = True
-        self.db_mount_tab = {'/':'main'}
-        self.db_name_tab = {'main':getDefaultDatabaseFactory(self)}
 
 
     


=== Zope/lib/python/App/version_txt.py 1.11 => 1.11.12.1 ===
--- Zope/lib/python/App/version_txt.py:1.11	Thu Feb 13 10:55:06 2003
+++ Zope/lib/python/App/version_txt.py	Mon Jul 21 12:35:11 2003
@@ -36,7 +36,7 @@
             '\.(?P<minor>[0-9]+)\.(?P<micro>[0-9]+)'
             '(?P<status>[A-Za-z]+)?(?P<release>[0-9]+)?')
         try:
-            s = open(fn).read()
+            s = open(fn).read().strip()
         except IOError:
             ss = 'unreleased version'
             _zope_version = (-1, -1, -1, '', -1)