forked from python/cpython
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e87ed5f
commit 2ad816f
Showing
2 changed files
with
280 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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-- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |