o
    pj                     @  s   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZmZ ed
Zdddd!ddZd"ddZd#dd ZdS )$z:Request context builder for the SaaS gateway runtime flow.    )annotations)Path)uuid4)Request)select)Session)get_control_plane_engine)	TenantAppTenantLimitz/var/www/html/flask_serverN)app_iduser_idrequestr   tenant_datadict[str, str]r   
str | Noner   returndict[str, object]c                C  s0  | j dpd ptt }|pd }|std|pd p"d}|dp0|dp0|d }td d	 | }td
 d	 | }t }t|dd}	t	|	|d |d}
t
|	|d |d}W d   n1 sgw   Y  z
| jddpti }W n ty   i }Y nw |||dpdt|t||||
||d
S )z?Build a normalized request context for downstream app handlers.zX-Request-ID zMissing app identifierNstorage_keyslug	tenant_idstoragetenantslogsT)future)r   r   )silentdb_name)

request_idtenantdbr   r   r   r   limits
app_configpayload)headersgetstripstrr   
ValueErrorBASE_DIRr   r   _load_limits_load_app_configget_json	Exception)r   r   r   r   r   
tenant_keystorage_path	logs_pathenginesessionr    r!   r"    r2   E/var/www/html/flask_server/bridge_platform/gateway/request_context.pybuild_request_context   s:   r4   r1   r   r   r&   dict[str, dict[str, object]]c                C  sd   t ttj|k}| |  }i }|D ]}|jd |fvr!q|j|j	|j
|jd||j< q|S )N)limit_valuewindow_secondsoverage_policyr   )r   r
   wherer   executescalarsallr   r6   r7   r8   
limit_name)r1   r   r   stmtrecordsscopedrecordr2   r2   r3   r)   =   s   r)   c                C  sV   t ttj|ktj|kd}| | }|d u r ddiS t|j	|j
p(i dS )N   enabledF)rC   config)r   r	   r9   r   r   limitr:   scalar_one_or_nonebool
is_enabledconfig_json)r1   r   r   r>   rA   r2   r2   r3   r*   N   s   r*   )
r   r   r   r   r   r   r   r   r   r   )r1   r   r   r&   r   r&   r   r5   )r1   r   r   r&   r   r&   r   r   )__doc__
__future__r   pathlibr   uuidr   flaskr   
sqlalchemyr   sqlalchemy.ormr   config.control_planer   bridge_platform.tenants.modelsr	   r
   r(   r4   r)   r*   r2   r2   r2   r3   <module>   s    
*