Ë
    µŒj|9  ã                   ó¢   — d dl mZ d dlmZmZmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZ d dlmZ dgZ e
dd	d
¬«       G d„ dee«      «       Zy)é    )Ú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                   ó¸  — e Zd ZU dZ ej
                  «       dz  dz  Zeed<   	  ej
                  «       dz  dz  Zeed<   	  ej
                  «       dz  dz  Z	eed<   	 d	Z
ee   ed
<   	 d	Zeee      ed<   	 d	Zeee      ed<   	 dZeed<   	 d	Zeee      ed<   	 dZeed<   	 d	Zeed<   	 i Zedef   ed<   	  ed¬«      edeeef   defd„«       «       Z ed«      dededefd„«       Zdefd„Zdedee   fd„Z dedefd„Z!d	d œd
edeee      dee   fd!„Z"d"ed
edeeee#eee   f   f      fd#„Z$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	)(ÚGoogleDriveLoaderz%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           	      ój  ‡	— |j                  d«      r-|j                  d«      s|j                  d«      rt        d«      ‚|j                  d«      s-|j                  d«      s|j                  d«      st        d«      ‚|j                  d«      }|�r|j                  d«      s|j                  d«      rt        d«      ‚dd	d
dœŠ	t        ‰	j                  «       «      t        ‰	j	                  «       «      z   }dj                  ‰	j                  «       D �cg c]  }d|› d�‘Œ
 c}«      }dj                  ‰	j	                  «       D �cg c]  }d|› d�‘Œ
 c}«      }|D ]  }||vsŒt        d|› d|› d|› �«      ‚ dt        dt        fˆ	fd„}|D �cg c]
  } ||«      ‘Œ c}|d<   |S c c}w c c}w c c}w )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                 ó   •— | ‰v r‰|    S | S )N© )r-   Útype_mappings    €úz/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/document_loaders/googledrive.pyÚ	full_formz4GoogleDriveLoader.validate_inputs.<locals>.full_forma   s   ø€ Ø*+¨|Ñ*;�| A‘ÐBÀÐBó    )ÚgetÚ
ValueErrorÚlistÚkeysr#   Újoinr   )
Úclsr#   r   Úallowed_typesr-   Úshort_namesÚ
full_namesÚ	file_typer2   r0   s
            @r1   Úvalidate_inputsz!GoogleDriveLoader.validate_inputs7   sÍ  ø€ ð �:‰:�kÔ"Ø�J‰J�~Ô&¨&¯*©*°ZÔ*@äð)óð ð
 —
‘
˜;Ô'Ø—J‘J˜~Ô.Ø—J‘J˜zÔ*äÐWÓXÐXà—Z‘Z Ó-ˆ
ÚØ�z‰z˜.Ô)¨V¯Z©Z¸
Ô-CÜ ðFóð ð
 CØBØ(ñˆLô
 ! ×!2Ñ!2Ó!4Ó5¼¸\×=PÑ=PÓ=RÓ8SÑSˆMØŸ)™)°|×7HÑ7HÔ7JÓ$KÑ7J°! q¨¨¨1¢XÐ7JÑ$KÓLˆKØŸ™°l×6IÑ6IÔ6KÓ#LÑ6K° a¨ s¨!¢HÐ6KÑ#LÓMˆJÛ'�	Ø MÒ1Ü$Ø*¨9¨+ð 61Ø1<°ð >2Ø2<°ð?óð ð (ðCœSð C¤Sõ Cñ KUÓ#UÉ*¸Y¡I¨iÕ$8È*Ñ#UˆF�<Ñ Øˆùò %LùÚ#Lùò $Vs   ÄF&ÅF+ÆF0ÚvÚkwargsc                 óD   — |j                  «       st        d|› d�«      ‚|S )z&Validate that credentials_path exists.zcredentials_path z does not exist)Úexistsr5   )r9   r?   r@   s      r1   Úvalidate_credentials_pathz+GoogleDriveLoader.validate_credentials_pathg   s'   € ð �x‰xŒzÜÐ0°°°?ÐCÓDÐDØˆr3   c                 ó~  — 	 ddl m} ddlm} ddlm} ddlm} ddlm	} d}| j                  j                  «       r4|j                  j                  t        | j                  «      t        ¬	«      S | j                   j                  «       r)|j#                  t        | j                   «      t        «      }|r|j$                  sÆ|r/|j&                  r#|j(                  r|j+                   |«       «       nU| j,                  j                  «       r;|j/                  t        | j,                  «      t        «      }|j1                  d¬
