Ë
    -Œ:j+  ã            
       ó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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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© ó    úa/var/www/html/tokenscope/api/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>7   s   è ø€ ÒI¨&˜F 1�IÑIùó   ‚c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N)Útuple)r"   Úrows     r   r$   z(execute_raw_sql_query.<locals>.<genexpr>8   s   è ø€ ÒC¨œ˜sŸÑCùs   ‚)Ú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à×#Ñ#Ó%ð Ð!Ø×ÑÕð "ô	 ÑI°H×4HÑ4HÔIÓIˆGÜÑC¨x×/@Ñ/@Ó/BÔCÓCˆDØ7;Ö<°”Dœ˜W cÓ*Õ+Ò<àÐ!Ø×ÑÕð "ùò =øàÐ!Ø×ÑÕð "ú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   € Ü
ˆ5ƒz�Q‚ÜÐ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   Úduckdbz¤DuckDB 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-   K   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z  dz  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__p   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.sqls   s   € Ü!¨d×.>Ñ.>ÐQU×QgÑQgÐotÔuÐur   c                  ó   — y r'   r   rY   s    r   r3   z_DuckDBCliConnection.closev   s   € Ør   )r   N)
r   r   r   r   r   r   Úboolr[   r.   r3   r   r   r   rI   rI   f   s@   … ñð
 ÓØ�‰:˜ÑÓó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   è ø€ Ò? �T�F˜!”*Ñ?ù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ð
 —Y‘Y˜u¨¯
©
°SÑ(8Ð'9Ñ9Ó:ˆ
ô —‘Ø×Ñ˜wÐ'ØØØØô
ˆð ×Ñ Ò!Ø"ŸM™M×/Ñ/Ó1Òj°V·]±]×5HÑ5HÓ5JÒjÐNjˆMÜ˜}Ó-Ð-ô �z‰z˜&Ÿ-™-×-Ñ-Ó/Ó0Ð0r   N)
r   r   r   r   r   r   Úlistr6   r   r2   r   r   r   r1   r1   z   s7   … ñð
 ÓØ˜3‘iÓØƒJð1˜˜d 3¨ 8™nÑ-ô 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   € Ø€}˜ ™Ü“ˆáØˆ	à—M‘M # tÓ,€MÜ ×)Ñ)×1Ñ1°#°tÓ<Ðà
JÈ=È/ÐYcÐdtÐcuÐuwÐxØ
FÀ}ÀoÐUWÐ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  ðó Û 	Û Û Ý !ß ,Ñ ,å Ý ñ Ûñ �$Ô÷ð ó ðð IMò  Sð °C¸$±JÀÑ4Eð ÐQUÐVZÐ[^Ð`cÐ[cÑVdÑQeó ð0	Y Sð 	Y¨Tó 	YðØ�‰:˜Ñðà
Ð>Ñ?óð6 ÷ð ó ðð& ÷"1ð "1ó ð"1ðJ¨3°©:¸Ñ+<ð ÀÀcÁô r   