https://t.me/RX1948
Server : Apache
System : Linux iad1-shared-b8-43 6.6.49-grsec-jammy+ #10 SMP Thu Sep 12 23:23:08 UTC 2024 x86_64
User : dh_edsupp ( 6597262)
PHP Version : 8.2.26
Disable Function : NONE
Directory :  /lib/python3/dist-packages/trac/ticket/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //lib/python3/dist-packages/trac/ticket/__pycache__/notification.cpython-310.pyc
o

�k�`�{�@s�ddlZddlmZddlmZddlTddlTddlmZm	Z	m
Z
mZmZddl
mZmZmZmZmZddlmZddlmZdd	lmZdd
lmZmZddlmZddlmZm Z dd
l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'ddl(m)Z)ddl*m+Z+Gdd�de,�Z-Gdd�de�Z.Gdd�de�Z/Gdd�de,�Z0Gdd�de,�Z1Gdd�de,�Z2Gdd�de,�Z3Gdd�de,�Z4Gd d!�d!e,�Z5Gd"d#�d#e,�Z6Gd$d%�d%e,�Z7d&d'�Z8d(d)�Z9d*d+�Z:dS),�N)�IEnvironmentSetupParticipant)�IAttachmentChangeListener)�*)�IEmailDecorator�INotificationFormatter�INotificationSubscriber�NotificationEvent�NotificationSystem)�RecipientMatcher�create_message_id�get_from_author�get_message_addresses�
set_header)�Subscription)�PermissionSystem)�translation_deactivated)�Ticket�sort_tickets_by_priority)�lazy)�format_date_or_datetime�get_timezone)�CRLF�exception_to_unicode�jinja2template�shorten_line�
text_width�wrap��_)�Chromec@s,eZdZee�dd�Zdd�Zdd�ZdS)�TicketNotificationSystemcCsPd}||jvr&|j�|dd�|j�|dd�|j�|dd�|j��dSdS)Nznotification-subscriber�always_notify_cc�CarbonCopySubscriber�always_notify_updater�TicketUpdaterSubscriber�always_notify_previous_updater� TicketPreviousUpdatersSubscriber)�config�set�save)�self�section�r,�:/usr/lib/python3/dist-packages/trac/ticket/notification.py�environment_created/s

�
�
��z,TicketNotificationSystem.environment_createdcC�dS�NFr,�r*r,r,r-�environment_needs_upgrade:�z2TicketNotificationSystem.environment_needs_upgradecC�dS�Nr,r1r,r,r-�upgrade_environment=r3z,TicketNotificationSystem.upgrade_environmentN)�__name__�
__module__�__qualname__�
implementsrr.r2r6r,r,r,r-r +s
r cs&eZdZdZ		d�fdd�	Z�ZS)�TicketChangeEventz.Represent a ticket change `NotificationEvent`.NcsJt��d||||�||_|dur|dur|j|d�}|pi|_||_dS)N�ticket)�cdate)�super�__init__�comment�
get_change�changes�
attachment)r*�category�target�time�authorr@rBrC��	__class__r,r-r?Ds�

zTicketChangeEvent.__init__)NNN)r7r8r9�__doc__r?�
__classcell__r,r,rHr-r;As
�r;cs(eZdZdZ�fdd�Zdd�Z�ZS)�BatchTicketChangeEventz4Represent a ticket batch modify `NotificationEvent`.cs*t��dd|||�||_||_||_dS)Nr<�batchmodify)r>r?r@�
new_values�action)r*�targetsrFrGr@rNrOrHr,r-r?Rs
�
zBatchTicketChangeEvent.__init__ccs4�|jD]}t||�}td||j|j|j�VqdS)N�changed)rErr;rFrGr@)r*�env�id�modelr,r,r-�get_ticket_change_eventsYs�

��z/BatchTicketChangeEvent.get_ticket_change_events)r7r8r9rJr?rUrKr,r,rHr-rLOsrLc@s�eZdZdZeee�dZe�	d�Z
edddd�Zeddd	d
�Z
edddd
�Zedd��Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd3d/d0�Z d1d2�Z!d.S)4�TicketFormatterz)Format `TicketChangeEvent` notifications.�Kz[;\s,]+�notification�ambiguous_char_width�singlea.Width of ambiguous characters that should be used in the table
        of the notification mail.

        If `single`, the same width as characters in US-ASCII. This is
        expected by most users. If `double`, twice the width of
        US-ASCII characters.  This is expected by CJK users.
        �batch_subject_templatez(${prefix} Batch modify: ${tickets_descr}zSLike `ticket_subject_template` but for batch modifications.
        (''since 1.0'')�ticket_subject_templatez#${prefix} #${ticket.id}: ${summary}z�A Jinja2 text template snippet used to get the notification
        subject.

        The template variables are documented on the
        [TracNotification#Customizingthee-mailsubject TracNotification] page.
        cCs|jdkrdSdS)N�double��)rYr1r,r,r-�	ambiwidth�szTicketFormatter.ambiwidthccs�dVdS)N)z
text/plainr<r,)r*�	transportr,r,r-�get_supported_styles�s�
z$TicketFormatter.get_supported_stylescCs@|jdkrdS|jdkr|�|�S|jdvr|�|�S|�|�S)Nr<rM)�attachment added�attachment deleted)�realmrD�_format_plaintext_batchmodify�_format_plaintext_attachment�_format_plaintext)r*ra�style�eventr,r,r-�format�s





zTicketFormatter.formatcCs�|j}|jdk}t|����|jj�|j�}d}d}i}|�s~|j�r~ddlm	}||j�j
||jd�D�]H}	|	ds<q4|	d}
|�|�|
�t
|	d|jd	d	d
|j�d��|dt|	�d
d��7}|	d��D�]\}}|d}
|d}d}|dkr�t
||jd	d	d
|j�}t
|
|jddd
|j�}|�dd�}d
}|d|d7}|d|d
7}|}n�|dkr�|�|
|�\}}d}|r�|t
dd�|�|jd	d	d
|j�d
7}|r�|t
dd�|�|jd	d	d
|j�d
7}|r�||7}n�|dvr�|�|
�}
|�|�}n||jv�r|j�|��d�}|�|
|�}
|�||�}|}dt|�}d\}}t|
|�||jk�rId}t|
�||jk�r=d
}t|�||jk�rId
}d |||
|||f}|�d
d
|d	�}t
||jd|d	d
|j�}|d!|d
f7}|�r||
|d"�||<qhq4|j��}|j|d#<t
|�dd�|jd	d	d
|jd$�|d<||d<||d%<t|j��d&t|� |�|�!|�||||d'��}|�"|d(�Wd&�S1�s�wYd&S))z7Format ticket change notification e-mail (untranslated)�created�r)�TicketModule)�when�	permanentrGr@� �
)rGr@z#comment:%s�cnum�fields�old�new�descriptionz> z

z
>
zOld description:

zNew description:

�ccz * cc: %s (removed)�, z * cc: %s (added)��owner�reporterrk�)rqrq�z* %s: %s%s%s=>%s%sz %s%s)�oldvalue�newvaluerS��initial_indent�subsequent_indent�linesepr`�linkN�r�ticket_props�ticket_body_hdrr<�changes_body�
changes_descr�change�ticket_notify_email.txt)#rErDrrR�abs_hrefr<rSrF�trac.ticket.web_uirn�grouped_changelog_entries�update�_format_authorr�COLSr`�str�get�items�replace�_diff_cc�join�time_fieldsrt�by_name�_format_time_field�len�values�copyr�
populate_datar�
_format_props�_format_hdr�_format_body)r*rjr<�	newticketr�r�r��change_datarnr�rG�fieldr�rurv�newv�	new_descr�	old_descr�cdescr�addcc�delcc�chgccrk�length�
spacer_old�
spacer_new�chg�
ticket_values�datar,r,r-rh�s�
��������
���
���

