[Checkins] SVN: grokui.admin/branches/fancy-layout/src/grokui/admin/ Cleaned the package. All tests pass.

Souheil CHELFOUH souheil at chelfouh.com
Thu Jan 28 07:12:34 EST 2010


Log message for revision 108599:
  Cleaned the package. All tests pass.
  

Changed:
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/applications.py
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/ftesting.zcml
  A   grokui.admin/branches/fancy-layout/src/grokui/admin/providers.py
  A   grokui.admin/branches/fancy-layout/src/grokui/admin/representation.py
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/security.py
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/server.py
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/templates/applications.pt
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/tests/apps.py
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/tests/brokenobjs.py
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/tests/events.py
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/tests/infoviews.py
  D   grokui.admin/branches/fancy-layout/src/grokui/admin/tests/macros.py
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/tests/packdatabase.py
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/tests/security.py
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/tests/server.py
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/tests/test_grokadmin.py
  U   grokui.admin/branches/fancy-layout/src/grokui/admin/view.py

-=-
Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/applications.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/applications.py	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/applications.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -2,14 +2,12 @@
 
 import grok
 from ZODB.broken import Broken
+from grokui.admin import representation
 from zope.traversing.browser import absoluteURL
 from zope.contentprovider.interfaces import IContentProvider
 from zope.component import getMultiAdapter, getAllUtilitiesRegisteredFor
-from grokui.base.layout import AdminView
+from grokui.base.layout import GrokUIView
 from grokui.base.namespace import GrokUILayer
-from grokui.base.interfaces import IInstallableApplication, \
-                                   IInstalledApplication, \
-                                   IApplicationRepresentation
 
 
 grok.templatedir("templates")
@@ -18,7 +16,7 @@
 class InstalledApplication(object):
     """
     """
-    grok.implements(IInstalledApplication)
+    grok.implements(representation.IInstalledApplication)
    
     def __init__(self, obj, request):
         self.__name__ = obj.__name__
@@ -37,7 +35,7 @@
 
 
 class BrokenApplication(object):
-    grok.implements(IApplicationRepresentation)
+    grok.implements(representation.IApplicationRepresentation)
 
     def __init__(self, name, obj):
         self.__name__ = name
@@ -49,7 +47,7 @@
 
 
 class InstallableApplication(object):
-    grok.implements(IInstallableApplication)
+    grok.implements(representation.IInstallableApplication)
     
     def __init__(self, klass):
         self.__name__ = klass.__name__
@@ -59,18 +57,18 @@
     
 class ApplicationInfo(grok.View):
     grok.name('info')
-    grok.context(IApplicationRepresentation)
+    grok.context(representation.IApplicationRepresentation)
 
     def render(self):
         info = getMultiAdapter(
             (self.context, self.request, self),
             IContentProvider,
-            name='grokui_application_info')
+            name='grokui_admin_appinfo')
         info.update()
         return info.render()
 
 
-class Applications(AdminView):
+class Applications(GrokUIView):
     """View for application management.
     """
     grok.layer(GrokUILayer)

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/ftesting.zcml
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/ftesting.zcml	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/ftesting.zcml	2010-01-28 12:12:34 UTC (rev 108599)
@@ -2,9 +2,9 @@
    xmlns="http://namespaces.zope.org/zope"
    xmlns:grok="http://namespaces.zope.org/grok"
    i18n_domain="grok"
-   package="grokui.admin"
-   >
+   package="grokui.admin">
 
+  <include package="grokui.base" />
   <include package="grokui.admin" />
   <grok:grok package="grokui.admin.tests" />
 

Added: grokui.admin/branches/fancy-layout/src/grokui/admin/providers.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/providers.py	                        (rev 0)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/providers.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+
+import grok
+from grokui.admin import representation
+
+
+class ApplicationInformation(grok.ViewletManager):
+    grok.name('grokui_admin_appinfo')
+    grok.context(representation.IApplicationRepresentation)

Added: grokui.admin/branches/fancy-layout/src/grokui/admin/representation.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/representation.py	                        (rev 0)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/representation.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+
+from zope import schema
+from zope.location import ILocation
+from zope.interface import Interface
+from zope.configuration.fields import PythonIdentifier
+from zope.contentprovider.interfaces import IContentProvider
+
+
+class IApplicationRepresentation(Interface):
+    """Defines an Grok application 
+    """
+    __name__ = schema.TextLine(
+        title = u"Name",
+        required = True)
+    
+    classname = PythonIdentifier(
+        title = u"Dotted name of the Application class",
+        required = True)
+    
+    description = schema.Text(
+        title = u"Description of the Application",
+        default = u"",
+        required = False)
+
+
+class IInstallableApplication(IApplicationRepresentation):
+    """Defines an installable application.
+    """
+
+
+class IInstalledApplication(IApplicationRepresentation, ILocation):
+    """Defines an application that is installed in our system.
+    """
+    url = schema.URI(
+        title = u"Absolute URL of the application",
+        required = True)
+
+
+class IApplicationInformation(IContentProvider):
+    """Marker interface for the Application information content provider.
+    """

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/security.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/security.py	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/security.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -11,22 +11,17 @@
 from persistent import Persistent
 from zope.component import adapter, provideHandler
 from zope.app.appsetup.interfaces import IDatabaseOpenedWithRootEvent
