
    i+              
          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z  dz  deeeef                  fdZdeddfdZdeez  dz  de	d         fdZe G d d                      Ze G d d                      Zdeez  dz  dee         fdZdS )    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<   dS )DatasetParquetEntryzDRepresents a single parquet file available for a dataset on the Hub.configspliturlsizeN)__name__
__module____qualname____doc__str__annotations__int     `/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/huggingface_hub/_dataset_viewer.pyr   r      s:         NNKKKJJJ	HHH
IIIIIr   r   token	sql_queryr   returnc                   |                                                      d                                           }t          |           d }	 t          |          }|                    |          }|t          d          t          |t                    r+|                                ||	                                 S S t          d |j        D                       t          d |                                D                       }fd|D             ||	                                 S S # ||	                                 w w xY w)N;r   zSQL query must return rows.c              3   &   K   | ]}|d          V  dS )r   Nr   ).0columns     r   	<genexpr>z(execute_raw_sql_query.<locals>.<genexpr>7   s&      II&F1IIIIIIIr   c              3   4   K   | ]}t          |          V  d S N)tuple)r"   rows     r   r$   z(execute_raw_sql_query.<locals>.<genexpr>8   s(      CCsCCCCCCr   c                 J    g | ]}t          t          |                     S r   )dictzip)r"   r(   columnss     r   
<listcomp>z)execute_raw_sql_query.<locals>.<listcomp>9   s+    <<<DWc**++<<<r   )striprstrip_raise_on_forbidden_query_get_duckdb_connectionsql
ValueError
isinstance_DuckDBCliRelationexecutecloser'   descriptionfetchall)r   r   normalized_query
connectionrelationrowsr,   s         @r   execute_raw_sql_queryr>   '   sd    ((//44::<<.///J+%888
>>"233:;;;h 233 	=##%% ! "	 IIH4HIIIIIGCCx/@/@/B/BCCCCCD<<<<t<<<! ":! "s   AD1 AD1 1E
queryc                     t          |           dk    rt          d          |                                 D ]V}|                                }|                    d          r+|dd                                         rt          d          Wd S )Nr   zSQL query cannot be empty..r      z8DuckDB CLI meta-commands are not allowed in SQL queries.)lenr3   
splitlineslstrip
startswithisalpha)r?   linestrippeds      r   r0   r0   ?   s    
5zzQ5666   "" Y Y;;==s## 	Y1(=(=(?(? 	YWXXXY Yr   )zduckdb.DuckDBPyConnection_DuckDBCliConnectionc                 b   	 dd l }nN# t          $ rA}t          j        d          }|t          d          |t	          ||           cY d }~S d }~ww xY w |j                    }	 t          |           D ]}|                    |           |S # t          $ r |	                                  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   )
rL   ImportErrorshutilwhichrJ   connect_build_duckdb_secret_statementsr6   	Exceptionr7   )r   rL   errorduckdb_binaryr;   	statements         r   r1   r1   K   s   L L L LX.. U   $UKKKKKKKKKL  !!J8?? 	* 	*Iy))))   s&    
A6AAA%(B  B.c                   T    e Zd ZU dZeed<   eez  dz  ed<   ddZdeddfd	Zdd
Z	dS )rJ   zjDuckDB connection.

    Mimics the DuckDB Python API, but runs the queries via the DuckDB CLI binary.
    rM   Nr   r   c                 8    t          | j                  | _        d S r&   )rR   r   _setup_statementsselfs    r   __post_init__z"_DuckDBCliConnection.__post_init__p   s    !@!L!Lr   r?   r5   c                 :    t          | j        | j        |          S )N)rM   setup_statementsr?   )r5   rM   rY   )r[   r?   s     r   r2   z_DuckDBCliConnection.sqls   s    !d.>QUQgotuuuur   c                     d S r&   r   rZ   s    r   r7   z_DuckDBCliConnection.closev   s    r   )r   N)
r   r   r   r   r   r   boolr\   r2   r7   r   r   r   rJ   rJ   f   s          
 :M M M Mv v!5 v v v v     r   rJ   c                   f    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	dS )r5   zhDuckDB relation.

    Mimics the DuckDB Python API, but runs the queries via the DuckDB CLI binary.
    rM   r^   r?   r   c                    g }| j         r#dt          j         gd | j         D             d}d                    || j        dz   gz             }t          j        | j        dg|ddd	          }|j        d
k    rC|j	        
                                p|j        
                                pd}t          |          t          j        |j        
                                          S )Nz.output c              3       K   | ]	}| d V  
dS )r    Nr   )r"   stmts     r   r$   z-_DuckDBCliRelation.execute.<locals>.<genexpr>   s(      ??T***??????r   z.output
r    z-jsonTF)inputcapture_outputtextcheckr   zDuckDB CLI command failed.)r^   osdevnulljoinr?   
subprocessrunrM   
returncodestderrr.   stdoutRuntimeErrorjsonloads)r[   setup
full_queryresulterror_messages        r   r6   z_DuckDBCliRelation.execute   s     	'2:''??)>??? E
 YYu
S(8'99::
 w'
 
 
 !!"M//11jV]5H5H5J5JjNjM}--- z&---//000r   N)
r   r   r   r   r   r   listr*   r   r6   r   r   r   r5   r5   z   so          
 3iJJJ1d38n- 1 1 1 1 1 1r   r5   c                     | | du rt                      } | sg S |                     dd          }t          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   rR   rR      s    } 	MM#t,,M )11#t<<x=xxdtxxxX}XXX r   )rs   rj   rO   rm   dataclassesr   typingr   r   r    r   utilsr	   rL   r   r   r`   ry   r*   r>   r0   r1   rJ   r5   rR   r   r   r   <module>r      s*    				      ! ! ! ! ! ! , , , , , , , , , ,              MMM $        IM   S C$J4E QUVZ[^`c[cVdQe    0	YS 	YT 	Y 	Y 	Y 	Y:
>?   6        & "1 "1 "1 "1 "1 "1 "1 "1J3:+< c      r   