관리-도구
편집 파일: _parseaddr.cpython-39.pyc
a �����DOg:E����������������������@���s����d�Z�g�d�ZddlZddlZdZdZdZg�d�Zg�d�Zddddd d dd ddd ddd d�Z dd��Z dd��Zdd��Zdd��Z dd��ZG�dd��d�ZG�dd��de�ZdS�)zcEmail address parsing code. Lifted directly from rfc822.py. This should eventually be rewritten. )� mktime_tz� parsedate�parsedate_tz�quote�����N� ��z, )ZjanZfebZmarZapr�mayZjunZjulZaug�sep�octZnovZdecZjanuaryZfebruaryZmarchZaprilr���ZjuneZjulyZaugustZ septemberZoctoberZnovemberZdecember)ZmonZtueZwedZthuZfriZsatZsunip���i���i���i����iD���i��)ZUTZUTCZGMT�ZZASTZADTZESTZEDTZCSTZCDTZMSTZMDTZPSTZPDTc�����������������C���s,���t�|��}|sdS�|d�du�r$d|d<�t|�S�)zQConvert a date string to a time tuple. Accounts for military timezones. N� ���r���)� _parsedate_tz�tuple)�data�res��r����(/usr/lib64/python3.9/email/_parseaddr.pyr���-���s����r���c�������������� ���C���s���|�sdS�|�����}�|�sdS�|�d��d�s6|�d����tv�r>|�d=�n.|�d��d�}|dkrl|�d�|d�d��|�d<�t|��dkr�|�d���d�}t|�dkr�||�dd���}�t|��dk�r|�d�}|�d�}|d kr�|�d�}|dkr�|d|��||d��g|�dd�<�n |��d ��t|��dk��rdS�|�dd��}�|�\}}}}}|���}|tv�rb||����}}|tv�rbdS�t� |�d�}|dk�r�|d8�}|d �dk�r�|dd ��}|�d �}|dk�r�||�}}|d �dk�r�|dd ��}|d�� ���s�||�}}|d �dk�r|dd ��}|��d �}t|�dk�r,|\} } d}n�t|�dk�rF|\} } }njt|�dk�r�d|d�v��r�|d���d�}t|�dk�r�|\} } d}nt|�dk�r�|\} } }ndS�ndS�z,t|�}t|�}t| �} t| �} t|�}W�n�t�y����Y�dS�0�|dk��r|dk�r|d7�}n|d7�}d}|� ��}|tv��r:t|�}n<zt|�}W�n�t�yZ���Y�n0�|dk�rv|�d��rvd}|�r�|dk��r�d } |�}nd} | |d�d�|d�d���}|||| | |ddd |g S�)a���Convert date to extended time tuple. The last (additional) element is the time zone offset in seconds, except if the timezone was specified as -0000. In that case the last element is None. This indicates a UTC timestamp that explicitly declaims knowledge of the source timezone, as opposed to a +0000 timestamp that indicates the source timezone really was UTC. Nr����,���������-�����+���r������������:�����0�.�d����D���il��i���i���<���)�split�endswith�lower� _daynames�rfind�len�find�append�_monthnames�index�isdigit�int� ValueError�upper� _timezones� startswith)r����i�stuff�s�ddZmmZyyZtmZtzZthhZtmmZtssZtzoffsetZtzsignr���r���r���r ���9���s����� " r ���c�����������������C���s&���t�|��}t|t�r|dd��S�|S�dS�)z&Convert a time string to a time tuple.Nr���)r���� isinstancer����r����tr���r���r���r�������s���� r���c�����������������C���s<���|�d�du�r"t��|�dd��d��S�t�|��}||�d��S�dS�)zETurn a 10-tuple as returned by parsedate_tz() into a POSIX timestamp.r���N����)r���)�time�mktime�calendarZtimegmr8���r���r���r���r�������s���� r���c�����������������C���s���|���dd���dd�S�)z�Prepare string to be used in a quoted string. Turns backslash and double quote characters into quoted pairs. These are the only characters that need to be quoted inside a quoted string. Does not add the surrounding double quotes. �\z\\�"z\")�replace)�strr���r���r���r�������s����r���c�������������������@���s|���e�Zd�ZdZdd��Zdd��Zdd��Zdd ��Zd d��Zdd ��Z dd��Z ddd�Zdd��Zdd��Z dd��Zddd�Zdd��ZdS�) � AddrlistClassa��Address parser class by Ben Escoto. To understand what this class does, it helps to have a copy of RFC 2822 in front of you. Note: this class interface is deprecated and may be removed in the future. Use email.utils.AddressList instead. c�����������������C���sZ���d|�_�d|�_d|�_d|�_|�j|�j�|�_|�j�|�j�|�j�|�_|�j�dd�|�_||�_g�|�_ dS�)z�Initialize a new instance. `field' is an unparsed address header field, containing one or more addresses. z()<>@,:;."[]r���z z r���r���N) �specials�pos�LWSZCR�FWS�atomendsr@���� phraseends�field�commentlist��selfrI���r���r���r����__init__����s����zAddrlistClass.__init__c�����������������C���s����g�}|�j�t|�j�k�r�|�j|�j��|�jd�v�r\|�j|�j��dvrL|�|�j|�j����|��j�d7��_�q|�j|�j��dkr�|�j�|������qq�qt�|�S�)z&Skip white space and extract comments.z r����() rD���r(���rI���rE���r*���rJ���� getcomment�EMPTYSTRING�join)rL���Zwslistr���r���r����gotonext����s����zAddrlistClass.gotonextc�����������������C���s:���g�}|�j�t|�j�k�r6|����}|r*||7�}q|�d��q|S�)zVParse all addresses. Returns a list containing all of the addresses. )r���r���)rD���r(���rI���� getaddressr*���)rL����resultZadr���r���r����getaddrlist����s���� zAddrlistClass.getaddrlistc�����������������C���s���g�|�_�|�����|�j}|�j�}|����}|�����g�}|�jt|�j�kr\|rXt�|�j��|d�fg}�n\|�j|�j�dv�r�||�_||�_�|����}t�|�j��|fg}�n"|�j|�j�dk�rg�}t|�j�}|��jd7��_|�jt|�j�k��r�|�����|�j|k��r|�j|�j�dk�r|��jd7��_�q�||�� ���}q�n�|�j|�j�dk�rx|�� ��}|�j��rft�|�d�d�|�j���d �|fg}nt�|�|fg}n@|�r�t�|�j��|d�fg}n"|�j|�j�|�jv��r�|��jd7��_|�����|�jt|�j�k��r�|�j|�j�d k�r�|��jd7��_|S�)zParse the next address.r���z.@r���r����;�<z (r����)r���)rJ���rR���rD���� getphraselistr(���rI����SPACErQ����getaddrspecrS����getrouteaddrrC���)rL���ZoldposZoldcl�plistZ returnlistZaddrspecZfieldlenZ routeaddrr���r���r���rS�����sX���� ���$zAddrlistClass.getaddressc�����������������C���s����|�j�|�j�dkrdS�d}|��jd7��_|�����d}|�jt|�j��k�r�|rT|�����d}n~|�j�|�j�dkrv|��jd7��_q�n\|�j�|�j�dkr�|��jd7��_d}n8|�j�|�j�d kr�|��jd7��_n|����}|��jd7��_q�|�����q2|S�) z�Parse a route address (Return-path value). This method just skips all the route stuff and returns the addrspec. rW���NFr���r����>�@Tr���)rI���rD���rR���r(���� getdomainr[���)rL���ZexpectrouteZadlistr���r���r���r\���C��s.���� zAddrlistClass.getrouteaddrc�����������������C���sT��g�}|������|�jt|�j�k�r�d}|�j|�j�dkrf|rH|d����sH|����|�d��|��jd7��_d}nd|�j|�j�dkr�|�dt|��������n<|�j|�j�|�j v�r�|r�|d����s�|����q�n|�|�� ����|�����}|r|r|�|��q|�jt|�j�k�s |�j|�j�dk�rt�|�S�|�d��|��jd7��_|������|�� ��}|�sFtS�t�|�|�S�) zParse an RFC 2822 addr-spec.Tr���r���r���Fr?���z"%s"r_���)rR���rD���r(���rI����strip�popr*���r����getquoterG����getatomrP���rQ���r`���)rL���ZaslistZpreserve_ws�ws�domainr���r���r���r[���c��s:���� $ zAddrlistClass.getaddrspecc�����������������C���s����g�}|�j�t|�j�k�r�|�j|�j��|�jv�r6|��j�d7��_�q|�j|�j��dkrX|�j�|������q|�j|�j��dkrx|�|������q|�j|�j��dkr�|��j�d7��_�|�d��q|�j|�j��dkr�tS�|�j|�j��|�j v�r�q�q|�|�� ����qt�|�S�)z-Get the complete domain name from an address.r���rN����[r���r_���)rD���r(���rI���rE���rJ���r*���rO����getdomainliteralrP���rG���rd���rQ���)rL���Zsdlistr���r���r���r`������s"����zAddrlistClass.getdomainTc�����������������C���s����|�j�|�j�|krdS�dg}d}|��jd7��_|�jt|�j��k�r�|rX|�|�j�|�j���d}np|�j�|�j�|v�rz|��jd7��_q�nN|r�|�j�|�j�dkr�|�|������q,n(|�j�|�j�dkr�d}n|�|�j�|�j���|��jd7��_q,t�|�S�)a���Parse a header fragment delimited by special characters. `beginchar' is the start character for the fragment. If self is not looking at an instance of `beginchar' then getdelimited returns the empty string. `endchars' is a sequence of allowable end-delimiting characters. Parsing stops when one of these is encountered. If `allowcomments' is non-zero, embedded RFC 2822 comments are allowed within the parsed fragment. r���Fr���rN���r>���T)rI���rD���r(���r*���rO���rP���rQ���)rL���Z begincharZendcharsZ allowcommentsZslistr���r���r���r����getdelimited���s(���� zAddrlistClass.getdelimitedc�����������������C���s���|���ddd�S�)z1Get a quote-delimited fragment from self's field.r?���z" F�ri����rL���r���r���r���rc������s����zAddrlistClass.getquotec�����������������C���s���|���ddd�S�)z7Get a parenthesis-delimited fragment from self's field.rN���z) Trj���rk���r���r���r���rO������s����zAddrlistClass.getcommentc�����������������C���s���d|���ddd��S�)z!Parse an RFC 2822 domain-literal.z[%s]rg���z] Frj���rk���r���r���r���rh������s����zAddrlistClass.getdomainliteralNc�����������������C���sd���dg}|du�r|�j�}|�jt|�j�k�rZ|�j|�j�|v�r8qZn|�|�j|�j���|��jd7��_qt�|�S�)a��Parse an RFC 2822 atom. Optional atomends specifies a different set of end token delimiters (the default is to use self.atomends). This is used e.g. in getphraselist() since phrase endings must not include the `.' (which is legal in phrases).r���Nr���)rG���rD���r(���rI���r*���rP���rQ���)rL���rG���Zatomlistr���r���r���rd������s����zAddrlistClass.getatomc�����������������C���s����g�}|�j�t|�j�k�r�|�j|�j��|�jv�r6|��j�d7��_�q|�j|�j��dkrV|�|������q|�j|�j��dkrx|�j�|������q|�j|�j��|�jv�r�q�q|�|�� |�j���q|S�)z�Parse a sequence of RFC 2822 phrases. A phrase is a sequence of words, which are in turn either RFC 2822 atoms or quoted-strings. Phrases are canonicalized by squeezing all runs of continuous whitespace into one space. r���r?���rN���) rD���r(���rI���rF���r*���rc���rJ���rO���rH���rd���)rL���r]���r���r���r���rY������s����zAddrlistClass.getphraselist)T)N)�__name__� __module__�__qualname__�__doc__rM���rR���rU���rS���r\���r[���r`���ri���rc���rO���rh���rd���rY���r���r���r���r���rB�������s��� ; & % rB���c�������������������@���sH���e�Zd�ZdZdd��Zdd��Zdd��Zdd ��Zd d��Zdd ��Z dd��Z dS�)�AddressListz@An AddressList encapsulates a list of parsed RFC 2822 addresses.c�����������������C���s&���t��|�|��|r|����|�_ng�|�_d�S��N)rB���rM���rU����addresslistrK���r���r���r���rM������s����zAddressList.__init__c�����������������C���s ���t�|�j�S�rq���)r(���rr���rk���r���r���r����__len__��s����zAddressList.__len__c�����������������C���s>���t�d��}|�jd�d���|_|jD�]}||�jvr|j�|��q|S�rq����rp���rr���r*����rL����otherZnewaddr�xr���r���r����__add__��s���� zAddressList.__add__c�����������������C���s&���|j�D�]}||�j�vr|�j��|��q|�S�rq���)rr���r*����rL���rv���rw���r���r���r����__iadd__��s���� zAddressList.__iadd__c�����������������C���s.���t�d��}|�jD�]}||jvr|j�|��q|S�rq���rt���ru���r���r���r����__sub__��s ���� zAddressList.__sub__c�����������������C���s&���|j�D�]}||�j�v�r|�j��|��q|�S�rq���)rr����removery���r���r���r����__isub__ ��s���� zAddressList.__isub__c�����������������C���s ���|�j�|�S�rq���)rr���)rL���r,���r���r���r����__getitem__'��s����zAddressList.__getitem__N)rl���rm���rn���ro���rM���rs���rx���rz���r{���r}���r~���r���r���r���r���rp������s��� rp���)ro����__all__r;���r=���rZ���rP���Z COMMASPACEr+���r&���r1���r���r ���r���r���r���rB���rp���r���r���r���r����<module>���s.���� y ��/