o
    S=h?                     @   s,  d dl mZ d dlmZmZ d dlmZmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlZd d	lmZ 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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 )     )Config)create_engineasc)ColumnString)DATEJSONB)declarative_base)SQLAlchemyError)sessionmakerN)datetimec                   @   s<   e Zd ZejZeedddZee	ddZ
ededddZdS )AnnotationStateTprimary_keyuniqueF)indexsending_date)r   r   N)__name__
__module____qualname__r   ANNOTATIONSTATE_TABLENAME__tablename__r   r   uuidr   datar   r    r   r   :/home/cmiss/Jenkins/workspace/SPARC-API-DEV/app/dbtable.pyr      s
    r   c                   @   (   e Zd ZejZeedddZee	Z
dS )MapStateTr   N)r   r   r   r   MAPSTATE_TABLENAMEr   r   r   r   r   r   r   r   r   r   r          r   c                   @   r   )ScaffoldStateTr   N)r   r   r   r   SCAFFOLDSTATE_TABLENAMEr   r   r   r   r   r   r   r   r   r   r       r   r    c                   @   r   )FeaturedDatasetIdSelectorStateTr   N)r   r   r   r   &FEATURED_DATASET_ID_SELECTOR_TABLENAMEr   r   r   r   r   r   r   r   r   r   r"   !   r   r"   c                   @   r   )ProtocolMetricsStateTr   N)r   r   r   r   PROTOCOL_METRICS_TABLENAMEr   r   r   r   r   r   r   r   r   r   r$   &   r   r$   c                   @   s@   e Zd Zdd Zdd Zdd Zddd	Zdd
dZdd ZdS )Tablec                 C   s$   || _ || _d | _d | _|   d S N)databaseURL_state_engine_Session_init_db)selfr(   stater   r   r   __init__,   s
   zTable.__init__c                 C   s2   t | jddd| _tj| j t| jd| _d S )NTi,  )Zpool_pre_pingZpool_recycle)bind)r   r(   r*   basemetadataZ
create_allr   r+   )r-   r   r   r   r,   3   s   zTable._init_dbc              
   C   sv   z |   }|| j W  d    W S 1 sw   Y  W d S  ty: } ztd|  W Y d }~dS d }~ww )NzError counting rows: r   )r+   queryr)   countr
   print)r-   sessioner   r   r   getNumberOfRow8   s   
(zTable.getNumberOfRowFc              
   C   s   t  jd d }zY|  J}|| jj|d d ur4t  jd d }|| jj|d d us| j||d}|| |rO|	  W d    |W S W d    |W S 1 s[w   Y  |W S  t
y| } ztd|  W Y d }~d S d }~ww )N   r   r   r   zError pushing state: )r   uuid4hexr+   r3   r)   	filter_byfirstaddcommitr
   r5   )r-   inputrA   idr6   newStater7   r   r   r   	pushState@   s,   




zTable.pushStatec              
   C   s   zT|   E}|| jj|d }|d u r!|| j||d n|| jj|djd|idd |rA|  W d    |W S W d    |W S 1 sMw   Y  |W S  tyn } zt	d|  W Y d }~d S d }~ww )Nr:   r;   r   F)Zsynchronize_sessionzError updating state: )
r+   r3   r)   r>   r?   r@   updaterA   r
   r5   )r-   rC   rB   rA   r6   recordr7   r   r   r   updateStateP   s(   
"


zTable.updateStatec              
   C   s   z2|   #}|| jj|d }|r|jW  d    W S W d    W d S 1 s+w   Y  W d S  tyL } ztd|  W Y d }~d S d }~ww )Nr:   zError pulling state: )r+   r3   r)   r>   r?   r   r
   r5   )r-   rC   r6   resultr7   r   r   r   	pullState_   s    
zTable.pullStateNF)	r   r   r   r/   r,   r8   rE   rH   rJ   r   r   r   r   r&   +   s    

r&   c                       s.   e Zd Z fddZdddZdd Z  ZS )	AnnotationTablec                    s   t  |t d| _d S )N   )superr/   r   _expiryDurationr-   r(   	__class__r   r   r/   k   s   
zAnnotationTable.__init__Fc              
   C   s  t  jd d }t  }zZ|  K}|| jj	|d
 d ur:t  jd d }|| jj	|d
 d us#| j|||d}|| |rV|  W d    |W S W d    |W S 1 sbw   Y  |W S  ty } ztd|  W Y d }~d S d }~ww )Nr9   r:   )r   r   r   z Error pushing annotation state: )r   r<   r=   r   nowdater+   r3   r)   r>   r?   r@   rA   r
   r5   )r-   rB   rA   rC   Z	inputDater6   rD   r7   r   r   r   rE   p   s.   




zAnnotationTable.pushStatec              
   C   s   zI|   :}|| jt| jjd }t	 
 }|D ]}||j j| jkr1|| q  |  W d    W dS 1 sBw   Y  W dS  tyc } ztd|  W Y d }~dS d }~ww )N   TzError removing expired state: F)r+   r3   r)   Zorder_byr   r   limitallr   rS   rT   daysrO   deleterA   r
   r5   )r-   r6   resultsrS   rI   r7   r   r   r   removeExpiredState   s$   
$

		z"AnnotationTable.removeExpiredStaterK   )r   r   r   r/   rE   r[   __classcell__r   r   rQ   r   rL   j   s    
rL   c                          e Zd Z fddZ  ZS )MapTablec                       t  |t d S r'   )rN   r/   r   rP   rQ   r   r   r/         zMapTable.__init__r   r   r   r/   r\   r   r   rQ   r   r^          r^   c                       r]   )ScaffoldTablec                    r_   r'   )rN   r/   r    rP   rQ   r   r   r/      r`   zScaffoldTable.__init__ra   r   r   rQ   r   rc      rb   rc   c                       r]   )FeaturedDatasetIdSelectorTablec                    r_   r'   )rN   r/   r"   rP   rQ   r   r   r/      r`   z'FeaturedDatasetIdSelectorTable.__init__ra   r   r   rQ   r   rd      rb   rd   c                       r]   )ProtocolMetricsTablec                    r_   r'   )rN   r/   r$   rP   rQ   r   r   r/      r`   zProtocolMetricsTable.__init__ra   r   r   rQ   r   re      rb   re   )
app.configr   
sqlalchemyr   r   r   r   Zsqlalchemy.dialects.postgresqlr   r   Zsqlalchemy.ext.declarativer	   Zsqlalchemy.excr
   Zsqlalchemy.ormr   r   r   r1   r   r   r    r"   r$   r&   rL   r^   rc   rd   re   r   r   r   r   <module>   s*    ?(