
    8P[i+                    j   d dl m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Zd dl	m
Z
 d dlmZ d dlZ ej                         Zej"                  j%                  ed      Zej"                  j%                  ej"                  j)                  e      d      Z	 	 	 	 	 	 ddZdd	Zd
 Zd Z	 	 	 d	 	 	 	 	 ddZy)    )annotationsN)	Annotated)print)Optionz	README.mdzdeploy_space_action.yamlc                |   i }t         j                  j                  t              }| t	        d| d      xs |} t        |       }|| k7  rt        d| d       ||d<   |t        j                  t              D ]  }t         j                  j                  t        |      }t         j                  j                  |      r|j                  d      sXt        |dd	      5 }|j                         }d
|v r|}	 d d d         n	 d d d         t	        d|rd| dnd d      xs |}|rt         j                  j                  |      st        d      ||d<   d|d<   t        j                   |d<   t#        j$                  t&        |       t	        ddj                  d t"        j(                  D               d      xs d|d<   i }	t	        d      dk(  r$	 t	        d      }
|
snt	        d|
 d      }||	|
<   #|	|d <   t         j                  j                  t        d!      }t         j                  j                  |      sWt	        d"      j+                         dk(  r;	 t	        d#      }|sn,t        |d$d%      5 }|j-                  |d&z          d d d        :t	        d'      j+                         dk(  rt	        d(      xs d)}t         j                  j                  t        d*      }t        j.                  t         j                  j1                  |      d+       t        t2        d%      5 }|j                         }d d d        j5                  d,|      }t        |d-d%      5 }|j-                  |       d d d        t        d.       |S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   jxY w# 1 sw Y   <xY w)/NzEnter Spaces app title [z]: zFormatted to z. titlez.pyutf-8ignore)encodingerrorszimport gradiozEnter Gradio app file [] z: zFailed to find Gradio app file.app_filegradiosdksdk_versionzEnter Spaces hardware (z, c              3  4   K   | ]  }|j                     y w)N)value).0hardwares     n/var/www/html/chatbot/Makanify-Chatbot-2/venv/lib/python3.12/site-packages/gradio/cli/commands/deploy_space.py	<genexpr>z.add_configuration_to_readme.<locals>.<genexpr>>   s     /m8/ms   z) [cpu-basic]: z	cpu-basicr   zAny Spaces secrets (y/n) [n]: yTz(Enter secret name (leave blank to end): zEnter secret value for secretsrequirements.txtz)Create requirements.txt file? (y/n) [n]: z)Enter a dependency (leave blank to end): ar   
zGCreate Github Action to automatically update Space on 'git push'? [n]: zEnter branch to track [main]: mainz".github/workflows/update_space.yml)exist_okz$branchwzGithub Action created. Add your Hugging Face write token (from https://huggingface.co/settings/tokens) as an Actions Secret named 'hf_token' to your GitHub repository. This can be set in your repository's settings page.)ospathbasenamerepo_directoryinputformat_titler   listdirjoinisfileendswithopenreadexistsFileNotFoundErrorgr__version__huggingface_hubmetadata_savereadme_fileSpaceHardwarelowerwritemakedirsdirnamegithub_action_templatereplace)r   r   configurationdir_nameformatted_titlefile	file_pathfcontentr   secret_namesecret_valuerequirements_filerequirementtrack_branchgithub_action_filegithub_action_contents                    r   add_configuration_to_readmerK      s    Mww/H}0
#>?K8"5)O%o.b12,M'JJ~. 		D^T:I77>>),DMM%4Hi'(C q&&("g-#H	 - 		 *hQxj?B*OrRS  	 277>>(3 ABB (M*#M%#%>>M- !!+}= 	%dii/mOlOl/m&m%nn}~	
 	 	 * G-.#5 JKK #:;-r!JKL#/GK    'M)^5GHGGNN,-=>DDF#M KLK'w? ,1d*+,	  	U	

