§
    šŠtj;$  ã                  óœ   — d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
mZ ddl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e¦  «        ZdS )z7Loader that loads data from Sharepoint Document Libraryé    )ÚannotationsN)ÚPath)ÚAnyÚDictÚIteratorÚListÚOptional)Ú
BaseLoader)ÚDocument)ÚField)ÚO365BaseLoaderc                  óô   — e Zd ZU dZ ed¦  «        Zded<   	 dZded<   	 dZded	<   	 dZ	ded
<   	 dZ
ded<   	  ej        ¦   «         dz  dz  Zded<   	 dZded<   	 edd„¦   «         Zd d„Zd!d„Zd"d„Zd#d„ZdS )$ÚSharePointLoaderzLoad  from `SharePoint`..ÚstrÚdocument_library_idNzOptional[str]Úfolder_pathzOptional[List[str]]Ú
object_idsÚ	folder_idFzOptional[bool]Ú	load_authz.credentialszo365_token.txtr   Ú
token_pathÚload_extended_metadataÚreturnú	List[str]c                ó
   — ddgS )zcReturn required scopes.
        Returns:
            List[str]: A list of required scopes.
        Ú
sharepointÚbasic© )Úselfs    úm/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/document_loaders/sharepoint.pyÚ_scopeszSharePointLoader._scopes%   s   € ð ˜gÐ&Ð&ó    úIterator[Document]c              #  óŠ
  K  — 	 ddl m}m} n# t          $ r t          d¦  «        ‚w xY w|                      ¦   «                              ¦   «                              | j        ¦  «        }t          ||¦  «        st          d| j        › d�¦  «        ‚| j
        �r0|                     | j
        ¦  «        }t          ||¦  «        st          d| j
        › d�¦  «        ‚|                      |¦  «        D ]Ø}t          |j                             d¦  «        ¦  «        }| j        du r|                      |¦  «        }| j        du r1|                      |¦  «        }|                     d	|j        i¦  «         | j                             |¦  «        D ]<}	| j        du r
||	j        d
<   | j        du r|	j                             |¦  «         |	V — Œ=ŒÙ| j        �r0|                     | j        ¦  «        }t          ||¦  «        st          d| j
        › d�¦  «        ‚|                      |¦  «        D ]Ø}t          |j                             d¦  «        ¦  «        }| j        du r|                      |¦  «        }| j        du r1|                      |¦  «        }|                     d	|j        i¦  «         | j                             |¦  «        D ]<}	| j        du r
||	j        d
<   | j        du r|	j                             |¦  «         |	V — Œ=ŒÙ| j        rØ|                      || j        ¦  «        D ]¼}t          |j                             d¦  «        ¦  «        }| j        du r|                      |¦  «        }| j        du r|                      |¦  «        }| j                             |¦  «        D ]<}	| j        du r
||	j        d
<   | j        du r|	j                             |¦  «         |	V — Œ=Œ½| j
        �sV| j        �sP| j        �sJ|                     ¦   «         }t          ||¦  «        st          d¦  «        ‚|                      |¦  «        D �]}t          |j                             d¦  «        ¦  «        }| j        du r|                      |¦  «        }| j        du r|                      |¦  «        }| j                             |¦  «        D ]|}
|
j                             |j        ¦  «         | j        du r
||
j        d
<   | j        du r;|
j                             |¦  «         |
j                             d	|j        i¦  «         |
V — Œ}ŒþdS dS dS dS )z¦
        Load documents lazily. Use this when working at a large scale.
        Yields:
            Document: A document object representing the parsed blob.
        r   )ÚDriveÚFolderzAO365 package not found, please install it with `pip install o365`zThere isn't a Drive with id ú.zThere isn't a folder with path ÚidTÚsource_full_urlÚauthorized_identitieszUnable to fetch root folderN)Ú
