3 \O@sfddlmZddlmZddlmZddlmZGdddZGdddZGd d d e Z d d Z Gd ddZ Gddde Z GdddZGdddeZGdddZGdddeZGdddeZGdddeZGdddZGdd d ZGd!d"d"eZGd#d$d$eZGd%d&d&Ze eeeeeeeeeeeeeeeeeed'ZGd(d)d)Zd*S)+)MappingProxyType)utils)errors)_header_value_parserc@s^eZdZdddZeddZeddZed d Zed d Zd dZ ddZ ddZ dS)AddressNcCsl|dk rV|s|rtdtj|\}}|r:tdj|||jrJ|jd|j}|j}||_||_ ||_ dS)Nz=addrspec specified when username and/or domain also specifiedz6Invalid addr_spec; only '{}' could be parsed from '{}'r) TypeErrorparserZ get_addr_spec ValueErrorformat all_defects local_partdomain _display_name _username_domain)self display_nameusernamer addr_specZa_srestr,/usr/lib64/python3.6/email/headerregistry.py__init__s  zAddress.__init__cCs|jS)N)r)rrrrr7szAddress.display_namecCs|jS)N)r)rrrrr;szAddress.usernamecCs|jS)N)r)rrrrr?szAddress.domaincCsTt|j}t|t|tjkr.tj|j}n|j}|jrH|d|jS|sPdS|S)N@z<>)setrlenr Z DOT_ATOM_ENDS quote_stringr)rnamesetZlprrrrCs zAddress.addr_speccCsdj|jj|j|j|jS)Nz1{}(display_name={!r}, username={!r}, domain={!r}))r __class____name__rrr)rrrr__repr__SszAddress.__repr__cCs^t|j}t|t|tjkr.tj|j}n|j}|rX|jdkrFdn|j}dj||S|jS)Nz<>rz{} <{}>)rrrr SPECIALSrrr )rrdisprrrr__str__Xs  zAddress.__str__cCs8t|t|krdS|j|jko6|j|jko6|j|jkS)NF)typerrr)rotherrrr__eq__cs   zAddress.__eq__)rrrN) r __module__ __qualname__rpropertyrrrrr!r$r'rrrrrs %     rc@sFeZdZdddZeddZeddZdd Zd d Zd d Z dS)GroupNcCs||_|rt|nt|_dS)N)rtuple _addresses)rr addressesrrrrmszGroup.__init__cCs|jS)N)r)rrrrrszGroup.display_namecCs|jS)N)r-)rrrrr.szGroup.addressescCsdj|jj|j|jS)Nz${}(display_name={!r}, addresses={!r})r rr rr.)rrrrr!szGroup.__repr__cCs|jdkr&t|jdkr&t|jdS|j}|dk r\t|}t|t|tjkr\tj|}djdd|jD}|r~d|n|}dj ||S)Nrz, css|]}t|VqdS)N)str).0xrrr sz Group.__str__.. z{}:{};) rrr.r0rr r"rjoinr )rr#rZadrstrrrrr$s z Group.__str__cCs,t|t|krdS|j|jko*|j|jkS)NF)r%rr.)rr&rrrr's z Group.__eq__)NN) r r(r)rr*rr.r!r$r'rrrrr+ks     r+c@sPeZdZddZddZeddZeddZd d Ze d d Z d dZ dS) BaseHeadercCs\dgi}|j||tj|dr4tj|d|d<tj||d}|d=|j|f||S)Ndefectsdecoded)parserZ_has_surrogates _sanitizer0__new__init)clsnamevaluekwdsrrrrr;s zBaseHeader.__new__cCs||_||_||_dS)N)_name _parse_tree_defects)rr> parse_treer7rrrr<szBaseHeader.initcCs|jS)N)rA)rrrrr>szBaseHeader.namecCs t|jS)N)r,rC)rrrrr7szBaseHeader.defectscCst|jj|jjt|f|jfS)N)_reconstruct_headerrr __bases__r0__dict__)rrrr __reduce__s zBaseHeader.__reduce__cCs tj||S)N)r0r;)r=r?rrr _reconstructszBaseHeader._reconstructcCs`tjtjtj|jdtjddgg}|jrH|jtjtjddg|j|j|j |dS)Nz header-name:z header-sepr4Zfws)policy) r ZHeaderZ HeaderLabelZ ValueTerminalr>rBappendZCFWSListZWhiteSpaceTerminalfold)rrKheaderrrrrMs  zBaseHeader.foldN) r r(r)r;r<r*r>r7rH classmethodrIrMrrrrr6s"    r6cCst||ij|S)N)r%rI)Zcls_namebasesr?rrrrEsrEc@s&eZdZdZeejZeddZ dS)UnstructuredHeaderNcCs"|j||d<t|d|d<dS)NrDr8) value_parserr0)r=r?r@rrrr9szUnstructuredHeader.parse) r r(r) max_count staticmethodr get_unstructuredrRrOr9rrrrrQ s rQc@seZdZdZdS)UniqueUnstructuredHeaderr/N)r r(r)rSrrrrrVsrVcsBeZdZdZeejZeddZ fddZ e ddZ Z S) DateHeaderNcCsz|s6|djtjd|d<d|d<tj|d<dSt|trJtj|}||d<tj |d|d<|j |d|d<dS)Nr7datetimerr8rD) rLrZHeaderMissingRequiredValuer Z TokenList isinstancer0rZparsedate_to_datetimeZformat_datetimerR)r=r?r@rrrr9)s   zDateHeader.parsecs|jd|_tj||dS)NrX)pop _datetimesuperr<)rargskw)rrrr<7s zDateHeader.initcCs|jS)N)r[)rrrrrX;szDateHeader.datetime)r r(r)rSrTr rUrRrOr9r<r*rX __classcell__rr)rrrWs     rWc@seZdZdZdS)UniqueDateHeaderr/N)r r(r)rSrrrrr`@sr`csPeZdZdZeddZeddZfddZe dd Z e d d Z Z S) AddressHeaderNcCstj|\}}|S)N)r Zget_address_list)r? address_listrrrrRIszAddressHeader.value_parsercCst|trZ|j||d<}g}x,|jD]"}|jt|jdd|jDq(Wt|j }n"t |dsj|g}dd|D}g}||d<||d<dj d d|D|d <d|kr|j|d |d<dS) NrDcSs*g|]"}t|jpd|jpd|jp"dqS)r)rrr r)r1Zmbrrr Xsz'AddressHeader.parse..__iter__cSs&g|]}t|dstd|gn|qS)r.N)hasattrr+)r1itemrrrrcasgroupsr7z, cSsg|] }t|qSr)r0)r1rfrrrrcgsr8) rYr0rRr.rLr+rZ all_mailboxeslistr rer5)r=r?r@rbrgZaddrr7rrrr9Os$     zAddressHeader.parsecs(t|jd|_d|_tj||dS)Nrg)r,rZ_groupsr-r\r<)rr]r^)rrrr<kszAddressHeader.initcCs|jS)N)ri)rrrrrgpszAddressHeader.groupscCs&|jdkr tdd|jD|_|jS)NcSsg|]}|jD]}|qqSr)r.)r1groupaddressrrrrcwsz+AddressHeader.addresses..)r-r,ri)rrrrr.ts zAddressHeader.addresses) r r(r)rSrTrRrOr9r<r*rgr.r_rr)rrraEs     rac@seZdZdZdS)UniqueAddressHeaderr/N)r r(r)rSrrrrrl|srlc@seZdZeddZdS)SingleAddressHeadercCs(t|jdkrtdj|j|jdS)Nr/z9value of single address header {} is not a single addressr)rr.r r r>)rrrrrks zSingleAddressHeader.addressN)r r(r)r*rkrrrrrmsrmc@seZdZdZdS)UniqueSingleAddressHeaderr/N)r r(r)rSrrrrrnsrncsZeZdZdZeejZeddZ fddZ e ddZ e dd Z e d d ZZS) MIMEVersionHeaderr/cCs|j||d<}t||d<|dj|j|jdkrr?rrr sz1ParameterizedMIMEHeader.parse..)rRr0rsr rx)r=r?r@rDrrrr9s   zParameterizedMIMEHeader.parsecs|jd|_tj||dS)Nrx)rZ_paramsr\r<)rr]r^)rrrr<s zParameterizedMIMEHeader.initcCs t|jS)N)rr{)rrrrrxszParameterizedMIMEHeader.params) r r(r)rSrOr9r<r*rxr_rr)rrrws rwcsJeZdZeejZfddZeddZ eddZ eddZ Z S) ContentTypeHeadercs2tj||tj|jj|_tj|jj|_dS)N) r\r<rr:rBmaintype _maintypesubtype_subtype)rr]r^)rrrr<szContentTypeHeader.initcCs|jS)N)r~)rrrrr}szContentTypeHeader.maintypecCs|jS)N)r)rrrrrszContentTypeHeader.subtypecCs|jd|jS)N/)r}r)rrrr content_typeszContentTypeHeader.content_type) r r(r)rTr Zparse_content_type_headerrRr<r*r}rrr_rr)rrr|s     r|cs2eZdZeejZfddZeddZ Z S)ContentDispositionHeadercs2tj|||jj}|dkr"|ntj||_dS)N)r\r<rBcontent_dispositionrr:_content_disposition)rr]r^Zcd)rrrr<szContentDispositionHeader.initcCs|jS)N)r)rrrrrsz,ContentDispositionHeader.content_disposition) r r(r)rTr Z parse_content_disposition_headerrRr<r*rr_rr)rrrs  rcsBeZdZdZeejZeddZ fddZ e ddZ Z S)ContentTransferEncodingHeaderr/cCs2|j||d<}t||d<|dj|jdS)NrDr8r7)rRr0rsr )r=r?r@rDrrrr9s z#ContentTransferEncodingHeader.parsecs"tj||tj|jj|_dS)N)r\r<rr:rBcte_cte)rr]r^)rrrr<sz"ContentTransferEncodingHeader.initcCs|jS)N)r)rrrrrsz!ContentTransferEncodingHeader.cte)r r(r)rSrTr Z&parse_content_transfer_encoding_headerrRrOr9r<r*rr_rr)rrrs    r)ZsubjectZdatez resent-datez orig-dateZsenderz resent-senderZtoz resent-toZccz resent-ccZbccz resent-bccfromz resent-fromzreply-toz mime-versionz content-typezcontent-dispositionzcontent-transfer-encodingc@s4eZdZeedfddZddZddZdd Zd S) HeaderRegistryTcCs&i|_||_||_|r"|jjtdS)N)registry base_class default_classupdate_default_header_map)rrrZuse_default_maprrrr's zHeaderRegistry.__init__cCs||j|j<dS)N)rry)rr>r=rrr map_to_type9szHeaderRegistry.map_to_typecCs,|jj|j|j}td|j||jfiS)N_)rgetryrr%r r)rr>r=rrr __getitem__?szHeaderRegistry.__getitem__cCs||||S)Nr)rr>r?rrr__call__Cs zHeaderRegistry.__call__N) r r(r)r6rQrrrrrrrrr#s  rN)typesrZemailrrrr rr+r0r6rErQrVrWr`rarlrmrnrorwr|rrrrrrrr sP    [6d '7 %