[Tutor] cgi module and checkboxes.

Thomi Richards thomi@thomi.imail.net.nz
Mon Dec 9 18:53:02 2002


This is a multi-part message in MIME format.

--Multipart_Tue__10_Dec_2002_12:52:03_+1300_088a1528
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

> Can you show an example of the code you're having problems with? Also,
> does the rest of this CGI work if you leave off the part that doesn't
> seem to be working?

attached is roster.py, It's unfinished, but you should be able to see
whats happening :-)

the problem lies within the last 10 lines of code

-- 
Thomi Richards
thomi@imail.net.nz
http://thomi.imail.net.nz/
Thomi Richards,
thomi@imail.net.nz

--Multipart_Tue__10_Dec_2002_12:52:03_+1300_088a1528
Content-Type: application/octet-stream;
 name="roster.py"
Content-Disposition: attachment;
 filename="roster.py"
Content-Transfer-Encoding: base64

IyEvdXNyL2Jpbi9weXRob24KCmltcG9ydCBzeXMsb3MKc3lzLnBhdGguYXBwZW5kKG9zLmdldGN3
ZCgpKQpzeXMucGF0aC5hcHBlbmQoJy9ob21lL3Rob21pL2N2cy9uZXctYmV0YXRlc3QnKQoKZnJv
bSB0bXlzcWwgaW1wb3J0IG15c3FsCmltcG9ydCBjZ2kKCgonJydvaywgd2UgbmVlZCBzZXZlcmFs
IGRpZmZlcmVudCBjbGFzc2VzOgoKY2xhc3MgZGlzcGxheWh0bWwKCXRoaXMgY2xhc3MgaGFuZGxl
cyBBTEwgb3V0cHV0IHRvIHRoZSBzY3JlZW4sIGluY2x1ZGluZyBNRVRBIHRhZ3MsIGh0bWwgdGFn
cywgYW5kIGFueXRoaW5nIGVsc2UKY2xhc3MgcHJvY2Vzc2NnaQoJdGhpcyBjbGFzcyBoYW5kbGVz
IGFsbCB0aGUgQ0dJIHByb2Nlc3NpbmcgdGlkYml0cy4gVGhpcyBpcyB0aGUgY2xhc3Mgd2hpY2gg
d2lsbCB1dGlsaXNlIHRoZSB0bXlzcWwgbW9kdWxlIHRoZSBtb3N0CgonJycKCmRlYnVnID0gMQoK
CgpjbGFzcyBkaXNwbGF5aHRtbDoKCWRlZiBoZWFkZXJzKHNlbGYpOgoJCXByaW50ICdDb250ZW50
LVR5cGU6IHRleHQvaHRtbCcKCQlwcmludAoJCQoJZGVmIHRvcGh0bWwoc2VsZix0aXRsZT0nQkVU
QSB0ZXN0aW5nIHJvc3RlcicpOgoJCXByaW50ICc8aHRtbD48aGVhZD48dGl0bGU+JXM8L3RpdGxl
PicgJSAodGl0bGUpCgkJI3RoaXMgaXMgd2hlcmUgd2Ugd2lsbCBjYWxsIHRoZSBtZXRhdGFncyBm
dW5jdGlvbiBpbiB0aGUgZnV0dXJlOgoKCQlzZWxmLm1ldGF0YWdzKCkKCQlwcmludCAnPC9oZWFk
PicKCQkKCWRlZiBtZXRhdGFncyhzZWxmKToKCQlwYXNzCgoJZGVmIGVuZGh0bWwoc2VsZik6CgkJ
cHJpbnQgJzwvaHRtbD4nCglkZWYgcHJpbnRsaW5rcyhzZWxmKToKCQlwcmludCAnPGEgaHJlZj0i
cm9zdGVyLnB5P2FjdGlvbj1uZXdhY2NvdW50Ij5DcmVhdGUgYSBOZXcgQWNjb3VudDwvYT48YnI+
JwoJCXByaW50ICc8YSBocmVmPSJyb3N0ZXIucHk/YWN0aW9uPXByb2plY3RsaXN0Ij5MaXN0IEFj
dGl2ZSBQcm9qZWN0czwvYT48YnI+JwoJCXByaW50ICc8YSBocmVmPSJyb3N0ZXIucHkiPkxvZ291
dDwvYT48YnI+JwoJCQoJCQoJZGVmIHRhYmxldG9wKHNlbGYsdGl0bGUsZXJyb3I9Tm9uZSk6CgkJ
cHJpbnQgJzxib2R5PicKCQlpZiBlcnJvcjoKCQkJcHJpbnQgJzxoMj4lczwvaDI+JyAlIChlcnJv
cikKCQlwcmludCAnPGgxPiVzPC9oMT4nICUgKHRpdGxlKQoJCXByaW50ICc8dGFibGU+PHRyPjx0
ZD4nCgkJc2VsZi5wcmludGxpbmtzKCkKCQlwcmludCAnPC90ZD48dGQ+JwoJZGVmIGxvZ2luc2Ny
ZWVuKHNlbGYsZXJyb3I9Tm9uZSk6CgkJc2VsZi50YWJsZXRvcCgnQkVUQSB0ZXN0ZXJzIExvZ2lu
IFNjcmVlbicsZXJyb3IpCgkJcHJpbnQgJycnPGZvcm0gYWN0aW9uPSJyb3N0ZXIucHkiIG1ldGhv
ZD0icG9zdCI+CgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9Indl
bGNvbWUiPgoJCQk8cD5Vc2VybmFtZTogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVuYW1lIj48
L3A+CgkJCTxwPlBhc3N3b3JkOiA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3MiPjwv
cD4KCQkJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkxvZyBpbiI+CgkJCScnJwoJCXByaW50
ICc8L2JvZHk+JwoJZGVmIGludGVybmFsKHNlbGYsZXJyb3I9Tm9uZSk6CgkJc2VsZi50YWJsZXRv
cCgnQkVUQSB0ZXN0ZXJzIEludGVybmFscyBTY3JlZW4nLGVycm9yKQoJCXByaW50ICc8aDI+VXNl
ciBEZWF0aWxzPC9oMj4nCgkJcHJpbnQgJzxwPkhlcmUgeW91IGNhbiBjaGFuZ2UgYW55IG9mIHlv
dXIgdXNlciBzdGF0aXN0aWNzOjwvcD4nCgkJcHJpbnQgJzxmb3JtIGFjdGlvbj0icm9zdGVyLnB5
IiBtZXRob2Q9InBvc3QiPicKCQlpZiBkZWJ1ZzoKCQkJcHJpbnQgZGV0YWlscwoJCWlmIGxlbihk
ZXRhaWxzKSA+IDE6CgkJCXByaW50ICc8aDI+RXJyb3IhIG1vcmUgdGhhbiBvbmUgdXNlciB3aXRo
IHlvdXIgZGV0YWlscyE8L2gyPicKCQkJcmV0dXJuIDAKCQllbHNlOgoJCQlwcmludCAnPHA+IFVJ
RDogJWQ8L3A+JyAlIChkZXRhaWxzWzBdWzBdKQoJCQlwcmludCAnPHA+IFVzZXIgTmFtZTogJXM8
L3A+JyAlIChkZXRhaWxzWzBdWzFdKQoJCQlwcmludCAnPHA+IFBhc3N3b3JkOiBIaWRkZW4hPC9w
PicKCQkJcHJpbnQgJzxwPiBGaXJzdCBOYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZmly
c3QiIHZhbHVlPSIlcyI+PC9wPicgJSAoZGV0YWlsc1swXVszXSkKCQkJcHJpbnQgJzxwPiBMYXN0
IE5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJsYXN0IiB2YWx1ZT0iJXMiPjwvcD4nICUg
KGRldGFpbHNbMF1bNF0pCgkJCXByaW50ICc8cD4gRW1haWwgQWRkcjogPGlucHV0IHR5cGU9InRl
eHQiIG5hbWU9ImVtYWlsIiB2YWx1ZT0iJXMiPjwvcD4nICUgKGRldGFpbHNbMF1bNV0pCgkJCXBy
aW50ICc8cD4gVGVzdGVyIENvdW50OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGVzdGVyIiB2
YWx1ZT0iJXMiPjwvcD4nICUgKGRldGFpbHNbMF1bNl0pCgkJCXByaW50ICc8cD4gUHJlc2VuY2U6
IDxzZWxlY3QgbmFtZT0icHJlc2VuY2UiPicKCQkJaWYgZGV0YWlsc1swXVs4XSA9PSAnaGlkZGVu
JzoKCQkJCXByaW50ICc8b3B0aW9uIHNlbGVjdGVkPmhpZGRlbicKCQkJCXByaW50ICc8b3B0aW9u
PmF2YWlsYWJsZScKCQkJZWxzZToKCQkJCXByaW50ICc8b3B0aW9uIHNlbGVjdGVkPmF2YWlsYWJs
ZScKCQkJCXByaW50ICc8b3B0aW9uPmhpZGRlbicKCQkJcHJpbnQgJzwvc2VsZWN0PicKCQkJcHJp
bnQgJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InVuYW1lIiB2YWx1ZT0iJXMiPicgJSAoZGV0
YWlsc1swXVsxXSkKCQkJcHJpbnQgJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBhc3MiIHZh
bHVlPSIlcyI+JyAlIChkZXRhaWxzWzBdWzJdKQoJCQlwcmludCAnPGlucHV0IHR5cGU9ImhpZGRl
biIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0iY2hhbmdlc3RhdHMiPicKCQkJcHJpbnQgJzxpbnB1dCB0
eXBlPSJzdWJtaXQiIHZhbHVlPSJDaGFuZ2UgU3RhdGlzdGljcyI+JwoJCQlwcmludCAnPC9mb3Jt
PicKCQkJcHJpbnQgJzxocj4nCgkJCXByaW50ICc8aDI+UmVsZWFzZSBhIHByb2plY3Q8L2gyPicK
CQkJcHJpbnQgIjxwPkhlcmUncyB3aGVyZSB5b3UgY2FuIHJlbGVhc2UgYSBmaWxlIHRvIGJlIHRl
c3RlZC4gVGhlIGZvcm1hdCBvZiB0aGlzIHNlY3Rpb24gaGFzIGNoYW5nZWQgYSBiaXQuIEJhc2lj
YWxseSwgeW91IG5vdyBnZXQgYSBsaXN0IG9mIHBlb3BsZSB3aG8gYXJlIGF2YWlsYWJsZSB0byB0
ZXN0IGZpbGVzLiB5b3UgY2FuIGNob29zZSB3aGljaCB0ZXN0ZXJzIHlvdSB3YW50IHRvIHRlc3Qg
eW91ciBmaWxlcywgYnV0IHlvdSA8Yj5jYW5ub3QgY2hvb3NlIG1vcmUgdGhhbiAxMCBwZW9wbGUh
PC9iPi48L3A+IgoJCQlwcmludCAnPHA+SWYgeW91IGFyZSBhIHRlc3RlciwgYW5kIHlvdSB3YW50
IHRvIHRlc3QgYSBmaWxlLCBidXQgbm8gb25lIGV2ZXIgY2hvb3NlcyB5b3UsIHRoZSBiZXN0IHdh
eSB0byBnZXQgaW50byB0aGUgdGVzdGluZyBzY2hlbWUgaXMgdG8gc3VibWl0IGJ1ZyByZXBvcnRz
IHRvIHZhcmlvdXMgZG1vZCBhdXRob3JzLiBNb3N0IG9mIHRoZW0gYXJlIHZlcnkgZ3JhdGVmdWxs
IGZvciB0aGVzZSByZXBvcnRzLCBhbmQgeW91IG1heSBldmVuIGdldCBhIG1lbnRpb24gaW4gdGhl
IGNyZWRpdHMhPC9wPicKCQkJcHJpbnQgJzxocj4nCgkJCWxpbmVzLHJlc3VsdCA9IG15c3FsKCdz
ZWxlY3QgdW5hbWUsIGZpcnN0LCBsYXN0LCBlbWFpbCwgdWlkIGZyb20gdXNlcnMgd2hlcmUgcHJl
c2VuY2U9ImF2YWlsYWJsZSIgYW5kIHRlc3Rlcj4xJykKCQkJcHJpbnQgJzxmb3JtIGFjdGlvbj0i
cm9zdGVyLnB5IiBtZXRob2Q9InBvc3QiPicKCQkJcHJpbnQgJzx0YWJsZT48dHI+PHRkPjxiPlVJ
RDwvYj48L3RkPjx0ZD48Yj5Vc2VyIE5hbWU8L2I+PC90ZD48dGQ+PGI+Rmlyc3QgTmFtZTwvYj48
L3RkPjx0ZD48Yj5MYXN0IE5hbWU8L2I+PC90ZD48dGQ+PGI+RW1haWwgQWRkcmVzczwvYj48L3Rk
PjwvdHI+JwoJCQlmb3IgdXNlciBpbiByZXN1bHQ6CgkJCQlwcmludCAnPHRyPicKCQkJCXByaW50
ICc8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ1aWQiIHZhbHVlPSIlcyI+ICVzJyAl
ICh1c2VyWzRdLHVzZXJbNF0pCgkJCQlwcmludCAnPHRkPiVzPC90ZD4nICUgKHVzZXJbMF0pCgkJ
CQlwcmludCAnPHRkPiVzPC90ZD4nICUgKHVzZXJbMV0pCQkJCQoJCQkJcHJpbnQgJzx0ZD4lczwv
dGQ+JyAlICh1c2VyWzJdKQoJCQkJcHJpbnQgJzx0ZD4lczwvdGQ+JyAlICh1c2VyWzNdKQoJCQkJ
cHJpbnQgJzwvdHI+JwoJCQlwcmludCAnPC90YWJsZT4nCgkJCXByaW50ICc8aW5wdXQgdHlwZT0i
aGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJhZGRwcm9qZWN0Ij4nCgkJCXByaW50ICc8aW5w
dXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ1bmFtZSIgdmFsdWU9IiVzIj4nICUgKGRldGFpbHNbMF1b
MV0pCgkJCXByaW50ICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwYXNzIiB2YWx1ZT0iJXMi
PicgJSAoZGV0YWlsc1swXVsyXSkKCQkJcHJpbnQgJzxwPiBZb3UgbmVlZCB0byB3cml0ZSBhIHNo
b3J0IGRlc2NyaXB0aW9uLCB3aGljaCBzaG91bGQgaW5jbHVkZSA8Yj4gd2hlcmUgdG8gZG93bmxv
YWQgeW91ciBmaWxlIGZyb208L2I+LCA8Yj5ob3cgdG8gY29udGFjdCB5b3UsIHRvIHN1Ym1pdCBi
dWcgcmVwb3J0czwvYj4sIGFuZCBhIDxiPmJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgeW91ciBm
aWxlIGlzPC9iPiAoZWcuLSBpcyBpdCBhIGRtb2Q/IGdyYXBoaWNzIHV0aWxpdHk/IHdhbGt0aHJv
dWdoLCBldGMuIGV0Yy4gZXRjLik8L3A+JwoJCQlwcmludCAnPHRleHRhcmVhIG5hbWU9ImRlc2Ny
aXB0aW9uIiByb3dzPSIxMCIgY29scz0iNjAiPlByb2plY3QgRGVzY3JpcHRpb246PC90ZXh0YXJl
YT48YnI+JwoJCQkKCQkJcHJpbnQgJzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJSZWxlYXNl
IFByb2plY3QiPicKCQkJcHJpbnQgJzwvZm9ybT4nCgkJCXByaW50ICc8aHI+JwkJCglkZWYgbmV3
YWNjb3VudChzZWxmLGVycm9yPU5vbmUpOgoJCXNlbGYudGFibGV0b3AoJ0JFVEEgdGVzdGVycyBO
ZXcgQWNjb3VudCBQYWdlJyxlcnJvcikKCQlwcmludCAnPHA+VGhpcyBpcyB3aGVyZSB5b3UgY2Fu
IHNpZ24gdXAgZm9yIGEgbmV3IGFjY291bnQsIGVpdGhlciB0byB0ZXN0IGEgZmlsZSwgb3IgdG8g
cmVsZWFzZSBhIGZpbGUgdG8gYmUgdGVzdGVkLiBZb3UgbXVzdCBmaWxsIGluIGFsbCB0aGUgZmll
bGRzIGJlbG93LCB0aGVuIGNsaWNrIHN1Ym1pdC4gYWZ0ZXIgY29tcGxldGluZyB0aGlzIHByb2Nl
c3MsIHl1IHdpbGwgYmUgYWJsZSB0byBsb2cgaW4gdmlhIHRoZSBtYWluIHBhZ2UuPC9wPicKCQlw
cmludCAnPGZvcm0gYWN0aW9uPSJyb3N0ZXIucHkiIG1ldGhvZD0icG9zdCI+JwoJCXByaW50ICc8
cD5Vc2VyIG5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1bmFtZSI+PC9wPicKCQlwcmlu
dCAnPHA+UGFzc3dvcmQ6IDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icGFzc3ciPjwvcD4n
CgkJcHJpbnQgJzxwPkZpcnN0IE5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmaXJzdCI+
PC9wPicKCQlwcmludCAnPHA+TGFzdCBOYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibGFz
dCI+PC9wPicKCQlwcmludCAnPHA+RW1haWwgQWRkcmVzczogPGlucHV0IHR5cGU9InRleHQiIG5h
bWU9ImVtYWlsIj48L3A+JwoJCXByaW50ICc8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU3Vi
bWl0IERhdGEiPicKCQlwcmludCAnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2
YWx1ZT0icmVnaXN0ZXJuZXdhY2NvdW50Ij4nCgkJcHJpbnQgJzwvZm9ybT4nCgkJCQoJCQkKCQkK
CQkKCgkKCQpjbGFzcyBwcm9jZXNzY2dpOgoJZGVmIF9faW5pdF9fKHNlbGYpOgoJCXNlbGYuZm9y
bSA9IGNnaS5GaWVsZFN0b3JhZ2UoKQoJCXNlbGYuZm9ybWl0ZW1zID0gc2VsZi5mb3JtLmtleXMo
KQoJCQoJZGVmIGdldHZhbHVlcyhzZWxmLGl0ZW0pOgoJCWlmIHNlbGYuZm9ybS5oYXNfa2V5KGl0
ZW0pOgoJCQlyZXR1cm4gc2VsZi5mb3JtW2l0ZW1dLnZhbHVlCgkJZWxzZToKCQkJcmV0dXJuIE5v
bmUKCWRlZiBjaGVja2xvZyhzZWxmKToKCQlpZiBkZWJ1ZzoKCQkJcHJpbnQgJzxwcmU+SW4gY2hl
Y2tsb2cgc3ViLjwvcHJlPicKCQlpZiAndW5hbWUnIGFuZCAncGFzcycgaW4gc2VsZi5mb3JtLmtl
eXMoKToKCQkJaWYgZGVidWc6CgkJCQlwcmludCAnPHByZT51bmFtZSBhbmQgcGFzcyBrZXlzIGZv
dW5kPC9wcmU+JwoJCQlsaW5lcyxyZXN1bHQgPSBteXNxbCgnc2VsZWN0IHVuYW1lLHBhc3MgZnJv
bSB1c2VycycpCgkJCQoJCQlpZiAoc2VsZi5mb3JtWyd1bmFtZSddLnZhbHVlLHNlbGYuZm9ybVsn
cGFzcyddLnZhbHVlKSBpbiByZXN1bHQ6CgkJCQlyZXR1cm4gMQoJCQllbHNlOgoJCQkJcmV0dXJu
IDAKCWRlZiBjaGFuZ2VzdGF0cyhzZWxmKToKCQlpZiBub3Qgc2VsZi5jaGVja2xvZygpOgoJCQly
ZXR1cm4gMAoJCXVpZCA9IGRldGFpbHNbMF1bMF0KCQl1bmFtZSA9IGRldGFpbHNbMF1bMV0KCQlw
YXNzdyA9IGRldGFpbHNbMF1bMl0KCQlmaXJzdCA9IGRldGFpbHNbMF1bM10KCQlsYXN0ID0gZGV0
YWlsc1swXVs0XQoJCWVtYWlsID0gZGV0YWlsc1swXVs1XQoJCXRlc3RlciA9IGRldGFpbHNbMF1b
Nl0KCQlkZXZlbG9wZXIgPSBkZXRhaWxzWzBdWzddCgkJcHJlc2VuY2UgPSBkZXRhaWxzWzBdWzhd
CgoJCWlmIHNlbGYuZm9ybVsnZmlyc3QnXS52YWx1ZSAhPSBmaXJzdDoKCQkJbXlzcWwoJ3VwZGF0
ZSB1c2VycyBTRVQgZmlyc3Q9IiVzIiB3aGVyZSB1bmFtZT0iJXMiIGFuZCBwYXNzPSIlcyInICUg
KHNlbGYuZm9ybVsnZmlyc3QnXS52YWx1ZSxzZWxmLmZvcm1bJ3VuYW1lJ10udmFsdWUsc2VsZi5m
b3JtWydwYXNzJ10udmFsdWUpKQoKCQlpZiBzZWxmLmZvcm1bJ2xhc3QnXS52YWx1ZSAhPSBsYXN0
OgoJCQlteXNxbCgndXBkYXRlIHVzZXJzIFNFVCBsYXN0PSIlcyIgd2hlcmUgdW5hbWU9IiVzIiBh
bmQgcGFzcz0iJXMiJyAlIChzZWxmLmZvcm1bJ2xhc3QnXS52YWx1ZSxzZWxmLmZvcm1bJ3VuYW1l
J10udmFsdWUsc2VsZi5mb3JtWydwYXNzJ10udmFsdWUpKQoKCQlpZiBzZWxmLmZvcm1bJ2VtYWls
J10udmFsdWUgIT0gZW1haWw6CgkJCW15c3FsKCd1cGRhdGUgdXNlcnMgU0VUIGVtYWlsPSIlcyIg
d2hlcmUgdW5hbWU9IiVzIiBhbmQgcGFzcz0iJXMiJyAlIChzZWxmLmZvcm1bJ2VtYWlsJ10udmFs
dWUsc2VsZi5mb3JtWyd1bmFtZSddLnZhbHVlLHNlbGYuZm9ybVsncGFzcyddLnZhbHVlKSkKCQkK
CQlpZiBzZWxmLmZvcm1bJ3Rlc3RlciddLnZhbHVlICE9IHRlc3RlcjoKCQkJbXlzcWwoJ3VwZGF0
ZSB1c2VycyBTRVQgdGVzdGVyPSVzIHdoZXJlIHVuYW1lPSIlcyIgYW5kIHBhc3M9IiVzIicgJSAo
c2VsZi5mb3JtWyd0ZXN0ZXInXS52YWx1ZSxzZWxmLmZvcm1bJ3VuYW1lJ10udmFsdWUsc2VsZi5m
b3JtWydwYXNzJ10udmFsdWUpKQoKCQlpZiBzZWxmLmZvcm1bJ3ByZXNlbmNlJ10udmFsdWUgIT0g
cHJlc2VuY2U6CgkJCW15c3FsKCd1cGRhdGUgdXNlcnMgU0VUIHByZXNlbmNlPSIlcyIgd2hlcmUg
dW5hbWU9IiVzIiBhbmQgcGFzcz0iJXMiJyAlIChzZWxmLmZvcm1bJ3ByZXNlbmNlJ10udmFsdWUs
c2VsZi5mb3JtWyd1bmFtZSddLnZhbHVlLHNlbGYuZm9ybVsncGFzcyddLnZhbHVlKSkKCQlyZXR1
cm4gMQoJZGVmIGFkZGFjY291bnQoc2VsZik6CgkJdW5hbWUgPSBzZWxmLmZvcm1bJ3VuYW1lJ10u
dmFsdWUKCQlwYXNzdyA9IHNlbGYuZm9ybVsncGFzc3cnXS52YWx1ZQoJCWZpcnN0ID0gc2VsZi5m
b3JtWydmaXJzdCddLnZhbHVlCgkJbGFzdCA9IHNlbGYuZm9ybVsnbGFzdCddLnZhbHVlCgkJZW1h
aWwgPSBzZWxmLmZvcm1bJ2VtYWlsJ10udmFsdWUKCQkKCQlpZiBub3QgKHVuYW1lIGFuZCBwYXNz
dyBhbmQgZmlyc3QgYW5kIGxhc3QgYW5kIGVtYWlsKToKCQkJcmV0dXJuIDAKCQllbHNlOgoJCQkj
d2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBubyBvbmUgZWxzZSBoYXMgdGhlIHNhbWUgdXNlcm5h
bWUgYW5kIHBhc3N3b3JkOgoJCQlsaW5lcyxyZXN1bHQgPSBteXNxbCgnc2VsZWN0IHVuYW1lLHBh
c3MgZnJvbSB1c2VycycpCgkJCWZvciB1c2VyIGluIHJlc3VsdDoKCQkJCWlmIHVzZXJbMF0gPT0g
dW5hbWU6CgkJCQkJcmV0dXJuIDAKCQkJCWlmIHVzZXJbMV0gPT0gcGFzc3c6CgkJCQkJcmV0dXJu
IDAKCQkJI25vdyB3ZSBuZWVkIHRvIGFkZCB0aGVzZSByZXN1bHRzIHRvIHRoZSBkYXRhYmFzZQoJ
CQl0cnk6CgkJCQlteXNxbCgnaW5zZXJ0IGludG8gdXNlcnMgKHVuYW1lLHBhc3MsZmlyc3QsbGFz
dCxlbWFpbCx0ZXN0ZXIpIHZhbHVlcygiJXMiLCIlcyIsIiVzIiwiJXMiLCIlcyIsMSknICUgKHVu
YW1lLHBhc3N3LGZpcnN0LGxhc3QsZW1haWwpKQoJCQlleGNlcHQ6CgkJCQlyZXR1cm4gMAoJCQly
ZXR1cm4gMQoJCQkKCQkKcGFnZSA9IGRpc3BsYXlodG1sKCkKcGFnZS5oZWFkZXJzKCkKcGFnZS50
b3BodG1sKCkKcGFnZS5tZXRhdGFncygpCgoKY2dpID0gcHJvY2Vzc2NnaSgpCgojdGhlIGFjdGlv
biBmb3JtIGl0ZW0gZGVmaW5lcyB3aGF0IGxldmVsIHdlIGFyZSBhdAppZiAnYWN0aW9uJyBub3Qg
aW4gY2dpLmZvcm1pdGVtczoKCSN3ZSBhcmUgYXQgdGhlIGJlZ2lubmluZywgbG9naW4gcGFnZS4K
CXBhZ2UubG9naW5zY3JlZW4oKQplbHNlOgoJdHJ5OgoJCWxpbmVzLGRldGFpbHMgPSBteXNxbCgn
c2VsZWN0ICogZnJvbSB1c2VycyB3aGVyZSB1bmFtZT0iJXMiIGFuZCBwYXNzPSIlcyInICUgKGNn
aS5mb3JtWyd1bmFtZSddLnZhbHVlLGNnaS5mb3JtWydwYXNzJ10udmFsdWUpKQoJZXhjZXB0OgoJ
CXBhc3MKCWlmIGNnaS5mb3JtWydhY3Rpb24nXS52YWx1ZSA9PSAnd2VsY29tZSc6CgkJaWYgY2dp
LmNoZWNrbG9nKCk6CgkJCXBhZ2UuaW50ZXJuYWwoKQoJCWVsc2U6CgkJCXBhZ2UubG9naW5zY3Jl
ZW4oJ1VzZXJuYW1lIG9yIFBhc3N3b3JkIEluY29ycmVjdCEnKQoJCgllbGlmIGNnaS5mb3JtWydh
Y3Rpb24nXS52YWx1ZSA9PSAnY2hhbmdlc3RhdHMnOgoJCWlmIGNnaS5jaGFuZ2VzdGF0cygpOgoJ
CQkjd2UgbmVlZCB0byB1cGRhdGUgZGV0YWlscywgb3RoZXJ3aXNlIHBhZ2UuaW50ZXJuYWwgcmVh
ZHMgdGhlIE9MRCB2YWx1ZXMsIHdoaWNoIGNvbmZ1c2VzIHVzZXJzIDotKQoJCQlsaW5lcyxkZXRh
aWxzID0gbXlzcWwoJ3NlbGVjdCAqIGZyb20gdXNlcnMgd2hlcmUgdW5hbWU9IiVzIiBhbmQgcGFz
cz0iJXMiJyAlIChjZ2kuZm9ybVsndW5hbWUnXS52YWx1ZSxjZ2kuZm9ybVsncGFzcyddLnZhbHVl
KSkKCQkJcGFnZS5pbnRlcm5hbCgpCgkJZWxzZToKCQkJcGFnZS5sb2dpbnNjcmVlbignVXNlcm5h
bWUgb3IgUGFzc3dvcmQgSW5jb3JyZWN0IScpCgllbGlmIGNnaS5mb3JtWydhY3Rpb24nXS52YWx1
ZSA9PSAnbmV3YWNjb3VudCc6CgkJcGFnZS5uZXdhY2NvdW50KCkKCWVsaWYgY2dpLmZvcm1bJ2Fj
dGlvbiddLnZhbHVlID09ICdyZWdpc3Rlcm5ld2FjY291bnQnOgoJCWlmIGNnaS5hZGRhY2NvdW50
KCk6CgkJCXBhZ2UubG9naW5zY3JlZW4oJ0FjY291bnQgQ3JlYXRlZC4geW91IG1heSBub3cgbG9n
aW4gdXNpbmcgdGhlIGZvcm0gYmVsb3cnKQoJCWVsc2U6CgkJCXBhZ2UubmV3YWNjb3VudCgnU29t
ZSBvciBhbGwgZGV0YWlscyBvbWl0dGVkLiBwbGVhc2UgdHJ5IGFnYWluIScpCgllbGlmIGNnaS5m
b3JtWydhY3Rpb24nXS52YWx1ZSA9PSAnYWRkcHJvamVjdCc6CgkJaWYgY2dpLmNoZWNrbG9nKCk6
CgkJCXByaW50IGNnaS5mb3JtaXRlbXMKCQkJcHJpbnQgY2dpLmZvcm1bJ3VpZCddLnZhbHVlCgkJ
CSNob3cgZG8gaSBnZXQgdGhlIHZhbHVlcyBvZiBhIGNoZWNrYm94Pz8KCQoKCgpwYWdlLmVuZGh0
bWwoKQo=

