| """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() |