Ë
    µŒj¸  ã                   ó†   — d dl Z d dlZd dlZd dlmZmZ d dlZd dlmZ d dl	m
Z
  ej                  e«      Z G d„ de
«      Zy)é    N)ÚIteratorÚList)ÚDocument)Ú
BaseLoaderc                   ób   — e Zd ZdZ	 	 	 	 ddedededededefd„Zd	ed
ee   fd„Z	d
e
e   fd„Zy)ÚCubeSemanticLoadera}  Load `Cube semantic layer` metadata.

    Args:
        cube_api_url: REST API endpoint.
            Use the REST API of your Cube's deployment.
            Please find out more information here:
            https://cube.dev/docs/http-api/rest#configuration-base-path
        cube_api_token: Cube API token.
            Authentication tokens are generated based on your Cube's API secret.
            Please find out more information here:
            https://cube.dev/docs/security#generating-json-web-tokens-jwt
        load_dimension_values: Whether to load dimension values for every string
            dimension or not.
        dimension_values_limit: Maximum number of dimension values to load.
        dimension_values_max_retries: Maximum number of retries to load dimension
            values.
        dimension_values_retry_delay: Delay between retries to load dimension values.
    Úcube_api_urlÚcube_api_tokenÚload_dimension_valuesÚdimension_values_limitÚdimension_values_max_retriesÚdimension_values_retry_delayc                 óX   — || _         || _        || _        || _        || _        || _        y )N)r	   r
   r   r   r   r   )Úselfr	   r
   r   r   r   r   s          ú|/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/document_loaders/cube_semantic.pyÚ__init__zCubeSemanticLoader.__init__"   s4   € ð )ˆÔØ,ˆÔØ%:ˆÔ"Ø&<ˆÔ#Ø,HˆÔ)Ø,HˆÕ)ó    Údimension_nameÚreturnc                 ó”  — t         j                  d|«       d| j                  dœ}d|g| j                  dœi}d}|| j                  k  rÖt        j                  d| j                  › d�|t        j                  |«      ¬	«      }|j                  d
k(  rm|j                  «       }d|v rB|d   dk(  r:t         j                  d«       |dz  }t        j                  | j                  «       Œ­|d   D �cg c]  }||   ‘Œ	 }}|S t         j                  d|j                  «       	 || j                  k(  rt         j                  d«       g S c c}w )z©Makes a call to Cube's REST API load endpoint to retrieve
        values for dimensions.

        These values can be used to achieve a more accurate filtering.
        z$Loading dimension values for: %s ...úapplication/json©zContent-TypeÚAuthorizationÚquery)Ú
dimensionsÚlimitr   ÚPOSTz/load)ÚheadersÚdataéÈ   ÚerrorzContinue waitzRetrying...é   r   z#Request failed with status code: %szMaximum retries reached.)ÚloggerÚinfor
   r   r   ÚrequestsÚrequestr	   ÚjsonÚdumpsÚstatus_codeÚtimeÚsleepr   r!   )	r   r   r   r   ÚretriesÚresponseÚresponse_dataÚitemÚdimension_valuess	            r   Ú_get_dimension_valuesz(CubeSemanticLoader._get_dimension_values2   s]  € ô 	�‰Ð:¸NÔKð /Ø!×0Ñ0ñ
ˆð Ø-Ð.Ø×4Ñ4ñð
ˆð ˆØ˜×9Ñ9Ò9Ü×'Ñ'ØØ×$Ñ$Ð% UÐ+ØÜ—Z‘Z Ó&ô	ˆHð ×#Ñ# sÒ*Ø (§¡£�à˜}Ñ,Ø% gÑ.°/ÒAä—K‘K Ô.Ø˜q‘L�GÜ—J‘J˜t×@Ñ@ÔAØð :GÀvÒ9Nó(Ù9N°˜˜^Ó,Ð9Nð %ð (ð ,Ð+ä—‘Ø9¸8×;OÑ;Oôð à�d×7Ñ7Ò7Ü�K‰KÐ2Ô3Øˆ	ùò(s   Ã.Ec              #   ó   K  — d| j                   dœ}t        j                  d| j                  «       t	        j
                  | j                  › d�|¬«      }|j                  «        |j                  «       }|j                  dg «      }t        j                  dt        |«      «       |st        d«      ‚|D �]Ã  }|j                  d	«      }|j                  d
