[Zope3-dev] Re: zcml questions

Tres Seaver tseaver at palladion.com
Thu Sep 21 09:15:01 EDT 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Philipp von Weitershausen wrote:
> Chris Withers wrote:
>> Philipp von Weitershausen wrote:
>>> AFAIK, getUtilitiesFor is not supposed to order these in any way. 
>>> While the returned iterator does find them in a reproduceable order 
>>> due to the implementation, you shouldn't rely on that.
>> OK, so you should always sort this list when using it for a UI?
> 
> If you explicitly want the list to be sorted, sure. The question is how 
> you want it to be sorted. Perhaps not everyone wants it to be sorted by 
> the utility name.
> 
> Also, getUtilitiesFor is a generator. That makes it efficient if you 
> just get a few utilities, realize you have the one you want and don't 
> get the rest. If you expect a sorted output, you lose that efficiency.
> 
>> Hmm, seems odd, is getUtilitiesFor used for anything other than 
>> generating UI's?
> 
> I can't say off of the top of my head. Why don't you grep :)
> 
>>>> Also, if a site administrator wanted to "unregister" one of these in 
>>>> site.zcml, maybe because they didn't want the Traverse executor to be 
>>>> available, how would they go about doing that?
>>> ZCML has no way of unregistering specific utilities or adapters 
>>> (though there's a Python API).
>> That sucks :-(
>>
>> I thought the whole point of ZCML was that a site manager could override 
>> setup in site.zcml. 50% of that aim isn't done if they can't turn stuff 
>> off as well as on...
> 
> Right. I think zcml:condition was a first step into that direction. Its 
> implementation was very use case-driven. It seems you have a use case 
> for more control over ZCML, so it'd be nice to hear from suggestions how 
> you would envision a directive disabling feature in ZCML.
> 
>> Where can the python api for unregistration be found?
> 
> On site managers. They have unregister* methods. So, *after* your ZCML 
> has been loaded, you could poke at the global site manager and 
> unregister the utilities that ZCML registered.
> 
>>> In ZCML we typically define "features" and apply a condition using the 
>>> feature:
>> Why? So you can have yet another (pointless in this case) layer of 
>> indirection?!
> 
> *sigh*
> 
> We use it quite well in Zope 3 to enable/disable development tools like 
> APIDoc. We have a feature called 'devmode' so all debugging tools can 
> hook into that. APIDoc itself also enables a feature when it is loaded 
> so you can register things with APIDoc, but only if APIDoc is available.
> 
> zcml:condition also has another verb, "installed", that allows you to 
> load directives only when a certian Python package is available, e.g.:
> 
>    <include zcml:condition="installed reportlab"
>             package="worldcookery.pdf" />
> 
>>>   <meta:provides feature="twidder.defaulttraverser" />
>>>
>>>   <utility ...
>>>       zcml:condition="have twiddler.defaulttraverser" />
>> This is missing the point. There are an array of inputs, outputs and 
>> traversers available. There's a sensible default set registered, but 
>> site managers might have different requirements which are likely to 
>> include disabling some of the default registrations.
> 
> Why woudl they have to disable existing ones? Can't they just choose 
> different ones, leaving the default ones sitting there?
> 
>> How should I do things such that they can do that?
> 
> I'm just wondering whether you really need the disabling feature.

I've wanted it.  My major beef with the way we are *using* ZCML now is
that we expect package authors to provide policy-laden configuration for
their packages ("sensible defaults") but provide no means for the admin
to reuse that configuration selectively;  their only realy choice is to
*copy* the configuration and edit it.

I argued *long* ago (after the first ZC-internal Zope3 sprint, I think)
that the '<include>' directive should be allowed to be complex, with
subelements like '<except>' or '<only>' to pull in specific directives.
 Such a practice would require either that we have XPath support
available, or else that we come up with a way to mark the directives
(e.g., a 'zcml:id' attribute).  It would *also* require that we
implement the "no side-effects during parsing" policy (my other favorite
"dead horse" in arguments about ZCML's implementation / usage).


Tres.
- --
===================================================================
Tres Seaver          +1 202-558-7113          tseaver at palladion.com
Palladion Software   "Excellence by Design"    http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFFEpBV+gerLs4ltQ4RAlldAJ9FwPgZV3NCE16wXiZGwpljrpZfswCeLwU5
PdZXr3WyOcBeEpcAzEe2QEg=
=XbgN
-----END PGP SIGNATURE-----



More information about the Zope3-dev mailing list