[TransWarp] making progress using current PEAK features.
Phillip J. Eby
pje at telecommunity.com
Thu Jan 30 10:53:45 EST 2003
At 04:24 PM 1/30/03 +0100, Ulrich Eck wrote:
>In your MailExample (storage/tests/xmi.py) you use the
>"referencedType" attribute of features, looking up the type
>in the acquisition-tree of your Model.
>
>Because i split of all those classes (from those the model
>is composed) into submodules, i ran into trouble with
>the lookupComponent. (i do not use setupModule ..
>i import the child-classes from another module into the
>model, so these child-classes parents are the
>sub-modules themselfs)
>
>to bring back the ability of typeObjects i introduced a
>new naming-provider "wxtype:String" for example that is
>used for datatype-lookup.
>
>i configured this provider with a local peak-config-file.
>
>all this works very well.
>
>does the above sound basically right to you ??
Pretty much, yes. Of course, you can also just use
"import:pkg.module:class" strings to reference classes defined in other
modules, if you don't need any special indirection. I think I've mentioned
this before, but I thought I should make this reminder note in case anybody
thinks they have to create a naming provider just to deal with classes
being in another module!
In fact, you don't even need to use "import:" strings if you don't want, as
long as the module imports the thing you want to look up. Example:
# someModule.py
from peak.api import *
class something(model.Element):
class aFeature(model.Reference):
referencedType = 'someOtherType'
referencedEnd = 'inverseFeature'
from someOtherModule import someOtherType
# someOtherModule.py
from peak.api import *
class someOtherType(model.Element):
class aFeature(model.Reference):
referencedType = 'something'
referencedEnd = 'aFeature'
from someModule import something
The above two modules will import OK, because they import their referenced
type *after* they have defined the type they want to export. And, each
class considers its module to be its parent component, so it can acquire
the imported class, whenever you actually try to use the feature and it
looks up the name.
So really, you don't even have to use "import:" string references if you
don't want to, for relatively simple cases. But it's probably easier to
use "import:", since it would eliminate the "from..import" statements
above, replacing the referencedType strings with
'import:someOtherModule:someOtherType' and 'import:someModule:something'
respectively. And of course such strings are unambiguous in context.
More information about the PEAK
mailing list