Ë
    µŒjî  ã                   óÚ   — d dl Z d dlmZmZmZmZ d dlZd dlmZ d dl	m
Z
 dZedz   Zedz   Zedz   Z e j                  e j                   ¬	«        e j"                  e«      Z G d
„ de
«      Zy)é    N)ÚAnyÚDictÚListÚOptional)ÚDocument)Ú
BaseLoaderzhttps://api.notion.com/v1z/databases/{database_id}/queryz/pages/{page_id}z/blocks/{block_id}/children)Úlevelc                   ó"  — e Zd ZdZ	 dddœdededee   deeeef      ddf
d	„Z	de
e   fd
„Zddifdeeef   de
eeef      fd„Zdeeef   defd„Zddededefd„Zdi fddœdededeeef   deeeef      def
d„Zde
eeef      defd„Zy)ÚNotionDBLoaderaY  Load from `Notion DB`.

    Reads content from pages within a Notion Database.
    Args:
        integration_token (str): Notion integration token.
        database_id (str): Notion database id.
        request_timeout_sec (int): Timeout for Notion requests in seconds.
            Defaults to 10.
        filter_object (Dict[str, Any]): Filter object used to limit returned
            entries based on specified criteria.
            E.g.: {
                "timestamp": "last_edited_time",
                "last_edited_time": {
                    "on_or_after": "2024-02-07"
                }
            } -> will only return entries that were last edited
                on or after 2024-02-07
            Notion docs: https://developers.notion.com/reference/post-database-query-filter
            Defaults to None, which will return ALL entries.
    N)Úfilter_objectÚintegration_tokenÚdatabase_idÚrequest_timeout_secr   Úreturnc                ó¨   — |st        d«      ‚|st        d«      ‚|| _        || _        d| j                  z   dddœ| _        || _        |xs i | _        y)zInitialize with parameters.z"integration_token must be providedzdatabase_id must be providedzBearer zapplication/jsonz
