
    dh_                         S SK r S SKrS SKJr  S SKJrJrJrJr  S SK	J
r
  S SKJrJr  S SKJr   " S S\\5      r " S	 S
\5      r " S S\5      rg)    N)Enum)ListOptionalTypeUnion)AsyncCallbackManagerForToolRun)	BaseModelField)AINBaseToolc                        \ rS rSrSrSrSrSrg)AppOperationType   z$Type of app operation as enumerator.	SET_ADMIN
GET_CONFIG N)__name__
__module____qualname____firstlineno____doc__r   r   __static_attributes__r       _/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/tools/ainetwork/app.pyr   r      s    .IJr   r   c                   z    \ rS rSr% Sr\" S5      r\\S'   \" SSS9r	\
\S'   \" SS	S9r\\\
\\
   4      \S
'   Srg)	AppSchema   zSchema for app operations..typez)Name of the application on the blockchain)descriptionappNameNzKA single address or a list of addresses. Default: current session's addressaddressr   )r   r   r   r   r   r
   r   r   __annotations__r   strr    r   r   r   r   r   r   r   r   r      sQ    $"3ZD
'*UVGSV/40GXeCcN+, r   r   c                       \ rS rSr% SrSr\\S'   Sr\\S'   \	r
\\   \S'     SS	\S
\S\\\\\   4      S\\   S\4
S jjrSrg)	AINAppOps!   zTool for app operations.	AINappOpsnamea7  
Create an app in the AINetwork Blockchain database by creating the /apps/<appName> path.
An address set as `admin` can grant `owner` rights to other addresses (refer to `AINownerOps` for more details).
Also, `admin` is initialized to have all `owner` permissions and `rule` allowed for that path.

## appName Rule
- [a-z_0-9]+

## address Rules
- 0x[0-9a-fA-F]{40}
- Defaults to the current session's address
- Multiple addresses can be specified if needed

## SET_ADMIN Example 1
- type: SET_ADMIN
- appName: ain_project

### Result:
1. Path /apps/ain_project created.
2. Current session's address registered as admin.

## SET_ADMIN Example 2
- type: SET_ADMIN
- appName: test_project
- address: [<address1>, <address2>]

### Result:
1. Path /apps/test_project created.
2. <address1> and <address2> registered as admin.

r   args_schemaNr   r   r    run_managerreturnc           
        #    SSK Jn  SSKJn   U[        R
                  L a  Uc*  U R                  R                  R                  R                  n[        U[        5      (       a  U/nU R                  R                  R                  SU SU" 5        35      R                  U" SU Vs0 sH  o3S_M     sn0S9S	9I S h  vN nObU[        R                  L a@  U R                  R                  R                  SU S
35      R!                  5       I S h  vN nO[#        SU S35      e[$        R&                  " USS9$ s  snf  N N0! [(         a8  n[*        R,                  " U5      R.                   S[        U5       3s S nA$ S nAff = f7f)Nr   )ValueOnlyTransactionInput)getTimestampz/manage_app/z/create/adminT)value)transactionInputz/configzUnsupported 'type': .F)ensure_asciiz: )	ain.typesr,   	ain.utilsr-   r   r   	interfacewalletdefaultAccountr    
isinstancer"   dbrefsetValuer   getValue
ValueErrorjsondumps	Exceptionbuiltinsr   r   )	selfr   r   r    r)   r,   r-   reses	            r   _arunAINAppOps._arunF   sh     	8*	<'111?"nn33BBJJGgs++&iG NN--11"7)8LN3CD(%>&g(Ng7$g(NO&   )444 NN--11"7)73(* !#7vQ!?@@::c66 )O	  	<mmA&//03q6(;;	<sf   F	BE (D;3E >E ?AE E(E :F	;E E 
F-F;F<F	FF	r   )NN)r   r   r   r   r   r'   r"   r!   r   r   r(   r   r	   r   r   r   r   r   rE   r   r   r   r   r$   r$   !   s    "D#K > $-Ki, 48@D < <  < %T#Y/0	 <
 <= < 
 <  <r   r$   )rA   r>   enumr   typingr   r   r   r   langchain_core.callbacksr   pydanticr	   r
   (langchain_community.tools.ainetwork.baser   r"   r   r   r$   r   r   r   <module>rL      sE       . . C % @sD 	 E< E<r   