Ë
    µŒjÚ  ã                   óZ   — 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y)	é    )Ú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y	)Ú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                 ó¢  ‡— |j                  d«      st        d«      ‚|j                  dd«      Šg d¢}	 t        ˆfd„|D «       «      st        d«      ‚‰j	                  d«      D �cg c]  }|sŒ|‘Œ	 }}	 |d   d	k7  r|d   nd
| _        | j
                  d
k(  s| j
                  dk(  r|d   | _        || _        y|d   | _        || _        yc c}w )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   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­w©N)Ú
startswith)Ú.0Úallowed_pathÚpaths     €úu/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/document_loaders/ifixit.pyÚ	<genexpr>z(IFixitLoader.__init__.<locals>.<genexpr>!   s   øè ø€ ÐSÁ]°\�4—?‘? <×0Á]ùs   ƒz?web path must start with /Device, /Guide, /Teardown or /AnswersÚ/r   ÚTeardownÚGuideÚAnswersé   é   N)r   Ú
ValueErrorÚreplaceÚanyÚsplitÚ	page_typeÚidr
   )Úselfr
   Úallowed_pathsÚxÚpiecesr   s        @r   Ú__init__zIFixitLoader.__init__   sÖ   ø€ à×"Ñ"Ð#;Ô<ÜÐPÓQÐQà×ÑÐ 8¸"Ó=ˆâFˆàÜÓSÁ]ÓSÔSÜØQóð ð "ŸZ™Z¨œ_Ó2™_˜²’!˜_ˆÐ2à;Ø&,¨Q¡i°:Ò&=˜ šÀ7ˆŒà�>‰>˜WÒ$¨¯©¸)Ò(CØ˜Q‘iˆDŒGð !ˆ�ð ˜Q‘iˆDŒGà ˆ�ùò 3s   Á'CÁ/CÚreturnc                 ó
  — | j                   dk(  r| j                  «       S | j                   dk(  s| j                   dk(  r| j                  «       S | j                   dk(  r| j                  «       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   sq   € Ø�>‰>˜XÒ%Ø×#Ñ#Ó%Ð%Ø�^‰^˜wÒ&¨$¯.©.¸JÒ*FØ—?‘?Ó$Ð$Ø�^‰^˜yÒ(Ø×2Ñ2Ó4Ð4äÐ2°T·^±^ÑCÓDÐDó    ÚqueryÚdoc_typec                 óš  — t        j                  t        dz   | z   dz   |z   «      }|j                  dk7  r"t	        d| z   dz   |j                  «       z   «      ‚|j                  «       }|d   }g }|D ]I  }	 t        |d   «      }|j                  dk(  r||j                  d	¬
«      z  }n||j                  «       z  }ŒK |S # t        $ r Y ŒYw xY w)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)   r,   )r.   r/   ÚresÚdatar2   ÚoutputÚresultÚloaders           r   Úload_suggestionszIFixitLoader.load_suggestions<   sæ   € ô �l‰lÜ˜kÑ)¨EÑ1°LÑ@À8ÑKó
ˆð �?‰?˜cÒ!ÜØ2°UÑ:¸UÑBÀSÇXÁXÃZÑOóð ð �x‰x‹zˆà�y‘/ˆØˆãˆFðÜ% f¨U¡mÓ4�Ø×#Ñ# xÒ/Ø˜f×0Ñ0ÀÐ0ÓFÑF‘Fà˜fŸk™k›mÑ+�Føð ð ˆøô ò Ùðús   Á4AB>Â>	C
Ã	C
NÚurl_overridec                 ó”  — t        |€| j                  n|«      }|j                  «       }g }|j                  dd«      j                  }|j                  d|z   «       |j                  |j                  d«      j                  j                  «       «       |j                  dd«      }|r,|j                  d|j                  j                  «       z   «       |j                  d«      D ]¡  }|j                  d	«      rd
|d	   v r|j                  d«       n*d|d   v r|j                  d«       n|j                  d«       ||j                  d«      D �cg c]  }|j                  j                  «       ‘Œ c}z  }|j                  d«       Œ£ dj                  |«      j                  «       }	| j                  |dœ}
t        |	|
¬«      gS c c}w )zœLoad a list of questions and answers.

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

        Returns: List[Document]

        Ú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 AnswerÚ
©ÚsourceÚtitle©Úpage_contentÚmetadata)r   r
   ÚscrapeÚfindÚtextÚappendÚ
