
    bEfs                     p    d dl Z d dlmZ d dlZd dlT d dlZd dlmZ d dl	m
Z
  G d de
j                  ZdS )    N)chain)*)	BaseModel)cmf_public_mixinc                        e Zd Zg dZe fd            Zed             Zed             Ze fd            Zed             Z	ed fd	            Z
 fd	Z fd
Z xZS )CmfPublicMixin)tree_parent_idordernonamesys_typehas_tree_nodestree_hiddenparentc                      t                      j        |i |}t          j        rF|j        t          j        j        k    r,t                              d| dt          j                    d S |S )NuX   В public_get share api попытались запросить чужой объект z != )supergetgsharelink_access_requestidsharelink_access_objdebug)clsargskwargsobj	__class__s       #./common/models/cmf_public_mixin.py
public_getzCmfPublicMixin.public_get   s     eggk4*6** % 	v/222  Usv  U  U|}  }S  U  U  V  V  V t
    c                      | j         |i |S N)get_approved_versionr   r   r   s      r   public_get_approved_versionz*CmfPublicMixin.public_get_approved_version.   s     (s'8888r   c                      | j         |i |S r!   )get_metar#   s      r   public_get_metazCmfPublicMixin.public_get_meta3   s    s|T,V,,,r   c                 j    t          t          |                                           }d |D             S )Nc                 <    g | ]}t          |t                    |S  )
issubclassr   ).0models     r   
<listcomp>z3CmfPublicMixin._get_node_models.<locals>.<listcomp>:   s'    PPP%j.O.OPPPPr   )r   r   _get_node_models)r   _modelsr   s     r   r/   zCmfPublicMixin._get_node_models7   s2    ,,==??PP7PPPPr   c                 \   g ddd|gg}t                      }g d}t          t                    |                    d          d                                      ||          }|sg S |}g }	|r|	                    |j        j                   t          t          |j
        j                  t                    snI|j
        j        sn<|j
        j        }|                    |           |	d |j        j        D             z  }	|t          |d	          r|	d
 |j        j        D             z  }	ddd|	gdd|	ggg dg}
|                                 D ]3}|j        }|                    |          }|r||         |
g||<   .|
||<   4 | j        d|dd|}|                     ||j                  S )u]   
        Прогружаем дерево снизу вверх от обьекта
        	is_public==Tr   r4   )tree_parentr3   ztree_parent.is_public
tree_nodes:r   )filterfieldsc                 F    g | ]}t          |d           |j        j        S r6   hasattrr   valuer,   nodes     r   r.   z6CmfPublicMixin.get_public_obj_tree.<locals>.<listcomp>S   s.    lllTPWX\^jPkPkl47=lllr   r6   c                 F    g | ]}t          |d           |j        j        S r;   r<   r?   s     r   r.   z6CmfPublicMixin.get_public_obj_tree.<locals>.<listcomp>V   s-    iiiTWUY[gMhMhi47=iiir   ORr	   INT)filtersfilter_projectr*   )dictvarsmodelssplitr   appendr   r>   r+   typer5   r   r3   load_fieldsr6   r=   r/   
class_name_get_tree_data_create_tree)r   obj_idr   r   
obj_filterrD   r9   r   r   
parents_idparent_filterr-   
model_namemodel_filter	tree_datas                  r   get_public_obj_treez"CmfPublicMixin.get_public_obj_tree<   s   
 0//$f1EF
&&TTT6ll6<<,,Q/044Jv4VV 	I
 		mfio...d6#5#;<<nMM %/ '-Fv&&&llV5F5LllllJ  		m 3%% 	jiiS^5IiiiiJ!14 DtTS]F^_2224))++ 	4 	4E)J";;z22L 4'.z':M&J
##&3
##&C&VwtVVvVV		69555r   projectc                     t                      }|                                 D ]}|j        }ddd|gdd|ggg dg||<    t                      j        ||fd|i|S )uj   
        Строим одну ветвь
        Для подгрузки вниз дерева
        rB   r	   r4   r   r2   rD   )rF   r/   rM   r   get_tree_leaf)r   r	   project_typer   rD   r-   rT   r   s          r   get_public_tree_leafz#CmfPublicMixin.get_public_tree_leafd   s     &&))++ 	> 	>E)J$(+;T>*RUY[_aoTp#q#<#<#<#>GJ$uww$^\]]7]V\]]]r   c                 L    t                                                      dgz   S )Nr3   )r   save_preload_fields)selfr   s    r   r^   z"CmfPublicMixin.save_preload_fields   s     ww**,,}<<r   c                 2    t          t          |           j        |i | | j                                        s| j        j        rPt                              d          }|si }i t          _        |                    | j	        j
                  }d|d<   dS dS )uR   
        Отправляем событие в публичный апи
        	emit_listNroom)r   r   emitr3   loadoldr   r   ra   r   r>   )r_   r   r   ra   bodyr   s        r   rc   zCmfPublicMixin.emit   s     	)nd##($9&999>   	 DN$6 	 k**I !	 ==//DDLLL	  	 r   )rX   )__name__
__module____qualname__tree_fieldsclassmethodr   r$   r'   r/   rW   r\   r^   rc   __classcell__)r   s   @r   r   r      s4         K     [. 9 9 [9 - - [- Q Q Q Q [Q %6 %6 [%6N 
^ 
^ 
^ 
^ 
^ [
^`= = = = =                 r   r   )bisect	itertoolsr   hashlibcmf.include
cmf.fieldscmf
cmf.modelsr   common.fieldsr   r   r*   r   r   <module>ru      s                                * * * * * *X  X  X  X  X %4 X  X  X  X  X r   