[Zope-CMF] Re: Abusing GenericSetup during traditional installs

yuppie y.2006_ at wcm-solutions.de
Fri Jul 28 08:00:32 EDT 2006


Hi Martin!


Martin Aspeli wrote:
> 
> yuppie-2 wrote:
>> You might have noticed already that GS has two sub-frameworks, one for 
>> configuration handlers and one for content handlers. My answer just 
>> applies to configuration handlers:
>>
>> The adapters are explicitly made for using them outside the GS tool. 
>> Body adapters are multi-adapters for ISetupEnviron and the interface of 
>> the object, e.g. IActionsTool for the Actions Tool.
>>
>> ISetupEnviron is a small interface that provides a generic logger object 
>> and the mode in which XML files are applied. GS doesn't ship with a 
>> class that implements only this minimal interface.
>>
>> So if you have the XML body in 'body', the tool in 'obj' and the 
>> SetupEnviron in 'environ', these two lines are all you need:
>>
>> importer = queryMultiAdapter((obj, environ), IBody)
>> importer.body = body

I forgot to mention that this only works for existing objects (and new 
subobjects defined in the same XML file). If you want to add new objects 
that have their own XML files (like TypeInfos) you have to create empty 
objects first.

> My understanding of GS internals are fairly patchy, but that seems sensible.
> Is there an example of this with a bit more context, i.e. one that actually
> loads an XML file and runs the import step for that whole file?

The adapter tests work that way. 
CMFCore.exportimport.tests.test_actions.ActionsToolXMLAdapterTests is 
one example, you have to look at GenericSetup.testing to understand what 
it actually does.

Or a look at GenericSetup.utils.importObjects might give you some hints.

>> There are other solutions if your XML is part of a registered profile.
>>
> 
> Do you just mean "better" or "incompatible"? I guess in this case they
> wouldn't be part of a profile, but perhaps they could be and just never run
> in the normal portal_setup way. Or would having them registered invalidate
> or break a manual import mechanism?

Normal profiles will show up in the site add form and people can select 
them. There are ways to hide registered profiles or to create 
DirectoryImportContexts for profiles without registering them.

Don't know how many lines of code these solutions require. If you have a 
DirectoryImportContext for a profile you can use the step handlers like 
CMFCore.exportimport.actions.importActionProviders.

You might find hints in the tests for importActionProviders.


Cheers,

	Yuppie



More information about the Zope-CMF mailing list