§
    šŠtjÚ  ã                   ób   — d dl mZmZ d dlZd dlmZ d dlmZ d dlm	Z	 dZ
 G d„ de¦  «        ZdS )	é    )ÚListÚOptionalN)ÚDocument)Ú
BaseLoader)ÚWebBaseLoaderzhttps://www.ifixit.com/api/2.0c            	       óî   — e Zd ZdZdefd„Zdee         fd„Ze	dded	edee         fd
„¦   «         Z
	 ddee         dee         fd„Z	 ddee         dedee         fd„Zddee         dee         fd„ZdS )ÚIFixitLoadera¥  Load `iFixit` repair guides, device wikis and answers.

    iFixit is the largest, open repair community on the web. The site contains nearly
    100k repair manuals, 200k Questions & Answers on 42k devices, and all the data is
    licensed under CC-BY.

    This loader will allow you to download the text of a repair guide, text of Q&A's
    and wikis from devices on iFixit using their open APIs and web scraping.
    Úweb_pathc                 óÀ  ‡— |                      d¦  «        st          d¦  «        ‚|                     dd¦  «        Šg d¢}	 t          ˆfd„|D ¦   «         ¦  «        st          d¦  «        ‚d„ ‰                     d¦  «        D ¦   «         }	 |d	         d
k    r|d	         nd| _        | j        dk    s| j        dk    r|d         | _        n|d         | _        || _        dS )zInitialize with a web path.zhttps://www.ifixit.comz1web path must start with 'https://www.ifixit.com'Ú )z/Devicez/Guidez/Answersz	/Teardownc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S ©N)Ú
startswith)Ú.0Úallowed_pathÚpaths     €úi/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/document_loaders/ifixit.pyú	<genexpr>z(IFixitLoader.__init__.<locals>.<genexpr>!   s/   øè è € ÐSÐS°\�4—?’? <Ñ0Ô0ÐSÐSÐSÐSÐSÐSó    z?web path must start with /Device, /Guide, /Teardown or /Answersc                 ó   — g | ]}|¯|‘ŒS © r   )r   Úxs     r   ú
<listcomp>z)IFixitLoader.__init__.<locals>.<listcomp>&   s   € Ð2Ð2Ð2˜°Ð2�!Ð2Ð2Ð2r   ú/r   ÚTeardownÚGuideÚAnswersé   é   N)r   Ú
ValueErrorÚreplaceÚanyÚsplitÚ	page_typeÚidr
   )Úselfr
   Úallowed_pathsÚpiecesr   s       @r   Ú__init__zIFixitLoader.__init__   s  ø€ à×"Ò"Ð#;Ñ<Ô<ð 	RÝÐPÑQÔQÐQà×ÒÐ 8¸"Ñ=Ô=ˆàFÐFÐFˆàÝÐSÐSÐSÐSÀ]ÐSÑSÔSÑSÔSð 	ÝØQñô ð ð 3Ð2˜TŸZšZ¨™_œ_Ð2Ñ2Ô2ˆà;Ø&,¨Q¤i°:Ò&=Ð&=˜ œ˜À7ˆŒàŒ>˜WÒ$Ð$¨¬¸)Ò(CÐ(CØ˜Q”iˆDŒGˆGà˜Q”iˆDŒGà ˆŒˆˆr   Úreturnc                 ó   — | j         dk    r|                      ¦   «         S | j         dk    s| j         dk    r|                      ¦   «         S | j         dk    r|                      ¦   «         S t	          d| j         z   ¦  «        ‚)NÚDevicer   r   r   zUnknown page type: )r$   Úload_deviceÚ
