
    h                         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          p/var/www/html/eduruby.in/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  rt        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 )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_valuesz(CubeSemanticLoader._get_dimension_values2   s[    	:NK /!00
 -.44
 999''$$%U+ZZ&	H ##s* (},%g./AKK.qLGJJt@@A :Gv9N(15^,($ ( ,+98;O;O d777KK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   s[    " /!00

 	2D4E4EF<<4#4#4"5U ;WM!!# )--gr:=sCT?UV :;;. -	MM!.!2!26!:!.!2!26!:&3&7&7&A#$((R8H&**<<JKK+-?@*CEWX :-  M26(2BY"#%  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 M-	M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8H- 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   