mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			170 lines
		
	
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """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()
 | 
