[TransWarp] Component hierarchy traversal
Phillip J. Eby
pje at telecommunity.com
Fri Oct 10 12:11:19 EDT 2003
At 05:24 PM 10/10/03 +0200, Radek Kanovsky wrote:
>On Wed, Oct 01, 2003 at 02:46:29PM -0400, Phillip J. Eby wrote:
>
> > This issue in general is rather interesting. None of the approaches to
> > dealing with it are perfect: it seems there is a distinct tension between
> > broad resource discoverability, and lazy creation of those same resources.
>
>I think that genereal solution would require some changes in peak.binding.
>
>Bellow is my solution of problem with special command invocation
>without hierarchy traversal.
Please note that it's a bad idea to subclass ConfigurationRoot, as it makes
it more difficult for others to use your components as part of a larger
application. And, there isn't any need for you to, in order to implement
what you did. There's no reason the "root" application object can't simply:
_me = binding.Obtain('.', offerAs=[ICommandRoot])
...or something similar, for all the children to be able to access
it. Your 'registerCommand' binding could then simply do this:
root = binding.lookupComponent(ICommandRoot)
So, there's no reason to make it a configuration root, and hardcode its
location. Doing it this way instead, will allow your apps to be invoked as
'peak import:whatever.Application' if you derive the application class from
peak.running.commands.AbstractCommand.
Even if you prefer to make the application a self-contained executable
script, you can do:
if __name__=='__main__':
sys.exit(Application(config.makeRoot()).run())
But others will still be able to use your application class as an invokable
command according to PEAK conventions.
More information about the PEAK
mailing list