관리-도구
편집 파일: nntplib.cpython-39.opt-2.pyc
a �����DOg?�������������������� ���@���s:��d�dl�Z�d�dlZd�dlZd�dlZd�dlZzd�dlZW�n�eyJ���dZY�n0�dZd�dlm Z �d�dlmZ�g�d�ZdZ G�dd ��d e�ZG�d d��de�ZG�dd ��d e�ZG�dd��de�ZG�dd��de�ZG�dd��de�ZdZdZh�d�Zg�d�Zddd�ZdZe�dg�d��Ze�dg�d��Zd d!��Z d"d#��ZdYd$d%�ZdZd&d'�Z d[d(d)�Z!e�rVd*d+��Z"G�d,d-��d-�Z#e�r�G�d.d/��d/e#�Z$e�%d/��e&d0k�r6d�dl'Z'e'j(d1d2�Z)e)j*d3d4d5d6d7��e)j*d8d9d:d;d7��e)j*d<d=d>e+d?eef�d@��e)j*dAdBdCe+dDd@��e)j*dEdFdGddHdI��e)�,��Z-e-j.Z.e-j�s>e.d>k�r.eZ.e#e-j/e.dJ�Z0ne.d>k�rLeZ.e$e-j/e.dJ�Z0e0�1��Z2dKe2v��rte0�3���e0�4e-j4�\Z5Z6Z7Z8Z9e:dLe9dMe6dNe7dOe8��dPdQ��Z;e<e+e8�e-j=�dR��Z7e0�>e7e8�\Z5Z?e?D�]Z\Z@ZAe eAdS���BdTdR�d��ZCe eAdU��ZDe+eAd��ZEe:dV�Fe@e;eCdW�e;eDdX�eE����q�e0�G���dS�)\�����NFT)� decode_header)�_GLOBAL_DEFAULT_TIMEOUT)�NNTP� NNTPError�NNTPReplyError�NNTPTemporaryError�NNTPPermanentError�NNTPProtocolError� NNTPDataErrorr���i���c�������������������@���s���e�Zd�Zdd��ZdS�)r���c�����������������G���s>���t�j|�g|�R����z|d�|�_W�n�ty8���d|�_Y�n0�d�S�)Nr���zNo response given)� Exception�__init__�response� IndexError)�self�args��r����/usr/lib64/python3.9/nntplib.pyr���b���s ����zNNTPError.__init__N)�__name__� __module__�__qualname__r���r���r���r���r���r���`���s���r���c�������������������@���s���e�Zd�ZdS�)r���N�r���r���r���r���r���r���r���r���i���s���r���c�������������������@���s���e�Zd�ZdS�)r���Nr���r���r���r���r���r���m���s���r���c�������������������@���s���e�Zd�ZdS�)r���Nr���r���r���r���r���r���q���s���r���c�������������������@���s���e�Zd�ZdS�)r ���Nr���r���r���r���r���r ���u���s���r ���c�������������������@���s���e�Zd�ZdS�)r ���Nr���r���r���r���r���r ���y���s���r ����w���i3��>���Z100Z222Z101�215Z224�211Z230Z282Z231Z225Z220Z221)�subject�from�datez message-idZ references�:bytes�:linesr���r���)�bytes�lines���� � GroupInfo)�group�last�first�flag�ArticleInfo)�number� message_idr ���c�����������������C���sJ���g�}t�|��D�]2\}}t|t�r4|�|�|p,d���q|�|��qd�|�S�)N�ascii��)�_email_decode_header� isinstancer����append�decode�join)Z header_str�parts�v�encr���r���r���r�������s���� r���c�����������������C���s����g�}|�D�]`}|d�dkr:|dd�����d�\}}}d|�}n|��d�\}}}|���}t�||�}|�|��qt}t|�t|�k�r�td��|d�t|���|kr�td��|S�)Nr����:����z$LIST OVERVIEW.FMT response too shortz*LIST OVERVIEW.FMT redefines default fields)� partition�lower�_OVERVIEW_FMT_ALTERNATIVES�getr.����_DEFAULT_OVERVIEW_FMT�lenr ���)r ����fmt�line�name�_�suffix�defaultsr���r���r����_parse_overview_fmt����s���� rB���c�����������������C���s����t�t�}g�}|�D�]�}i�}|�d�^}}t|�}t|�D�]�\} } | t�|�krLq6|| �}|�d�}| |kr�|s�|d�} | r�| d�t�| ������| kr�td��| r�| t�| �d���nd�} | ||| �<�q6|�||f��q|S�)N� r4���z: z?OVER/XOVER response doesn't include names of additional headers) r;���r:����split�int� enumerate� startswithr7���r ���r.���)r ���r<���Zdata_process_funcZ n_defaultsZoverviewr=����fieldsZarticle_number�tokens�i�token� field_nameZis_metadata�hr���r���r����_parse_overview����s&���� rN���c�����������������C���s����|d�u�r |�dd���}|�d�d��}�t�|d�d���}t�|dd���}t�|dd����}t�|�d�d���}t�|�dd���}t�|�dd����}|dk�r�|d7�}n|dk�r�|d 7�}t�||||||�S�) Ni�������������������F���i����d���il��)rE����datetime)�date_str�time_strZhoursZminutesZseconds�yearZmonthZdayr���r���r����_parse_datetime����s���� rY���c�����������������C���sP���t�|�tj�sd}n d�|��}|�j}|r<|d�}d�||��}nd�||��}||fS�)NZ000000z({0.hour:02d}{0.minute:02d}{0.second:02d}rT���z{0:02d}{1.month:02d}{1.day:02d}z{0:04d}{1.month:02d}{1.day:02d})r-���rU����formatrX���)Zdt�legacyrW����yrV���r���r���r����_unparse_datetime����s���� r]���c�����������������C���s���|d�u�rt����}|j|�|d�S�)N)Zserver_hostname)�sslZ_create_stdlib_contextZwrap_socket)�sock�context�hostnamer���r���r����_encrypt_on��s����rb���c�������������������@���s��e�Zd�ZdZdZeddddefdd�Zdd��Zd d ��Z dd��Z d d��Zdd��Zdd��Z dd��ZeZdd��Zdd��Zdidd�Zdd��Zdjdd�Zd d!��Zdkd"d#�Zdld$d%�Zd&d'��Zd(d)��Zd*d+��Zdd,�d-d.�Zdd,�d/d0�Zdmdd,�d1d2�Zd3d4��Zd5d6��Zd7d8��Z d9d:��Z!dd,�d;d<�Z"d=d>��Z#d?d@��Z$dndAdB�Z%dCdD��Z&dEdF��Z'dodGdH�Z(dpdd,�dIdJ�Z)dqdd,�dKdL�Z*drdd,�dMdN�Z+dOdP��Z,dd,�dQdR�Z-dd,�dSdT�Z.dd,�dUdV�Z/dWdX��Z0dYdZ��Z1d[d\��Z2d]d^��Z3d_d`��Z4dadb��Z5dsdcdd�Z6dedf��Z7e8�rdtdgdh�Z9dS�)ur���zutf-8�surrogateescapeNFc�����������������C���s~���||�_�||�_|��|�|�_d�|�_z2|�j�d�|�_|��|��|s@|rN|��|||��W�n(���|�jrh|�j����|�j������Y�n0�d�S�)N�rwb) �host�port�_create_socketr_����file�makefile� _base_init�login�close)r���re���rf����user�password� readermode�usenetrc�timeoutr���r���r���r���8��s���� z NNTP.__init__c�����������������C���s^���d|�_�|����|�_d�|�_|�����d|�_|rNd|�jvrN|�����|�jsNd�|�_|�����d|�_d|�_d�S�)Nr���F�READER) � debugging�_getresp�welcome�_caps�getcapabilities�readermode_afterauth�_setreadermode�tls_on� authenticated)r���ro���r���r���r���rj���[��s���� zNNTP._base_initc�����������������C���s���|�S��Nr����r���r���r���r���� __enter__}��s����zNNTP.__enter__c�������������� ������s^�����fdd�}|��rZz6z�������W�n�ttfy6���Y�n0�W�|��rZ������n|��rX������0�d�S�)Nc����������������������s ���t���d�S�)Nrh���)�hasattrr���r}���r���r����<lambda>��������zNNTP.__exit__.<locals>.<lambda>)�quit�OSError�EOFError�_close)r���r���Zis_connectedr���r}���r����__exit__���s���� �z NNTP.__exit__c�����������������C���s<���|d�ur|st�d��t�d|�|�j|�j��t�|�j|�jf|�S�)Nz0Non-blocking socket (timeout=0) is not supportedznntplib.connect)� ValueError�sys�auditre���rf����socket�create_connection)r���rq���r���r���r���rg������s����zNNTP._create_socketc�����������������C���s���|�j�rtdt|�j���|�jS�)Nz *welcome*)rs����print�reprru���r}���r���r���r���� getwelcome���s����zNNTP.getwelcomec�������������� ���C���s����|�j�d�u�r~d|�_d�|�_z|����\}}W�n�ttfyB���i�|�_�Y�n<0�||�_�d|v�rfttt|d���|�_d|v�r~d� |d��|�_|�j�S�)Nr5����VERSIONZIMPLEMENTATION� ) rv����nntp_versionZnntp_implementation�capabilitiesr���r����max�maprE���r0���)r����resp�capsr���r���r���rw������s���� zNNTP.getcapabilitiesc�����������������C���s ���||�_�d�S�r|���)rs���)r����levelr���r���r����set_debuglevel���s����zNNTP.set_debuglevelc�����������������C���sH���t��d|�|��|t�}|�jdkr.tdt|���|�j�|��|�j����d�S�)Nznntplib.putliner5���z*put*) r����r�����_CRLFrs���r����r����rh����write�flush�r���r=���r���r���r����_putline���s ����z NNTP._putlinec�����������������C���s2���|�j�rtdt|���|�|�j|�j�}|��|��d�S�)Nz*cmd*)rs���r����r�����encode�encoding�errorsr����r����r���r���r����_putcmd���s����zNNTP._putcmdTc�����������������C���s����|�j��td��}t|�tkr$td��|�jdkr<tdt|���|sDt�|r�|dd���t krf|d�d��}n|dd���t v�r�|d�d��}|S�)Nr5���z line too longz*get*rR������) rh����readline�_MAXLINEr;���r ���rs���r����r����r����r����)r���Z strip_crlfr=���r���r���r����_getline���s���� z NNTP._getlinec�����������������C���sl���|�����}|�jrtdt|���|�|�j|�j�}|d�d��}|dkrHt|��|dkrXt|��|dvrht |��|S�)Nz*resp*r5����4�5Z123) r����rs���r����r����r/���r����r����r���r���r ���)r���r�����cr���r���r���rt������s����z NNTP._getrespc�����������������C���s����d�}z�t�|ttf�r"t|d��}}|����}|d�d��tvrBt|��g�}|d�ur�dt�df}|��d�}||v�rnq�|� d�r�|dd���}|� |��qZn8d}|����}||kr�q�|� d�r�|dd���}|�|��q�W�|r�|����n|r�|����0�||fS�)N�wb��������.s���. Fs���..r5���) r-����strr����openrt���� _LONGRESPr���r����r����rG���r����r.���rl���)r���rh���Z openedFiler����r ���Zterminatorsr=���� terminatorr���r���r����_getlongresp���s8���� � zNNTP._getlongrespc�����������������C���s���|���|��|����S�r|���)r����rt���r����r���r���r���� _shortcmd��s���� zNNTP._shortcmdc�����������������C���s���|���|��|��|�S�r|����r����r����)r���r=���rh���r���r���r����_longcmd��s���� z NNTP._longcmdc��������������������s.�������|�����|�\}}|��fdd�|D��fS�)Nc��������������������s���g�|�]}|����j��j��qS�r���)r/���r����r������.0r=���r}���r���r���� <listcomp>+��s����z'NNTP._longcmdstring.<locals>.<listcomp>r����)r���r=���rh���r�����listr���r}���r����_longcmdstring$��s ���� �zNNTP._longcmdstringc�����������������C���s`���z|�j�W�S��ty���Y�n0�z|��d�\}}W�n�tyL���td�d���}Y�n 0�t|�}||�_�|S�)NzLIST OVERVIEW.FMT)Z_cachedoverviewfmt�AttributeErrorr����r���r:���rB���)r���r����r ���r<���r���r���r����_getoverviewfmt.��s����zNNTP._getoverviewfmtc�����������������C���s���dd��|D��S�)Nc�����������������S���s���g�|�]}t�|������qS�r���)r"���rD���r����r���r���r���r����A��r����z#NNTP._grouplist.<locals>.<listcomp>r���)r���r ���r���r���r���� _grouplist?��s����zNNTP._grouplistc�����������������C���s8���i�}|���d�\}}|D�]}|���^}}|||<�q||fS�)NZCAPABILITIES)r����rD���)r���r����r����r ���r=���r>���rI���r���r���r���r����C��s���� zNNTP.capabilities)rh���c����������������C���sb���t�|tjtjf�s$td�|jj���t||�jdk��\}}d�||�}|�� ||�\}}||�� |�fS�)N�Athe date parameter must be a date or datetime object, not '{:40}'rO���zNEWGROUPS {0} {1})r-���rU���r���� TypeErrorrZ���� __class__r���r]���r����r����r����)r���r���rh���rV���rW����cmdr����r ���r���r���r���� newgroupsQ��s������zNNTP.newgroupsc����������������C���sR���t�|tjtjf�s$td�|jj���t||�jdk��\}}d�|||�}|�� ||�S�)Nr����rO���zNEWNEWS {0} {1} {2}) r-���rU���r���r����rZ���r����r���r]���r����r����)r���r#���r���rh���rV���rW���r����r���r���r����newnewsa��s������zNNTP.newnewsc����������������C���s4���|d�urd|�}nd}|���||�\}}||��|�fS�)NzLIST ACTIVE �LIST)r����r����)r���� group_patternrh����commandr����r ���r���r���r���r����q��s ���� z NNTP.listc�����������������C���s����t��d�}|��d|��\}}|�d�s8|��d|��\}}i�}|D�]:}|�|����}|r@|�dd�\} } |sr| ��S�| || <�q@|r�||fS�dS�d�S�)Nz^(?P<group>[^ ]+)[ ]+(.*)$zLIST NEWSGROUPS r���zXGTITLE r5���rO���r+���)�re�compiler����rG����search�stripr#���)r���r����Z return_allZline_patr����r ����groupsZraw_line�matchr>���Zdescr���r���r����_getdescriptions���s���� zNNTP._getdescriptionsc�����������������C���s���|���|d�S�)NF�r����)r���r#���r���r���r����description���s����zNNTP.descriptionc�����������������C���s���|���|d�S�)NTr����)r���r����r���r���r����descriptions���s����zNNTP.descriptionsc�����������������C���s����|���d|��}|�d�s t|��|���}d�}�}}t|�}|dkr�|d�}|dkr�|d�}|dkr�|d�}|dkr�|d����}|t|�t|�t|�|fS�)NzGROUP r���r���r5���rO���r����rP���)r����rG���r���rD���r;���r7���rE���)r���r>���r�����words�countr%���r$����nr���r���r���r#������s���� z NNTP.groupc����������������C���s���|���d|�S�)NZHELP)r����)r���rh���r���r���r����help���s����z NNTP.helpc�����������������C���s8���|��d�st|��|���}t|d��}|d�}|||fS�)NZ22r5���rO���)rG���r���rD���rE���)r���r����r�����art_numr)���r���r���r���� _statparse���s���� zNNTP._statparsec�����������������C���s���|���|�}|��|�S�r|���)r����r����)r���r=���r����r���r���r����_statcmd���s���� z NNTP._statcmdc�����������������C���s"���|r|���d�|��S�|���d�S�d�S�)NzSTAT {0}ZSTAT)r����rZ���)r����message_specr���r���r����stat���s���� z NNTP.statc�����������������C���s ���|���d�S�)NZNEXT�r����r}���r���r���r����next���s����z NNTP.nextc�����������������C���s ���|���d�S�)NZLASTr����r}���r���r���r���r$������s����z NNTP.lastc�����������������C���s0���|���||�\}}|��|�\}}}|t|||�fS�r|���)r����r����r'���)r���r=���rh���r����r ���r����r)���r���r���r����_artcmd���s����zNNTP._artcmdc����������������C���s$���|d�urd��|�}nd}|��||�S�)NzHEAD {0}ZHEAD�rZ���r�����r���r����rh���r����r���r���r����head���s����z NNTP.headc����������������C���s$���|d�urd��|�}nd}|��||�S�)NzBODY {0}ZBODYr����r����r���r���r����body��s����z NNTP.bodyc����������������C���s$���|d�urd��|�}nd}|��||�S�)NzARTICLE {0}ZARTICLEr����r����r���r���r����article��s����zNNTP.articlec�����������������C���s ���|���d�S�)NZSLAVE)r����r}���r���r���r����slave!��s����z NNTP.slavec�������������������sD���t��d���|��d�||�|�\}}��fdd��|�fdd�|D��fS�)Nz^([0-9]+) ?(.*) ?zXHDR {0} {1}c��������������������s�������|��}|r|�dd�S�|�S�)Nr5���rO���)r����r#���)r=����m)�patr���r���� remove_number2��s���� z NNTP.xhdr.<locals>.remove_numberc��������������������s���g�|�]}��|��qS�r���r���r����)r����r���r���r����5��r����zNNTP.xhdr.<locals>.<listcomp>)r����r����r����rZ���)r���Zhdrr����rh���r����r ���r���)r����r����r����xhdr'��s���� z NNTP.xhdrc����������������C���s.���|���d�||�|�\}}|����}|t||�fS�)Nz XOVER {0}-{1})r����rZ���r����rN���)r����start�endrh���r����r ���r<���r���r���r����xover7��s ���� �z NNTP.xoverc���������� ������C���sx���d|�j�v�rdnd}t|ttf�r>|\}}|d�||p6d�7�}n|d�urR|d�|�}|��||�\}}|����}|t||�fS�)NZOVERZXOVERz {0}-{1}r+���r����)rv���r-����tupler����rZ���r����r����rN���) r���r����rh���r����r����r����r����r ���r<���r���r���r����overE��s����z NNTP.overc�����������������C���sb���|���d�}|�d�st|��|���}t|�dkr8t|��|d�}t|�dkrTt|��|t|d��fS�)NZDATEZ111rO���r5�������)r����rG���r���rD���r;���r ���rY���)r���r�����elemr���r���r���r���r���`��s���� z NNTP.datec�����������������C���s����|���|�}|�d�st|��t|ttf�r2|���}|D�]:}|�t�sR|� d�t�}|�d�rdd|�}|�j �|��q6|�j �d��|�j ����|�� ��S�)N�3r!���r����s���. )r����rG���r���r-���r���� bytearray� splitlines�endswithr�����rstriprh���r����r����rt���)r���r�����fr����r=���r���r���r����_postq��s���� z NNTP._postc�����������������C���s���|���d|�S�)NZPOST)r����)r����datar���r���r����post���s����z NNTP.postc�����������������C���s���|���d�|�|�S�)Nz IHAVE {0})r����rZ���)r���r)���r����r���r���r����ihave���s����z NNTP.ihavec�����������������C���s4���z"|�j�r|�j�����|�`�W�|�j����n|�j����0�d�S�r|���)rh���rl���r_���r}���r���r���r���r�������s ���� zNNTP._closec�����������������C���s&���z|���d�}W�|�����n |�����0�|S�)NZQUIT)r����r����)r���r����r���r���r���r�������s����z NNTP.quitc�����������������C���s����|�j�rtd��|s|std��z<|rX|sXdd�l}|���}|�|�j�}|rX|d�}|d�}W�n�tyl���Y�n0�|svd�S�|��d|��}|�d�r�|s�t|��n |��d|��}|�d�s�t |��d�|�_ |�����|�jr�d |�j vr�|�� ���d�|�_ |�����d�S�) NzAlready logged in.z7At least one of `user` and `usenetrc` must be specifiedr���rO���zauthinfo user Z381zauthinfo pass Z281rr���)r{���r�����netrcZauthenticatorsre���r����r����rG���r���r���rv���rw���rx���ry���)r���rm���rn���rp���r����ZcredentialsZauthr����r���r���r���rk������s>����� z NNTP.loginc�������������� ���C���s`���z|���d�|�_W�nJ�ty"���Y�n:�tyZ�}�z"|j�d�rDd|�_n��W�Y�d�}~n d�}~0�0�d�S�)Nzmode readerZ480T)r����ru���r���r���r ���rG���rx���)r����er���r���r���ry������s����zNNTP._setreadermodec�����������������C���s|���|�j�rtd��|�jrtd��|��d�}|�d�rp|�j����t|�j||�j �|�_|�j� d�|�_d|�_�d�|�_|�����nt d��d�S�)NzTLS is already enabled.z+TLS cannot be started after authentication.�STARTTLSZ382rd���TzTLS failed to start.)rz���r����r{���r����rG���rh���rl���rb���r_���re���ri���rv���rw���r���)r���r`���r����r���r���r����starttls���s���� z NNTP.starttls)T)N)N)N)N)N)N)N)N)N)NNT)N):r���r���r���r����r����� NNTP_PORTr���r���rj���r~���r����rg���r����rw���r�����debugr����r����r����rt���r����r����r����r����r����r����r����r����r����r����r����r����r����r#���r����r����r����r����r����r$���r����r����r����r����r����r����r����r����r���r����r����r����r����r����rk���ry���� _have_sslr����r���r���r���r���r���(��sp��� � #" . ) r���c�����������������������s8���e�Zd�Zedddddef��fdd� Z��fdd�Z���ZS�)�NNTP_SSLNFc ����������� ��� ������s"���||�_�t���|||||||��d�S�r|���)�ssl_context�superr���) r���re���rf���rm���rn���r����ro���rp���rq����r����r���r���r������s�����zNNTP_SSL.__init__c��������������������s@���t����|�}zt||�j|�j�}W�n���|������Y�n0�|S�d�S�r|���)r����rg���rb���r����re���rl���)r���rq���r_���r���r���r���rg�����s����zNNTP_SSL._create_socket)r���r���r���� NNTP_SSL_PORTr���r���rg���� __classcell__r���r���r���r���r�������s����r�����__main__zJ nntplib built-in demo - display the latest articles in a newsgroup)r����z-gz--groupzgmane.comp.python.generalz3group to fetch messages from (default: %(default)s))�defaultr����z-sz--serverz news.gmane.ioz+NNTP server hostname (default: %(default)s)z-pz--portr����z#NNTP port number (default: %s / %s))r���typer����z-nz --nb-articles� ���z2number of articles to fetch (default: %(default)s)z-Sz--ssl� store_truezuse NNTP over SSL)�actionr��r����)re���rf���r����ZGroupZhaszarticles, range�toc�����������������C���s$���t�|��|kr |�d�|d���d�}�|�S�)NrP���z...)r;���)�sZlimr���r���r����cut3��s����r��r5���r����<r���z{:7} {:20} {:42} ({})�����*���)N)N)F)Hr����r�����collectionsrU���r����r^����ImportErrorr����Zemail.headerr���r,���r����__all__r����r���r���r���r���r���r ���r ���r����r��r����r:���r8���r����� namedtupler"���r'���rB���rN���rY���r]���rb���r���r����r.���r����argparse�ArgumentParser�parser�add_argumentrE���� parse_argsr���rf���Zserverr ��rw���r����r����r#���r����r����r%���r$���r>���r����r��r����Znb_articlesr����Z overviewsZartnumr����rD���Zauthorr���r ���rZ���r����r���r���r���r����<module>B���s���� ��� �����S � � ��� �