
    dh{                     x    S SK r S SKrS SKJr  S SKJrJrJrJr  S SK	J
r
  S SKJrJr  S SKJr   " S S\\5      rg)	    N)Path)AnyDictListOptional)Document)	BaseModelmodel_validator)
BaseLoaderc                      \ rS rSr% Sr\\S'    Sr\\   \S'    Sr	\\
\      \S'    Sr\\S'    \" S	S
9\S\\\4   S\4S j5       5       rS\4S jrS\S\
\   4S jrS\S\\   4S jrS\
\   4S jrS\
\   4S jrSrg)DropboxLoader   z|Load files from `Dropbox`.

In addition to common files such as text and PDF files, it also supports
*Dropbox Paper* files.
dropbox_access_tokenNdropbox_folder_pathdropbox_file_pathsF	recursivebeforemodevaluesreturnc                     UR                  S5      b  UR                  S5      b  [        S5      eUR                  S5      c!  UR                  S5      (       d  [        S5      eU$ )zDValidate that either folder_path or file_paths is set, but not both.r   r   z.Cannot specify both folder_path and file_pathsz-Must specify either folder_path or file_paths)get
ValueError)clsr   s     d/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/document_loaders/dropbox.pyvalidate_inputsDropboxLoader.validate_inputs$   sf    
 JJ,-9

/0<MNN::+,4VZZ >
 >
 LMM    c                      SSK JnJn   U" U R                  5      nUR                  5         U$ ! [         a    [        S5      ef = f! UR                   a  n[        S5      UeSnAff = f)zCreate a Dropbox client.r   )Dropbox
exceptions!You must run `pip install dropboxzEInvalid Dropbox access token. Please verify your token and try again.N)dropboxr!   r"   ImportErrorr   users_get_current_account	AuthErrorr   )selfr!   r"   dbxexs        r   _create_dropbox_client$DropboxLoader._create_dropbox_client4   s|    	C3	$334C))+
 
  	CABB	C ## 	W	s    / "A AA)A$$A)folder_pathc                   ^  T R                  5       n SSKJn  SSKJn   UR                  UT R                  S9nUR                   Vs/ sH  n[        Xt5      (       d  M  UPM     nnU 4S	 jU 5        V	s/ sH
  n	U	c  M  U	PM     n
n	U
$ ! [
         a    [        S5      ef = f! UR                   a  n[        SU S35      UeSnAff = fs  snf s  sn	f )
z%Load documents from a Dropbox folder.r   r"   )FileMetadatar#   )r   z$Could not list files in the folder: z.. Please verify the folder path and try again.Nc              3   X   >#    U H   nTR                  UR                  5      v   M"     g 7fN)_load_file_from_pathpath_display).0filer(   s     r   	<genexpr><DropboxLoader._load_documents_from_folder.<locals>.<genexpr>Y   s'     WQV11$2C2CDDQVs   '*)r+   r$   r"   dropbox.filesr0   r%   files_list_folderr   ApiErrorr   entries
isinstance)r(   r-   r)   r"   r0   resultsr*   entryfilesdoc	documentss   `          r   _load_documents_from_folder)DropboxLoader._load_documents_from_folderD   s    ))+	C*2	++K4>>+RG %,OOWO5z%7VOW XQVW
W W 	 

 #  	CABB	C
 "" 	6{m D? ? 	 X
s:   B	 B" C
C
5C?C	B"C2CC	file_pathc                 d   U R                  5       n SSKJn   UR	                  U5      nUR
                  (       a  UR                  U5      u  pVO%UR                  (       a  UR                  US5      u  pV WR                  R                  S5      nSU 3[        R                  R=                  U5      S.n[?        UUS9$ ! [         a    [        S5      ef = f! UR                   a  n[        SU S35      UeSnAff = f! [         Ga$    [        R                  R!                  U5      S	   R#                  5       n	U	S
:X  a  [%        SU S35        SSKJn
  [*        R,                  " 5       n[/        UR0                  5      S-  n[3        USS9 nUR5                  WR                  5        SSS5        O! , (       d  f       O= f U
" [7        U5      5      nUR9                  5       nU(       a  US   s $ O8! [:         a  n[%        SU SU 35         SnA gSnAff = f[%        SU S35         gf = f)z Load a file from a Dropbox path.r   r/   r#   markdownzCould not load file: z+. Please verify the file pathand try again.Nzutf-8   z.pdfzFile z type detected as .pdf)UnstructuredPDFLoaderztmp.pdfwbr   z Error while trying to parse PDF z: z/ could not be decoded as pdf or text. Skipping.z
dropbox://)sourcetitle)page_contentmetadata) r+   r$   r"   r%   files_get_metadatais_downloadablefiles_downloadexport_infofiles_exportr;   r   contentdecodeUnicodeDecodeErrorospathsplitextlowerprint$langchain_community.document_loadersrI   tempfileTemporaryDirectoryr   nameopenwritestrload	Exceptionbasenamer   )r(   rE   r)   r"   file_metadata_responser*   textfile_extensionrI   temp_dirtemp_pdffloaderdocspdf_exrN   s                     r   r3   "DropboxLoader._load_file_from_path^   s#   ))+	C*	229=M,,!00;8 **!..y*E	##**73D< #9+.WW%%i0
 TH==k  	CABB	C "" 	'	{ 3! ! 	 " 	WW--i8;AACN'i[(>?@V $668.:(.!GGH,,- /.. 23x=AF!;;=D#Aw    <YKr&RS  I;&UV 5	s   B? 5C %C 5D  ?CC=(C88C= BH/F2)	H/2
G 	<H/,G40H/3H/4
H>HH/HH/.H/c                    ^  T R                   (       d  [        S5      eU 4S jT R                    5        Vs/ sH
  nUc  M  UPM     sn$ s  snf )z1Load documents from a list of Dropbox file paths.zfile_paths must be setc              3   D   >#    U H  nTR                  U5      v   M     g 7fr2   )r3   )r5   rE   r(   s     r   r7   ;DropboxLoader._load_documents_from_paths.<locals>.<genexpr>   s&      !8I )))44!8s    )r   r   )r(   rA   s   ` r   _load_documents_from_paths(DropboxLoader._load_documents_from_paths   sV    &&566!%!8!8
  
 	
 
s   A	 A	c                 r    U R                   b  U R                  U R                   5      $ U R                  5       $ )zLoad documents.)r   rC   ru   )r(   s    r   rc   DropboxLoader.load   s4    ##/33D4L4LMM2244r    )__name__
__module____qualname____firstlineno____doc__rb   __annotations__r   r   r   r   r   boolr
   classmethodr   r   r   r+   r   rC   r3   ru   rc   __static_attributes__ry   r   r   r   r      s     )-#-'.2c+2&ItM(#T#s(^    $  s tH~ 4;>c ;>hx6H ;>z
DN 
5d8n 5r   r   )rW   r]   pathlibr   typingr   r   r   r   langchain_core.documentsr   pydanticr	   r
   )langchain_community.document_loaders.baser   r   ry   r   r   <module>r      s/    
   , , - / @Z5J	 Z5r   