«      }|r>t3        | j                   d«      5 }|j5                  |j7                  «       «       ddd«       |s |t        ¬	«      \  }}	|S # t        $ r t        d«      ‚w xY w# 1 sw Y   Œ5xY w)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)ÚInstalledAppFlowz‡You 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.authrE   Úgoogle.auth.transport.requestsrF   Úgoogle.oauth2rG   Úgoogle.oauth2.credentialsrH   Úgoogle_auth_oauthlib.flowrI   ÚImportErrorr   rB   Ú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)
ÚselfrE   rF   rG   rH   rI   ÚcredsÚflowÚtokenÚ_s
             r1   Ú_load_credentialsz#GoogleDriveLoader._load_credentialsn   sj  € ð	Ý+Ý>Ý5Ý=ÝBð ˆà×#Ñ#×*Ñ*Ô,Ø"×.Ñ.×HÑHÜ�D×,Ñ,Ó-´fð Ió ð ð
 �?‰?×!Ñ!Ô#Ø×9Ñ9¼#¸d¿o¹oÓ:NÔPVÓWˆEá˜EŸKšKÙ˜Ÿš¨5×+>Ò+>Ø—‘™g›iÕ(Ø×&Ñ&×-Ñ-Ô/Ø'×@Ñ@Ü˜×-Ñ-Ó.´ó�ð ×-Ñ-°1Ð-Ó5�ÙÜ˜$Ÿ/™/¨3Ô/°5Ø—K‘K §¡£Ô0÷ 0ñ Ù¤fÔ-‰HˆE�1àˆøôI ò 	Üð2óð ð	ú÷: 0Ð/ús   ‚F Å F3ÆF0Æ3F<Úidc           	      ó  — ddl m} | j                  «       } |dd|¬«      }|j                  «       j	                  |¬«      j                  «       }|j	                  dg «      }g }|D �]   }|d   d   }	|j                  «       j                  «       j	                  ||	¬	«      j                  «       }
|
j	                  d
g «      }|sŒ^|d   }t        |dd d¬«      D ]«  \  }}d|› d|d   d   › �|d   d   › d|	› �|dœ}g }t        |«      D ]L  \  }}t        |«      |kD  r||   j                  «       nd}|j                  |› d|j                  «       › �«       ŒN dj                  |«      }|j                  t        ||¬«      «       Œ­ �Œ# |S )z%Load a sheet and all tabs from an ID.r   ©ÚbuildÚsheetsÚv4©Úcredentials)ÚspreadsheetIdÚ
propertiesÚtitle)rm   Úranger#   é   N)Ústartz'https://docs.google.com/spreadsheets/d/z
/edit?gid=ÚsheetIdz - )Úsourcero   ÚrowÚ z: Ú
©Úpage_contentÚmetadata)Úgoogleapiclient.discoveryrh   rd   Úspreadsheetsr4   Úexecuter#   Ú	enumerateÚlenÚstripÚappendr8   r   )r_   re   rh   r`   Úsheets_serviceÚspreadsheetri   Ú	documentsr*   Ú
sheet_nameÚresultr#   ÚheaderÚiru   rz   ÚcontentÚjr?   ro   ry   s                        r1   Ú_load_sheet_from_idz%GoogleDriveLoader._load_sheet_from_id£   s©  € õ 	4à×&Ñ&Ó(ˆÙ˜x¨¸5ÔAˆØ$×1Ñ1Ó3×7Ñ7ÀbÐ7ÓI×QÑQÓSˆØ—‘ ¨2Ó.ˆàˆ	ÜˆEØ˜|Ñ,¨WÑ5ˆJà×+Ñ+Ó-ß‘“ß‘ 2¨Z�Ó8ß‘“ð	 ð —Z‘Z ¨"Ó-ˆFÙØà˜A‘YˆFÜ# F¨1¨2 J°a×8‘��3ð BÀ"Àð F$Ø$)¨,Ñ$7¸	Ñ$BÐ#CðEð !,¨LÑ 9¸'Ñ BÐCÀ3ÀzÀlÐSØñ�ð �Ü% cžN‘D�A�qÜ14°V³¸q²˜F 1™IŸO™OÔ-Àb�EØ—N‘N e W¨B¨q¯w©w«y¨kÐ#:Õ;ð +ð  $Ÿy™y¨Ó1�Ø× Ñ ¤°|ÈhÔ!WÕXò 9ð ð< Ðr3   c                 óÔ  — ddl m} ddlm} ddlm} ddlm} | j                  «       } |dd|¬«      }|j                  «       j                  |d	d
¬«      j                  «       }|j                  «       j                  |d¬«      }	 |«       }
 ||
