ó oBú]c@soddlZddlmZddlmZddlmZddlmZddl Z ddl m Z ddl m Z ddlmZmZdd l mZe jeƒZe jZe jZe jZd Zd d gZd dgZdgZd ZdZdZddddddddgZdZ dgZ!d„Z"d„Z#de$fd„ƒYZ%d„Z&ed „Z'dS(!iÿÿÿÿN(tMIMEBase(t MIMEMultipart(tMIMENonMultipart(tMIMEText(thandlers(tlog(tread_file_or_urltUrlError(tutils Content-Types text/plainstext/x-not-multipartstext/x-include-urlstext/x-include-once-urlstext/cloud-config-archivestext/cloud-configsapplication/octet-streamsapplication/gzipsapplication/gzip-compressedsapplication/gzippedsapplication/x-compresssapplication/x-compressedsapplication/x-gunzipsapplication/x-gzipsapplication/x-gzip-compressedsNumber-AttachmentscCs||=|||tinclude_once_ontlinetlc_linet include_urltinclude_once_fntrespturletmessagetioetnew_msg((s7/usr/lib/python2.7/site-packages/cloudinit/user_data.pyR9ÃsR              c Cstj|dgdttfƒ}xÛ|D]Ó}t|tjƒrPi|d6}nt|tƒseq(n|jddƒ}|jdƒ}|sÂt }t|tj ƒr­t }nt j ||ƒ}n|jddƒ\}} |dkrt|tj ƒr|jƒ}nt|d | ƒ} nt|| ƒ} | j|ƒd |krXt| |d ƒnd |kr| jd t|d ƒƒnxgt|jƒƒD]S} | jƒdd dd d tjƒtjƒfkrÓq”n| j| || ƒq”W|j|| ƒq(WdS(NtdefaulttallowedRstttypeR$ittextt_subtypeRs launch-indexs Launch-Indexscontent-disposition(RRKRtsetRtsixt string_typestdictRItARCHIVE_UNDEF_TYPEt binary_typetARCHIVE_UNDEF_BINARY_TYPERR R4RHRRR5RRRtkeysRgtATTACHMENT_FIELDR7R<( RtarchiveR>tentriestentRstmtypeR~RDRER theader((s7/usr/lib/python2.7/site-packages/cloudinit/user_data.pyR;ýs@!       cCs‘t|krd|tt|tt|ƒƒnd}yt|jtƒƒ}Wn-ttfk rŒt|tt|ƒƒnX|S(s Return the number of attachments to this MIMEMultipart by looking at its 'Number-Attachments' header. t0iN(RŒR'R RRNRIRORP(Rt outer_msgt new_countt fetched_count((s7/usr/lib/python2.7/site-packages/cloudinit/user_data.pyt_multi_part_count,s   cCsH|j|ƒ}|j||dƒ|j|ƒ|j||dƒdS(s¸ Attach a message to an outer message. outermsg must be a MIMEMultipart. Modifies a header in the outer message to keep track of number of attachments. iN(R–Ratattach(RR“R?t part_count((s7/usr/lib/python2.7/site-packages/cloudinit/user_data.pyR<>s N( t__name__t __module__RRRRSR^RaR9R;R'R–R<(((s7/usr/lib/python2.7/site-packages/cloudinit/user_data.pyRJs  I    : / cCs,|jƒpd}|jƒdkr(tStS(NR€t multipart(tget_content_maintypeRgR-R*(R?t part_maintype((s7/usr/lib/python2.7/site-packages/cloudinit/user_data.pyR&JscCsž|sd}nd„}t|tjƒr<|jdƒ}n|}tj|dtƒ}d|dd!jƒkr‹tj|j dƒƒ}n|||ƒ}|S(sJconvert a string (more likely bytes) or a message into a mime message.R€cSs8|jddƒ\}}t||ƒ}|j|ƒ|S(NR$i(R4RR5(RUt content_typeRDRER ((s7/usr/lib/python2.7/site-packages/cloudinit/user_data.pyt create_binmsgYs sutf-8RHs mime-version:ii( RR…t text_typetencodeRR,R*Rgtmessage_from_stringRH(traw_dataRžRŸtbdataR ((s7/usr/lib/python2.7/site-packages/cloudinit/user_data.pyRSs  ((RXtemail.mime.baseRtemail.mime.multipartRtemail.mime.nonmultipartRtemail.mime.textRR…t cloudinitRRtloggingtcloudinit.url_helperRRRt getLoggerR™R/tNOT_MULTIPART_TYPER_t OCTET_TYPER7R3R8R:R2RˆRŠR+RŒRJR RtobjectRR&R(((s7/usr/lib/python2.7/site-packages/cloudinit/user_data.pyt sH            ÿ