%'	
 =>H&WW\\@
 	BGGOO$67$G(7; 	-q$%FFH!	- 5 = =i V$cG< 	+GG)*	+ 	 j	
 I X, ,	- 	-	+ 	+s0    N:N,N&%N2N	N#&N/2N;c                    | j                  dd      } t        j                  dd|       } t        j                  dd|       } | j                  d      r| dd  } | j                  d      r| S )	N _z[^a-zA-Z0-9\-._]r   z-+-.   )r<   resub
startswith)r   s    r   r(   r(   q   se    MM#s#EFF&E2EFF4e$E


3
ab	 

3
L    c                    	 t        j                  g dddd      } | j                  j                         s/t	        d       t	        d       t        j                  ddgd       t        j                  g d	ddd      }|j                  j                         s&t	        d
       t        d      }|st	        d       y|S t	        d| j                  j                          d       t	        d|j                  j                          d       |j                  j                         S # t         j                  $ rr}t	        d| d       t	        d       	 t        j                  ddgd       n3# t         j                  $ r}t	        d| d       Y d}~Y d}~yd}~ww xY wY d}~yd}~wt        $ r t	        d       Y yw xY w)zFCheck if user is logged in to Google Cloud and has a project selected.)gcloudauthlistz--filter=status:ACTIVETchecktextcapture_outputzA[bold yellow]You are not logged in to Google Cloud.[/bold yellow]z1Running 'gcloud init' to set up authentication...rW   init)r[   )rW   configz	get-valueprojectz?[bold yellow]No Google Cloud project is selected.[/bold yellow]z$Enter your Google Cloud project ID: z1[red]Project ID is required for deployment.[/red]Nu   [green]✓ Authenticated as: z[/green]u   [green]✓ Project: z5[bold red]Error checking Google Cloud configuration: z[/bold red]z0Running 'gcloud init' to set up configuration...z"[red]Failed to run 'gcloud init': [/red]FzK[bold red]gcloud CLI not found. Please install Google Cloud SDK.[/bold red])
subprocessrunstdoutstripr   r'   CalledProcessErrorr0   )auth_resultproject_result
project_ide
init_errors        r   check_gcloud_authrl   z   s   , nn@	
 !!'')UVEFNNHf-T:#8	
 $$**,STEFJIJ-k.@.@.F.F.H-IRS$^%:%:%@%@%B$C8LM$$**,,(( EaSTU@A	NNHf-T:,, 	6zl&IJ5	 ;   Y	
 	sU   B<D) ?D) A'D) )G<F)E10F)1F!FF)F!!F))GGc                 0   t        j                  d      st        d       yt               } | st        d       yt        j
                  j                  d      s+t        j
                  j                  d      st        d       yd}t        j
                  j                  |      st        d	t        j                   d
      j                         dk7  rWt        |dd      5 }|j                  dt        j                   d       ddd       t        dt        j                          nt        d       yt        |d      5 }|j                         }ddd       dvrt        dt        j                   d      j                         dk7  rWt        |dd      5 }|j                  dt        j                   d       ddd       t        dt        j                   d       t        d       	 g d}| r|j                  d| g       t        j                   |ddd       t        d       y# 1 sw Y   ,xY w# 1 sw Y   xY w# 1 sw Y   xY w# t        j"                  $ r}t        d | d!       Y d}~yd}~wt$        $ r t        d       Y yw xY w)"zODeploy a Gradio app to Google Cloud Run. Always uses app.py as the entry point.rW   z[bold red]gcloud CLI is not installed.[/bold red]
