a
    bgW
                     @  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   w/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/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y> } ztd|W Y d}~n
d}~0 0 |pLtdd}|pZt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  s`   | j | <}|jdkr$td|D ]}dd |D V  q(W d    n1 sR0    Y  d S )Nr   zTable contains no data.c                 S  s   i | ]\}}||qS r   r   ).0kvr   r   r   
<dictcomp>I       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
   