o
    !hf3                     @   s4  d dl Z d dlmZ d dlmZmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZ d	d
lmZ d	dl mZ d	dlmZmZ ejddddgidZe eZzd dlZW n eym   dZY nw zd dl mZ! e"e! W n	 ey   Y nw de#ddfddZ$e% dej&dddfdeee#df ej&dde$df de#ddfdd Z%d!ee defd"d#Z'	dLd$d%d&dd'ddddd(	d)eedf d*e(d+e)d,e#d-ee)df d.e(d/e(d0ee(df d1ee(df d2e#d3ee(df ddfd4d5Z*e+ 	dLd$d%d&d'ddd&dd6d)eeedf ej,d7df d*ee(ej&d8df d+ee)ej&d9d:d;f d,ee#ej&d<df d.ee(ej&d=df d0eee(df ej&d>df d1eee(df ej&d?d@dAdf d2ee#ej&dBdf d3eee(df ej&dCdf defdDdEZ-e+ 	dLdFd%ddd'ddd&dd(	d)eeedf ej,d7df d*ee(ej&d8df d+ee)ej&d9d:d;f d,ee#ej&d<df d-eee)df ej&dGdf d.ee(ej&d=df d0eee(df ej&d>df d1eee(df ej&d?d@dAdf d2ee#ej&dBdf d3eee(df ej&dCdf defdHdIZ.dMdJdKZ/dS )N    N)Path)AnyListUnion)print)Tree)	Annotated)get_import_data"get_import_data_from_import_string)FastAPICLIException   )__version__)setup_logging)get_rich_toolkitget_uvicorn_log_configrichhelp_option_namesz-hz--help)rich_markup_modecontext_settingsappvaluereturnc                 C   s    | rt dt d t d S )NzFastAPI CLI version: [green]z[/green])r   r   typerExit)r    r   Q/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/fastapi_cli/cli.pyversion_callback(   s   r   FzEnable verbose output)helpversionz	--versionzShow the version and exit.)r   callbackverbosec                 C   s   |rt jnt j}t|d dS )u  
    FastAPI CLI - The [bold]fastapi[/bold] command line app. 😎

    Manage your [bold]FastAPI[/bold] projects, run your FastAPI apps, and more.

    Read more in the docs: [link=https://fastapi.tiangolo.com/fastapi-cli/]https://fastapi.tiangolo.com/fastapi-cli/[/link].
    )levelN)loggingDEBUGINFOr   )r   r!   	log_levelr   r   r   r    .   s   r    module_pathsc                 C   s   | d }|  rd|j nd|j }t|}| r!|d |}| dd  D ] }|  r5d|j nd|j }||}| rI|d q)|S )Nr   u   🐍 u   📁 u   [dim]🐍 __init__.py[/dim]r   )is_filenamer   is_diradd)r'   rootr)   	root_treetreesub_pathsub_namer   r   r   _get_module_treeE   s    


r1   z	127.0.0.1i@  T )	hostportreloadworkers	root_pathr   
entrypointproxy_headersforwarded_allow_ipspathr3   r4   r5   r6   r7   commandr   r8   r9   r:   c       
         C   s<  t  }|dkrdnd}|jd| ddd |  |d z|r)t|}nt| |d	}W n tyO } z|  |d
|  tjddd d }~ww t	
d|jj  t	
d|jj  |j}|j}|d|j  |  |jrt|j}|j|dd |  |jddd |  |d|j d|j d |  |jd| ddd d| d| }| d}|  |jd| d| dd| d| ddd |dkr|  |jdd d tstd!d |  |d" |  tj|||||||	|
t d#	 W d    d S 1 sw   Y  d S )$Ndevdevelopment
productionz	Starting u    server 🚀FastAPI)tagzYSearching for package file structure from directories with [blue]__init__.py[/blue] files)r;   app_namez[error]r   )codezImporting from zImporting module modulezIImporting the FastAPI app object from the module with the following code:rC   z[underline]from [bold]z[/bold] import [bold]z[/bold]zUsing import string: [blue]z[/]r   zhttp://:z/docszServer started at [link=]zDocumentation at [link=serverzERunning in development mode, for production use: [bold]fastapi run[/]tipz;Could not import Uvicorn, try running 'pip install uvicorn'zLogs:)	r   r3   r4   r5   r6   r7   r9   r:   
log_config)r   print_title
print_liner   r
   r	   r   r   r   loggerdebugmodule_dataextra_sys_pathmodule_import_strimport_stringr'   r1   rB   uvicornrunr   )r;   r3   r4   r5   r6   r7   r<   r   r8   r9   r:   toolkitserver_typeimport_dataerN   rQ   r-   urlurl_docsr   r   r   _runZ   s   





