On 6/5/09 12:37 PM, Chris Rossi wrote:
> On Fri, Jun 5, 2009 at 12:01 PM, Tres Seaver <tsea...@palladion.com
> <mailto:tsea...@palladion.com>> wrote:
> I'm assuming that we would fix anything in our repository; it
> should even be possible to do so in a BBB-compatible way, e.g.::
> def context_factory(environ=None, **kw):
> match_dict = kw.copy()
> if environ is not None: # called as "root factory"
> Ah, right. Cool. Making environ a kw arg preserves backwards
> compatability for context factories. So tweaking my suggestion a little
> class UnifiedFactory(Interface):
> def __call__(self, environ=None, **routes_match):
> Replaces concepts of root factory used for traversal and context
> factory used for routes, into a single concept. environ is the
> WSGI environment, and the match dict from routes matching, if
> applicable, is passed in as kw args.
> I'm sure Chris M will come up with something completely different.
FWIW, the original **kw interface for passing names into a context factory is a
little awkward already. For instance, routes match dicts have unicode *keys*.
This is because the names matched in the PATH_INFO by a pattern might actually
be themselves encoded; I didn't understand that this was by design until
recently. Currently the urldispatch code encodes the keys from Unicode to
just so they can be passed as **kw to the context factory (using Unicode keys
doesn't work when using **kw as function args). If I had understood that the
keys were *supposed* to be Unicode from the beginning (instead of strings),
context factories would have had an interface that looked like this:
... which isn't really too far off from:
match_dict = environ['wgsiorg.routing_args']
What I *should* have done from the very start was to pass the request object in
to both root factories and context factories. But it's too late for that now;
we'd break too many people's apps.
Anyway, I don't really mind changing the urldispatch stuff radically at this
point; I'll fix the docs and our code and help anyone who needs it change their
stuff. If I can make it bwcompat, great, but I'd rather break it now than
to live with it "forever".
Repoze-dev mailing list