[TransWarp] Component hierarchy traversal
Radek Kanovsky
rk at dat.cz
Wed Oct 1 12:34:20 EDT 2003
On Wed, Oct 01, 2003 at 12:05:28PM -0400, Phillip J. Eby wrote:
> > def traverseComponents (comp, reg=None) :
> > if reg is None :
> > reg = {}
> > yield (comp, binding.getComponentPath(comp))
> > reg[comp] = 1
> > for a,d in comp.__class__.__all_descriptors__.items() :
> > if not isinstance(d, binding.Attribute) :
> > continue
>
> Did you find that you needed the isinstance() check in practice? I'm just
> curious.
No, isinstance(d, binding.Attribute) seems useles now.
> > i = comp._getBinding(a)
>
> And why access the attribute in the dictionary, instead of using
> 'getattr()'?
With getattr call I am getting `__instance_offers__' infinitely looped
to other. It seem that __instance_offers__ are created on the fly:
/Kontakt/__instance_offers__/__instance_offers__/....
> Right. To be precise, all the parents above the items to be registered,
> must be assembled. That's not quite the whole hierarchy, unless every
> object in the system needs to be registered.
>
> > Is there some pattern how to solve this?
>
> If you know the paths of the objects in advance, you can use something like:
>
> allMyObjects = binding.Obtain(
> ['path/to/item1', 'path/to/item2', .... ], uponAssembly=True
> )
>
> in some object that needs the list; the 'allMyObjects' attribute will then
> equal a tuple of the listed objects.
I know every path but want to avoid to configure this in some place.
One often forget to add new component to allMyObjects binding.
Application itself is assembled from components and change in one
components can affect many applications.
> Could you explain your application a little? It may be that there are
> additional ways to accomplish what you need.
There are some smart components that implements IResourceComponent
interface. They should manage their persistent resources on demand
(Create/Drop/Check/...): EntityDM can create database tables, ImageCache
can prepare directory sturcture, SQLConnection can create some global
sequences, etc.
RadekK
More information about the PEAK
mailing list