O365.driver$   r%   ÚImportErrorÚ_authÚstorageÚ	get_driver   Ú
isinstanceÚ
ValueErrorr   Úget_item_by_pathÚ_load_from_folderr   ÚmetadataÚgetr   r)   r   Úget_extended_metadataÚupdateÚweb_urlÚ_blob_parserÚ
lazy_parser   Úget_itemr   Ú_load_from_object_idsÚget_root_folder)r   r$   r%   ÚdriveÚtarget_folderÚblobÚfile_idÚauth_identitiesÚextended_metadataÚparsed_blobÚ	blob_parts              r   Ú	lazy_loadzSharePointLoader.lazy_load-   s  è è € ð	Ø0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0øÝð 	ð 	ð 	ÝØSñô ð ð	øøøð —
’
‘”×$Ò$Ñ&Ô&×0Ò0°Ô1IÑJÔJˆÝ˜% Ñ'Ô'ð 	YÝÐW¸DÔ<TÐWÐWÐWÑXÔXÐXØÔñ 	&Ø!×2Ò2°4Ô3CÑDÔDˆMÝ˜m¨VÑ4Ô4ð XÝ Ð!VÀ4ÔCSÐ!VÐ!VÐ!VÑWÔWÐWØ×.Ò.¨}Ñ=Ô=ð &ð &�Ý˜dœm×/Ò/°Ñ5Ô5Ñ6Ô6�Ø”> TÐ)Ð)Ø&*×&@Ò&@ÀÑ&IÔ&I�OØÔ.°$Ð6Ð6Ø(,×(BÒ(BÀ7Ñ(KÔ(KÐ%Ø%×,Ò,Ð.?ÀÔAVÐ-WÑXÔXÐXØ#'Ô#4×#?Ò#?ÀÑ#EÔ#Eð &ð &�KØ”~¨Ð-Ð-ØHW˜Ô,Ð-DÑEØÔ2°dÐ:Ð:Ø#Ô,×3Ò3Ð4EÑFÔFÐFØ%Ð%Ð%Ð%Ð%ð&ð Œ>ñ 	&Ø!ŸNšN¨4¬>Ñ:Ô:ˆMÝ˜m¨VÑ4Ô4ð XÝ Ð!VÀ4ÔCSÐ!VÐ!VÐ!VÑWÔWÐWØ×.Ò.¨}Ñ=Ô=ð &ð &�Ý˜dœm×/Ò/°Ñ5Ô5Ñ6Ô6�Ø”> TÐ)Ð)Ø&*×&@Ò&@ÀÑ&IÔ&I�OØÔ.°$Ð6Ð6Ø(,×(BÒ(BÀ7Ñ(KÔ(KÐ%Ø%×,Ò,Ð.?ÀÔAVÐ-WÑXÔXÐXØ#'Ô#4×#?Ò#?ÀÑ#EÔ#Eð &ð &�KØ”~¨Ð-Ð-ØHW˜Ô,Ð-DÑEØÔ2°dÐ:Ð:Ø#Ô,×3Ò3Ð4EÑFÔFÐFØ%Ð%Ð%Ð%Ð%ð&ð Œ?ð 	&Ø×2Ò2°5¸$¼/ÑJÔJð &ð &�Ý˜dœm×/Ò/°Ñ5Ô5Ñ6Ô6�Ø”> TÐ)Ð)Ø&*×&@Ò&@ÀÑ&IÔ&I�OØÔ.°$Ð6Ð6Ø(,×(BÒ(BÀ7Ñ(KÔ(KÐ%Ø#'Ô#4×#?Ò#?ÀÑ#EÔ#Eð &ð &�KØ”~¨Ð-Ð-ØHW˜Ô,Ð-DÑEØÔ2°dÐ:Ð:Ø#Ô,×3Ò3Ð4EÑFÔFÐFØ%Ð%Ð%Ð%Ð%ð&ð Ô ñ 	$ D¤Nñ 	$°d´oñ 	$Ø!×1Ò1Ñ3Ô3ˆMÝ˜m¨VÑ4Ô4ð @Ý Ð!>Ñ?Ô?Ð?Ø×.Ò.¨}Ñ=Ô=ð $ñ $�Ý˜dœm×/Ò/°Ñ5Ô5Ñ6Ô6�Ø”> TÐ)Ð)Ø&*×&@Ò&@ÀÑ&IÔ&I�OØÔ.°$Ð6Ð6Ø(,×(BÒ(BÀ7Ñ(KÔ(KÐ%Ø!%Ô!2×!=Ò!=¸dÑ!CÔ!Cð 	$ð 	$�IØÔ&×-Ò-¨d¬mÑ<Ô<Ð<Ø”~¨Ð-Ð-ØFU˜	Ô*Ð+BÑCØÔ2°dÐ:Ð:Ø!Ô*×1Ò1Ð2CÑDÔDÐDØ!Ô*×1Ò1Ø.°Ô0EÐFñô ð ð $�O�O�O�Oð	$ð	$ð 	$ð 	$ð 	$ð 	$ð 	$ð$ð $s   „ �'r@   r   c                ó‚  — |                       ¦   «         }|                     d¦  «        }d| j        › d|› d�}dd|› �i}t          j        d||¬¦  «        }|                     ¦   «         }g }|                     d	¦  «        D ]½}	|	                     d
¦  «        r¦|	                     d
¦  «                             d¦  «        pO|	                     d
¦  «                             d¦  «        p'|	                     d
¦  «                             d¦  «        }
|
r,|
                     d¦  «        }|r|                     |¦  «         Œ¾|S )a  
        Retrieve the access identities (user/group emails) for a given file.
        Args:
            file_id (str): The ID of the file.
        Returns:
            List: A list of group names (email addresses) that have
                  access to the file.
        Úaccess_tokenú(https://graph.microsoft.com/v1.0/drives/ú/items/z/permissionsÚAuthorizationúBearer ÚGET©ÚheadersÚvalueÚgrantedToV2ÚsiteUserÚuserÚgroupÚemail)Ú_fetch_access_tokenr4   r   ÚrequestsÚrequestÚjsonÚappend)r   r@   ÚdatarG   ÚurlrN   ÚresponseÚaccess_listÚgroup_namesÚaccess_dataÚ	site_datarT   s               r   r)   z&SharePointLoader.authorized_identities�   sk  € ð ×'Ò'Ñ)Ô)ˆØ—x’x Ñ/Ô/ˆðGØÔ(ðGð GØ18ðGð Gð Gð 	ð #Ð$<¨lÐ$<Ð$<Ð=ˆÝÔ# E¨3¸Ð@Ñ@Ô@ˆØ—m’m‘o”oˆàˆà&Ÿ?š?¨7Ñ3Ô3ð 
	2ð 
	2ˆKØ�Š˜}Ñ-Ô-ð 	2à —_’_ ]Ñ3Ô3×7Ò7¸
ÑCÔCð EØ#Ÿš¨Ñ6Ô6×:Ò:¸6ÑBÔBðEà#Ÿš¨Ñ6Ô6×:Ò:¸7ÑCÔCð ð
 ð 2Ø%ŸMšM¨'Ñ2Ô2�EØð 2Ø#×*Ò*¨5Ñ1Ô1Ð1øØÐr!   r   c                ó²   — t          | j        d¬¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   t          j        |¦  «        }|S )z|
        Fetch the access token from the token file.
        Returns:
            The access token as a dictionary.
        zutf-8)ÚencodingN)Úopenr   ÚreadrX   Úloads)r   ÚfÚsrZ   s       r   rU   z$SharePointLoader._fetch_access_token£   sŠ   € õ �$”/¨GÐ4Ñ4Ô4ð 	¸Ø—’‘”ˆAð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	åŒz˜!‰}Œ}ˆØˆs   —8¸<¿<r   c                ó:  — |                       ¦   «         }|                     d¦  «        }d| j        › d|› d�}dd|› �i}t          j        d||¬¦  «        }|                     ¦   «         }|                     d	d
