
    Zi                         d dl mZmZmZmZmZ d dlmZmZm	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  e
j        e          Z G d de          ZdS )    )AnyDictMappingOptionalTypeVar)quoteurlparse
urlunparseN)	ComponentSettingsSystemc                       e Zd ZU eed<   dZeed<   dZeed<   de	f fdZ
dej        fd	Zedej        fd
            Zededdfd            Ze	 	 	 ddedee         dee         dee         def
d            Z edeeef                   Zededefd            Zedej        ddfd            Zdeeef         fdZdefdZ xZ S )BaseHTTPClient	_settingsNpre_flight_checksg      D@DEFAULT_KEEPALIVE_SECSsystemc                     t                                          |           |j        | _        | j        j        }||nt
          j        | _        |                                 | _	        d S N)
super__init__settingsr   chroma_http_keepalive_secsr   r   keepalive_secs_build_limits_http_limits)selfr   keepalive_setting	__class__s      Z/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/api/base_http_client.pyr   zBaseHTTPClient.__init__   si        NE !, 6 	
 !..00    returnc                     i }| j         
| j         |d<   | j        j        }|||d<   | j        j        }|||d<   t	          j        di |S )Nkeepalive_expirymax_connectionsmax_keepalive_connections )r   r   chroma_http_max_connections%chroma_http_max_keepalive_connectionshttpxLimits)r   limit_kwargsr%   r&   s       r    r   zBaseHTTPClient._build_limits   sk    ')*/3/BL+,.D&.=L*+$(N$X!$08QL45|++l+++r!   c                     | j         S r   )r   r   s    r    http_limitszBaseHTTPClient.http_limits.   s      r!   hostc                     t          |           }d| v r!|j        dvrt          d|j         d          d| v r$|                     d          st          d          d S d S )N/>   httphttpsz%Invalid URL. Unrecognized protocol - .r3   zInvalid URL. Seems that you are trying to pass URL as a host but without                   specifying the protocol. Please add http:// or https:// to the host.)r	   scheme
ValueError
startswith)r0   parseds     r    _validate_hostzBaseHTTPClient._validate_host2   s    $$;;6=0AAAK6=KKK   $;; 7 7;>   ;;;r!   F @  chroma_server_hostchroma_server_ssl_enableddefault_api_pathchroma_server_http_portc           
         d}| }t                               |           |                    d          rt                              d           d}t          |          }|rdn|j        pd}|j        p|j        p| }|sdt          |j
        p|          z   nd}	|j        p|}
|
r|
|k    r|r|nd}
|
                    |pd          s	|r|
|z   nd}
t          || |	 t          |
                    dd	                    dddf          }|S )
NFr3   z/Skipping port as the user is passing a full URLTr4   :r;   z//r2   )r   r:   r8   loggerdebugr	   r6   netlochostnamestrportpathendswithr
   r   replace)r=   r>   r?   r@   
_skip_port_chroma_server_hostr9   r6   net_locrH   rI   full_urls               r    resolve_urlzBaseHTTPClient.resolve_urlA   sY    
0%%&9:::))&11 	LLJKKKJ-..5R6=;RF-H6?H6HEOWC#fk<%<====UW 	 {.. 	@tw'7?##RD}}-344 	G.>F4***BD'''t||D#/F/F)G)GRQST
 
 r!   T)boundparamsc                 >    d |                                  D             S )z&Remove None values from provided dict.c                     i | ]
\  }}|||S r   r'   ).0kvs      r    
<dictcomp>z0BaseHTTPClient._clean_params.<locals>.<dictcomp>g   s    AAAA1=1===r!   )items)rS   s    r    _clean_paramszBaseHTTPClient._clean_paramsd   s!     BAAAAAr!   respc                 f   	 |                                   dS # t          j        $ r Y nw xY wd}	 t          j        | j                  }d|v r]|d         t          j        v rIt          j        |d                  |d                   }| j        	                    d          }|r||_
        n# t          $ r Y nw xY w|r|	 |                                   dS # t          j        $ rK | j        	                    d          }|rt          | j         d| d          t          | j                  w xY w)zKRaises an error if the response is not ok, using a ChromaError if possible.Nerrormessagezchroma-trace-idz (trace ID: ))raise_for_statusr*   HTTPStatusErrorjsonloadstexterrorserror_typesheadersgettrace_idBaseException	Exception)r\   chroma_errorbodyrj   s       r    _raise_chroma_errorz"BaseHTTPClient._raise_chroma_errori   sx   	!!###F$ 	 	 	D	 	:di((D$=F$666#)#5d7m#DT)_#U#UL#|//0ABBH 908- 	 	 	D	  		)!!#####$ 	) 	) 	)|''(9::H G49 E E( E E EFFFTY''(		)s+    **A:B+ +
B87B8 C AD0c                     i S )z&Return headers used for HTTP requests.r'   r.   s    r    get_request_headersz"BaseHTTPClient.get_request_headers   s    	r!   c                     dS )z#Return the API URL for this client.r;   r'   r.   s    r    get_api_urlzBaseHTTPClient.get_api_url   s    rr!   )Fr;   r<   )!__name__
__module____qualname__r   __annotations__r   r   r   floatr   r   r*   r+   r   propertyr/   staticmethodrG   r:   r   boolintrP   r   r   rQ   r[   Responsero   r   rq   rs   __classcell__)r   s   @r    r   r      s        !s!!!$(E(((	1v 	1 	1 	1 	1 	1 	1,u| , , , , !U\ ! ! ! X! S T    \  5:*,15	 #+D> #3- "*#	
 
   \@ 	4S>***ABa BA B B B \B )%. )T ) ) ) \)BWS#X%6    S        r!   r   )typingr   r   r   r   r   urllib.parser   r	   r
   loggingorjsonrc   r*   chromadb.errorsrf   chromadb.configr   r   r   	getLoggerrt   rC   r   r'   r!   r    <module>r      s    8 8 8 8 8 8 8 8 8 8 8 8 8 8 4 4 4 4 4 4 4 4 4 4                   7 7 7 7 7 7 7 7 7 7		8	$	$
B B B B BY B B B B Br!   