
    Xj4              
          d dl mZ d dlmZmZmZmZ 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 d dlmZmZmZ d d	lmZ  ee          Z ed
g          ZdedededefdZe                    de           ee
           e ed                    fdededefd            Ze                     de           ee
           e ed                    fdedededefd            Z!e"                    dej#                   ee
           e ed                    fdedededefd            Z$dS )    )Any)	APIRouterDependsHTTPExceptionstatus)Session)get_db)require_update)document_metadata_valuemetadata_field)KnowledgeDocumentUser)DocumentMetadataResponseDocumentMetadataUpdateDocumentMetadataValueResponse)
get_loggerzdocument-metadata)tagsdbdocument_idcurrent_userreturnc                 F   |                      t                                        t          j        |k                                              }|st          t          j        d          |j        dk    r+|j	        |j        k    rt          t          j
        d          |S )NzDocument not foundstatus_codedetailcustomer_userz%No permission to access this document)queryr   filteridfirstr   r   HTTP_404_NOT_FOUNDrole	author_idHTTP_403_FORBIDDEN)r   r   r   docs       N/lsinfo/ai/hellotax_ai/base_platform/app/api/v1/knowledge/document_metadata.pycheck_document_accessr'      s    
(($
%
%
,
,->-A[-P
Q
Q
W
W
Y
YC `(AJ^____O++0P0P1:a
 
 
 	
 J    z!/documents/{document_id}/metadata)response_modelknowledge_basesc                    t          || |          }|j        st          t          j        d          ddlm} |                    |                              |j	        |j        k              
                                }|r|j        st          t          j        d          g }ddlm} |                    |                              |j	        |j        k              
                                }t          dddd	d |j        d
d
          t          dddd	d |r|j        ndd
d
          t          ddddd |j        r|j                            d          nd d
d
          t          ddddd |j        r|j                            d          nd d
d
          t          dddd	d |j        d
d
          g}	|                    |	           t-          j        ||j                  }
t1          j        ||           }d |D             }|
D ]]}|                    t          |j	        |j        |j        |j        |j        |                    |j	                  dd                     ^tA          | |          S )N"Document must belong to a categoryr   r   KnowledgeCategory1Document category must belong to a knowledge base)r   zDocument Namedocument_nametextT)field_id
field_name	field_key
field_typefield_optionsvalue	is_systemis_readonlyUploaderuploaderUnknownzUpload Dateupload_datedatez%Y-%m-%dzLast Update Datelast_update_dateSourcesourceknowledge_base_id)r   c                 (    i | ]}|j         |j        S  )r2   r7   ).0vs     r&   
<dictcomp>z)get_document_metadata.<locals>.<dictcomp>o   s    555QW555r(   Fr   metadata)!r'   category_idr   r   HTTP_400_BAD_REQUEST
app.modelsr.   r   r   r   r    rC   r   r#   r   titlename
created_atstrftime
updated_atrA   extendr   get_by_knowledge_baser   get_by_documentappendr3   r4   r5   r6   getr   )r   r   r   r%   r.   categorymetadata_listr   authorsystem_fieldsfieldsvalues	value_mapfields                 r&   get_document_metadatar`   !   s     K
>
>C? 
3<`
 
 
 	
 -,,,,,xx)**112C2F#/2YZZ``bbH 
85 
3F
 
 
 	
 MXXd^^""47cm#;<<BBDDF%&%)		
 		
 		
 	&! !'6&++Y		
 		
 		
 	&$#9<Q#.))*555T		
 		
 		
 	&)(9<Q#.))*555T		
 		
 		
 	&*		
 		
 		
S3Mh '''1"HbcccF$4R[QQQF55f555I 
 
) +/ +#1mmEH--!	 	 		
 	
 	
 	
 $mTTTTr(   metadata_inc                 X   t          || |          }|j        st          t          j        d          ddlm} |                    |                              |j	        |j        k              
                                }|r|j        st          t          j        d          t          j        ||j                  }d |D             }i }	|j                                        D ]\  }
}|
|vrt          t          j        d|
           ||
         }||d	k    rd |	|j	        <   B|j        d
k    r7t#          |t$                    r"dd l}|                    |          |	|j	        <   t+          |          |	|j	        <   t-          j        || |	           t1          | ||          S )Nr,   r   r   r-   r/   rB   c                     i | ]
}|j         |S rE   )r4   )rF   fs     r&   rH   z,update_document_metadata.<locals>.<dictcomp>   s    000Aa000r(   zUnknown field key:  multiselectrI   )r'   rK   r   r   rL   rM   r.   r   r   r   r    rC   r   rT   rJ   itemsr5   
isinstancelistjsondumpsstrr   batch_update_document_metadatar`   )r   ra   r   r   r%   r.   rX   r\   	field_mapmetadata_by_idr4   r7   r_   rj   s                 r&   update_document_metadatarp      s     K
>
>C? 
3<`
 
 
 	
 -,,,,,xx)**112C2F#/2YZZ``bbH 
85 
3F
 
 
 	
 1"HbcccF00000I%'N'06688 2 2	5I%%"7@aV_@a@a    )$=ERKK'+N58$$..:eT3J3J.KKK'+zz%'8'8N58$$'*5zzN58$$:
n    !b,???r(   z,/documents/{document_id}/metadata/{field_id})r   r2   c                     t          || |           t          j        ||          }|st          t          j        d          t          j        || |          }|st          t          j        d          d S )N)r   zMetadata field not foundr   )r   r2   zMetadata value not found)r'   r   rW   r   r   r!   r   delete_by_document_and_field)r   r2   r   r   r_   deleteds         r&   delete_document_metadata_valuert      s     "k<888rh///E 
1:T
 
 
 	
 &B
h  G  
1:T
 
 
 	
 4r(   N)%typingr   fastapir   r   r   r   sqlalchemy.ormr   app.api.depsr	   app.api.permissionsr
   app.crud.metadatar   r   rM   r   r   app.schemas.metadatar   r   r   common_loggingr   __name__loggerrouterintr'   rW   r`   putrp   deleteHTTP_204_NO_CONTENTrt   rE   r(   r&   <module>r      s         = = = = = = = = = = = = " " " " " "       . . . . . . E E E E E E E E . . . . . . . .         
 & % % % % %	H			,-	.	.	.g C t Pa     /@XYY '&// 0A!B!BCC[U [U[U[U [U [U [U ZY[U| /@XYY '&// 0A!B!BCC	'@ '@'@''@ 	'@ 	'@ '@ '@ ZY'@T 2@Z    '&// 0A!B!BCC	  	 	     r(   