����
���
=

��
	&�z!TicketFormatter._format_plaintextc
Cs<|j}|jdk}d}|jj�|j�}|jj}t|��zt	d|jj
|r$dndf|jddd|j�d}|jj
rG|dt	|jj
|jddd|j�7}|j��}|j|d<t	|�d	d
�|jddd|jd�|d	<||d<||d
<t|j��dt|�|�|�|�||d
d|�|�id��}	|�|	d�Wd�S1s�wYdS)z;Format ticket attachment notification e-mail (untranslated)rcFz * Attachment "%s" %s.�added�removedrqrrrSrwrmr�rvr�NrGr�r�)rErDrRr�r<rSrCrGrr�filenamer�r`rwr�r�r�rr�rr�r�r�r�)
r*rjr<r�r�r�rGr�r�r�r,r,r-rg�sR


��
��
�


��
	$�z,TicketFormatter._format_plaintext_attachmentcCs�t��Pt|j|j�}d�dd�|j��D��}d�dd�|D��}|jjjd�dd�|D��d�}t	|j��
d	t|||j|j
|j|d
��}|�|d�Wd	�S1sVwYd	S)z=Format batch ticket change notification e-mail (untranslated)rrcss �|]\}}d||fVqdS)z%s to %sNr,)�.0�prop�valr,r,r-�	<genexpr>$s��z@TicketFormatter._format_plaintext_batchmodify.<locals>.<genexpr>rycs��|]}d|VqdS�z#%sNr,�r��tr,r,r-r�'���,css�|]}t|�VqdSr5)r�r�r,r,r-r�(r�)rSN)r�
tickets_descrr�r@rOrG�ticket_query_linkzbatch_ticket_notify_email.txt)rrrRrEr�rNr�r��queryrr�rr@rOrGr�)r*rj�ticketsr�r�r�r�r,r,r-rf s$
� �
	$�z-TicketFormatter._format_plaintext_batchmodifycCst|j��d|�Sr5)rrR�
format_author)r*rGr,r,r-r�4�zTicketFormatter._format_authorcCs\t|j�}|j|dd�}t��|j||dd�}|�d�Wd�S1s'wYdS)NT)�textzutf-8)rrR�
load_templater�render_template_string�encode)r*r��
template_name�chrome�template�bodyr,r,r-r�7s
$�zTicketFormatter._format_bodyc
Cs�|jdk}|j}|d}|jr'd|jdvr'|jdd}d|d|df}|j�dd�}|d	kr8d
|jj}||||j|jd�}t|j�}|j	d
i|���
�}	|sWd|	}	|	S)Nrl�summaryrtz%s (was: %s)rvrurX�smtp_subject_prefix�__default__�[%s])�prefixr�r<rBrRzRe: r,)rDrErBr'r�rR�project_name�_template_from_stringr\�render�strip)
r*rj�is_newticketr<r�r�r�r�r��subjr,r,r-�_format_subj>s(
�
zTicketFormatter._format_subjcCsjd�dd�|D��}t|j�}|j�dd�}|dkr d|jj}|||jd�}|jd	i|����}t	|�S)
Nrycsr�r�r,r�r,r,r-r�Zr�z;TicketFormatter._format_subj_batchmodify.<locals>.<genexpr>rXr�r�r�)r�r�rRr,)
r�r�r[r'r�rRr�r�r�r)r*r�r�r�r�r�r�r,r,r-�_format_subj_batchmodifyYs
�z(TicketFormatter._format_subj_batchmodifycCs"d|jt|d|jd|jd�fS)Nz#%s: %sr�rr)r�r`)rSrr�r`)r*r<r,r,r-r�js
�zTicketFormatter._format_hdrc	Csdd�|jD�}gd�}d}|D]f}|ddkrq|d}||jvr#q||p(d}||jvr=|j�|��d	�}|�||�}|�d
�dkrEq|dvrN|�|�}d
|d
}	t|�	|d�||	�||	<t|�	|�||	d�||	d<|d7}q|d|dd}
|d
|dd}|j
dd
}|
|d|j
kr�|
|kr�||ks�|d|d
ks�|d
|d
kr�|}
|}n+|
|kr�t|j
dd
d|
�}
|j
|
d}nt|j
dd
d|�}|j
|d}
|
dd|d}
|
d
}ggf}g}d}|
|g}dd�|D�D]�}|d}||jv�r�q||�pd}||jv�r.|j�|��d	�}|�||�}|dv�r8|�|�}|ddk�sFd
t|�v�rV|�
|dd
�|���f��qd|dt|�f}|d
}	d|d
|	|�	|d�d
|	}t|||	d
d
|	|dd
|j�}||	�
|���|d7}�qt|d�t|d�k�r�|d�
g�g}g}tt|d��D]]}|d|}|d|}t|�t|�}t|�t|�}|dk�r�|dk�r�||7}|�dgt|d��n|dk�r
|dk�r�||7}|�dgt|d��|�|�|�|��q�ttt|�t|���D];}|t|�k�r2|�
|
d�n|t|�k�r>|�
d�|
|�	||�t||�}|d|||||d
f7}�q!|�rz||
7}|D]\}}|d
�d|d|ddg�7}�qf||
7}|S)NcSsg|]
}|ddvr|�qS)�name)r�rxrF�
changetimer,�r��fr,r,r-�
<listcomp>ps�z1TicketFormatter._format_props.<locals>.<listcomp>)rrrrr�type�textarear�rmrkrr���rzr^�labelr_r~��-�+cSsg|]
}|ddkr|�qS)r�rwr,r�r,r,r-r��sz%s:  %srqz  z	%-*s|%s%s�:)rtr�r�r�r�r��findr��max�_get_text_widthr��minr��appendr��
splitlinesrr`r��range�extend)r*r<rt�width�ir��fname�fvalrk�idx�width_l�width_r�	half_cols�sep�txt�vals_lr�big�width_lr�str_tmpr��wrapped�cell_l�cell_r�vals_l�vals_r�	vals_diff�diff�	fmt_widthr��valuer,r,r-r�os�


 
 

 ��
