403Webshell
Server IP : 65.108.144.40  /  Your IP : 216.73.217.165
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux ubuntu-8gb-hel1-1 5.15.0-173-generic #183-Ubuntu SMP Fri Mar 6 13:29:34 UTC 2026 x86_64
User : dev ( 1000)
PHP Version : 8.2.30
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/erp/horilla_automations/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/erp/horilla_automations/__pycache__/signals.cpython-310.pyc
o

hͦh>�@s�dZddlZddlZddlZddlZddlmZddlmZddl	m
Z
ddlmZddl
mZmZmZddlmZdd	lmZdd
lmZmZe�e�Zedd��Zeede�gZgZd
d�Z dd�Z!dd�Z"dS)z 
horilla_automation/signals.py

�N)�template)�EmailMessage)�models)�QuerySet)�post_delete�	post_save�pre_save)�receiver)�_thread_locals)�post_bulk_update�pre_bulk_updatecCs$||djd�}t|�|_d|_|S)Nr)�model�)�	__class__�list�
_result_cache�_prefetch_related_lookups)�cls�object_list�queryset_like_objectrr�+/var/www/erp/horilla_automations/signals.py�	from_lists
rcs�ddlm}ddlm�m�ddlm�tt�d�tt	�d���fdd���}tt|d�tt	|d���fdd	���}d
d��dd
�������fdd��dd�����fdd������dS)z
    Automation signals
    r)�HorillaMailTemplate)�get_model_class�split_query_string)�MailAutomation��senderc�����dS�z>
        signal method to handle automation post save
        Nr�r�instance�kwargs��start_connection�track_previous_instancerr�automation_signal/�
z+start_automation.<locals>.automation_signalcrrrr r#rr�template_signal8r'z)start_automation.<locals>.template_signalcS�6tD]}tj||jd�tj||jd�qt��dS)z2
        Method to clear signals handlers
        rN)�SIGNAL_HANDLERSr�
disconnect�model_classr�clear��handlerrrr�clear_connectionA�z*start_automation.<locals>.clear_connectioncsF��fdd�}�j�d�}tj|jt�||j|jd�}||_�|_|S)Nc	sX�fdd�}ttdd�}g}|r|�dd�}|�dg�}tj|||�fd�}|��dS)NcsDt|dd�}|rt|�D]\}}||}t|d|�||�qdSdS)N�requestF)�getattr�	enumerate�send_automated_mail)�queryset�previous_queryset_copy�
automationr2�indexr!�previous_instance)�
query_stringsrr�_bulk_update_thread_handlerLs��z�start_automation.<locals>.create_post_bulk_update_handler.<locals>.post_bulk_update_handler.<locals>._bulk_update_thread_handler�previous_bulk_recordr6�
queryset_copy)�target�args)r3r
�get�	threading�Thread�start)	rr6r@r"r<r=r7�previous_queryset�bulk_thread�r8r;rr�post_bulk_update_handlerKs�z[start_automation.<locals>.create_post_bulk_update_handler.<locals>.post_bulk_update_handler�_post_bulk_signal_handler��name�argdefs�closure�	�method_title�types�FunctionType�__code__�globals�__defaults__�__closure__r,r8)r8r,r;rH�	func_namer/rrGr�create_post_bulk_update_handlerJs�	z9start_automation.<locals>.create_post_bulk_update_handlerc	s����jjdd�}|D]E}|j�dd�}�|�}|j}�|���|�|�}t�|�tj|�d��fdd�}|j	�d�}||||�}t�|�t
j||jd�qd	S)
zQ
        Method to start signal connection accordingly to the automation
        T��	is_active�automation_multiple_�rcs$��fdd�}||_�|_�|_|S)NcsXttdd�}ttdd�}d}|r|d}||��||f�tj�fdd�d�}|��dS)ze
                    Signal handler for post-save events of the model instances.
                    r2N�previous_recordr!cst��S�N)r5r�r@rr�<lambda>��zsstart_automation.<locals>.start_connection.<locals>.create_signal_handler.<locals>.signal_handler.<locals>.<lambda>�r?)r3r
rBrCrD)rr!�createdr"r2r\r:�threadrGr^r�signal_handler�s �
�zastart_automation.<locals>.start_connection.<locals>.create_signal_handler.<locals>.signal_handler)�__name__r,r8)rKr8r;rd�r,rGr�create_signal_handler�s
zIstart_automation.<locals>.start_connection.<locals>.create_signal_handler�_signal_handlerN)�objects�filter�condition_querystring�replacer
r*�appendr�connectrOrr,)	�automationsr8rkr;�
model_pathr/rg�handler_name�dynamic_signal_handler)rr0rWrrrfrr$zs0��
�
��z*start_automation.<locals>.start_connectioncsD�fdd�}�j�d�}tj|jt�||j|jd�}||_�|_|S)NcsJttdd�}|r#|��}|��rt�t�t|���}�||d�t_	dSdS)Nr2)r8r6r>)
r3r
�none�countrr�copy�deepcopyrr=)rr6r@r"r2r>�r8rr�pre_bulk_update_handler�s��zYstart_automation.<locals>.create_pre_bulk_update_handler.<locals>.pre_bulk_update_handler�_pre_bulk_signal_handlerrJrN)r8r,rxrVr/rrwr�create_pre_bulk_update_handler�s�	z8start_automation.<locals>.create_pre_bulk_update_handlercs�dd�}|��jjdd�}|D]1���j������}t�|�tj|�d�tt�d����fdd�����_	��_
t���qdS)	zX
        method to add signal to track the automations model previous instances
        cSr))zB
            Method to clear instance handler signals
            rN)�INSTANCE_HANDLERSrr+r,rr-r.rrr� clear_instance_signal_connection�r1z[start_automation.<locals>.track_previous_instance.<locals>.clear_instance_signal_connectionTrXrcsHttdd�}|jr�jj|jd���}|r�|d�t_�j�d��_�S)z]
                Signal handler for pres-save events of the model instances.
                r2N)�id)r8r!�_instance_handler)	r3r
