
    ei                        d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	 ddl
mZmZ ddlmZ e G d d	                      ZddZddZ	 dd dZ eh d          Z	 dd dZd!dZdS )"    )annotationsN)	dataclassfield)Session   )SUPPORTED_METHODSprocess_url)_execute_requestc                  `    e Zd ZU dZdZded<   dZded<    ee          Z	ded	<   dZ
ded
<   dS )HttpFileRequestz+A single request parsed from an .http file.GETstrmethod url)default_factoryzdict[str, str]headersbodyN)__name__
__module____qualname____doc__r   __annotations__r   r   dictr   r        </usr/local/lib/python3.11/dist-packages/curl_cffi/cli/run.pyr   r      s_         55FCMMMM#eD999G9999DNNNNNNr   r   textr   returnlist[HttpFileRequest]c                p   g }g }|                                  D ]X}|                                                    d          r|r|                    |           g }C|                    |           Y|r|                    |           g }|D ](}t	          |          }||                    |           )|S )zParse an .http file into a list of requests.

    Supports the HTTP Request in Editor spec:
    - Requests separated by ###
    z###)
splitlinesstrip
startswithappend_parse_http_block)r   blockscurrent_lineslinerequestsblock_linesreqs          r   parse_http_filer-      s     F!M!! ' '::<<""5)) 	' #m,,, "  &&&& %m$$$H ! !,,?OOC   Or   lines	list[str]HttpFileRequest | Nonec                J   d}d}d}i }g }| D ]Z}|                                 }|                    d          s|                    d          rB|xdk    r |sM|                                }|d                                         t          v s|d                                         dk    r8|d                                         }t          |          dk    r|d         nd}n|d         }d	}nvxd	k    rg |sd
}d|v rD|                    d          \  }	}
}|                                 ||	                                 <   8d
}|                    |           Qd
k    r|                    d          s|                    d          r n|                    d          r|                                \  }
}|                                 }	 t          |          5 }|                    |	                                           ddd           n# 1 swxY w Y   # t          $ r" t          d| t          j                   Y ?w xY w|                    |           Z\|sdS t          |||d                    |                                                     S )zParse a single request block from an .http file.

    Each block contains:
    - Request line: [METHOD] URL [HTTP/version]
    - Headers: Name: Value
    - Body after blank line
    - Comments with # or //
    - File references: < filepath
    requestr   r   #z//r   CONNECTr   r   r   :z> z<> z< Nz"Error: referenced file not found: file
)r   r   r   r   )r#   r$   splitupperr   len	partitionr%   openreadFileNotFoundErrorprintsysstderrr   join)r.   stater   r   r   
body_linesr)   strippedpartsname_valuefilepathfs                 r   r&   r&   8   s    EF
C GJ 0, 0,::<< s## 	x':':4'@'@ 	  ((!HNN$$(999Qx~~''944"1X^^--F&)%jj1nn%(("CC(C!! ,"EEH__%-%7%7%<%<ND!U,1KKMMGDJJLL))"E%%d++++&&t,, 0C0CE0J0J E&&t,, ,"*.."2"2KAx'~~//H!(^^ 8q&--affhh7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8,   KKK!$      %%d++++ tYYz""((**	   s6   H! (HH!H	H!H	H!!(IIargsargparse.NamespacesessionSession | Noneintc           	        t          |          }|s/t          dt          j                   t          j        d           d}t          |d          D ]x\  }}t          d| d|j         d|j         t          j                   t          |j                  }t          | |j        ||j
        |j        pd|	          }|dk    r|dz  }y|S )
z0Execute requests parsed from .http file content.z!Error: no requests found in file.r6   r   r   --- []  Nr   datarO   )r-   r@   rA   rB   exit	enumerater   r   r	   r
   r   r   )	rM   r   rO   r*   failedir,   r   rcs	            r   _run_http_filer]      s    
 t$$H 1
CCCCFHa((  31a113:1111
CCCC#'""JK!T
 
 
 77aKFMr   >   :path:method:scheme
:authoritycontent-lengthtransfer-encodingc           	     \   	 t          j        |          }nN# t           j        $ r<}t          d| t          j                   t	          j        d           Y d}~nd}~ww xY w|                    di                               dg           }|s/t          dt          j                   t	          j        d           d}t          |d          D ]X\  }}|                    d	i           }	|	                    d
d          	                                }
|	                    dd          }|s t          d| dt          j                   |t          d| d|
 d| t          j                   i }|	                    dg           D ]L}|                    dd          }|
                                t          vr|                    dd          ||<   M|pd}|	                    d          }|r|                    dd          nd}t          | |
||||          }|dk    r|dz  }Z|S )z.Execute requests parsed from HAR file content.zError: invalid HAR JSON: r6   r   Nlogentriesz$Error: no entries found in HAR file.r   r2   r   r   r   r   rS   z] skipping entry with no URLrT   rU   r   rH   rJ   postDatar   rV   )jsonloadsJSONDecodeErrorr@   rA   rB   rX   getrY   r:   lower_SKIP_HAR_HEADERSr
   )rM   r   rO   harexcrf   rZ   r[   entryr,   r   r   r   hrH   	post_datarW   r\   s                     r   _run_har_filers      sX   j   /#//cjAAAA ggeR  $$Y33G 43:FFFFFgq))  5ii	2&&5))//11ggeR   	9!999
KKKK)a))6))C))
;;;;B'' 	3 	3A55$$Dzz||#444 !gr 2 2/TGGJ''	,5?y}}VR(((4
 
 
 77aKFMs    A"2AA"Nonec                H   | j         }	 t          |          5 }|                                }ddd           n# 1 swxY w Y   nB# t          $ r5 t	          d| t
          j                   t          j        d           Y nw xY wt          | dd          }|rt          | j
                  nd}	 |                    d          rt          | ||	          }nZ|                    d
          rt          | ||	          }n2t	          d| t
          j                   t          j        d           |r|                                 n# |r|                                 w w xY w|dk    r5t	          d| dt
          j                   t          j        d           dS dS )zExecute batch requests.NzError: file not found: r6   r   rO   T)impersonatez.har)rO   z.httpz Error: unsupported file format: r   r8   z request(s) failed.)r7   r=   r>   r?   r@   rA   rB   rX   getattrr   rv   endswithrs   r]   close)rM   rK   rL   r   use_sessionrO   rZ   s          r   
handle_runr{      s   yH(^^ 	q6688D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   222DDDD $	400K7BLg$"23333G
V$$ 	"4w???FFw'' 	#D$@@@FF?X??cjQQQQHQKKK 	MMOOO  	MMOOOO	 zz.6...SZ@@@@ zs;   A 9A =A  =A <BB2BE E$)r   r   r   r    )r.   r/   r   r0   )N)rM   rN   r   r   rO   rP   r   rQ   )rM   rN   r   rt   )
__future__r   argparserh   rA   dataclassesr   r   curl_cffi.requestsr   parser   r	   r2   r
   r   r-   r&   r]   	frozensetrm   rs   r{   r   r   r   <module>r      sj   " " " " " "   



 ( ( ( ( ( ( ( ( & & & & & & 1 1 1 1 1 1 1 1 % % % % % %           4K K K K^ DH    D I  	 	  DH0 0 0 0 0p     r   