[Grok-dev] towards a new publisher
Chris McDonough
chrism at plope.com
Fri May 21 12:33:28 EDT 2010
One other very important thing... I would make the base system work
without any need for thread locals. If I continued to use the ZCA, this
change would imply that there would always be a "registry" (ZCA registry
object) attached to the request and programmers would be expected to use
it; the global ZCA API would not work.
- C
On Fri, 2010-05-21 at 12:19 -0400, Chris McDonough wrote:
> FTR, here's a "if I had it to do all again" list:
>
> - I would totally decouple the call signature of view callables from
> the adaptation arguments used to find the callable. This is
> the case in BFG right now: the code which finds a BFG view callable
> is actually a named adapter with three provides arguments
> at the moment, but we don't use getMultiAdapter to both find
> and call the view; we just use adapters.lookup to find one, then
> call it with arguments that make more sense. The view callables
> themselves accept either (context, request) or just (request,).
>
> If I had to go back in time, I would make view callables
> always just accept "request". "request" would be sort of
> a garbage barge namespace; I'd attach "context" to the request
> as necessary for people to peel off and use as necessary.
>
> In fact, if I had it all to do over, I would probably not use
> zope.interface or zope.component to implement core BFG features
> like view lookup. Once view predicates are involved,
> view lookup is no longer ever just straight adaptation. The ZCA
> can sometimes be used to optimize one phase of the lookup
> but given that it's the outer loop, it's sort of not on
> the critical path in most apps.
>
> - I would build BFG atop a subsystem that allowed use by frameworks
> with simpler view lookup requirements.
> http://bitbucket.org/chrism/marco is such a system. Then I'd build
> BFG atop that and try to convince other framework authors (Pylons,
> etc) to share the same subsystem.
>
> On Tue, 2010-05-18 at 19:40 +0200, Martijn Faassen wrote:
> > Hi there,
> >
> > Souheil CHELFOUH wrote:
> > > I'm very enthousiastic about that.
> > > My only thought is that, we should start designing it and, if we find,
> > > along the way that it looks like things we can take from other
> > > projects, so be it.
> >
> > Here are some of my design thoughts:
> >
> > * no need to support the APIs of the current publisher
> >
> > * retain model/view separation
> >
> > * should it be adaptation of (request, context) instead of (context,
> > request)? (see ChrisM's blog)
> >
> > * expand views with predicates
> >
> > * explore functions as views
> >
> > * support traversing and routing (traject)
> >
> > * still be location-aware (__parent__ and __name__)
> >
> > * URLs can be automatically constructed for models (like they are now)
> >
> > * Use WebOb's request and response implementation
> >
> > * everything in a reusable package. This is enough to create web apps.
> >
> > * everything to support Grok-ish things in another package that builds
> > on this. This would teach the system about specific objects that are
> > traversable, etc.
> >
> > * trigger per view whether new or old system of traversal is in use for
> > looking it up? (by a different base class, or a directive?)
> >
> > * concept of "path consumption", where a traverser consumes a path step
> > by step, where a consumer like traject might consume multiple steps at once
> >
> > * consumption all the way to the last model, then look up either index
> > if no more path segment is available, or otherwise look up the view.
> >
> > * nested views (views on views) would be nice, but aren't essential.
> >
> > * We need to support things like @@ at the very least to support
> > backwards compatibility.
> >
> > * path steps are in a namespace (with a default). So,
> > foo/bar/++view++baz decomposes into the follow namespace, name tuples
> > ('default', 'foo'), ('default', 'bar'), ('view', 'baz').
> >
> > * support layers and permissions on views. Perhaps these can be
> > interpreted as specialization of the predicate system.
> >
> > * exception views should be supported
> >
> > * let's produce the more clear and helpful error messages we can do
> >
> > * we might be able to build things on zope.interface.AdapterRegistry
> > sidestepping zope.component. traject already had to do this. This way
> > it's easier to do non-global registries that are attached to the
> > application or the wsgi environment or the request or something. There
> > are drawbacks to this too (people might not think to look there for
> > introspection).
> >
> > Regards,
> >
> > Martijn
> >
> > _______________________________________________
> > Grok-dev mailing list
> > Grok-dev at zope.org
> > https://mail.zope.org/mailman/listinfo/grok-dev
> >
>
>
> _______________________________________________
> Grok-dev mailing list
> Grok-dev at zope.org
> https://mail.zope.org/mailman/listinfo/grok-dev
>
More information about the Grok-dev
mailing list