�pkrirj�firstr\rOre)rr!r"r2�r8�instance_handlerr,rrr��s�
�zKstart_automation.<locals>.track_previous_instance.<locals>.instance_handlerN)rirjr
r{rmrrnr	rr,r8)r|ror/)rrzrr�rr%�s	



�z1start_automation.<locals>.track_previous_instanceN)
�base.modelsr�#horilla_automations.methods.methodsrr�horilla_automations.modelsrr	rr)rr&r(r)rr0rWrzrrr$r%r�start_automation's 



	0?0
r�cCs�ddlm}m}ddlm}d}	d}
d}g}g}
|D]�}|�d�r�|�d�d}|�d�d}|�d�d}|dkr=d	}n|d
krCd}|||�}|||�}t|dd�rjt|tj	�rjt
t|dd��}t
t|dd��}nt|t�r�t|j
dd	d��}t|j
dd	d��}|�|�|
�|�|�d
�s�||||�}	|�d
�}|r�|||	||||��}	|	s�d	}|dkr�d	}
|r�|
r�d}	nq|	r�|r�|jdkr�t|||�dS|jdkr�t|
�t|�kr�t|||�dSdSdSdS)Nr)�evaluate_condition�operator_map��getattributeF�	condition���onT�offr)�flat�logic�and�	on_create�	on_update)r�r�r��3horilla_views.templatetags.generic_template_filtersr��getlistr3�
isinstancer�Model�strrr�values_listrmrA�trigger�	send_mail�set)r2rbr8r;r!r:r�r�r��
applicable�
and_exists�false_exists�instance_values�previous_instance_valuesr��attr�operator�value�instance_value�previous_instance_valuer�rrrr5sr


�
�
�




��
�r5c"
s�ddlm}ddlm}m}ddlm}m}ddlm	}|j
}	|||j�}
||j�}|||j�}|j
j|
d���}g}
||j�D]}|||�}t|t�rQ|
|}
q@|
�|�q@ttd|
��}
|
dd�}|
dd�}z|j�d	���}|��r�|�d
d�|D��Wnty�}zt�|�WYd}~nd}~ww|�}|j}|r�z|jj���d|jjj �d
�}|}|g}Wn	t�t�Y|�rP|�rR|
�rTg}z|jj}Wnd}Y|j!��D]$}t"�#|j$�}t"�%||d��}|�&|�}|�d||iddd�j'df�q�t"�#|	j$�}t"�%|||d��}|�&|�}t"�#|j(�}t"�%||d��}|�&|�} t)| |||||d��d�_*|�_+dd��t,j-��fdd�d�}!|!�.�dSdSdSdS)z
    mail sending method
    r)�ConfiguredEmailBackend)�
eval_validate�generate_pdf)r�get_related_field_modelr�)rNr��employee_work_infocss$�|]
}|��rt|���VqdSr])�get_mailr�)�.0�employeerrr�	<genexpr>vs��

�zsend_mail.<locals>.<genexpr>z <�>)r!�self�DocumentF)�path�titlezapplication/pdf)r!r��model_instance)�subject�body�to�cc�
from_email�reply_to�htmlc
Ss@z|��WdSty}zt�|�WYd}~dSd}~wwr])�send�	Exception�logger�error)�email�errr�
_send_mail�s��zsend_mail.<locals>._send_mailcs���Sr]rr�r�r�rrr_�r`zsend_mail.<locals>.<lambda>ra)/�
base.backendsr��base.methodsr�r�r�rr�r�r��
mail_template�mail_detailsr
rirjr��mail_tor�rrm�also_sent_to�select_related�all�exists�extendr�r�r��$dynamic_from_email_with_display_name�user�employee_get�
get_full_namer��template_attachmentsr�Templater��Context�render�contentr�r�content_subtype�attachmentsrBrCrD)"r2r8r!r�r�r�rr�r�r�rr,�mail_to_instance�tos�mapping�resultr�r�r�r��
email_backend�display_email_namer�r�r�r�template_attachment�template_bdy�context�
render_bdy�title_template�
title_context�render_titlercrr�rr�Us�


��
����

��
�

���r�)#�__doc__ru�loggingrBrP�djangor�django.core.mailr�	django.dbr�django.db.models.queryr�django.db.models.signalsrrr�django.dispatchr	�horilla.horilla_middlewaresr
�horilla.signalsrr�	getLoggerrer��classmethodr�setattrr*r{r�r5r�rrrr�<module>s.

eJ

Youez - 2016 - github.com/yon3zu
LinuXploit