Ë
    µŒjy4  ã                  óœ  — d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZ ddlmZmZ ddlmZmZmZmZmZmZmZmZ ddlmZmZmZmZmZ dd	lmZm Z  dd
l!m"Z"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+ erddl,m-Z- ddl.m/Z/m0Z0  ejb                  e2«      Z3dZ4 G d„ de«      Z5 G d„ de«      Z6dd„Z7dd„Z8 G d„ de#e«      Z9y)ú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                  ób   — e Zd ZU  edd¬«      Zded<    edd¬«      Zded<    ed	d
dd¬«      Zy)Ú_O365Settings.ÚO365_CLIENT_ID)ÚaliasÚstrÚ	client_idÚO365_CLIENT_SECRETr   Úclient_secretFz.envÚ Úignore)Úcase_sensitiveÚenv_fileÚ
env_prefixÚextraN)	Ú__name__Ú
__module__Ú__qualname__r   r&   Ú__annotations__r(   r   Úmodel_config© ó    úx/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/document_loaders/base_o365.pyr"   r"   *   s9   … Ù˜3Ð&6Ô7€IˆsÓ7Ù$ SÐ0DÔE€M�9ÓEá%Ø v¸"ÀHô�Lr5   r"   c                  óF   — e Zd ZU  ej                  «       dz  dz  Zded<   y)Ú_O365TokenStorageú.credentialszo365_token.txtr   Ú
token_pathN)r/   r0   r1   r   Úhomer:   r2   r4   r5   r6   r8   r8   3   s   … Ø$˜4Ÿ9™9›;¨Ñ7Ð:JÑJ€J�ÔJr5   r8   c                óx   — i }| D ]2  }t        j                  d|› �«      \  }}|r|||<   Œ&t        d|› �«      ‚ |S )ú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        r6   Úfetch_mime_typesrF   7   sU   € àÐÛˆÜ ×+Ñ+¨e°C°5¨MÓ:‰ˆ	�1ÙØ&/Ð˜sÒ#äÐ=¸c¸UÐCÓDÐDð ð Ðr5   c                ór   — i }| D ]/  }t        j                  |«      }|r	|||dd <   Œ#t        d|› �«      ‚ |S )r=   é   NzUnknown mimetype )r>   Úguess_extensionr@   )Ú
mime_typesrB   rD   rC   s       r6   Úfetch_extensionsrK   C   sQ   € àÐÛˆ	Ü×'Ñ'¨	Ó2ˆÙØ*3Ð˜s 1 2˜wÒ'äÐ0°°Ð<Ó=Ð=ð  ð Ðr5   c                  ó.  ‡ — e Zd ZU dZ ee¬«      Zded<   	 dZded<   	 e	Z
ded	<   	 dZded
<   	 dZded<   	 i Zded<   	  e«       Zded<    e«       Zded<    e«       Zded<   dˆ fd„Zedd„«       Zeedd„«       «       Zdd„Z	 	 	 	 	 	 d d„Zd!d„Zˆ xZS )"ÚO365BaseLoaderr   )Ú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        ‰| �  di |¤Ž | j                  ršt        | j                  j	                  «       «      }	 t        |«      | _        t        t        |«      «      | _        | j                  j                  «       D ��ci c]  \  }}| j                  |   |“Œ }}}t        |d ¬«      | _        y t        d«      | _        t        | j                  t        «      s!t!        dt#        | j                  «      › �«      ‚t        t        | j                  j                  j	                  «       «      «      | _        y c c}}w # t        $ ro 	 t        |«      | _        t        t        | j                  j	                  «       «      «      | _        | j                  }n# t        $ r t        d|› d�«      ‚w xY wY �Œw xY w)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)rU   Úfallback_parserÚdefaultzLget_parser("default) was supposed to return MimeTypeBasedParser.It returned r4   )ÚsuperÚ__init__rU   ÚlistÚkeysrF   rZ   ÚsetrX   Úitemsr@   rK   r   rV   r   Ú
isinstanceÚ	TypeErrorÚtype)ÚselfÚkwargsÚhandler_keysÚ	extensionÚhandlerÚmime_handlersÚ	__class__s         €r6   r_   zO365BaseLoader.__init__   s£  ø€ Ü‰ÑÑ"˜6Ò"Ø�=Š=Ü §¡× 2Ñ 2Ó 4Ó5ˆLðä#3°LÓ#A�Ô Ü#'¬¨LÓ(9Ó#:�Ô ð /3¯m©m×.AÑ.AÔ.Cô!á.CÑ*˜	 7ð ×$Ñ$ YÑ/°Ñ8Ø.Cð ñ !ô$ !4Ø&¸ô!ˆDÕô !+¨9Ó 5ˆDÔÜ˜d×/Ñ/Ô1DÔEÜð#Ü#'¨×(9Ñ(9Ó#:Ð";ð=óð ô  0´°T×5FÑ5F×5OÑ5O×5TÑ5TÓ5VÓ0WÓXˆDÕùó9!øô ò ðä'7¸Ó'E�DÔ$Ü'+¬C°×0@Ñ0@×0EÑ0EÓ0GÓ,HÓ'I�DÔ$Ø$(§M¡M‘MøÜ!ò Ü$ØXØ'˜.ð )6ð6óð ðúò "ðús>   ÁAE ÂD>Â!E Ä>E Å	F<ÅAFÆF<ÆF5Æ5F<Æ;F<c                ó   — | j                   S )zBReturn a dict of supported file types to corresponding mime types.)rZ   ©rg   s    r6   Ú_fetch_mime_typesz O365BaseLoader._fetch_mime_types¥   s   € ð ×ÑÐr5   c                 ó   — y)zReturn required scopes.Nr4   ro   s    r6   Ú_scopeszO365BaseLoader._scopesª   s   � r5   c              #  ó°  K  — | j                   }|j                  «       }i }t        j                  «       5 }t	        j
                  t        j                  j                  |«      d¬«       |D �]s  }|j                  sŒ|j                  t        |j                  «       «      v sŒ7| j                  r|j                  | j                  kD  sŒ]|j                  }t        j                   d|j                  «      rC|j"                  j                  dz   t$        j&                  j)                  |j*                  «      z   }|j-                  || j.                  ¬«       ||j                  t1        |j2                  «      t1        |j                  «      t1        |j4                  «      t1        |j6                  «      |j8                  t1        |j:                  «      dœ||j*                  <   �Œv t=        |¬«      }|j?                  «       D ]�  }	tA        |	j                  tB        «      stE        d«      ‚|	j                  rJ|jG                  t1        |	j                  j*                  «      i «      }
