B
    `3                 @   s  d dl mZ d dl mZ d dl mZ d dl mZ d dlZd dlZd dlmZ d dl	Z	d dl
mZ d dlmZ d d	lmZmZmZmZmZmZmZ d d
lmZmZmZ d dlmZ e	eZej G dd deeZ!G dd deZ"G dd deZ#dd Z$edddedd Z%dS )    )print_function)unicode_literals)absolute_import)divisionN)view_config)auth_base_view)
exceptions)UploadTableInitialPostMixinUploadEngineDataLineProcessorUploadDoubleTableForm
UploadData
escape_eol
is_checked)UploadCoreInitialPostBaseTableUploadHandlerset_upload_responsec               @   s   e Zd ZdS )UploadTableInitialPostN)__name__
__module____qualname__ r   r   a/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/pgwui_upload/views/upload.pyr   >   s   r   c                   s$   e Zd Z fddZdd Z  ZS )SaveLinec                s   t t| || || _dS )z
        ue             UploadEngine instance
        uh             UploadHandler instance
        insert_stmt    Statement used to insert into db.
                       (psycopg2 formatted for substituion)
        N)superr   __init__insert_stmt)selfueZuhr   )	__class__r   r   r   E   s    zSaveLine.__init__c             C   s   | j | j|j dS )z]
        Upload a line of data into the db.

        udl  An UploadDataLine instance
        N)curexecuter   Ztuples)r   Zudlr   r   r   eatO   s    zSaveLine.eat)r   r   r   r   r"   __classcell__r   r   )r   r   r   D   s   
r   c                   sD   e Zd ZdZdd Zdd Z fddZ fdd	Zd
d Z  Z	S )TableUploadHandlerz
    Attributes:
      request       A pyramid request instance
      uf            A GCUploadForm instance
      session       A pyramid session instance
      ue
      cur
    c             C   s   t  j| t dS )z>
        Make the upload form needed by this handler.
        )ip)r   buildr   )r   r   r   r   	make_formb   s    zTableUploadHandler.make_formc             C   s2   | j }t|d |d |d |d |d d| _dS )zK
        Return an UploadData instance, with flags set as desired.
        Zlocalfh
upload_fmtupload_nullnull_reptrim_upload)trimN)ufr   data)r   r-   r   r   r   get_datah   s    zTableUploadHandler.get_datac                s4   | j }t  }|d }|dkr0|td |S )z
        Validate input needed beyond that required to connect to the db.

        Returns:
          A list of pgwui_core.UploadError instances
        table zNo table or view name supplied)r-   r   	val_inputappend	upload_exZNoTableError)r   r-   errorsqualified_table)r   r   r   r2   s   s    
zTableUploadHandler.val_inputc                s   t  | jjjd d S )NZpgwuipgwui_upload)r   quote_columnsrequestregistrysettings)r   )r   r   r   r8      s    z TableUploadHandler.quote_columnsc          	   C   st   || _ |j| _| jd }y0|  }| |}| |j|||}t|| |S  tj	t
jfk
rn   d| j_ Y nX dS )zrMake a db loader function from an UploadEngine.

        Input:

        Side Effects:
        Yes, lots.
        r0   r   N)r   r    r-   r8   Zget_column_quoterZbuild_insert_stmtr.   r   core_exZ
PGWUIErrorpsycopg2Errorlineno)r   r   r6   Z	quotecolsZcolumn_quoterr   r   r   r   factory   s    	

zTableUploadHandler.factory)
r   r   r   __doc__r'   r/   r2   r8   r@   r#   r   r   )r   r   r$   X   s   r$   c             C   sh   t | d rd}nd}tdj| d | d |t | d t| d t | d	 | d
 | d | d d	 d S )NZcsv_checkedZCSVZTABzSuccessful upload: DB {db}: Table ({table}): File ({filename}): Lines {lines}: Format {format}: Upload Null {null}: Null Rep ({null_rep}): Trim {trim}: By user {user}filenamelinesr)   r*   r+   dbr0   user)	rB   rC   formatnullr*   r,   rD   r0   rE   )r   loginforF   r   )responser(   r   r   r   log_success   s    


rK   r7   z!pgwui_upload:templates/upload.mak)Z
route_nameZrendererc             C   s8   t |  }t| }td| | |d r4t| |S )Nr7   Z
db_changed)r$   initr
   runr   rK   )r9   ZtuhrJ   r   r   r   upload_view   s    rN   )&
__future__r   r   r   r   attrr=   Zpyramid.viewr   loggingZpgwui_common.viewr   Z
pgwui_corer   r<   Zpgwui_core.corer	   r
   r   r   r   r   r   Zpgwui_upload_core.views.uploadr   r   r   r7   r4   	getLoggerr   rH   sr   r   r$   rK   rN   r   r   r   r   <module>   s,   $	
J