o
    i3                  
   @  s  d dl mZ d dlm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 d dlmZ zd dlmZmZmZmZ d dlmZ W n eyS Z zed	ed
Z[ww er\d dlmZ edZG dd deZG dd deZG dd deZG dd de
ddZ G dd de
Z!G dd de!Z"G dd de
Z#G dd de
Z$eded Z%G d!d" d"ee% Z&G d#d$ d$e&e Z'G d%d& d&e&e Z(d
S )'    )annotations)datetime)TracebackType)TYPE_CHECKINGAnyGenericLiteral	TypedDictTypeVar)Self)get_base_url_from_token)AsyncClientClientResponseTimeout)
BaseClientz2httpx is required to use the Logfire query clientsN)Tableg      >@c                   @     e Zd ZdZdS )QueryExecutionErrorz4Raised when the query execution fails on the server.N__name__
__module____qualname____doc__ r   r   g/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/logfire/experimental/query_client.pyr          r   c                   @  r   )QueryRequestErrorz)Raised when the query request is invalid.Nr   r   r   r   r   r      r   r   c                   @  r   )InfoRequestErrorzURaised when the request for read token info fails because of unavailable information.Nr   r   r   r   r   r   #   r   r   c                   @  s"   e Zd ZU dZded< ded< dS )ReadTokenInfoz!Information about the read token.strorganization_nameproject_nameNr   r   r   r   __annotations__r   r   r   r   r   )      
 r   F)totalc                   @  s*   e Zd ZU dZded< ded< ded< dS )	ColumnDetailszFThe details of a column in the row-oriented JSON-format query results.r    namer   datatypeboolnullableNr#   r   r   r   r   r'   0   s
   
 r'   c                   @     e Zd ZU dZded< dS )
ColumnDatazFThe data of a column in the column-oriented JSON-format query results.z	list[Any]valuesNr#   r   r   r   r   r-   8      
 r-   c                   @  r,   )QueryResultsz5The (column-oriented) results of a JSON-format query.zlist[ColumnData]columnsNr#   r   r   r   r   r0   >   r/   r0   c                   @  s"   e Zd ZU dZded< ded< dS )RowQueryResultsz0The row-oriented results of a JSON-format query.zlist[ColumnDetails]r1   zlist[dict[str, Any]]rowsNr#   r   r   r   r   r2   D   r%   r2   T)boundc                   @  s4   e Zd Zdd
dZ				d d!ddZd"ddZdS )#_BaseLogfireQueryClientbase_urlr    
read_tokentimeoutr   clienttype[T]client_kwargsr   c                 K  sB   || _ || _|| _|di }||d< |d|||d|| _d S )Nheadersauthorization)r9   r7   r=   r   )r7   r8   r9   popr:   )selfr7   r8   r9   r:   r<   r=   r   r   r   __init__O   s   z _BaseLogfireQueryClient.__init__NFsqlmin_timestampdatetime | Nonemax_timestamplimit
int | Nonerow_orientedr*   returndict[str, str]c                 C  sL   d|i}|d urt ||d< |rd|d< |r| |d< |r$| |d< |S )NrB   rF   true	json_rowsrC   rE   )r    	isoformat)r@   rB   rC   rE   rF   rH   paramsr   r   r   build_query_paramsW   s   z*_BaseLogfireQueryClient.build_query_paramsresponser   Nonec                 C  sD   |j dkrt| |j dkrt| |j dks J |jd S )Ni  i     )status_coder   jsonr   content)r@   rP   r   r   r   handle_response_errorsj   s
   

z._BaseLogfireQueryClient.handle_response_errors)
r7   r    r8   r    r9   r   r:   r;   r<   r   NNNF)rB   r    rC   rD   rE   rD   rF   rG   rH   r*   rI   rJ   )rP   r   rI   rQ   )r   r   r   rA   rO   rV   r   r   r   r   r6   N   s    
r6   c                         e Zd ZdZdefd6 fddZd7ddZ			d8d9ddZd:ddZ			d8d;d$d%Z				d8d<d'd(Z
			d8d=d*d+Z			d8d>d,d-Z				.d?d@d4d5Z  ZS )ALogfireQueryClientz/A synchronous client for querying Logfire data.Nr8   r    r7   
