
    dh                         S SK r S SKrS SKrS SKJrJr  S SKrS SKJr  S SK	J
r
  \R                  " \5      r " S S\
5      rg)    N)IteratorList)Document)
BaseLoaderc                   r    \ rS rSrSr    SS\S\S\S\S\S\4S	 jjrS
\S\	\   4S jr
S\\   4S jrSrg)CubeSemanticLoader   a=  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                 L    Xl         X l        X0l        X@l        XPl        X`l        g )N)r
   r   r   r   r   r   )selfr
   r   r   r   r   r   s          j/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/document_loaders/cube_semantic.py__init__CubeSemanticLoader.__init__"   s(     ),%:"&<#,H),H)    dimension_namereturnc                    [         R                  SU5        SU R                  S.nSU/U R                  S.0nSnX@R                  :  a  [
        R                  " SU R                   S3U[        R                  " U5      S	9nUR                  S
:X  as  UR                  5       nSU;   aE  US   S:X  a<  [         R                  S5        US-  n[        R                  " U R                  5        M  US    Vs/ sH  owU   PM	     nnU$ [         R                  SUR                  5         X@R                  :X  a  [         R                  S5        / $ s  snf )zMakes 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_values(CubeSemanticLoader._get_dimension_values2   sW    	:NK /!00
 -.44
 999''$$%U+ZZ&	H ##s* (},%g./AKK.qLGJJt@@A :Gv9N(9N^,9N % ( ,+98;O;O 777KK23	(s   3Ec              #   (  #    SU R                   S.n[        R                  SU R                  5        [        R
                  " U R                   S3US9nUR                  5         UR                  5       nUR                  S/ 5      n[        R                  S[        U5      5        U(       d  [        S5      eU GH  nUR                  S	5      nUR                  S
5      nUR                  S5      nUR                  S/ 5      n	UR                  S/ 5      n
[        R                  SU5        U(       d  [        R                  SU5        M  X-    GH:  nX;   a  SOSn/ n[        UR                  S	5      5      n[        UR                  S
5      5      n[        UR                  S5      5      nU(       d  [        R                  SU5        M|  U R                  (       a  US:X  a  US:X  a  U R                  U5      n[        [        U5      UU[        UR                  S5      5      [        UR                  S5      5      UUUS9n[        UR                  S5      5       S3nU[        UR                  S5      5       -  n[        UUS9v   GM=     GM     g7f)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   r3   dictr   )r   r    r/   raw_meta_jsoncube_data_objectscube_data_objcube_data_obj_namerG   cube_data_obj_is_publicr:   r   r1   rE   r2   	item_name	item_type	is_publicrI   rH   s                      r   	lazy_loadCubeSemanticLoader.lazy_loadh   sH    " /!00

 	2D4E4EF<<4#4#4"5U ;WM!!# )--gr:=sCT?UV :;;.M!.!2!26!:!.!2!26!:&3&7&7&A#$((R8H&**<<JKK+-?@*CEWX -262BY"#%  01	 01	 (!34	 KK GS ..*k9!X-'+'A'A)'L$"#56 )%.!$TXXg%6!7'*488M+B'C'9"2'9	 #&dhhw&7"8!9<3txx'>#?"@AL8LLA . /s   JJ)r   r
   r   r   r   r   N)Ti'  
      )__name__
__module____qualname____firstlineno____doc__rN   rO   intr   r   r3   r   r   rY   __static_attributes__ r   r   r   r      s    . '+&,,.,-II I  $	I
 !$I '*I '*I 4C 4DI 4lMM8H- MMr   r   )r)   loggingr,   typingr   r   r'   langchain_core.documentsr   )langchain_community.document_loaders.baser   	getLoggerr]   r%   r   rd   r   r   <module>rj      s:       !  - @			8	$gM gMr   