o
    EDi                     @   sb   d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	 e 
eZG dd dZG dd dZdS )	    N)OptionalSequenceDictUnion)Path)ProgrammingErrorc                   @   s   e Zd Z							ddee dee dee dee deeeee f  deeeee f  dee fd	d
Ze	de
fddZe	deeef fddZdS )ExternalFileN	file_path	file_namedatafmttypes	structure	mime_typec              
   C   s  |ro|rt dzt|d}| | _W d    n1 sw   Y  W n ty9 }	 z	t d| d|	d }	~	ww t|j}
|
jdddd }|sQ|| _|
| _n=|jdddd | _|| _||
krn|| jkrnt	
d	||
 n|d ur|syt d
|| _|jdddd | _|| _nt dd | _d | _|r|rt dt|tr|| _nd|| _n|rt|tr|| _nd|| _|| _|pd| _d S )NzFOnly data or file_path should be specified for external data, not bothrbzFailed to open file z for external data.   )maxsplitr   z:External data name %s and file_path %s use different namesz(Name is required for query external dataz<Either data or file_path must be specified for external datazGOnly types or structure should be specified for external data, not both,zapplication/octet-stream)r   openreadr   OSErrorr   namersplitr
   loggerwarningr   r   
isinstancestrjoinr   r   )selfr	   r
   r   r   r   r   r   fileex	path_name	path_base r$   [/var/www/Datamplify/venv/lib/python3.10/site-packages/clickhouse_connect/driver/external.py__init__   sV   


zExternalFile.__init__returnc                 C   s   | j | j| jfS )N)r
   r   r   r   r$   r$   r%   	form_data?   s   zExternalFile.form_datac                 C   sF   i }d| j fd| jfd| jffD ]\}}|r ||| j d| < q|S )Nformatr   r   _)r   r   r   r   )r   paramsr   valuer$   r$   r%   query_paramsC   s   zExternalFile.query_paramsNNNNNNN)__name__
__module____qualname__r   r   bytesr   r   r&   propertytupler)   r   r.   r$   r$   r$   r%   r   
   s6    
3r   c                   @   s  e Zd Z							ddee dee dee dee deeeee f  deeeee f  dee fd	d
Z							ddee dee dee dee deeeee f  deeeee f  dee fddZ	e
deeef fddZe
deeef fddZdS )ExternalDataNr	   r
   r   r   r   r   r   c           	   	   C   s<   g | _ |s	|d urt|||||||d}| j | d S d S N)r	   r
   r   r   r   r   r   )filesr   append)	r   r	   r
   r   r   r   r   r   
first_filer$   r$   r%   r&   O   s   zExternalData.__init__c                 C   s"   | j t|||||||d d S r7   )r8   r9   r   )r   r	   r
   r   r   r   r   r   r$   r$   r%   add_fileb   s   
zExternalData.add_filer'   c                 C   s   | j stddd | j D S )N'No external files set for external datac                 S   s   i | ]}|j |jqS r$   )r   r)   ).0r    r$   r$   r%   
<dictcomp>v   s    z*ExternalData.form_data.<locals>.<dictcomp>)r8   r   r(   r$   r$   r%   r)   r   s   zExternalData.form_datac                 C   s.   | j stdi }| j D ]}||j q|S )Nr<   )r8   r   updater.   )r   r,   r    r$   r$   r%   r.   x   s   
zExternalData.query_paramsr/   )r0   r1   r2   r   r   r3   r   r   r&   r;   r4   r   r5   r)   r.   r$   r$   r$   r%   r6   N   sb    

r6   )loggingtypingr   r   r   r   pathlibr   $clickhouse_connect.driver.exceptionsr   	getLoggerr0   r   r   r6   r$   r$   r$   r%   <module>   s    
D