load_guideÚload_questions_and_answersr    )r&   s    r   ÚloadzIFixitLoader.load2   s   € ØŒ>˜XÒ%Ð%Ø×#Ò#Ñ%Ô%Ð%ØŒ^˜wÒ&Ð&¨$¬.¸JÒ*FÐ*FØ—?’?Ñ$Ô$Ð$ØŒ^˜yÒ(Ð(Ø×2Ò2Ñ4Ô4Ð4åÐ2°T´^ÑCÑDÔDÐDr   r   ÚallÚqueryÚdoc_typec                 óÄ  — t          j        t          dz   | z   dz   |z   ¦  «        }|j        dk    r*t	          d| z   dz   |                     ¦   «         z   ¦  «        ‚|                     ¦   «         }|d         }g }|D ]d}	 t          |d         ¦  «        }|j        dk    r||                     d	¬
¦  «        z  }n|| 	                    ¦   «         z  }ŒU# t          $ r Y Œaw xY w|S )zìLoad suggestions.

        Args:
            query: A query string
            doc_type: The type of document to search for. Can be one of "all",
              "device", "guide", "teardown", "answer", "wiki".

        Returns:

        z	/suggest/z
?doctypes=éÈ   z Could not load suggestions for "z"
ÚresultsÚurlr,   F)Úinclude_guides)
ÚrequestsÚgetÚIFIXIT_BASE_URLÚstatus_coder    Újsonr	   r$   r-   r0   )r2   r3   ÚresÚdatar6   ÚoutputÚresultÚloaders           r   Úload_suggestionszIFixitLoader.load_suggestions<   s  € õ ŒlÝ˜kÑ)¨EÑ1°LÑ@À8ÑKñ
ô 
ˆð Œ?˜cÒ!Ð!ÝØ2°UÑ:¸UÑBÀSÇXÂXÁZÄZÑOñô ð ð �xŠx‰zŒzˆà�y”/ˆØˆàð 	ð 	ˆFðÝ% f¨U¤mÑ4Ô4�ØÔ# xÒ/Ð/Ø˜f×0Ò0ÀÐ0ÑFÔFÑF�F�Fà˜fŸkšk™mœmÑ+�FøøÝð ð ð Ø�ðøøøð ˆs   Á>ACÃ
CÃCNÚurl_overridec                 óÈ  — t          |€| j        n|¦  «        }|                     ¦   «         }g }|                     dd¦  «        j        }|                     d|z   ¦  «         |                     |                     d¦  «        j                             ¦   «         ¦  «         |                     dd¦  «        }|r/|                     d|j                             ¦   «         z   ¦  «         |                     d	¦  «        D ]£}| 	                    d
¦  «        r d|d
         v r|                     d¦  «         n5d|d         v r|                     d¦  «         n|                     d¦  «         |d„ |                     d¦  «        D ¦   «         z  }|                     d¦  «         Œ¤d 
                    |¦  «                             ¦   «         }| j        |dœ}	t          ||	¬¦  «        gS )zœLoad a list of questions and answers.

        Args:
            url_override: A URL to override the default URL.

        Returns: List[Document]

        NÚh1z
post-titleú# z.post-content .post-textÚdivzpost-answers-headerz
## z".js-answers-list .post.post-answerÚitempropÚacceptedAnswerz
### Accepted Answerzpost-helpfulÚclassz
### Most Helpful Answerz
### Other Answerc                 ó@   — g | ]}|j                              ¦   «         ‘ŒS r   )ÚtextÚstrip)r   Úas     r   r   z;IFixitLoader.load_questions_and_answers.<locals>.<listcomp>ƒ   s/   € ð ð ð Ø#$�”—’‘”ðð ð r   ú
©ÚsourceÚtitle©Úpage_contentÚmetadata)r   r
   ÚscrapeÚfindrM   ÚappendÚ
