
    +j!                     h   d Z ddlZddlZddlZddlmZ h dZdedefdZdedefdZ	dedefd	Z
dedefd
ZdZdedefdZdededz  dedefdZdedefdZdedee         dedefdZdedee         dedefdZ	 ddedee         dededef
dZ	 	 d dededededz  dedeeef         fdZdS )!zCentralized code snippet generation for Gradio API endpoints. Generates Python, JavaScript, and cURL code snippets from API info dicts.    N)Any>   FileAudioImageVideoModel3DImageSliderUploadButtonDownloadButtonobjreturnc                     t          | t                    ocd| v o_|                     d          oJd| v oFt          |                     d          t                    o| d                             d          dk    S )Nurlmeta_typegradio.FileData)
isinstancedictgetr   s    Y/home/wildlama/visual-decline/.venv/lib/python3.11/site-packages/gradio_client/snippet.py_is_file_datar      s~    3 	:SL	:GGENN	: cM	: swwv--		:
 KOOG$$(99    c                    t          | t                    r<t          |           rdS t          d |                                 D                       S t          | t
          t          f          rt          d | D                       S dS )NTc              3   4   K   | ]}t          |          V  d S N_has_file_data).0vs     r   	<genexpr>z!_has_file_data.<locals>.<genexpr>#   s*      ;;>!$$;;;;;;r   c              3   4   K   | ]}t          |          V  d S r   r   r   items     r   r!   z!_has_file_data.<locals>.<genexpr>%   s*      88D>$''888888r   F)r   r   r   anyvalueslisttupler   s    r   r   r      s    #t < 	4;;cjjll;;;;;;#e}%% 988C8888885r   c                    t          | t                    rt          |           rd| d          dS t          | t          t          f          rd | D             S t          | t                    rd |                                 D             S | S )Nzhandle_file('r   z')c                 ,    g | ]}t          |          S  _replace_file_data_pyr#   s     r   
<listcomp>z)_replace_file_data_py.<locals>.<listcomp>-   s!    <<<%d++<<<r   c                 4    i | ]\  }}|t          |          S r+   r,   r   kr    s      r   
<dictcomp>z)_replace_file_data_py.<locals>.<dictcomp>/   s'    DDD1(++DDDr   r   r   r   r'   r(   itemsr   s    r   r-   r-   )   s    #t .s!3!3 .-s5z----#e}%% =<<<<<<#t EDD		DDDDJr   c                    t          | t                    rt          |           r| d         ddidS t          | t          t          f          rd | D             S t          | t                    rd |                                 D             S | S )Nr   r   r   )pathr   c                 ,    g | ]}t          |          S r+   _simplify_file_datar#   s     r   r.   z'_simplify_file_data.<locals>.<listcomp>7   s!    :::d#D)):::r   c                 4    i | ]\  }}|t          |          S r+   r8   r0   s      r   r2   z'_simplify_file_data.<locals>.<dictcomp>9   s'    BBBda&q))BBBr   r3   r   s    r   r9   r9   3   s    #t Js!3!3 JE
W6G,HIII#e}%% ;::c::::#t CBBciikkBBBBJr   UNQUOTED_GRADIO_c                 t   dt           dt           ffd |           }t          j        |t                    }t	          j        dt           dd|          }|                    dt           dd	          }|                    dt           d
d          }|                    dt           dd          }|S )Nor   c                    | 
t            dS t          | t                    r| r
t            dn	t            dS t          | t                    r5|                     d          r |                     d          rt            |  S t          | t          t          f          rfd| D             S t          | t                    r fd| 	                                D             S | S )NNoneTrueFalsezhandle_file()c                 &    g | ]} |          S r+   r+   )r   r$   _prepares     r   r.   z3_stringify_py.<locals>._prepare.<locals>.<listcomp>I   s!    111tHHTNN111r   c                 .    i | ]\  }}| |          S r+   r+   )r   r1   r    rD   s      r   r2   z3_stringify_py.<locals>._prepare.<locals>.<dictcomp>K   s'    999tq!Axx{{999r   )
	_UNQUOTEDr   boolstr