|	jH                  jK                  |
«       |	–— Œƒ 	 d	d	d	«       | jL                  r/|jO                  «       D ]  }| jQ                  |«      E d	{  –—†  Œ y	y	# 1 sw Y   ŒExY w7 Œ­w)
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_pathrR   ©ÚsourcerD   ÚcreatedÚmodifiedÚ
created_byÚmodified_byÚdescriptionÚid©Úpathú#Expected blob path to be a PurePathN))rp   Ú	get_itemsÚtempfileÚTemporaryDirectoryÚosÚmakedirsr‚   ÚdirnameÚis_filerD   r`   ÚvaluesrT   r|   Úweb_urlÚreÚsearchÚ_parentÚurllibÚparseÚquoteÚnameÚdownloadrR   r%   r{   r}   r~   r   Ú	object_idr   Úyield_blobsrd   r   ÚNotImplementedErrorÚgetÚmetadataÚupdaterS   Úget_child_foldersÚ_load_from_folder)rg   ÚfolderÚfile_mime_typesrc   Úmetadata_dictÚtemp_dirÚfilerz   ÚloaderÚblobÚfile_metadata_Ú	subfolders               r6   rœ   z O365BaseLoader._load_from_folder¯   s#  è ø€ ð ×0Ñ0ˆØ× Ñ Ó"ˆØ35ˆÜ×(Ñ(Ô*¨hÜ�K‰KœŸ™Ÿ™¨Ó1¸DÕAÜ�Ø—<“<Ø—~‘~¬¨o×.DÑ.DÓ.FÓ)GÒGØ $× 3Ò 3Ø ŸM™M¨D×,?Ñ,?Ó?à%)§\¡\˜FÜ!Ÿy™yØ EÀtÇ|Á|ô ð %)§L¡L×$8Ñ$8Ø&)ñ%*ä&,§l¡l×&8Ñ&8¸¿¹Ó&Cñ%Dð !'ð
 !ŸM™M°(ÀtÇÁ˜MÔWà*0Ø-1¯^©^Ü+.¨t¯|©|Ó+<Ü,/°·±Ó,>Ü.1°$·/±/Ó.BÜ/2°4×3CÑ3CÓ/DØ/3×/?Ñ/?Ü&)¨$¯.©.Ó&9ñ	8˜M¨$¯)©)Ó4ð! ô6 *¨xÔ8ˆFØ×*Ñ*Ö,�Ü! $§)¡)¬XÔ6Ü-Ð.SÓTÐTØ—9’9Ø%2×%6Ñ%6´s¸4¿9¹9¿>¹>Ó7JÈBÓ%O�NØ—M‘M×(Ñ(¨Ô8Ø“
ñ -÷= +ðJ �>Š>Ø#×5Ñ5Ö7�	Ø×1Ñ1°)Ó<×<Ñ<ñ 8ð ÷K +Ð*úðN =ús<   ‚3KµAKÁ=%KÂ#%KÃ	F:KÊ;KÊ?KË KËKËKc              #  óž  K  — | j                   }i }t        j                  «       5 }|D �]k  }|j                  |«      }|st	        j
                  d|› d|› d�«       Œ4|j                  sŒA|j                  t        |j                  «       «      v sŒg|j                  }t        j                  d|j                  «      rC|j                  j                  dz   t        j                  j!                  |j"                  «      z   }|j%                  || j&                  ¬«       ||j                  |j(                  |j*                  t-        |j.                  «      t-        |j0                  «      |j2                  t-        |j4                  «      dœ||j"                  <   �Œn t7        |¬«      }	|	j9                  «       D ]�  }
