
    h>                        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r	  G d d	e      Z G d
 de      Zy)    )annotationsN)TYPE_CHECKINGAnyOptionalType)AsyncCallbackManagerForToolRunCallbackManagerForToolRun)	BaseModelFieldmodel_validator)BaseBrowserTool)aget_current_pageget_current_pagec                  0    e Zd ZU dZ edd      Zded<   y)ExtractHyperlinksToolInputz Input for ExtractHyperlinksTool.Fz-Return absolute URLs instead of relative URLs)defaultdescriptionboolabsolute_urlsN)__name__
__module____qualname____doc__r   r   __annotations__     u/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/tools/playwright/extract_hyperlinks.pyr   r      s    *CM4 r   r   c                      e Zd ZU dZdZded<   dZded<   eZded<    e	d	
      e
dd              Zedd       Z	 	 d	 	 	 	 	 ddZ	 	 d	 	 	 	 	 ddZy)ExtractHyperlinksToolz#Extract all hyperlinks on the page.extract_hyperlinksstrnamez-Extract all hyperlinks on the current webpager   zType[BaseModel]args_schemabefore)modec                D    	 ddl m} |S # t        $ r t        d      w xY w)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)clsvaluesr(   s      r   check_bs_importz%ExtractHyperlinksTool.check_bs_import&   s5    	)   	H 	s   
 c           
     X   ddl m} ddlm}  ||d      }|j	                  d      }|r3| j
                  }|D cg c]  } |||j                  dd             }	}n|D cg c]  }|j                  dd       }	}t        j                  t        t        |	                  S c c}w c c}w )Nr   )urljoinr'   lxmlahref )urllib.parser/   r)   r(   find_allurlgetjsondumpslistset)
pagehtml_contentr   r/   r(   soupanchorsbase_urlanchorlinkss
             r   scrape_pagez!ExtractHyperlinksTool.scrape_page3   s    (% \62 --$xxHMTU6WXvzz&"'=>UEU:ABVZZ+BEB zz$s5z*++ VBs    B" B'Nc                    | j                   t        d| j                         t        | j                         }|j	                         }| j                  |||      S )zUse the tool.z$Synchronous browser not provided to )sync_browser
ValueErrorr"   r   contentrC   selfr   run_managerr<   r=   s        r   _runzExtractHyperlinksTool._runG   sW     $CDII;OPP 1 12||~lMBBr   c                   K   | j                   t        d| j                         t        | j                          d{   }|j	                          d{   }| j                  |||      S 7 /7 w)zUse the tool asynchronously.Nz%Asynchronous browser not provided to )async_browserrF   r"   r   rG   rC   rH   s        r   _arunzExtractHyperlinksTool._arunS   sj      %DTYYKPQQ&t'9'9::!\\^+lMBB ;+s"   =A3A/ A3A1A31A3)r,   dictreturnr   )r<   r   r=   r!   r   r   rP   r!   )FN)r   r   rJ   z#Optional[CallbackManagerForToolRun]rP   r!   )r   r   rJ   z(Optional[AsyncCallbackManagerForToolRun]rP   r!   )r   r   r   r   r"   r   r   r   r#   r   classmethodr-   staticmethodrC   rK   rN   r   r   r   r   r      s    -$D#$FKF#=K=(#	  $	 , ,* $;?
C
C 9
C 
	
C $@D
C
C >
C 
	
Cr   r   )
__future__r   r8   typingr   r   r   r   langchain_core.callbacksr   r	   pydanticr
   r   r   )langchain_community.tools.playwright.baser   *langchain_community.tools.playwright.utilsr   r   r   r   r   r   r   <module>rY      sH    "  5 5 7 6 E
  >CO >Cr   