select_onerN   ÚselectÚhas_attrÚjoinr   )
r&   rD   rB   Úsoupr@   rS   ÚanswersHeaderÚanswerrM   rV   s
             r   r/   z'IFixitLoader.load_questions_and_answersb   så  € õ °Ð0D˜tœ}˜}È,ÑWÔWˆØ�}Š}‰Œˆàˆà—	’	˜$ Ñ-Ô-Ô2ˆà�Š�d˜U‘lÑ#Ô#Ð#Ø�Š�d—o’oÐ&@ÑAÔAÔF×LÒLÑNÔNÑOÔOÐOàŸ	š	 %Ð)>Ñ?Ô?ˆØð 	@Ø�MŠM˜' MÔ$6×$<Ò$<Ñ$>Ô$>Ñ>Ñ?Ô?Ð?à—k’kÐ"FÑGÔGð 	 ð 	 ˆFØ�Š˜zÑ*Ô*ð 4Ð/?À6È*ÔCUÐ/UÐ/UØ—’Ð5Ñ6Ô6Ð6Ð6Ø 6¨'¤?Ð2Ð2Ø—’Ð9Ñ:Ô:Ð:Ð:à—’Ð2Ñ3Ô3Ð3àð ð Ø(.¯ªÐ6PÑ(QÔ(Qðñ ô ñ ˆFð �MŠM˜$ÑÔÐÐà�yŠy˜Ñ Ô ×&Ò&Ñ(Ô(ˆà"œm°eÐ<Ð<ˆå d°XÐ>Ñ>Ô>Ð?Ð?r   Tr8   c                 ó   ‡
— g }|€t           dz   | j        z   }n|}t          j        |¦  «        }|                     ¦   «         Š
d                     ˆ
fd„dD ¦   «         ¦  «                             ¦   «         }| j        ‰
d         dœ}|                     t          ||¬¦  «        ¦  «         |rR	 d	„ ‰
d
         D ¦   «         }|D ]<}	|                     t          |	¦  «                             ¦   «         d         ¦  «         Œ=|S )zçLoads a device

        Args:
            url_override: A URL to override the default URL.
            include_guides: Whether to include guides linked to from the device.
              Defaults to True.

        Returns:

        Nz/wikis/CATEGORY/rP   c                 ó(   •— g | ]}|‰v ¯‰|         ‘ŒS r   r   )r   Úkeyr?   s     €r   r   z,IFixitLoader.load_device.<locals>.<listcomp>¤   s.   ø€ ð ð ð àØ˜$�;�;ð �S”	à�;�;r   )rS   ÚdescriptionÚcontents_rawrS   rQ   rT   c                 ó   — g | ]
}|d          ‘ŒS )r7   r   )r   Úguides     r   r   z,IFixitLoader.load_device.<locals>.<listcomp>°   s   € ÐCÐCÐC¨5˜% œ,ÐCÐCÐCr   Úguidesr   )r;   r%   r9   r:   r=   r]   rN   r
   rY   r   r	   r0   )r&   rD   r8   Ú	documentsr7   r>   rM   rV   Ú
guide_urlsÚ	guide_urlr?   s             @r   r-   zIFixitLoader.load_deviceŽ   s,  ø€ ð ˆ	ØÐÝ!Ð$6Ñ6¸¼Ñ@ˆCˆCàˆCåŒl˜3ÑÔˆØ�xŠx‰zŒzˆØ�yŠyðð ð ð àCðñ ô ñ
ô 
÷ Š%‰'Œ'ð 	ð #œm°d¸7´mÐDÐDˆØ×Ò�¨t¸hÐGÑGÔGÑHÔHÐHàð 	DØTØCÐC°D¸´NÐCÑCÔCˆJØ'ð Dð D�	Ø× Ò ¥¨iÑ!8Ô!8×!=Ò!=Ñ!?Ô!?ÀÔ!BÑCÔCÐCÐCàÐr   c                 ó^  — |€t           dz   | j        z   }n|}t          j        |¦  «        }|j        dk    r/t          d| j        z   dz   |                     ¦   «         z   ¦  «        ‚|                     ¦   «         }d|d         z   |d         g}|                     d	¦  «         t          |d
         ¦  «        dk    r|                     d¦  «         n)|d
         D ] }|                     d|d         z   ¦  «         Œ!|                     d¦  «         t          |d         ¦  «        dk    r|                     d¦  «         n)|d         D ] }|                     d|d         z   ¦  «         Œ!|d         D ]m}|                     d|d         dk    r|d         nd 
                    |d         ¦  «        z   ¦  «         |d         D ]}	|                     |	d         ¦  «         ŒŒn|                     |d         ¦  «         d                     |¦  «        }
