| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  | """Test program for MimeWriter module.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The test program was too big to comfortably fit in the MimeWriter | 
					
						
							|  |  |  | class, so it's here in its own file. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This should generate Barry's example, modulo some quotes and newlines. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from MimeWriter import MimeWriter | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SELLER = '''\
 | 
					
						
							|  |  |  | INTERFACE Seller-1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TYPE Seller = OBJECT | 
					
						
							|  |  |  |     DOCUMENTATION "A simple Seller interface to test ILU" | 
					
						
							|  |  |  |     METHODS | 
					
						
							| 
									
										
										
										
											1998-06-09 19:19:40 +00:00
										 |  |  |             price():INTEGER, | 
					
						
							| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  |     END; | 
					
						
							|  |  |  | '''
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BUYER = '''\
 | 
					
						
							|  |  |  | class Buyer: | 
					
						
							|  |  |  |     def __setup__(self, maxprice): | 
					
						
							| 
									
										
										
										
											1998-06-09 19:19:40 +00:00
										 |  |  |         self._maxprice = maxprice | 
					
						
							| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def __main__(self, kos): | 
					
						
							| 
									
										
										
										
											1998-06-09 19:19:40 +00:00
										 |  |  |         """Entry point upon arrival at a new KOS.""" | 
					
						
							|  |  |  |         broker = kos.broker() | 
					
						
							|  |  |  |         # B4 == Barry's Big Bass Business :-) | 
					
						
							|  |  |  |         seller = broker.lookup('Seller_1.Seller', 'B4') | 
					
						
							|  |  |  |         if seller: | 
					
						
							|  |  |  |             price = seller.price() | 
					
						
							|  |  |  |             print 'Seller wants $', price, '... ' | 
					
						
							|  |  |  |             if price > self._maxprice: | 
					
						
							|  |  |  |                 print 'too much!' | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 print "I'll take it!" | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             print 'no seller found here' | 
					
						
							|  |  |  | '''                                     # Don't ask why this comment is here
 | 
					
						
							| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | STATE = '''\
 | 
					
						
							|  |  |  | # instantiate a buyer instance and put it in a magic place for the KOS | 
					
						
							|  |  |  | # to find. | 
					
						
							|  |  |  | __kp__ = Buyer() | 
					
						
							|  |  |  | __kp__.__setup__(500) | 
					
						
							|  |  |  | '''
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SIMPLE_METADATA = [ | 
					
						
							| 
									
										
										
										
											1998-06-09 19:19:40 +00:00
										 |  |  |         ("Interpreter", "python"), | 
					
						
							|  |  |  |         ("Interpreter-Version", "1.3"), | 
					
						
							|  |  |  |         ("Owner-Name", "Barry Warsaw"), | 
					
						
							|  |  |  |         ("Owner-Rendezvous", "bwarsaw@cnri.reston.va.us"), | 
					
						
							|  |  |  |         ("Home-KSS", "kss.cnri.reston.va.us"), | 
					
						
							|  |  |  |         ("Identifier", "hdl://cnri.kss/my_first_knowbot"), | 
					
						
							|  |  |  |         ("Launch-Date", "Mon Feb 12 16:39:03 EST 1996"), | 
					
						
							|  |  |  |         ] | 
					
						
							| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | COMPLEX_METADATA = [ | 
					
						
							| 
									
										
										
										
											1998-06-09 19:19:40 +00:00
										 |  |  |         ("Metadata-Type", "complex"), | 
					
						
							|  |  |  |         ("Metadata-Key", "connection"), | 
					
						
							|  |  |  |         ("Access", "read-only"), | 
					
						
							|  |  |  |         ("Connection-Description", "Barry's Big Bass Business"), | 
					
						
							|  |  |  |         ("Connection-Id", "B4"), | 
					
						
							|  |  |  |         ("Connection-Direction", "client"), | 
					
						
							|  |  |  |         ] | 
					
						
							| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | EXTERNAL_METADATA = [ | 
					
						
							| 
									
										
										
										
											1998-06-09 19:19:40 +00:00
										 |  |  |         ("Metadata-Type", "complex"), | 
					
						
							|  |  |  |         ("Metadata-Key", "generic-interface"), | 
					
						
							|  |  |  |         ("Access", "read-only"), | 
					
						
							|  |  |  |         ("Connection-Description", "Generic Interface for All Knowbots"), | 
					
						
							|  |  |  |         ("Connection-Id", "generic-kp"), | 
					
						
							|  |  |  |         ("Connection-Direction", "client"), | 
					
						
							|  |  |  |         ] | 
					
						
							| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							|  |  |  |     import sys | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Toplevel headers | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  |     toplevel = MimeWriter(sys.stdout) | 
					
						
							|  |  |  |     toplevel.addheader("From", "bwarsaw@cnri.reston.va.us") | 
					
						
							|  |  |  |     toplevel.addheader("Date", "Mon Feb 12 17:21:48 EST 1996") | 
					
						
							|  |  |  |     toplevel.addheader("To", "kss-submit@cnri.reston.va.us") | 
					
						
							|  |  |  |     toplevel.addheader("MIME-Version", "1.0") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Toplevel body parts | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  |     f = toplevel.startmultipartbody("knowbot", "801spam999", | 
					
						
							| 
									
										
										
										
											1998-06-09 19:19:40 +00:00
										 |  |  |                                     [("version", "0.1")], prefix=0) | 
					
						
							| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  |     f.write("This is a multi-part message in MIME format.\n") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # First toplevel body part: metadata | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     md = toplevel.nextpart() | 
					
						
							|  |  |  |     md.startmultipartbody("knowbot-metadata", "802spam999") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Metadata part 1 | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  |     md1 = md.nextpart() | 
					
						
							|  |  |  |     md1.addheader("KP-Metadata-Type", "simple") | 
					
						
							|  |  |  |     md1.addheader("KP-Access", "read-only") | 
					
						
							|  |  |  |     m = MimeWriter(md1.startbody("message/rfc822")) | 
					
						
							|  |  |  |     for key, value in SIMPLE_METADATA: | 
					
						
							| 
									
										
										
										
											1998-06-09 19:19:40 +00:00
										 |  |  |         m.addheader("KPMD-" + key, value) | 
					
						
							| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  |     m.flushheaders() | 
					
						
							|  |  |  |     del md1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Metadata part 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     md2 = md.nextpart() | 
					
						
							|  |  |  |     for key, value in COMPLEX_METADATA: | 
					
						
							| 
									
										
										
										
											1998-06-09 19:19:40 +00:00
										 |  |  |         md2.addheader("KP-" + key, value) | 
					
						
							| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  |     f = md2.startbody("text/isl") | 
					
						
							|  |  |  |     f.write(SELLER) | 
					
						
							|  |  |  |     del md2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Metadata part 3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     md3 = md.nextpart() | 
					
						
							|  |  |  |     f = md3.startbody("message/external-body", | 
					
						
							| 
									
										
										
										
											1998-06-09 19:19:40 +00:00
										 |  |  |                       [("access-type", "URL"), | 
					
						
							|  |  |  |                        ("URL", "hdl://cnri.kss/generic-knowbot")]) | 
					
						
							| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  |     m = MimeWriter(f) | 
					
						
							|  |  |  |     for key, value in EXTERNAL_METADATA: | 
					
						
							| 
									
										
										
										
											1998-06-09 19:19:40 +00:00
										 |  |  |         md3.addheader("KP-" + key, value) | 
					
						
							| 
									
										
										
										
											1998-04-23 13:33:56 +00:00
										 |  |  |     md3.startbody("text/isl") | 
					
						
							|  |  |  |     # Phantom body doesn't need to be written | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     md.lastpart() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Second toplevel body part: code | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     code = toplevel.nextpart() | 
					
						
							|  |  |  |     code.startmultipartbody("knowbot-code", "803spam999") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Code: buyer program source | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     buyer = code.nextpart() | 
					
						
							|  |  |  |     buyer.addheader("KP-Module-Name", "BuyerKP") | 
					
						
							|  |  |  |     f = buyer.startbody("text/plain") | 
					
						
							|  |  |  |     f.write(BUYER) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     code.lastpart() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Third toplevel body part: state | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     state = toplevel.nextpart() | 
					
						
							|  |  |  |     state.addheader("KP-Main-Module", "main") | 
					
						
							|  |  |  |     state.startmultipartbody("knowbot-state", "804spam999") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # State: a bunch of assignments | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     st = state.nextpart() | 
					
						
							|  |  |  |     st.addheader("KP-Module-Name", "main") | 
					
						
							|  |  |  |     f = st.startbody("text/plain") | 
					
						
							|  |  |  |     f.write(STATE) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     state.lastpart() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # End toplevel body parts | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     toplevel.lastpart() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | main() |