o
    "iG                  
   @   s  d Z ddlmZmZmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZ ddlmZmZmZ ddlmZmZmZ ddlmZmZmZmZ ed	gd
Zejdee dddeeeed	fdedededefddZejdedeeeed	fdededefddZejdedeeeed	fdededefddZ ej!dedeeeed	fdedededefddZ"e#deeeed	fdededefddZ$edeeeed	fded e	e%e
f dedefd!d"Z&d#S )$z
Tool Library API
    )	APIRouterDependsHTTPException)Session)ListDictAny)Tool)ToolResponse
ToolCreate
ToolUpdate)get_dbget_current_userUser)require_readrequire_createrequire_updaterequire_deletetools)tags/)response_modeld   skiplimitdbcurrent_userc                 C   s4   | ttjdktj|jk| | }|S )zGet all toolsF)queryr	   filter
is_deleted	tenant_idoffsetr   all)r   r   r   r   r    r#   B/lsinfo/ai/hellotax_ai/training_center/backend/app/api/v1/tools.py	get_tools   s   

r%   z
/{tool_id}tool_idc                 C   s@   | ttj| ktjdktj|jk }|stddd|S )zGet a specific toolF  Tool not foundstatus_codedetail)r   r	   r   idr   r    firstr   r&   r   r   toolr#   r#   r$   get_tool   s   

r0   tool_inc                 C   s@   t di |  |j|jd}|| |  || |S )zCreate a new tool)r    
created_byNr#   )r	   
model_dumpr    r,   addcommitrefresh)r1   r   r   r/   r#   r#   r$   create_tool0   s   


r7   c                 C   sx   | ttj| ktjdktj|jk }|stddd|jdd	 D ]
\}}t
||| q&|  || |S )zUpdate a toolFr'   r(   r)   T)exclude_unset)r   r	   r   r,   r   r    r-   r   r3   itemssetattrr5   r6   )r&   r1   r   r   r/   fieldvaluer#   r#   r$   update_toolB   s   


r=   c                 C   sR   | ttj| ktjdktj|jk }|stdddd|_|  ddiS )zDelete a toolFr'   r(   r)   TmessagezTool deleted)	r   r	   r   r,   r   r    r-   r   r5   r.   r#   r#   r$   delete_toolZ   s   

r?   z/{tool_id}/executeparamsc           	   
   C   s   | ttj| ktjdktj|jk }|stdddddlm	} | }z|
|j|}|ddW S  tyH } ztd	t|dd
}~ww )zExecute tool with parametersFr'   r(   r)   r   )ToolExecutorsuccess)resultstatusi  N)r   r	   r   r,   r   r    r-   r   app.services.tool_executorrA   executecode	Exceptionstr)	r&   r@   r   r   r/   rA   executorrC   er#   r#   r$   execute_tooln   s$   

rL   N)'__doc__fastapir   r   r   sqlalchemy.ormr   typingr   r   r   
app.modelsr	   app.schemas.toolr
   r   r   app.api.depsr   r   r   app.api.permissionsr   r   r   r   routergetintr%   r0   postr7   putr=   deleter?   rI   rL   r#   r#   r#   r$   <module>   s    