2022-06-28)ÚAuthorizationzContent-TypezNotion-VersionN)Ú
ValueErrorÚtokenr   Úheadersr   r   )Úselfr   r   r   r   s        úw/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/document_loaders/notiondb.pyÚ__init__zNotionDBLoader.__init__)   sc   € ñ !ÜÐAÓBÐBÙÜÐ;Ó<Ð<à&ˆŒ
Ø&ˆÔà&¨¯©Ñ3Ø.Ø*ñ
ˆŒð
 $7ˆÔ Ø*Ò0¨bˆÕó    c                 óL   ‡ — ‰ j                  «       }t        ˆ fd„|D «       «      S )zqLoad documents from the Notion database.
        Returns:
            List[Document]: List of documents.
        c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­w)N)Ú	load_page)Ú.0Úpage_summaryr   s     €r   Ú	<genexpr>z&NotionDBLoader.load.<locals>.<genexpr>G   s   øè ø€ ÐTÁ^°\�D—N‘N <×0Á^ùs   ƒ)Ú_retrieve_page_summariesÚlist)r   Úpage_summariess   ` r   ÚloadzNotionDBLoader.loadA   s$   ø€ ð
 ×6Ñ6Ó8ˆÜÓTÁ^ÓTÓTÐTr   Ú	page_sizeéd   Ú
query_dictc                 ó  — g }	 | j                  t        j                  | j                  ¬«      d|| j                  ¬«      }|j                  |j                  d«      «       |j                  d«      s	 |S |j                  d«      |d<   Œ†)zi
        Get all the pages from a Notion database
        OR filter based on specified criteria.
        )r   ÚPOST)Úmethodr&   r   ÚresultsÚhas_moreÚnext_cursorÚstart_cursor)Ú_requestÚDATABASE_URLÚformatr   r   ÚextendÚget)r   r&   ÚpagesÚdatas       r   r    z'NotionDBLoader._retrieve_page_summariesI   sŒ   € ð ')ˆàØ—=‘=Ü×#Ñ#°×0@Ñ0@Ð#ÓAØØ%Ø"×0Ñ0ð	 !ó ˆDð �L‰L˜Ÿ™ )Ó,Ô-à—8‘8˜JÔ'Øð ˆð *.¯©°-Ó)@ˆJ�~Ñ&ð r   r   c                 ó|  — |d   }i }|d   j                  «       D �]y  \  }}|d   }|dk(  r| j                  |d   «      }�n@|dk(  r| j                  |d   «      }�n%|dk(  r|d   r|d   D �cg c]  }|d   ‘Œ	 c}ng }�n|dk(  r|d   }nö|d	k(  r|d	   r|d	   d
   › d|d	   d   › �nd}nÖ|dk(  r|d   r|d   d   nd}nÁ|dk(  rNg }|d   rµ|d   D ]>  }|j                  d«      }	|	st        j	                  d|› �«       |j                  |	«       Œ@ nn|dk(  r|d   r|d   nd}n\|dk(  r|d   r|d   nd}nJ|dk(  r|d   r|d   nd}n8|dk(  r|d   }n-|dk(  r|d   }n"|dk(  r|d   }n|dk(  r|d   r|d   d   nd}nd}|||j                  «       <   �Œ| ||d<   t        | j                  |«      |¬«      S c c}w )z\Read a page.

        Args:
            page_summary: Page summary from Notion API.
        ÚidÚ
propertiesÚtypeÚ	rich_textÚtitleÚmulti_selectÚnameÚurlÚ	unique_idÚprefixÚ-ÚnumberNÚstatusÚpeoplez-Missing 'name' in 'people' property for page ÚdateÚlast_edited_timeÚcreated_timeÚcheckboxÚemailÚselect)Úpage_contentÚmetadata)	ÚitemsÚ_concatenate_rich_textr2   ÚloggerÚwarningÚappendÚlowerr   Ú_load_blocks)
r   r   Úpage_idrK   Ú	prop_nameÚ	prop_dataÚ	prop_typeÚvalueÚitemr<   s
             r   r   zNotionDBLoader.load_pagec   sƒ  € ð ˜tÑ$ˆð $&ˆð %1°Ñ$>×$DÑ$D×$FÑ ˆI�yØ! &Ñ)ˆIà˜KÒ'Ø×3Ñ3°I¸kÑ4JÓK’Ø˜gÒ%Ø×3Ñ3°I¸gÑ4FÓG’Ø˜nÒ,ð ! Ò0ð /8¸Ò.GÓHÑ.G d�T˜&“\Ð.GÒHàò ð
 ˜eÒ#Ø! %Ñ(‘Ø˜kÒ)ð ! Ò-ð ! Ñ-¨hÑ7Ð8¸¸)ÀKÑ:PÐQYÑ:ZÐ9[Ñ\àñ ð
 ˜hÒ&Ø7@ÀÒ7J˜	 (Ñ+¨FÒ3ÐPT‘Ø˜hÒ&Ø�Ø˜XÒ&Ø )¨(Ô 3˜Ø#Ÿx™x¨Ó/˜Ù#Ü"ŸN™Nð!,Ø,3¨9ð!6ôð Ÿ™ TÕ*ñ !4ð ˜fÒ$Ø-6°vÒ->˜	 &Ò)ÀD‘ØÐ0Ò0ð !Ð!3Ò4ð Ð0Ò1àñ ð
 ˜nÒ,Ø5>¸~Ò5N˜	 .Ò1ÐTX‘Ø˜jÒ(Ø! *Ñ-‘Ø˜gÒ%Ø! 'Ñ*‘Ø˜hÒ&Ø! (Ñ+‘Ø˜hÒ&Ø7@ÀÒ7J˜	 (Ñ+¨FÒ3ÐPT‘à�à*/ˆH�Y—_‘_Ó&Ó'ðo %Gðr !ˆ�‰ä T×%6Ñ%6°wÓ%?È(ÔSÐSùòe Is   Á.F9Úblock_idÚnum_tabsc                 óÊ  — g }|}|rÍ| j                  t        j                  |¬«      «      }|d   D ]Œ  }||d      }d|vrŒg }|d   D ]$  }	d|	v sŒ|j                  d|z  |	d   d   z   «       Œ& |d   r*| j	                  |d	   |d
z   ¬«      }
|j                  |
«       |j                  dj                  |«      «       ŒŽ |j                  d«      }|rŒÍdj                  |«      S )zRead a block and its children.)rY   r*   r8   r9   ÚtextÚ	ÚcontentÚhas_childrenr6   é   )rZ   Ú
r,   )r.   Ú	BLOCK_URLr0   rP   rR   Újoinr2   )r   rY   rZ   Úresult_lines_arrÚcur_block_idr4   ÚresultÚ
result_objÚcur_result_text_arrr9   Úchildren_texts              r   rR   zNotionDBLoader._load_blocks­   s  € à&(ÐØ$ˆáØ—=‘=¤×!1Ñ!1¸<Ð!1Ó!HÓIˆDà˜yœ/�Ø# F¨6¡NÑ3�
à jÑ0Øà13Ð#à!+¨KÔ!8�IØ Ò*Ø+×2Ñ2Ø  8™O¨i¸Ñ.?À	Ñ.JÑJõð "9ð ˜.Ò)Ø$(×$5Ñ$5Ø˜t™¨x¸!©|ð %6ó %�Mð (×.Ñ.¨}Ô=à ×'Ñ'¨¯	©	Ð2EÓ(FÕGð) *ð,  Ÿ8™8 MÓ2ˆLò3 ð6 �y‰yÐ)Ó*Ð*r   ÚGETr=   r)   c                óÌ   — |j                  «       }|r||d<   t        j                  ||| j                  || j                  ¬«      }|j                  «        |j                  «       S )NÚfilter)r   ÚjsonÚtimeout)ÚcopyÚrequestsÚrequestr   r   Úraise_for_statusrm   )r   r=   r)   r&   r   Újson_payloadÚress          r   r.   zNotionDBLoader._requestÏ   s`   € ð "—‘Ó(ˆÙØ%2ˆL˜Ñ"Ü×ÑØØØ—L‘LØØ×,Ñ,ô
ˆð 	×ÑÔØ�x‰x‹zÐr   Úrich_text_arrayc                 ó2   — dj                  d„ |D «       «      S )z4Concatenate all text content from a rich_text array.Ú c              3   ó&   K  — | ]	  }|d    –— Œ y­w)Ú
plain_textN© )r   rX   s     r   r   z8NotionDBLoader._concatenate_rich_text.<locals>.<genexpr>æ   s   è ø€ ÐF±o¨d�t˜LÕ)±oùs   ‚)rc   )r   ru   s     r   rM   z%NotionDBLoader._concatenate_rich_textä   s   € à�w‰wÑF±oÓFÓFÐFr   )é
   )r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   Úintr   r   r   r   r   r#   r    r   rR   r.   rM   rz   r   r   r   r      s^  „ ñð2 .0ð	1ð 37ò1àð1ð ð1ð & c™]ð	1ð    S¨# X¡Ñ/ð1ð 
ó1ð0U�d˜8‘nó Uð -8¸Ð+=ñØ˜s C˜x™.ðà	ˆd�3˜�8‰nÑ	óð4HT d¨3°¨8¡nð HT¸ó HTñT + Sð  +°Cð  +Àó  +ðJ Ø%'ð	ð 37òàðð ðð ˜˜c˜‘Nð	ð    S¨# X¡Ñ/ðð 
óð*G°d¸4ÀÀSÀ¹>Ñ6Jð GÈsô Gr   r   )ÚloggingÚtypingr   r   r   r   rp   Úlangchain_core.documentsr   Ú)langchain_community.document_loaders.baser   ÚNOTION_BASE_URLr/   ÚPAGE_URLrb   ÚbasicConfigÚWARNINGÚ	getLoggerr|   rN   r   rz   r   r   Ú<module>r‹      su   ðÛ ß ,Ó ,ã Ý -å @à-€ØÐ!AÑA€ØÐ/Ñ/€ØÐ;Ñ;€	ð €× Ñ ˜'Ÿ/™/Õ *Ø	ˆ×	Ñ	˜8Ó	$€ôSG�Zõ SGr   