--Multipart_Tue__10_Dec_2002_12:52:03_+1300_088a1528
Content-Type: application/octet-stream;
 name="tmysql.py"
Content-Disposition: attachment;
 filename="tmysql.py"
Content-Transfer-Encoding: base64

IyEvdXNyL2Jpbi9weXRob24KCgppbXBvcnQgTXlTUUxkYgoKSE9TVD0nbG9jYWxob3N0JwpEQiA9
ICdiZXRhdGVzdCcKVVNFUj0ndGhvbWknClBBU1M9J3Rob21hcycKCmRlZiBteXNxbChxdWVyeV9z
dHJpbmcpOgoJY29ubmVjdGlvbiA9IE15U1FMZGIuY29ubmVjdChob3N0PUhPU1QsdXNlcj1VU0VS
LHBhc3N3ZD1QQVNTLGRiPURCKQoJY3Vyc29yID0gY29ubmVjdGlvbi5jdXJzb3IoKQoKCXRyeToK
CQlsaW5lcyA9IGN1cnNvci5leGVjdXRlKHF1ZXJ5X3N0cmluZykKCQlyZXN1bHQgPSBjdXJzb3Iu
ZmV0Y2hhbGwoKQoJZXhjZXB0OgoJCXJldHVybiBOb25lLE5vbmUKCXJldHVybiBsaW5lcyxyZXN1
bHQKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CglwcmludCAndGVzdGluZyB3aXRoIHRoZSBm
b2xsb3dpbmcgcXVlcnlfc3RyaW5nOicKCXByaW50ICdzZWxlY3QgKiBmcm9tIHVzZXJzOycKCWxp
bmVzLHJlc3VsdCA9IG15c3FsKCdzZWxlY3QgKiBmcm9tIHVzZXJzJykKCXByaW50ICclZCBsaW5l
cywgd2l0aCByZXN1bHM6JyAlIChsaW5lcykKCXByaW50IAoJcHJpbnQgcmVzdWx0CgkJCg==

--Multipart_Tue__10_Dec_2002_12:52:03_+1300_088a1528--