
    T>qj                        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y)    )annotationsN)	dataclassfield)Session   )SUPPORTED_METHODSprocess_url)_execute_requestc                  X    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
<   y)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        P/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/curl_cffi/cli/run.pyr   r      s0    5FCCM#D9G^9D#Nr   r   c                <   g }g }| j                         D ]I  }|j                         j                  d      r|s%|j                  |       g }9|j                  |       K |r|j                  |       g }|D ]!  }t	        |      }||j                  |       # |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)textblockscurrent_lineslinerequestsblock_linesreqs          r   parse_http_filer+      s     F!M! '::<""5)m, "  &' m$H !,?OOC ! Or   c                T   d}d}d}i }g }| D ]  }|j                         }|j                  d      s|j                  d      r7|xdk(  rt |sA|j                         }|d   j                         t        v s|d   j                         dk(  r)|d   j                         }t        |      dkD  r|d   nd}n|d   }d	}xd	k(  rV |sd
}d|v r7|j                  d      \  }	}
}|j                         ||	j                         <   d
}|j                  |       d
k(  s|j                  d      s|j                  d      r n~|j                  d      rY|j                         \  }
}|j                         }	 t        |      5 }|j                  |j                                ddd       |j                  |        |syt        |||dj                  |      j                               S # 1 sw Y   NxY w# t        $ r" t        d| t        j                         Y w xY w)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)linesstater   r   r   
body_linesr'   strippedpartsname_valuefilepathfs                 r   r#   r#   8   s    EF
C GJ 0,::< s#x':':4'@ (!HNN$(99Qx~~'94"1X^^-F&)%j1n%("C(C!"EH_%-%7%7%<ND!U,1KKMGDJJL)"E%%d+&&t,0C0CE0J&&t,"*.."2KAx'~~/H!(^ 8q&--affh78 %%d+a0,d YYz"((*	 8 8, @
K!$ s*   8G< G0#G<0G9	5G<<'H'&H'c           	        t        |      }|s0t        dt        j                         t        j                  d       d}t        |d      D ]  \  }}| j                  s8t        d| d|j                   d|j                   t        j                         t        |j                        }t        | |j                  ||j                  |j                  xs d|	      }|dk7  s|dz  } |S )
z0Execute requests parsed from .http file content.z!Error: no requests found in file.r1   r   r   --- []  Nr   datasession)r+   r;   r<   r=   exit	enumeratequietr   r   r	   r
   r   r   )	argsr$   rO   r(   failedir*   r   rcs	            r   _run_http_filerW      s    
 t$H1

CFHa( 3zzE!Bszzl!CGG95CJJG#''"JJKK!T
 7aKF" Mr   >   :path:method:scheme
:authoritycontent-lengthtransfer-encodingc           	         	 t        j                  |      }j                  di       j                  dg       }|s0t        dt        j
                         t	        j                  d       d}t        |d      D ]=  \  }}|j                  d	i       }	|	j                  d
d      j                         }
|	j                  dd      }|s t        d| dt        j
                         m| j                  s$t        d| d|
 d| t        j
                         i }|	j                  dg       D ]@  }|j                  dd      }|j                         t        vs,|j                  dd      ||<   B |xs d}|	j                  d      }|r|j                  dd      nd}t        | |
||||      }|dk7  s9|dz  }@ |S # t         j                  $ r>}t        d| t        j
                         t	        j                  d       Y d}~d}~ww xY w)z.Execute requests parsed from HAR file content.zError: invalid HAR JSON: r1   r   Nlogentriesz$Error: no entries found in HAR file.r   r-   r   r   r   r   rJ   z] skipping entry with no URLrK   rL   r   rD   rF   postDatar$   rM   )jsonloadsJSONDecodeErrorr;   r<   r=   rP   getrQ   r5   rR   lower_SKIP_HAR_HEADERSr
   )rS   r$   rO   harexcr`   rT   rU   entryr*   r   r   r   hrD   	post_datarN   rV   s                     r   _run_har_filerm      s   jj
 ggeR $$Y3G43::FFgq) 5ii	2&5)//1ggeR E!89

KzzE!Bvhau-CJJ?B' 	3A55$Dzz|#44 !gr 2	3 /TGGJ'	,5y}}VR(4
 7aKF?B MW  )#/cjjAs   F< <H3HHc                   | j                   }	 t        |      5 }|j                         }ddd       t        | dd      }|rt        | j                        nd}	 |j                  d      rt        | |	      }nS|j                  d
      rt        | |	      }n3t	        d| t
        j                         t        j                  d       |r|j                          	 dkD  r5t	        d| dt
        j                         t        j                  d       yy# 1 sw Y   xY w# t        $ r7 t	        d| t
        j                         t        j                  d       Y 4w xY w# |r|j                          w w xY w)zExecute batch requests.NzError: file not found: r1   r   rO   T)impersonatez.har)rO   z.httpz Error: unsupported file format: r   r3   z request(s) failed.)r2   r8   r9   r:   r;   r<   r=   rP   getattrr   ro   endswithrm   rW   close)rS   rG   rH   r$   use_sessionrO   rT   s          r   
handle_runrt      s9   yyH(^ 	q668D	 $	40K7Bg$"2"23G
V$"4w?Fw'#D$@F4XJ?cjjQHHQKMMOz6(-.SZZ@ +	 	 'z2D  MMO s4   D' DD' A3E* D$ D' '<E'&E'*E?)r$   r   returnzlist[HttpFileRequest])r?   z	list[str]ru   zHttpFileRequest | None)N)rS   argparse.Namespacer$   r   rO   zSession | Noneru   int)rS   rv   ru   None)
__future__r   argparserb   r<   dataclassesr   r   curl_cffi.requestsr   parser   r	   r-   r
   r   r+   r#   rW   	frozensetrg   rm   rt   r   r   r   <module>r      s    "   
 ( & 1 %   4K^ DH
$'2@F 	  DH1
1$'12@11rr   