o
    w¨Êhö  ã                   @   s¤   d Z ddlmZ G dd„ deƒZG dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZ	G dd„ deƒZ
G dd„ deƒZG dd„ deƒZdS )zô
    pyexcel_io.database.common
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Common classes shared among database importers and exporters

    :copyright: (c) 2014-2017 by Onni Software Ltd.
    :license: New BSD License, see LICENSE for more details
é    )Ú
BookReaderc                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú
DbExporterz5 Transcode the book reader interface to db interface c                 K   ó   | j | |fi |¤Ž d S ©N©Úexport_tables)ÚselfÚ	file_nameÚkeywords© r   úL/var/www/html/env/lib/python3.10/site-packages/pyexcel_io/database/common.pyÚopen   ó   zDbExporter.openc                 K   r   r   r   )r   Úfile_streamr
   r   r   r   Úopen_stream   r   zDbExporter.open_streamc                 K   s   | j |fi |¤Ž d S r   r   )r   Úfile_contentr
   r   r   r   Úopen_content   s   zDbExporter.open_contentc                 K   s   t dƒ‚)z read database tables zPlease implement this method)ÚNotImplementedError)r   Úexporterr
   r   r   r   r      s   zDbExporter.export_tablesN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r      s    r   c                   @   s.   e Zd ZdZd	dd„Zedd„ ƒZdd„ ZdS )
ÚDjangoModelExportAdapterz  django export parameter holder Nc                 C   s   || _ || _d S r   )ÚmodelÚexport_columns©r   r   r   r   r   r   Ú__init__!   ó   
z!DjangoModelExportAdapter.__init__c                 C   s   |   ¡ S ©z get database table name )Úget_name©r   r   r   r   Úname%   ó   zDjangoModelExportAdapter.namec                 C   s
   | j jjS r   )r   Ú_metaÚ
model_namer!   r   r   r   r    *   s   
z!DjangoModelExportAdapter.get_namer   )r   r   r   r   r   Úpropertyr"   r    r   r   r   r   r      s    

r   c                   @   s~   e Zd ZdZG dd„ deƒZdd„ Zedd„ ƒZedd	„ ƒZ	ed
d„ ƒZ
ejdd„ ƒZe	jdd	„ ƒZ	e
jdd„ ƒZ
dd„ ZdS )ÚDjangoModelImportAdapterz) parameter holder for django data import c                   @   ó   e Zd ZdZdd„ ZdS )z'DjangoModelImportAdapter.InOutParameterz' local class to manipulate variable io c                 C   s   d | _ d | _d S r   )ÚoutputÚinputr!   r   r   r   r   5   r   z0DjangoModelImportAdapter.InOutParameter.__init__N©r   r   r   r   r   r   r   r   r   ÚInOutParameter2   ó    r,   c                 C   s6   t  | |¡ |  ¡ | _|  ¡ | _|  ¡ | _|  ¡  d S r   )r   r   r,   Ú'_DjangoModelImportAdapter__column_namesÚ3_DjangoModelImportAdapter__column_name_mapping_dictÚ*_DjangoModelImportAdapter__row_initializerÚ_process_parameters©r   r   r   r   r   r   9   s
   