�






�  zTicketFormatter._format_propscCs(t|j�dd��}|rt|||d�SdS)N�trac�default_timezone)�tzinform)rr'r�r)r*rrkr	r,r,r-r��s
��z"TicketFormatter._format_time_fieldcsH�j�|���j�|����fdd��D�}��fdd��D�}||fS)Nc�"g|]
}|r|�vr��|��qSr,�r��r��x)�oldccr*r,r-r�����z,TicketFormatter._diff_cc.<locals>.<listcomp>cr
r,rr)�newccr*r,r-r��r)�
addrsep_re�split)r*rurvr�r�r,)rrr*r-r��s��zTicketFormatter._diff_cccCst||jd�S)N)r`)rr`)r*r�r,r,r-r��szTicketFormatter._get_text_widthcCsFt|j|�}|rt|t�r|d}|s!|j�dd�p |j�dd�}|S)Nr_rX�	smtp_from�smtp_replyto)rrR�
isinstance�tupler'r�)r*rj�
from_emailr,r,r-�_get_from_email�s�zTicketFormatter._get_from_emailNcCst|j||||�Sr5)rrR)r*�targetidr�modtime�morer,r,r-�_get_message_id�r�zTicketFormatter._get_message_idcs�|jdkrdS|�|�}|jdkr.t|j|j�}|�|�}d�tt	|��}|�
|||j�}n�|�|�}|j}	d|	j
}|	dp@d}
|�
||d|
�}|jj�|	j
�}|jdkr{t|d|�t|d	|�|�
|||j|
�}|	�|j�}|dur{|d
|7}t|d|	j
�t|d|�t|j�jr�t��t|j�}
|	d
|	d|jfD]}|
�|�}|s�q�|d}|r���|�q��r�t|d�}�tdd�|D��M��r�fdd�|D�}|r�t|d|d�nd|vr�|d=t|d�d�t|d|�t|d|�dS)Nr<rMr�z%08dr|rmrlzIn-Reply-To�
Referencesz#comment:%dzX-Trac-Ticket-IDzX-Trac-Ticket-URLr{r^�Cccss�|]\}}|VqdSr5r,�r�r��addrr,r,r-r�r�z3TicketFormatter.decorate_message.<locals>.<genexpr>cs g|]\}}|�vr||f�qSr,r,r��to_addrsr,r-r�s�z4TicketFormatter.decorate_message.<locals>.<listcomp>)�	addresses�To�Subjectz
Message-ID)rerrDrrRrEr�r��mapr�rrFr�rSr�r<r�get_comment_numberr	�
use_public_ccr(r
rG�match_recipient�addr
)r*rj�message�charsetrr��subjectr�msgidr<r�urlrs�matcher�rcptr �cc_addrsr,r!r-�decorate_message�s`






�


�
z TicketFormatter.decorate_messager5)"r7r8r9rJr:rrr��re�compiler�OptionrYr[r\rr`rbrkrhrgrfr�r�r�r�r�r�r�r�r�rrr3r,r,r,r-rV`sH

�
��	

i&i	
	rVc@�8eZdZdZee�dd�Zdd�Zdd�Zdd	�Z	d
S)�TicketOwnerSubscriberz3Allows ticket owners to subscribe to their tickets.cCsRd}t|�r$|jdg}d|jvr$d|jdvr$|�|jddd�t||�S)Nr{rtru)�_is_ticket_change_eventrErBr��_ticket_change_subscribers)r*rj�ownersr,r,r-�matches/s
zTicketOwnerSubscriber.matchescC�td�S)Nz(Ticket that I own is created or modifiedrr1r,r,r-rw8�z!TicketOwnerSubscriber.descriptioncC�|jj}t|j��|�Sr5�rIr7r	rR�default_subscriptions�r*�klassr,r,r-rA;�z+TicketOwnerSubscriber.default_subscriptionscCr/�NTr,r1r,r,r-�requires_authentication?r3z-TicketOwnerSubscriber.requires_authenticationN�
r7r8r9rJr:rr<rwrArFr,r,r,r-r8*s	r8c@r7)r$z2Allows updaters to subscribe to their own updates.cCsd}t|�r	|j}t||�Sr5)r9rGr:)r*rj�updaterr,r,r-r<Hs
zTicketUpdaterSubscriber.matchescCr=)NzI update a ticketrr1r,r,r-rwNr>z#TicketUpdaterSubscriber.descriptioncCr?r5r@rBr,r,r-rAQrDz-TicketUpdaterSubscriber.default_subscriptionscCr/rEr,r1r,r,r-rFUr3z/TicketUpdaterSubscriber.requires_authenticationNrGr,r,r,r-r$C�r$c@r7)r&zAAllows subscribing to future changes simply by updating a ticket.cs8d}t��r�fdd�|j�d�jjf�D�}t||�S)Ncsg|]
\}|�jkr|�qSr,)rG)r�rG�rjr,r-r�as

�z<TicketPreviousUpdatersSubscriber.matches.<locals>.<listcomp>zk
                SELECT DISTINCT author FROM ticket_change
                WHERE ticket=%s
                )r9rR�db_queryrErSr:)r*rj�updatersr,rJr-r<^s�
z(TicketPreviousUpdatersSubscriber.matchescCr=)Nz,Ticket that I previously updated is modifiedrr1r,r,r-rwhr>z,TicketPreviousUpdatersSubscriber.descriptioncCr?r5r@rBr,r,r-rAkrDz6TicketPreviousUpdatersSubscriber.default_subscriptionscCr/rEr,r1r,r,r-rFor3z8TicketPreviousUpdatersSubscriber.requires_authenticationNrGr,r,r,r-r&Ys
r&c@r7)�TicketReporterSubscriberz:Allows the users to subscribe to tickets that they report.cCs d}t|�r|jd}t||�S)Nr|)r9rEr:)r*rjr|r,r,r-r<xs

z TicketReporterSubscriber.matchescCr=)Nz"Ticket that I reported is modifiedrr1r,r,r-rw~r>z$TicketReporterSubscriber.descriptioncCr?r5r@rBr,r,r-rA�rDz.TicketReporterSubscriber.default_subscriptionscCr/rEr,r1r,r,r-rF�r3z0TicketReporterSubscriber.requires_authenticationNrGr,r,r,r-rMsrIrMc@r7)�NewTicketSubscriberz-Allows the users to subscribe to new tickets.ccsD�|jdks|jdkr
dS|jj}t�|j|�D]}|��VqdS)Nr<rl)rerDrIr7r�
find_by_classrR�subscription_tuple)r*rjrC�sr,r,r-r<�s��zNewTicketSubscriber.matchescCr=)NzAny ticket is createdrr1r,r,r-rw�r>zNewTicketSubscriber.descriptioncCsgSr5r,r1r,r,r-rA�r3z)NewTicketSubscriber.default_subscriptionscCr/r0r,r1r,r,r-rF�r3z+NewTicketSubscriber.requires_authenticationNrGr,r,r,r-rN�srNc@r7)r"z+Carbon copy subscriber for cc ticket field.csrd}t|�r4t|j���fdd�}||jdpd�}d|jvr4d|jdvr4|�||jddd��t||�S)Ncst��|��Sr5)r(�cc_list)rx�r�r,r-�<lambda>�sz.CarbonCopySubscriber.matches.<locals>.<lambda>rxrmrtru)r9rrRrErBr�r:)r*rj�cc_users�to_setr,rSr-r<�s

zCarbonCopySubscriber.matchescCr=)Nz2Ticket that I'm listed in the CC field is modifiedrr1r,r,r-rw�r>z CarbonCopySubscriber.descriptioncCr?r5r@rBr,r,r-rA�rDz*CarbonCopySubscriber.default_subscriptionscCr/rEr,r1r,r,r-rF�r3z,CarbonCopySubscriber.requires_authenticationNrGr,r,r,r-r"�s
r"c@r7)�TicketAttachmentNotifierz(Sends notification on attachment change.cCs|�|d|j�dS)Nrc)�_notify_attachment�date�r*rCr,r,r-�attachment_added�s�z)TicketAttachmentNotifier.attachment_addedcCs|�|dd�dS)Nrd)rXrZr,r,r-�attachment_deleted�r�z+TicketAttachmentNotifier.attachment_deletedcCr4r5r,)r*rC�old_parent_realm�
old_parent_idr,r,r-�attachment_reparented�sz.TicketAttachmentNotifier.attachment_reparentedcCs�|jj}|jdkrdSt|j|j�}t||||d|d�}zt|j��|�WdSt	yI}z|j
�d||j|jt
|��WYd}~dSd}~ww)Nr<r|)rCzJFailure sending notification when %s for attachment '%s' to ticket #%s: %s)�resource�parentrerrRrSr;r	�notify�	Exception�log�errorr�r)r*rCrDrFr`r<rj�er,r,r-rX�s 
�
���z+TicketAttachmentNotifier._notify_attachmentN)
r7r8r9rJr:rr[r\r_rXr,r,r,r-rW�srWcCs|jdko	|jdvS)Nr<)rlrQrcrd)rerDrJr,r,r-r9�s
�r9c
cs�|sdSt|tttf�s|g}t|j���}t|�D]}||vr-|�|�|�||�qt	|j�}|j
j}t�}|D]4}|�|�}|sFq<|\}	}
}|�
�D]}|d|d|	|
||d|d|dfVqO|	rp|�|	|
f�q<t�|j||�D]}|��VqydS)Nrr_r^r��)r�listr(rrrR�get_groups_dict�remover�r
rIr7r)rAr*r�find_by_sids_and_classrP)
�
subscriber�
candidates�groupsrxr0rC�sids�	candidate�	recipient�sid�authr rQr,r,r-r:�s6�
�


,��r:cCst|dddd�S)NT)r��line_statement_prefix�line_comment_prefix)r)�stringr,r,r-r�	s�r�);r4�trac.apir�trac.attachmentr�	trac.core�trac.config�trac.notification.apirrrrr	�trac.notification.mailr
rrr
r�trac.notification.modelr�	trac.permr�trac.ticket.apir�trac.ticket.modelrr�	trac.utilr�trac.util.datefmtrr�trac.util.textrrrrrr�trac.util.translationr�trac.web.chromer�	Componentr r;rLrVr8r$r&rMrNr"rWr9r:r�r,r,r,r-�<module>sB M$ 

https://t.me/RX1948 - 2025