[Checkins] SVN: zamplugin.control/ Move implementation form private repos to svn.zope.org

Roger Ineichen roger at projekt01.ch
Sat Feb 16 11:31:36 EST 2008


Log message for revision 83918:
  Move implementation form private repos to svn.zope.org

Changed:
  A   zamplugin.control/branches/
  A   zamplugin.control/tags/
  A   zamplugin.control/trunk/
  A   zamplugin.control/trunk/CHANGES.txt
  A   zamplugin.control/trunk/README.txt
  A   zamplugin.control/trunk/bootstrap.py
  A   zamplugin.control/trunk/buildout.cfg
  A   zamplugin.control/trunk/externals/
  A   zamplugin.control/trunk/setup.py
  A   zamplugin.control/trunk/src/
  A   zamplugin.control/trunk/src/zamplugin/
  A   zamplugin.control/trunk/src/zamplugin/__init__.py
  A   zamplugin.control/trunk/src/zamplugin/control/
  A   zamplugin.control/trunk/src/zamplugin/control/README.txt
  A   zamplugin.control/trunk/src/zamplugin/control/__init__.py
  A   zamplugin.control/trunk/src/zamplugin/control/applicationcontrol.py
  A   zamplugin.control/trunk/src/zamplugin/control/browser/
  A   zamplugin.control/trunk/src/zamplugin/control/browser/__init__.py
  A   zamplugin.control/trunk/src/zamplugin/control/browser/configure.zcml
  A   zamplugin.control/trunk/src/zamplugin/control/browser/generation.py
  A   zamplugin.control/trunk/src/zamplugin/control/browser/generation_details.pt
  A   zamplugin.control/trunk/src/zamplugin/control/browser/generations.pt
  A   zamplugin.control/trunk/src/zamplugin/control/browser/runtimeinfo.pt
  A   zamplugin.control/trunk/src/zamplugin/control/browser/runtimeinfo.py
  A   zamplugin.control/trunk/src/zamplugin/control/browser/servercontrol.pt
  A   zamplugin.control/trunk/src/zamplugin/control/browser/servercontrol.py
  A   zamplugin.control/trunk/src/zamplugin/control/browser/zodbcontrol.pt
  A   zamplugin.control/trunk/src/zamplugin/control/browser/zodbcontrol.py
  A   zamplugin.control/trunk/src/zamplugin/control/configure.zcml
  A   zamplugin.control/trunk/src/zamplugin/control/ftesting.zcml
  A   zamplugin.control/trunk/src/zamplugin/control/menu.py
  A   zamplugin.control/trunk/src/zamplugin/control/menu.zcml
  A   zamplugin.control/trunk/src/zamplugin/control/namespace.py
  A   zamplugin.control/trunk/src/zamplugin/control/plugin.py
  A   zamplugin.control/trunk/src/zamplugin/control/plugin.zcml
  A   zamplugin.control/trunk/src/zamplugin/control/tests.py

-=-
Added: zamplugin.control/trunk/CHANGES.txt
===================================================================
--- zamplugin.control/trunk/CHANGES.txt	                        (rev 0)
+++ zamplugin.control/trunk/CHANGES.txt	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,8 @@
+=======
+CHANGES
+=======
+
+Version 0.5.0 (unreleased)
+-------------------------
+
+- Initial Release


Property changes on: zamplugin.control/trunk/CHANGES.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/README.txt
===================================================================
--- zamplugin.control/trunk/README.txt	                        (rev 0)
+++ zamplugin.control/trunk/README.txt	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1 @@
+This package provides server control for ZAM (Zope 3 Application Management).


