Ë
    Ì
âi’  ã                   óP   — d Z ddlZddlZddlmZmZmZmZ ddlm	Z	  G d„ d«      Z
y)z(
HTTP utility functions for API testing
é    N)ÚDictÚOptionalÚAnyÚTupleé   )ÚLoggerc                   óþ  — e Zd ZdZd dedefd„Z	 	 	 	 	 d!dededee   d	ee   d
ee   dee   de	de
ee	ef   fd„Zd"ded
ee   de
ee	ef   fd„Zd#dedee   d	ee   de
ee	ef   fd„Zd#dedee   dee   de
ee	ef   fd„Zd#dedee   d	ee   de
ee	ef   fd„Zdede
ee	ef   fd„Zd$dedededee   d	ee   d
ee   dee   de	de
ee	ef   fd„Zdeeef   fd„Zdefd„Zd„ Zd%dede	defd„Zd&dede	de	defd„Zy)'Ú	HTTPUtilsz"Helper functions for HTTP requestsÚloggerÚbase_urlc                 ó|   — || _         || _        t        j                  «       | _        d | _        d | _        d | _        y ©N)r   r   ÚrequestsÚSessionÚsessionÚaccess_tokenÚrefresh_tokenÚlast_response)Úselfr   r   s      ú5/home/factor_ks/STREAMA2026/tests/utils/http_utils.pyÚ__init__zHTTPUtils.__init__   s8   € ØˆŒØ ˆŒÜ×'Ñ'Ó)ˆŒØ+/ˆÔØ,0ˆÔØ:>ˆÕó    NÚmethodÚendpointÚdataÚ	json_dataÚparamsÚheadersÚtimeoutÚreturnc           	      ó”  — | j                   › |› �}|xs i }	| j                  rd| j                  › �|	d<   d}
d}t        |
«      D ]Ê  }	 |dk(  r | j                  j	                  |||	|¬«      }nz|dk(  r!| j                  j                  ||||	|¬«      }nT|d	k(  r!| j                  j                  ||||	|¬«      }n.|d
k(  r| j                  j                  ||	|¬«      }n
ddd|› �fc S || _        	 |j                  «       }d|j                  |fc S  y#  |j                  }Y Œ#xY w# t        j                  j                  $ rJ ||
dz
  k  r;| j                  j!                  dd|› d�«       t#        j$                  |«       |dz  }nY  yY �ŒGt        j                  j&                  $ rJ ||
dz
  k  r;| j                  j!                  dd|› d�«       t#        j$                  |«       |dz  }nY  yY �Œ¬t(        $ rO}| j                  j+                  ddt-        |«      j.                  › d|› �«       ddt1        |«      fcY d}~c S d}~ww xY w)z�
        Make HTTP request with retry logic

        Returns:
            Tuple of (success, status_code, response_data)
        úBearer ÚAuthorizationé   r   ÚGET)r   r   r   ÚPOST)r   Újsonr   r   ÚPUTÚDELETE)r   r   Fr   zUnsupported method: TÚHTTPzRequest timeout, retrying in zs...é   )Fr   zRequest timeoutzConnection error, retrying in )Fr   zConnection errorzRequest failed with exception: z: N)Fr   zMax retries exceeded)r   r   Úranger   ÚgetÚpostÚputÚdeleter   r'   ÚtextÚstatus_coder   Ú
