a
    Ab                     @   s   d Z ddlmZmZmZ ddlZddlZddlmZ	 ddl
Z
e	 G dd deZG dd deZG d	d
 d
eZdddZedkreejej  ed dS )zHTTP log used in testng.    )divisionprint_functionwith_statementN)	cStringIOc                   @   sL   e Zd ZdZg Zedd Zedd Zdd Zdd	 Z	d
d Z
dd ZdS )BufferTranslatorzDProvides a buffer-compatible interface for filtering buffer content.c                 C   s(   t jr| d} | dS | dS dS )zStrip slashes.zUTF-8unicode_escapestring_escapeN)sixPY3encodedecodecontent r   Ulib/python3.9/site-packages/anaconda_navigator/external/UniversalAnalytics/HTTPLog.pystripslashes+   s    

zBufferTranslator.stripslashesc                 C   s   t jr| dS | dS dS )zAdd slashes.r   r   N)r	   r
   r   r   r   r   r   
addslashes4   s    
zBufferTranslator.addslashesc                 C   s   || _ t|dd| _dS )Init.encodingN)outputgetattrr   )selfr   r   r   r   __init__<   s    zBufferTranslator.__init__c                 C   s   |  |}| j| dS )Write.N)	translater   write)r   r   r   r   r   r   A   s    
zBufferTranslator.writec                 C   s.   | j D ]"\}}||}|r||  S q|S )
Translate.)parsersmatch)r   linepatternmethodr   r   r   r   r   F   s
    
zBufferTranslator.translatec                 C   s   dS )zFlush.Nr   r   r   r   r   flushN   s    zBufferTranslator.flushN)__name__
__module____qualname____doc__r   staticmethodr   r   r   r   r   r#   r   r   r   r   r   &   s   

r   c                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )LineBufferTranslatorz
    Line buffer implementation supports translation of line-format input.

    Works even when input is not already line-buffered. Caches input until
    newlines occur, and then dispatches translated input to output buffer.
    c                    s    g | _ tt| j|i | dS )r   N)_linependingsuperr)   r   )r   argskwargs	__class__r   r   r   Z   s    zLineBufferTranslator.__init__c                 C   s   | d}d}tdt|D ]Z}|}|| drt| jrHd| jpJd}| j| |||   | jdd= d}q|r|dkr| j	||  dS )r   Tr   
 N)

splitlinesrangelenendswithr*   joinr   r   r   append)r   Z_inputlinesZlastiprefixr   r   r   r   _   s    
zLineBufferTranslator.writec                 C   s(   t | jr$| j| d| j dS )zDelete method.r1   N)r5   r*   r   r   r   r7   r"   r   r   r   __del__n   s    
zLineBufferTranslator.__del__)r$   r%   r&   r'   r   r   r<   __classcell__r   r   r.   r   r)   S   s   r)   c                   @   sL   e Zd ZdZedZedZedZedZ	e
dd Zdd	 Zd
S )HTTPTranslatorz
    Translates output from |urllib2| HTTPHandler(debuglevel = 1).

    It translates into HTTP-compatible, readible text structures for human
    analysis.
    z.^(?:([a-z]+):)\s*(\'?)([^\r\n]*)\2(?:[\r\n]*)$z(\r?\n|(?:\\r)?\\n)z)^(POST|GET|HEAD|DELETE|PUT|TRACE|OPTIONS)z&([a-z0-9]+)=c                 C   s   | j d|S )zSpacer.z &\1= )RE_PARAMETER_SPACERsub)clsr   r   r   r   spacer   s    zHTTPTranslator.spacerc                 C   sh   | j |}|rd|d}|d}|dkr:d| | S |dkrPd| | S |dkr`|d S |S |S )	r         sendz
# HTTP Request:
Zreplyz

# HTTP Response:
headerr0   )RE_LINE_PARSERr   groupr   )r   r   ZparsedvalueZstager   r   r   r      s    

zHTTPTranslator.translateN)r$   r%   r&   r'   recompilerG   ZRE_LINE_BREAKZRE_HTTP_METHODr?   classmethodrB   r   r   r   r   r   r>   t   s   




r>   c                 C   s   t | p
tjt_tjS )zCapture standard output.)r>   sysstdout)Z	outbufferr   r   r   consume   s    rO   __main__r0   )N)r'   Z
__future__r   r   r   rJ   rM   Z	six.movesr   StringIOr	   objectr   r)   r>   rO   r$   rN   r   stdinreadprintr   r   r   r   <module>   s   -!&