$rZ   )r3   r4   r5   r7   r   r8   r9   r:   zA path to a Python file or package directory (with [blue]__init__.py[/blue] files) containing a [bold]FastAPI[/bold] app. If not provided, a default set of paths will be tried.zThe host to serve on. For local development in localhost use [blue]127.0.0.1[/blue]. To enable public access, e.g. in a container, use all the IP addresses available with [blue]0.0.0.0[/blue].zThe port to serve on. You would normally have a termination proxy on top (another program) handling HTTPS on port [blue]443[/blue] and HTTP on port [blue]80[/blue], transferring the communication to your app.PORT)r   envvarzEnable auto-reload of the server when (code) files change. This is [bold]resource intensive[/bold], use it only during development.zThe root path is used to tell your app that it is being served to the outside world with some [bold]path prefix[/bold] set up in some termination proxy or similar.zThe name of the variable that contains the [bold]FastAPI[/bold] app in the imported module or package. If not provided, it is detected automatically.z--entrypointz-ezNThe FastAPI app import string in the format 'some.importable_module:app_name'.zdEnable/Disable X-Forwarded-Proto, X-Forwarded-For, X-Forwarded-Port to populate remote address info.ziComma separated list of IP Addresses to trust with proxy headers. The literal '*' means trust everything.c          	      C   s    t | ||||||d||d
 dS )u  
    Run a [bold]FastAPI[/bold] app in [yellow]development[/yellow] mode. 🧪

    This is equivalent to [bold]fastapi run[/bold] but with [bold]reload[/bold] enabled and listening on the [blue]127.0.0.1[/blue] address.

    It automatically detects the Python module or package that needs to be imported based on the file or directory path passed.

    If no path is passed, it tries with:

    - [blue]main.py[/blue]
    - [blue]app.py[/blue]
    - [blue]api.py[/blue]
    - [blue]app/main.py[/blue]
    - [blue]app/app.py[/blue]
    - [blue]app/api.py[/blue]

    It also detects the directory that needs to be added to the [bold]PYTHONPATH[/bold] to make the app importable and adds it.

    It detects the [bold]FastAPI[/bold] app object to use. By default it looks in the module or package for an object named:

    - [blue]app[/blue]
    - [blue]api[/blue]

    Otherwise, it uses the first [bold]FastAPI[/bold] app found in the imported module or package.
    r=   )
r;   r3   r4   r5   r7   r   r8   r<   r9   r:   NrZ   )	r;   r3   r4   r5   r7   r   r8   r9   r:   r   r   r   r=      s   V
r=   z0.0.0.0zIUse multiple worker processes. Mutually exclusive with the --reload flag.c       	   
      C   s"   t | |||||||d||	d dS )u  
    Run a [bold]FastAPI[/bold] app in [green]production[/green] mode. 🚀

    This is equivalent to [bold]fastapi dev[/bold] but with [bold]reload[/bold] disabled and listening on the [blue]0.0.0.0[/blue] address.

    It automatically detects the Python module or package that needs to be imported based on the file or directory path passed.

    If no path is passed, it tries with:

    - [blue]main.py[/blue]
    - [blue]app.py[/blue]
    - [blue]api.py[/blue]
    - [blue]app/main.py[/blue]
    - [blue]app/app.py[/blue]
    - [blue]app/api.py[/blue]

    It also detects the directory that needs to be added to the [bold]PYTHONPATH[/bold] to make the app importable and adds it.

    It detects the [bold]FastAPI[/bold] app object to use. By default it looks in the module or package for an object named:

    - [blue]app[/blue]
    - [blue]api[/blue]

    Otherwise, it uses the first [bold]FastAPI[/bold] app found in the imported module or package.
    rS   )r;   r3   r4   r5   r6   r7   r   r8   r<   r9   r:   Nr]   )
r;   r3   r4   r5   r6   r7   r   r8   r9   r:   r   r   r   rS   %  s   \
rS   c                   C   s
   t   d S Nr   r   r   r   r   main  s   
r_   r^   )r   N)0r#   pathlibr   typingr   r   r   r   r   r   	rich.treer   typing_extensionsr   fastapi_cli.discoverr	   r
   fastapi_cli.exceptionsr   r2   r   r   	utils.clir   r   Typerr   	getLogger__name__rL   rR   ImportErrorfastapi_cloud_cli.clifastapi_cloud_cli	add_typerboolr   r    Optionr1   strintrZ   r<   Argumentr=   rS   r_   r   r   r   r   <module>   s   




	



g
!
'
/5
;c

!'
-
5;
Aj