Skip to content

Commit

Permalink
Add test for MimeWriter module
Browse files Browse the repository at this point in the history
  • Loading branch information
gvanrossum committed Apr 23, 1998
1 parent e87ed5f commit 2ad816f
Show file tree
Hide file tree
Showing 2 changed files with 280 additions and 0 deletions.
110 changes: 110 additions & 0 deletions Lib/test/output/test_MimeWriter
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
test_MimeWriter
From: [email protected]
Date: Mon Feb 12 17:21:48 EST 1996
To: [email protected]
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: [email protected]
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--
170 changes: 170 additions & 0 deletions Lib/test/test_MimeWriter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
"""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", "[email protected]"),
("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", "[email protected]")
toplevel.addheader("Date", "Mon Feb 12 17:21:48 EST 1996")
toplevel.addheader("To", "[email protected]")
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()

0 comments on commit 2ad816f

Please sign in to comment.