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 麻将机][http://www02.voip99.com 起重机][http://www03.voip99.com 成人用品][http://www04.voip99.com 可视电话][http://www05.voip99.com 电力猫][http://www06.voip99.com 无线上网卡][http://www07.voip99.com 电梯][http://www08.voip99.com 叉车][http://www09.voip99.com 轮胎][http://www10.voip99.com 电子仪器][http://www11.voip99.com 汽车配件][http://www12.voip99.com 涂料][http://www13.voip99.com 化工机械][http://www14.voip99.com 干燥设备][http://www15.voip99.com 颜料][http://www16.voip99.com 钛白粉][http://www17.voip99.com 塑料制品][http://www18.voip99.com 阀门][http://www19.voip99.com 纯水设备][http://www20.voip99.com 医用电子][http://www21.voip99.com 电动自行车][http://www22.voip99.com 保险柜,保险箱][http://www23.voip99.com 减震器][http://www24.voip99.com 生物识别][http://www25.voip99.com 防伪技术][http://www26.voip99.com 防火材料][http://www27.voip99.com 印刷机][http://www28.voip99.com 耐火材料][http://www29.voip99.com 照明][http://www30.voip99.com 制冷][http://www31.voip99.com 涂装][http://www32.voip99.com 电镀][http://www33.voip99.com 表面处理][http://www34.voip99.com 床上用品][http://www35.voip99.com 继电器][http://www36.voip99.com 工艺品][http://www37.voip99.com 机床][http://www38.voip99.com 电子秤][http://www39.voip99.com 电路板][http://www40.voip99.com 干燥剂][http://www41.voip99.com 弹簧][http://www42.voip99.com 纸箱][http://www43.voip99.com 丝印][http://www44.voip99.com 纳米焊条][http://www45.voip99.com 升降机][http://www46.voip99.com 反光材料][http://www47.voip99.com 打标机][http://www48.voip99.com 温湿度计][http://www49.voip99.com 热处理设备][http://www50.voip99.com 冷水机][http://aaa01.zhiliaotuofa.com 包装设计][http://aaa02.zhiliaotuofa.com 压缩机][http://aaa03.zhiliaotuofa.com 手机窃听器][http://aaa04.zhiliaotuofa.com 电话变声器][http://aaa05.zhiliaotuofa.com 针孔摄像机][http://aaa06.zhiliaotuofa.com 振动筛][http://aaa07.zhiliaotuofa.com 空气净化][http://aaa08.zhiliaotuofa.com 吸塑制品][http://aaa09.zhiliaotuofa.com 伺服电机][http://aaa10.zhiliaotuofa.com 机电设备][http://aaa11.zhiliaotuofa.com 超声波设备][http://aaa12.zhiliaotuofa.com 电阻][http://aaa13.zhiliaotuofa.com 活性炭][http://aaa14.zhiliaotuofa.com 实验室设备][http://aaa15.zhiliaotuofa.com 玻璃器皿][http://aaa16.zhiliaotuofa.com 耗材][http://aaa17.zhiliaotuofa.com 集成电路][http://aaa18.zhiliaotuofa.com 连接器][http://aaa19.zhiliaotuofa.com 电容器][http://aaa20.zhiliaotuofa.com 节能灯][http://aaa21.zhiliaotuofa.com 断路器][http://aaa22.zhiliaotuofa.com 电动机][http://aaa23.zhiliaotuofa.com 密封件][http://aaa24.zhiliaotuofa.com 电动工具][http://aaa25.zhiliaotuofa.com 办公家具][http://aaa26.zhiliaotuofa.com 热水器][http://aaa27.zhiliaotuofa.com 金属丝网][http://aaa28.zhiliaotuofa.com 磁性材料][http://aaa29.zhiliaotuofa.com 铝制品][http://aaa30.zhiliaotuofa.com 蓄电池][http://aaa31.zhiliaotuofa.com 锁具][http://aaa32.zhiliaotuofa.com 锂电池][http://aaa33.zhiliaotuofa.com 塑料玩具][http://aaa34.zhiliaotuofa.com 电动车][http://aaa35.zhiliaotuofa.com 防盗器][http://aaa36.zhiliaotuofa.com 印刷机械][http://aaa37.zhiliaotuofa.com 太阳能热水器][http://aaa38.zhiliaotuofa.com 变送器][http://aaa39.zhiliaotuofa.com 标准件][http://aaa40.zhiliaotuofa.com 仪器仪表][http://aaa41.zhiliaotuofa.com 推土机,压路机][http://aaa42.zhiliaotuofa.com 绝缘材料][http://aaa43.zhiliaotuofa.com 电线电缆][http://aaa44.zhiliaotuofa.com 稳压器][http://aaa45.zhiliaotuofa.com 硒鼓,深圳硒鼓,墨盒,深圳墨盒,色带][http://aaa46.zhiliaotuofa.com 充气床][http://aaa47.zhiliaotuofa.com 数码电话][http://aaa48.zhiliaotuofa.com 钢管][http://aaa49.zhiliaotuofa.com 风机][http://aaa50.zhiliaotuofa.com 锅炉][http://w01.voip99.net 变频器][http://w02.voip99.net 润滑油][http://w03.voip99.net 离合器][http://w04.voip99.net 狐臭][http://w05.voip99.net 糖尿病][http://w06.voip99.net 电容][http://w07.voip99.net 灰指甲][http://w08.voip99.net 近视眼][http://w09.voip99.net 脱毛][http://w10.voip99.net 净水器][http://w11.voip99.net 蜂蜜][http://w12.voip99.net 紧固件][http://w13.voip99.net 制服][http://w14.voip99.net 健身器材][http://w15.voip99.net 太阳能热水器][http://w16.voip99.net 婚纱摄影][http://w17.voip99.net LED][http://w18.voip99.net 酒店][http://w19.voip99.net 水表][http://w20.voip99.net 锅炉][http://w21.voip99.net 打包机][http://w22.voip99.net 痔疮][http://w23.voip99.net 发电机][http://w24.voip99.net 深圳装饰][http://w25.voip99.net 切割机][http://w26.voip99.net 深圳印刷][http://w27.voip99.net 深圳条码][http://w28.voip99.net 激光设备][http://w29.voip99.net 照排机][http://w30.voip99.net 餐具][http://w31.voip99.net IP超市计费系统][http://w32.voip99.net 网络电话][http://w33.voip99.net VOIP网关][http://w34.voip99.net IP电话][http://w35.voip99.net 软交换][http://w36.voip99.net GK][http://w37.voip99.net 网络电话][http://w38.voip99.net 治疗脱发][http://w39.voip99.net 治疗脱头发][http://w40.voip99.net 网络电话卡][http://w41.voip99.net VOIP][http://w42.voip99.net VOIP网络电话][http://w43.voip99.net 脂溢性脱发][http://w44.voip99.net 脱发特效药][http://w45.voip99.net 生发产品脱发产品][http://w46.voip99.net 治疗白发][http://w47.voip99.net 毛发移植][http://w48.voip99.net 头发移植][http://w49.voip99.net 自体毛发移植][http://w50.voip99.net 皮肤病][http://w51.voip99.net 伟哥][http://w52.voip99.net 高血压][http://w53.voip99.net 交换机][http://w54.voip99.net 注册香港公司][http://w55.voip99.net 补品][http://w56.voip99.net 增高][http://w57.voip99.net 壮阳][http://w58.voip99.net 青春痘][http://w59.voip99.net 化妆品][http://w60.voip99.net 治脚气][http://w61.voip99.net 鱼鳞病][http://w62.voip99.net 白癜风][http://w63.voip99.net 语音网关][http://w65.voip99.net ip超市][http://w66.voip99.net 话吧][http://w67.voip99.net ip公话超市][http://w68.voip99.net 集团电话][http://w69.voip99.net 保健品][http://w70.voip99.net 板蓝根][http://w72.voip99.net 防盗门][http://w71.voip99.net 监控][http://w73.voip99.net 包装机][http://w74.voip99.net 电缆][http://w75.voip99.net 门禁][http://w76.voip99.net 瓷砖][http://w77.voip99.net 电机][http://ww0.voip99.com 耳机][http://ww1.voip99.com 卫星电视][http://ww0.voip99.net 监视器][http://ww1.voip99.net 变压器][http://ww2.voip99.net 对讲机][http://ww3.voip99.net 传感器][http://ww4.voip99.net 电子元器件][http://ww0.zhiliaotuofa.com 刀具][http://ww1.zhiliaotuofa.com 地毯][http://ww2.zhiliaotuofa.com 竹炭][http://ww3.zhiliaotuofa.com 深圳机票][http://ww4.zhiliaotuofa.com 胶袋,深圳胶袋][http://ww5.zhiliaotuofa.com 胶带,深圳胶带][http://ww2.voip99.com 机票][http://ww5.voip99.net 光端机][http://www.voip99.com/ voip交易网][http://www.zhiliaotuofa.com/ 脱发治疗网][http://jipiao.voip99.com/ 深圳机票][http://sudi.voip99.com/ 快递|速递公司][http://shipinhuiyi.zhiliaotuofa.com 视频会议][http://zuche.voip99.net 汽车租赁][http://tiezhi.zhiliaotuofa.com 贴纸][http://yinshuiji.zhiliaotuofa.com 饮水机][http://buxiugang.voip99.com 不锈钢][http://shuijing.zhiliaotuofa.com 水晶][http://rongzi.voip99.net 融资][http://weixiu.voip99.net 电脑维修][http://chuguo.voip99.com 出国][http://kuaiguan.voip99.com 开关电源][http://mojv.voip99.net 模具][http://nami.voip99.net 纳米][http://chuli.zhiliaotuofa.com 污水处理][http://wuye.zhiliaotuofa.com 物业管理][http://yimin.zhiliaotuofa.com 移民][http://muqiang.voip99.net 幕墙][http://wujin.zhiliaotuofa.com 五金][http://ww3.voip99.com 私家侦探][http://www01.agreatserver.com 六合彩][http://jipiao.voip99.com/ 深圳机票][http://vod.voip99.net 视频点播][http://sudi.voip99.com/ 速递公司][http://guojihuoyun.voip99.com 国际货运][http://baojingqi.voip99.com 报警器][http://chaye.voip99.com 茶叶][http://mudiban.voip99.net 实木地板][http://qianzheng.voip99.com 签证][http://kaoqinji.voip99.com 考勤机][http://jiudian.voip99.net 深圳酒店]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