a
    bgb                     @  s   d dl mZ d dlZd dlmZmZmZmZ d dlm	Z	m
Z
 d dlmZmZmZ d dlmZ d dlmZmZ erpG dd	 d	eZG d
d deZdS )    )annotationsN)TYPE_CHECKINGAnyOptionalType)AsyncCallbackManagerForToolRunCallbackManagerForToolRun)	BaseModelFieldmodel_validator)BaseBrowserTool)aget_current_pageget_current_pagec                   @  s&   e Zd ZU dZedddZded< dS )ExtractHyperlinksToolInputz Input for ExtractHyperlinksTool.Fz-Return absolute URLs instead of relative URLs)defaultdescriptionboolabsolute_urlsN)__name__
__module____qualname____doc__r
   r   __annotations__ r   r   /var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/tools/playwright/extract_hyperlinks.pyr      s
   
r   c                   @  s   e Zd ZU dZdZded< dZded< eZded< e	d	d
e
dddddZedddddddZdddddddZdddddddZdS )ExtractHyperlinksToolz#Extract all hyperlinks on the page.Zextract_hyperlinksstrnamez-Extract all hyperlinks on the current webpager   zType[BaseModel]args_schemabefore)modedictr   )valuesreturnc                 C  s0   zddl m} W n ty*   tdY n0 |S )z#Check that the arguments are valid.r   BeautifulSoupzoThe 'beautifulsoup4' package is required to use this tool. Please install it with 'pip install beautifulsoup4'.)bs4r%   ImportError)clsr"   r%   r   r   r   check_bs_import&   s    
z%ExtractHyperlinksTool.check_bs_importr   )pagehtml_contentr   r#   c                   sl   ddl m ddlm} ||d}|d}|rL| j  fdd|D }ndd |D }ttt	|S )	Nr   )urljoinr$   Zlxmlac                   s   g | ]} | d dqS href get.0anchorbase_urlr,   r   r   
<listcomp>@       z5ExtractHyperlinksTool.scrape_page.<locals>.<listcomp>c                 S  s   g | ]}| d dqS r.   r1   r3   r   r   r   r8   B   r9   )
urllib.parser,   r&   r%   Zfind_allurljsondumpslistset)r*   r+   r   r%   Zsoupanchorslinksr   r6   r   scrape_page3   s    

z!ExtractHyperlinksTool.scrape_pageFNz#Optional[CallbackManagerForToolRun])r   run_managerr#   c                 C  s:   | j du rtd| j t| j }| }| |||S )zUse the tool.Nz$Synchronous browser not provided to )Zsync_browser
ValueErrorr   r   contentrB   selfr   rC   r*   r+   r   r   r   _runG   s
    

zExtractHyperlinksTool._runz(Optional[AsyncCallbackManagerForToolRun]c                   sF   | j du rtd| j t| j I dH }| I dH }| |||S )zUse the tool asynchronously.Nz%Asynchronous browser not provided to )Zasync_browserrD   r   r   rE   rB   rF   r   r   r   _arunS   s
    
zExtractHyperlinksTool._arun)FN)FN)r   r   r   r   r   r   r   r   r   r   classmethodr)   staticmethodrB   rH   rI   r   r   r   r   r      s   
    r   )
__future__r   r<   typingr   r   r   r   Zlangchain_core.callbacksr   r   Zpydanticr	   r
   r   Z)langchain_community.tools.playwright.baser   Z*langchain_community.tools.playwright.utilsr   r   r   r   r   r   r   r   <module>   s   	