o
    Tj	                  
   @   s   d dl Z d dlmZmZmZmZ d dlmZmZm	Z	m
Z
 h dZdeg ef dedeeef f deeeeef geeef f d	eegef d
ef
ddZdS )    N)AnyCallableDictOptional)	APIRouterDependsHTTPExceptionQuery>   callidsummary	sentimentdb_connauth_user_dependency.auth_user_for_bidto_json_safereturnc                    sl   t  }|dtd dtddddtdddt|fd	td
tt dtdtdtttf f
 fdd}|S )Nz/pca/{bid}/partial)defaultd      i  )r   geler   )r   r   bidfieldslimitoffsetuserc                    s:   | | t |  }td|stddd|r3dd |dD }dd |D }|s2tdd	dntt}d
|vrA|dd
 | d}d	dd |D }	 4}
|

 }|d|f | smtdd| dd|d|	 d| d||f | }W d    n1 sw   Y  d||||t||dS )Nz[A-Za-z0-9_]+i  zInvalid bid)status_codedetailc                 S   s   g | ]
}|  r|  qS  )strip.0fieldr   r   
api_lsq.py
<listcomp>%   s    zOcreate_lsq_router.<locals>.get_bid_level_partial_pca_fields.<locals>.<listcomp>,c                 S   s   g | ]}|t v r|qS r   )ALLOWED_PARTIAL_PCA_FIELDSr    r   r   r#   r$   &   s    zInvalid fields requestedr
   r   _callanalyticsz, c                 s   s    | ]	}d | d V  qdS )`Nr   r    r   r   r#   	<genexpr>1   s    zNcreate_lsq_router.<locals>.get_bid_level_partial_pca_fields.<locals>.<genexpr>zSHOW TABLES LIKE %si  zTable z
 not foundz
                SELECT z
                FROM `zZ`
                ORDER BY callid DESC
                LIMIT %s OFFSET %s
                T)successr   r   r   r   countdata)strr   re	fullmatchr   splitlistr&   insertjoincursorexecutefetchonefetchalllen)r   r   r   r   r   	bid_cleanrequested_fieldsselected_fields
table_namecolumnsconnr4   rowsr   r   r   r   r#    get_bid_level_partial_pca_fields   sL   


	z;create_lsq_router.<locals>.get_bid_level_partial_pca_fields)	r   getr	   r   r-   r   intr   r   )r   r   r   r   routerrA   r   r@   r#   create_lsq_router   s$   

7rE   )r.   typingr   r   r   r   fastapir   r   r   r	   r&   r-   rE   r   r   r   r#   <module>   s    
