
    qiN              
       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	 ddl
mZ ddlmZ erd dlZ ed       G d	 d
             Zdddede	eedf   deeeef      fdZdeddfdZde	eedf   de	d   fdZe G d d             Ze G d d             Zde	eedf   dee   fdZy)    N)	dataclass)TYPE_CHECKINGAnyUnion   )	constants)	get_tokenT)frozenc                   :    e Zd ZU dZeed<   eed<   eed<   eed<   y)DatasetParquetEntryzDRepresents a single parquet file available for a dataset on the Hub.configspliturlsizeN)__name__
__module____qualname____doc__str__annotations__int     Q/opt/pipecat/venv/lib/python3.12/site-packages/huggingface_hub/_dataset_viewer.pyr   r      s    NKJ	H
Ir   r   token	sql_queryr   returnc          	      P   | j                         j                  d      j                         }t        |       d }	 t        |      }|j	                  |      }|t        d      t        |t              r#|j                         ||j                          S S t        d |j                  D              }t        d |j                         D              }|D cg c]  }t        t        ||             c}||j                          S S c c}w # ||j                          w w xY w)N;r   zSQL query must return rows.c              3   &   K   | ]	  }|d      yw)r   Nr   ).0columns     r   	<genexpr>z(execute_raw_sql_query.<locals>.<genexpr>8   s     I&F1II   c              3   2   K   | ]  }t        |        y wN)tuple)r"   rows     r   r$   z(execute_raw_sql_query.<locals>.<genexpr>9   s     CsCs   )striprstrip_raise_on_forbidden_query_get_duckdb_connectionsql
ValueError
isinstance_DuckDBCliRelationexecutecloser(   descriptionfetchalldictzip)r   r   normalized_query
connectionrelationcolumnsrowsr)   s           r   execute_raw_sql_queryr=   (   s    (//4::<./J+%8
>>"23:;;h 23##% ! "	 IH4H4HIIGCx/@/@/BCCD7;<DWc*+<! " =! "s%   A	D A D D5D D D%queryc                     t        |       dk(  rt        d      | j                         D ]B  }|j                         }|j	                  d      s%|dd j                         s9t        d       y )Nr   zSQL query cannot be empty..r      z8DuckDB CLI meta-commands are not allowed in SQL queries.)lenr/   
splitlineslstrip
startswithisalpha)r>   linestrippeds      r   r,   r,   @   sk    
5zQ566   " Y;;=s#1(=(=(?WXXYr   )zduckdb.DuckDBPyConnection_DuckDBCliConnectionc                 >   	 dd l } |j
                         }	 t        |       D ]  }|j                  |        |S # t        $ r:}t        j                  d      }|t        d      |t	        ||       cY d }~S d }~ww xY w# t        $ r |j                           w xY w)Nr   duckdbzDuckDB is required for `hf datasets sql`. Install the Python package with `pip install duckdb` or install the DuckDB CLI binary (for example `brew install duckdb`).)binary_pathr   )
rK   ImportErrorshutilwhichrI   connect_build_duckdb_secret_statementsr2   	Exceptionr3   )r   rK   errorduckdb_binaryr9   	statements         r   r-   r-   L   s    L  !J8? 	*Iy)	*  LX. U  $UKKL   s&   ; "B 	A>/A93A>9A>Bc                   R    e Zd ZU dZeed<   eeedf   ed<   ddZdeddfd	Z	dd
Z
y)rI   zjDuckDB connection.

    Mimics the DuckDB Python API, but runs the queries via the DuckDB CLI binary.
    rL   Nr   r   c                 8    t        | j                        | _        y r'   )rQ   r   _setup_statementsselfs    r   __post_init__z"_DuckDBCliConnection.__post_init__q   s    !@!Lr   r>   r1   c                 F    t        | j                  | j                  |      S )N)rL   setup_statementsr>   )r1   rL   rX   )rZ   r>   s     r   r.   z_DuckDBCliConnection.sqlt   s    !d.>.>QUQgQgotuur   c                      y r'   r   rY   s    r   r3   z_DuckDBCliConnection.closew   s    r   )r   N)r   r   r   r   r   r   r   boolr[   r.   r3   r   r   r   rI   rI   g   sB    
 dD!!Mv v!5 vr   rI   c                   R    e Zd ZU dZeed<   ee   ed<   eed<   deeeef      fdZ	y)r1   zhDuckDB relation.

    Mimics the DuckDB Python API, but runs the queries via the DuckDB CLI binary.
    rL   r]   r>   r   c                    g }| j                   r)dt        j                   gd | j                   D        d}dj                  || j                  dz   gz         }t        j                  | j                  dg|ddd	      }|j                  d
k7  rE|j                  j                         xs |j                  j                         xs d}t        |      t        j                  |j                  j                               S )Nz.output c              3   &   K   | ]	  }| d   yw)r    Nr   )r"   stmts     r   r$   z-_DuckDBCliRelation.execute.<locals>.<genexpr>   s     ?TF!*?r%   z.output
r    z-jsonTF)inputcapture_outputtextcheckr   zDuckDB CLI command failed.)r]   osdevnulljoinr>   
subprocessrunrL   
returncodestderrr*   stdoutRuntimeErrorjsonloads)rZ   setup
full_queryresulterror_messages        r   r2   z_DuckDBCliRelation.execute   s      2::,'?)>)>? E
 YYu

S(8'99:
 w'
 !"MM//1jV]]5H5H5JjNjM}-- zz&----/00r   N)
r   r   r   r   r   r   listr6   r   r2   r   r   r   r1   r1   {   s7    
 3iJ1d38n- 1r   r1   c                     | | du r
t               } | sg S | j                  dd      }t        j                  j                  dd      }d| d| dd| dgS )NT'z''z@CREATE OR REPLACE SECRET hf_hub_token (TYPE HTTP, BEARER_TOKEN 'z
', SCOPE 'z')z<CREATE OR REPLACE SECRET hf_token (TYPE HUGGINGFACE, TOKEN ')r	   replacer   ENDPOINT)r   escaped_tokenescaped_endpoints      r   rQ   rQ      sr    }	MM#t,M ))11#t<
J=/Ycdtcuuwx
F}oUWX r   )rr   ri   rN   rl   dataclassesr   typingr   r   r    r   utilsr	   rK   r   r   r_   rx   r6   r=   r,   r-   rI   r1   rQ   r   r   r   <module>r      s    	   ! , ,    $   NR S E#tT/4J VZ[_`ceh`h[iVj 0	YS 	YT 	YdD!
>?6   & "1 "1 "1J5dD+A d3i r   