Ë
    µŒjï=  ã                   ó‚   — d dl Z d dlmZmZmZmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ  G d„ d	e«      Zy)
é    N)ÚAnyÚAsyncIteratorÚIteratorÚListÚOptionalÚSetÚUnion)Úurlparse)ÚBeautifulSoup)ÚDocument)Ú
BaseLoader)ÚWebBaseLoaderc                   óš  — e Zd ZdZ	 	 	 	 	 d!dddœdededee   deded	ed
ee   deee      fd„Zdedefd„Z		 d"de
e   dededefd„Zdeee
e   f   defd„Zdedefd„Zdede
e   fd„Z	 d#dedee   dee   de
e   fd„Z	 d#dededee   dee   de
e   f
d„Zdee   fd„Zdee   fd„Z	 d#dedee   dee   fd„Zdede
e   fd „Zy)$ÚGitbookLoadera   Load `GitBook` data.

    1. load from either a single page, or
    2. load all (relative) paths in the sitemap, handling nested sitemap indexes.

    When `load_all_paths=True`, the loader parses XML sitemaps and requires the
    `lxml` package to be installed (`pip install lxml`).
    N)Úsitemap_urlÚallowed_domainsÚweb_pageÚload_all_pathsÚbase_urlÚcontent_selectorÚcontinue_on_failureÚshow_progressr   r   c                óæ  — |xs || _         | j                   j                  d«      r| j                   dd | _         || _        || _        || _        || _        || _        || _        | j                  €t        |«      j                  }	|	r|	h| _        |r|xs | j                   › d�| _
        n|| _
        | j                  | j                  «      s%t        d| j                  › d| j                  › �«      ‚y)aT  Initialize with web page and whether to load all paths.

        Args:
            web_page: The web page to load or the starting point from where
                relative paths are discovered.
            load_all_paths: If set to True, all relative paths in the navbar
                are loaded instead of only `web_page`. Requires `lxml` package.
            base_url: If `load_all_paths` is True, the relative paths are
                appended to this base url. Defaults to `web_page`.
            content_selector: The CSS selector for the content to load.
                Defaults to "main".
            continue_on_failure: whether to continue loading the sitemap if an error
                occurs loading a url, emitting a warning instead of raising an
                exception. Setting this to True makes the loader more robust, but also
                may result in missing data. Default: False
            show_progress: whether to show a progress bar while loading. Default: True
            sitemap_url: Custom sitemap URL to use when load_all_paths is True.
                Defaults to "{base_url}/sitemap.xml".
            allowed_domains: Optional set of allowed domains to fetch from.
                If None (default), the loader will restrict crawling to the domain
                of the `web_page` URL to prevent potential SSRF vulnerabilities.
                Provide an explicit set (e.g., {"example.com", "docs.example.com"})
                to allow crawling across multiple domains. Use with caution in
                server environments where users might control the input URLs.
        Ú/Néÿÿÿÿz/sitemap.xmlz
Domain in z% is not in the allowed domains list: )r   Úendswithr   r   r   r   r   r   r
   ÚnetlocÚ	start_urlÚ_is_url_allowedÚ
ValueError)
Úselfr   r   r   r   r   r   r   r   Úinitial_domains
             úv/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/document_loaders/gitbook.pyÚ__init__zGitbookLoader.__init__   sù   € ðJ !Ò, HˆŒØ�=‰=×!Ñ! #Ô&Ø ŸM™M¨#¨2Ð.ˆDŒMà ˆŒØ,ˆÔØ 0ˆÔØ#6ˆÔ Ø*ˆÔØ.ˆÔð ×ÑÐ'Ü% hÓ/×6Ñ6ˆNÙØ(6Ð'7�Ô$ñ Ø(ÒJ¨t¯}©}¨o¸\Ð,JˆD�Nà%ˆDŒNð ×#Ñ# D§N¡NÔ3ÜØ˜TŸ^™^Ð,Ð,QØ×'Ñ'Ð(ð*óð ð 4ó    ÚurlÚreturnc                 óº   — | j                   €y	 t        |«      }|j                  dvry|j                  sy|j                  | j                   v S # t        $ r Y yw xY w)z0Check if a URL has an allowed scheme and domain.F)ÚhttpÚhttps)r   r
   Úschemer   Ú	Exception)r!   r&   Úparseds      r#   r   zGitbookLoader._is_url_allowedY   sf   € ð
 ×ÑÐ'Øð	Ü˜c“]ˆFð �}‰}Ð$5Ñ5Øð —=’=ØØ—=‘= D×$8Ñ$8Ð8Ð8øÜò 	Ùð	ús   �A ©A ¶A Á	AÁAÚurl_listÚurl_typec                 ó€   — | j                  |«      r|j                  |«       yt        j                  d|› d|› �«       y)aB  Safely add a URL to a list if it's from an allowed domain.

        Args:
            url_list: The list to add the URL to
            url: The URL to add
            url_type: Type of URL for warning message (e.g., "sitemap", "content")

        Returns:
            bool: True if URL was added, False if skipped
        TzSkipping disallowed z URL: F)r   ÚappendÚwarningsÚwarn)r!   r.   r&   r/   s       r#   Ú_safe_add_urlzGitbookLoader._safe_add_urlp   s>   € ð ×Ñ Ô$Ø�O‰O˜CÔ Øä�M‰MÐ0°°
