[Zope3-dev] Re: Deleting utilities in site management doesn't work
correct
jürgen Kartnaller
juergen at kartnaller.at
Sat Nov 12 07:12:37 EST 2005
Ups, sorry here is the attachment.
Jürgen
Stephan Richter wrote:
> On Friday 11 November 2005 12:00, jürgen Kartnaller wrote:
>
>>I could now manage to have a relatively simple test (see attached file).
>
>
> No file attached in my E-mail. :-(
>
>
>>I also found and fixed some other problems I encountered with the
>>utility registration.
>>
>>Can you please have a look at the test implementation and let me know if
>>this look ok.
>>
>>This test will not work with the current implementation of the
>>SiteManagementView !
>>I already fixed some problems in my sandbox.
>>
>>Problems solved :
>>- adding a utility without name
>>- renaming utilities to a name another already renamed utility had
>>- deleting more than one utility
>>- better message support
>> - show the message at the utility not just on top of the page
>> - show UserError exception as message
>
>
> Sounds very exciting! :-) Thanks a lot for your work! I will also review your
> file, once I get it.
>
> Regards,
> Stephan
--
---------------------------------------------------
Jürgen Kartnaller mailto:juergen_at_kartnaller.at
http://www.kartnaller.at
http://www.mcb-bregenz.at
---------------------------------------------------
-------------- next part --------------
==============
The Tools View
==============
>>> from zope import interface
First we define a utility to work with :
>>> from zope.app.content.interfaces import IContentType
>>> from zope.app.component.interfaces.registration import IRegisterable
>>> class IFooUtil(interface.Interface):
... pass
>>> class FooUtil(object):
... __parent__ = None
... __name__ = u''
... interface.implements(IFooUtil, IRegisterable, IContentType)
>>> from zope.app.component.browser import tools
>>> from zope import component
>>> toolConfig = tools.ToolConfiguration(IFooUtil, 'FooUtil')
>>> component.provideUtility(toolConfig, tools.IToolConfiguration, 'IFooUtil')
We need a factory to create our new utility :
>>> from zope.component.interfaces import IFactory
>>> from zope.component.factory import Factory
>>> from zope.app.security import protectclass
>>> protectclass.protectName(Factory, '__call__', 'zope.public')
>>> factory = Factory(FooUtil,
... 'Utility for foo',
... 'This factory creates a foo utility.')
>>> component.provideUtility(factory, IFactory, 'IFooUtil')
Let's now invoke our site management :
>>> from zope.publisher.browser import TestRequest
>>> request = TestRequest()
>>> request.form['activeTool']='IFooUtil'
>>> from zope.app import zapi
>>> view = tools.SiteManagementView(zapi.getSiteManager(), request)
>>> view.update()
u''
>>> request.form['ADD-TOOL-SUBMIT']='submit'
>>> request.form['type_name']='IFooUtil'
>>> request.form['id']='foo1'
>>> view.update()
u''
>>> util = component.getUtility(IFooUtil, 'foo1')
>>> util is not None
True
>>> current_tools = view.getTools()
>>> len(current_tools)
1
>>> current_tools[0]['instances'][0]['name']
'foo1'
Registering with the same name
------------------------------
>>> print view.update()
The given tool name is already being used.
>>> request.form['id']='foo2'
>>> view = tools.SiteManagementView(zapi.getSiteManager(), request)
>>> view.update()
u''
>>> current_tools = view.getTools()
>>> current_tools[0]['instances'][0]['name']
'foo1'
>>> current_tools[0]['instances'][1]['name']
'foo2'
Creating a utility without a name
---------------------------------
>>> request.form['id']=''
>>> view = tools.SiteManagementView(zapi.getSiteManager(), request)
>>> view.update()
u''
>>> current_tools = view.getTools()
>>> current_tools[0]['instances'][0]['name']
'foo1'
>>> current_tools[0]['instances'][1]['name']
'foo2'
>>> current_tools[0]['instances'][2]['name']
u''
Renaming utilities
------------------
>>> request = TestRequest()
>>> request.form['activeTool']='IFooUtil'
>>> request.form['RENAME-SUBMIT']='submit'
First we rename a single utility :
>>> request.form['old_names']=['foo1']
>>> request.form['new_names']=['JohnDoe']
>>> view = tools.SiteManagementView(zapi.getSiteManager(), request)
>>> view.update()
u'Tools successfully renamed.'
>>> current_tools = view.getTools()
>>> current_tools[0]['instances'][0]['name']
'JohnDoe'
>>> current_tools[0]['instances'][1]['name']
'foo2'
>>> current_tools[0]['instances'][2]['name']
u''
>>> request.form['old_names']=['JohnDoe', 'foo2']
>>> request.form['new_names']=['foo1', 'Tres']
>>> view = tools.SiteManagementView(zapi.getSiteManager(), request)
>>> view.update()
u'Tools successfully renamed.'
>>> current_tools = view.getTools()
>>> current_tools[0]['instances'][0]['name']
'foo1'
>>> current_tools[0]['instances'][1]['name']
'Tres'
>>> current_tools[0]['instances'][2]['name']
u''
Deleting utilities
------------------
>>> request = TestRequest()
>>> request.form['activeTool']='IFooUtil'
>>> request.form['DELETE-SUBMIT']='submit'
First we try without a selected utility :
>>> view = tools.SiteManagementView(zapi.getSiteManager(), request)
>>> view.update()
u'No tools selected.'
Now select one utility :
>>> request.form['selected']=['']
>>> view = tools.SiteManagementView(zapi.getSiteManager(), request)
>>> view.update()
u'Tools successfully deleted.'
>>> current_tools = view.getTools()
>>> current_tools[0]['instances'][0]['name']
'foo1'
>>> current_tools[0]['instances'][1]['name']
'Tres'
Select all the remaining utilities :
>>> request.form['selected']=['foo1', 'Tres']
>>> view = tools.SiteManagementView(zapi.getSiteManager(), request)
>>> view.update()
u'Tools successfully deleted.'
>>> view.getTools()[0]['instances']
[]
More information about the Zope3-dev
mailing list