|	«      }d}	 |du r|j                  «       \  }}|du rŒ|
j%                  «       j'                  d«      }d|› d�|j                  d«      › |j                  d«      › dœ}t)        ||¬«      S # |$ rX}|j                  j                  dk(  rt!        dj#                  |«      «       nt!        dj#                  |«      «       Y d}~Œ®d}~ww xY w)zLoad a document from an ID.r   ©ÚBytesIOrg   )Ú	HttpError©ÚMediaIoBaseDownloadÚdriveÚv3rk   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)rt   ro   Úwhenrx   )ÚiorŽ   r{   rh   Úgoogleapiclient.errorsr�   Úgoogleapiclient.httpr‘   rd   Úfilesr4   r}   Úexport_mediaÚ
next_chunkÚrespÚstatusÚprintÚformatÚgetvalueÚdecoder   )r_   re   rŽ   rh   r�   r‘   r`   ÚserviceÚfileÚrequestÚfhÚ
downloaderÚdoner¢   ÚeÚtextrz   s                    r1   Ú_load_document_from_idz(GoogleDriveLoader._load_document_from_idÎ   sQ  € åå3Ý4Ý<à×&Ñ&Ó(ˆÙ˜ °5Ô9ˆð �M‰M‹Oß‰S˜¨dÐ;NˆSÓOß‰W‹Yð 	ð
 —-‘-“/×.Ñ.°bÀ<Ð.ÓPˆÙ‹YˆÙ(¨¨WÓ5ˆ
Øˆð	9Ø˜%‘-Ø)×4Ñ4Ó6‘�˜ð ˜%’-ð �{‰{‹}×#Ñ# GÓ,ˆà;¸B¸4¸uÐEØŸ™ Ó(Ð)Ø—x‘x Ó/Ð0ñ
ˆô
  T°HÔ=Ð=øð ò 	9Ø�v‰v�}‰} Ò#ÜÐ*×1Ñ1°"Ó5Õ6äÐ-×4Ñ4°QÓ7Ô8ÿøð		9ús   ÂD
 Ä
E'ÄAE"Å"E'©r   c                ó  — ddl m} | j                  «       } |dd|¬«      }| j                  ||«      }|r|D �cg c]  }|d   |v sŒ|‘Œ }}n|}g }	|D ]¤  }
|
d   r| j                  sŒ|
d   dk(  r$|	j                  | j                  |
d	   «      «       ŒA|
d   d
k(  r$|	j                  | j                  |
d	   «      «       Œm|
d   dk(  s| j                  �$|	j                  | j                  |
d	   «      «       Œ¥Œ¦ |	S c c}w )zLoad documents from a folder.r   rg   r’   r“   rk   r—   Útrashedr&   re   r'   r(   )r{   rh   rd   Ú_fetch_files_recursiver   r�   r¯   Úextendr‹   r   Ú_load_file_from_id)r_   r   r   rh   r`   r§   rž   ÚfÚ_filesÚreturnsr¨   s              r1   Ú_load_documents_from_folderz-GoogleDriveLoader._load_documents_from_folderô   s  € õ 	4à×&Ñ&Ó(ˆÙ˜ °5Ô9ˆØ×+Ñ+¨G°YÓ?ˆáÙ!&ÓF¡˜A¨!¨J©-¸:Ò*E’a ˆFÑFàˆ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Ñ6°t¸D±zÓBÕCàð ð ˆùò' Gs   ºC=ÁC=r§   c                 ó>  — |j                  «       j                  d|› d�dddd¬«      j                  «       }|j                  dg «      }g }|D ]M  }|d   d	k(  r2| j                  sŒ|j                  | j                  ||d
   «      «       Œ=|j                  |«       ŒO |S )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.folderre   )rž   r6   r}   r4   r   r´   r³   r�   )r_   r§   r   Úresultsrž   r¸   r¨   s          r1   r³   z(GoogleDriveLoader._fetch_files_recursive  s¨   € ð
 �M‰M‹Oß‰TØ�i�[ Ð-ØØ*.Ø"&ØSð ó ÷ ‰W‹Yð 	ð —‘˜G RÓ(ˆØˆÛˆDØ�JÑÐ#GÒGØ—>“>Ø—N‘N 4×#>Ñ#>¸wÈÈTÉ
Ó#SÕTà—‘˜tÕ$ð ð ˆr3   c                 óŒ   — | j                   st        d«      ‚| j                   D �cg c]  }| j                  |«      ‘Œ c}S c c}w )z"Load documents from a list of IDs.zdocument_ids must be set)r   r5   r¯   )r_   Údoc_ids     r1   Ú_load_documents_from_idsz*GoogleDriveLoader._load_documents_from_ids.  sB   € à× Ò ÜÐ7Ó8Ð8àBF×BSÒBSÓTÑBS¸�×+Ñ+¨FÕ3ÐBSÑTÐTùÒTs   ¦Ac                 ó†  — ddl m} ddlm} ddlm} | j                  «       } |dd|¬«      }|j                  «       j                  |d¬	«      j                  «       }|j                  «       j                  |¬
«      } |«       }	 ||	|«      }
d}|du r|
j                  «       \  }}|du rŒ| j                  �‰|	j                  d«        | j                  dd|	i| j                  ¤Ž}|j                  «       }|D ]C  }d|› d�|j                   d<   d|j                   vsŒ%|j                  d«      › |j                   d<   ŒE |S ddlm} |	j'                  «       } | ||«      «      }t)        |j*                  «      D ��cg c]8  \  }}t-        |j/                  «       d|› d�|j                  d«      › |dœ¬«      ‘Œ: c}}S c c}}w )zLoad a file from an ID.r   r�   rg   r�   r’   r“   rk   T)r”   r•   )r”   Fr¨   z https://drive.google.com/file/d/z/viewrt   ro   r˜   )Ú	PdfReader)rt   ro   Úpagerx   r/   )r›   rŽ   r{   rh   r�   r‘   rd   rž   r4   r}   Ú	get_mediar    r   Úseekr    Úloadrz   ÚPyPDF2rÃ   r¥   r~   Úpagesr   Úextract_text)r_   re   rŽ   rh   r‘   r`   r§   r¨   r©   rª   r«   r¬   r¢   ÚloaderÚdocsÚdocrÃ   r‰   Ú
pdf_readerrˆ   rÄ   s                        r1   rµ   z$GoogleDriveLoader._load_file_from_id5  s½  € åå3Ý<à×&Ñ&Ó(ˆÙ˜ °5Ô9ˆà�}‰}‹×"Ñ"¨"ÀÐ"ÓE×MÑMÓOˆØ—-‘-“/×+Ñ+°2Ð+Ó6ˆÙ‹YˆÙ(¨¨WÓ5ˆ
ØˆØ�e‰mØ%×0Ñ0Ó2‰LˆF�Dð �eŠmð ×ÑÐ+Ø�G‰G�AŒJØ)�T×)Ñ)ÑM¨rÐM°T×5LÑ5LÑMˆFØ—;‘;“=ˆDÛ�Ø+KÈBÈ4ÈuÐ)U�—‘˜XÑ&Ø #§,¡,Ò.Ø/3¯x©x¸Ó/?Ð.@�C—L‘L Ò)ð ð ˆKõ )à—k‘k“mˆGÙ"¡7¨7Ó#3Ó4ˆJô  )¨×)9Ñ)9Ô:ô
ñ  ;‘G�A�tô Ø!%×!2Ñ!2Ó!4à$DÀRÀDÈÐ"NØ$(§H¡H¨VÓ$4Ð#5Ø !ñöð  ;ò
ð 
ùó 
s   Å<=F=c                 óš   — | j                   st        d«      ‚g }| j                   D ]"  }|j                  | j                  |«      «       Œ$ |S )zLoad files from a list of IDs.zfile_ids must be set)r   r5   r´   rµ   )r_   rÌ   Úfile_ids      r1   Ú_load_file_from_idsz%GoogleDriveLoader._load_file_from_idsc  sD   € à�}Š}ÜÐ3Ó4Ð4ØˆØ—}”}ˆGØ�K‰K˜×/Ñ/°Ó8Õ9ð %àˆr3   c                 óÀ   — | j                   r'| j                  | j                   | j                  ¬«      S | j                  r| j	                  «       S | j                  «       S )zLoad documents.r°   )r   r¹   r   r   rÁ   rÑ   )r_   s    r1   rÇ   zGoogleDriveLoader.loadl  sW   € à�>Š>Ø×3Ñ3Ø—‘¨4¯?©?ð 4ó ð ð ×ÒØ×0Ñ0Ó2Ð2à×+Ñ+Ó-Ð-r3   ))Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úhomer   Ú__annotations__r   r   r   r   r   r   r   r   r   Úboolr   r   r   r   r   r    r   r   Úclassmethodr>   r   rC   rd   r   r‹   r¯   r¹   r	   r³   rÁ   rµ   rÑ   rÇ   r/   r3   r1   r   r      sN  … ñ 0à ) §	¡	£¨nÑ <¸{Ñ JÐ˜ÓJØ/Ø&˜TŸY™Y›[¨>Ñ9Ð<NÑNÐ�dÓNØ'Ø �t—y‘y“{ ^Ñ3°lÑB€J�ÓBØ!Ø#€Iˆx˜‰}Ó#Ø%Ø(,€L�(˜4 ™9Ñ%Ó,Ø(Ø$(€Hˆh�t˜C‘yÑ!Ó(Ø$Ø€IˆtÓØLØ*.€J�˜ #™Ñ'Ó.ØGØ$Ð˜Ó$ØNð  €O�SÓØ'Ø+-Ð˜˜U C˜ZÑ(Ó-Ø(á˜(Ô#Øð, T¨#¨s¨(¡^ð ,¸ò ,ó ó $ð,ñ\ Ð!Ó"ð¨#ð ¸ð Àò ó #ðð3 3ó 3ðj) cð )¨d°8©nó )ðV$>¨ð $>°ó $>ðN HLòØðØ-5°h¸s±mÑ-Dðà	ˆh‰óð@ØðØ'*ðà	ˆd�3˜˜c 4¨¡9˜nÑ-Ð-Ñ.Ñ	/óð4U¨$¨x©.ó Uð, Sð ,¨T°(©^ó ,ð\ T¨(¡^ó ð	.�d˜8‘nô 	.r3   r   N)Úpathlibr   Útypingr   r   r   r   r   r	   Úlangchain_core._api.deprecationr
   Úlangchain_core.documentsr   Úpydanticr   r   r   Ú)langchain_community.document_loaders.baser   rT   r   r/   r3   r1   Ú<module>rá      sU   ðõ ß =× =å 6Ý -ß :Ñ :å @à
:Ð	;€ñ Ø
ØØEôô
Z.˜
 Ió Z.óñ
Z.r3   