startswithendswithr'   r(   r   r4   )r=   rD   s    r   rD   z_stringify_py.<locals>._prepareA   s    9%%%%a 	D)*Ci%%%%90C0C0CCa 	%!,,~">"> 	%1::c?? 	%$$$$a$'' 	21111q1111a 	:9999qwwyy9999r   )default"z(handle_file\([^)]*\))"z\1zNone"r?   zTrue"r@   zFalse"rA   )r   jsondumpsrH   resubrF   replace)r   preparedresultrD   s      @r   _stringify_pyrT   @   s    C C       x}}HZ#...FV/Y/// F
 ^^0	000&99F^^0	000&99F^^1	1117;;FMr   valuepython_typelangc                 l   |
|dk    rdndS | 
|dk    rdndS |dv rd|  dS |dk    rt          |           S |dv rQ|dk    r| rdnd	S t          | t                    r!t          |                                           nt          |           S |d
k    rt	          j        |           S |                    d          rd|  dS t          | t                     r| dk    r
|dk    rdndS | S t          j        |           } |dk    rt          |           } |dk    rt          |           } t          |           S )Npyr?   null)stringrH   rL   number)booleanrG   r@   rA   z	List[str]z	Literal[' bash)rH   r   rG   lowerrM   rN   rI   copydeepcopyr9   r-   rT   )rU   rV   rW   s      r   _represent_valuerc   [   sr   vv61}vv61'''5|||h5zz)))4<<"/66/%/t%<%<Ls5zz!!!#e**Lk!!z%   k** 5|||% B;;!T\\66v5M%  Ev~~#E**t||%e,,r   paramc                     |                      d          r|                      d          S |                      d          S )Nparameter_has_defaultparameter_defaultexample_inputr   )rd   s    r   _get_param_valuerj   z   s<    yy()) .yy,---99_%%%r   api_nameparamssrcc                    t          d |D                       }d}|r|dz  }|dg}|                    d| d           g }|D ]}|                    d          p|                    dd	          }t          |          }	|                    d
i                               d          }
t	          |	|
d          }|                    d| d| d           |                    d           |                    |           |                    d|  d           |                    d           |                    d           d                    |          S )Nc              3   Z   K   | ]&}t          |                    d                     V  'dS rh   Nr   r   r   ps     r   r!   z*generate_python_snippet.<locals>.<genexpr>   6      JJa>!%%"8"899JJJJJJr   z from gradio_client import Clientz, handle_filer^   zclient = Client("z")parameter_namelabelinputrV   typerY   	=,zresult = client.predict(z	api_name="z",rB   zprint(result)
)r%   appendr   rj   rc   extendjoin)rk   rl   rm   has_fileimportslinespredict_argsrs   namerU   ptype	formatteds               r   generate_python_snippetr      sz   
 JJ6JJJJJH0G #?"bME	LL,S,,,---L 6 6uu%&&A!%%*A*A ##mR((,,V44$UE488	444	4445555	LL+,,,	LL	LL,,,,---	LL	LL!!!99Ur   c                    d |D             }ddg}t          |          D ]\  }}|                    di           }t          |t                    r|                    dd          nd}|                    dd          }	|                    d| d| d	           |                    d
|	 d| d           |r|                    d           |                    d| d	           d |D             }
g }|D ]}|                    d          p|                    dd          }|                    dd          }	|	|
v r|                    d| d|	 d           dt          |          }|                    di                               d          }t          ||d          }|                    d| d| d           |                    d|  d           |                    |           |                    d           |                    d           |                    d           d                    |          S )Nc                 J    g | ] }|                     d           t          v |!S 	component)r   BLOB_COMPONENTSrr   s     r   r.   z'generate_js_snippet.<locals>.<listcomp>   s.    NNNk(:(:o(M(M1(M(M(Mr   z(import { Client } from "@gradio/client";r^   rh   r   r   zconst response_z = await fetch("z");zconst examplez = await response_z.blob();z%const client = await Client.connect("c                 8    h | ]}|                     d           S r   ri   )r   bps     r   	<setcomp>z&generate_js_snippet.<locals>.<setcomp>   s$    FFFBBFF;//FFFr   ru   rv   rw   z		z	: exampler{   rV   rx   jsz: z%const result = await client.predict("z", {z});zconsole.log(result.data);r|   )		enumerater   r   r   r}   rj   rc   r~   r   )rk   rl   rm   blob_paramsr   ir   exampler   r   blob_component_namesr   rs   r   rU   r   r   s                    r   generate_js_snippetr      s   
 ONfNNNK7<E;'' O O2&&"--(27D(A(AIgkk%$$$rFF;++	BqBB#BBBCCCMYMM!MMMNNNN R	LLAAAABBBFF+FFFL 	= 	=uu%&&A!%%*A*AEE+r**	,,, Bt B Bi B B BCCCC$Q''EEE-,,0088E(t<<I ;t ; ;y ; ; ;<<<<	LLHHHHIII	LL	LL	LL	LL,---99Ur   /root
