[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