Re: dynamic path to import publisher factory

mario ruggier <[email protected]>
Newsgroups gmane.comp.web.quixote.user
Message-ID <[email protected]>
On Sep 16, 2005, at 3:25 PM, mario ruggier wrote:

> Hi,
>
> imagine several packages for the same application, installed 
> simultaneously on the same machine. These can be for example a recent 
> stable/demo version, and a bleeding edge dev version. I want to be 
> able to run them concurrently, but independently. To run with either 
> simple_server or scgi_server, I am executing the respective python 
> scripts as new processes, that implies that if I adjust os.path in the 
> calling process, I cannot pass that env info to the child process. Or 
> can I?
>
> Looking at the code, I wonder whether it is (a) a good idea and (b) 
> possible to be able to pass on to whichever server a parameter to add 
> a specific dir to its os.path. I was imagining that either the factory 
> param takes the form of
> - str : as it is currently...
> - (str, str) : a 2-tuple of str, where the frist str will be 
> interpreted as a dir to add to os.path
>
> Then, the quixote.util.import_object(name) is similarly modified, e.g. 
> to:
>
> quixote.util.import_object(name, add_to_path=None):
> 	if add_to_path is not None:
> 		if add_to_path not in os.path:
> 			sys.path.insert(0, add_to_path)
> 	...
> 	rest of function as as currently

This does not work as advertised, because it is not possible to pass a 
tuple as a shell script parameter ;-(

> Another way would be to add an "add_to_path" option to the various 
> server scripts, that will then be handled separately (and before) from 
> the import_object() call.

This does work. For example, all that is necessary is to wrap the call 
to parse_args() (in the main() or equivalent of each server script e.g. 
in quixote.server.scgi_server.main) with the following:

main():
     ....
     parser.add_option(
         '--prepend-import-path', dest="path", default=None,
         help="Prepend path to python's import path")
     (options, args) = parser.parse_args()
     if options.path is not None:
         import sys
         sys.path.insert(0, options.path)

Then, when run() is called, import_object(factory) works as expected.

> Does this sound reasonable, or is there a much simple way to do this?

I guess another way to do this is to launch by importing and calling 
the respective server run(). But this has other non-desirable 
side-effects, such as running under the (ps) name of the calling 
utility script... and that I have things set-up to not run this way ;-(

mario
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.