o
    "i$                     @   sj   d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
mZ G dd deee
ef ZeeZdS )	    )Optional)Session)CRUDBase)	DataModelDataModelField)DataModelCreateDataModelUpdatec                   @   s~   e Zd Zdededee fddZdededee fddZ	d	d
dede
dededef
ddZdedededefddZd	S )CRUDDataModeldbidreturnc                C   s   | j ||dS )z5Alias for delete() method for backward compatibility.)r   )delete)selfr
   r    r   ;/lsinfo/ai/hellotax_ai/base_platform/app/crud/data_model.pyremove	   s   zCRUDDataModel.removekeyc                C   s   | ttj|k S )N)queryr   filterr   first)r   r
   r   r   r   r   
get_by_key   s   zCRUDDataModel.get_by_keyN)	tenant_idobj_in
created_byr   c          	      C   s   |j dhd}||d< ||d< tdi |}|| |  |jD ]}tdi |  d|ji}|| q"|  || |S )Nfieldsexcluder   r   model_idr   )	dictr   addflushr   r   r   commitrefresh)	r   r
   r   r   r   
model_datadb_model
field_datafieldr   r   r   create_with_fields   s   


z CRUDDataModel.create_with_fieldsdb_objc                C   s   |j ddhd}| D ]
\}}t||| q|jd urF|ttj|jk	  |jD ]}tdi |j dhdd|ji}|
| q-|  || |S )NTr   )exclude_unsetr   r   r   r   r   )r   itemssetattrr   r   r   r   r   r   r   r   r!   r"   )r   r
   r(   r   update_datar&   valuer%   r   r   r   update_with_fields'   s$   




z CRUDDataModel.update_with_fields)__name__
__module____qualname__r   intr   r   r   strr   r   r'   r   r.   r   r   r   r   r	      s0    	
r	   N)typingr   sqlalchemy.ormr   app.crud.baser   app.models.data_modelr   r   app.schemas.data_modelr   r   r	   data_model_crudr   r   r   r   <module>   s    <