[Grok-dev] Re: grok directive for only grokking during development mode

Philipp von Weitershausen philipp at weitershausen.de
Thu Feb 7 10:14:12 EST 2008


Martijn Faassen wrote:
> Hi there,
> 
> I think it would be useful to have a directive that can be put on a 
> component so it only gets grokked during development mode, not in 
> production mode. Something like this:
> 
> class MyView(grok.View):
>    grok.devel()
> 
> 'MyView' would only be grokked and thus only registered in development 
> mode, not in production mode. This requires us figuring out what 
> development-mode and production-mode currently mean in Zope and how to 
> detect it during the grokking process...
> 
> Or perhaps we should generalize this to the tagging story we already 
> discussed quite a while ago:
> 
> class MyView(grok.View):
>    grok.tag('devel')
> 
> the 'grok.tag' directive would receive one or more tags. Tags are then 
> used to determine what gets grokked or not, perhaps like this:
> 
> <grok:grok package="." include_tags="a b" exclude_tags="c d" />
> 
> It'd be nice to be able to spell out the include_tags and exclude_tags 
> in Python somehow, so that we don't end up writing a lot of ZCML in the 
> end. :)
> 
> Some tags could be given special meaning, like 'devel', which means 
> "don't include during production mode". Anyway, a bit of design to work 
> out.
> 
> What do people think? Ideas? Suggestions?

I like this. I would suggest working closely with ZCML conditionals, 
mostly because our grokkers already use the underlying ZCML action 
machinery and it would integrate with the rest of Zope 3 very nicely.

I think especially the ability to check for "features" is useful here 
(see also my response to Wichert down the thread).

I could see something like this:

   class DebugView(grok.View):
       grok.condition(have='devmode')

(much like <browser:view zcml:condition="have devmode" ... />)

Here's another useful example:

   class PDFView(grok.View):
       grok.condition(installed='reportlab')

       def render(self):
           import reportlab
           ...

(analogous to <browser:view zcml:condition="installed reportlab" ... />)


More information about the Grok-dev mailing list