
    si'                     x    d Z ddlmZ ddlmZmZmZ ddlmZm	Z	m
Z
 dZddZd ZddZd	 Zdd
Zdg ddgdiZy)z*
horilla_automation/recursive_relation.py
    )apps)
ForeignKeyManyToManyFieldOneToOneField)ManyToManyRelManyToOneRelOneToOneRel   c                 H    g fd | dt               d       S )Nc                    |kD  s| |v st        |       ry |j                  |        | j                  j                         D ]  }|j                  s|j
                  sm|j                  }|rt        |      r7|r| d|j                   n|j                  }|
k(  r	j                  |       m |||j                         |dz          t        |t              s|j                  }|rt        |      r|j                         }|r| d| n|}|
k(  r	j                  |        |||j                         |dz           y N__   )is_history_modeladd_meta
get_fieldsis_relationauto_createdrelated_modelnameappendcopy
isinstanceForeignObjectRelget_accessor_name)modelpathvisited_modelsdepthfieldr   new_pathaccessor_name	max_depthrelation_pathstarget_modelwalks           R/var/www/python-projects/worksol/horilla_automations/methods/recursive_relation.pyr'   z$get_all_relation_paths.<locals>.walk   sA   9 7;KE;R5![[++- 	TE$$ %% % 3 3$(8(G6:dV2ejj\2

 L0"))(3.2E2E2GQRS E#34 % 3 3$(8(G % 7 7 99=dV2m_5= L0"))(3.2E2E2GQRS7	T     r   set)source_modelr&   r$   r%   r'   s    ``@@r(   get_all_relation_pathsr.      s'    N!TF 	r35!$r)   c                     | j                   j                  j                  d      xsD | j                   j                  dk(  xs) | j                  j                         j                  d      S N_historysimple_historyhistoryr   
model_nameendswith	app_label__name__lowerr   s    r(   r   r   <   W    ''
3 	6;;  $44	6>>!**95r)   c                     g t               fd | dt               d       g }t        d       D ](  t        fd|D              r|j                         * |S )Nc                    |
kD  s| |v ry || hz  }| j                   j                         D ]  }|j                  rt        |t              r t        |dd       }t        |dd       }|=|j                  r|j                  s|j                         }n|j                  }t        d       t        |       t        |       |r| d| n|}|k(  r#j                  |       	j                  |       |dz   
k  s ||||dz           y )Nremote_fieldr   z>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>r   r   )r   r   r   r   r   getattrr   concreter   r   printr   r   )r   r   r   r    r!   remoter   accessorr"   	all_pathsr$   resultsr&   r'   s            r(   r'   z'get_simple_relation_paths.<locals>.walkH   s   9 7'5'1[[++- 	IE$$
5/(J UND9F#FGT:M$ !!%.. 224 ::23(O%L04$r(,(H,x(h'Y&]HneaiH5	Ir)   r*   r   c                 $    | j                  d      S )Nr   )count)ps    r(   <lambda>z+get_simple_relation_paths.<locals>.<lambda>n   s    aggdm r)   )keyc              3   T   K   | ]  }|k7  xr j                  |d z          ! yw)r   N)
startswith).0otherr   s     r(   	<genexpr>z,get_simple_relation_paths.<locals>.<genexpr>o   s/      
@EDEM;dooedl;;
s   %()r,   sortedanyr   )r-   r&   r$   unique_pathsrD   r   rE   r'   s    `` @@@@r(   get_simple_relation_pathsrS   D   sy    GI I  ID 	r35!$ Lw$;< & 
IU
 
 %	& r)   c                     | j                   j                  j                  d      xsD | j                   j                  dk(  xs) | j                  j                         j                  d      S r0   r4   r:   s    r(   r   r   w   r;   r)   c                 T    g g fd | dt               d       fS )z
    Recursively find forward relation paths from source_model to target_model,
    separating ForeignKey and ManyToManyField paths, excluding history models.
    c                    |	kD  s| |v st        |       ry |j                  |        | j                  j                         D ]  }|j                  r|j
                  r|j                  }|rt        |      r6|r| d|j                   n|j                  }|
k(  r4|j                  rj                  ||f       zj                  ||f        |||j                         |dz           y r   )r   r   r   r   r   r   r   r   many_to_manyr   r   )r   r   r   r    r!   r   r"   fk_paths	m2m_pathsr$   r&   r'   s          r(   r'   z2get_forward_relation_paths_separated.<locals>.walk   s    9 7;KE;R5![[++- 	PE$$(:(:!//M $4]$C26$r%**.EJJH,%%$$h%67OOXu$56]Hn.A.A.CUQYO!	Pr)   r*   r   r+   )r-   r&   r$   rX   rY   r'   s    ``@@@r(   $get_forward_relation_paths_separatedrZ      s8    
 HIP P0 	r35!$Yr)   zpms.models.EmployeeKeyResult))-employee_objective_id__employee_id__get_emailzEmployee's mail)Vemployee_objective_id__employee_id__employee_work_inf__reporting_manager_id__get_emailzReporting manager's mail)8employee_objective_id__objective_id__managers__get_emailzObjective manager's mail)"employee_objective_id__employee_idEmployee)mail_tomail_instanceN)   )__doc__django.appsr   django.db.models.fields.relatedr   r   r   'django.db.models.fields.reverse_relatedr   r   r	   	MAX_DEPTHr.   r   rS   rZ   _a r)   r(   <module>rj      sb     V V  	'T0f!J #

 ?
%r)   