¸&ÀÀÐFÔGØr%   Úurl_or_urlsc                 óF   — t        || j                  | j                  ¬«      S )zŒCreate a new WebBaseLoader instance for the given URL(s).

        This ensures each operation gets its own isolated WebBaseLoader.
        )Úweb_pathr   r   )r   r   r   )r!   r5   s     r#   Ú_create_web_loaderz GitbookLoader._create_web_loader„   s&   € ô
 Ø Ø $× 8Ñ 8Ø×,Ñ,ô
ð 	
r%   Úsoupc                 ó(   — |j                  d«      duS )z+Check if the soup contains a sitemap index.ÚsitemapindexN)Úfind)r!   r9   s     r#   Ú_is_sitemap_indexzGitbookLoader._is_sitemap_index�   s   € à�y‰y˜Ó(°Ð4Ð4r%   c                 ó¶   — |j                  d«      }g }|D ]@  }|j                  d«      }|sŒ|j                  sŒ$| j                  ||j                  d«       ŒB |S )z*Extract sitemap URLs from a sitemap index.ÚsitemapÚloc)Úfind_allr<   Útextr4   )r!   r9   Úsitemap_tagsÚurlsr?   r@   s         r#   Ú_extract_sitemap_urlsz#GitbookLoader._extract_sitemap_urls“   sS   € à—}‘} YÓ/ˆØˆÛ#ˆGØ—,‘,˜uÓ%ˆCÚ�s—x“xØ×"Ñ" 4¨¯©°9Õ=ð $ð ˆr%   Úprocessed_urlsÚ
web_loaderc                 ó6  — |€| j                  | j                  «      }| j                  |«      rœ| j                  |«      }g }|D ]‚  }||v rt	        j
                  d|› �«       Œ |j                  |«       	 |j                  }|g|_        |j                  d¬«      }||_        | j                  |||«      }	|j                  |	«       Œ„ |S | j                  |«      S # t        $ r3}
| j                  rt	        j
                  d|› d|
› �«       n‚ Y d}
~
ŒÏd}
~
ww xY w)aO  Process a sitemap, handling both direct content URLs and sitemap indexes.

        Args:
            soup: The BeautifulSoup object of the sitemap
            processed_urls: Set of already processed URLs to avoid cycles
            web_loader: WebBaseLoader instance to reuse for all requests,
                created if None
        Nz(Skipping already processed sitemap URL: úlxml-xml©ÚparserúError processing sitemap ú: )r8   r   r=   rE   r2   r3   ÚaddÚ	web_pathsÚscrapeÚ_process_sitemapÚextendr,   r   Ú