¦  «        |                     di ¦  «                             di ¦  «                             dd¦  «        |                     di ¦  «                             dd¦  «                             d¦  «        d         dz   |                     dd¦  «        z   dœ}|S )a  
        Retrieve extended metadata for a file in SharePoint.
        As of today, following fields are supported in the extended metadata:
        - size: size of the source file.
        - owner: display name of the owner of the source file.
        - full_path: pretty human readable path of the source file.
        Args:
            file_id (str): The ID of the file.
        Returns:
            `dict` containing the extended metadata of the file, including size, owner,
                and full path.
        rG   rH   rI   z,?$select=size,createdBy,parentReference,namerJ   rK   rL   rM   Úsizer   Ú	createdByrR   ÚdisplayNameÚ ÚparentReferenceÚpathú:éÿÿÿÿú/Úname)ri   ÚownerÚ	full_path)rU   r4   r   rV   rW   rX   Úsplit)	r   r@   rZ   rG   r[   rN   r\   r3   Ústaged_metadatas	            r   r5   z&SharePointLoader.get_extended_metadata®   s0  € ð ×'Ò'Ñ)Ô)ˆØ—x’x Ñ/Ô/ˆð;ØÔ'ð;ð ;Ø07ð;ð ;ð ;ð 	ð
 #Ð$<¨lÐ$<Ð$<Ð=ˆÝÔ# E¨3¸Ð@Ñ@Ô@ˆØ—=’=‘?”?ˆà—L’L ¨Ñ+Ô+Ø—\’\ +¨rÑ2Ô2ßŠS�˜‰_Œ_ßŠS� Ñ#Ô#Ø!ŸšÐ&7¸Ñ<Ô<ßŠS�˜‰_Œ_ßŠU�3‰ZŒZ˜ôð ñð �lŠl˜6 2Ñ&Ô&ñ	'ð

ð 

ˆð Ðr!   )r   r   )r   r"   )r@   r   r   r   )r   r   )r@   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__annotations__r   r   r   r   r   Úhomer   r   Úpropertyr    rE   r)   rU   r5   r   r!   r   r   r      s9  € € € € € € Ø"Ð"à$˜u S™zœzÐÐ)Ð)Ð)Ñ)ØGØ!%€KÐ%Ð%Ð%Ñ%Ø4Ø&*€JÐ*Ð*Ð*Ñ*Ø4Ø#€IÐ#Ð#Ð#Ñ#Ø2Ø %€IÐ%Ð%Ð%Ñ%Ø4Ø �t”y‘{”{ ^Ñ3Ð6FÑF€JÐFÐFÐFÑFØ2Ø-2ÐÐ2Ð2Ð2Ñ2ØHàð'ð 'ð 'ñ „Xð'ðR$ð R$ð R$ð R$ðh ð  ð  ð  ðD	ð 	ð 	ð 	ð"ð "ð "ð "ð "ð "r!   r   )rz   Ú
__future__r   rX   Úpathlibr   Útypingr   r   r   r   r	   rV   Úlangchain_core.document_loadersr
   Úlangchain_core.documentsr   Úpydanticr   Ú.langchain_community.document_loaders.base_o365r   r   r   r!   r   ú<module>r…      sÿ   ðØ =Ð =à "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6à €€€Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø -Ð -Ð -Ð -Ð -Ð -Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð
}ð }ð }ð }ð }�~ zñ }ô }ð }ð }ð }r!   