exceptionsÚTimeoutr   ÚwarningÚtimeÚsleepÚConnectionErrorÚ	ExceptionÚerrorÚtypeÚ__name__Ústr)r   r   r   r   r   r   r   r   ÚurlÚrequest_headersÚmax_retriesÚretry_delayÚattemptÚresponseÚresponse_dataÚes                   r   Ú_make_requestzHTTPUtils._make_request   s‡  € ð  —‘� ˜zÐ*ˆð "š- RˆØ×ÒØ18¸×9JÑ9JÐ8KÐ/LˆO˜OÑ,ð ˆØˆä˜[Ó)ò 0	(ˆGð/(Ø˜U’?Ø#Ÿ|™|×/Ñ/Ø F°OÈWð  0ó  ‘Hð ˜vÒ%Ø#Ÿ|™|×0Ñ0Ø $¨YÀÐY`ð  1ó  ‘Hð ˜u’_Ø#Ÿ|™|×/Ñ/Ø $¨YÀÐY`ð  0ó  ‘Hð ˜xÒ'Ø#Ÿ|™|×2Ñ2Ø _¸gð  3ó  ‘Hð ! !Ð';¸F¸8Ð%DÐDÒDð &.�Ô"ð2Ø$,§M¡M£O�Mð ˜X×1Ñ1°=Ð@Ò@ð=0	(ðd 0øð/2Ø$,§M¡M’Mûô ×&Ñ&×.Ñ.ò 7Ø˜[¨1™_Ò,Ø—K‘K×'Ñ'¨Ð2OÐP[È}Ð\`Ð0aÔbÜ—J‘J˜{Ô+Ø 1Ñ$‘Kâ6ò  ô ×&Ñ&×6Ñ6ò 8Ø˜[¨1™_Ò,Ø—K‘K×'Ñ'¨Ð2PÐQ\ÐP]Ð]aÐ0bÔcÜ—J‘J˜{Ô+Ø 1Ñ$‘Kâ7ò  ô ò (Ø—‘×!Ñ! &Ð,KÌDÐQRËG×L\ÑL\ÐK]Ð]_Ð`aÐ_bÐ*cÔdØ˜a¤ Q£Ð'×'ûð(úsL   ÁBD%Ã'D%Ã/DÃ?D%ÄD"Ä D%Ä%A IÆAIÇ0IÇ8AIÈ:IÉIc                 ó*   — | j                  d||¬«      S )zMake GET requestr%   )r   ©rF   )r   r   r   s      r   r-   zHTTPUtils.getd   s   € à×!Ñ! %¨¸&Ð!ÓAÐAr   c                 ó,   — | j                  d|||¬«      S )zMake POST requestr&   ©r   r   rH   ©r   r   r   r   s       r   r.   zHTTPUtils.posth   s   € à×!Ñ! &¨(¸ÈÐ!ÓSÐSr   Úfilesc                 ó`  — | j                   › |› �}i }| j                  rd| j                  › �|d<   	 | j                  j                  ||||d¬«      }|| _        	 |j                  «       }d|j                  |fS #  |j                  }Y ŒxY w# t        $ r}ddt        |«      fcY d}~S d}~ww xY w)	z"Make POST request with file uploadr"   r#   é   )r   rL   r   r   TFr   N)
r   r   r   r.   r   r'   r1   r2   r9   r=   )	r   r   r   rL   r>   r   rC   rD   rE   s	            r   Úpost_with_fileszHTTPUtils.post_with_filesl   sÆ   € à—‘� ˜zÐ*ˆð ˆØ×ÒØ)0°×1BÑ1BÐ0CÐ'DˆG�OÑ$ð	$Ø—|‘|×(Ñ(Ø˜$ e°WÀbð )ó ˆHð
 "*ˆDÔð.Ø (§¡£�ð ˜×-Ñ-¨}Ð<Ð<øð.Ø (§¡’ûô ò 	$Ø˜!œS ›VÐ#Õ#ûð	$ús5   ²'B ÁA9 Á*B Á9B	ÂB Â	B-ÂB(Â"B-Â(B-c                 ó,   — | j                  d|||¬«      S )zMake PUT requestr(   rJ   rH   rK   s       r   r/   zHTTPUtils.put‡   s   € à×!Ñ! %¨¸È	Ð!ÓRÐRr   c                 ó&   — | j                  d|«      S )zMake DELETE requestr)   rH   )r   r   s     r   r0   zHTTPUtils.delete‹   s   € à×!Ñ! (¨HÓ5Ð5r   Úauthenticatedc	           	      ón   — | j                   }	|sd| _         | j                  |||||||¬«      }
|	| _         |
S )z.Make HTTP request with optional authenticationN)r   r   r   r   r   )r   rF   )r   r   r   rR   r   r   r   r   r   Ú
temp_tokenÚresults              r   ÚrequestzHTTPUtils.request�   sR   € ð ×&Ñ&ˆ
ÙØ $ˆDÔà×#Ñ# F¨H¸4È9Ð]cÐmtð  FÐ#ó  Gˆð 'ˆÔàˆr   c                 ó\   — | j                   rt        | j                   j                  «      S i S )zGet headers from last response)r   Údictr   ©r   s    r   Úget_last_headerszHTTPUtils.get_last_headers�   s'   € à×ÒÜ˜×*Ñ*×2Ñ2Ó3Ð3Øˆ	r   r   c                 ó   — || _         y)zSet authentication tokenN)r   )r   r   s     r   Úset_auth_tokenzHTTPUtils.set_auth_token£   s
   € à(ˆÕr   c                 ó    — d| _         d| _        y)zClear authentication tokenN)r   r   rY   s    r   Úclear_auth_tokenzHTTPUtils.clear_auth_token§   s   € à ˆÔØ!ˆÕr   r>   c                 ó^   — 	 t        j                  ||¬«      }|j                  dk  S #  Y yxY w)zCheck if a URL is accessible)r   iô  F)r   r-   r2   )r   r>   r   rC   s       r   Úcheck_url_accessiblezHTTPUtils.check_url_accessible¬   s2   € ð	Ü—|‘| C°Ô9ˆHØ×'Ñ'¨#Ñ-Ð-øð	Ùús   ‚%( ¨,ÚhostÚportc                 óä   — 	 ddl }|j                  |j                  |j                  «      5 }|j                  |«       |j	                  ||f«      }|dk(  cddd«       S # 1 sw Y   yxY w#  Y yxY w)zCheck if a port is openr   NF)ÚsocketÚAF_INETÚSOCK_STREAMÚ