_get_paths)r!   r9   rF   rG   Úsitemap_urlsÚall_content_urlsr   Úoriginal_web_pathsÚsitemap_soupÚcontent_urlsÚes              r#   rQ   zGitbookLoader._process_sitemap�   s;  € ð ÐØ×0Ñ0°·±Ó@ˆJð ×!Ñ! $Ô'Ø×5Ñ5°dÓ;ˆLØ!Ðã+�Ø .Ñ0Ü—M‘MØBÀ;À-ÐPôð à×"Ñ" ;Ô/ðà)3×)=Ñ)=Ð&Ø,7¨=�JÔ(ð $.×#4Ñ#4¸JÐ#4Ó#G�Lð ,>�JÔ(ð $(×#8Ñ#8Ø$ n°jó$�Lð %×+Ñ+¨LÕ9ð1  ,ð> $Ð#ð —?‘? 4Ó(Ð(øô !ò Ø×/Ò/Ü Ÿ™Ð(AÀ+ÀÈbÐQRÐPSÐ&TÕUàô Vûðús   Á6ACÃ	DÃ%)DÄDc              ƒ   ó‚  K  — |€| j                  | j                  «      }| j                  |«      rµ| j                  |«      }g }|D �cg c]	  }||vsŒ|‘Œ }}|sg S |j                  }	||_        |j                  |d¬«      ƒ d{  –—† }
|	|_        t        ||
«      D ]D  \  }}|j                  |«       	 | j                  ||||«      ƒ d{  –—† }|j                  |«       ŒF |S | j                  |«      S c c}w 7 Œv7 Œ1# t        $ r3}| j                  rt        j                  d|› d|› �«       n‚ Y d}~Œšd}~ww xY w­w)a^  Async version of _process_sitemap.

        Args:
            soup: The BeautifulSoup object of the sitemap
            base_url: The base URL for relative paths
            processed_urls: Set of already processed URLs to avoid cycles
            web_loader: WebBaseLoader instance to reuse for all requests,
                created if None
        NrI   rJ   rL   rM   )r8   r   r=   rE   rO   Úascrape_allÚziprN   Ú_aprocess_sitemaprR   r,   r   r2   r3   rS   )r!   r9   r   rF   rG   rT   rU   r&   Únew_urlsrV   Úsoupsr   rW   rX   rY   s                  r#   r]   zGitbookLoader._aprocess_sitemapØ   sj  è ø€ ð" ÐØ×0Ñ0°·±Ó@ˆJð ×!Ñ! $Ô'Ø×5Ñ5°dÓ;ˆLØ!Ðñ (4ÓQ¡| °sÀ.Ò7Pš |ˆHÐQáØ�	ð ",×!5Ñ!5ÐØ#+ˆJÔ ð %×0Ñ0°À*Ð0ÓM×MˆEð $6ˆJÔ ä-0°¸5Ö-AÑ)�˜\Ø×"Ñ" ;Ô/ð
à)-×)?Ñ)?Ø$ h°À
ó*÷ $�Lð %×+Ñ+¨LÕ9ð .Bð $Ð#ð —?‘? 4Ó(Ð(ùòC Rð Nøð$ùô !ò Ø×/Ò/Ü Ÿ™Ð(AÀ+ÀÈbÐQRÐPSÐ&TÕUàô Vûðüs`   ‚AD?Á	C7ÁC7Á/D?ÂC<Â.D?Â5D ÃC>ÃD Ã"D?Ã>D Ä 	D<Ä	)D7Ä2D?Ä7D<Ä<D?c              #   ó�  K  — | j                   sO| j                  | j                  «      }|j                  «       }| j	                  || j                  «      }|r|–— yy| j                  | j
                  «      }|j                  d¬«      }t        «       }| j                  ||«      }|s.| j                  r"t        j                  d| j
                  › �«       g }|D ]  }| j                  ||d«       Œ |sy| j                  |«      }	|	j                  |«      }
t        |
|«      D ]  \  }}| j	                  ||«      }|sŒ|–— Œ  y­w)zDFetch text from one single GitBook page or recursively from sitemap.rI   rJ   ú$No content URLs found in sitemap at ÚcontentN)r   r8   r   rP   Ú_get_documentr   ÚsetrQ   r   r2   r3   r4   Ú
scrape_allr\   )r!   Útemp_loaderr9   ÚdocÚ	soup_inforF   Úrelative_pathsrD   r&   Úcontent_loaderÚ
soup_infoss              r#   Ú	lazy_loadzGitbookLoader.lazy_load  s:  è ø€ à×"Ò"à×1Ñ1°$·-±-Ó@ˆKØ×%Ñ%Ó'ˆDØ×$Ñ$ T¨4¯=©=Ó9ˆCÙØ“	ð ð ×1Ñ1°$·.±.ÓAˆKà#×*Ñ*°*Ð*Ó=ˆIô (+£uˆNØ!×2Ñ2°9¸nÓMˆNá! d×&8Ò&8Ü—‘Ð DÀTÇ^Á^ÐDTÐUÔVð !ˆDÛ%�à×"Ñ" 4¨¨iÕ8ð &ñ Øð "×4Ñ4°TÓ:ˆNð (×2Ñ2°4Ó8ˆJä"% j°$Ö"7‘�	˜3Ø×(Ñ(¨°CÓ8�ÚØ“Iñ #8ùs   ‚D<EÄ?Ec                ó@  K  — | j                   si| j                  | j                  «      }|j                  | j                  g«      ƒ d{  –—† }|d   }| j	                  || j                  «      }|r|­–— yy| j                  | j
                  «      }|j                  | j
                  gd¬«      ƒ d{  –—† }|d   }t        «       }| j                  || j                  |«      ƒ d{  –—† }|s.| j                  r"t        j                  d| j
                  › �«       g }|D ]  }| j                  ||d«       Œ |sy| j                  |«      }	|	j                  |«      ƒ d{  –—† }
