The PEAK Developers' Center   ComposingHierarchies UserPreferences
 
HelpContents Search Diffs Info Edit Subscribe XML Print View
Version as of 2004-10-09 01:35:35

Clear message


1 Introduction

The purpose of this page is to give a quick overview of how to compose component hierarchies using the PEAK framework, using working code. I have inlined comments in the code example, so hopefully, it will be self explanatory.

2 Code

Here's the code example that I came up with while working out how to compose hiearchies, and "aquire" objects from parent components in PEAK. It requires the current CVS version of PEAK (0.5a3).

    1 #file components1.py
    2 from peak.api import *
    3 
    4 SPAM_PROPERTY = PropertyName("simplecmpApp.spam")
    5 COLOR_PROPERTY = PropertyName("simplecmpApp.color")
    6 EGGS_PROPERTY = PropertyName("simplecmpApp.eggs")
    7 
    8 
    9 #------------------------------------------------------------
   10 class ISpam(protocols.Interface):
   11     """Spam interface"""
   12     def spam():
   13         """provide spam"""
   14 
   15 class Spam(binding.Component):
   16     protocols.advise(instancesProvide=[ISpam])
   17     def spam(self):
   18         return "spam"
   19 
   20 #------------------------------------------------------------
   21 class IEggs(protocols.Interface):
   22     """Eggs interface"""
   23     def eggs():
   24         """provide eggs"""
   25 
   26 class Eggs(binding.Component):
   27     protocols.advise(instancesProvide=[IEggs])
   28     def eggs(self):
   29         return "eggs"
   30 
   31 class OtherEggs(binding.Component):
   32     protocols.advise(instancesProvide=[IEggs])
   33     def eggs(self):
   34         return "othereggs"
   35 
   36 
   37 #------------------------------------------------------------
   38 class GrandChildCmp(binding.Component):
   39     #acquired from SimpleCmp
   40     gcSpam = binding.Obtain(SPAM_PROPERTY)
   41     gcColor = binding.Obtain(COLOR_PROPERTY)
   42     gcEggs = binding.Obtain(EGGS_PROPERTY)
   43     #acquired from ChildCmp
   44     gcOtherEggs = binding.Obtain(IEggs)
   45     #acquired from SimpleCmp
   46     gcStr = binding.Obtain("sc_string")
   47 
   48 class ChildCmp(binding.Component):
   49     #acquired from SimpleCmp
   50     cSpam = binding.Obtain(ISpam)
   51     cStr = binding.Obtain("sc_string")
   52     #overrides IEggs provided by SimpleCmp
   53     cEggs = binding.Obtain(IEggs)
   54     __eggs = binding.Make(OtherEggs, offerAs=[IEggs])
   55 
   56     #make a GrandChild child of this component
   57     grandChild = binding.Make(GrandChildCmp)
   58 
   59 class SimpleCmp(binding.Component):
   60     #simple component variable. Child components can look up directly by name
   61     sc_string = "simple-c!"
   62     #__eggs and __spam are registered as Interfaces and properties
   63     #They can be bound either using binding.Obtain(<InterfaceName>)
   64     #or binding.Obtain(PropertyName(<property.name>))
   65     __eggs = binding.Make(Eggs, offerAs=[IEggs, EGGS_PROPERTY])
   66     __spam = binding.Make(Spam, offerAs=[ISpam, SPAM_PROPERTY])
   67     #__color is a Constant bound to a property
   68     __color = binding.Make(lambda:"red", offerAs=[COLOR_PROPERTY])
   69 
   70     #make a ChildCmp child of this component
   71     child = binding.Make(ChildCmp)
   72 
   73 #------------------------------------------------------------
   74 if __name__ == "__main__":
   75 
   76     sc = SimpleCmp()
   77     c = sc.child
   78     gc = c.grandChild
   79 
   80 
   81     print "c.eggs: ",c.cEggs.eggs()
   82     print "c.spam: ",c.cSpam.spam()
   83     print "c.cStr: ",c.cStr
   84     print "gc.spam: ",gc.gcSpam.spam()
   85     print "gc.eggs: ",gc.gcEggs.eggs()
   86     print "gcOther.eggs: ",gc.gcOtherEggs.eggs()
   87     print "gc.myColor: ",gc.gcColor
   88     print "gc.gcStr: ",gc.gcStr
   89     print "done"
   90 [http://www01.voip99.com &#40635;&#23558;&#26426;][http://www02.voip99.com &#36215;&#37325;&#26426;][http://www03.voip99.com &#25104;&#20154;&#29992;&#21697;][http://www04.voip99.com &#21487;&#35270;&#30005;&#35805;][http://www05.voip99.com &#30005;&#21147;&#29483;][http://www06.voip99.com &#26080;&#32447;&#19978;&#32593;&#21345;][http://www07.voip99.com &#30005;&#26799;][http://www08.voip99.com &#21449;&#36710;][http://www09.voip99.com &#36718;&#32974;][http://www10.voip99.com &#30005;&#23376;&#20202;&#22120;][http://www11.voip99.com &#27773;&#36710;&#37197;&#20214;][http://www12.voip99.com &#28034;&#26009;][http://www13.voip99.com &#21270;&#24037;&#26426;&#26800;][http://www14.voip99.com &#24178;&#29157;&#35774;&#22791;][http://www15.voip99.com &#39068;&#26009;][http://www16.voip99.com &#38043;&#30333;&#31881;][http://www17.voip99.com &#22609;&#26009;&#21046;&#21697;][http://www18.voip99.com &#38400;&#38376;][http://www19.voip99.com &#32431;&#27700;&#35774;&#22791;][http://www20.voip99.com &#21307;&#29992;&#30005;&#23376;][http://www21.voip99.com &#30005;&#21160;&#33258;&#34892;&#36710;][http://www22.voip99.com &#20445;&#38505;&#26588;,&#20445;&#38505;&#31665;][http://www23.voip99.com &#20943;&#38663;&#22120;][http://www24.voip99.com &#29983;&#29289;&#35782;&#21035;][http://www25.voip99.com &#38450;&#20266;&#25216;&#26415;][http://www26.voip99.com &#38450;&#28779;&#26448;&#26009;][http://www27.voip99.com &#21360;&#21047;&#26426;][http://www28.voip99.com &#32784;&#28779;&#26448;&#26009;][http://www29.voip99.com &#29031;&#26126;][http://www30.voip99.com &#21046;&#20919;][http://www31.voip99.com &#28034;&#35013;][http://www32.voip99.com &#30005;&#38208;][http://www33.voip99.com &#34920;&#38754;&#22788;&#29702;][http://www34.voip99.com &#24202;&#19978;&#29992;&#21697;][http://www35.voip99.com &#32487;&#30005;&#22120;][http://www36.voip99.com &#24037;&#33402;&#21697;][http://www37.voip99.com &#26426;&#24202;][http://www38.voip99.com &#30005;&#23376;&#31204;][http://www39.voip99.com &#30005;&#36335;&#26495;][http://www40.voip99.com &#24178;&#29157;&#21058;][http://www41.voip99.com &#24377;&#31783;][http://www42.voip99.com &#32440;&#31665;][http://www43.voip99.com &#19997;&#21360;][http://www44.voip99.com &#32435;&#31859;&#28938;&#26465;][http://www45.voip99.com &#21319;&#38477;&#26426;][http://www46.voip99.com &#21453;&#20809;&#26448;&#26009;][http://www47.voip99.com &#25171;&#26631;&#26426;][http://www48.voip99.com &#28201;&#28287;&#24230;&#35745;][http://www49.voip99.com &#28909;&#22788;&#29702;&#35774;&#22791;][http://www50.voip99.com &#20919;&#27700;&#26426;][http://aaa01.zhiliaotuofa.com &#21253;&#35013;&#35774;&#35745;][http://aaa02.zhiliaotuofa.com &#21387;&#32553;&#26426;][http://aaa03.zhiliaotuofa.com &#25163;&#26426;&#31363;&#21548;&#22120;][http://aaa04.zhiliaotuofa.com &#30005;&#35805;&#21464;&#22768;&#22120;][http://aaa05.zhiliaotuofa.com &#38024;&#23380;&#25668;&#20687;&#26426;][http://aaa06.zhiliaotuofa.com &#25391;&#21160;&#31579;][http://aaa07.zhiliaotuofa.com &#31354;&#27668;&#20928;&#21270;][http://aaa08.zhiliaotuofa.com &#21560;&#22609;&#21046;&#21697;][http://aaa09.zhiliaotuofa.com &#20282;&#26381;&#30005;&#26426;][http://aaa10.zhiliaotuofa.com &#26426;&#30005;&#35774;&#22791;][http://aaa11.zhiliaotuofa.com &#36229;&#22768;&#27874;&#35774;&#22791;][http://aaa12.zhiliaotuofa.com &#30005;&#38459;][http://aaa13.zhiliaotuofa.com &#27963;&#24615;&#28845;][http://aaa14.zhiliaotuofa.com &#23454;&#39564;&#23460;&#35774;&#22791;][http://aaa15.zhiliaotuofa.com &#29627;&#29827;&#22120;&#30399;][http://aaa16.zhiliaotuofa.com &#32791;&#26448;][http://aaa17.zhiliaotuofa.com &#38598;&#25104;&#30005;&#36335;][http://aaa18.zhiliaotuofa.com &#36830;&#25509;&#22120;][http://aaa19.zhiliaotuofa.com &#30005;&#23481;&#22120;][http://aaa20.zhiliaotuofa.com &#33410;&#33021;&#28783;][http://aaa21.zhiliaotuofa.com &#26029;&#36335;&#22120;][http://aaa22.zhiliaotuofa.com &#30005;&#21160;&#26426;][http://aaa23.zhiliaotuofa.com &#23494;&#23553;&#20214;][http://aaa24.zhiliaotuofa.com &#30005;&#21160;&#24037;&#20855;][http://aaa25.zhiliaotuofa.com &#21150;&#20844;&#23478;&#20855;][http://aaa26.zhiliaotuofa.com &#28909;&#27700;&#22120;][http://aaa27.zhiliaotuofa.com &#37329;&#23646;&#19997;&#32593;][http://aaa28.zhiliaotuofa.com &#30913;&#24615;&#26448;&#26009;][http://aaa29.zhiliaotuofa.com &#38109;&#21046;&#21697;][http://aaa30.zhiliaotuofa.com &#33988;&#30005;&#27744;][http://aaa31.zhiliaotuofa.com &#38145;&#20855;][http://aaa32.zhiliaotuofa.com &#38146;&#30005;&#27744;][http://aaa33.zhiliaotuofa.com &#22609;&#26009;&#29609;&#20855;][http://aaa34.zhiliaotuofa.com &#30005;&#21160;&#36710;][http://aaa35.zhiliaotuofa.com &#38450;&#30423;&#22120;][http://aaa36.zhiliaotuofa.com &#21360;&#21047;&#26426;&#26800;][http://aaa37.zhiliaotuofa.com &#22826;&#38451;&#33021;&#28909;&#27700;&#22120;][http://aaa38.zhiliaotuofa.com &#21464;&#36865;&#22120;][http://aaa39.zhiliaotuofa.com &#26631;&#20934;&#20214;][http://aaa40.zhiliaotuofa.com &#20202;&#22120;&#20202;&#34920;][http://aaa41.zhiliaotuofa.com &#25512;&#22303;&#26426;,&#21387;&#36335;&#26426;][http://aaa42.zhiliaotuofa.com &#32477;&#32536;&#26448;&#26009;][http://aaa43.zhiliaotuofa.com &#30005;&#32447;&#30005;&#32518;][http://aaa44.zhiliaotuofa.com &#31283;&#21387;&#22120;][http://aaa45.zhiliaotuofa.com &#30802;&#40723;,&#28145;&#22323;&#30802;&#40723;&#65292;&#22696;&#30418;,&#28145;&#22323;&#22696;&#30418;,&#33394;&#24102;][http://aaa46.zhiliaotuofa.com &#20805;&#27668;&#24202;][http://aaa47.zhiliaotuofa.com &#25968;&#30721;&#30005;&#35805;][http://aaa48.zhiliaotuofa.com &#38050;&#31649;][http://aaa49.zhiliaotuofa.com &#39118;&#26426;][http://aaa50.zhiliaotuofa.com &#38149;&#28809;][http://w01.voip99.net &#21464;&#39057;&#22120;][http://w02.voip99.net &#28070;&#28369;&#27833;][http://w03.voip99.net &#31163;&#21512;&#22120;][http://w04.voip99.net &#29392;&#33261;][http://w05.voip99.net &#31958;&#23615;&#30149;][http://w06.voip99.net &#30005;&#23481;][http://w07.voip99.net &#28784;&#25351;&#30002;][http://w08.voip99.net &#36817;&#35270;&#30524;][http://w09.voip99.net &#33073;&#27611;][http://w10.voip99.net &#20928;&#27700;&#22120;][http://w11.voip99.net &#34562;&#34588;][http://w12.voip99.net &#32039;&#22266;&#20214;][http://w13.voip99.net &#21046;&#26381;][http://w14.voip99.net &#20581;&#36523;&#22120;&#26448;][http://w15.voip99.net &#22826;&#38451;&#33021;&#28909;&#27700;&#22120;][http://w16.voip99.net &#23130;&#32433;&#25668;&#24433;][http://w17.voip99.net LED][http://w18.voip99.net &#37202;&#24215;][http://w19.voip99.net &#27700;&#34920;][http://w20.voip99.net &#38149;&#28809;][http://w21.voip99.net &#25171;&#21253;&#26426;][http://w22.voip99.net &#30164;&#30126;][http://w23.voip99.net &#21457;&#30005;&#26426;][http://w24.voip99.net &#28145;&#22323;&#35013;&#39280;][http://w25.voip99.net &#20999;&#21106;&#26426;][http://w26.voip99.net &#28145;&#22323;&#21360;&#21047;][http://w27.voip99.net &#28145;&#22323;&#26465;&#30721;][http://w28.voip99.net &#28608;&#20809;&#35774;&#22791;][http://w29.voip99.net &#29031;&#25490;&#26426;][http://w30.voip99.net &#39184;&#20855;][http://w31.voip99.net IP&#36229;&#24066;&#35745;&#36153;&#31995;&#32479;][http://w32.voip99.net &#32593;&#32476;&#30005;&#35805;][http://w33.voip99.net VOIP&#32593;&#20851;][http://w34.voip99.net IP&#30005;&#35805;][http://w35.voip99.net &#36719;&#20132;&#25442;][http://w36.voip99.net GK][http://w37.voip99.net &#32593;&#32476;&#30005;&#35805;][http://w38.voip99.net &#27835;&#30103;&#33073;&#21457;][http://w39.voip99.net &#27835;&#30103;&#33073;&#22836;&#21457;][http://w40.voip99.net &#32593;&#32476;&#30005;&#35805;&#21345;][http://w41.voip99.net VOIP][http://w42.voip99.net VOIP&#32593;&#32476;&#30005;&#35805;][http://w43.voip99.net &#33026;&#28322;&#24615;&#33073;&#21457;][http://w44.voip99.net &#33073;&#21457;&#29305;&#25928;&#33647;][http://w45.voip99.net &#29983;&#21457;&#20135;&#21697;&#33073;&#21457;&#20135;&#21697;][http://w46.voip99.net &#27835;&#30103;&#30333;&#21457;][http://w47.voip99.net &#27611;&#21457;&#31227;&#26893;][http://w48.voip99.net &#22836;&#21457;&#31227;&#26893;][http://w49.voip99.net &#33258;&#20307;&#27611;&#21457;&#31227;&#26893;][http://w50.voip99.net &#30382;&#32932;&#30149;][http://w51.voip99.net &#20255;&#21733;][http://w52.voip99.net &#39640;&#34880;&#21387;][http://w53.voip99.net &#20132;&#25442;&#26426;][http://w54.voip99.net &#27880;&#20876;&#39321;&#28207;&#20844;&#21496;][http://w55.voip99.net &#34917;&#21697;][http://w56.voip99.net &#22686;&#39640;][http://w57.voip99.net &#22766;&#38451;][http://w58.voip99.net &#38738;&#26149;&#30168;][http://w59.voip99.net &#21270;&#22918;&#21697;][http://w60.voip99.net &#27835;&#33050;&#27668;][http://w61.voip99.net &#40060;&#40158;&#30149;][http://w62.voip99.net &#30333;&#30300;&#39118;][http://w63.voip99.net &#35821;&#38899;&#32593;&#20851;][http://w65.voip99.net ip&#36229;&#24066;][http://w66.voip99.net &#35805;&#21543;][http://w67.voip99.net ip&#20844;&#35805;&#36229;&#24066;][http://w68.voip99.net &#38598;&#22242;&#30005;&#35805;][http://w69.voip99.net &#20445;&#20581;&#21697;][http://w70.voip99.net &#26495;&#34013;&#26681;][http://w72.voip99.net &#38450;&#30423;&#38376;][http://w71.voip99.net &#30417;&#25511;][http://w73.voip99.net &#21253;&#35013;&#26426;][http://w74.voip99.net &#30005;&#32518;][http://w75.voip99.net &#38376;&#31105;][http://w76.voip99.net &#29943;&#30742;][http://w77.voip99.net &#30005;&#26426;][http://ww0.voip99.com &#32819;&#26426;][http://ww1.voip99.com &#21355;&#26143;&#30005;&#35270;][http://ww0.voip99.net &#30417;&#35270;&#22120;][http://ww1.voip99.net &#21464;&#21387;&#22120;][http://ww2.voip99.net &#23545;&#35762;&#26426;][http://ww3.voip99.net &#20256;&#24863;&#22120;][http://ww4.voip99.net &#30005;&#23376;&#20803;&#22120;&#20214;][http://ww0.zhiliaotuofa.com &#20992;&#20855;][http://ww1.zhiliaotuofa.com &#22320;&#27631;][http://ww2.zhiliaotuofa.com &#31481;&#28845;][http://ww3.zhiliaotuofa.com &#28145;&#22323;&#26426;&#31080;][http://ww4.zhiliaotuofa.com &#33014;&#34955;,&#28145;&#22323;&#33014;&#34955;][http://ww5.zhiliaotuofa.com &#33014;&#24102;,&#28145;&#22323;&#33014;&#24102;][http://ww2.voip99.com &#26426;&#31080;][http://ww5.voip99.net &#20809;&#31471;&#26426;][http://www.voip99.com/ voip&#20132;&#26131;&#32593;][http://www.zhiliaotuofa.com/ &#33073;&#21457;&#27835;&#30103;&#32593;][http://jipiao.voip99.com/ &#28145;&#22323;&#26426;&#31080;][http://sudi.voip99.com/ &#24555;&#36882;|&#36895;&#36882;&#20844;&#21496;][http://shipinhuiyi.zhiliaotuofa.com &#35270;&#39057;&#20250;&#35758;][http://zuche.voip99.net &#27773;&#36710;&#31199;&#36161;][http://tiezhi.zhiliaotuofa.com &#36148;&#32440;][http://yinshuiji.zhiliaotuofa.com &#39278;&#27700;&#26426;][http://buxiugang.voip99.com &#19981;&#38152;&#38050;][http://shuijing.zhiliaotuofa.com &#27700;&#26230;][http://rongzi.voip99.net &#34701;&#36164;][http://weixiu.voip99.net &#30005;&#33041;&#32500;&#20462;][http://chuguo.voip99.com &#20986;&#22269;][http://kuaiguan.voip99.com &#24320;&#20851;&#30005;&#28304;][http://mojv.voip99.net &#27169;&#20855;][http://nami.voip99.net &#32435;&#31859;][http://chuli.zhiliaotuofa.com &#27745;&#27700;&#22788;&#29702;][http://wuye.zhiliaotuofa.com &#29289;&#19994;&#31649;&#29702;][http://yimin.zhiliaotuofa.com &#31227;&#27665;][http://muqiang.voip99.net &#24149;&#22681;][http://wujin.zhiliaotuofa.com &#20116;&#37329;][http://ww3.voip99.com &#31169;&#23478;&#20390;&#25506;][http://www01.agreatserver.com &#20845;&#21512;&#24425;][http://jipiao.voip99.com/ &#28145;&#22323;&#26426;&#31080;][http://vod.voip99.net &#35270;&#39057;&#28857;&#25773;][http://sudi.voip99.com/ &#36895;&#36882;&#20844;&#21496;][http://guojihuoyun.voip99.com &#22269;&#38469;&#36135;&#36816;][http://baojingqi.voip99.com &#25253;&#35686;&#22120;][http://chaye.voip99.com &#33590;&#21494;][http://mudiban.voip99.net &#23454;&#26408;&#22320;&#26495;][http://qianzheng.voip99.com &#31614;&#35777;][http://kaoqinji.voip99.com &#32771;&#21220;&#26426;][http://jiudian.voip99.net &#28145;&#22323;&#37202;&#24215;]

ERROR: EOF in multi-line statement

3 Running the example

Running this example should produce output similar to below:
[joel@banzai playground1]$ python components1.py 
c.eggs:  othereggs 
c.spam:  spam 
c.cStr:  simple-c! 
gc.spam:  spam 
gc.eggs:  eggs 
gcOther.eggs:  othereggs 
gc.myColor:  red 
gc.gcStr:  simple-c! 
done 

--Joel Boehland


PythonPowered
EditText of this page (last modified 2004-10-09 01:35:35)
FindPage by browsing, title search , text search or an index
Or try one of these actions: AttachFile, DeletePage, LikePages, LocalSiteMap, SpellCheck