�
��c@srdZddkZddkZddkZddddddgZdeifd ��YZyddkZWnej
oddkZnXei �Z
[d
ad�Zdad�Zd
�Zd�ZdZhed<ed<ed<ed<dd<dd<Zhdd<dd<dd<dd<dd<dd<Zd�Zd�Zd�Zd�ZdS(s<Various tools used by MIME-reading or MIME-writing programs.i�NtMessagetchoose_boundarytencodetdecodetcopyliteralt
copybinarycBskeZdZdd�Zd�Zd�Zd�Zd�Zd�Zd�Z d �Z
d
�Zd�ZRS(s�A derived class of rfc822.Message that knows about MIME headers and
contains some hooks for decoding encoded and multipart messages.icCsRtii|||�|id�|_|id�|_|i�|i�dS(Nscontent-transfer-encodingscontent-type(trfc822Rt__init__t getheadertencodingheadert
typeheadert parsetypet
parseplist(tselftfptseekable((s/sys/lib/python/mimetools.pyRs
cCs�|i}|djo
d}nd|jo*|id�}|||_|| }n
d|_|id�}x4tt|��D] }||i�i�||<q�Wdi |�|_
|d|_di |d�|_dS(Ns
text/plaint;tt/ii(
R
tNonetindext plisttexttsplittrangetlentstriptlowertjointtypetmaintypetsubtype(R
tstrtitfields((s/sys/lib/python/mimetools.pyRs
cCs�|i}g|_x�|d djo�|d}d|jo|id�}n
t|�}|| }d|jo?|id�}|| i�i�d||di�}n|ii|i��||}qWdS(NiRt=(RtplistRRRRtappend(R
RtendtfR ((s/sys/lib/python/mimetools.pyR)s
0cCs|iS(N(R#(R
((s/sys/lib/python/mimetools.pytgetplist;scCsZ|i�d}t|�}x7|iD],}|| |joti||�Sq&q&WdS(NR"(RRR#RtunquoteR(R
tnametntp((s/sys/lib/python/mimetools.pytgetparam>s
cCsUg}xH|iD]=}|id�}|djo|i|| i��qqW|S(NR"i(R#tfindR$R(R
tresultR+R ((s/sys/lib/python/mimetools.pyt
getparamnamesFs
cCs%|idjodSn|ii�S(Nt7bit(R RR(R
((s/sys/lib/python/mimetools.pytgetencodingNscCs|iS(N(R(R
((s/sys/lib/python/mimetools.pytgettypeSscCs|iS(N(R(R
((s/sys/lib/python/mimetools.pytgetmaintypeVscCs|iS(N(R(R
((s/sys/lib/python/mimetools.pyt
getsubtypeYs(
t__name__t
__module__t__doc__RRRR'R,R/R1R2R3R4(((s/sys/lib/python/mimetools.pyRs icCs(ti�td7at}ti�|S(Ni(t
_counter_locktacquiret_countertrelease(R.((s/sys/lib/python/mimetools.pyt_get_next_counterjs
cCs�ddk}tdjo�ddk}y|i|i��}Wn|ij
o
d}nXytti ��}Wnt
j
o
d}nXytti��}Wnt
j
o
d}nX|d|d|andt|i�t�fS(sxReturn a string usable as a multipart boundary.
The string chosen is unique within a single program run, and
incorporates the user id (if available), process id (if available),
and current time. So it's very unlikely the returned string appears
in message text, but there's no guarantee.
The boundary contains dots so you have to quote it in the header.i�Ns 127.0.0.1t1t.s
%s.%.3f.%d(
ttimet_prefixRtsockett
gethostbynametgethostnametgaierrortreprtostgetuidtAttributeErrortgetpidR<(R?RAthostidtuidtpid((s/sys/lib/python/mimetools.pyRts"
cCs�|djo ddk}|i||�Sn|djo ddk}|i||�Sn|djo ddk}|i||�Sn|d
jo|i|i��Sn|tjot|t||�ntd|�dS(sDDecode common content-transfer-encodings (base64, quopri, uuencode).tbase64i�Nsquoted-printabletuuencodes
x-uuencodetuuesx-uueR0t8bits%unknown Content-Transfer-Encoding: %s(RNs
x-uuencodeROsx-uue(s7bitRP( RMRtquoprituutwritetreadt decodetabtpipethrought
ValueError(tinputtoutputtencodingRMRQRR((s/sys/lib/python/mimetools.pyR�s
cCs�|djo ddk}|i||�Sn|djo#ddk}|i||d�Sn|d
jo ddk}|i||�Sn|djo|i|i��Sn|tjot|t||�ntd|�dS(sDEncode common content-transfer-encodings (base64, quopri, uuencode).RMi�Nsquoted-printableiRNs
x-uuencodeROsx-uueR0RPs%unknown Content-Transfer-Encoding: %s(suuencodes
x-uuencodesuuesx-uue(s7bits8bit( RMRRQRRRSRTt encodetabRVRW(RXRYRZRMRQRR((s/sys/lib/python/mimetools.pyR�s
sa(
TEMP=/tmp/@uu.$$
sed "s%^begin [0-7][0-7]* .*%begin 600 $TEMP%" | uudecode
cat $TEMP
rm $TEMP
)RNs
x-uuencodeROsx-uuesmmencode -u -qsquoted-printablesmmencode -u -bRMsuuencode tempfilesmmencode -qsmmencode -bcCs-ti|d�}t||�|i�dS(Ntw(RFtpopenRtclose(RXtcommandtpipe((s/sys/lib/python/mimetools.pytpipeto�s
cCs}ti�\}}ti|d�}t||�|i�ti|d|d�}t||�|i�ti|�dS(NR\s <tr( ttempfiletmkstempRFtfdopenRR^R]Rtunlink(RXR_RYtfdttempnamettempR`((s/sys/lib/python/mimetools.pyRV�s
cCs/x(|i�}|pPn|i|�qdS(N(treadlineRS(RXRYtline((s/sys/lib/python/mimetools.pyR�scCs8d}x+|i|�}|pPn|i|�q dS(Ni (RTRS(RXRYtBUFSIZERk((s/sys/lib/python/mimetools.pyR�s
(R7RFRRct__all__RtthreadtImportErrortdummy_threadt
allocate_lockR8R:R<RR@RRRt
uudecode_pipeRUR[RaRVRR(((s/sys/lib/python/mimetools.pys<module>sJ W
|