| j        |d         dœ}t          |
|¬¦  «        gS )zƒLoad a guide

        Args:
            url_override: A URL to override the default URL.

        Returns: List[Document]

        Nz/guides/r5   zCould not load guide: rP   rG   rS   Úintroduction_rawz

###Tools Required:Útoolsr   z
 - Nonez
 - rM   z

###Parts Required:ÚpartsÚstepsz

## r   zStep {}ÚorderbyÚlinesÚtext_rawÚconclusion_rawrQ   rT   )r;   r%   r9   r:   r<   r    r
   r=   rY   ÚlenÚformatr]   r   )r&   rD   r7   r>   r?   Ú	doc_partsÚtoolÚpartÚrowÚlinerM   rV   s               r   r.   zIFixitLoader.load_guide¶   sp  € ð ÐÝ! JÑ.°´Ñ8ˆCˆCàˆCåŒl˜3ÑÔˆàŒ?˜cÒ!Ð!ÝØ(¨4¬=Ñ8¸4Ñ?À#Ç(Â(Á*Ä*ÑLñô ð ð �xŠx‰zŒzˆà˜D œMÑ)¨4Ð0BÔ+CÐDˆ	à×ÒÐ1Ñ2Ô2Ð2Ýˆt�GŒ}ÑÔ Ò"Ð"Ø×Ò˜[Ñ)Ô)Ð)Ð)à˜Wœð 9ð 9�Ø× Ò  ¨4°¬<Ñ!7Ñ8Ô8Ð8Ð8à×ÒÐ1Ñ2Ô2Ð2Ýˆt�GŒ}ÑÔ Ò"Ð"Ø×Ò˜[Ñ)Ô)Ð)Ð)à˜Wœð 9ð 9�Ø× Ò  ¨4°¬<Ñ!7Ñ8Ô8Ð8Ð8à˜”=ð 	3ð 	3ˆCØ×ÒØð ˜7”| rÒ)Ð)ð ˜”L�Là"×)Ò)¨#¨i¬.Ñ9Ô9ñ	ñô ð ð ˜Gœð 3ð 3�Ø× Ò   jÔ!1Ñ2Ô2Ð2Ð2ð3ð 	×Ò˜Ð.Ô/Ñ0Ô0Ð0à�yŠy˜Ñ#Ô#ˆà"œm°d¸7´mÐDÐDˆå d°XÐ>Ñ>Ô>Ð?Ð?r   )r   r1   r   )NT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr)   r   r   r0   ÚstaticmethodrC   r   r/   Úboolr-   r.   r   r   r   r	   r	      sS  € € € € € ðð ð! ð !ð !ð !ð !ð6E�d˜8”nð Eð Eð Eð Eð ð#ð # ð #°Cð #ÀDÈÄNð #ð #ð #ñ „\ð#ðL -1ð*@ð *@Ø$ SœMð*@à	ˆhŒð*@ð *@ð *@ð *@ðZ JNð&ð &Ø$ SœMð&ØBFð&à	ˆhŒð&ð &ð &ð &ðP:@ð :@ x°¤}ð :@ÀÀXÄð :@ð :@ð :@ð :@ð :@ð :@r   r	   )Útypingr   r   r9   Úlangchain_core.documentsr   Ú)langchain_community.document_loaders.baser   Ú-langchain_community.document_loaders.web_baser   r;   r	   r   r   r   ú<module>r‡      s©   ðØ !Ð !Ð !Ð !Ð !Ð !Ð !Ð !à €€€Ø -Ð -Ð -Ð -Ð -Ð -à @Ð @Ð @Ð @Ð @Ð @Ø GÐ GÐ GÐ GÐ GÐ Gà2€ðd@ð d@ð d@ð d@ð d@�:ñ d@ô d@ð d@ð d@ð d@r   