[Grok-dev] Re: five.grok

Martijn Faassen faassen at startifact.com
Fri Aug 1 09:58:25 EDT 2008


Godefroid Chapelle wrote:
[snip]
> I am a bit skeptical about importing everything from grok.
> 
> I think it is better to see what is coming from where !

As the developers of Grok we care quite a bit of what goes into that 
'grok' namespace. We're separating packages out so they can be used 
independently if you don't want to use the whole of Grok. I think though 
"five.grok" has at is aim to establish as much as possible of the Grok 
API in Zope 2, so it's a shame we cannot then encourage people to use 
this API...

> However, I understand others might like to use "from five import grok"

What is your opinion about straight (non-Zope 2) Grok? Would you prefer 
that people write this:

   from grokcore.component import Adapter
   from grokcore.view import View

   class Foo(Adapter):
      pass

   class Bar(View):
      pass

so that people can see "what is coming from where"?

instead of:

   import grok

   class Foo(grok.Adapter):
     pass

   class Bar(grok.View):
     pass

If so, why? We try to design the 'grok' namespace carefully; are you 
skeptical of this namespace in a Zope 2 context or a Zope 3 context or both?

[snip]
> IOW, I think code written with grok might be kept clean and compatible 
> with both Z2 and Z3 (without "try except ImportError").

Ah, this is perhaps your primary reason not to use the "grok" namespace 
in a Zope 2 context?

This then appears to be a choice between code reuse and the reuse of a 
single API we're trying to design and control. If you agree that people 
who use Grok itself directly should be using 'grok' and not the 
underlying packages, I think it would be good to allow people to do the 
same in a Zope 2 context.

Checking for an ImportError somewhere seems unavoidable, but it can be 
abstracted away. What about a grokcompat module that will get you the 
right Grok?

grokcompat.py

    try:
       import grok
    except ImportError
       from five import grok

That said, the situation is different for library code that knows it's 
just ever going to need grokcore.component. If you are writing a library 
that should be usable in a very wide context (Zope 2, straight Zope 3, 
Grok, perhaps even plain Python), a direct dependency on the underlying 
libraries makes sense.

If you are writing a Zope 2 application which will have to call Zope 2 
APIs a dependence on 'from five import grok' (or grokcompat perhaps) 
seems the right way to do however.

Regards,

Martijn



More information about the Grok-dev mailing list