api_prefixc                 0   |                     d          }|r|nd}|                     d          }t          d |D                       }| | d}g }	g }
|r|D ]d}t          |                    d                    r@|                    d          p|                    dd          }|
                    |           e|	                    d| d	           |	                    d
           i }|D ]}|                    d          p|                    dd          }||
v rd||<   7t          |          }|                    di                               d          }t          ||d          }|||<   d                    d |	                                D                       }d|z   dz   }|
D ]}d}|
                    d|          }| | d| }| | d| }|	                    d| dd| ddd| dg           d                    |	          S )Nr   c              3   Z   K   | ]&}t          |                    d                     V  'dS rp   rq   rr   s     r   r!   z(generate_bash_snippet.<locals>.<genexpr>   rt   r   uploadrh   ru   rv   rw   zFILE_PATH=$(curl -s -X POST z/ -F 'files=@/path/to/your/file' | tr -d '[]" ')r^   FILE_PATH_PLACEHOLDERrV   rx   r_   z, c              3   ,   K   | ]\  }}d | d| V  dS )rL   z": Nr+   r0   s      r   r!   z(generate_bash_snippet.<locals>.<genexpr>   s2      IItq!]]]q]]IIIIIIr   {}z>{"path": "'$FILE_PATH'", "meta": {"_type": "gradio.FileData"}}zcall/v2/zcall/zcurl -X POST z) -s -H "Content-Type: application/json" \z  -d 'z' \z  | awk -F'"' '{ print $4}' \z  | read EVENT_ID; curl -N z
/$EVENT_IDr|   )rstriplstripr%   r   r   r}   rj   rc   r   r4   rQ   r~   )rk   rl   r   r   normalised_rootnormalised_prefixendpoint_namer   
upload_urlr   file_param_namesrs   r   	data_dictrU   r   r   data_entriesdata_str_replacementbase_urlget_urls                          r   generate_bash_snippetr      s    kk#&&O&09

cOOC((MJJ6JJJJJH#>%6>>>JE"$ 
 	. 	.AaeeO4455 .uu-..I!%%2I2I ''--- :      	
 	
 	

 	RI ( (uu%&&A!%%*A*A###5IdOO$Q''EEE-,,0088E(v>>I'IdOO99IIy7H7HIIIIIL\!C'H J JX##$;[II!M#4MMmMMH I"3II-IIG	LLPHPPP#X###-='===		
   99Ur   endpoint_infospace_idc                     |                     dg           }|p|}t          | ||          t          | ||          t          | |||          dS )N
parameters)python
javascriptr_   )r   r   r   r   )rk   r   r   r   r   rl   rm   s          r   generate_code_snippetsr     sc     |R00F

dC *(FC@@)(FC@@%hjII  r   )r   )Nr   )__doc__ra   rM   rO   typingr   r   rG   r   r   r-   r9   rF   rH   rT   rc   r   rj   r'   r   r   r   r   r+   r   r   <module>r      s   N  N   				      	 	 	s t         s s    S S     	s s    6 C  cDj            >&D &S & & & &J 
 		   <))J) 
) 		) ) ) )` 	9 99J9 9 	9
 	9 9 9 9@     Dj	
  
#s(^     r   