Property changes on: zamplugin.control/trunk/README.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/bootstrap.py
===================================================================
--- zamplugin.control/trunk/bootstrap.py	                        (rev 0)
+++ zamplugin.control/trunk/bootstrap.py	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,52 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+
+$Id: bootstrap.py 75940 2007-05-24 14:45:00Z srichter $
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+ez = {}
+exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+                     ).read() in ez
+ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+
+import pkg_resources
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+if sys.platform == 'win32':
+    cmd = '"%s"' % cmd # work around spawn lamosity on windows
+
+ws = pkg_resources.working_set
+assert os.spawnle(
+    os.P_WAIT, sys.executable, sys.executable,
+    '-c', cmd, '-mqNxd', tmpeggs, 'zc.buildout',
+    dict(os.environ,
+         PYTHONPATH=
+         ws.find(pkg_resources.Requirement.parse('setuptools')).location
+         ),
+    ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout')
+import zc.buildout.buildout
+zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+shutil.rmtree(tmpeggs)


Property changes on: zamplugin.control/trunk/bootstrap.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/buildout.cfg
===================================================================
--- zamplugin.control/trunk/buildout.cfg	                        (rev 0)
+++ zamplugin.control/trunk/buildout.cfg	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,269 @@
+[buildout]
+develop = .
+          externals/z3c.menu.ready2go
+          externals/zam.api
+          externals/zam.skin
+          
+parts = app test checker coverage
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = zamplugin.control [app, test]
+
+[checker]
+recipe = lovely.recipe:importchecker
+path = src/zamplugin/control
+
+[coverage]
+recipe = zc.recipe.egg
+eggs = z3c.coverage
+
+
+[app]
+recipe = z3c.recipe.dev:app
+eggs = zamplugin.control [app]
+server = zserver
+zope.conf =
+  ${var:zconfig}
+
+  interrupt-check-interval 50
+
+  <server>
+    type WSGI-HTTP
+    address 8080
+  </server>
+
+  <eventlog>
+    <logfile>
+      path access.log
+    </logfile>
+    <logfile>
+      path STDOUT
+      formatter zope.exceptions.log.Formatter
+    </logfile>
+  </eventlog>
+
+  <accesslog>
+    <logfile>
+      path access.log
+    </logfile>
+    <logfile>
+      path STDOUT
+    </logfile>
+  </accesslog>
+
+  devmode on
+
+site.zcml =
+  <configure
+      xmlns:meta="http://namespaces.zope.org/meta"
+      xmlns:browser="http://namespaces.zope.org/browser"
+      i18n_domain="zope">
+
+  <!-- Turn on the devmode -->
+  <meta:provides feature="devmode" />
+
+  <!-- load meta configuration for exclude -->
+  <include package="zc.configuration" file="meta.zcml" />
+
+  <!-- exclude will prevent from include -->
+  <exclude package="zope.app.authentication" file="ftpplugins.zcml" />
+  <exclude package="zope.app.authentication" file="groupfolder.zcml" />
+  <exclude package="zope.app.authentication" file="principalfolder.zcml" />
+  <exclude package="zope.app.authentication.browser" />
+  <exclude package="zope.app.authentication.browser" file="configure.zcml" />
+  <exclude package="zope.app.authentication.browser" file="groupfolder.zcml" />
+  <exclude package="zope.app.authentication.browser" file="httpplugins.zcml" />
+  <exclude package="zope.app.authentication.browser" file="principalfolder.zcml" />
+  <exclude package="zope.app.authentication.browser" file="session.zcml" />
+  <exclude package="zope.app.broken" file="browser.zcml" />
+  <exclude package="zope.app.container.browser" />
+  <exclude package="zope.app.error.browser" />
+  <exclude package="zope.app.folder.browser" />
+  <exclude package="zope.app.i18n.browser" />
+  <exclude package="zope.app.intid.browser" />
+  <exclude package="zope.app.securitypolicy.browser" />
+  <exclude package="zope.app.applicationcontrol.browser" />
+  <exclude package="zope.app.session" file="browser.zcml" />
+  <exclude package="zope.dublincore.browser" />
+
+
+  <!-- meta configure -->
+  <include package="zope.app.component" file="meta.zcml" />
+  <include package="zope.app.component.browser" file="meta.zcml" />
+  <include package="zope.app.container.browser" file="meta.zcml" />
+  <include package="zope.app.pagetemplate" file="meta.zcml" />
+  <include package="zope.app.publication" file="meta.zcml" />
+  <include package="zope.app.publisher" file="meta.zcml" />
+  <include package="zope.app.security" file="meta.zcml" />
+  <include package="zope.i18n" file="meta.zcml" />
+  <include package="zope.security" file="meta.zcml" />
+  <include package="zope.securitypolicy" file="meta.zcml" />
+  <include package="zope.viewlet" file="meta.zcml" />
+
+
+  <!-- load 3rd party meta configuration -->
+  <include package="z3c.baseregistry" file="meta.zcml" />
+  <include package="z3c.form" file="meta.zcml" />
+  <include package="z3c.macro" file="meta.zcml" />
+  <include package="z3c.pagelet" file="meta.zcml" />
+  <include package="z3c.template" file="meta.zcml" />
+  <include package="z3c.zrtresource" file="meta.zcml" />
+
+
+  <!-- vocabulary setup, that's bad and weird, because this is meta configuration -->
+  <include package="zope.app.schema" />
+
+
+  <!-- bootstrap Database -->
+  <include package="zope.app.appsetup" />
+  <include package="zope.app.zopeappgenerations" />
+
+  <!-- zope server -->
+  <include package="zope.app.server" />
+  <include package="zope.app.twisted" />
+  <include package="zope.app.wsgi" />
+
+
+  <!-- zope packages -->
+  <include package="zope.annotation" />
+  <include package="zope.component" />
+  <include package="zope.contentprovider" />
+  <include package="zope.dublincore" />
+  <include package="zope.error" />
+  <include package="zope.location" />
+  <include package="zope.publisher" />
+  <include package="zope.securitypolicy" />
+  <include package="zope.session" />
+  <include package="zope.traversing" />
+  <include package="zope.traversing.browser" />
+
+
+  <!-- zope app package configuration -->
+  <include package="zope.app.authentication" />
+  <include package="zope.app.applicationcontrol" />
+  <include package="zope.app.broken" />
+  <include package="zope.app.component" />
+  <include package="zope.app.container" />
+  <include package="zope.app.folder" />
+  <include package="zope.app.http" />
+  <include package="zope.app.intid" />
+  <include package="zope.app.keyreference" />
+  <include package="zope.app.principalannotation" />
+  <include package="zope.app.publication" />
+  <include package="zope.app.publisher" />
+  <include package="zope.app.publisher.browser" />
+  <include package="zope.app.security" />
+  <include package="zope.app.securitypolicy" />
+  <include package="zope.app.session" />
+
+
+  <!-- z3c component -->
+  <include package="z3c.breadcrumb" />
+  <include package="z3c.form" />
+  <include package="z3c.formui" />
+  <include package="z3c.layer.pagelet" />
+  <include package="z3c.layer.ready2go" />
+  <include package="z3c.menu.ready2go" />
+  <include package="z3c.macro" />
+  <include package="z3c.pagelet" />
+
+
+  <!-- zam configuration -->
+  <include package="zam.api" />
+  <include package="zam.skin" />
+  <include package="zamplugin.control" />
+
+
+  <browser:defaultSkin name="ZAM" />
+
+  <!-- default view points to TestPage -->
+  <browser:defaultView name="index.html" />
+
+
+  <!-- from zope.app.i18n move this to another package -->
+  <!-- Setup charset negotiation -->
+  <adapter
+      factory="zope.publisher.http.HTTPCharsets"
+      for="zope.publisher.interfaces.http.IHTTPRequest"
+      provides="zope.i18n.interfaces.IUserPreferredCharsets"
+      />
+
+  <!-- Setup charset negotiation --><!-- move this to another package -->
+  <adapter
+      factory="zope.app.publisher.browser.ModifiableBrowserLanguages"
+      for="zope.publisher.interfaces.http.IHTTPRequest"
+      provides="zope.i18n.interfaces.IModifiableUserPreferredLanguages"
+      />
+
+  <class class="zope.publisher.http.HTTPRequest">
+    <implements
+        interface="zope.annotation.interfaces.IAttributeAnnotatable"
+        />
+  </class>
+
+  <!-- load other zcml files -->
+  <include file="securitypolicy.zcml" />
+  <include file="principals.zcml" />
+
+  </configure>
+
+principals.zcml = 
+  <unauthenticatedPrincipal
+      id="lovelybooks.anybody"
+      title="Unauthenticated User"
+      />
+
+  <unauthenticatedGroup
+      id="zope.Anybody"
+      title="Unauthenticated Users"
+      />
+
+  <authenticatedGroup
+      id="zope.Authenticated"
+      title="Authenticated Users"
+      />
+
+  <everybodyGroup
+      id="zope.Everybody"
+      title="All Users"
+      />
+
+  <principal
+      id="zope.manager"
+      title="Manager"
+      login="Manager"
+      password="password"
+      />
+
+  <grant
+      role="zope.Manager"
+      principal="zope.manager"
+      />
+
+securitypolicy.zcml =
+  <include package="zope.app.securitypolicy" />
+
+  <securityPolicy
+      component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy" />
+
+  <role id="zope.Anonymous" title="Everybody"
+                 description="All users have this role implicitly" />
+  <role id="zope.Manager" title="Site Manager" />
+  <role id="zope.Member" title="Site Member" />
+
+  <!-- Replace the following directive if you don't want public access -->
+  <grant
+      permission="zope.View"
+      role="zope.Anonymous"
+      />
+  <grant
+      permission="zope.app.dublincore.view"
+      role="zope.Anonymous"
+      />
+
+  <grantAll role="zope.Manager" />
+
+
+[var]
+recipe = zc.recipe.filestorage

Added: zamplugin.control/trunk/setup.py
===================================================================
--- zamplugin.control/trunk/setup.py	                        (rev 0)
+++ zamplugin.control/trunk/setup.py	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,101 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Setup
+
+$Id:$
+"""
+import os
+from setuptools import setup, find_packages
+
+def read(*rnames):
+    return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+setup (
+    name='zamplugin.control',
+    version='0.5.0',
+    author = "Roger Ineichen and the Zope Community",
+    author_email = "zope3-dev at zope.org",
+    description = "Error utility for Zope Application Management",
+    long_description=(
+        read('README.txt')
+        + '\n\n' +
+        read('CHANGES.txt')
+        ),
+    license = "ZPL 2.1",
+    keywords = "zope3 zam server and application control management",
+    classifiers = [
+        'Development Status :: 4 - Beta',
+        'Environment :: Web Environment',
+        'Intended Audience :: Developers',
+        'License :: OSI Approved :: Zope Public License',
+        'Programming Language :: Python',
+        'Natural Language :: English',
+        'Operating System :: OS Independent',
+        'Topic :: Internet :: WWW/HTTP',
+        'Framework :: Zope3'],
+    url = 'http://cheeseshop.python.org/pypi/zamplugin.control',
+    packages = find_packages('src'),
+    include_package_data = True,
+    package_dir = {'':'src'},
+    namespace_packages = ['zamplugin'],
+    extras_require = dict(
+        test = [
+            'z3c.coverage',
+            'z3c.testing',
+            'zope.app.testing',
+            'zope.testbrowser',
+            ],
+        app = [
+            'z3c.baseregistry',
+            'z3c.form',
+            'z3c.formui',
+            'z3c.layer.pagelet',
+            'z3c.layer.ready2go',
+            'z3c.menu.ready2go',
+            'z3c.pagelet',
+            'z3c.zrtresource',
+            'zam.api',
+            'zam.skin',
+            'zc.configuration',
+            'zope.app.component',
+            'zope.app.http',
+            'zope.app.intid',
+            'zope.app.publisher',
+            'zope.app.securitypolicy',
+            'zope.app.server',
+            'zope.app.twisted',
+            'zope.configuration',
+            'zope.interface',
+            'zope.publisher',
+            'zope.traversing',
+            'zope.viewlet',
+            ],
+        ),
+    install_requires = [
+        'setuptools',
+        'z3c.baseregistry',
+        'z3c.pagelet',
+        'z3c.template',
+        'zam.api',
+        'zope.app.applicationcontrol',
+        'zope.app.generations',
+        'zope.app.renderer',
+        'zope.component',
+        'zope.interface',
+        'zope.location',
+        'zope.size',
+        'zope.traversing',
+        ],
+    zip_safe = False,
+)


Property changes on: zamplugin.control/trunk/setup.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/__init__.py
===================================================================
--- zamplugin.control/trunk/src/zamplugin/__init__.py	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/__init__.py	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,7 @@
+# this is a namespace package
+try:
+    import pkg_resources
+    pkg_resources.declare_namespace(__name__)
+except ImportError:
+    import pkgutil
+    __path__ = pkgutil.extend_path(__path__, __name__)


Property changes on: zamplugin.control/trunk/src/zamplugin/__init__.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/README.txt
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/README.txt	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/README.txt	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,23 @@
+======
+README
+======
+
+This package provides the server control management. The zam.skin is used as 
+basic skin for this test.
+
+Login as manager first:
+
+  >>> from zope.testbrowser.testing import Browser
+  >>> manager = Browser()
+  >>> manager.addHeader('Authorization', 'Basic mgr:mgrpw')
+
+Check if we can access the page.html view which is registred in the
+ftesting.zcml file for the ``ZAM`` skin:
+
+  >>> manager = Browser()
+  >>> manager.handleErrors = False
+  >>> manager.addHeader('Authorization', 'Basic mgr:mgrpw')
+  >>> skinURL = 'http://localhost/++skin++ZAM/index.html'
+  >>> manager.open(skinURL)
+  >>> manager.url
+  'http://localhost/++skin++ZAM/index.html'


Property changes on: zamplugin.control/trunk/src/zamplugin/control/README.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/__init__.py
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/__init__.py	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/__init__.py	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1 @@
+# Make a package.


Property changes on: zamplugin.control/trunk/src/zamplugin/control/__init__.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/applicationcontrol.py
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/applicationcontrol.py	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/applicationcontrol.py	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,41 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Application Control
+
+$Id: applicationcontrol.py 67630 2006-04-27 00:54:03Z jim $"""
+__docformat__ = 'restructuredtext'
+
+import time
+import zope.interface
+import zope.component
+from zope.location import Location
+from zope.traversing.interfaces import IContainmentRoot
+from zope.app.applicationcontrol.interfaces import IApplicationControl
+
+START_TIME = time.time()
+
+
+class ApplicationControl(Location):
+
+    zope.interface.implements(IApplicationControl)
+    zope.component.adapts(IContainmentRoot)
+
+    __name__ = '++etc++ApplicationController'
+
+    def __init__(self, context):
+        self.__parent__ = context
+        self.context = context
+
+    def getStartTime(self):
+        return START_TIME


Property changes on: zamplugin.control/trunk/src/zamplugin/control/applicationcontrol.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/browser/__init__.py
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/browser/__init__.py	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/browser/__init__.py	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1 @@
+# Make a package.


Property changes on: zamplugin.control/trunk/src/zamplugin/control/browser/__init__.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/browser/configure.zcml
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/browser/configure.zcml	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/browser/configure.zcml	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,83 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:z3c="http://namespaces.zope.org/z3c"
+    i18n_domain="zam">
+
+  <!-- runtime info -->
+  <z3c:pagelet
+      name="index.html"
+      for="zope.app.applicationcontrol.interfaces.IApplicationControl"
+      class=".runtimeinfo.RuntimeInfo"
+      permission="zope.ManageApplication"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      />
+
+  <z3c:template
+      for=".runtimeinfo.RuntimeInfo"
+      template="runtimeinfo.pt"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      />
+
+
+  <!-- Server control -->
+  <z3c:pagelet
+      name="servercontrol.html"
+      for="zope.app.applicationcontrol.interfaces.IApplicationControl"
+      class=".servercontrol.ServerControl"
+      permission="zope.ManageApplication"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      />
+
+  <z3c:template
+      for=".servercontrol.ServerControl"
+      template="servercontrol.pt"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      />
+
+
+  <!-- ZODB control -->
+  <z3c:pagelet
+      name="ZODBControl.html"
+      for="zope.app.applicationcontrol.interfaces.IApplicationControl"
+      class=".zodbcontrol.ZODBControl"
+      permission="zope.ManageApplication"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      />
+
+  <z3c:template
+      for=".zodbcontrol.ZODBControl"
+      template="zodbcontrol.pt"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      />
+
+
+  <!-- generations -->
+  <z3c:pagelet
+      name="generations.html"
+      for="zope.app.applicationcontrol.interfaces.IApplicationControl"
+      class=".generation.Generations"
+      permission="zope.ManageApplication"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      />
+
+  <z3c:template
+      for=".generation.Generations"
+      template="generations.pt"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      />
+
+  <z3c:pagelet
+      name="generationDetails.html"
+      for="zope.app.applicationcontrol.interfaces.IApplicationControl"
+      class=".generation.GenerationDetails"
+      permission="zope.ManageApplication"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      />
+
+  <z3c:template
+      for=".generation.GenerationDetails"
+      template="generation_details.pt"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      />
+
+</configure>


Property changes on: zamplugin.control/trunk/src/zamplugin/control/browser/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/browser/generation.py
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/browser/generation.py	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/browser/generation.py	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,165 @@
+##############################################################################
+#
+# Copyright (c) 2004 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""UI for browsing database schema managers
+
+$Id: managers.py 73669 2007-03-27 07:35:13Z dobe $
+"""
+__docformat__ = 'restructuredtext'
+
+import transaction
+
+import zope.component
+from zope.app.generations.interfaces import ISchemaManager
+from zope.app.generations.interfaces import ISchemaManager
+from zope.app.generations.generations import generations_key
+from zope.app.generations.generations import Context
+from zope.app.renderer.rest import ReStructuredTextToHTMLRenderer
+
+from z3c.pagelet import browser
+from z3c.template.template import getPageTemplate
+
+request_key_format = "evolve-app-%s"
+
+
+class Generations(browser.BrowserPagelet):
+    """GEneration management page."""
+
+    template = getPageTemplate()
+
+    def _getdb(self):
+        # TODO: There needs to be a better api for this
+        return self.request.publication.db
+
+    def evolve(self):
+        """Perform a requested evolution."""
+
+        self.managers = managers = dict(
+            zope.component.getUtilitiesFor(ISchemaManager))
+        db = self._getdb()
+        conn = db.open()
+        try:
+            generations = conn.root().get(generations_key, ())
+            request = self.request
+            for key in generations:
+                generation = generations[key]
+                rkey = request_key_format % key
+                if rkey in request:
+                    manager = managers[key]
+                    if generation >= manager.generation:
+                        return {'app': key, 'to': 0}
+                    context = Context()
+                    context.connection = conn
+                    generation += 1
+                    manager.evolve(context, generation)
+                    generations[key] = generation
+                    transaction.commit()
+                    return {'app': key, 'to': generation}
+            return None
+        finally:
+            transaction.abort()
+            conn.close()
+
+    def applications(self):
+        """Get information about database-generation status."""
+        result = []
+        db = self._getdb()
+        conn = db.open()
+        try:
+            managers = self.managers
+            generations = conn.root().get(generations_key, ())
+            for key in generations:
+                generation = generations[key]
+                manager = managers.get(key)
+                if manager is None:
+                    continue
+
+                result.append({
+                    'id': key,
+                    'min': manager.minimum_generation,
+                    'max': manager.generation,
+                    'generation': generation,
+                    'evolve': (generation < manager.generation
+                               and request_key_format % key
+                               or ''
+                               ),
+                    })
+            return result
+        finally:
+            conn.close()
+
+
+class GenerationDetails(object):
+    r"""Show Details of a particular Schema Manager's Evolvers
+
+    This method needs to use the component architecture, so
+    we'll set it up:
+    
+      >>> from zope.app.testing.placelesssetup import setUp, tearDown
+      >>> setUp()
+    
+    We need to define some schema managers.  We'll define just one:
+    
+      >>> from zope.app.generations.generations import SchemaManager
+      >>> from zope.app.testing import ztapi
+      >>> app1 = SchemaManager(0, 3, 'zope.app.generations.demo')
+      >>> ztapi.provideUtility(ISchemaManager, app1, 'foo.app1')
+
+    Now let's create the view:
+
+      >>> from zope.publisher.browser import TestRequest
+      >>> details = ManagerDetails()
+      >>> details.context = None
+      >>> details.request = TestRequest(environ={'id': 'foo.app1'})
+
+    Let's now see that the view gets the ID correctly from the request:
+
+      >>> details.id
+      'foo.app1'
+
+    Now check that we get all the info from the evolvers:
+
+      >>> info = details.getEvolvers()
+      >>> for item in info:
+      ...     print sorted(item.items())
+      [('from', 0), ('info', u'<p>Evolver 1</p>\n'), ('to', 1)]
+      [('from', 1), ('info', u'<p>Evolver 2</p>\n'), ('to', 2)]
+      [('from', 2), ('info', ''), ('to', 3)]
+
+    We'd better clean up:
+
+      >>> tearDown()
+    """
+
+    id = property(lambda self: self.request['id'])
+
+    def getEvolvers(self):
+        id = self.id
+        manager = zope.component.getUtility(ISchemaManager, id)
+
+        evolvers = []
+
+        for gen in range(manager.minimum_generation, manager.generation):
+
+            info = manager.getInfo(gen+1)
+            if info is None:
+                info = ''
+            else:
+                # XXX: the renderer *expects* unicode as input encoding (ajung)
+                renderer = ReStructuredTextToHTMLRenderer(
+                    unicode(info), self.request)
+                info = renderer.render()
+                
+            evolvers.append({'from': gen, 'to': gen+1, 'info': info})
+
+        return evolvers


Property changes on: zamplugin.control/trunk/src/zamplugin/control/browser/generation.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/browser/generation_details.pt
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/browser/generation_details.pt	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/browser/generation_details.pt	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,19 @@
+<h1 i18n:translate="">
+ <b i18n:name="application_id" tal:content="view/id" />
+ Application Manager Details
+</h1>
+<br/>
+
+<tal:block repeat="evolver view/getEvolvers">
+
+<h2 i18n:translate="">
+  Evolver 
+  from Generation <b i18n:name="from" tal:content="evolver/from"/>
+  to Generation <b i18n:name="to" tal:content="evolver/to"/>
+</h2>
+<br />
+<div tal:content="structure evolver/info">
+  Evolution information.
+</div>
+
+</tal:block>


Property changes on: zamplugin.control/trunk/src/zamplugin/control/browser/generation_details.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/browser/generations.pt
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/browser/generations.pt	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/browser/generations.pt	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,52 @@
+<span i18n:translate="">Database generations</span>
+
+<form tal:attributes="action request/URL"
+      tal:define="status view/evolve" 
+      >
+
+<p tal:condition="status">
+<span tal:condition="status/to" i18n:translate=""
+      >The database was updated to generation <span
+      i18n:name=generation
+      tal:content="status/to">2</span> for <span
+            i18n:name=application
+            tal:content="status/app"
+            >foo.bar</span>.</span>
+<span tal:condition="not: status/to" i18n:translate=""
+      >The database is up to date for <span 
+      i18n:name=application
+      tal:content="status/app"
+      >foo.bar</span>.</span>
+</p>
+
+<table border="1">
+
+<tr>
+    <th i18n:translate="">Application</th>
+    <th i18n:translate="">Minimum Generation</th>
+    <th i18n:translate="">Maximum Generation</th>
+    <th i18n:translate="">Current Database Generation</th>
+    <th i18n:translate="">Evolve?</th>
+</tr>
+<tr tal:repeat="app view/applications">
+    <td>
+      <a href=""
+         tal:attributes=
+             "href string:generationDetails.html?id=${app/id}"
+         tal:content="app/id">foo.bar</a>
+    </td>
+    <td tal:content="app/min">1</td>
+    <td tal:content="app/max">10</td>
+    <td tal:content="app/generation">2</td>
+    <td>
+       <input type="submit" value=" evolve " name="evolve"
+              tal:condition="app/evolve"
+              tal:attributes="name app/evolve"
+              >
+       <span tal:condition="not: app/evolve"
+             i18n:translate=""
+             >No, up to date</span>
+    </td>
+</tr>
+</table>
+</form>


Property changes on: zamplugin.control/trunk/src/zamplugin/control/browser/generations.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/browser/runtimeinfo.pt
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/browser/runtimeinfo.pt	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/browser/runtimeinfo.pt	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,57 @@
+<tal:block tal:define="runtime_info view/runtimeInfo">
+   <div class="row">
+     <div class="label" i18n:translate="">Uptime</div>
+     <div class="field"
+          tal:content="runtime_info/Uptime"
+          i18n:translate="">Time</div>
+   </div>
+   <div class="row">
+     <div class="label" i18n:translate="">System platform</div>
+     <div class="field"
+          tal:content="runtime_info/SystemPlatform">Platform</div>
+   </div>
+   <div class="row">
+     <div class="label" i18n:translate="">Zope version</div>
+     <div class="field"
+          tal:content="runtime_info/ZopeVersion">Version</div>
+   </div>
+   <div class="row">
+     <div class="label" i18n:translate="">Python version</div>
+     <div class="field"
+          tal:content="runtime_info/PythonVersion">Version</div>
+   </div>
+   <div class="row">
+     <div class="label" i18n:translate="">Command line</div>
+     <div class="field"
+          tal:content="runtime_info/CommandLine">Command line</div>
+   </div>
+   <div class="row">
+     <div class="label" i18n:translate="">Preferred encoding</div>
+     <div class="field"
+          tal:content="runtime_info/PreferredEncoding">Encoding</div>
+   </div>
+   <div class="row">
+     <div class="label" i18n:translate="">FileSystem encoding</div>
+     <div class="field"
+          tal:content="runtime_info/FileSystemEncoding">Encoding</div>
+   </div>
+   <div class="row">
+     <div class="label" i18n:translate="">Process id</div>
+     <div class="field"
+          tal:content="runtime_info/ProcessId">ID</div>
+   </div>
+   <div class="row">
+     <div class="label" i18n:translate="">Developer mode</div>
+     <div class="field"
+          tal:content="runtime_info/DeveloperMode">ID</div>
+   </div>
+   <div class="row">
+     <div class="label" i18n:translate="">Python path</div>
+     <div class="field">
+      <ul>
+       <li tal:repeat="path runtime_info/PythonPath" 
+           tal:content="path">path</li>
+      </ul>
+     </div>
+   </div>
+</tal:block>


Property changes on: zamplugin.control/trunk/src/zamplugin/control/browser/runtimeinfo.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/browser/runtimeinfo.py
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/browser/runtimeinfo.py	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/browser/runtimeinfo.py	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,76 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Define runtime information view component for Application Control
+
+$Id: runtimeinfo.py 74321 2007-04-21 11:35:21Z ctheune $
+"""
+__docformat__ = 'restructuredtext'
+
+from zope.app.applicationcontrol.interfaces import IRuntimeInfo
+from zope.app.applicationcontrol.i18n import ZopeMessageFactory as _
+
+from z3c.pagelet import browser
+from z3c.template.template import getPageTemplate
+
+
+class RuntimeInfo(browser.BrowserPagelet):
+
+    template = getPageTemplate()
+
+    _fields = (
+        "ZopeVersion",
+        "PythonVersion",
+        "PythonPath",
+        "SystemPlatform",
+        "PreferredEncoding",
+        "FileSystemEncoding",
+        "CommandLine",
+        "ProcessId",
+        "DeveloperMode",
+        )
+    _unavailable = _("Unavailable")
+
+    def runtimeInfo(self):
+        try:
+            ri = IRuntimeInfo(self.context)
+        except TypeError:
+            formatted = dict.fromkeys(self._fields, self._unavailable)
+            formatted["Uptime"] = self._unavailable
+        else:
+            formatted = self._getInfo(ri)
+        return formatted
+
+    def _getInfo(self, ri):
+        formatted = {}
+        for name in self._fields:
+            try:
+                value = getattr(ri, "get" + name)()
+            except ValueError:
+                value = self._unavailable
+            formatted[name] = value
+        formatted["Uptime"] = self._getUptime(ri)
+        return formatted
+
+    def _getUptime(self, ri):
+        # make a unix "uptime" uptime format
+        uptime = long(ri.getUptime())
+        minutes, seconds = divmod(uptime, 60)
+        hours, minutes = divmod(minutes, 60)
+        days, hours = divmod(hours, 24)
+
+        return _('${days} day(s) ${hours}:${minutes}:${seconds}',
+                 mapping = {'days': '%d' % days,
+                            'hours': '%02d' % hours,
+                            'minutes': '%02d' % minutes,
+                            'seconds': '%02d' % seconds})


Property changes on: zamplugin.control/trunk/src/zamplugin/control/browser/runtimeinfo.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/browser/servercontrol.pt
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/browser/servercontrol.pt	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/browser/servercontrol.pt	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,31 @@
+<div class="message"
+  i18n:translate=""
+  tal:define="status view/action"
+  tal:condition="status"
+  tal:content="status">
+ </div>
+
+<form name="servercontrol" action="servercontrol.html" method="post">
+  <div class="row">
+      <div class="label"
+          i18n:translate="">Countdown until restart or shutdown</div>
+      <div class="field">
+          <input type="text" name="time:int" size="5" value="0" />
+          &nbsp;<span i18n:translate="">seconds</span>
+          <p i18n:translate="">
+            If you specify a time of 0 seconds, then the server
+            will be shutdown or restarted immediately.
+          </p>
+      </div>
+  </div>
+
+  <div class="row">
+      <div class="controls">
+          <input type="submit" name="restart" value="Restart server"
+              i18n:attributes="value" />
+          &nbsp;
+          <input type="submit" name="shutdown" value="Shutdown server"
+              i18n:attributes="value" />
+      </div>
+  </div>
+</form>


Property changes on: zamplugin.control/trunk/src/zamplugin/control/browser/servercontrol.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/browser/servercontrol.py
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/browser/servercontrol.py	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/browser/servercontrol.py	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,47 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Server Control View
+
+$Id: servercontrol.py 73536 2007-03-25 08:17:24Z dobe $
+"""
+__docformat__ = 'restructuredtext'
+
+import zope.component
+from zope.app.applicationcontrol.interfaces import IServerControl
+from zope.app.applicationcontrol.i18n import ZopeMessageFactory as _
+
+from z3c.pagelet import browser
+from z3c.template.template import getPageTemplate
+
+
+class ServerControl(browser.BrowserPagelet):
+
+    template = getPageTemplate()
+
+    def serverControl(self):
+        return zope.component.getUtility(IServerControl)
+
+    def action(self):
+        """Do the shutdown/restart!"""
+        control = self.serverControl()
+        time = self.request.get('time', 0)
+
+        if 'restart' in self.request:
+            control.restart(time)
+            return _("The server will be restarted in ${number} seconds.",
+                mapping={"number": time})
+        elif 'shutdown' in self.request:
+            control.shutdown(time)
+            return _("The server will be shutdown in ${number} seconds.",
+                mapping={"number": time})


Property changes on: zamplugin.control/trunk/src/zamplugin/control/browser/servercontrol.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/browser/zodbcontrol.pt
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/browser/zodbcontrol.pt	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/browser/zodbcontrol.pt	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,49 @@
+<div id="message">
+  <div class="row" tal:repeat="status view/update">
+     <div class="field" tal:content="status" i18n:translate=""/>
+  </div>
+</div>
+<div>
+  <form action="." method="post" tal:attributes="action request/URL">
+  <div class="row">
+    <table border="1">
+        <tr>
+          <th i18n:translate="">Pack</th>
+          <th i18n:translate="">Utility Name</th>
+          <th i18n:translate="">Database Name</th>
+          <th i18n:translate="">Size</th>
+        </tr>
+        <tr tal:repeat="db view/databases">
+          <td>
+            <input type="checkbox" name="dbs:list"
+                   tal:attributes="value db/utilName"/>
+          </td>
+          <td>
+            <span tal:replace="db/utilName"/>
+          </td>
+
+          <td>
+            <span tal:replace="db/dbName"/>
+          </td>
+          <td>
+            <span tal:replace="db/size"/>
+          </td>
+        </tr>
+    </table>
+
+    <div class="row">
+      <span class="label" i18n:translate="">Keep up to</span>
+      <span class="field">
+        <input type="text" size="4" name="days" value="0"
+               tal:attributes="value request/days|string:0" />
+        <span tal:omit-tag="" i18n:translate="">days</span>
+      </span>
+      <div class="controls">
+        <input type="submit" name="PACK" value="Pack"
+            i18n:attributes="value pack-button"/>
+      </div>
+    </div>
+
+  </div>
+  </form>
+</div>


Property changes on: zamplugin.control/trunk/src/zamplugin/control/browser/zodbcontrol.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/browser/zodbcontrol.py
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/browser/zodbcontrol.py	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/browser/zodbcontrol.py	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,78 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+""" Server Control View
+
+$Id: zodbcontrol.py 73536 2007-03-25 08:17:24Z dobe $
+"""
+__docformat__ = 'restructuredtext'
+
+import zope.component
+from ZODB.interfaces import IDatabase
+from ZODB.FileStorage.FileStorage import FileStorageError
+from zope.size import byteDisplay
+from zope.app.applicationcontrol.i18n import ZopeMessageFactory as _
+
+from z3c.pagelet import browser
+from z3c.template.template import getPageTemplate
+
+
+class ZODBControl(browser.BrowserPagelet):
+
+    template = getPageTemplate()
+
+    status  = None
+    
+    @property
+    def databases(self):
+        res = []
+        for name, db in zope.component.getUtilitiesFor(
+            IDatabase):
+            d = dict(
+                dbName = db.getName(),
+                utilName = str(name),
+                size = self._getSize(db),
+                )
+            res.append(d)
+        return res
+            
+    def _getSize(self, db):
+        """Get the database size in a human readable format."""
+        size = db.getSize()        
+        if not isinstance(size, (int, long, float)):
+            return str(size)
+        return byteDisplay(size)
+
+    def update(self):
+        if self.status is not None:
+            return self.status
+        status = []
+        if 'PACK' in self.request.form:
+            dbs = self.request.form.get('dbs', [])
+            try:
+                days = int(self.request.form.get('days','').strip() or 0)
+            except ValueError:
+                status.append(_('Error: Invalid Number'))
+                self.status = status
+                return self.status
+            for dbName in dbs:
+                db = zope.component.getUtility(IDatabase, name=dbName)
+                try:
+                    db.pack(days=days)
+                    status.append(_('ZODB "${name}" successfully packed.',
+                               mapping=dict(name=str(dbName))))
+                except FileStorageError, err:
+                    status.append(_('ERROR packing ZODB "${name}": ${err}',
+                                    mapping=dict(name=str(dbName), err=err)))
+        self.status = status
+        return self.status


Property changes on: zamplugin.control/trunk/src/zamplugin/control/browser/zodbcontrol.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/configure.zcml
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/configure.zcml	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/configure.zcml	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,46 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    i18n_domain="zam">
+
+  <include file="plugin.zcml" />
+
+  <!-- make sure we bootstrap the evolver -->
+  <include package="zope.app.generations" file="subscriber.zcml" />
+
+  <registerIn registry="zamplugin.control.plugin.ControlBaseRegistry">
+
+    <class
+        class=".applicationcontrol.ApplicationControl">
+      <require
+          permission="zope.ManageApplication"
+          interface="zope.app.applicationcontrol.interfaces.IApplicationControl"
+          />
+    </class>
+
+    <adapter
+        factory=".applicationcontrol.ApplicationControl"
+        provides="zope.app.applicationcontrol.interfaces.IApplicationControl"
+        locate="True"
+        />
+
+    <adapter
+        name="etc"
+        factory=".namespace.etc"
+        for="*"
+        provides="zope.traversing.interfaces.ITraversable"
+        />
+    <view
+        name="etc"
+        factory=".namespace.etc"
+        for="*"
+        type="zope.interface.Interface"
+        provides="zope.traversing.interfaces.ITraversable"
+        />
+
+    <include file="menu.zcml" />
+    <include package=".browser" />
+
+  </registerIn>
+
+
+</configure>


Property changes on: zamplugin.control/trunk/src/zamplugin/control/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/ftesting.zcml
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/ftesting.zcml	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/ftesting.zcml	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,207 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:meta="http://namespaces.zope.org/meta"
+    xmlns:browser="http://namespaces.zope.org/browser"
+    xmlns:z3c="http://namespaces.zope.org/z3c"
+    i18n_domain="zope">
+
+  <!-- Turn on the devmode -->
+  <meta:provides feature="devmode" />
+
+  <!-- load meta configuration for exclude -->
+  <include package="zc.configuration" file="meta.zcml" />
+
+  <!-- exclude will prevent from include -->
+  <exclude package="zope.app.authentication" file="ftpplugins.zcml" />
+  <exclude package="zope.app.authentication" file="groupfolder.zcml" />
+  <exclude package="zope.app.authentication" file="principalfolder.zcml" />
+  <exclude package="zope.app.authentication.browser" />
+  <exclude package="zope.app.authentication.browser" file="configure.zcml" />
+  <exclude package="zope.app.authentication.browser" file="groupfolder.zcml" />
+  <exclude package="zope.app.authentication.browser" file="httpplugins.zcml" />
+  <exclude package="zope.app.authentication.browser" file="principalfolder.zcml" />
+  <exclude package="zope.app.authentication.browser" file="session.zcml" />
+  <exclude package="zope.app.broken" file="browser.zcml" />
+  <exclude package="zope.app.container.browser" />
+  <exclude package="zope.app.error.browser" />
+  <exclude package="zope.app.folder.browser" />
+  <exclude package="zope.app.i18n.browser" />
+  <exclude package="zope.app.intid.browser" />
+  <exclude package="zope.app.securitypolicy.browser" />
+  <exclude package="zope.app.session" file="browser.zcml" />
+  <exclude package="zope.dublincore.browser" />
+
+
+  <!-- meta configure -->
+  <include package="zope.app.component" file="meta.zcml" />
+  <include package="zope.app.component.browser" file="meta.zcml" />
+  <include package="zope.app.container.browser" file="meta.zcml" />
+  <include package="zope.app.pagetemplate" file="meta.zcml" />
+  <include package="zope.app.publication" file="meta.zcml" />
+  <include package="zope.app.publisher" file="meta.zcml" />
+  <include package="zope.app.security" file="meta.zcml" />
+  <include package="zope.i18n" file="meta.zcml" />
+  <include package="zope.security" file="meta.zcml" />
+  <include package="zope.securitypolicy" file="meta.zcml" />
+  <include package="zope.viewlet" file="meta.zcml" />
+
+
+  <!-- load 3rd party meta configuration -->
+  <include package="z3c.baseregistry" file="meta.zcml" />
+  <include package="z3c.form" file="meta.zcml" />
+  <include package="z3c.macro" file="meta.zcml" />
+  <include package="z3c.pagelet" file="meta.zcml" />
+  <include package="z3c.template" file="meta.zcml" />
+  <include package="z3c.zrtresource" file="meta.zcml" />
+
+
+  <!-- vocabulary setup, that's bad and weird, because this is meta configuration -->
+  <include package="zope.app.schema" />
+
+
+  <!-- bootstrap Database -->
+  <include package="zope.app.appsetup" />
+  <include package="zope.app.zopeappgenerations" />
+
+  <!-- zope server -->
+  <include package="zope.app.server" />
+  <include package="zope.app.twisted" />
+  <include package="zope.app.wsgi" />
+
+
+  <!-- zope packages -->
+  <include package="zope.annotation" />
+  <include package="zope.component" />
+  <include package="zope.contentprovider" />
+  <include package="zope.dublincore" />
+  <include package="zope.error" />
+  <include package="zope.location" />
+  <include package="zope.publisher" />
+  <include package="zope.securitypolicy" />
+  <include package="zope.session" />
+  <include package="zope.traversing" />
+  <include package="zope.traversing.browser" />
+
+
+  <!-- zope app package configuration -->
+  <include package="zope.app.authentication" />
+  <include package="zope.app.broken" />
+  <include package="zope.app.component" />
+  <include package="zope.app.container" />
+  <include package="zope.app.folder" />
+  <include package="zope.app.http" />
+  <include package="zope.app.intid" />
+  <include package="zope.app.keyreference" />
+  <include package="zope.app.principalannotation" />
+  <include package="zope.app.publication" />
+  <include package="zope.app.publisher" />
+  <include package="zope.app.publisher.browser" />
+  <include package="zope.app.security" />
+  <include package="zope.app.securitypolicy" />
+  <include package="zope.app.session" />
+
+
+  <!-- z3c component -->
+  <include package="z3c.breadcrumb" />
+  <include package="z3c.form" />
+  <include package="z3c.formui" />
+  <include package="z3c.layer.pagelet" />
+  <include package="z3c.layer.ready2go" />
+  <include package="z3c.menu.ready2go" />
+  <include package="z3c.macro" />
+  <include package="z3c.pagelet" />
+
+
+  <!-- zam configuration -->
+  <include package="zam.api" />
+  <include package="zam.skin" />
+  <include package="zamplugin.control" />
+
+
+  <browser:defaultSkin name="ZAM" />
+
+  <!-- default view points to TestPage -->
+  <browser:defaultView name="index.html" />
+
+
+  <!-- from zope.app.i18n move this to another package -->
+  <!-- Setup charset negotiation -->
+  <adapter
+      factory="zope.publisher.http.HTTPCharsets"
+      for="zope.publisher.interfaces.http.IHTTPRequest"
+      provides="zope.i18n.interfaces.IUserPreferredCharsets"
+      />
+
+  <!-- Setup charset negotiation --><!-- move this to another package -->
+  <adapter
+      factory="zope.app.publisher.browser.ModifiableBrowserLanguages"
+      for="zope.publisher.interfaces.http.IHTTPRequest"
+      provides="zope.i18n.interfaces.IModifiableUserPreferredLanguages"
+      />
+
+  <class class="zope.publisher.http.HTTPRequest">
+    <implements
+        interface="zope.annotation.interfaces.IAttributeAnnotatable"
+        />
+  </class>
+
+
+  <!-- load security policy -->
+  <include package="zope.securitypolicy" />
+
+  <securityPolicy
+      component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy"
+      />
+
+  <role id="zope.Anonymous"
+      title="Everybody"
+      description="All users have this role implicitly"
+      />
+  <role id="zope.Manager" title="Site Manager" />
+  <role id="zope.Member" title="Site Member" />
+
+  <grant permission="zope.View"
+                  role="zope.Anonymous" />
+  <grant permission="zope.app.dublincore.view"
+                  role="zope.Anonymous" />
+
+  <grantAll role="zope.Manager" />
+
+
+  <!-- setup principals -->
+  <unauthenticatedPrincipal
+      id="zope.anybody"
+      title="Unauthenticated User" />
+
+  <unauthenticatedGroup
+    id="zope.Anybody"
+    title="Unauthenticated Users"
+    />
+
+  <authenticatedGroup
+    id="zope.Authenticated"
+    title="Authenticated Users"
+    />
+
+  <everybodyGroup
+    id="zope.Everybody"
+    title="All Users"
+    />
+
+  <principal
+      id="zope.mgr"
+      title="Manager"
+      login="mgr"
+      password="mgrpw" />
+
+  <grant role="zope.Manager" principal="zope.mgr" />
+
+  <principal
+      id="zope.globalmgr"
+      title="Manager"
+      login="globalmgr"
+      password="globalmgrpw" />
+
+  <grant role="zope.Manager" principal="zope.globalmgr" />
+
+</configure>


Property changes on: zamplugin.control/trunk/src/zamplugin/control/ftesting.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/menu.py
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/menu.py	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/menu.py	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,75 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 97 2007-03-29 22:58:27Z rineichen $
+"""
+__docformat__ = "reStructuredText"
+
+import zope.component
+from zope.traversing.api import getRoot
+from zope.app.applicationcontrol.interfaces import IApplicationControl
+
+from z3c.menu.ready2go import item
+
+
+class ProcessMenuItem(item.GlobalMenuItem):
+    """Process menu item."""
+
+    weight = 10
+
+    @property
+    def available(self):
+        """Only available IApplicationControl is available."""
+        root = getRoot(self.context)
+        appControl = IApplicationControl(root, None)
+        if appControl is not None:
+            return True
+        else:
+            return False
+
+    def getURLContext(self):
+        root = getRoot(self.context)
+        return IApplicationControl(root)
+
+
+class AppControlContextMenuItem(item.ContextMenuItem):
+    """Base IApplicationControl context menu item."""
+
+
+class RuntimeMenuItem(AppControlContextMenuItem):
+    """Runtime menu item."""
+
+    viewName = 'index.html'
+    weight = 1
+
+
+class ServerControlMenuItem(AppControlContextMenuItem):
+    """Server control menu item."""
+
+    viewName = 'servercontrol.html'
+    weight = 2
+
+
+class ZODBControlMenuItem(AppControlContextMenuItem):
+    """ZODB control menu item."""
+
+    viewName = 'ZODBControl.html'
+    weight = 3
+
+
+class GenerationsMenuItem(AppControlContextMenuItem):
+    """Generation management menu item."""
+
+    viewName = 'generations.html'
+    weight = 4


Property changes on: zamplugin.control/trunk/src/zamplugin/control/menu.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/menu.zcml
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/menu.zcml	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/menu.zcml	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,52 @@
+<configure
+    xmlns:zope="http://namespaces.zope.org/zope"
+    xmlns="http://namespaces.zope.org/browser"
+    i18n_domain="zam">
+
+  <viewlet
+      name="Process"
+      for="*"
+      class=".menu.ProcessMenuItem"
+      manager="zam.api.menu.IGlobalMenu"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      permission="zope.ManageServices"
+      />
+
+  <!-- context menu item -->
+  <viewlet
+      name="Runtime"
+      for="zope.app.applicationcontrol.interfaces.IApplicationControl"
+      class=".menu.RuntimeMenuItem"
+      manager="zam.api.menu.IContextMenu"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      permission="zope.ManageServices"
+      />
+
+  <viewlet
+      name="Server control"
+      for="zope.app.applicationcontrol.interfaces.IApplicationControl"
+      class=".menu.ServerControlMenuItem"
+      manager="zam.api.menu.IContextMenu"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      permission="zope.ManageServices"
+      />
+
+  <viewlet
+      name="ZODB Control"
+      for="zope.app.applicationcontrol.interfaces.IApplicationControl"
+      class=".menu.ZODBControlMenuItem"
+      manager="zam.api.menu.IContextMenu"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      permission="zope.ManageServices"
+      />
+
+  <viewlet
+      name="Generations"
+      for="zope.app.applicationcontrol.interfaces.IApplicationControl"
+      class=".menu.GenerationsMenuItem"
+      manager="zam.api.menu.IContextMenu"
+      layer="zam.api.layer.IZAMBrowserLayer"
+      permission="zope.ManageServices"
+      />
+
+</configure>


Property changes on: zamplugin.control/trunk/src/zamplugin/control/menu.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/namespace.py
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/namespace.py	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/namespace.py	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,55 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id:$
+"""
+__docformat__ = 'restructuredtext'
+
+from zope.component.interfaces import ComponentLookupError
+from zope.traversing import api
+from zope.traversing.interfaces import TraversalError
+from zope.traversing.interfaces import IContainmentRoot
+from zope.traversing.namespace import SimpleHandler
+from zope.app.applicationcontrol.interfaces import IApplicationControl
+
+
+class etc(SimpleHandler):
+
+    def traverse(self, name, ignored):
+        """Fix IApplicationControl lookup. 
+        
+        The original application control object doesn't use the real root as
+        __parent__, this ends in a mess if it comes to menu concepts.
+        TODO: We can get rid of this package if we fix the bad __parent__ setup
+        in the following zope core packages zope.app.applicationcontrol and 
+        zope.traversing.namespace
+        """
+        ob = self.context
+
+        if (name in ('process', 'ApplicationController')
+            and IContainmentRoot.providedBy(ob)):
+            root = api.getRoot(self.context)
+            return IApplicationControl(root)
+
+        if name not in ('site',):
+            raise TraversalError(ob, name)
+
+        method_name = "getSiteManager"
+        method = getattr(ob, method_name, None)
+        if method is None:
+            raise TraversalError(ob, name)
+        try:
+            return method()
+        except ComponentLookupError:
+            raise TraversalError(ob, name)


Property changes on: zamplugin.control/trunk/src/zamplugin/control/namespace.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/plugin.py
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/plugin.py	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/plugin.py	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,38 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 97 2007-03-29 22:58:27Z rineichen $
+"""
+__docformat__ = "reStructuredText"
+
+import zope.component
+
+from z3c.baseregistry import baseregistry
+
+from zam.api.i18n import MessageFactory as _
+from zam.api import plugin
+
+
+ControlBaseRegistry = baseregistry.BaseComponents(
+    zope.component.globalSiteManager, 'zamplugin.control')
+
+
+class ControlPlugin(plugin.BaseRegistryPlugin):
+    """ZAM server control plugin."""
+
+    registry = ControlBaseRegistry
+
+    title = _("Server control plugin")
+
+    description = _("ZAM Control plugin.")


Property changes on: zamplugin.control/trunk/src/zamplugin/control/plugin.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/plugin.zcml
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/plugin.zcml	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/plugin.zcml	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,17 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    i18n_domain="zam">
+
+  <utility
+      component=".plugin.ControlBaseRegistry"
+      provides="zope.component.interfaces.IComponents"
+      name="zamplugin.control"
+      />
+
+  <utility
+      factory=".plugin.ControlPlugin"
+      provides="zam.api.interfaces.IBaseRegistryPlugin"
+      name="zamplugin.control"
+      />
+
+</configure>


Property changes on: zamplugin.control/trunk/src/zamplugin/control/plugin.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zamplugin.control/trunk/src/zamplugin/control/tests.py
===================================================================
--- zamplugin.control/trunk/src/zamplugin/control/tests.py	                        (rev 0)
+++ zamplugin.control/trunk/src/zamplugin/control/tests.py	2008-02-16 16:31:36 UTC (rev 83918)
@@ -0,0 +1,33 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 97 2007-03-29 22:58:27Z rineichen $
+"""
+
+import unittest
+from zope.app.testing import functional
+
+functional.defineLayer('TestLayer', 'ftesting.zcml')
+
+
+def test_suite():
+    suite = unittest.TestSuite()
+    s = functional.FunctionalDocFileSuite('README.txt')
+    s.layer = TestLayer
+    suite.addTest(s)
+
+    return suite
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')


Property changes on: zamplugin.control/trunk/src/zamplugin/control/tests.py
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list