
    7|hW
                    X    d dl mZ d dlmZmZmZmZ d dlmZ erd dl	m
Z
  G d d      Zy)    )annotations)TYPE_CHECKINGIteratorListOptional)get_from_envODPSc                  T    e Zd ZdZddZeddd	 	 	 	 	 	 	 	 	 d	d       Zd
dZddZy)MaxComputeAPIWrapperz7Interface for querying Alibaba Cloud MaxCompute tables.c                    || _         y)zvInitialize MaxCompute document loader.

        Args:
            client: odps.ODPS MaxCompute client object.
        N)client)selfr   s     h/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/utilities/max_compute.py__init__zMaxComputeAPIWrapper.__init__   s         N)	access_idsecret_access_keyc                   	 ddl m} |xs t        dd      }|xs t        dd      } |||||	      }|j	                  |      st        d
| d       | |      S # t        $ r}t        d      |d}~ww xY w)az  Convenience constructor that builds the odsp.ODPS MaxCompute client from
            given parameters.

        Args:
            endpoint: MaxCompute endpoint.
            project: A project is a basic organizational unit of MaxCompute, which is
                similar to a database.
            access_id: MaxCompute access ID. Should be passed in directly or set as the
                environment variable `MAX_COMPUTE_ACCESS_ID`.
            secret_access_key: MaxCompute secret access key. Should be passed in
                directly or set as the environment variable
                `MAX_COMPUTE_SECRET_ACCESS_KEY`.
        r   r	   zCould not import pyodps python package. Please install it with `pip install pyodps` or refer to https://pyodps.readthedocs.io/.Nr   MAX_COMPUTE_ACCESS_IDr   MAX_COMPUTE_SECRET_ACCESS_KEY)r   r   projectendpointzThe project "z" does not exist.)odpsr
   ImportErrorr   exist_project
ValueError)clsr   r   r   r   r
   exr   s           r   from_paramsz MaxComputeAPIWrapper.from_params   s    ,	! Sk;R!S	- 
!@2
 /	
 ##G,}WI5FGHH6{'  	2 		s   A 	A6%A11A6c              #    K   | j                   j                  |      j                         5 }|j                  dk(  rt	        d      |D ]  }|D ci c]  \  }}||
 c}}  	 d d d        y c c}}w # 1 sw Y   y xY ww)Nr   zTable contains no data.)r   execute_sqlopen_readercountr   )r   queryreaderrecordkvs         r   
lazy_queryzMaxComputeAPIWrapper.lazy_queryC   s     [[$$U+779 	0V||q  !:;;  0(./1q!t//0	0 	0 0		0 	0s.   *B%A6A0
A6'	B0A66A?;Bc                6    t        | j                  |            S )N)listr*   )r   r%   s     r   r%   zMaxComputeAPIWrapper.queryK   s    DOOE*++r   )r   r
   )
r   strr   r-   r   Optional[str]r   r.   returnr   )r%   r-   r/   zIterator[dict])r%   r-   r/   z
List[dict])	__name__
__module____qualname____doc__r   classmethodr    r*   r%    r   r   r   r      sa    A  $(+/** *
 !* )* 
* *X0,r   r   N)
__future__r   typingr   r   r   r   langchain_core.utilsr   r   r
   r   r5   r   r   <module>r9      s#    " : : -A, A,r   