
    Xj                     $   d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ  ee          Z	 dded	ed
edededee         fdZ	 dded	ed
edededee         fdZdeded	edefdZddedededefdZddededeeeef                  fdZdS )    )Any)func)Session)DocumentTagKnowledgeCategoryKnowledgeTag)
get_logger
   Ndb	parent_id	max_depth_current_depth_visitedreturnc           
         |t                      }||k    r#t                              d| d|            |gS ||v rt                              d|            g S |                    |           |g}|                     t
                                        t
          j        |k                                              }|D ]0}|	                    t          | |j        ||dz   |                     1|S )NMax recursion depth z reached for category z)Circular reference detected for category    )setloggerwarningaddqueryr   filterr   allextendget_all_child_category_idsidr   r   r   r   r   	child_idschildrenchilds           D/lsinfo/ai/hellotax_ai/base_platform/app/api/v1/knowledge/helpers.pyr   r      s    55""ZiZZyZZ[[[{HN9NNOOO	LLIxx)**112C2MQZ2Z[[__aaH 
 
&r58YQR@RT\]]	
 	
 	
 	
     c           
         |t                      }||k    r#t                              d| d|            |gS ||v rt                              d|            g S |                    |           |g}|                     t
                                        t
          j        |k                                              }|D ]0}|	                    t          | |j        ||dz   |                     1|S )Nr   z reached for tag z$Circular reference detected for tag r   )r   r   r   r   r   r   r   r   r   r   get_all_child_tag_idsr   r   s           r"   r%   r%   #   s    55""UiUU)UUVVV{HIiIIJJJ	LLIxx%%,,\-Cy-PQQUUWWH 
 
!"eh	>A;MxXX	
 	
 	
 	
 r#   tag_idc                 J    |dS ||k    rdS t          | |          }||v rdS dS )NTF)r%   )r   r&   r   r   s       r"   validate_tag_parentr(   8   sA    tu%b&11IIu4r#   Finclude_childrenc                    |rt          | |          }|                     t          j        t          j        t
          j                                                          t
          j        	                    |                    
                                }nd|                     t          j        t
          j                                                t
          j        |k              
                                }|pdS )Nr   )r%   r   r   countdistinctr   document_idr   r&   in_scalar)r   r&   r)   tag_idsr+   s        r"   get_tag_document_countr1   C   s     
'F33HHTZk.E F FGGHHVK&**73344VXX 	 HHTZ 78899VK&&011VXX 	
 :Ar#   knowledge_base_idc                 h   |                      t                                        t          j        t          j                                                  }i }|D ]o}|j        |j        |j        |j        |j	        |j
        |j        |j        |j        nd|j        t          | |j        d          |j        |j        g d||j        <   pg }|D ]d}|j        !|                    ||j                            *|j        |v r1||j                 d                             ||j                            e|S )Nr   F)r)   )r   namer   descriptioniconcolorkeywords
sort_orderstatusdocument_count
created_at
updated_atr    r    )r   r   order_byr9   r   r   r4   r   r5   r6   r7   r8   r:   r1   r<   r=   append)r   r2   tagstag_dicttag	root_tagss         r"   build_tag_treerD   T   s1   88L!!**<+BLOTTXXZZDH 
 
&H?HY,/N,F#..Aj4RRWXXX..
 
 I I I= Xcf-....]h&&S]#J/66x7GHHHr#   )r
   r   N)F)N)typingr   
sqlalchemyr   sqlalchemy.ormr   
app.modelsr   r   r   common_loggingr	   __name__r   intr   listr   r%   boolr(   r1   dictstrrD    r#   r"   <module>rQ      s               " " " " " " C C C C C C C C C C % % % % % %	H		
 `d ,/FIY\	#Y   , `d ,/FIY\	#Y   *G S S T     w  t X[    " w 3 $tCQTH~BV      r#   