
    hK;                    2   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
mZmZmZmZmZ d dlmZmZ d dlmZmZ d dlmZmZ g dZd d	lmZ d d
lmZ d dlmZ dZ dZ!h dZ"e G d d                      Z# G d de$          Z% G d d          Z&dS )    )annotationsN)	dataclass)AnyDictMappingOptionalTupleUnion)	HTTPErrorURLError)	urlencodeurljoin)Requesturlopen)
HttpClientHttpResponse	HttpErrorDEFAULT_TIMEOUT)ExponentialWithJitterBackoff)Retry
dummy_failz)HttpClient/1.0 (+https://example.invalid)g      >@>             c                  R    e Zd ZU ded<   ded<   ded<   ded<   dddZddZddZd	S )r   intstatusDict[str, str]headersstrurlbytescontentNencodingOptional[str]returnc                f    |p|                                  }| j                            |d          S )Nreplace)errors)_get_encodingr&   decode)selfr'   encs      V/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/redis/http/http_client.pytextzHttpResponse.text    s3    .$,,..|""3y"999    r   c                v    t          j        |                     |                                                     S )N)r'   )jsonloadsr2   r-   )r/   s    r1   r5   zHttpResponse.json$   s,    z$))T-?-?-A-A)BBCCCr3   c                F   | j                             dd          }|                    d          D ]o}|                                }|                                                    d          r2|                    dd          d                                         pdc S pdS )Ncontent-type ;zcharset==   utf-8)r"   getsplitstriplower
startswith)r/   ctypepartps       r1   r-   zHttpResponse._get_encoding'   s      44KK$$ 	= 	=D

Awwyy##J// =wwsAq)//11<W<<<=wr3   N)r'   r(   r)   r#   )r)   r   )r)   r#   )__name__
__module____qualname____annotations__r2   r5   r-    r3   r1   r   r      s         KKKHHHNNN: : : : :D D D D     r3   r   c                  "     e Zd Zd	d
 fdZ xZS )r   Nr    r   r$   r#   messager(   c                    || _         || _        |pd| d| | _        t                                          | j                   d S )NzHTTP z for )r    r$   rM   super__init__)r/   r    r$   rM   	__class__s       r1   rP   zHttpError.__init__3   sN    <"<&"<"<s"<"<&&&&&r3   rF   )r    r   r$   r#   rM   r(   )rG   rH   rI   rP   __classcell__)rQ   s   @r1   r   r   2   sB        ' ' ' ' ' ' ' ' ' ' 'r3   r   c                  4   e Zd ZdZdde e edd          d          d	dddddddefdId!Z	 	 	 	 dJdKd(Z		 	 	 	 dJdKd)Z
	 	 	 	 	 	 dLdMd.Z	 	 	 	 	 	 dLdMd/Z	 	 	 	 	 	 dLdMd0Z	 	 	 	 dNdOd4Z	 	 dPdQd9ZdRd<Z	 	 	 	 	 dSdTd=Z	 dPdUd>Z	 dVdWd?ZdXdAZdYdDZdZdHZdS )[r   z7
    A lightweight HTTP client for REST API calls.
    r9   Nr<   
   )basecap   )backoffretriesTbase_urlr#   r"   Optional[Mapping[str, str]]timeoutfloatretryr   
verify_tlsboolca_filer(   ca_pathca_dataOptional[Union[str, bytes]]client_cert_fileclient_key_fileclient_key_password
auth_basicOptional[Tuple[str, str]]
user_agentr)   Nonec                   |r,|                     d          s|                                dz   n|| _        d |pi                                 D             | _        || _        || _        | j                            t          t          t          j        f           || _        || _        || _        || _        |	| _        |
| _        || _        || _        || _        dS )a  
        Initialize a new HTTP client instance.

        Args:
            base_url: Base URL for all requests. Will be prefixed to all paths.
            headers: Default headers to include in all requests.
            timeout: Default timeout in seconds for requests.
            retry: Retry configuration for failed requests.
            verify_tls: Whether to verify TLS certificates.
            ca_file: Path to CA certificate file for TLS verification.
            ca_path: Path to a directory containing CA certificates.
            ca_data: CA certificate data as string or bytes.
            client_cert_file: Path to client certificate for mutual TLS.
            client_key_file: Path to a client private key for mutual TLS.
            client_key_password: Password for an encrypted client private key.
            auth_basic: Tuple of (username, password) for HTTP basic auth.
            user_agent: User-Agent header value for requests.

        The client supports both regular HTTPS with server verification and mutual TLS
        authentication. For server verification, provide CA certificate information via
        ca_file, ca_path or ca_data. For mutual TLS, additionally provide a client
        certificate and key via client_cert_file and client_key_file.
        /c                >    i | ]\  }}|                                 |S rK   rA   .0kvs      r1   