t        |
|«      D ]  \  }}| j	                  ||«      }|€Œ|­–— Œ! y7 �ŒL7 Œã7 Œ±7 Œ:­w)z/Asynchronously fetch text from GitBook page(s).Nr   rI   rJ   ra   rb   )r   r8   r   r[   rc   r   rd   r]   r   r   r2   r3   r4   r\   )r!   rf   r_   rh   rg   rF   ri   rD   r&   rj   rk   Ú	maybe_docs               r#   Ú
alazy_loadzGitbookLoader.alazy_load?  s”  è ø€ à×"Ò"à×1Ñ1°$·-±-Ó@ˆKØ%×1Ñ1°4·=±=°/ÓB×BˆEØ˜a™ˆIØ×$Ñ$ Y°·±Ó>ˆCÙØ”	ð ð ×1Ñ1°$·.±.ÓAˆKà%×1Ñ1°4·>±>Ð2BÈ:Ð1ÓV×VˆEØ˜a™ˆIô (+£uˆNØ#'×#9Ñ#9Ø˜4Ÿ=™=¨.ó$÷ ˆNñ " d×&8Ò&8Ü—‘Ð DÀTÇ^Á^ÐDTÐUÔVð !ˆDÛ%�à×"Ñ" 4¨¨iÕ8ð &ñ Øð "×4Ñ4°TÓ:ˆNð  .×9Ñ9¸$Ó?×?ˆJä"% j°$Ö"7‘�	˜3Ø ×.Ñ.¨y¸#Ó>�	ØÑ(Ø#”Oñ #8ðI Cùð Wøð
øð( @úsP   ‚AFÁ	FÁ
A*FÂ4FÂ53FÃ(FÃ)A8FÅ!FÅ"*FÆ	FÆFÆFÆFÚ
custom_urlc                 ó   — |j                  | j                  «      }|sy|j                  d¬«      j                  «       }|j                  d«      }|r|j                  nd}|xs | j
                  |dœ}t        ||¬«      S )z,Fetch content from page and return Document.NÚ
)Ú	separatorÚh1Ú )ÚsourceÚtitle)Úpage_contentÚmetadata)r<   r   Úget_textÚstriprB   r   r   )r!   r9   rp   Úpage_content_rawrb   Útitle_if_existsrw   ry   s           r#   rc   zGitbookLoader._get_documentm  sz   € ð  Ÿ9™9 T×%:Ñ%:Ó;ÐÙØØ"×+Ñ+°dÐ+Ó;×AÑAÓCˆØ*×/Ñ/°Ó5ˆÙ(7�×$Ò$¸RˆØ(Ò9¨D¯M©MÀEÑJˆÜ W°xÔ@Ð@r%   c                 ó†   — g }|j                  d«      D ]*  }|j                  sŒ|j                  |j                  «       Œ, |S )zFetch all URLs in the sitemap.r@   )rA   rB   r1   )r!   r9   rD   r@   s       r#   rS   zGitbookLoader._get_pathsz  s:   € àˆØ—=‘= Ö'ˆCØ�x‹xð —‘˜CŸH™HÕ%ð	 (ð
 ˆr%   )FNÚmainFT)ÚURL)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚboolr   r   r$   r   r   r4   r	   r   r8   r   r=   rE   rQ   r]   r   r   rl   r   ro   r   rc   rS   © r%   r#   r   r      s  „ ñð  %Ø"&Ø &Ø$)Ø"ðAð &*Ø.2òAàðAð ðAð ˜3‘-ð	Að
 ðAð "ðAð ðAð ˜c‘]ðAð " # c¡(Ñ+óAðF 3ð ¨4ó ð0 >CñØ˜S™	ðØ(+ðØ7:ðà	óð(	
¨e°C¸¸c¹°NÑ.Cð 	
Èó 	
ð5 mð 5¸ó 5ð¨-ð ¸DÀ¹Ió ð /3ñ	9)àð9)ð ˜C™ð9)ð ˜]Ñ+ð	9)ð
 
ˆc‰ó9)ð@ /3ñ;)àð;)ð ð;)ð ˜C™ð	;)ð
 ˜]Ñ+ð;)ð 
ˆc‰ó;)ðz(˜8 HÑ-ó (ðT,$ -°Ñ"9ó ,$ð^ 6:ñAØðAØ%-¨c¡]ðAà	�(Ñ	óAð˜sð  t¨C¡yô r%   r   )r2   Útypingr   r   r   r   r   r   r	   Úurllib.parser
   Úbs4r   Úlangchain_core.documentsr   Ú)langchain_community.document_loaders.baser   Ú-langchain_community.document_loaders.web_baser   r   r‡   r%   r#   Ú<module>rŽ      s.   ðÛ ß K× KÑ KÝ !å Ý -å @Ý Gôv�Jõ vr%   