Graham Dumpleton wrote:

On 12/02/2006, at 2:40 PM, Jim Gallacher wrote:

Graham Dumpleton wrote:

get_directories could have several meanings in the context of a request. Would req.get_module_directories() be a better alternative? Does that capture the concept that you are trying to achieve?


Except that it isn't really specific to just module importing. I gave the example of using it to work out a relative URL to a base URL.

Yes, I did see that example, but just as I tend to automatically s/~/$HOME/g, I also tend to see any long exposition from Graham as being part of the Grand Unified Importing theory, even when there is evidence to the contrary. Other than that I'm perfectly all right. :)

You might also use it to
work out a base directory for where to load a non module file such as a
ConfigParser compatible config file.

My other option was:

  PythonSetBaseDirectory
  PythonAddBaseDirectory

  req.get_base_directories()

or:

  PythonBaseDirectory
  PythonSetDirectory

  req.get_directories()

or:

  PythonSetContext
  PythonAddContent

  req.get_contexts()

4. Lastly, if you think the idea is good, but how it is done is not, how do you think it should be done and how do you think the Python*Handler in FIles
directive should be solved, if at all?


I'll need to read your proposal a more few times before commenting further.

My one minor quibble is the special meaning given to the '~' character. My brain automatically reads this as $HOME. I suspect that other people casually looking at an apache config file may do the same, which could lead to some confusion.


Yeah, I know and I was going to put on my list of questions as to an alternative
to using "~/". The other option was whether to use something like:

  PythonHandler ${__handler_root__}/handlers/mymodule.py

  PythonHandler ${myapproot}/handlers/mymodule.py

If you start going down arbitrary variable replacement though, do you start
to allow variable references anywhere and allow stuff like:

  <Files *.html>
  PythonHandler ${myapproot}/handlers/mymodule.py::${__phase__}_html
  </Files>

  PythonOption myapp.variant production

PythonHandler ${myapproot}/handlers/${myapp.variant}/mymodule.py::$ {__phase__}_html

Ie., introduce other magic variables which refer to other attributes associated with the request, such as the phase, or even the value of variables specified
using PythonOption.

Also, what variable interpolation scheme do you use, something like  above
which would need a special parser, or something like builtin system used with
mod operator for strings.

PythonHandler %(myapproot)s/handlers/%(myapp.variant)s/ mymodule.py::%(__phase__)s_html

Need to see what conventions other parts of Apache use as should be the same
if one went this far.

I think this might take some experimentation for the substitution, directive and function naming schemes. What seems like a good idea now may be cumbersome with a little experience, in the same way that using a namespace for PythonOption keys seems blazingly obvious now.

I like the "%(key)s" idiom for it's pythonic nature. You can look at an apache directive that starts with Python and say to yourself "python rules apply from here to the end of the line". (Except when they don't, as in the case of module::function. Oh well, it's an imperfect world).

It would also be a good idea to scan JIRA and the mailing list archive for other places these functions and substitution rules may be useful so we don't end up with duplicate, but incompatible solutions in different places. For example, in 3.2 you can use "PythonOption session" to set the session class, but only for one of the builtin sessions. I'd like to extend that functionality to user defined session classes and the ideas you've outlined would be useful there as well.

Jim

Reply via email to