Please install the Google Cloud SDK from: [link]https://cloud.google.com/sdk/docs/install[/link]NzZ[bold red]Google Cloud configuration failed. Please run 'gcloud init' manually.[/bold red]app.pyzmain.pyz[bold red]Error:[/bold red] app.py and main.py not found. Google Cloud Run deployment requires app.py or main.py as the entry point.r   zkA requirements.txt file is necessary for Google Cloud Run deployment. Create requirements.txt with gradio==z? (y/n) [y]: nr"   r	   r   zgradio==r   z&Created requirements.txt with gradio==z'
[yellow]Deployment cancelled.[/yellow]r   zAdd gradio==z! to requirements.txt? (y/n) [y]: r   zAdded gradio==z to requirements.txtz-[bold]Deploying to Google Cloud Run...[/bold])rW   rc   deployz
--source=.z--labels=created-by=gradioz	--projectTFrZ   u'   [green]✓ Deployment complete![/green]z[red]Deployment failed: ra   )shutilwhichr   rl   r#   r$   r/   r'   r1   r2   r7   r-   r8   r.   extendrb   rc   rf   KeyboardInterrupt)ri   rF   rB   requirements_contentdeploy_commandrj   s         r   deploy_to_gcloudrw      ss   <<!E	

 	"$Jh	
 	77>>(#BGGNN9,E S	
 	*77>>+,}  A  M  M  ~N  N[  \eg
 'w? 71(2>>"2"567:2>>:JKL<=#g6 	,!#$668 	, //r~~..OPeg
 'w? 71(2>>"2"567N2>>"22FGH	
9:
 !!;
";< 		
 	78O7 7	, 	,7 70 (( (623 89sB   !$H/H<$I1=I /H9<IIJ'I;;JJc           	        |dk(  r|r|dk7  rt        d       t                y |dk7  rt        d| d       y t        j                  d      dk(  ry t	        j
                         }d }d}	 |j                         }|d	   d
   d   dk7  rd}|r1t        d       t	        j                  d       |j                         }d }t        j                  j                  t              r	 t	        j                  t              }|t        dt         d       t        | |      }|j!                  |d   ddd|j#                  d            j$                  }|j'                  |dt               |j#                  d      r.|d   j)                         D ]  \  }}	|j+                  |||	        t        d|        y # t        $ r d}Y 9w xY w# t        $ r Y w xY w)NrW   rn   zm[yellow]Warning:[/yellow] --app-file is ignored for Google Cloud Run deployment. Using app.py as entry point.spacesz[red]Unknown provider: z!. Use 'spaces' or 'gcloud'.[/red]SYSTEMFrX   accessTokenroler8   Tz2Need 'write' access token to create a Spaces repo.)add_to_git_credentialzCreating new Spaces Repo in 'z<'. Collecting metadata, press Enter to accept default value.r   r   spacer   )	space_sdk	repo_typer!   space_hardware)repo_idr   folder_pathr   z1Space available at https://huggingface.co/spaces/)r   rw   r#   getenvr3   HfApiwhoamiOSErrorloginr$   r/   r5   metadata_load
ValueErrorr&   rK   create_repogetr   upload_folderitemsadd_space_secret)
r   r   providerhf_apir   r   r=   space_idrD   rE   s
             r   rp   rp      s     8H, 	8'z1RST	yyh&""$FFE&>-(0G;E BCE:!%M	ww~~k"	+99+FM +N+;;wx	
 4

 !!g$((4 "  g  "  
 #)6y)A)G)G)I 	I%K##Hk<H	I	=hZ
HIM    		s$   * F5 #G 5GG	GG)r   
str | Noner   r   returndict)r   str)NNry   )r   z6Annotated[str | None, Option(help='Spaces app title')]r   zDAnnotated[str | None, Option(help='File containing the Gradio app')]r   zLAnnotated[str | None, Option(help='Deployment provider (spaces or gcloud)')])
__future__r   r#   rR   rq   rb   typingr   r3   richr   typerr   r   r1   getcwdr&   r$   r*   r5   r:   __file__r;   rK   r(   rl   rw   rp    rU   r   <module>r      s    " 	 	       ggll>;7GGOOH9 
XXX 
Xv0fL` EI 	 	EJAEJEJ
EJrU   