
    th                     t    d dl Z d dlmZ d dlZd dl d dlZd dlmZ d dl	m
Z
  G d de
j                        Zy)    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        |   |i |}t        j                  rQ|j                  t        j
                  j                  k7  r*t        j                  d| dt        j
                          y |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|     gk4*6* %%vv//222rsvrww{|}  }S  }S  |T  U  V 
    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8r   c                 &     | j                   |i |S r!   )get_metar#   s      r   public_get_metazCmfPublicMixin.public_get_meta3   s    s||T,V,,r   c                 t    t         t        |          }|D cg c]  }t        |t              s| c}S c c}w r!   )r   r   _get_node_models
issubclass)r   _modelsmodelr   s      r   r)   zCmfPublicMixin._get_node_models7   s/    =?#*P%j.OPPPs   55c                 *   g ddd|gg}t               }g d}t        t              |j                  d      d      j	                  ||      }|sg S |}g }	|r|	j                  |j                  j                         t        t        |j                  j                        t              sn|j                  j                  snr|j                  j                  }|j                  |       |	|j                  j                  D 
cg c]%  }
t        |
d      s|
j                  j                  ' c}
z  }	|rt        |d      rH|	|j                  j                  D 
cg c]%  }
t        |
d      s|
j                  j                  ' c}
z  }	d	d
d|	gdd|	ggg dg}| j!                         D ]1  }|j"                  }|j	                  |      }|r||   |g||<   -|||<   3  | j$                  d|dd|}| j'                  ||j                        S c c}
w c c}
w )u]   
        Прогружаем дерево снизу вверх от обьекта
        	is_public==Tr   r0   )tree_parentr/   ztree_parent.is_public
tree_nodes:r   )filterfieldsr2   ORr	   INT)filtersfilter_project )dictvarsmodelssplitr   appendr   valuer*   typer1   r   r/   load_fieldsr2   hasattrr)   
class_name_get_tree_data_create_tree)r   obj_idr   r   
obj_filterr8   r5   r   r   
parents_idnodeparent_filterr,   
model_namemodel_filter	tree_datas                   r   get_public_obj_treez"CmfPublicMixin.get_public_obj_tree<   s   
 0$f1EF
&T6l6<<,Q/044Jv4VI
fiioo.d6#5#5#;#;<nM%%//''--Fv&V5F5F5L5LlTPWX\^jPk477==llJ  3%S^^5I5IiTWUY[gMh477==iiJ!14 DtTS]F^_24))+ 	4E))J";;z2L'.z':M&J
#&3
#	4 'C&&VwtVvV		69955 m js   HHH*Hc                     t               }| j                         D ]   }|j                  }ddd|gdd|ggg dg||<   " t        |   ||fd|i|S )uj   
        Строим одну ветвь
        Для подгрузки вниз дерева
        r6   r	   r0   r   r.   r8   )r;   r)   rD   r   get_tree_leaf)r   r	   project_typer   r8   r,   rL   r   s          r   get_public_tree_leafz#CmfPublicMixin.get_public_tree_leafd   sy     &))+ 	>E))J$(+;T>*RUY[_aoTp#q#<#>GJ	> w$^\]7]V\]]r   c                 (    t         |          dgz   S )Nr/   )r   save_preload_fields)selfr   s    r   rU   z"CmfPublicMixin.save_preload_fields   s    w*,}<<r   c                 ,    t        t        | 
  |i | y)uR   
        Отправляем событие в публичный апи
        N)r   r   emitr/   loadoldr   r   	emit_listr   r@   )rV   r   r   r[   bodyr   s        r   rX   zCmfPublicMixin.emit   s     	nd($9&9r   )project)__name__
__module____qualname__tree_fieldsclassmethodr   r$   r'   r)   rO   rS   rU   rX   __classcell__)r   s   @r   r   r      s    K  . 9 9 - - Q Q %6 %6N 
^ 
^`=   r   r   )bisect	itertoolsr   hashlibcmf.include
cmf.fieldscmf
cmf.modelsr   common.fieldsr   r   r:   r   r   <module>rl      s/           *Z %44 Z r   