April 1999
Beginner
384 pages
11h 15m
English
Faking the Web. What you need to do is to create instances of a class that has the fieldnames attribute and appropriate instance variables. One possible solution is:
class FormData:
def __init__(self, dict):
for k, v in dict.items():
setattr(self, k, v)
class FeedbackData(FormData):
""" A FormData generated by the comment.html form. """
fieldnames = ('name', 'address', 'email', 'type', 'text')
def __repr__(self):
return "%(type)s from %(name)s on %(time)s" % vars(self)
fake_entries = [
{'name': "John Doe",
'address': '500 Main St., SF CA 94133',
'email': 'john@sf.org',
'type': 'comment',
'text': 'Great toothpaste!'},
{'name': "Suzy Doe",
'address': '500 Main St., SF CA 94133',
'email': 'suzy@sf.org',
'type': 'complaint',
'text': "It doesn't taste good when I kiss John!"},
]
DIRECTORY = r'C:\complaintdir'
if __name__ == '__main__':
import tempfile, pickle, time
tempfile.tempdir = DIRECTORY
for fake_entry in fake_entries:
data = FeedbackData(fake_entry)
filename = tempfile.mktemp()
data.time = time.asctime(time.localtime(time.time()))
pickle.dump(data, open(filename, 'w'))As you can see, the only thing you really had to change was the way
the constructor for FormData works, since it has
to do the setting of attributes from a dictionary as opposed to a
FieldStorage object.
Cleaning up. There are many ways to deal with this problem. One easy one is to modify the formletter.py program to keep a list of the filenames that it has already processed (in a pickled file, of course!). ...