o
    Zh                     @  s   d dl mZ d dlZd dlmZmZmZmZmZ d dl	m
Z
mZ d dlmZmZ d dlmZ d dlmZmZ erDd dlmZ d dlmZ G d	d
 d
eZdddZdddZG dd deZdS )    )annotationsN)TYPE_CHECKINGListOptionalSequenceType)AsyncCallbackManagerForToolRunCallbackManagerForToolRun)	BaseModelField)BaseBrowserTool)aget_current_pageget_current_page)Pagec                   @  s>   e Zd ZU dZedddZded< edd d	d
Zded< dS )GetElementsToolInputzInput for GetElementsTool..z;CSS selector, such as '*', 'div', 'p', 'a', #id, .classname)descriptionstrselectorc                   C  s   dgS )N	innerText r   r   r   h/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/tools/playwright/get_elements.py<lambda>   s    zGetElementsToolInput.<lambda>z.Set of attributes to retrieve for each element)default_factoryr   z	List[str]
attributesN)__name__
__module____qualname____doc__r   r   __annotations__r   r   r   r   r   r      s   
 r   page	AsyncPager   r   r   Sequence[str]return
List[dict]c           	        s   |  |I dH }g }|D ]2}i }|D ]$}|dkr!| I dH }n||I dH }|dur7| dkr7|||< q|r?|| q|S )-Get elements matching the given CSS selector.Nr    Zquery_selector_allZ
inner_textZget_attributestripappend	r   r   r   elementsresultselementresult	attributevalr   r   r   _aget_elements$   s    
r0   SyncPagec           	      C  sp   |  |}g }|D ],}i }|D ]}|dkr| }n||}|dur-| dkr-|||< q|r5|| q	|S )r$   r   Nr%   r&   r)   r   r   r   _get_elements8   s   



r2   c                   @  sZ   e Zd ZU dZdZded< dZded< eZded< d	gd
fdddZ	d	gd
fdddZ
d
S )GetElementsToolzJTool for getting elements in the current web page matching a CSS selector.Zget_elementsr   namezIRetrieve elements in the current web page matching the given CSS selectorr   zType[BaseModel]args_schemar   Nr   r   r!   run_manager#Optional[CallbackManagerForToolRun]r"   c                 C  s>   | j du rtd| j t| j }t|||}tj|ddS )Use the tool.Nz$Synchronous browser not provided to Fensure_ascii)Zsync_browser
ValueErrorr4   r   r2   jsondumpsselfr   r   r6   r   r+   r   r   r   _runU   s
   

zGetElementsTool._run(Optional[AsyncCallbackManagerForToolRun]c                   sL   | j du rtd| j t| j I dH }t|||I dH }tj|ddS )r8   Nz%Asynchronous browser not provided to Fr9   )Zasync_browserr;   r4   r   r0   r<   r=   r>   r   r   r   _arunc   s   
zGetElementsTool._arun)r   r   r   r!   r6   r7   r"   r   )r   r   r   r!   r6   rA   r"   r   )r   r   r   r   r4   r   r   r   r5   r@   rB   r   r   r   r   r3   L   s   
 
r3   )r   r    r   r   r   r!   r"   r#   )r   r1   r   r   r   r!   r"   r#   )
__future__r   r<   typingr   r   r   r   r   Zlangchain_core.callbacksr   r	   Zpydanticr
   r   Z)langchain_community.tools.playwright.baser   Z*langchain_community.tools.playwright.utilsr   r   Zplaywright.async_apir   r    Zplaywright.sync_apir1   r   r0   r2   r3   r   r   r   r   <module>   s    

