[python] dynamicka dostupnost nejakych casti objektu
Jan Kundrát
jkt na gentoo.org
Úterý Únor 27 00:50:30 CET 2007
Ahoj,
mame nejakou tridu Mailbox, ktera umi zpristupnit mimo jine jednotlive
zpravy ulozene v nejakem mailboxu na IMAP serveru. IMAP je tak trochu
unikatni tim, ze umi zpravy prenaset po castech, takze pokud Vam nekdo
posle 10MB prilohu a k tomu tri 5kB textaky, muzete si je precist, aniz
byste se zabyvali velkou obludou.
V Pythonu existuje trida email.Message, ktera je jakz takz standardnim
objektem pro pristup k nejake zprave, a ja myslim, ze by bylo dobre, aby
Mailbox.get_message() vracel nejaky objekt, ktery se bude chovat
podobne, avsak jednotlive casti bude ze serveru stahovat az "na
vyzadani", cili kazda instance Message by si udrzovala v patrnosti, z
jakeho Mailboxu pochazi:
mbox = Mailbox()
zpravy = Mailbox.find_messages(search_criteria) # vrati list instanci
(...)
for mail in zpravy:
# nejpozdeji ted se nactou hlavicky
print mail["From"]
for cast in mail.walk():
# nejpozdeji ted se zjisti struktura zpravy
print cast.get_content_type()
if cast.get_content_type().startswith("text/"):
print cast.payload[:100] + "..."
# ted se nacte samotny obsah teto casti zpravy
Jenomze jak osetrit pripad, kdy uz chudak Mailbox jaksi o nasi zprave
nevi? (K tomu muze dojit ze spousty duvodu -- nekdo smazal zpravu,
kterou jsme jeste nemeli nacachovanou, na serveru se zmenilo
UIDVALIDITY,... Je zajimave, ze muze nastat situace, kdy napr. muzeme
zjistit "kostru" mailu, ale uz nejde pristupovat k priloham,...)
Je podobna architektura rozumna a "pythonic"?
Diky,
-jkt
--
cd /local/pub && more beer > /dev/mouth
Další informace o konferenci Python