
    Dh              
          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	  ej
        e          Z ej        d          Z ej        dd          Z ej        d	d
          Zde de Zg Zese                    d           er+e                    de           e                    d           dZdZdZej                            e          rej                            e          rn	  e	deeed          Ze                    de           n]# e$ r>Ze                    d ee                     e                    d           Y dZ[ndZ[ww xY we                    dee            ed          Zdeeef         fdZeddfdede de defdZ!dededefd Z"ej#        eddfdede de defd!            Z$ej#        efdededefd"            Z%d# Z&d$ Z'dS )%z
Flava Function MCP Tools for CQA Test Application
FastMCP-based Flava Function integration for FaaS management and operations
    N)Dict)FastMCP)AthenzClientFLAVA_FUNCTION_BASE_URLFLAVA_ENVIRONMENTstageFLAVA_PROJECTzflava-qazflava-faas..z*Missing required environment variables: %szFFlava Function tools may not function properly without these variablesz/var/run/athenz/service.key.pemz /var/run/athenz/service.cert.pemF)account_nameprovider_domainkey_path	cert_path	use_proxyu-   ✅ Athenz client initialized with domain: %su.   ⚠️  Failed to initialize Athenz client: %sz.Authentication will fall back to basic headersuJ   ℹ️  Athenz certificates not found (%s, %s), using basic authenticationzCQA Flava Function MCP Serverreturnc                     ddi} t           r	 t                                           }|r#d| | d<   t                              d           nt                              d           nY# t
          $ r2}t                              dt          |                     Y d}~n"d}~ww xY wt                              d	           | S )
z2Get authentication headers for Flava Function API.zContent-Typezapplication/jsonzBearer Authorizationu(   ✅ Added Athenz access token to headersu3   ⚠️  No access token received from Athenz clientu&   ⚠️  Failed to get access token: %sNu7   ℹ️  No Athenz client available, using basic headers)ATHENZ_CLIENTget_access_tokenloggerdebugwarning	Exceptionstr)headersaccess_tokenauth_exceptions      K/Users/user/workspace/sujinbaek/cqa-test-app/products/mcp/flava_function.pyget_auth_headersr   J   s    12G  P	Z(99;;L V+C\+C+C(GHHHHTUUU 	Z 	Z 	ZNNCSEXEXYYYYYYYY	Z 	NOOONs   AA& &
B"0(BB"
   projectlimitoffsetc                 0   	 t           sddiS t                      }t            d|  d}d|i}|dk    r||d<   t                              d|           t                              d	|           t	          j        d
          5 }|                    |||d          }t                              d|j                   |j        dk    rM|                                }d
| |t          |t                    rt          |          nd||dcddd           S d|j         |j        |j        dcddd           S # 1 swxY w Y   dS # t          $ rF}	t                              dt          |	                     ddt          |	           icY d}	~	S d}	~	ww xY w)zGet functions from Flava API.error&FLAVA_FUNCTION_BASE_URL not configured
/projects/z
/functionsr!   r   r"   u   🌐 Making API request to: %su   📋 Request params: %sT)follow_redirects      >@)r   paramstimeoutu   📨 Response status: %s      )successr    	functionscountr!   r"   NAPI request failed: r$   status_coderesponsezError in get_functions: %sError: )BASE_URLr   r   infohttpxClientgetr2   json
isinstancelistlentextr   r$   r   )
r    r!   r"   r   urlr)   clientr3   dataapi_exceptions
             r   get_functionsrC   _   s:   '9 	GEFF"$$88W8885!A::%F84c:::-v666\4000 	FzzWVT "  H KK2H4HIII#s**}}#&!%*4T4*@*@GSYYYa"$ 	 	 	 	 	 	 	 	& G0DFF'3$M %	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	.  9 9 913}3E3EFFF73}#5#57788888889sT   
E A5E BD8E D8+E 8D<<E ?D< E 
F;F
FFfunction_namec                    	 t           sddiS t                      }t            d|  d| }t          j                    5 }|                    ||d          }|j        dk    r'|                                }d| ||d	cd
d
d
           S d|j         |j        |j        dcd
d
d
           S # 1 swxY w Y   d
S # t          $ rF}t          
                    dt          |                     ddt          |           icY d
}~S d
}~ww xY w)z$Get function details from Flava API.r$   r%   r&   z/functions/r(   )r   r*   r+   T)r-   r    rD   detailsNr0   r1   z!Error in get_function_details: %sr4   )r5   r   r7   r8   r9   r2   r:   r>   r   r   r$   r   )r    rD   r   r?   r@   r3   rA   rB   s           r   get_function_detailsrG      s   9 	GEFF"$$HHWHHHH\^^ 	vzz#wzEEH#s**}}#&%2#	 	 	 	 	 	 	 	 	 G0DFF'3$M 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	"  9 9 98#m:L:LMMM73}#5#57788888889sQ   
B9 0B9 >B,;B9 B,B9 ,B00B9 3B04B9 9
D	;D>D	D	c                 n    t                               d|            |dk     rddiS t          | ||          S )a  Get list of functions from Flava API.

    Args:
        project: Flava project name (default: from FLAVA_PROJECT env var)
        limit: Maximum number of results to return (default: 10)
        offset: Number of results to skip for pagination (default: 0)
    z-Executing flava_get_functions for project: %sr   r$   zOffset must be 0 or greater)r   r6   rC   )r    r!   r"   s      r   flava_get_functionsrI      s@     KK?IIIzz677%000    c                 f    t                               d| |           | sddiS t          ||           S )zGet detailed information for a specific function.

    Args:
        function_name: The name of the function to get details for
        project: Flava project name (default: from FLAVA_PROJECT env var)
    zDExecuting flava_get_function_details for function: %s in project: %sr$   zfunction_name is required)r   r6   rG   )rD   r    s     r   flava_get_function_detailsrL      sI     KKN    6455777rJ   c                      t           S )z5Get the configured Flava Function MCP server instance)faas_mcp rJ   r   get_flava_function_mcp_serverrP      s    OrJ   c            	      b    ddt           t          t          t          t	          t
                    dS )z)Get Flava Function MCP server informationzcqa-flava-function-mcpz1.0.0)server_nameserver_versionbase_urlflava_environmentflava_projectr   athenz_configured)r5   r   r	   PROVIDER_DOMAINboolr   rO   rJ   r   get_flava_function_mcp_inforZ      s0     0!.&*!-00  rJ   )(__doc__osloggingtypingr   r7   fastmcpr   lib.athenz_clientr   	getLogger__name__r   getenvr5   r   r	   rX   required_varsappendr   KEY_PATH	CERT_PATHr   pathexistsr6   r   athenz_exceptionr   rN   r   intrC   rG   toolrI   rL   rP   rZ   rO   rJ   r   <module>rm      s   
 
			               * * * * * *		8	$	$ 29.// BI17;; 	/:66 D 1CCMCC  42333 
NN?OOO
NNP   -.	 7>>( y 9 9 I$+
 
 
 	;	
 	
 	
 	
  I I I<ccBR>S>S	
 	
 	
 	GHHHHHHHH	I KKT   7233$sCx.    , !r+9 +9+9),+9;>+9	+9 +9 +9 +9\9# 9c 9d 9 9 9 9@ 
 r1 11),1;>1	1 1 1 1$ 
'48 88!$8	8 8 8 8*  

 
 
 
 
s   ,&D E4EE