[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