[Web-SIG] more comments on Paste Deploy
Ian Bicking
ianb at colorstudy.com
Sat Mar 3 22:37:52 CET 2007
L.C. Rees wrote:
>> Sure, as long as Paste Deploy's config syntax is optional for
>> whatever-we're-building. :^)
>
> Some of the pain and angst over choosing one solution to the WSGI
> application composition problem could be treated by dividing the
> composition process into (at least) three parts:
>
> 1. Configuration parsing
>
> Configuration information is read from multiple files or one big file
> all at once (something ConfigParser in the standard library, for
> example, already has support for) or selectively. The information,
> stored in whatever format (INI, Python, even XML, pick your poison),
> is parsed (with optionally validation) into a uniform internal Python
> format.
I don't think we should have any validation in the config format (except
for basic syntax, of course). Doing validation is just too hard, and
leads to a rather complex config framework. I think some of the
problems with ZConfig come back to this.
I personally am quite happy with Paste Deploy using straight strings,
not Python expressions or anything else that presumes to understand values.
> The internal format would be a sequence of tuples. Each tuple
> would contain three elements:
>
> a. An identifier consisting of tuple that contains two elements, an
> (optional) qualifying prefix and a more specific identifier.
> b. Configuration parameters that have been parsed into a tuple of
> positional arguments.
> c. Configuration parameters that have been parsed into a dictionary of
> keyword arguments.
I'm confused here. Can you give an example of what this data would look
like for something simple? (E.g., a blog app) How does this different
or better than a flat dictionary of strings (which is basically what
Paste Deploy provides)?
> 2. Dispatching
>
> A dispatcher would take the sequence of tuples from the parser and
> resolve the identifier to an adapter. The dispatcher would then strip
> out the identifier, and pass a tuple containing the tuple of
> positional arguments the dictionary of keyword arguments to the
> adapter.
>
> Different identifier schemes could be accommodated by the same
> dispatcher as needed.
I'm not sure what you are describing here. Is this like in Paste
Deploy, we strip out the "use" key to find the entry point?
> 3. Adapting
>
> The adapter would be responsible for taking the configuration data in
> the tuple passed to it by the dispatcher and returning a configured
> WSGI application.
>
> An approach that decomposes the WSGI application composition process
> into distinct stages would accommodate different approaches to each
> stage of the composition process while allowing interoperability
> similar to how WSGI allows heterogeneous Python web applications to
> live together in (greater) peace and harmony-lcr
In some ways we can, in some ways we can't. For instance, a config file
format that produces integers, lists, etc., is a bit hard to reconcile
with a separate format that only produces strings. (If consumers always
special-case strings this isn't so bad, but if you get used to getting
non-strings you are less likely to do that.) Also, is order relevant?
It isn't in dictionaries, but could be in a file format, but probably
wouldn't be in a database. We have to come up with some lowest common
denominator. And having done that, we can support *some* set of config
formats or data sources, but a bunch of formats will seem superfluous,
as any added value they might provide will be useless since it can't be
relied upon.
In this sense, while the entry points can be mostly discussed regardless
of the config format, it's not entirely true -- you have to keep at
least some set of config formats in your head at the same time as you
are discussing the entry points.
--
Ian Bicking | ianb at colorstudy.com | http://blog.ianbicking.org
More information about the Web-SIG
mailing list