
    dh                         S r SSKJr  SSKJrJrJrJrJr  SSK	r	SSK
Jr  SSKJrJrJrJrJr  SSKJrJr  SSKJr   " S	 S
\5      r " S S\\5      rg)z!Loads data from OneNote Notebooks    )Path)AnyDictIteratorListOptionalN)Document)	BaseModelFieldFilePath	SecretStrmodel_validator)BaseSettingsSettingsConfigDict)
BaseLoaderc                   ^    \ rS rSr% \" S5      r\\S'   \" S5      r\	\S'   \
" SSSSS	S
9rSrg)_OneNoteGraphSettings   .	client_idclient_secretFTz.env	MS_GRAPH_ignore)case_sensitivepopulate_by_nameenv_file
env_prefixextra N)__name__
__module____qualname____firstlineno__r   r   str__annotations__r   r   r   model_config__static_attributes__r       d/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/document_loaders/onenote.pyr   r      s7    3ZIs$SzM9)%Lr'   r   c                      \ rS rSr% Sr\" \S9r\\S'    Sr	\
\S'    Sr\\S'    S	r\\S
'    Sr\\S'    \R                   " 5       S-  S-  r\\S'    Sr\\   \S'    Sr\\   \S'    Sr\\   \S'    Sr\\\      \S'    \" SS9\S\S\4S j5       5       rS\\   4S jr S\S\4S jr!\"S\\\4   4S j5       r#\"S\\   4S j5       r$S"S jr%\"S\4S  j5       r&S!r'g)#OneNoteLoader!   z"Load pages from OneNote notebooks.)default_factorysettingsFauth_with_token access_tokenz+https://graph.microsoft.com/v1.0/me/onenoteonenote_api_base_urlz,https://login.microsoftonline.com/consumers/authority_urlz.credentialszonenote_graph_token.txt
token_pathNnotebook_namesection_name
page_title
object_idsbefore)modevaluesreturnc                 d    SU;   a)  [        US   [        5      (       a  [        S0 US   D6US'   U$ )zInitialize the class.r-   r   )
isinstancedictr   )clsr:   s     r(   initOneNoteLoader.init9   s9     Jvj/A4$H$H!6!L
9K!LF:r'   c              #     #    U R                  5          SSKJn  U R                  bp  U R                   H_  nU R                  U5      nU" US5      nSnUR                  nU(       a  UR                  SS9nUR                  S	SS
9n[        USU0S9v   Ma     gU R                  nUS:w  a  [        R                  " XR                  SS9n	U	R                  5         U	R                  5       n
U
S    HU  nUS   nU R                  U5      nU" US5      nSnUR                  nU(       a  UR                  S	SS
9n[        WSU0S9v   MW     SU
;   a  U
S   nOSnUS:w  a  M  gg! [         a    [        S5      ef = f7f)z
Get pages from OneNote notebooks.

Returns:
    A list of Documents with attributes:
        - page_content
        - metadata
            - title
r   )BeautifulSoupzJbeautifulsoup4 package not found, please install it with `pip install bs4`Nzhtml.parserr/   T)strip
)	separatorrD   title)page_contentmetadata
   headerstimeoutvalueidz@odata.nextLink)_authbs4rC   ImportErrorr7   _get_page_contentrG   get_textr	   _urlrequestsget_headersraise_for_statusjson)selfrC   	object_idpage_content_htmlsoupr6   	title_tagrH   request_urlresponsepagespagepage_ids                r(   	lazy_loadOneNoteLoader.lazy_loadA   s     	

	) ??&!__	$($:$:9$E!$%6F
 JJ	!*!3!3$!3!?J#}}t4}H!-*8M  - ))K##<<]]TVW))+ !'ND"4jG(,(>(>w(G%():MJD!#J $

I '+}}t4}'P"%1Wj<Q  + %-"'(9":K"$K) #+  	$ 	s"   E7E E E7E7E44E7rd   c                     U R                   SU S3-   n[        R                  " X R                  SS9nUR	                  5         UR
                  $ )z!Get page content from OneNote APIz/pages/z/contentrJ   rK   )r1   rV   rW   rX   rY   text)r[   rd   r`   ra   s       r(   rS   OneNoteLoader._get_page_contentz   sE    //GG9H2MM<<]]BO!!#}}r'   c                 $    SSU R                    30$ )z*Return headers for requests to OneNote APIAuthorizationzBearer r0   r[   s    r(   rX   OneNoteLoader._headers   s!     wt'8'8&9:
 	
r'   c                     S/$ )zReturn required scopes.z
Notes.Readr   rm   s    r(   _scopesOneNoteLoader._scopes   s     ~r'   c                 n   U R                   S:w  a  gU R                  (       a:  U R                  R                  S5       nUR	                  5       U l         SSS5        g SSKJn  U" U R                  R                  U R                  R                  R                  5       U R                  S9nUR                  U R                  5      n[        S5        [        U5        [!        S	5      nUR#                  S
5      S   R#                  S5      S   nUR%                  XpR                  S9nUS   U l          U R                  R&                  R)                  5       (       d#  U R                  R&                  R+                  SS9  U R                  R                  S5       nUR/                  U R                   5        SSS5        g! , (       d  f       g= f! [         a  n[        S5      UeSnAff = f! [,         a,  n[-        SU R                  R&                   S3S-   5      UeSnAff = f! , (       d  f       g= f)z%Authenticate with Microsoft Graph APIr/   Nrr   )ConfidentialClientApplicationzAMSAL package not found, please install it with `pip install msal`)r   client_credential	authorityz(Visit the following url to give consent:z"Paste the authenticated url here:
zcode=   &)codescopesr0   T)parentszCould not create the folder  zto store the access token.w)r0   r.   r3   openreadmsalrt   rR   r-   r   r   get_secret_valuer2   get_authorization_request_urlrp   printinputsplit#acquire_token_by_authorization_codeparentexistsmkdir	Exceptionwrite)	r[   
token_filert   eclient_instanceauthorization_request_urlauthorization_urlauthorization_codeaccess_token_jsons	            r(   rP   OneNoteLoader._auth   s   "%%c*j$.OO$5! +*> <--11"&--"="="N"N"P,,O )8(U(U)% <=+, %&K L!2!8!8!A!!D!J!J3!OPQ!R / S S' !T ! !2. AD--4466OO**000> %%c*j  !2!23 +*M +*
  !W6  24??3I3I2J!L23  +*sH   F>G 2AG- H&>
G
G*G%%G*-
H#7'HH#&
H4c                    / n/ n/ nUR                  S5        U R                  bC  UR                  SSU R                  R                  SS5       S3-   5        UR                  S5        U R                  bC  UR                  SSU R                  R                  SS5       S3-   5        UR                  S5        U R                  b2  UR                  S	SU R                  R                  SS5       S3-   5        [        U5      S
:  a#  UR                  SSR                  U5      -   5        [        U5      S
:  a#  UR                  SSR                  U5      -   5        SR                  U5      nUS:w  a  SU-   nU R                   SU 3$ )z8Create URL for getting page ids from the OneNoteApi API.z
$select=idz"parentNotebook/displayName%20eq%20'r|   z%20parentNotebookz!parentSection/displayName%20eq%20parentSectionztitle%20eq%20r   z$expand=,z$filter=z	%20and%20rx   r/   ?z/pages)appendr4   replacer5   r6   lenjoinr1   )r[   query_params_listfilter_listexpand_listquery_paramss        r(   rU   OneNoteLoader._url   s      .)4d((00e<=Q?@ /0(3d''//U;<A>? /??&Adoo&=&=c5&I%J!"LL {a$$Z#((;2G%GH{a$$Z+2B2B;2O%OPxx 122-L++,F<.AAr'   rl   )r;   N)(r   r    r!   r"   __doc__r   r   r-   r$   r.   boolr0   r#   r1   r2   r   homer3   r   r4   r   r5   r6   r7   r   r   classmethodr   r   r@   r   r	   re   rS   propertyrX   rp   rP   rU   r&   r   r'   r(   r*   r*   !   sm   ,&+<Q&RH#R6!OT!IL# M#M0GM3G199;7:SSJS;#'M8C='!"&L(3-&  $J$ &*Jc#*4(#$ 3   $7%8H- 7%r   
$sCx. 
 
 c  -4^  Bc  B  Br'   r*   )r   pathlibr   typingr   r   r   r   r   rV   langchain_core.documentsr	   pydanticr
   r   r   r   r   pydantic_settingsr   r   )langchain_community.document_loaders.baser   r   r*   r   r'   r(   <module>r      sG    '  6 6  -  ? @
L 
|BJ	 |Br'   