
    dhy4                       S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r
  SSKJr  SSKJrJr  SSKJrJrJrJrJrJrJrJr  SSKJrJrJrJrJr  SS	KJrJ r   SS
K!J"r"J#r#  SSK$J%r%  SSK&J'r'  SSK(J)r)  SSK*J+r+  \(       a  SSK,J-r-  SSK.J/r/J0r0  \Rb                  " \25      r3Sr4 " S S\5      r5 " S S\5      r6SS jr7SS jr8 " S S\#\5      r9g)1Base class for all loaders that uses O365 Package    )annotationsN)abstractmethod)datetime)PathPurePath)TYPE_CHECKINGAnyDictIterableListOptionalSequenceUnion)	BaseModelFieldFilePathPrivateAttr	SecretStr)BaseSettingsSettingsConfigDict)BaseBlobParser
BaseLoader)FileSystemBlobLoader)Blob)MimeTypeBasedParser)
get_parser)Account)DriveFolderi  P c                  X    \ rS rSr% \" SSS9rS\S'   \" SSS9rS\S	'   \" S
SSSS9r	Sr
g)_O365Settings*   .O365_CLIENT_ID)aliasstr	client_idO365_CLIENT_SECRETr   client_secretFz.env ignore)case_sensitiveenv_file
env_prefixextra N)__name__
__module____qualname____firstlineno__r   r'   __annotations__r)   r   model_config__static_attributes__r0       f/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/document_loaders/base_o365.pyr"   r"   *   s9    3&67Is7$S0DEM9E%v"HLr8   r"   c                  N    \ rS rSr% \R
                  " 5       S-  S-  rS\S'   Srg)_O365TokenStorage3   .credentialszo365_token.txtr   
