U
    h                     @  s   d dl mZ d dlmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ erfd dlmZ d dlmZ n2zd dlmZ d dlmZ W n ek
r   Y nX ddd	d
ZG dd de
ZdS )    )annotations)TYPE_CHECKINGOptionalTupleType)root_validator)BaseTool)guard_import)Browserz,Tuple[Type[AsyncBrowser], Type[SyncBrowser]])returnc                   C  s   t ddjt ddjfS )z
    Lazy import playwright browsers.

    Returns:
        Tuple[Type[AsyncBrowser], Type[SyncBrowser]]:
            AsyncBrowser and SyncBrowser classes.
    zplaywright.async_api)module_namezplaywright.sync_api)r	   r
    r   r   M/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/tools/playwright/base.pylazy_import_playwright_browsers   s    	

r   c                   @  s\   e Zd ZU dZdZded< dZded< eddd	d	d
ddZe	dddd dddZ
dS )BaseBrowserToolzBase class for browser tools.NzOptional['SyncBrowser']sync_browserzOptional['AsyncBrowser']async_browserT)predict)valuesr   c                 C  s.   t   |ddkr*|ddkr*td|S )z#Check that the arguments are valid.r   Nr   z7Either async_browser or sync_browser must be specified.)r   get
ValueError)clsr   r   r   r   validate_browser_provided)   s    z)BaseBrowserTool.validate_browser_providedzOptional[SyncBrowser]zOptional[AsyncBrowser])r   r   r   c                 C  s   t   | ||dS )zInstantiate the tool.)r   r   )r   )r   r   r   r   r   r   from_browser1   s    zBaseBrowserTool.from_browser)NN)__name__
__module____qualname____doc__r   __annotations__r   r   r   classmethodr   r   r   r   r   r   #   s   
  r   N)
__future__r   typingr   r   r   r   Zlangchain_core.pydantic_v1r   Zlangchain_core.toolsr   Zlangchain_core.utilsr	   Zplaywright.async_apir
   ZAsyncBrowserZplaywright.sync_apiZSyncBrowserImportErrorr   r   r   r   r   r   <module>   s   