z!DjangoModelImportAdapter.__init__c                 C   ó   | j jS )z' contructor for a database table entry )r0   r)   r!   r   r   r   Úrow_initializer@   r#   z(DjangoModelImportAdapter.row_initializerc                 C   r3   )z& the desginated database column names )r.   r)   r!   r   r   r   Úcolumn_namesE   r#   z%DjangoModelImportAdapter.column_namesc                 C   r3   )z3 if not the same, a mapping dictionary is looked up)r/   r)   r!   r   r   r   Úcolumn_name_mapping_dictJ   r#   z1DjangoModelImportAdapter.column_name_mapping_dictc                 C   ó   || j _|  ¡  dS )z set the contructor N)r0   r*   r1   )r   Ú
a_functionr   r   r   r4   O   ó   c                 C   r7   )z set the column names N)r.   r*   r1   )r   r5   r   r   r   r5   U   r9   c                 C   r7   )z set the mapping dict N)r/   r*   r1   )r   Úmapping_dictr   r   r   r6   [   r9   c                    sž   ˆ j jd u rd ˆ j _nˆ j jˆ j _tˆ jjtƒr#ˆ jjˆ j_d ˆ j_ntˆ jjtƒr?ˆ jjr?‡ fdd„ˆ jjD ƒˆ j_d ˆ j_ˆ jjd u rMˆ jjˆ j_d S d S )Nc                    s   g | ]}ˆ j j| ‘qS r   )r/   r*   )Ú.0r"   r!   r   r   Ú
<listcomp>k   s    
ÿÿz@DjangoModelImportAdapter._process_parameters.<locals>.<listcomp>)r0   r*   r)   Ú
isinstancer/   Úlistr.   Údictr!   r   r!   r   r1   a   s   



þÿz,DjangoModelImportAdapter._process_parametersN)r   r   r   r   Úobjectr,   r   r&   r4   r5   r6   Úsetterr1   r   r   r   r   r'   /   s"    





r'   c                   @   ó    e Zd ZdZdd„ Zdd„ ZdS )ÚDjangoModelExporterz* public interface for django model export c                 C   s
   g | _ d S r   )Úadaptersr!   r   r   r   r   w   ó   
zDjangoModelExporter.__init__c                 C   s   | j  |¡ dS ©z/ store model parameter for more than one model N)rD   Úappend©r   Úimport_adapterr   r   r   rG   z   s   zDjangoModelExporter.appendN)r   r   r   r   r   rG   r   r   r   r   rC   t   s    rC   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚDjangoModelImporterz* public interface for django model import c                 C   s
   i | _ d S r   )Ú_DjangoModelImporter__adaptersr!   r   r   r   r   ‚   rE   zDjangoModelImporter.__init__c                 C   s   || j | ¡ < dS rF   )rK   r    rH   r   r   r   rG   …   s   zDjangoModelImporter.appendc                 C   s   | j  |d¡S )z get a parameter out N)rK   Úget)r   r"   r   r   r   rL   ‰   s   zDjangoModelImporter.getN)r   r   r   r   r   rG   rL   r   r   r   r   rJ      s
    rJ   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )ÚSQLTableExportAdapterz, parameter holder for sql table data export Nc                 C   s   t  | ||¡ || _d S r   )r   r   Útabler   r   r   r   r   ‘   s   
zSQLTableExportAdapter.__init__c                 C   ó   t | jdd ƒS ©NÚ__tablename__©ÚgetattrrN   r!   r   r   r   r    •   ó   zSQLTableExportAdapter.get_namer   ©r   r   r   r   r   r    r   r   r   r   rM   Ž   s    
rM   c                   @   rB   )ÚSQLTableImportAdapterz. parameter holder for sqlalchemy table import c                 C   s   t  | |¡ || _d S r   )r'   r   rN   r2   r   r   r   r   œ   s   
zSQLTableImportAdapter.__init__c                 C   rO   rP   rR   r!   r   r   r   r        rT   zSQLTableImportAdapter.get_nameNrU   r   r   r   r   rV   ™   s    rV   c                   @   r(   )ÚSQLTableExporterz' public interface for sql table export c                 C   ó   t  | ¡ || _d S r   )rC   r   Úsession©r   rY   r   r   r   r   §   ó   

zSQLTableExporter.__init__Nr+   r   r   r   r   rW   ¤   r-   rW   c                   @   r(   )ÚSQLTableImporterz3 public interface to do data import via sqlalchemy c                 C   rX   r   )rJ   r   rY   rZ   r   r   r   r   ¯   r[   zSQLTableImporter.__init__Nr+   r   r   r   r   r\   ¬   r-   r\   N)r   Úpyexcel_io.bookr   r   r@   r   r'   rC   rJ   rM   rV   rW   r\   r   r   r   r   Ú<module>   s    	E