
    dh|9                         S SK Jr  S SKJrJrJrJrJrJr  S SK	J
r
  S SKJr  S SKJrJrJr  S SKJr  S/r\
" SS	S
S9 " S S\\5      5       rg)    )Path)AnyDictListOptionalSequenceUnion)
deprecated)Document)	BaseModelmodel_validator	validator)
BaseLoaderz.https://www.googleapis.com/auth/drive.readonlyz0.0.32z1.0z,langchain_google_community.GoogleDriveLoader)sinceremovalalternative_importc                      \ rS rSr% Sr\R                  " 5       S-  S-  r\\S'    \R                  " 5       S-  S-  r	\\S'    \R                  " 5       S-  S-  r
\\S	'    S
r\\   \S'    S
r\\\      \S'    S
r\\\      \S'    Sr\\S'    S
r\\\      \S'    Sr\\S'    S
r\\S'    0 r\S\4   \S'    \" SS9\S\\\4   S\4S j5       5       r\" S5      S\S\S\4S j5       rS\4S jrS\S\\    4S jr!S\S\ 4S  jr"S
S!.S\S\\\      S\\    4S" jjr#S#\S\S\\\\$\\\   4   4      4S$ jr%S\\    4S% jr&S\S\\    4S& jr'S\\    4S' jr(S\\    4S( jr)S)r*g
)*GoogleDriveLoader   z%Load Google Docs from `Google Drive`.z.credentialsz	keys.jsonservice_account_keyzcredentials.jsoncredentials_pathz
token.json
token_pathN	folder_iddocument_idsfile_idsF	recursive
file_typesload_trashed_filesfile_loader_clsstrfile_loader_kwargsbefore)modevaluesreturnc           	        ^	 UR                  S5      (       a7  UR                  S5      (       d  UR                  S5      (       a  [        S5      eUR                  S5      (       d7  UR                  S5      (       d!  UR                  S5      (       d  [        S5      eUR                  S5      nU(       Ga&  UR                  S5      (       d  UR                  S5      (       a  [        S5      eSS	S
S.m	[        T	R                  5       5      [        T	R	                  5       5      -   nSR                  T	R                  5        Vs/ sH	  nSU S3PM     sn5      nSR                  T	R	                  5        Vs/ sH	  nSU S3PM     sn5      nU H  nXs;  d  M
  [        SU SU SU 35      e   S[        S[        4U	4S jjnU Vs/ sH
  ox" U5      PM     snUS'   U$ s  snf s  snf s  snf )zDValidate that either folder_id or document_ids is set, but not both.r   r   r   zICannot specify both folder_id and document_ids nor folder_id and file_idsz8Must specify either folder_id, document_ids, or file_idsr   zdfile_types can only be given when folder_id is given, (not when document_ids or file_ids are given).$application/vnd.google-apps.document'application/vnd.google-apps.spreadsheetapplication/pdf)documentsheetpdfz, 'zGiven file type z) is not supported. Supported values are: z; and their full-form names: xr%   c                    > U T;   a  TU    $ U $ )N )r.   type_mappings    h/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/document_loaders/googledrive.py	full_form4GoogleDriveLoader.validate_inputs.<locals>.full_forma   s    *+|*;|ABB    )get
ValueErrorlistkeysr$   joinr    )
clsr$   r   allowed_typesr.   short_names
full_names	file_typer3   r1   s
            @r2   validate_inputs!GoogleDriveLoader.validate_inputs7   s    ::k""JJ~&&&**Z*@*@) 
 

;''JJ~..JJz**WXXZZ-
zz.))VZZ
-C-C F 
 CB(L
 !!2!2!45\=P=P=R8SSM))|7H7H7J$K7J!q1X7J$KLKl6I6I6K#L6Kas!H6K#LMJ'	1$*9+ 611< >22<?  (CS CS C KU#U*YIi$8*#UF<  %L#L $Vs   G5G"G'vkwargsc                 N    UR                  5       (       d  [        SU S35      eU$ )z&Validate that credentials_path exists.zcredentials_path z does not exist)existsr7   )r;   rB   rC   s      r2   validate_credentials_path+GoogleDriveLoader.validate_credentials_pathg   s)     xxzz0?CDDr5   c                     SSK Jn  SSKJn  SSKJn  SSKJn  SSKJ	n  SnU R                  R                  5       (       a1  UR                  R                  [        U R                  5      [        S	9$ U R                   R                  5       (       a)  UR#                  [        U R                   5      [        5      nU(       a  UR$                  (       d  U(       a9  UR&                  (       a(  UR(                  (       a  UR+                  U" 5       5        OWU R,                  R                  5       (       a8  UR/                  [        U R,                  5      [        5      nUR1                  SS
9nU(       a>  [3        U R                   S5       nUR5                  UR7                  5       5        SSS5        U(       d  U" [        S	9u  piU$ ! [         a    [        S5      ef = f! , (       d  f       N<= f)a  Load credentials.
The order of loading credentials:
1. Service account key if file exists
2. Token path (for OAuth Client) if file exists
3. Credentials path (for OAuth Client) if file exists
4. Default credentials. if no credentials found, raise DefaultCredentialsError
r   )default)Request)service_account)Credentials)InstalledAppFlowzYou must run `pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib` to use the Google Drive loader.N)scopes)portw)google.authrI   google.auth.transport.requestsrJ   google.oauth2rK   google.oauth2.credentialsrL   google_auth_oauthlib.flowrM   ImportErrorr   rE   from_service_account_filer    SCOPESr   from_authorized_user_filevalidexpiredrefresh_tokenrefreshr   from_client_secrets_filerun_local_serveropenwriteto_json)
selfrI   rJ   rK   rL   rM   credsflowtoken_s
             r2   _load_credentials#GoogleDriveLoader._load_credentialsn   sq   	+>5=B ##**,,"..HHD,,-f I  
 ??!!##99#doo:NPVWEEKK5+>+>gi(&&--//'@@--. --1-5$//3/5KK0 0 f-HEI  	2 	: 0/s   G  GG
G*idc           	         SSK Jn  U R                  5       nU" SSUS9nUR                  5       R	                  US9R                  5       nUR	                  S/ 5      n/ nU GH!  nUS   S   n	UR                  5       R                  5       R	                  XS	9R                  5       n
U
R	                  S
/ 5      nU(       d  M`  US   n[        USS SS9 H  u  pSU SUS   S    3US   S    SU	 3US.n/ n[        U5       HN  u  nn[        U5      U:  a  UU   R                  5       OSnUR                  U SUR                  5        35        MP     SR                  U5      nUR                  [        UUS95        M     GM$     U$ )z%Load a sheet and all tabs from an ID.r   buildsheetsv4credentials)spreadsheetId
propertiestitle)rr   ranger$      N)startz'https://docs.google.com/spreadsheets/d/z
/edit?gid=sheetIdz - )sourcert   row z: 
page_contentmetadata)googleapiclient.discoveryrm   rh   spreadsheetsr6   executer$   	enumeratelenstripappendr:   r   )rc   rj   rm   rd   sheets_servicespreadsheetrn   	documentsr+   
sheet_nameresultr$   headerirz   r   contentjrB   rt   r~   s                        r2   _load_sheet_from_id%GoogleDriveLoader._load_sheet_from_id   s    	4&&(x5A$11377b7IQQS2.	E|,W5J++-28	  ZZ"-FAYF#F12Ja8 B" F$$),$7	$B#CE !,L 9' BC3zlS %cNDAq14VqF1IOO-bENNeWBqwwyk#:; +  $yy1  |h!WX 9 < r5   c                    SSK Jn  SSKJn  SSKJn  SSKJn  U R                  5       nU" SSUS9nUR                  5       R                  US	S
S9R                  5       nUR                  5       R                  USS9n	U" 5       n
U" X5      nSn USL a  UR                  5       u  pUSL a  M  U
R%                  5       R'                  S5      nSU S3UR                  S5       UR                  S5       S.n[)        UUS9$ ! U a]  nUR                  R                  S:X  a  [!        SR#                  U5      5         SnAN[!        SR#                  U5      5         SnANSnAff = f)zLoad a document from an ID.r   BytesIOrl   )	HttpErrorMediaIoBaseDownloaddrivev3rp   TzmodifiedTime,name)fileIdsupportsAllDrivesfieldsz
text/plain)r   mimeTypeFi  zFile not found: {}zAn error occurred: {}Nzutf-8z#https://docs.google.com/document/d/z/editnamemodifiedTime)ry   rt   whenr}   )ior   r   rm   googleapiclient.errorsr   googleapiclient.httpr   rh   filesr6   r   export_media
next_chunkrespstatusprintformatgetvaluedecoder   )rc   rj   r   rm   r   r   rd   servicefilerequestfh
downloaderdoner   etextr   s                    r2   _load_document_from_id(GoogleDriveLoader._load_document_from_id   sR   34<&&(59 MMOSd;NSOWY 	
 --/..b<.PY(5
	9%-)446 %- {{}##G,;B4uE()xx/0

 TH==  	9vv}}#*11"566-44Q788		9s   C? ?E"4E>EE"r   c                6   SSK Jn  U R                  5       nU" SSUS9nU R                  XQ5      nU(       a  U Vs/ sH  owS   U;   d  M  UPM     nnOUn/ n	U H  n
U
S   (       a  U R                  (       d  M   U
S   S:X  a%  U	R                  U R                  U
S	   5      5        MN  U
S   S
:X  a%  U	R                  U R                  U
S	   5      5        M|  U
S   S:X  d  U R                  b%  U	R                  U R                  U
S	   5      5        M  M     U	$ s  snf )zLoad documents from a folder.r   rl   r   r   rp   r   trashedr'   rj   r(   r)   )r   rm   rh   _fetch_files_recursiver   r   r   extendr   r   _load_file_from_id)rc   r   r   rm   rd   r   r   f_filesreturnsr   s              r2   _load_documents_from_folder-GoogleDriveLoader._load_documents_from_folder   s    	4&&(59++G?!&FAJ-:*EaFFFFDIt'>'>j!%KKt::4:FGj!%NNt77T
CDZ $55''3t66tDzBC  ' Gs   D
Dr   c                 J   UR                  5       R                  SU S3SSSSS9R                  5       nUR                  S/ 5      n/ nU HU  nUS   S	:X  a8  U R                  (       a%  UR                  U R                  XS
   5      5        MB  MD  UR                  U5        MW     U$ )z+Fetch all files and subfolders recursively.r-   z' in parentsi  Tz:nextPageToken, files(id, name, mimeType, parents, trashed))qpageSizeincludeItemsFromAllDrivesr   r   r   r   z"application/vnd.google-apps.folderrj   )r   r8   r   r6   r   r   r   r   )rc   r   r   resultsr   r   r   s          r2   r   (GoogleDriveLoader._fetch_files_recursive  s    
 MMOTi[-*."&S   WY 	 GR(DJ#GG>>NN4#>#>wT
#ST " t$  r5   c                     U R                   (       d  [        S5      eU R                    Vs/ sH  oR                  U5      PM     sn$ s  snf )z"Load documents from a list of IDs.zdocument_ids must be set)r   r7   r   )rc   doc_ids     r2   _load_documents_from_ids*GoogleDriveLoader._load_documents_from_ids.  s@      788BFBSBSTBS++F3BSTTTs   Ac                    SSK Jn  SSKJn  SSKJn  U R                  5       nU" SSUS9nUR                  5       R                  USS	9R                  5       nUR                  5       R                  US
9nU" 5       n	U" X5      n
SnUSL a  U
R                  5       u  pUSL a  M  U R                  b  U	R                  S5        U R                  " SSU	0U R                  D6nUR                  5       nU HG  nSU S3UR                   S'   SUR                   ;  d  M(  UR                  S5       UR                   S'   MI     U$ SSKJn  U	R'                  5       nU" U" U5      5      n[)        UR*                  5       VVs/ sH6  u  nn[-        UR/                  5       SU S3UR                  S5       US.S9PM8     snn$ s  snnf )zLoad a file from an ID.r   r   rl   r   r   r   rp   T)r   r   )r   Fr   z https://drive.google.com/file/d/z/viewry   rt   r   )	PdfReader)ry   rt   pager}   r0   )r   r   r   rm   r   r   rh   r   r6   r   	get_mediar   r   seekr!   loadr   PyPDF2r   r   r   pagesr   extract_text)rc   rj   r   rm   r   rd   r   r   r   r   r   r   r   loaderdocsdocr   r   
pdf_readerr   r   s                        r2   r   $GoogleDriveLoader._load_file_from_id5  s   3<&&(59}}""""EMMO--/++2+6Y(5
em%002LF em +GGAJ))MrMT5L5LMF;;=D+KB4u)UX&#,,./3xx/?.@CLL)  K )kkmG"77#34J  ))9)9:
  ;GAt !%!2!2!4$DRD"N$(HHV$4#5 !  ;
 
 
s   :<F:c                     U R                   (       d  [        S5      e/ nU R                    H#  nUR                  U R                  U5      5        M%     U$ )zLoad files from a list of IDs.zfile_ids must be set)r   r7   r   r   )rc   r   file_ids      r2   _load_file_from_ids%GoogleDriveLoader._load_file_from_idsc  sD    }}344}}GKK//89 %r5   c                     U R                   (       a$  U R                  U R                   U R                  S9$ U R                  (       a  U R	                  5       $ U R                  5       $ )zLoad documents.r   )r   r   r   r   r   r   )rc   s    r2   r   GoogleDriveLoader.loadl  sW    >>334?? 4   0022++--r5   r0   )+__name__
__module____qualname____firstlineno____doc__r   homer   __annotations__r   r   r   r   r    r   r   r   r   boolr   r   r   r   r   r!   r   r   classmethodr@   r   rF   rh   r   r   r   r   r	   r   r   r   r   r   __static_attributes__r0   r5   r2   r   r      sH    0 $		n <{ JJ/!YY[>9<NNdN'yy{^3lBJB!#Ix}#%(,L(49%,($(HhtCy!($ItL*.J#'.G$$N  OS'+-UCZ(-((#,T#s(^ , ,  $,\ !"#    #33 3j)c )d8n )V$> $> $>N HL-5hsm-D	h@'*	d3c49n--.	/4U$x. U,S ,T(^ ,\T(^ 	.d8n 	.r5   r   N)pathlibr   typingr   r   r   r   r   r	   langchain_core._api.deprecationr
   langchain_core.documentsr   pydanticr   r   r   )langchain_community.document_loaders.baser   rX   r   r0   r5   r2   <module>r      sU     = = 6 - : : @
:	; 
E
Z.
I Z.
Z.r5   