token_pathr0   N)	r1   r2   r3   r4   r   homer>   r5   r7   r0   r8   r9   r;   r;   3   s    99;7:JJJJr8   r;   c                    0 nU  H7  n[         R                  " SU 35      u  p4U(       a  X1U'   M+  [        SU 35      e   U$ )2Fetch the mime types for the specified file types.zfile.zUnknown mimetype of extension )	mimetypes
guess_type
ValueError)
file_typesmime_types_mappingext	mime_type_s        r9   fetch_mime_typesrJ   7   sP     ++eC5M:	&/s#=cUCDD  r8   c                    0 nU  H5  n[         R                  " U5      nU(       a	  X!USS '   M)  [        SU 35      e   U$ )rA      NzUnknown mimetype )rB   guess_extensionrD   )
mime_typesrF   rH   rG   s       r9   fetch_extensionsrO   C   sN    	''	2*3s12w'0<==   r8   c                  >  ^  \ rS rSr% Sr\" \S9rS\S'    Sr	S\S'    \
rS	\S
'    SrS\S'    SrS\S'    0 rS\S'    \" 5       rS\S'   \" 5       rS\S'   \" 5       rS\S'   SU 4S jjr\SS j5       r\\S S j5       5       rS!S jr      S"S jrS#S jrSrU =r$ )$O365BaseLoaderO   r   )default_factoryr"   settingsFboolauth_with_tokenzUnion[int, str]
chunk_size	recursiveNzOptional[datetime]modified_sincezOptional[Dict[str, Any]]handlersr   _blob_parserSequence[str]_file_typesDict[str, str]_mime_typesc                  > [         TU ]  " S0 UD6  U R                  (       a  [        U R                  R	                  5       5      n [        U5      U l        [        [        U5      5      U l        U R                  R                  5        VVs0 sH  u  p4U R                  U   U_M     nnn[        US S9U l        g [        S5      U l        [        U R                  [        5      (       d!  [!        S[#        U R                  5       35      e[        [        U R                  R                  R	                  5       5      5      U l        g s  snnf ! [         an     [        U5      U l        [        [        U R                  R	                  5       5      5      U l        U R                  n N! [         a    [        SU S35      ef = ff = f)Nz=`handlers` keys must be either file extensions or mimetypes.
zj could not be interpreted as either.
File extensions and mimetypes cannot mix. Use either one or the other)rZ   fallback_parserdefaultzLget_parser("default) was supposed to return MimeTypeBasedParser.It returned r0   )super__init__rZ   listkeysrJ   r_   setr]   itemsrD   rO   r   r[   r   
isinstance	TypeErrortype)selfkwargshandler_keys	extensionhandlermime_handlers	__class__s         r9   rd   O365BaseLoader.__init__   s   "6"== 2 2 45L#3L#A #'L(9#:  /3mm.A.A.C!.C*	 $$Y/8.C  !$ !4&!D !+9 5Dd//1DEE##'(9(9#:";=   0T5F5F5O5O5T5T5V0WXD9!  '7'ED$'+C0@0@0E0E0G,H'ID$$(MMM! $X'. )66 s2   AE E(E E 
GAF''GGc                    U R                   $ )zBReturn a dict of supported file types to corresponding mime types.)r_   rl   s    r9   _fetch_mime_types O365BaseLoader._fetch_mime_types   s     r8   c                    g)zReturn required scopes.Nr0   ru   s    r9   _scopesO365BaseLoader._scopes   s    r8   c              #    #    U R                   nUR                  5       n0 n[        R                  " 5        n[        R
                  " [        R                  R                  U5      SS9  U GH  nUR                  (       d  M  UR                  [        UR                  5       5      ;   d  M@  U R                  (       a  UR                  U R                  :  d  Mm  UR                  n[        R                   " SUR                  5      (       aC  UR"                  R                  S-   [$        R&                  R)                  UR*                  5      -   nUR-                  XPR.                  S9  UUR                  [1        UR2                  5      [1        UR                  5      [1        UR4                  5      [1        UR6                  5      UR8                  [1        UR:                  5      S.XFR*                  '   GM     [=        US9nUR?                  5        H  n	[A        U	R                  [B        5      (       d  [E        S5      eU	R                  (       aJ  URG                  [1        U	R                  R*                  5      0 5      n
U	RH                  RK                  U
5        U	v   M     S	S	S	5        U RL                  (       a1  URO                  5        H  nU RQ                  U5       S	h  vN   M     g	g	! , (       d  f       NQ= f N7f)
a  Lazily load all files from a specified folder of the configured MIME type.

Args:
    folder: The Folder instance from which the files are to be loaded. This
        Folder instance should represent a directory in a file system where the
        files are stored.

Yields:
    An iterator that yields Blob instances, which are binary representations of
        the files loaded from the folder.
T)exist_ok"Doc.aspx\?sourcedoc=.*file=([^&]+)/to_pathrW   sourcerH   createdmodified
created_bymodified_bydescriptionidpath#Expected blob path to be a PurePathN))rv   	get_itemstempfileTemporaryDirectoryosmakedirsr   dirnameis_filerH   re   valuesrY   r   web_urlresearch_parenturllibparsequotenamedownloadrW   r&   r   r   r   r   	object_idr   yield_blobsri   r   NotImplementedErrorgetmetadataupdaterX   get_child_folders_load_from_folder)rl   folderfile_mime_typesrh   metadata_dicttemp_dirfiler   loaderblobfile_metadata_	subfolders               r9   r    O365BaseLoader._load_from_folder   s(     00  "35((*hKK1DA<<<~~o.D.D.F)GG $ 3 3 MMD,?,??%)\\F!yy Et||    %)LL$8$8&)%*&,ll&8&8&C%D !'
 !MM(MW*0-1^^+.t||+<,/,>.1$//.B/243C3C/D/3/?/?&)$..&9	8M))4! 6 *x8F**,!$))X66-.STT99%2%6%6s499>>7JB%ONMM((8
 -= +J >>#557	11)<<< 8 K +*N =s=   4K<AK)%K)+)K)GK)A K<K:
K<)
K73K<c              #    #    U R                   n0 n[        R                  " 5        nU GH}  nUR                  U5      nU(       d  [        R
                  " SU SU S35        M;  UR                  (       d  MN  UR                  [        UR                  5       5      ;   d  Mw  UR                  n[        R                  " SUR                  5      (       aC  UR                  R                  S-   [        R                  R!                  UR"                  5      -   nUR%                  XPR&                  S9  UUR                  UR(                  UR*                  [-        UR.                  5      [-        UR0                  5      UR2                  [-        UR4                  5      S.XGR"                  '   GM     [7        US9n	U	R9                  5        H  n
[;        U
R<                  [>        5      (       d  [A        S	5      eU
R<                  (       aJ  URC                  [-        U
R<                  R"                  5      0 5      nU
RD                  RG                  U5        U
v   M     S
S
S
5        g
! , (       d  f       g
= f7f)aw  Lazily load files specified by their object_ids from a drive.

Load files into the system as binary large objects (Blobs) and return Iterable.

Args:
    drive: The Drive instance from which the files are to be loaded. This Drive
        instance should represent a cloud storage service or similar storage
        system where the files are stored.
    object_ids: A list of object_id strings. Each object_id represents a unique
        identifier for a file in the drive.

Yields:
    An iterator that yields Blob instances, which are binary representations of
    the files loaded from the drive using the specified object_ids.
z!There isn't a file withobject_id z
 in drive .r}   r~   r   r   r   r   N)$rv   r   r   get_itemloggingwarningr   rH   re   r   r   r   r   r   r   r   r   r   r   rW   r   r   r&   r   r   r   r   r   r   ri   r   r   r   r   r   r   )rl   drive
object_idsr   r   r   r   r   r   r   r   r   s               r9   _load_from_object_ids$O365BaseLoader._load_from_object_ids   s    $ 0035((*h'	~~i0OO%%.Kz%C <<<~~o.D.D.F)GG!%99A4<<  !% 4 4"%!&"(,,"4"4TYY"?!@ #
 h??S&,)-'+||(,*-doo*>+.t/?/?+@+/+;+;"%dnn"5	4ii0) (> *x8F**,!$))X66-.STT99%2%6%6s499>>7JB%ONMM((8
 -C +**s*   $I.AI7%I F4I	I.
I+'I.c                j    SSK JnJn  U R                  (       a  [        5       nUR                  nU" UR                  UR                  S9nU" S
U R                  R                  U R                  R                  R                  5       4U R                  US.SS0D6nU$ U" [        R                  " 5       S-  S	9nU" S
U R                  R                  U R                  R                  R                  5       4U R                  US.SS0D6nUR!                  5         U$ ! [         a    [        S5      ef = f)zVAuthenticates the OneDrive API client

Returns:
    The authenticated Account object.
r   )r   FileSystemTokenBackendzAO365 package not found, please install it with `pip install o365`)r>   token_filename)credentialsscopestoken_backendraise_http_errorsFr=   )r>   r0   )O365r   r   ImportErrorrV   r;   r>   parentr   rT   r'   r)   get_secret_valuery   r   r?   authenticate)rl   r   r   token_storager>   r   accounts          r9   _authO365BaseLoader._auth$  s?   	<
 -/M&11J2%,,Z__M  MM++MM//@@B ||+ '.G0  399;7M  MM++MM//@@B ||+ '.G   "E  	S 	s   D D2)r[   r]   r_   )rm   r
   returnNone)r   r^   )r   	List[str])r   r    r   Iterable[Blob])r   r   r   r   r   r   )r   r   )r1   r2   r3   r4   __doc__r   r"   rT   r5   rV   
CHUNK_SIZErW   rX   rY   rZ   r   r[   r]   r_   rd   propertyrv   r   ry   r   r   r   r7   __classcell__)rr   s   @r9   rQ   rQ   O   s    ;#MBHmB0!OT!I",J,VIt8)-N&-)+H&+: $/=L.0!,K."--K/$YL     &  &6=p;;(1;	;z* *r8   rQ   )rE   r\   r   r^   )rN   r\   r   r^   ):r   
__future__r   r   rB   r   r   r   r   abcr   r   pathlibr   r   typingr	   r
   r   r   r   r   r   r   pydanticr   r   r   r   r   pydantic_settingsr   r   )langchain_community.document_loaders.baser   r   =langchain_community.document_loaders.blob_loaders.file_systemr   8langchain_community.document_loaders.blob_loaders.schemar   4langchain_community.document_loaders.parsers.genericr   5langchain_community.document_loaders.parsers.registryr   r   r   
O365.driver   r    	getLoggerr1   loggerr   r"   r;   rJ   rO   rQ   r0   r8   r9   <module>r      s    7 "   	 	     " V V V  ? P J T L(			8	$
L K K		Z r8   