| """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 | 
 |             price():INTEGER, | 
 |     END; | 
 | ''' | 
 |  | 
 | BUYER = '''\ | 
 | class Buyer: | 
 |     def __setup__(self, maxprice): | 
 |         self._maxprice = maxprice | 
 |  | 
 |     def __main__(self, kos): | 
 |         """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 | 
 |  | 
 | STATE = '''\ | 
 | # instantiate a buyer instance and put it in a magic place for the KOS | 
 | # to find. | 
 | __kp__ = Buyer() | 
 | __kp__.__setup__(500) | 
 | ''' | 
 |  | 
 | SIMPLE_METADATA = [ | 
 |         ("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"), | 
 |         ] | 
 |  | 
 | COMPLEX_METADATA = [ | 
 |         ("Metadata-Type", "complex"), | 
 |         ("Metadata-Key", "connection"), | 
 |         ("Access", "read-only"), | 
 |         ("Connection-Description", "Barry's Big Bass Business"), | 
 |         ("Connection-Id", "B4"), | 
 |         ("Connection-Direction", "client"), | 
 |         ] | 
 |  | 
 | EXTERNAL_METADATA = [ | 
 |         ("Metadata-Type", "complex"), | 
 |         ("Metadata-Key", "generic-interface"), | 
 |         ("Access", "read-only"), | 
 |         ("Connection-Description", "Generic Interface for All Knowbots"), | 
 |         ("Connection-Id", "generic-kp"), | 
 |         ("Connection-Direction", "client"), | 
 |         ] | 
 |  | 
 |  | 
 | def main(): | 
 |     import sys | 
 |  | 
 |     # Toplevel headers | 
 |      | 
 |     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 | 
 |      | 
 |     f = toplevel.startmultipartbody("knowbot", "801spam999", | 
 |                                     [("version", "0.1")], prefix=0) | 
 |     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 | 
 |      | 
 |     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: | 
 |         m.addheader("KPMD-" + key, value) | 
 |     m.flushheaders() | 
 |     del md1 | 
 |  | 
 |     # Metadata part 2 | 
 |  | 
 |     md2 = md.nextpart() | 
 |     for key, value in COMPLEX_METADATA: | 
 |         md2.addheader("KP-" + key, value) | 
 |     f = md2.startbody("text/isl") | 
 |     f.write(SELLER) | 
 |     del md2 | 
 |  | 
 |     # Metadata part 3 | 
 |  | 
 |     md3 = md.nextpart() | 
 |     f = md3.startbody("message/external-body", | 
 |                       [("access-type", "URL"), | 
 |                        ("URL", "hdl://cnri.kss/generic-knowbot")]) | 
 |     m = MimeWriter(f) | 
 |     for key, value in EXTERNAL_METADATA: | 
 |         md3.addheader("KP-" + key, value) | 
 |     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() |