
    NgY$                        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    k/var/www/html/ai-engine/env/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WD<TWWWXXX 	&!2243CDDMmV44 X !V4CS!V!V!VWWW..}== & &dm//5566>T))&*&@&@&I&IO.$66(,(B(B7(K(K%%,,.?AV-WXXX#'#4#?#?#E#E & &K~--HW,-DE2d::#,334EFFF%%%%%& > 	&!NN4>::MmV44 X !V4CS!V!V!VWWW..}== & &dm//5566>T))&*&@&@&I&IO.$66(,(B(B7(K(K%%,,.?AV-WXXX#'#4#?#?#E#E & &K~--HW,-DE2d::#,334EFFF%%%%%& ? 	&225$/JJ & &dm//5566>T))&*&@&@&I&IO.$66(,(B(B7(K(K%#'#4#?#?#E#E & &K~--HW,-DE2d::#,334EFFF%%%%%&   	$DN 	$do 	$!1133MmV44 @ !>???..}== $ $dm//5566>T))&*&@&@&I&IO.$66(,(B(B7(K(K%!%!2!=!=d!C!C 	$ 	$I&--dm<<<~--FU	*+BC2d::!*112CDDD!*11.0EF   $OOOO	$	$ 	$ 	$ 	$ 	$ 	$$ $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    ''))xx//G(G G18G G G 	 #$<l$<$<=#E3@@@mmoo&??733 
	2 
	2K}-- 	2 __]3377
CC E#66::6BBE#66::7CC 
  2%MM'22E 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: A dictionary 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    ''))xx//;'; ;07; ; ; 	
 #$<l$<$<=#E3@@@==??LL++\\+r22S__S##!&7<<S__U3ZZ  ll62&&	'

 

 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        ""$uSzz))))G!%K%%%%4&*J****4#I####2 %I%%%%4 ty{{^36FFJ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!   