<dictcomp>z'HttpClient.__init__.<locals>.<dictcomp>o   s&     R R R$!QA R R Rr3   N)endswithrstriprZ   items_default_headersr\   r^   update_supported_errorsr   r   sslSSLErrorr_   ra   rb   rc   re   rf   rg   rh   rj   )r/   rZ   r"   r\   r^   r_   ra   rb   rc   re   rf   rg   rh   rj   s                 r1   rP   zHttpClient.__init__?   s    Z  ( 1 1# 6 6HOO## 	
 !S R7=b:O:O:Q:Q R R R

**Ix+NOOO$  0.#6 $$r3   pathparamsGOptional[Mapping[str, Union[None, str, int, float, bool, list, tuple]]]Optional[float]expect_jsonUnion[HttpResponse, Any]c           	     :    |                      d||||d |          S )NGETr}   r"   r\   bodyr   
_json_callr/   r|   r}   r"   r\   r   s         r1   r>   zHttpClient.get   s4     #  
 
 	
r3   c           	     :    |                      d||||d |          S )NDELETEr   r   r   s         r1   deletezHttpClient.delete   s4     #  
 
 	
r3   	json_bodyOptional[Any]dataOptional[Union[bytes, str]]c                d    |                      d|||||                     ||          |          S )NPOSTr   r   r   r   _prepare_bodyr/   r|   r   r   r}   r"   r\   r   s           r1   postzHttpClient.post   sG     ##id#CC#  
 
 	
r3   c                d    |                      d|||||                     ||          |          S )NPUTr   r   r   r   s           r1   putzHttpClient.put   sG     ##id#CC#  
 
 	
r3   c                d    |                      d|||||                     ||          |          S )NPATCHr   r   r   r   s           r1   patchzHttpClient.patch   sG     ##id#CC#  
 
 	
r3   methodr   r   c                                          ||          }                     ||          }t          |t                    r|                    d          n|}	t          ||                                |	|          d |                                                    d          r j	        rUt          j         j         j         j                   j        r'                     j         j         j                   n+t          j                    d_        t          j        _        	  j                             fdd  fd	          S # t0          $ r}
d
}	 |
                                }n# t4          $ r Y nw xY wd |
j        pi                                 D             }                     ||          }t=          |
dd          pd}t?          ||||          }|cY d }
~
S d }
~
ww xY w)Nr=   )r$   r   r   r"   https)cafilecapathcadata)certfilekeyfilepasswordFc                 4                                    S )N)contextr\   )_make_request)r   reqr/   r\   s   r1   <lambda>z$HttpClient.request.<locals>.<lambda>  s    **3*QQ r3   c                    t                      S rF   r   )_s    r1   r   z$HttpClient.request.<locals>.<lambda>  s
    *,, r3   c                .                         |           S rF   )_is_retryable_http_error)errorr/   s    r1   r   z$HttpClient.request.<locals>.<lambda>  s    d;;EBB r3   r3   c                >    i | ]\  }}|                                 |S rK   ro   rp   s      r1   rt   z&HttpClient.request.<locals>.<dictcomp>   s&    NNNDAq17799aNNNr3   coder   r    r"   r$   r&   ) 
_build_url_prepare_headers
isinstancer#   encoder   upperrA   rB   r_   rz   create_default_contextra   rb   rc   re   load_cert_chainrf   rg   check_hostname	CERT_NONEverify_moder^   call_with_retryr   read	Exceptionr"   rw   _maybe_decompressgetattrr   )r/   r   r|   r}   r"   r   r\   r$   all_headersr   eerr_bodyheaders_mapr    responser   r   s   `     `        @@r1   requestzHttpClient.request   sF    oodF++++GT::'1$'<'<Ft{{7###$#fllnn4UUU,099;;!!'** 	4 44<<<   ( ++!%!6 $ 4!%!9 ,    466).&&)m#	:--QQQQQQQ&&BBBB  
  	 	 	H6688   NNQY_"4K4K4M4MNNNK--hDDHQ**/aF## 	  H OOOOOO!	sC   3%E 
G8#G3&E;:G3;
FG3FA%G3-G83G8r   r   r   Optional[ssl.SSLContext]c                V   t          ||p| j        |          5 }|                                }d |j                                        D             }|                     ||          }t          |j        ||                                |          cd d d            S # 1 swxY w Y   d S )N)r\   r   c                >    i | ]\  }}|                                 |S rK   ro   rp   s      r1   rt   z,HttpClient._make_request.<locals>.<dictcomp>3  s&    IIIDAq17799aIIIr3   r   )	r   r\   r   r"   rw   r   r   r    geturl)r/   r   r   r\   resprawr   s          r1   r   zHttpClient._make_request+  s     Wg&=wOOO 		SW))++CIIDL4F4F4H4HIIIK((k::C{#KKMM	  			 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s   A7BB"%B"r   r   c                d    t          |t                    r|                     |j                  S dS )NF)r   r   _should_retry_statusr   )r/   r   s     r1   r   z#HttpClient._is_retryable_http_error<  s/    eY'' 	9,,UZ888ur3   c                    |                      ||||||          }d|j        cxk    rdk     s/n t          |j        |j        |                                          |r|                                S |S )N)r   r|   r}   r"   r   r\      i  )r   r    r   r$   r2   r5   )	r/   r   r|   r}   r"   r\   r   r   r   s	            r1   r   zHttpClient._json_callB  s     ||  
 
 t{((((S((((DK499;;??? 	99;;r3   c                ^    ||t          d          |t          j        |dd          S |S )Nz+Provide either json_body or data, not both.F),:)ensure_ascii
separators)
ValueErrorr5   dumps)r/   r   r   s      r1   r   zHttpClient._prepare_body\  s@      T%5JKKK :ie
SSSSr3   c                    t          | j        pd|          }|rAt          d |                                D             d          }d|v rdnd}|r| | | n|}|S )Nr9   c                    i | ]
\  }}|||S rF   rK   rp   s      r1   rt   z)HttpClient._build_url.<locals>.<dictcomp>p  s    BBB$!QAMAMMMr3   T)doseq?&)r   rZ   r   rw   )r/   r|   r}   r$   query	separators         r1   r   zHttpClient._build_urle  s     dm)r400 	?BB&,,..BBB$  E !$s