-from zope.site.interfaces import IRootFolder
 from grokui.admin.interfaces import ISecurityNotifier
 from grokui.admin.utilities import getVersion, TimeoutableHTTPHandler
+from grokui.base import Header, IGrokUIRealm
 
 
-class SecurityScreen(grok.ViewletManager):
-    """A viewlet manager that keeps security related notifications.
-    """
-    grok.name('grokadmin_security')
-    grok.context(IRootFolder)
-
-
 class SecurityNotificationViewlet(grok.Viewlet):
     """Viewlet displaying notifications from a local `SecurityNotifier`.
     """
-    grok.context(IRootFolder)
+    grok.order(40)
+    grok.context(IGrokUIRealm)
+    grok.viewletmanager(Header)
 
     @property
     def security_notifier(self):
@@ -40,7 +35,8 @@
         return site_manager.queryUtility(ISecurityNotifier, default=None)
 
     def render(self):
-        return self.security_notifier.getNotification()
+        return '''<div id="securitynotifications">%s</div>''' % (
+            self.security_notifier.getNotification())
 
 
 class SecurityNotifier(Persistent):

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/server.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/server.py	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/server.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -3,7 +3,7 @@
 import grok
 import z3c.flashmessage.interfaces
 
-from grokui.base.layout import AdminView
+from grokui.base.layout import GrokUIView
 from grokui.admin.interfaces import ISecurityNotifier
 from grokui.admin.utilities import getVersion
 
@@ -23,10 +23,10 @@
 grok.templatedir("templates")
 
 
-class Server(AdminView):
+class Server(GrokUIView):
     """Zope3 management screen.
     """