settimeoutÚ
connect_ex)r   ra   rb   r   rd   ÚsockrU   s          r   Úcheck_port_openzHTTPUtils.check_port_open´   sg   € ð	ÛØ—‘˜vŸ~™~¨v×/AÑ/AÓBð #ÀdØ—‘ Ô(ØŸ™¨$°¨Ó6�Ø ‘{÷#÷ #ò #ûð	Ùús(   ‚*A+ ¬)AÁ	A+ ÁA(Á$A+ Á(A+ Á+A/)zhttp://localhost:8000)NNNNé
   r   )NN)TNNNNrk   )é   )r+   )r<   Ú
__module__Ú__qualname__Ú__doc__r   r=   r   r   r   Úintr   Úboolr   rF   r-   r.   rO   r/   r0   rV   rZ   r\   r^   r`   rj   © r   r   r
   r
   
   s¸  „ Ù,ñ?˜vð ?°ó ?ð  $Ø$(Ø!%Ø"&ØñM0àðM0ð ðM0ð �t‰nð	M0ð
 ˜D‘>ðM0ð ˜‘ðM0ð ˜$‘ðM0ð ðM0ð 
ˆt�S˜#ˆ~Ñ	óM0ñ^B˜Cð B¨°$©ð BÀ5ÈÈsÐTWÈÑCXó BñT˜Sð T¨°©ð TÈ(ÐSWÉ.ð TÐdiÐjnÐpsÐuxÐjxÑdyó Tñ$¨ð $°8¸D±>ð $ÐQYÐZ^ÑQ_ð $ÐkpÐquÐwzÐ|Ðqñ  lAó $ñ6S˜Cð S x°¡~ð SÈÐRVÉð SÐchÐimÐorÐtwÐiwÑcxó Sð6˜sð 6 u¨T°3¸¨^Ñ'<ó 6ñ˜cð ¨Sð Àð ÐT\Ð]aÑTbð Ðv~ð  @Dñ  wEð ð  V^ð  _cñ  Vdð ð  v~ð  Cñ  vDð ð  VYð ð  chð  imð  orð  twð  iwñ  cxó ð $ s¨C x¡.ó ð)¨3ó )ò"ñ
¨ð °cð À$ó ñ	 Cð 	¨sð 	¸Sð 	Èô 	r   r
   )ro   r   r6   Útypingr   r   r   r   r   r   r
   rr   r   r   ú<module>rt      s'   ðñó Û ß -Ó -Ý ÷sò sr   