t;        |
j<                  t>        «      stA        d	«      ‚|
j<                  rJ|jC                  t-        |
j<                  j"                  «      i «      }|
jD                  jG                  |«       |
–— Œƒ 	 d
d
d
«       y
# 1 sw Y   y
xY w­w)aÏ  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 Ú.ru   rv   rw   ry   r�   rƒ   N)$rp   r…   r†   Úget_itemÚloggingÚwarningrŠ   rD   r`   r‹   rŒ   r�   rŽ   r�   r�   r‘   r’   r“   r”   rR   r{   r|   r%   r}   r~   r   r•   r   r–   rd   r‚   r   r—   r˜   r™   rš   )rg   ÚdriveÚ
object_idsrž   rŸ   r    r•   r¡   rz   r¢   r£   r¤   s               r6   Ú_load_from_object_idsz$O365BaseLoader._load_from_object_idsç   sÐ  è ø€ ð$ ×0Ñ0ˆØ35ˆÜ×(Ñ(Ô*¨hÜ'�	Ø—~‘~ iÓ0�ÙÜ—O‘Oð%Ø%. K¨z¸%¸ÀðCôð Ø—<“<Ø—~‘~¬¨o×.DÑ.DÓ.FÓ)GÒGØ!%§¡˜ÜŸ9™9ØAÀ4Ç<Á<ôð !%§¡× 4Ñ 4Ø"%ñ!&ä"(§,¡,×"4Ñ"4°T·Y±YÓ"?ñ!@ð #ð
 Ÿ™¨hÀ4Ç?Á?˜ÔSà&,Ø)-¯©Ø'+§|¡|Ø(,¯©Ü*-¨d¯o©oÓ*>Ü+.¨t×/?Ñ/?Ó+@Ø+/×+;Ñ+;Ü"% d§n¡nÓ"5ñ	4˜ d§i¡iÓ0ð) (ô> *¨xÔ8ˆFØ×*Ñ*Ö,�Ü! $§)¡)¬XÔ6Ü-Ð.SÓTÐTØ—9’9Ø%2×%6Ñ%6´s¸4¿9¹9¿>¹>Ó7JÈBÓ%O�NØ—M‘M×(Ñ(¨Ô8Ø“
ñ -÷C +×*Ñ*üs*   ‚#I¥AIÁ)%IÂF(IÈ8	IÉI
ÉIc                óh  — 	 ddl m}m} | j                  r†t        «       }|j                  } ||j                  |j                  ¬«      } |d
| j                  j                  | j                  j                  j                  «       f| j                  |dœddi¤Ž}|S  |t        j                  «       dz  ¬	«      } |d
| j                  j                  | j                  j                  j                  «       f| j                  |dœddi¤Ž}|j!                  «        |S # t        $ r t        d«      ‚w xY w)znAuthenticates 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_errorsFr9   )r:   r4   )ÚO365r   r¯   ÚImportErrorrQ   r8   r:   Úparentr“   rO   r&   r(   Úget_secret_valuerr   r   r;   Úauthenticate)rg   r   r¯   Útoken_storager:   r³   Úaccounts          r6   Ú_authzO365BaseLoader._auth$  s?  € ð	ß<ð
 ×ÒÜ-Ó/ˆMØ&×1Ñ1ˆJÙ2Ø%×,Ñ,¸Z¿_¹_ôˆMñ ð à—M‘M×+Ñ+Ø—M‘M×/Ñ/×@Ñ@ÓBðð —|‘|Ø+ñð '¨Ð.ñˆGð0 ˆñ 3ÜŸ9™9›;¨Ñ7ôˆMñ ð à—M‘M×+Ñ+Ø—M‘M×/Ñ/×@Ñ@ÓBðð —|‘|Ø+ñð '¨Ð.ñˆGð × Ñ Ô"ØˆøôE ò 	ÜØSóð ð	ús   ‚D ÄD1)rh   r
   ÚreturnÚNone)r½   rY   )r½   ú	List[str])r�   r    r½   úIterable[Blob])r«   r   r¬   r¿   r½   rÀ   )r½   r   )r/   r0   r1   Ú__doc__r   r"   rO   r2   rQ   Ú
CHUNK_SIZErR   rS   rT   rU   r   rV   rX   rZ   r_   Úpropertyrp   r   rr   rœ   r­   r¼   Ú__classcell__)rm   s   @r6   rM   rM   O   så   ø… Ù;á#°MÔB€HˆmÓBØ0Ø!€O�TÓ!ØIØ",€J�Ó,ØVØ€IˆtÓØ8Ø)-€NÐ&Ó-ðà)+€HÐ&Ó+ðñ: $/£=€L�.Ó0Ù!,£€K�Ó.Ù"-£-€K�Ó/õ$YðL ò ó ð ð Øò&ó ó ð&ó6=ðp;Øð;Ø(1ð;à	ó;÷z*r5   rM   )rA   rW   r½   rY   )rJ   rW   r½   rY   ):rÁ   Ú
__future__r   r©   r>   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    Ú	getLoggerr/   ÚloggerrÂ   r"   r8   rF   rK   rM   r4   r5   r6   Ú<module>rÓ      s¦   ðÙ 7å "ã Û Û 	Û 	Û Û Ý Ý ß "ß V× VÓ V÷õ ÷ ?ç Põõ JÝ TÝ LáÝß(à	ˆ×	Ñ	˜8Ó	$€à€
ô�Lô ôK˜ô Kó	ó	ô�Z õ r5   