«      }|j                  d«      }|j                  dg «      }	|j                  dg «      }
t        j                  d|«       |st        j                  d|«       ŒŠ|	|
z   D �]1  }||	v rdnd}g }t        |j                  d	«      «      }t        |j                  d
«      «      }t        |j                  d«      «      }|st        j                  d|«       Œu| j                  r|dk(  r|dk(  r| j                  |«      }t        t        |«      ||t        |j                  d«      «      t        |j                  d«      «      |||¬«      }t        |j                  d«      «      › d�}|t        |j                  d«      «      › z  }t        ||¬«      –— �Œ4 �ŒÆ y­w)a  Makes a call to Cube's REST API metadata endpoint.

        Returns:
            A list of documents with attributes:
                - page_content=column_title + column_description
                - metadata
                    - table_name
                    - column_name
                    - column_data_type
                    - column_member_type
                    - column_title
                    - column_description
                    - column_values
                    - cube_data_obj_type
        r   r   zLoading metadata from %s ...z/meta)r   Úcubesz'Found %s cube data objects in metadata.zNo cubes found in metadata.ÚnameÚtypeÚpublicÚmeasuresr   zProcessing %s ...z%Skipping %s because it is not public.ÚmeasureÚ	dimensionÚstringÚtitleÚdescription)Ú
table_nameÚcolumn_nameÚcolumn_data_typeÚcolumn_titleÚcolumn_descriptionÚcolumn_member_typeÚcolumn_valuesÚcube_data_obj_typez, )Úpage_contentÚmetadataN)r
   r#   r$   r	   r%   ÚgetÚraise_for_statusr'   ÚlenÚ
ValueErrorÚstrÚboolr   r1   Údictr   )r   r   r-   Úraw_meta_jsonÚcube_data_objectsÚcube_data_objÚcube_data_obj_namerD   Úcube_data_obj_is_publicr7   r   r/   rB   r0   Ú	item_nameÚ	item_typeÚ	is_publicrF   rE   s                      r   Ú	lazy_loadzCubeSemanticLoader.lazy_loadh   sM  è ø€ ð" /Ø!×0Ñ0ñ
ˆô
 	�‰Ð2°D×4EÑ4EÔFÜ—<‘< 4×#4Ñ#4Ð"5°UÐ ;ÀWÔMˆØ×!Ñ!Ô#Ø Ÿ™›ˆØ)×-Ñ-¨g°rÓ:Ðä�‰Ð=¼sÐCTÓ?UÔVá ÜÐ:Ó;Ð;ä.ˆMØ!.×!2Ñ!2°6Ó!:ÐØ!.×!2Ñ!2°6Ó!:ÐØ&3×&7Ñ&7¸Ó&AÐ#Ø$×(Ñ(¨°RÓ8ˆHØ&×*Ñ*¨<¸Ó<ˆJä�K‰KÐ+Ð-?Ô@á*Ü—‘ÐCÐEWÔXØà  :Õ-�Ø26¸(Ñ2B¡YÈÐ"Ø#%Ð Ü §¡¨Ó 0Ó1�	Ü §¡¨Ó 0Ó1�	ä  §¡¨(Ó!3Ó4�	Ù Ü—K‘KÐ GÈÔSØð ×.Ò.Ø*¨kÒ9Ø! XÒ-à'+×'AÑ'AÀ)Ó'LÐ$äÜ"Ð#5Ó6Ø )Ø%.Ü!$ T§X¡X¨gÓ%6Ó!7Ü'*¨4¯8©8°MÓ+BÓ'CØ'9Ø"2Ø'9ô	�ô #& d§h¡h¨wÓ&7Ó"8Ð!9¸Ð<�Ø¤3 t§x¡x°Ó'>Ó#?Ð"@ÑA�ä¨LÀ8ÔLÔLòA .ñ /ùs   ‚I<I>N)Ti'  é
   é   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rK   rL   Úintr   r   r1   r   r   rV   © r   r   r   r      sˆ   „ ñð. '+Ø&,Ø,.Ø,-ñIàðIð ðIð  $ð	Ið
 !$ðIð '*ðIð '*óIð 4°Cð 4¸DÀ¹Ió 4ðlMM˜8 HÑ-ô MMr   r   )r'   Úloggingr*   Útypingr   r   r%   Úlangchain_core.documentsr   Ú)langchain_community.document_loaders.baser   Ú	getLoggerrY   r#   r   r^   r   r   Ú<module>rd      s<   ðÛ Û Û ß !ã Ý -å @à	ˆ×	Ñ	˜8Ó	$€ôgM˜õ gMr   