I05>S,),U,,,3C
r3   r!   c                D   i }|                     | j                   |                    dd           |                    d| j                   |                    dd           |+t	          |t
                    r|                    dd           | j        rUd|vrQ| j        \  }}t          j        | d	| 	                    d
                    
                    d          }d| |d<   |r1|                                D ]\  }}|||                                <   |S )Nacceptzapplication/jsonz
user-agentzaccept-encodingzgzip, deflater8   zapplication/json; charset=utf-8authorizationr   r=   asciizBasic )updaterx   
setdefaultrj   r   r#   rh   base64	b64encoder   r.   rw   rA   )	r/   r"   r   prepareduserpwdtokenrr   rs   s	            r1   r   zHttpClient._prepare_headersv  s>    $&-... 	H&8999L$/:::-??? 
4 5 50QRRR ? 	9h>>ID#$__s__%;%;G%D%DEELLWUUE(8(8(8H_%  	( ( (1&'## r3   r    r   c                    |t           v S rF   )RETRY_STATUS_CODES)r/   r    s     r1   r   zHttpClient._should_retry_status  s    +++r3   r&   r%   Mapping[str, str]c                T   |s|S |                     d          pd                                }	 d|v rt          j        |          S d|v rJ	 t	          j        |t          j                   S # t          j        $ r t	          j        |          cY S w xY wn# t          $ r |cY S w xY w|S )Nzcontent-encodingr9   gzipdeflate)r>   rA   r   
decompresszlib	MAX_WBITSr   r   )r/   r&   r"   r'   s       r1   r   zHttpClient._maybe_decompress  s     	NKK 2339r@@BB	!!w///H$$4?7T^ODDDz 4 4 4?7333334	 %  	 	 	NNN	 s5   B B A, ,#BB BB B%$B%)rZ   r#   r"   r[   r\   r]   r^   r   r_   r`   ra   r(   rb   r(   rc   rd   re   r(   rf   r(   rg   r(   rh   ri   rj   r#   r)   rk   )NNNT)r|   r#   r}   r~   r"   r[   r\   r   r   r`   r)   r   )NNNNNT)r|   r#   r   r   r   r   r}   r~   r"   r[   r\   r   r   r`   r)   r   )NNNN)r   r#   r|   r#   r}   r~   r"   r[   r   r   r\   r   r)   r   )NN)r   r   r   r   r\   r   )r   r   r)   r`   )NNNNT)r   r#   r|   r#   r}   r~   r"   r[   r\   r   r   r   r   r`   r)   r   )r   r   r   r   r)   r   rF   )r|   r#   r}   r~   r)   r#   )r"   r[   r   r   r)   r!   )r    r   r)   r`   )r&   r%   r"   r   r)   r%   )rG   rH   rI   __doc__r   r   r   DEFAULT_USER_AGENTrP   r>   r   r   r   r   r   r   r   r   r   r   r   r   r   rK   r3   r1   r   r   :   sf         /3(u00aR@@@!
 
 
  !%!%/3*.)--104,%?% ?% ?% ?% ?%N /3#' 
 
 
 
 
2 /3#' 
 
 
 
 
. $(,0 /3#' 
 
 
 
 
2 $(,0 /3#' 
 
 
 
 
2 $(,0 /3#' 
 
 
 
 
: /3,0#'= = = = =D -1#'	    "    /3#',0     6 TX         "   @, , , ,     r3   r   )'
__future__r   r   r   r5   rz   r   dataclassesr   typingr   r   r   r   r	   r
   urllib.errorr   r   urllib.parser   r   urllib.requestr   r   __all__redis.backoffr   redis.retryr   redis.utilsr   r   r   r   r   r   r   r   rK   r3   r1   <module>r     s   " " " " " "    



  ! ! ! ! ! ! = = = = = = = = = = = = = = = = , , , , , , , , + + + + + + + + + + + + + + + +
H
H
H 6 6 6 6 6 6       " " " " " "@ ...         0' ' ' ' '	 ' ' 'o o o o o o o o o or3   