Edit File: _parseaddr.cpython-36.opt-1.pyc
3 48e�D������������������@���s����d�Z�ddddgZddlZddlZdZdZd Zd ddd dddddddddddddddddddd gZd!d"d#d$d%d&d'gZddddd9d:d;d<d=d>d?d@dAdBd.�Z d/d��Z d0d1��Zd2d��Zd3d��Z d4d��ZG�d5d6��d6�ZG�d7d8��d8e�ZdS�)CzcEmail address parsing code. Lifted directly from rfc822.py. This should eventually be rewritten. � mktime_tz� parsedate�parsedate_tz�quote�����N� ��z, ZjanZfebZmarZaprZmayZjunZjulZaug�sep�octZnovZdecZjanuaryZfebruaryZmarchZaprilZjuneZjulyZaugustZ septemberZoctoberZnovemberZdecemberZmonZtueZwedZthuZfriZsatZsuni���i,��i���iX��i���i ��)ZUTZUTCZGMT�ZZASTZADTZESTZEDTZCSTZCDTZMSTZMDTZPSTZPDTc�������������C���s,���t�|��}|sdS�|d�dkr$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.6/email/_parseaddr.pyr���-���s����c�������������C���s���|�sdS�|�j���}�|�d�jd�s.|�d�j��tkr6|�d=�n.|�d�jd�}|dkrd|�d�|d�d��|�d<�t|��dkr�|�d�j�d�}t|�dkr�||�dd���}�t|��dk�r�|�d�}|jd�}|dkr�|jd�}|dkr�|d|��||d��g|�dd�<�n |�jd ��t|��d k��rdS�|�dd ��}�|�\}}}}}|j��}|tk�rZ||j���}}|tk�rZdS�tj |�d�}|dk�rz|d8�}|d�dk�r�|dd��}|jd�}|dk�r�||�}}|d�dk�r�|dd��}|d�j ���s�||�}}|d�dk�r�|dd��}|j�d�}t|�d k�r$|\} } d}n~t|�dk�r>|\} } }ndt|�dk�r�d|d�k�r�|d�j�d�}t|�d k�r�|\} } d}nt|�dk�r�|\} } }ndS�y,t|�}t|�}t| �} t| �} t|�}W�n�tk �r����dS�X�|dk��r|dk�r|d7�}n|d7�}d}|j ��}|tk�r,t|�}n>yt|�}W�n�tk �rN���Y�nX�|dk�rj|jd��rjd}|�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���<������r!���r!���r!���r!���r!���r!���r!���r!���)�split�endswith�lower� _daynames�rfind�len�find�append�_monthnames�index�isdigit�int� ValueError�upper� _timezones� startswith)r����iZstuff�sZddZmmZyyZtmZtzZthhZtmmZtssZtzoffsetZtzsignr���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���� c�������������C���s<���|�d�dkr"t�j|�dd��d��S�tj|��}||�d��S�dS�)zETurn a 10-tuple as returned by parsedate_tz() into a POSIX timestamp.r���N����r���r!���)r!���)�timeZmktime�calendarZtimegm)r���r5���r���r���r���r�������s���� c�������������C���s���|�j�dd�j�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����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�|�_|�jjdd�|�_||�_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)�selfrD���r���r���r����__init__����s����zAddrlistClass.__init__c�������������C���s����g�}x�|�j�t|�j�k�r�|�j|�j��|�jd�kr^|�j|�j��dkrN|j|�j|�j����|��j�d7��_�q|�j|�j��dkr�|�jj|�j����qP�qW�tj|�S�)z&Skip white space and extract comments.z r����() r?���r'���rD���r@���r)���rE���� getcomment�EMPTYSTRING�join)rF���Zwslistr���r���r����gotonext����s����zAddrlistClass.gotonextc�������������C���s>���g�}x4|�j�t|�j�k�r8|�j��}|r,||7�}q|jd��qW�|S�)zVParse all addresses. Returns a list containing all of the addresses. r���)r���r���)r?���r'���rD���� getaddressr)���)rF����resultZadr���r���r����getaddrlist����s���� zAddrlistClass.getaddrlistc�������������C���s���g�|�_�|�j���|�j}|�j�}|�j��}|�j���g�}|�jt|�j�kr\|rXtj|�j��|d�fg}�n\|�j|�j�dkr�||�_||�_�|�j��}tj|�j��|fg}�n"|�j|�j�dk�rg�}t|�j�}|��jd7��_x�|�jt|�j�k��r|�j���|�j|k�o�|�j|�j�dk�r|��jd7��_P�||�j ���}q�W�n�|�j|�j�dk�rx|�j ��}|�j��rftj|�d�dj|�j���d �|fg}ntj|�|fg}n@|�r�tj|�j��|d�fg}n"|�j|�j�|�jk�r�|��jd7��_|�j���|�jt|�j�k��r�|�j|�j�d k�r�|��jd7��_|S�)zParse the next address.r���z.@r���r����;�<z (r����)r���)rE���rL���r?���� getphraselistr'���rD����SPACErK����getaddrspecrM����getrouteaddrr>���)rF���ZoldposZoldcl�plistZ returnlistZaddrspecZfieldlenZ routeaddrr���r���r���rM�����sL���� &$zAddrlistClass.getaddressc�������������C���s����|�j�|�j�dkrdS�d}|��jd7��_|�j���d}x�|�jt|�j��k�r�|rV|�j���d}n~|�j�|�j�dkrx|��jd7��_P�n\|�j�|�j�dkr�|��jd7��_d}n8|�j�|�j�d kr�|��jd7��_n|�j��}|��jd7��_P�|�j���q4W�|S�) z�Parse a route address (Return-path value). This method just skips all the route stuff and returns the addrspec. rQ���NFr���r����>�@Tr���)rD���r?���rL���r'���� getdomainrU���)rF���ZexpectrouteZadlistr���r���r���rV���?��s.����zAddrlistClass.getrouteaddrc�������������C���s\��g�}|�j����x�|�jt|�j�k�r�d}|�j|�j�dkrj|rL|d�j���rL|j���|jd��|��jd7��_d}nf|�j|�j�dkr�|jdt|�j������n>|�j|�j�|�j kr�|r�|d �j���r�|j���P�n|j|�j ����|�j���}|r|r|j|��qW�|�jt|�j�k�s|�j|�j�dk�rtj|�S�|jd��|��jd7��_|�j����|�j ��}|�sNtS�tj|�|�S�) zParse an RFC 2822 addr-spec.Tr���r���Fr:���z"%s"rY���r!���r!���)rL���r?���r'���rD����strip�popr)���r����getquoterB����getatomrJ���rK���rZ���)rF���ZaslistZpreserve_wsZwsZdomainr���r���r���rU���_��s:���� $ zAddrlistClass.getaddrspecc�������������C���s����g�}x�|�j�t|�j�k�r�|�j|�j��|�jkr8|��j�d7��_�q|�j|�j��dkrZ|�jj|�j����q|�j|�j��dkrz|j|�j����q|�j|�j��dkr�|��j�d7��_�|jd��q|�j|�j��dkr�tS�|�j|�j��|�j kr�P�q|j|�j ����qW�tj|�S�)z-Get the complete domain name from an address.r���rH����[r���rY���)r?���r'���rD���r@���rE���r)���rI����getdomainliteralrJ���rB���r^���rK���)rF���Zsdlistr���r���r���rZ������s"����zAddrlistClass.getdomainTc�������������C���s����|�j�|�j�|krdS�dg}d}|��jd7��_x�|�jt|�j��k�r�|rZ|j|�j�|�j���d}np|�j�|�j�|kr||��jd7��_P�nN|r�|�j�|�j�dkr�|j|�j����q.n(|�j�|�j�dkr�d}n|j|�j�|�j���|��jd7��_q.W�tj|�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���rH���r9���T)rD���r?���r'���r)���rI���rJ���rK���)rF���Z begincharZendcharsZ allowcommentsZslistr���r���r���r����getdelimited���s(���� zAddrlistClass.getdelimitedc�������������C���s���|�j�ddd�S�)z1Get a quote-delimited fragment from self's field.r:���z" F)ra���)rF���r���r���r���r]������s����zAddrlistClass.getquotec�������������C���s���|�j�ddd�S�)z7Get a parenthesis-delimited fragment from self's field.rH���z) T)ra���)rF���r���r���r���rI������s����zAddrlistClass.getcommentc�������������C���s���d|�j�ddd��S�)z!Parse an RFC 2822 domain-literal.z[%s]r_���z] F)ra���)rF���r���r���r���r`������s����zAddrlistClass.getdomainliteralNc�������������C���sh���dg}|dkr|�j�}xH|�jt|�j�k�r\|�j|�j�|kr:P�n|j|�j|�j���|��jd7��_qW�tj|�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���)rB���r?���r'���rD���r)���rJ���rK���)rF���rB���Zatomlistr���r���r���r^������s����zAddrlistClass.getatomc�������������C���s����g�}x�|�j�t|�j�k�r�|�j|�j��|�jkr8|��j�d7��_�q|�j|�j��dkrX|j|�j����q|�j|�j��dkrz|�jj|�j����q|�j|�j��|�jkr�P�q|j|�j |�j���qW�|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:���rH���) r?���r'���rD���rA���r)���r]���rE���rI���rC���r^���)rF���rW���r���r���r���rS������s����zAddrlistClass.getphraselist)T)N)�__name__� __module__�__qualname__�__doc__rG���rL���rO���rM���rV���rU���rZ���ra���r]���rI���r`���r^���rS���r���r���r���r���r=�������s���; & % r=���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�j|�|��|r|�j��|�_ng�|�_d�S�)N)r=���rG���rO����addresslist)rF���rD���r���r���r���rG������s����zAddressList.__init__c�������������C���s ���t�|�j�S�)N)r'���rg���)rF���r���r���r����__len__��s����zAddressList.__len__c�������������C���sB���t�d��}|�jd�d���|_x$|jD�]}||�jkr |jj|��q W�|S�)N)rf���rg���r)���)rF����other�newaddr�xr���r���r����__add__��s���� zAddressList.__add__c�������������C���s*���x$|j�D�]}||�j�kr|�j�j|��qW�|�S�)N)rg���r)���)rF���ri���rk���r���r���r����__iadd__ ��s���� zAddressList.__iadd__c�������������C���s2���t�d��}x$|�jD�]}||jkr|jj|��qW�|S�)N)rf���rg���r)���)rF���ri���rj���rk���r���r���r����__sub__��s ���� zAddressList.__sub__c�������������C���s*���x$|j�D�]}||�j�kr|�j�j|��qW�|�S�)N)rg����remove)rF���ri���rk���r���r���r����__isub__��s���� zAddressList.__isub__c�������������C���s ���|�j�|�S�)N)rg���)rF���r+���r���r���r����__getitem__#��s����zAddressList.__getitem__N)rb���rc���rd���re���rG���rh���rl���rm���rn���rp���rq���r���r���r���r���rf������s��� rf���ip���i���i���ip���i����i���iD���i����i��iD���)re����__all__r7���r8���rT���rJ���Z COMMASPACEr*���r%���r0���r���r���r���r���r���r=���rf���r���r���r���r����<module>���s8��� u ��/