str | Noner9   r   r<   r   c                   *   |pt |}t j|||tfi | d S N)r   superrA   r   )r@   r8   r7   r9   r<   	__class__r   r   rA   u      zLogfireQueryClient.__init__rI   r   c                 C  s   | j   | S r\   )r:   	__enter__r@   r   r   r   ra      s   
zLogfireQueryClient.__enter__exc_typetype[BaseException] | None	exc_valueBaseException | None	tracebackTracebackType | NonerQ   c                 C  s   | j ||| d S r\   )r:   __exit__r@   rc   re   rg   r   r   r   ri      s   zLogfireQueryClient.__exit__r   c                 C  sJ   | j d}| | | }z
|d |d dW S  ty$   tdw )%Get information about the read token./v1/read-token-infor!   r"   r!   r"   ZThe read token info response is missing required fields: organization_name or project_namer:   getrV   rT   KeyErrorr   r@   rP   
token_infor   r   r   info   s   
zLogfireQueryClient.inforB   rC   rD   rE   rF   rG   r0   c                 C     | j d||||dd}| S )JQuery Logfire data and return the results as a column-oriented dictionary.application/jsonFacceptrB   rC   rE   rF   rH   _queryrT   r@   rB   rC   rE   rF   rP   r   r   r   
query_json      zLogfireQueryClient.query_jsonr2   c                 C  ru   )GQuery Logfire data and return the results as a row-oriented dictionary.rw   Trx   rz   r|   r   r   r   query_json_rows   r~   z"LogfireQueryClient.query_json_rowsr   c           
   
   C  s   zddl }W n ty } ztd|d}~ww | jd||||d}|j|j}| }	W d   |	S 1 s9w   Y  |	S zQuery Logfire data and return the results as a pyarrow Table.

        Note that pyarrow must be installed for this method to succeed.

        You can use `polars.from_arrow(result)` to convert the returned table to a polars DataFrame.
        r   Nz1pyarrow is required to use the query_arrow methodz#application/vnd.apache.arrow.streamry   rB   rC   rE   rF   pyarrowImportErrorr{   ipcopen_streamrU   read_all
r@   rB   rC   rE   rF   r   erP   readerarrow_tabler   r   r   query_arrow   s&   


zLogfireQueryClient.query_arrowc                 C  s   | j d||||d}|jS )Query Logfire data and return the results as a CSV-format string.

        Use `polars.read_csv(StringIO(result))` to convert the returned CSV to a polars DataFrame.
        text/csvr   r{   textr|   r   r   r   	query_csv   s   zLogfireQueryClient.query_csvFry   NLiteral['application/json', 'application/vnd.apache.arrow.stream', 'text/csv']rH   r*   r   c           	      C  s6   |  |||||}| jjdd|i|d}| | |S Nz	/v1/queryry   )r=   rN   rO   r:   rp   rV   	r@   ry   rB   rC   rE   rF   rH   rN   rP   r   r   r   r{      s   	
zLogfireQueryClient._query)r8   r    r7   rZ   r9   r   r<   r   rI   r   NNNrc   rd   re   rf   rg   rh   rI   rQ   rI   r   
rB   r    rC   rD   rE   rD   rF   rG   rI   r0   
rB   r    rC   rD   rE   rD   rF   rG   rI   r2   
rB   r    rC   rD   rE   rD   rF   rG   rI   r   
rB   r    rC   rD   rE   rD   rF   rG   rI   r    rW   ry   r   rB   r    rC   rD   rE   rD   rF   rG   rH   r*   rI   r   )r   r   r   r   DEFAULT_TIMEOUTrA   ra   ri   rt   r}   r   r   r   r{   __classcell__r   r   r^   r   rY   r   @    


 rY   c                      rX   )AAsyncLogfireQueryClientz1An asynchronous client for querying Logfire data.Nr8   r    r7   rZ   r9   r   async_client_kwargsr   c                   r[   r\   )r   r]   rA   r   )r@   r8   r7   r9   r   r^   r   r   rA     r`   z AsyncLogfireQueryClient.__init__rI   r   c                   s   | j  I d H  | S r\   )r:   
__aenter__rb   r   r   r   r     s   z"AsyncLogfireQueryClient.__aenter__rc   rd   re   rf   rg   rh   rQ   c                   s   | j |||I d H  d S r\   )r:   	__aexit__rj   r   r   r   r     s   z!AsyncLogfireQueryClient.__aexit__r   c                   sR   | j dI dH }| | | }z
|d |d dW S  ty(   tdw )rk   rl   Nr!   r"   rm   rn   ro   rr   r   r   r   rt     s   
zAsyncLogfireQueryClient.inforB   rC   rD   rE   rF   rG   r0   c                   &   | j d||||ddI dH }| S )rv   rw   Frx   Nrz   r|   r   r   r   r}   (     z"AsyncLogfireQueryClient.query_jsonr2   c                   r   )r   rw   Trx   Nrz   r|   r   r   r   r   :  r   z'AsyncLogfireQueryClient.query_json_rowsr   c           
   
     s   zddl }W n ty } ztd|d}~ww | jd||||dI dH }|j|j}| }	W d   |	S 1 s=w   Y  |	S r   r   r   r   r   r   r   L  s(   


z#AsyncLogfireQueryClient.query_arrowc                   s"   | j d||||dI dH }|jS )r   r   r   Nr   r|   r   r   r   r   i  s   z!AsyncLogfireQueryClient.query_csvFry   r   rH   r*   r   c           	        s>   |  |||||}| jjdd|i|dI d H }| | |S r   r   r   r   r   r   r{   }  s
   	
zAsyncLogfireQueryClient._query)r8   r    r7   rZ   r9   r   r   r   r   r   r   r   r   r   r   r   rW   r   )r   r   r   r   r   rA   r   r   rt   r}   r   r   r   r{   r   r   r   r^   r   r      r   r   ))
__future__r   r   typesr   typingr   r   r   r   r	   r
   typing_extensionsr   logfire._internal.configr   httpxr   r   r   r   httpx._clientr   r   r   r   r   r   RuntimeErrorr   r   r   r   r'   r-   r0   r2   r4   r6   rY   r   r   r   r   r   <module>   s:     
$ 