U
    hW
                     @  sR   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 dZdS )    )annotations)TYPE_CHECKINGIteratorListOptional)get_from_envODPSc                   @  s`   e Zd ZdZddddZedddddd	d	d d
ddZdddddZdddddZdS )MaxComputeAPIWrapperz7Interface for querying Alibaba Cloud MaxCompute tables.r	   clientc                 C  s
   || _ dS )zvInitialize MaxCompute document loader.

        Args:
            client: odps.ODPS MaxCompute client object.
        Nr   )selfr    r   M/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/utilities/max_compute.py__init__   s    zMaxComputeAPIWrapper.__init__N)	access_idsecret_access_keystrzOptional[str])endpointprojectr   r   returnc             
   C  s   zddl m} W n, tk
r< } ztd|W 5 d}~X Y nX |pJtdd}|pXtdd}|||||d	}||std
| d| |S )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   ZMAX_COMPUTE_ACCESS_IDr   ZMAX_COMPUTE_SECRET_ACCESS_KEY)r   r   r   r   zThe project "z" does not exist.)odpsr	   ImportErrorr   Zexist_project
ValueError)clsr   r   r   r   r	   exr   r   r   r   from_params   s,     
z MaxComputeAPIWrapper.from_paramszIterator[dict])queryr   c              	   c  sL   | j | 2}|jdkr$td|D ]}dd |D V  q(W 5 Q R X d S )Nr   zTable contains no data.c                 S  s   i | ]\}}||qS r   r   ).0kvr   r   r   
<dictcomp>I   s      z3MaxComputeAPIWrapper.lazy_query.<locals>.<dictcomp>)r   Zexecute_sqlZopen_readercountr   )r   r   readerrecordr   r   r   
lazy_queryC   s
    
zMaxComputeAPIWrapper.lazy_queryz
List[dict]c                 C  s   t | |S )N)listr%   )r   r   r   r   r   r   K   s    zMaxComputeAPIWrapper.query)	__name__
__module____qualname____doc__r   classmethodr   r%   r   r   r   r   r   r
      s   ,r
   N)
__future__r   typingr   r   r   r   Zlangchain_core.utilsr   r   r	   r
   r   r   r   r   <module>   s
   