select_oneÚstripÚselectÚhas_attrÚjoinr   )r!   r@   r>   Úsoupr<   rK   ÚanswersHeaderÚanswerÚarQ   rN   s              r   r+   z'IFixitLoader.load_questions_and_answersb   s‰  € ô °Ð0D˜tŸ}š}È,ÓWˆØ�}‰}‹ˆàˆà—	‘	˜$ Ó-×2Ñ2ˆà�‰�d˜U‘lÔ#Ø�‰�d—o‘oÐ&@ÓA×FÑF×LÑLÓNÔOàŸ	™	 %Ð)>Ó?ˆÙØ�M‰M˜' M×$6Ñ$6×$<Ñ$<Ó$>Ñ>Ô?à—k‘kÐ"FÖGˆFØ�‰˜zÔ*Ð/?À6È*ÑCUÑ/UØ—‘Ð5Õ6Ø 6¨'¡?Ñ2Ø—‘Ð9Õ:à—‘Ð2Ô3àØ(.¯©Ð6PÔ(QóÙ(Q 1�—‘—‘•Ð(Qññ ˆFð �M‰M˜$Õð Hð �y‰y˜Ó ×&Ñ&Ó(ˆà"Ÿm™m°eÑ<ˆä d°XÔ>Ð?Ð?ùòs   Å!Gr4   c                 óö  — g }|€t         dz   | j                  z   }n|}t        j                  |«      }|j	                  «       }dj                  dD �cg c]  }||v r||   ‘Œ c}«      j                  «       }| j                  |d   dœ}	|j                  t        ||	¬«      «       |rH	 |d   D �
cg c]  }
|
d   ‘Œ	 }}
|D ]-  }|j                  t        |«      j                  «       d	   «       Œ/ |S c c}w c c}
w )
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:

        z/wikis/CATEGORY/rH   )rK   ÚdescriptionÚcontents_rawrK   rI   rL   Úguidesr3   r   )r7   r    r5   r6   r9   rW   rT   r
   rR   r   r	   r,   )r!   r@   r4   Ú	documentsr3   r:   r;   ÚkeyrQ   rN   ÚguideÚ
guide_urlsÚ	guide_urls                r   r)   zIFixitLoader.load_deviceŽ   s  € ð ˆ	ØÐÜ!Ð$6Ñ6¸¿¹Ñ@‰CàˆCä�l‰l˜3ÓˆØ�x‰x‹zˆØ�y‰yñ DóáC�CØ˜$‘;ð �S“	ØCñó
÷ ‰%‹'ð 	ð #Ÿm™m°d¸7±mÑDˆØ×Ñœ¨t¸hÔGÔHáØTØ48¸²NÓC±N¨5˜% ›,°NˆJÐCÛ'�	Ø× Ñ ¤¨iÓ!8×!=Ñ!=Ó!?ÀÑ!BÕCð (ð Ðùò!ùò Ds   ÁC1Â/C6c                 ó¦  — |€t         dz   | j                  z   }n|}t        j                  |«      }|j                  dk7  r,t        d| j                  z   dz   |j                  «       z   «      ‚|j                  «       }d|d   z   |d   g}|j                  d«       t        |d	   «      d
k(  r|j                  d«       n!|d	   D ]  }|j                  d|d   z   «       Œ |j                  d«       t        |d   «      d
k(  r|j                  d«       n!|d   D ]  }|j                  d|d   z   «       Œ |d   D ]S  }|j                  d|d   dk7  r|d   ndj                  |d   «      z   «       |d   D ]  }	|j                  |	d   «       Œ ŒU |j                  |d   «       dj                  |«      }
| j                  |d   dœ}t        |
|¬«      gS )zƒLoad a guide

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

        Returns: List[Document]

        z/guides/r1   zCould not load guide: rH   rC   rK   Úintroduction_rawz

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

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

## r   zStep {}ÚorderbyÚlinesÚtext_rawÚconclusion_rawrI   rL   )r7   r    r5   r6   r8   r   r
   r9   rR   ÚlenÚformatrW   r   )r!   r@   r3   r:   r;   Ú	doc_partsÚtoolÚpartÚrowÚlinerQ   rN   s               r   r*   zIFixitLoader.load_guide¶   së  € ð ÐÜ! JÑ.°·±Ñ8‰CàˆCä�l‰l˜3Óˆà�?‰?˜cÒ!ÜØ(¨4¯=©=Ñ8¸4Ñ?À#Ç(Á(Ã*ÑLóð ð �x‰x‹zˆà˜D ™MÑ)¨4Ð0BÑ+CÐDˆ	à×ÑÐ1Ô2Üˆt�G‰}Ó Ò"Ø×Ñ˜[Õ)à˜Wœ�Ø× Ñ  ¨4°©<Ñ!7Õ8ð &ð 	×ÑÐ1Ô2Üˆt�G‰}Ó Ò"Ø×Ñ˜[Õ)à˜Wœ�Ø× Ñ  ¨4°©<Ñ!7Õ8ð &ð ˜”=ˆCØ×ÑØð ˜7‘| rÒ)ð ˜’Là"×)Ñ)¨#¨i©.Ó9ñ	ôð ˜Gœ�Ø× Ñ   jÑ!1Õ2ñ %ð !ð 	×Ñ˜Ð.Ñ/Ô0à�y‰y˜Ó#ˆà"Ÿm™m°d¸7±mÑDˆä d°XÔ>Ð?Ð?r-   )r   Úallr   )NT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr%   r   r   r,   Ústaticmethodr?   r   r+   Úboolr)   r*   © r-   r   r	   r	      sÄ   „ ñð! ó !ð6E�d˜8‘nó Eð ñ# ð #°Cð #ÀDÈÁNò #ó ð#ðL -1ñ*@Ø$ S™Mð*@à	ˆh‰ó*@ðZ JNñ&Ø$ S™Mð&ØBFð&à	ˆh‰ó&ñP:@ x°¡}ð :@ÀÀXÁô :@r-   r	   )Útypingr   r   r5   Úlangchain_core.documentsr   Ú)langchain_community.document_loaders.baser   Ú-langchain_community.document_loaders.web_baser   r7   r	   r}   r-   r   Ú<module>r‚      s)   ðß !ã Ý -å @Ý Gà2€ôd@�:õ d@r-   