
    Ki                        d 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
mZ  ed      Z e       Z ej                  dd	
      ZddZej"                  	 ddeedz   ej&                  d      f   ddfd       Zy)z-FastMCP tasks CLI for Docket task management.    N)	Annotated)Console)load_and_merge_config)
get_loggerz	cli.taskstasksz,Manage FastMCP background tasks using Docket)namehelpreturnc                      ddl } | j                  j                  j                  }|j	                  d      r+t
        j                  d       t        j                  d       yy)zCheck if Docket is configured with a distributed backend.

    The CLI worker runs as a separate process, so it needs Redis/Valkey
    to coordinate with the main server process.

    Raises:
        SystemExit: If using memory:// URL
    r   Nz	memory://up  [bold red]✗ In-memory backend not supported by CLI[/bold red]

Your Docket configuration uses an in-memory backend (memory://) which
only works within a single process.

To use [cyan]fastmcp tasks[/cyan] CLI commands (which run in separate
processes), you need a distributed backend:

[bold]1. Install Redis or Valkey:[/bold]
   [dim]macOS:[/dim]     brew install redis
   [dim]Ubuntu:[/dim]    apt install redis-server
   [dim]Valkey:[/dim]    See https://valkey.io/

[bold]2. Start the service:[/bold]
   redis-server

[bold]3. Configure Docket URL:[/bold]
   [dim]Environment variable:[/dim]
   export FASTMCP_DOCKET_URL=redis://localhost:6379/0

[bold]4. Try again[/bold]

The memory backend works great for single-process servers, but the CLI
commands need a distributed backend to coordinate across processes.

Need help? See: [cyan]https://gofastmcp.com/docs/tasks[/cyan]   )	fastmcpsettingsdocketurl
startswithconsoleprintsysexit)r   
docket_urls     ]/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/fastmcp/cli/tasks.pycheck_distributed_backendr      sR     !!((,,J [)L	
( 	+ *    server_speczWPython file to run, optionally with :object suffix, or None to auto-detect fastmcp.json)r	   c                    ddl t                	 t        |       \  }}t        j                  j                  j                               fd}	 t        j                   |              y# t        $ r t	        j
                  d       Y ow xY w# t        $ r- t        j                  d       t	        j
                  d       Y yw xY w)aL  Start an additional worker to process background tasks.

    Connects to your Docket backend and processes tasks in parallel with
    any other running workers. Configure via environment variables
    (FASTMCP_DOCKET_*).

    Example:
        fastmcp tasks worker server.py
        fastmcp tasks worker examples/tasks/server.py
    r   Nr   c                  8  K   j                         4 d{    t        j                  dj                   d       t        j                  d j                  j
                  j                          t        j                  d j                  j
                  j                          t        j                  d j                  j
                  j                          	 t        j                  d       d{    7 7 # 1 d{  7  sw Y   yxY ww)z'Enter server lifespan and camp forever.Nu7   [bold green]✓[/bold green] Starting worker for [cyan]z[/cyan]z
  Docket: z  Backend: z  Concurrency: i  )
_lifespan_managerr   r   r   r   r   r   concurrencyasynciosleep)r   servers   r   
run_workerzworker.<locals>.run_worker\   s     ++- 
	* 
	*MMI&++V]^ MMJw'7'7'>'>'C'C&DEFMMK(8(8(?(?(C(C'DEFMMOG,<,<,C,C,O,O+PQR mmD))) 
	* *
	* 
	* 
	*sE   DDDCD;D<DDDDDDDz 
[yellow]Worker stopped[/yellow])r   r   r   FileNotFoundErrorr   r   r   runsourceload_serverKeyboardInterruptr   r   )r   config_resolved_specr"   r   r!   s       @@r   workerr*   <   s    & !6{!C
 [[2245F*JL!+  ,  9:s#   A/ B /BB3C	C	)r
   N)N)__doc__r   r   typingr   cycloptsrich.consoler   fastmcp.utilities.clir   fastmcp.utilities.loggingr   loggerr   App	tasks_appr   commandstr	Parameterr*    r   r   <module>r8      s    3  
     7 0	K	 
)HLL		7	#L  	1d
j	
	1 
1 1r   