|
1 """Test program for MimeWriter module. |
|
2 |
|
3 The test program was too big to comfortably fit in the MimeWriter |
|
4 class, so it's here in its own file. |
|
5 |
|
6 This should generate Barry's example, modulo some quotes and newlines. |
|
7 |
|
8 """ |
|
9 |
|
10 |
|
11 from MimeWriter import MimeWriter |
|
12 |
|
13 SELLER = '''\ |
|
14 INTERFACE Seller-1; |
|
15 |
|
16 TYPE Seller = OBJECT |
|
17 DOCUMENTATION "A simple Seller interface to test ILU" |
|
18 METHODS |
|
19 price():INTEGER, |
|
20 END; |
|
21 ''' |
|
22 |
|
23 BUYER = '''\ |
|
24 class Buyer: |
|
25 def __setup__(self, maxprice): |
|
26 self._maxprice = maxprice |
|
27 |
|
28 def __main__(self, kos): |
|
29 """Entry point upon arrival at a new KOS.""" |
|
30 broker = kos.broker() |
|
31 # B4 == Barry's Big Bass Business :-) |
|
32 seller = broker.lookup('Seller_1.Seller', 'B4') |
|
33 if seller: |
|
34 price = seller.price() |
|
35 print 'Seller wants $', price, '... ' |
|
36 if price > self._maxprice: |
|
37 print 'too much!' |
|
38 else: |
|
39 print "I'll take it!" |
|
40 else: |
|
41 print 'no seller found here' |
|
42 ''' # Don't ask why this comment is here |
|
43 |
|
44 STATE = '''\ |
|
45 # instantiate a buyer instance and put it in a magic place for the KOS |
|
46 # to find. |
|
47 __kp__ = Buyer() |
|
48 __kp__.__setup__(500) |
|
49 ''' |
|
50 |
|
51 SIMPLE_METADATA = [ |
|
52 ("Interpreter", "python"), |
|
53 ("Interpreter-Version", "1.3"), |
|
54 ("Owner-Name", "Barry Warsaw"), |
|
55 ("Owner-Rendezvous", "bwarsaw@cnri.reston.va.us"), |
|
56 ("Home-KSS", "kss.cnri.reston.va.us"), |
|
57 ("Identifier", "hdl://cnri.kss/my_first_knowbot"), |
|
58 ("Launch-Date", "Mon Feb 12 16:39:03 EST 1996"), |
|
59 ] |
|
60 |
|
61 COMPLEX_METADATA = [ |
|
62 ("Metadata-Type", "complex"), |
|
63 ("Metadata-Key", "connection"), |
|
64 ("Access", "read-only"), |
|
65 ("Connection-Description", "Barry's Big Bass Business"), |
|
66 ("Connection-Id", "B4"), |
|
67 ("Connection-Direction", "client"), |
|
68 ] |
|
69 |
|
70 EXTERNAL_METADATA = [ |
|
71 ("Metadata-Type", "complex"), |
|
72 ("Metadata-Key", "generic-interface"), |
|
73 ("Access", "read-only"), |
|
74 ("Connection-Description", "Generic Interface for All Knowbots"), |
|
75 ("Connection-Id", "generic-kp"), |
|
76 ("Connection-Direction", "client"), |
|
77 ] |
|
78 |
|
79 |
|
80 def main(): |
|
81 import sys |
|
82 |
|
83 # Toplevel headers |
|
84 |
|
85 toplevel = MimeWriter(sys.stdout) |
|
86 toplevel.addheader("From", "bwarsaw@cnri.reston.va.us") |
|
87 toplevel.addheader("Date", "Mon Feb 12 17:21:48 EST 1996") |
|
88 toplevel.addheader("To", "kss-submit@cnri.reston.va.us") |
|
89 toplevel.addheader("MIME-Version", "1.0") |
|
90 |
|
91 # Toplevel body parts |
|
92 |
|
93 f = toplevel.startmultipartbody("knowbot", "801spam999", |
|
94 [("version", "0.1")], prefix=0) |
|
95 f.write("This is a multi-part message in MIME format.\n") |
|
96 |
|
97 # First toplevel body part: metadata |
|
98 |
|
99 md = toplevel.nextpart() |
|
100 md.startmultipartbody("knowbot-metadata", "802spam999") |
|
101 |
|
102 # Metadata part 1 |
|
103 |
|
104 md1 = md.nextpart() |
|
105 md1.addheader("KP-Metadata-Type", "simple") |
|
106 md1.addheader("KP-Access", "read-only") |
|
107 m = MimeWriter(md1.startbody("message/rfc822")) |
|
108 for key, value in SIMPLE_METADATA: |
|
109 m.addheader("KPMD-" + key, value) |
|
110 m.flushheaders() |
|
111 del md1 |
|
112 |
|
113 # Metadata part 2 |
|
114 |
|
115 md2 = md.nextpart() |
|
116 for key, value in COMPLEX_METADATA: |
|
117 md2.addheader("KP-" + key, value) |
|
118 f = md2.startbody("text/isl") |
|
119 f.write(SELLER) |
|
120 del md2 |
|
121 |
|
122 # Metadata part 3 |
|
123 |
|
124 md3 = md.nextpart() |
|
125 f = md3.startbody("message/external-body", |
|
126 [("access-type", "URL"), |
|
127 ("URL", "hdl://cnri.kss/generic-knowbot")]) |
|
128 m = MimeWriter(f) |
|
129 for key, value in EXTERNAL_METADATA: |
|
130 md3.addheader("KP-" + key, value) |
|
131 md3.startbody("text/isl") |
|
132 # Phantom body doesn't need to be written |
|
133 |
|
134 md.lastpart() |
|
135 |
|
136 # Second toplevel body part: code |
|
137 |
|
138 code = toplevel.nextpart() |
|
139 code.startmultipartbody("knowbot-code", "803spam999") |
|
140 |
|
141 # Code: buyer program source |
|
142 |
|
143 buyer = code.nextpart() |
|
144 buyer.addheader("KP-Module-Name", "BuyerKP") |
|
145 f = buyer.startbody("text/plain") |
|
146 f.write(BUYER) |
|
147 |
|
148 code.lastpart() |
|
149 |
|
150 # Third toplevel body part: state |
|
151 |
|
152 state = toplevel.nextpart() |
|
153 state.addheader("KP-Main-Module", "main") |
|
154 state.startmultipartbody("knowbot-state", "804spam999") |
|
155 |
|
156 # State: a bunch of assignments |
|
157 |
|
158 st = state.nextpart() |
|
159 st.addheader("KP-Module-Name", "main") |
|
160 f = st.startbody("text/plain") |
|
161 f.write(STATE) |
|
162 |
|
163 state.lastpart() |
|
164 |
|
165 # End toplevel body parts |
|
166 |
|
167 toplevel.lastpart() |
|
168 |
|
169 |
|
170 main() |