mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			295 lines
		
	
	
	
		
			7.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			295 lines
		
	
	
	
		
			7.5 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.
 | 
						|
 | 
						|
"""
 | 
						|
 | 
						|
import unittest, StringIO
 | 
						|
from test.test_support import run_unittest
 | 
						|
 | 
						|
import warnings
 | 
						|
warnings.filterwarnings("ignore", "the MimeWriter module is deprecated.*",
 | 
						|
                        DeprecationWarning)
 | 
						|
 | 
						|
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"),
 | 
						|
        ]
 | 
						|
 | 
						|
 | 
						|
OUTPUT = '''\
 | 
						|
From: bwarsaw@cnri.reston.va.us
 | 
						|
Date: Mon Feb 12 17:21:48 EST 1996
 | 
						|
To: kss-submit@cnri.reston.va.us
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: multipart/knowbot;
 | 
						|
    boundary="801spam999";
 | 
						|
    version="0.1"
 | 
						|
 | 
						|
This is a multi-part message in MIME format.
 | 
						|
 | 
						|
--801spam999
 | 
						|
Content-Type: multipart/knowbot-metadata;
 | 
						|
    boundary="802spam999"
 | 
						|
 | 
						|
 | 
						|
--802spam999
 | 
						|
Content-Type: message/rfc822
 | 
						|
KP-Metadata-Type: simple
 | 
						|
KP-Access: read-only
 | 
						|
 | 
						|
KPMD-Interpreter: python
 | 
						|
KPMD-Interpreter-Version: 1.3
 | 
						|
KPMD-Owner-Name: Barry Warsaw
 | 
						|
KPMD-Owner-Rendezvous: bwarsaw@cnri.reston.va.us
 | 
						|
KPMD-Home-KSS: kss.cnri.reston.va.us
 | 
						|
KPMD-Identifier: hdl://cnri.kss/my_first_knowbot
 | 
						|
KPMD-Launch-Date: Mon Feb 12 16:39:03 EST 1996
 | 
						|
 | 
						|
--802spam999
 | 
						|
Content-Type: text/isl
 | 
						|
KP-Metadata-Type: complex
 | 
						|
KP-Metadata-Key: connection
 | 
						|
KP-Access: read-only
 | 
						|
KP-Connection-Description: Barry's Big Bass Business
 | 
						|
KP-Connection-Id: B4
 | 
						|
KP-Connection-Direction: client
 | 
						|
 | 
						|
INTERFACE Seller-1;
 | 
						|
 | 
						|
TYPE Seller = OBJECT
 | 
						|
    DOCUMENTATION "A simple Seller interface to test ILU"
 | 
						|
    METHODS
 | 
						|
            price():INTEGER,
 | 
						|
    END;
 | 
						|
 | 
						|
--802spam999
 | 
						|
Content-Type: message/external-body;
 | 
						|
    access-type="URL";
 | 
						|
    URL="hdl://cnri.kss/generic-knowbot"
 | 
						|
 | 
						|
Content-Type: text/isl
 | 
						|
KP-Metadata-Type: complex
 | 
						|
KP-Metadata-Key: generic-interface
 | 
						|
KP-Access: read-only
 | 
						|
KP-Connection-Description: Generic Interface for All Knowbots
 | 
						|
KP-Connection-Id: generic-kp
 | 
						|
KP-Connection-Direction: client
 | 
						|
 | 
						|
 | 
						|
--802spam999--
 | 
						|
 | 
						|
--801spam999
 | 
						|
Content-Type: multipart/knowbot-code;
 | 
						|
    boundary="803spam999"
 | 
						|
 | 
						|
 | 
						|
--803spam999
 | 
						|
Content-Type: text/plain
 | 
						|
KP-Module-Name: BuyerKP
 | 
						|
 | 
						|
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'
 | 
						|
 | 
						|
--803spam999--
 | 
						|
 | 
						|
--801spam999
 | 
						|
Content-Type: multipart/knowbot-state;
 | 
						|
    boundary="804spam999"
 | 
						|
KP-Main-Module: main
 | 
						|
 | 
						|
 | 
						|
--804spam999
 | 
						|
Content-Type: text/plain
 | 
						|
KP-Module-Name: main
 | 
						|
 | 
						|
# instantiate a buyer instance and put it in a magic place for the KOS
 | 
						|
# to find.
 | 
						|
__kp__ = Buyer()
 | 
						|
__kp__.__setup__(500)
 | 
						|
 | 
						|
--804spam999--
 | 
						|
 | 
						|
--801spam999--
 | 
						|
'''
 | 
						|
 | 
						|
class MimewriterTest(unittest.TestCase):
 | 
						|
 | 
						|
    def test(self):
 | 
						|
        buf = StringIO.StringIO()
 | 
						|
 | 
						|
        # Toplevel headers
 | 
						|
 | 
						|
        toplevel = MimeWriter(buf)
 | 
						|
        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()
 | 
						|
 | 
						|
        self.assertEqual(buf.getvalue(), OUTPUT)
 | 
						|
 | 
						|
def test_main():
 | 
						|
    run_unittest(MimewriterTest)
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    test_main()
 |