
    ih{                     x    d dl Z d dlZd dlmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZmZ d dlmZ  G d dee      Zy)	    N)Path)AnyDictListOptional)Document)	BaseModelmodel_validator)
BaseLoaderc                       e Zd ZU dZeed<   	 dZee   ed<   	 dZee	e      ed<   	 dZ
eed<   	  ed	      ed
eeef   defd              ZdefdZdede	e   fdZdedee   fdZde	e   fdZde	e   fdZy)DropboxLoaderzLoad 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                     |j                  d      |j                  d      t        d      |j                  d      |j                  d      st        d      |S )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     j/var/www/html/dev/engine/venv/lib/python3.12/site-packages/langchain_community/document_loaders/dropbox.pyvalidate_inputszDropboxLoader.validate_inputs$   sa    
 JJ,-9

/0<MNN::+,4VZZ >
 LMM    c                     	 ddl m}m} 	  || j                        }|j                          |S # t        $ r t        d      w xY w# |j                  $ r}t        d      |d}~ww xY w)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_clientz$DropboxLoader._create_dropbox_client4   s|    	C3	$334C))+
 
  	CABB	C ## 	W	s    / "A AA'A""A'folder_pathc                      j                         }	 ddlm} ddlm} 	 |j                  | j                        }|j                  D cg c]  }t        ||      s| }} fd	|D        D 	cg c]  }	|	|	 }
}	|
S # t
        $ r t        d      w xY w# |j                  $ r}t        d| d      |d}~ww xY wc c}w c c}	w )
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   T   K   | ]  }j                  |j                         ! y wN)_load_file_from_pathpath_display).0filer&   s     r   	<genexpr>z<DropboxLoader._load_documents_from_folder.<locals>.<genexpr>Y   s"     W11$2C2CDWs   %()r)   r"   r    dropbox.filesr-   r#   files_list_folderr   ApiErrorr   entries
isinstance)r&   r*   r'   r    r-   resultsr(   entryfilesdoc	documentss   `          r   _load_documents_from_folderz)DropboxLoader._load_documents_from_folderD   s    ))+	C*2	++K4>>+RG %,OOW5z%7VWW XQVW
 
	 

 #  	CABB	C
 "" 	6{m D? ? 	 X
s4   A? B B>B>0C?BB;&B66B;	file_pathc                 D   | j                         }	 ddlm} 	 |j	                  |      }|j
                  r|j                  |      \  }}n!|j                  r|j                  |d      \  }}	 j                  j                  d      }d| t        j                  j=                  |      d}t?        ||      S # t        $ r t        d      w xY w# |j                  $ r}t        d| d      |d}~ww xY w# t        $ r t        j                  j!                  |      d	   j#                         }	|	d
k(  rt%        d| d       ddlm}
 t+        j,                         }t/        |j0                        dz  }t3        |d      5 }|j5                  j                         ddd       n# 1 sw Y   nxY w	  |
t7        |            }|j9                         }|r|d   cY S 	 Y y# t:        $ r}t%        d| d|        Y d}~Y yd}~ww xY wt%        d| d       Y yw xY w)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_exportr7   r   contentdecodeUnicodeDecodeErrorospathsplitextlowerprint$langchain_community.document_loadersrD   tempfileTemporaryDirectoryr   nameopenwritestrload	Exceptionbasenamer   )r&   r@   r'   r    file_metadata_responser(   textfile_extensionrD   temp_dirtemp_pdffloaderdocspdf_exrI   s                     r   r0   z"DropboxLoader._load_file_from_path^   s5   ))+	C*	229=M,,!00;8 **!..y*E8	##**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	sx   B: AC -C9 :CC6!C11C69BHF+"	H+F4	0H8'G%H%	H
.H?HH

HHc                       j                   st        d       fd j                   D        D cg c]  }|| c}S c c}w )z1Load documents from a list of Dropbox file paths.zfile_paths must be setc              3   @   K   | ]  }j                  |        y wr/   )r0   )r2   r@   r&   s     r   r4   z;DropboxLoader._load_documents_from_paths.<locals>.<genexpr>   s$       )))4s   )r   r   )r&   r=   s   ` r   _load_documents_from_pathsz(DropboxLoader._load_documents_from_paths   sO    &&566!%!8!8
  
 	
 
s   >c                 p    | j                   | j                  | j                         S | j                         S )zLoad documents.)r   r?   rn   )r&   s    r   r^   zDropboxLoader.load   s4    ##/33D4L4LMM2244r   )__name__
__module____qualname____doc__r]   __annotations__r   r   r   r   r   boolr
   classmethodr   r   r   r)   r   r?   r0   rn   r^    r   r   r   r      s     )-#-'.2c+2&ItM(#T#s(^    $  s tH~ 4;>c ;>hx6H ;>z
DN 
5d8n 5r   r   )rR   rX   pathlibr   typingr   r   r   r   langchain_core.documentsr   pydanticr	   r
   )langchain_community.document_loaders.baser   r   rw   r   r   <module>r}      s/    
   , , - / @Z5J	 Z5r   