-    grok.title('Server')
+    grok.title('Server Control')
     grok.require('grok.ManageApplications')
 
     _fields = (

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/templates/applications.pt
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/templates/applications.pt	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/templates/applications.pt	2010-01-28 12:12:34 UTC (rev 108599)
@@ -1,5 +1,5 @@
 <div id="applications-panel" tal:define="root context/@@absolute_url">
-  <form tal:attributes="action string:$root/manageapps">
+  <form action="manageapps" id="installed">
     <fieldset>
       <legend>Installed applications</legend>
 
@@ -9,7 +9,7 @@
 	</p>
       </div>
 
-      <div tal:condition="view/installed" 
+      <div tal:condition="view/installed"
 	   tal:repeat="app view/installed">
 	<input type="checkbox" 
 	       class="checkbox" 
@@ -51,7 +51,7 @@
     <legend>Add application</legend>
 
     <div class="menu-box1" tal:repeat="app view/installable">
-      <form action="" tal:attributes="action string:${root}/add;">
+      <form action="add" tal:attributes="name app/classname">
 	<div class="menu-box2">
 	  <div class="menu-head1">
 	    <h3 tal:content="app/__name__">Application Name</h3>
@@ -63,7 +63,8 @@
 	  </div>
 	  <div tal:content="app/@@info" />
 	  <div class="menu-box3">
-	    <label>Name your new app: <input type="text" name="name"/></label>
+	    <label for="name">Name your new app:</label>
+	    <input type="text" name="name"/>
 	    <input type="hidden" name="application" value=""
 		   tal:attributes="value app/classname" />
 	    <input class="button" type="submit" name="Add" value="Create"/>

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/tests/apps.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/tests/apps.py	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/tests/apps.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -33,13 +33,13 @@
   >>> print browser.contents
   <html xmlns="http://www.w3.org/1999/xhtml">
   ...
-  ... <p ...>Currently no working...applications are installed.</p>
+  ... Currently no working...applications are installed.
   ...
 
 We are able to add a mammoth manager...
 
-  >>> subform = browser.getForm(name='MammothManager')
-  >>> subform.getControl('Name your new app:').value = 'my-mammoth-manager'
+  >>> subform = browser.getForm(name='grokui.admin.tests.apps.MammothManager')
+  >>> subform.getControl(name='name').value = 'my-mammoth-manager'
   >>> subform.getControl('Create').click()
 
   >>> print browser.contents
@@ -62,7 +62,7 @@
 We can also rename applications. For this we choose the application we
 installed and click `Rename`::
 
-  >>> browser.open("http://localhost/applications")
+  >>> browser.open("http://localhost/++grokui++/applications")
   >>> ctrl = browser.getControl(name='items')
   >>> ctrl.getControl(value='my-mammoth-manager').selected = True
   >>> browser.getControl('Rename').click()
@@ -91,7 +91,7 @@
   
 We are able to delete installed mammoth-managers
 
-  >>> browser.open("http://localhost/applications")
+  >>> browser.open("http://localhost/++grokui++/applications")
   >>> print browser.contents
   <html xmlns="http://www.w3.org/1999/xhtml">
   ...
@@ -103,7 +103,7 @@
   >>> print browser.contents
   <html xmlns="http://www.w3.org/1999/xhtml">
   ...
-  ... <p ...>Currently no working applications...are installed.</p>
+  ... Currently no working applications are installed.
   ...
   ...<legend>Add application</legend>
   ...

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/tests/brokenobjs.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/tests/brokenobjs.py	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/tests/brokenobjs.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -26,24 +26,25 @@
 If no broken applications are in the root, everything should look as
 usual:
 
-  >>> browser.open('http://localhost/applications')
+  >>> browser.open('http://localhost/++grokui++/applications')
   >>> 'Broken applications:' not in browser.contents
   True
 
 We have an application type available, which is intentionally broken
 and defined below::
 
-  >>> browser.open('http://localhost/applications')
+  >>> browser.open('http://localhost/++grokui++/applications')
   >>> 'PseudoBroken' in browser.contents
   True
 
 We add an instance of that new type:
 
-  >>> subform = browser.getForm(name='PseudoBroken')
+  >>> subform = browser.getForm(
+  ...             name='grokui.admin.tests.brokenobjs.PseudoBroken')
   >>> subform
   <zope.testbrowser.browser.Form object at 0x...>
 
-  >>> subform.getControl('Name your new app').value = 'mybrokenobj'
+  >>> subform.getControl(name='name').value = 'mybrokenobj'
   >>> subform.getControl('Create').click()
 
 and the broken object should show up in the applications list:

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/tests/events.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/tests/events.py	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/tests/events.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -29,8 +29,8 @@
 When we create a new instance of our app, the eventhandler defined
 below will be called:
 
-  >>> subform = browser.getForm(name='App')
-  >>> subform.getControl('Name your new app:').value = 'my-app'
+  >>> subform = browser.getForm(name='grokui.admin.tests.events.App')
+  >>> subform.getControl(name='name').value = 'my-app'
   >>> subform.getControl('Create').click()
   ObjectCreated event happened.
 

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/tests/infoviews.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/tests/infoviews.py	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/tests/infoviews.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -29,7 +29,7 @@
 
 We must be authenticated to fetch those infos::
 
-  >>> browser.open('http://localhost/@@grokadmin/@@version')
+  >>> browser.open('http://localhost/++grokui++/@@admin/@@version')
   Traceback (most recent call last):
   ...
   HTTPError: HTTP Error 401: Unauthorized
@@ -40,7 +40,7 @@
 When we are authenticated, we can retrieve the grok version used::
   
   >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
-  >>> browser.open('http://localhost/@@grokadmin/@@version')
+  >>> browser.open('http://localhost/++grokui++/@@admin/@@version')
   >>> print browser.contents
   grok ...
 
@@ -63,7 +63,7 @@
 To determine the used version of `grokui.admin` we can call::
 
   >>> import pkg_resources
-  >>> browser.open('http://localhost/@@grokadmin/@@version?pkg=grokui.admin')
+  >>> browser.open('http://localhost/++grokui++/@@admin/@@version?pkg=grokui.admin')
   >>> version = pkg_resources.get_distribution('grokui.admin').version
   >>> browser.contents == ('grokui.admin ' + version)
   True
@@ -74,7 +74,7 @@
 
 We can get the current security notification::
 
-  >>> browser.open('http://localhost/@@grokadmin/@@secnote')
+  >>> browser.open('http://localhost/++grokui++/@@admin/@@secnote')
   >>> print browser.contents
   Security notifications are disabled.
 

Deleted: grokui.admin/branches/fancy-layout/src/grokui/admin/tests/macros.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/tests/macros.py	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/tests/macros.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -1,68 +0,0 @@
-##############################################################################
-#
-# 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.
-#
-##############################################################################
-"""
-Macros for the grok admin UI
-
-  >>> from zope.testbrowser.testing import Browser
-  >>> browser = Browser()
-  >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
-  >>> browser.open('http://localhost/applications')
-
-Check, that the macros template renders correctly, even if not called
-with context of a GAIA object. This is important, because the macro
-view is bound to ``Interface`` and can therefore be called with nearly
-every object as context.
-
-We create a non-GAIA object, a mammoth called 'manfred'.
-
-  >>> subform = browser.getForm(name='Mammoth')
-  >>> subform.getControl('Name your new app:').value = 'manfred'
-  >>> subform.getControl('Create').click()
-
-and call the macroview with it:
-
-  >>> browser.open('http://localhost/manfred/@@externalview')
-  >>> print browser.contents
-  <html xmlns="http://www.w3.org/1999/xhtml">
-  ...
-     This template (grokadminmacros.pt in grok.admin) must be called
-     from a view with defined root_url.
-  ...
-
-So developers get informed, that they called the wrong macro view.
-
-Let's clean up.
-
-  >>> browser.open('http://localhost/applications')
-  >>> ctrl = browser.getControl(name='items')
-  >>> ctrl.getControl(value='manfred').selected = True
-  >>> browser.getControl('Delete Selected').click()
-
-
-"""
-import grok
-
-class Mammoth(grok.Application, grok.Container):
-    pass
-
-class ExternalView(grok.View):
-    """A view that calls grokadminmacros 'illegally'.
-    """
-    grok.context(Mammoth)
-
-externalview = grok.PageTemplate("""\
-<html metal:use-macro="context/@@grokadminmacros/macros/gaia-page">
-</html>
-""")
-

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/tests/packdatabase.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/tests/packdatabase.py	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/tests/packdatabase.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -19,8 +19,9 @@
   >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
   >>> browser.open("http://localhost/")
 
-  >>> subform = browser.getForm(name='StuffedMammoth')
-  >>> subform.getControl('Name your new app:').value = 'my-stuffed-mammoth'
+  >>> subform = browser.getForm(
+  ...    name='grokui.admin.tests.packdatabase.StuffedMammoth')
+  >>> subform.getControl(name='name').value = 'my-stuffed-mammoth'
   >>> subform.getControl('Create').click()
   >>> mylink = browser.getLink('my-stuffed-mammoth').click()
 
@@ -36,29 +37,19 @@
   Time to stuff a mammoth!
 
 Check the size of the ZODB.
-  >>> browser.open("http://localhost/server")
+  >>> browser.open("http://localhost/++grokui++/server")
   >>> lines = [ l.strip() for l in browser.contents.split('\\n') ]
   >>> zodb_size = lines[lines.index("Demo storage 'unnamed'")+  1]
   >>> num_zodb_size = int(zodb_size.split(' ')[0])
 
 Now, pack the database.
 
-(XXX: This test is disabled, because we get an infinite loop trying to
-      pack a demo storage.)
-
-  >>> #ctrl = browser.getControl(name='pack').click()
   >>> lines = [ l.strip() for l in browser.contents.split('\\n') ]
   >>> zodb_size = lines[lines.index("Demo storage 'unnamed'")+  1]
   >>> new_num_zodb_size = int(zodb_size.split(' ')[0])
 
-# remove this test - it highlights a problem with the zodb api, but is
-# a problem as a regression test
-#Ensure that it is smaller now:
-#  >>> new_num_zodb_size < num_zodb_size
-#  True
-
 And clean up after ourselves.
-  >>> browser.open("http://localhost/applications")
+  >>> browser.open("http://localhost/++grokui++/applications")
   >>> ctrl = browser.getControl(name='items')
   >>> ctrl.getControl(value='my-stuffed-mammoth').selected = True
   >>> browser.getControl('Delete Selected').click()

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/tests/security.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/tests/security.py	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/tests/security.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -189,7 +189,7 @@
   >>> from zope.testbrowser.testing import Browser
   >>> browser = Browser()
   >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
-  >>> browser.open('http://localhost/@@server')
+  >>> browser.open('http://localhost/++grokui++/@@server')
 
 On the server administration page we can see the status of our
 notifier (enabled or disabled)::

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/tests/server.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/tests/server.py	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/tests/server.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -35,7 +35,8 @@
   >>> print browser.contents
   <html xmlns="http://www.w3.org/1999/xhtml">
   ...
-  ...   <a href="http://localhost/server">Server Control</a>
+  <a href="http://localhost/++grokui++/server"
+     title="Server Control">Server Control</a>
   ...
 
 Now we can click that link and should get the server administration
@@ -43,7 +44,7 @@
 
   >>> browser.getLink('Server Control').click()
   >>> browser.title
-  'grok administration interface'
+  'Grok User Interface'
 
 We can enter an admin message::
 

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/tests/test_grokadmin.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/tests/test_grokadmin.py	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/tests/test_grokadmin.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -59,14 +59,14 @@
     for name in []:
         suite.addTest(suiteFromPackage(name))
     for name in ['utilities.py']:
-        suite.addTest(doctest.DocFileSuite(name,
-                                           package='grokui.admin',
-                                           globs=globs,
-                                           setUp=setUpZope,
-                                           tearDown=cleanUpZope,
-                                           optionflags=doctest.ELLIPSIS+
-                                           doctest.NORMALIZE_WHITESPACE)
-                      )
+        suite.addTest(doctest.DocFileSuite(
+            name,
+            package='grokui.admin',
+            globs=globs,
+            setUp=setUpZope,
+            tearDown=cleanUpZope,
+            optionflags=(doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE),
+            ))
     return suite
 
 if __name__ == '__main__':

Modified: grokui.admin/branches/fancy-layout/src/grokui/admin/view.py
===================================================================
--- grokui.admin/branches/fancy-layout/src/grokui/admin/view.py	2010-01-28 11:46:17 UTC (rev 108598)
+++ grokui.admin/branches/fancy-layout/src/grokui/admin/view.py	2010-01-28 12:12:34 UTC (rev 108599)
@@ -5,15 +5,14 @@
 import zope.component
 
 from BTrees.OOBTree import OOBTree
-from grokui.base import IGrokuiRealm
-from grokui.base.layout import AdminView
+from grokui.base import IGrokUIRealm, GrokUIView
 from grokui.admin.interfaces import ISecurityNotifier
 from grokui.admin.utilities import getVersion, getURLWithParams
 
 from zope.site.interfaces import IRootFolder
 from zope.exceptions import DuplicationError
   
-grok.context(IGrokuiRealm)
+grok.context(IGrokUIRealm)
 grok.templatedir("templates")
 
 
@@ -24,7 +23,7 @@
 class GrokAdminInfoView(grok.View):
     """A base to provide machinereadable views.
     """
-    grok.name('grokadmin')
+    grok.name('admin')
     grok.require('grok.ManageApplications')
     
     def render(self):
@@ -34,14 +33,15 @@
 class GrokAdminVersion(grok.View):
     """Display version of a package.
 
-    Call this view via http://localhost:8080/@@grokadmin/@@version to
+    Call this view via http://localhost:8080/@@admin/@@version to
     get the used grok version. Call
-    http://localhost:8080/@@grokadmin/@@version?pkg=<pkgname> to get
+    http://localhost:8080/@@admin/@@version?pkg=<pkgname> to get
     the used version of package <pkgname>.
     """
     grok.name('version')
     grok.context(GrokAdminInfoView)
     grok.require('grok.ManageApplications')
+    
     def render(self, pkg='grok'):
         return u'%s %s' % (pkg, getVersion(pkg))
 
@@ -49,11 +49,12 @@
 class GrokAdminSecurityNotes(grok.View):
     """Display current security notification.
 
-    Call this view via http://localhost:8080/@@grokadmin/@@secnote
+    Call this view via http://localhost:8080/@@admin/@@secnote
     """
     grok.name('secnote')
     grok.context(GrokAdminInfoView)
     grok.require('grok.ManageApplications')
+    
     def render(self):
         site = grok.getSite()
         site_manager = site.getSiteManager()
@@ -146,7 +147,7 @@
         self.redirect(self.url(self.context, 'applications'))
 
 
-class Rename(AdminView):
+class Rename(GrokUIView):
     """Rename Grok applications.
     """
     grok.name('grokadmin_rename')
@@ -170,19 +171,21 @@
             return
 
         mapping = dict([(items[x], new_names[x]) for x in range(len(items))])
+        root = self.context.__parent__
+        existing = root.keys()
 
         for oldname, newname in mapping.items():
             if oldname == newname:
                 continue
-            if oldname not in self.context.keys():
+            if oldname not in existing:
                 self.flash('Could not rename %s: not found' % oldname)
                 continue
-            if newname in self.context.keys():
+            if newname in existing:
                 self.flash('`%s` already exists.' % newname)
                 continue
-            self.context[newname] = self.context[oldname]
-            self.context[newname].__name__ = newname
-            del self.context[oldname]
+            root[newname] = root[oldname]
+            root[newname].__name__ = newname
+            del root[oldname]
             self.flash('Renamed `%s` to `%s`.' % (oldname, newname))
         self.redirect(self.url(self.context, 'applications'))
         return



More information about the checkins mailing list