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__/query.cpython-310.pyc
o

�k�`��@s�ddlmZmZddlmZddlZddlmZddlZddlZddl	Z	ddl
mZmZddl
TddlmZddlmZmZdd	lmZdd
lmZmZddlmZmZddlmZdd
lmZmZm Z ddl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)ddl*m+Z+ddl,m-Z-ddl.m/Z/m0Z0m1Z1ddl2m3Z3m4Z4m5Z5m6Z6ddl7m8Z8m9Z9m:Z:ddl;m<Z<ddl=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGddlHmIZIddlJmKZKddlLmMZMGdd�deN�ZOGdd�deN�ZPGdd�deQ�ZRGdd �d eS�ZTGd!d"�d"eM�ZUdS)#�)�datetime�	timedelta)�groupbyN)�ceil)�Option�	IntOption)�*)�get_column_names)�IContentConverter�Mimeview)�Resource)�TicketSystem�translation_deactivated)�	Milestone�_datetime_to_db_str)�group_milestones)�Ranges�as_bool�as_int)�datetime_now�from_utimestamp�format_date_or_datetime�
parse_date�to_timestamp�
to_utimestamp�utc�	user_time)�tag)�	Paginator)�empty�shorten_line�quote_query_string)�_�	cleandoc_�ngettext�tag_)�arg_list_to_args�parse_arg_list�IRequestHandler)�Href)
�INavigationContributor�Chrome�add_ctxtnav�add_link�
add_script�add_script_data�add_stylesheet�add_warning�	auth_link�web_context)�IWikiSyntaxProvider)�
MacroError)�
WikiMacroBasec@seZdZdZdS)�QuerySyntaxErrorzDException raised when a ticket query cannot be parsed from a string.N)�__name__�
__module__�__qualname__�__doc__�r<r<�3/usr/lib/python3/dist-packages/trac/ticket/query.pyr75sr7c@seZdZdZdd�ZdS)�QueryValueErrorz?Exception raised when a ticket query has bad constraint values.cCst�|td��||_dS)NzInvalid query constraint value)�	TracError�__init__r"�errors)�selfrAr<r<r=r@;s
zQueryValueError.__init__N)r8r9r:r;r@r<r<r<r=r>9sr>c@s�eZdZdgZe�d�Z			d#dd�Ze�d�Ze�d�Z	e
d	d
��Zdd�Zd
d�Z
dd�Zdd�Zd$dd�Zdd�Zd%dd�Z		d&dd�Zdd�Zd$dd�Zedd ��Z		d$d!d"�ZdS)'�Query�$USERz(?P<clause>\d+)_(?P<field>.+)$NrcsT||_||_|p	g}t|t�r|g}||_t|j���}|�||�|_||_	||_
||_|
|_d|_
t|j�j|_d|_|sA|j
}zt|�|_|jdkrOt��Wnty_ttd|d���w|dvrfd}|durm|j}zt|�|_|jdkr{t��Wnty�ttd|d���w|jdkr�d|_d|_nd	|_|j|jd|_|
dur�g}
|	r�d
|
vr�|
�d
�t|j���|_dd�|jD�|_d
d�|jD���fdd�|p�gD�|_�fdd�|
D�|_|jdkr�|j�vr�d|_|j
�vr�d|_
i}|jD]&}t|�D]}|dk�s|�v�r|� |g��||��q|�!|��qq�||_"dS)N�zQuery page %(page)s is invalid.��page)�none�rzQuery max %(max)s is invalid.)�maxFT�descriptioncSs h|]}|ddkr|d�qS)�type�time�namer<��.0�fr<r<r=�	<setcomp>|s�z!Query.__init__.<locals>.<setcomp>cSsh|]}|d�qS�rNr<rOr<r<r=rR~�cs g|]}|�vs|dkr|�qS)�idr<�rP�c��field_namesr<r=�
<listcomp>s�z"Query.__init__.<locals>.<listcomp>c�g|]}|�vr|�qSr<r<rVrXr<r=rZ��rU�priority)#�envrU�
isinstance�dict�constraintsr
�get_field_synonyms�get�order�desc�group�	groupdesc�format�default_page�QueryModule�items_per_page�	num_items�intrG�
ValueErrorr?r"rJ�has_more_pages�offset�append�get_ticket_fields�fields�time_fields�cols�rows�sorted�
setdefault�pop�constraint_cols)rBr^�reportrarurdrerfrg�verboservrGrJrh�synonymsrz�clause�colr<rXr=r@Ds~


��

��



�
zQuery.__init__z(?<!\\)&z	(?<!\\)\|cs�gd�}dg}gd�}ddi}t|����ig}g}	d}
|j�|�D]�}|dkr.|�i�q"|�dd��dd	�}t|�d
krDttd���|\}}
d�|ra|d
dvra||j	vra|d
�|dd
�}|rs|d
dkrsd��|dd
�}|s{ttd���|�
||�}�fdd�|j�|
�D�}||vr�|d||<q"||vr�|�|g��
|�q"||vr�t|d�||<q"|dkr�|	�
�fdd�|D��q"|dkr�|d}
q"|d
���
||�g��
|�q"ttd|��}|�d|
�}
|||
f||	d�|��S)N)rdrfrGrJrhrv)rergr|�row�orz\&�&�=rE�z>Query filter requires field and constraints separated by a "="rI�����~�^�$�!z Query filter requires field namecsg|]
}�|�dd��qS)z\|�|��replace�rP�val��moder<r=rZ�s�z%Query.from_string.<locals>.<listcomp>rrc3��|]	}��||�VqdS�N�rc�rP�value)r}r<r=�	<genexpr>����z$Query.from_string.<locals>.<genexpr>r{)raru)r
rb�_clause_splitter�splitrqr��lenr7r"�
substitutionsrc�_item_splitterrx�extendr�list�filterry)�clsr^�string�kw�kw_strs�kw_arys�kw_bools�kw_synonymsrarur{�filter_�field�values�processed_valuesr<)r�r}r=�from_string�sb



�
�
�
zQuery.from_stringcCs.|js|��|_d|jvr|j�dd�|jS)NrUr)ru�get_default_columns�insert�rBr<r<r=�get_columns�s


zQuery.get_columnscCsdd�|jD�S)NcSs g|]}|ddkr|d�qS�rL�textarearNr<rOr<r<r=rZ�� z+Query.get_all_textareas.<locals>.<listcomp>�rsr�r<r<r=�get_all_textareas�szQuery.get_all_textareascsfdg}|dd�|jD�7}dD]}||vr|�|�|�|�qt|j���fdd�}|j|d�|S)NrUcSs g|]}|ddkr|d�qSr�r<rOr<r<r=rZ�r�z)Query.get_all_columns.<locals>.<listcomp>)�reporter�keywords�cccs(|dkrdS|dkrdS|�vrdSdS)NrUrE�summaryr���r<rS��constrained_fieldsr<r=�sort_columns�sz+Query.get_all_columns.<locals>.sort_columns��key)rs�removerq�setrz�sort)rBrurr�r<r�r=�get_all_columns�s

�
zQuery.get_all_columnscCs�|��}t|j�D]O}|dks||vrq	|j|}|D]}t|�dkr8|dr8|dddvr8||vr8||jvs:nq|�|�|dkrXd|vrX|D]}d|vrRnqJ|�d�q	|j|vrd|�|j�|dd�}|j|vrz|j|jkrz|j|d	<|S)
NrUrErz!~^$�status�
resolution�closed�r�)r�rwrzr�rtr�rfrd)rBrurra�
constraintr<r<r=r��s2

�
�
�

zQuery.get_default_columnscCs|�|||�\}}|�||�S)zBGet the number of matching tickets for the present query.
        )�get_sql�_count)rB�req�
cached_ids�authname�sql�argsr<r<r=�count
szQuery.countcCs.|j�d||�dd}|jj�d|�|S)NzSELECT COUNT(*) FROM (%s) AS xrzCount results in Query: %d)r^�db_query�log�debug)rBr�r��cntr<r<r=r�s����zQuery._countcs�|dur|j}d�_��|||�\}}��||��_�j�jkr#d�_�jrV�j}�jr0|d7}|d|�jf7}�jt	t
t�j��j��krV�jdkrVtt
d�jd���g}�jj�}}	|	��}
|
�||�t|
�}�fdd	�|D�}|
D]Y}
i}t|||
�D]I\}}}|d
kr�|p�d}n7|dkr�t	|�}|dur�|�|�|d
<n#|�jvr�|r�tt	|��nd}n|r�|ddkr�t|�}n|dur�d}|||<q�|�|�qv|Wd�S1s�wYdS)z/Retrieve the list of matching tickets.
        NrFrEz LIMIT %d OFFSET %dz8Page %(page)s is beyond the number of pages in the queryrFcsg|]	}�j�|d��qSr�)rs�by_name)rP�columnr�r<r=rZ3sz!Query.execute.<locals>.<listcomp>r��	anonymousrU�hrefrL�checkboxrI)r�rlr�r�rJrorfrprGrmr�floatr?r"r^r��cursor�executer	�zip�ticketrtrrrq)rBr�r�r�r�r�r�rJ�results�dbr��columnsrsr��resultrNr�r�r<r�r=r�sV
�

�


$�z
Query.executec
sP|dur|j}|dkr|j}|j}|dur|j}|dur|j}|dur&|j}|dur-|j}|dur4|j}|��}||�	�kr@d}||jkrGd}||jkrNd}g}	t
|j�D]\}
�|
dkrd|	�dt
f�|	��fdd�t��D��qU|	�d|fd|jp}dfd	|jr�d
ndfd|fd|fd
|r�d
ndfd|fd|jfd|fd|fg
�|�|	�S)a\Create a link corresponding to this query.

        :param href: the `Href` object used to build the URL
        :param id: optionally set or override the report `id`
        :param order: optionally override the order parameter of the query
        :param desc: optionally override the desc parameter
        :param format: optionally override the format of the query
        :param max: optionally override the max items per page
        :param page: optionally specify which page of results (defaults to
                     the first)

        Note: `get_resource_url` of a 'query' resource?
        N�rssrr�c3s�|]	}|�|fVqdSr�r<�rPr�r~r<r=r�x��z!Query.get_href.<locals>.<genexpr>r{rfrgrErJrdrerr�rGrh)rhrkrirUrerdrJrGr�r��	enumeraterarqrr�rwrfrgrv�query)rBr�rUrdrerhrJrGrur��idxr<r�r=�get_hrefHsP

�
zQuery.get_hrefcCs.|�td��}|�dd�d}d|�dd�S)z�Return a user readable and editable representation of the query.

        Note: for now, this is an "exploded" query href, but ideally should be
        expressed in TracQuery language.
        rI�?rEr�zquery:?r�z
&
)r�r)r�r�)rB�query_stringr<r<r=�	to_string�szQuery.to_stringcs��dur�j��	��g��fdd�}|�	j��	jr%�	j�vr%|�	j��	jr1|dg�	j�R�|dddd�	j�|t�	j��d	d
��	jD��dd
��	jD���fdd
��D�}t	|�dk�
��	fdd
�dD�}��	fdd
�dD�}g}|�
dd��fdd��D���d|vr�|�
d��	jj
�����
r�|��fdd�|D��|�
d�|��fdd�|D��n6|��fdd�|D��|�
d�|��fdd�|D��|�
d�|�
dd�d d�|D���|�
d!�|�d"d�|D��|�d#d�|D����fd$d%������	�
�fd&d'���������	�
fd(d)�}	g�g�ttdt|	�	j���}
|
�rZ|�
d*�|�
d+�d,d�|
D���|�rZ|�
d+�|�
d-d�d.d�|D���|�
d/��	j�	jfg}�	j�r{�	j�	jk�r{|�d0�	j�	jf�|D]�\}}
||v�r�|d1}n|�v�r�d2|}n�
�r���|�d1}nd3��|�}|
�r�d4nd5}
|�v�r�d6}n|d7k�s�|�	jv�r�d8}nd6}|�
d9|||
d:��||v�r�|�
��|d;�|
�n7|d<k�r�|�v�r�|�
d=|
|
|
|
||
f�n|d>k�r|�v�r|�
d?|
|
||
f�n	|�
d@||
f�|�	jk�r*|�	jk�s*|�
d��q}Wd�n	1�s7wY�	jd7k�rG|�
dA���rNt���d5�|��fS)Bz4Return a (sql, params) tuple for the query.
        Ncs |D]}|�vr
��|�qdSr�)rq)r�r)rur<r=�add_cols�s

��zQuery.get_sql.<locals>.add_colsr�r�r]rM�
changetimecSsh|]}|�d�r|d�qS)�customrNr�rOr<r<r=rR�sz Query.get_sql.<locals>.<setcomp>cSs.h|]}|ddkr|�d�dkr|d�qS)rL�textrhr�rNr�rOr<r<r=rR�s
�cr[r<r<�rP�k��
custom_fieldsr<r=rZ�r\z!Query.get_sql.<locals>.<listcomp>rEcs*g|]}|�vr|d�j�jfvr|�qS)r]�rdrfr��r�rBr<r=rZ�s
�)r�r]�severityrLcs(g|]}|�vr|�j�jfvr|�qSr<r�r�r�r<r=rZ�s
�)�	milestone�versionzSELECT �,c3s$�|]
}|�vrd||fVqdS)z
t.%s AS %sNr<rVr�r<r=r��s�
��z Query.get_sql.<locals>.<genexpr>z",priority.value AS _priority_valuec3�"�|]}dd��|�iVqdS)z,%(qk)s.value AS %(qk)s�qkN��quoter��r�r<r=r�����z
FROM ticket AS tc3s$�|]
}d��|�|d�VqdS)zZ
  LEFT OUTER JOIN ticket_custom AS %(qk)s ON (%(qk)s.ticket=t.id AND %(qk)s.name='%(k)s'))r�r�Nr�r�rr<r=r��s���c3r�)z,c.%(qk)s AS %(qk)sr�Nr�r�rr<r=r��rz<
FROM ticket AS t
  LEFT OUTER JOIN (SELECT
    ticket AS idc3s"�|]}d|��|�fVqdS)z3,
    MAX(CASE WHEN name='%s' THEN value END) AS %sNr�r�rr<r=r��s���z
    FROM ticket_custom AS tcz
    WHERE name IN (%s)cs��|]}d|VqdS)z'%s'Nr<r�r<r<r=r����z*
    GROUP BY tc.ticket) AS c ON c.id=t.idcss*�|]}d||dkrdn|d�VqdS)zZ
  LEFT OUTER JOIN enum AS %(col)s ON (%(col)s.type='%(type)s' AND %(col)s.name=t.%(col)s)rL�ticket_type)rrLNr<r�r<r<r=r��s����css�|]	}dd|iVqdS)z4
  LEFT OUTER JOIN %(col)s ON (%(col)s.name=%(col)s)rNr<r�r<r<r=r��s���c
sL|r$zt�t|�WSty#}z��t|��WYd}~dSd}~wwdSr�)rrr?rq�str)r��e)rAr�r<r=�user_parse_date�s��z&Query.get_sql.<locals>.user_parse_datecs�|�v}|sd|}n�r��|�d}nd��|�}|t|�|d�}|�jvr�|s>d�||r4dnd�}dg}||fSd|vrPdd	�|�dd
�D�\}}	n|��d}}	�|�}�|	�}	d}}|durz|	durzd�|rqdnd|�}||	g}n&|dur�d
�|r�dnd|�}|g}n|	dur�d�|r�dnd|�}|	g}ndS|r�dd	�|D�}||fSdd	�|D�}||fSdd�}
|dk�r|�v�r|
|�}gg}}|D],}
d}|
�d�r�d}|
d
d�}
|
s�q�|�d||���f�|�d��	|
�d�q�|�sdS|�rdnddd�
|�d|fS|dk�r(d||�r!dndf|ffS|�s-dS��	|�}|dk�r>d|d}n|dk�rH|d7}n	|dk�rQd|}d||�rXdnd���f|ffS)N�t.�.value�c.zCOALESCE({0},''){1}=%sr�rI�..cSsg|]}|���qSr<��strip�rP�eachr<r<r=rZ�rTz=Query.get_sql.<locals>.get_constraint_sql.<locals>.<listcomp>rEz{0}({1}>=%s AND {1}<%s)�NOT z
{0}{1}>=%sz	{0}{1}<%scSsg|]}t|d��qS)T)r�rP�argr<r<r=rZ�cS�g|]}t|��qSr<)rrr<r<r=rZ
rTcSs dd�dd�t�d|�D�D�S)NcSsg|]}|D]}|���qqSr<r
)rP�wl�wr<r<r=rZs
��zRQuery.get_sql.<locals>.get_constraint_sql.<locals>.split_words.<locals>.<listcomp>cssJ�|] }|r|d|dkrdkrnn|dd�gn|��VqdS)rr��"rEN)r��rP�xr<r<r=r�s�@�zQQuery.get_sql.<locals>.get_constraint_sql.<locals>.split_words.<locals>.<genexpr>z	("[^"]+"))�rer�)�
splittabler<r<r=�split_wordss

��z>Query.get_sql.<locals>.get_constraint_sql.<locals>.split_wordsr��-zCOALESCE(%s,'') %s%s�%�(� AND �)zCOALESCE(%s,'')%s=%%sr�r�)rr�rtrhr�r�
startswithrq�like�like_escape�join)rNr�r��neg�is_custom_fieldrr~r��start�endr�words�clauses�word�cneg)r�r��list_fieldsrB�	use_joinsrr<r=�get_constraint_sql�s�

�
��
���


�����
��




��z)Query.get_sql.<locals>.get_constraint_sqlcs�g}t|�D�]:�|�}�dur�fdd�|D�}|d�d��d�t|d��kr9|d�dvr9|d���dkr�t�}|D]!}|�dd�}z|�|�WqBtyc��td|d	��YqBwg}g}|j	D]\}}||kr{|�t
|��qk|�d
���|���|�qk|r�|�dd�|��|r�|�d
�r�dndd�|�f�q�s�t|�dkr��	jvr��vr�d�}	n�
rʈ�
��d}	nd��
��}	|�d|	�r�dndd�dd�|D��f����fdd�|D��q|�rA����fdd�|D�}
ttd|
��}
|
�sq��r#|�dd�dd�|
D��d�n|�dd�dd�|
D��d�|
D]
}��|d��q6qd�|�S)Ncsg|]}|�d���qS)rDr�r�)r�r<r=rZ>r\z9Query.get_sql.<locals>.get_clause_sql.<locals>.<listcomp>rr�rIr�rUz!Invalid ticket id list: %(value)s)r�zt.id BETWEEN %s AND %szt.id IN (%s)r�z%s(%s)r� OR rEr	r
rzCOALESCE(%s,'') %sIN (%s)css�|]}dVqdS)z%sNr<r�r<r<r=r�is�z8Query.get_sql.<locals>.get_clause_sql.<locals>.<genexpr>csg|]}|�d��qSr�r<r�)r'r<r=rZjr\csg|]	}��|����qSr<r<r�)r1r�r�r'r<r=rZls�r r!cS�g|]}|d�qS�rr<�rP�itemr<r<r=rZsrTr"cSr3r4r<r5r<r<r=rZvrT)rwr#r�rr��appendrange�	Exceptionrqr"�pairsrr&rtrr�r�r�)rar,�v�ranges�r�ids�
id_clauses�a�br�constraint_sqlr6)r�r�r�r�rAr1rBr0)r�r�r'r=�get_clause_sql9s� ��


���
���
��
���
z%Query.get_sql.<locals>.get_clause_sqlz
WHERE r2csr)z(%s)Nr<rVr<r<r=r��rzt.id in (%s)css�|]}t|�VqdSr��r�rPrUr<r<r=r��rz

ORDER BY rr
r	rz DESCrIz''rU�0z*COALESCE(%(col)s,%(arg)s)=%(arg)s%(desc)s,)rrrermr�zlCOALESCE(milestone.completed,0)=0%s,milestone.completed%s,COALESCE(milestone.due,0)=0%s,milestone.due%s,%s%sr�z0COALESCE(version.time,0)=0%s,version.time%s,%s%sz%s%sz,t.id)r�r�rurfrvrdrwrzrsr�rqr&r^r�r�r�r��maprarer�rgrrt�castr>)rBr�r�r�r��cols_custom�enum_columns�joined_columnsr�rBr,�
order_colsrNrer�coalesce_argr<)r�r�rur�r�rAr1r/r�rBr0rr=r��s�

"
�

��
�
�

�
�UB

�






�
�
�
����x
z
Query.get_sqlcCs�td�dd�td�dd�td�dd�td�d	d�td
�dd�td�d
d�gtd�dd�td�dd�gtd
�dd�td�d
d�gtd
�dd�td�d
d�gd�}|S)N�containsr��rNr�zdoesn't containz!~zbegins withr�z	ends withr��isrIzis notr�)r�r��selectrU�r")�modesr<r<r=�	get_modes�s$�����zQuery.get_modesc sBg}�jD]c}i}|��D]U\}	}
gdd�}|
D]E}|�d�}
|
r'|dd�}d}|dd�dvrC|�jvrC|dd�|dd�}}�rL|�d�j�}|
rPdnd||d<|d�|�q|||	<q
|�|�q���}t�j	��
�����fd	d
�|D�}ddtd�d
�i��jD]k}|d}|dkr�|ddkr�|�
�}t��fdd
�|dD�t�d�d�|d<|d�dddd��|dkr�|�d�s�|�
�}�fdd
�|dD�}�fdd
�|D�}t|d��g|d<dd
��D�|d<|�|<q��fdd�}t�|d�}i�g}|D]I}|�r2|�r2|d �r"|d |k�r"d|d!<n|d"�r2|d"|k�r2d|d#<�j�rQ|�j}��|g��|�|�rL||v�rQ|�|��q	�fd$d
�|D�}d%}|�r��j�r�t|��jdk�r�|d&=t|d&d�dk�r�|d&=n	d}|d&dd&=t|�jd�j�j�}��r�|j�r��j�j�j�jdd'�}t�d(|td)��|j�r͈j�j�j�jdd'�}t�d*|td+��nd%|_ g}|�!d,�}|D]}|��j�j|d-�dt"|�td.|d/�g��q�d0d
�|D�|_#dd1t"|jd�dd2�|_$��|�j%||�|��&�||�pd|fg||d3�
S)4NrI)r�r�r�rEr�rDr�r�c
sLg|]"}|��|td���j�|i��j�j||�jko�jd�d��qS)�Ticket)rdre)rN�labelr�r�)rcr"rsr�r�r�rdrer�)�context�labelsrBr<r=rZ�s�
�
�z'Query.template_data.<locals>.<listcomp>rUrT)rLrUrN�ownerrLrPcs$g|]}t�j���|�|d��qS)rN)r+r^�
format_author)rP�option�r�rBr<r=rZ�s����optionsr�rrNr�r�csg|]}t�j|��qSr<)rr^)rP�optr�r<r=rZ���cs g|]}d��|j�vr|�qS)�MILESTONE_VIEW)�perm�resource�rP�m)rVr<r=rZ�s�TcSs$g|]\}}|dd�|D�d��qS)cSsg|]}|j�qSr<rSrbr<r<r=rZsz2Query.template_data.<locals>.<listcomp>.<listcomp>)rUr\r<)rPrU�
milestonesr<r<r=rZs���	optgroupscs d�|vr�|d��SdS)NrUrI)�lowerrSr�r<r=�by_labelsz%Query.template_data.<locals>.by_labelrM�_addedr��_changedcsg|]}|�|f�qSr<r<r�)�groupsr<r=rZr\Fr�)rJrG�nextz	Next Page�prevz
Previous Page�rFzPage %(num)d)�numcSsg|]}ttgd�|���qS)�r��classr��title)r`r�)rP�pr<r<r=rZCs

�
��currentro)
r�rVrr�r,�headersrsrYrR�ticketsrj�last_group_is_partial�	paginator)'ra�itemsr#r�r�r�rqr�r
r^�get_ticket_field_labelsr"rs�copyrw�operator�
itemgetterr�rcrrfrxrJr�rrGrl�
has_next_pager�r�r-�has_previous_page�
show_index�get_shown_pagesr�shown_pages�current_pagervrS) rBrVru�	orig_list�	orig_timer�r,r~rar�r:r�r�r'r�rurtr�rNrdrgrY�
groupsequencer��	group_keyrvr��	next_href�	prev_href�pagedatar�rGr<)rVrsrjrWr�rBr=�
template_data�s�




�
�
��
�

�



�"����

����zQuery.template_data)NNNNrNrrNNNN)NNN)NNNN)NNNNNN)r8r9r:r�r�compile�	clause_rer@r�r��classmethodr�r�r�r�r�r�r�r�r�r�r��staticmethodrSr�r<r<r<r=rC@s<

�
M

4
!
1
�?

)
�rCc@s�eZdZeeeee�ej	Z	e
ddddd�Ze
ddddd�Ze
dd	d
d�Zdd
�Zdd�Zdd�Zdd�Zdd�Zdd�Ze�d�Ze�d�Zdgfdd�Zdd�Zd+d!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�ZdS),rjr��
default_queryzstatus!=closed&owner=$USERaThe default query for authenticated users. The query is either
            in [TracQuery#QueryLanguage query language] syntax, or a URL query
            string starting with `?` as used in `query:`
            [TracQuery#UsingTracLinks Trac links].
            )�default�doc�default_anonymous_queryzstatus!=closed&cc~=$USERaThe default query for anonymous users. The query is either
            in [TracQuery#QueryLanguage query language] syntax, or a URL query
            string starting with `?` as used in `query:`
            [TracQuery#UsingTracLinks Trac links].
            rk�dztNumber of tickets displayed per page in ticket queries,
        by default. Set to `0` to specify no limit.
        ccsH�dtd�ddddfVdtd�ddd	dfVd
td�ddd
dfVdS)Nr�zRSS Feed�xml�trac.ticket.Query�application/rss+xml��csvzComma-delimited Text�text/csv�tabzTab-delimited Text�tsv�text/tab-separated-valuesrQr�r<r<r=�get_supported_conversionsvs�
�
�

�z%QueryModule.get_supported_conversionscCsJ|dkr
|�||�S|dkr|j||dd�S|dkr#|j||ddd�SdS)Nr�r�r�)�mimetyper��	r�)�_export_rss�_export_csv)rBr�r�r�r�r<r<r=�convert_content~s
��zQueryModule.convert_contentcCsdS)Nrur<�rBr�r<r<r=�get_active_navigation_item��z&QueryModule.get_active_navigation_itemccsN�d|�|j�vr#d|�dd�vr%ddtjtd�|j��d�fVdSdSdS)	N�TICKET_VIEW�REPORT_VIEWr{r��mainnavruzView Tickets)r�)r`�realmrr?r"r�r�r�r<r<r=�get_navigation_items�s�
��z QueryModule.get_navigation_itemscCs
|jdkS)Nz/query)�	path_infor�r<r<r=�
match_request�s
zQueryModule.match_requestc
Cs|�|j��d�|j�d�}|r|�d|��d�|�|�}|j}|s�|jr.|j}|j}n|j	�
d�}|j	�
d�}|j}|pB|pBd}|j�
d|�|�d�r^t|�}	t|	�}|j|	d�}n4t�|j|�}
|�d	|
j�|�d
|
j�|�d|
j�|�d|
j�|�d
|
j�|�d|
j�|
j}|D]+}t|���D]"\}}
t|
�D]\}}|r�|�d|�|
|<q�|� d�r�||=nq�q�q�|�!d	�}|r�d|vr�|�"dd�|�!d�}|j�
d�}|�
d
�}|dur�|dvr�d}|�
d�}|�
d�}|�
d�}t|j||||t#|�
d
��|t#|�
d��t#|�
d��|||�}
d|jv�r8dD]
}||j	v�r-|j	|=�q!|�$|
�%|j&��t'|j��(d�D]#}|j)}|
j%|j&|d�}|dk�rWt*||�}t+|d||j,|j-|��q@|�r}|dk�rndnd}t'|j�j.|d|
||d�|�/||
�S)Nr�r{r��emailrNz$QueryModule: Using default query: %sr�)�arg_listrrerfrgrJrdrDrUrr�rh)r�r�rGr|�update)�query_constraints�
query_time�
query_ticketsr�)rhr��	alternater�)�filename)0r`r��requirer�r�_get_constraints�is_authenticatedr�r��sessionrcr�r�r�r#r'r&rCr�r^rxrurerfrgrJrdrar�rxr�r��endswith�getlistr�r�redirectr�r�rr�r�r2r-rN�out_mimetype�send_converted�display_html)rBr��	report_idrar��qstring�userr�rNr�r�r~r��vals�ir�rurvrhrJrdrfrG�var�
conversion�format_�conversion_hrefr�r<r<r=�process_request�s�


���





���

��zQueryModule.process_requestzrm_filter_\d+_(.+)_(\d+)$z
add_(\d+)$Ncst|j����t|j���}dd��D��ddi�d<���fdd�|��D��g}|du�rQi}|jD],}|j�|�}|ra|�	d�}�|ddkrOd	}	nt
|�	d
��}	|	||d|�d��<q5d}
i}|jD]�}|j�|�}|ry|�	d�}
qit
j�|�}|s�qi|�	d�}t
|�	d
��}|�vr�qit|j�|��}
|
r�|j�|d���r��fdd�|
D�}
�|ddkr�|j�|d�}|r�dd�t|
|�D�}
||vr�||}d|kr�t|
�kr�nn|
|=|
s�qinqi|�||�}|�|i�}|�|g��|
�qi|
du�rC|j�d|
|j�d|
��}|�rC|�v�rC|�t
|
�i�}t
����|d�}|�r8|ddnd�|�|g����|�dd�t|���D��|�i�|�p[|jD]!\}}|dk�rl|�i��q\|�v�r||d	�|g��|��q\ttd|��}|S)NcSsi|]}|d|�qSrSr<rOr<r<r=�
<dictcomp>�rz0QueryModule._get_constraints.<locals>.<dictcomp>rLrUc3s �|]\}}|�|fVqdSr�r<)rPr�r:r�r<r=r��s�z/QueryModule._get_constraints.<locals>.<genexpr>rE�radior�r��
r�r~�_modecsg|]}�|�qSr<r<rr�r<r=rZrTz0QueryModule._get_constraints.<locals>.<listcomp>rM�_endcSsg|]
\}}|d|�qS)rr<)rPr)r*r<r<r=rZ"s�r�add_filter_�add_clause_r�rIcss�|]}|dVqdS)rENr<rr<r<r=r�7rr�)r
r^rrrbr�rxr��	remove_re�matchrfrmr*�add_rerCr�r�r�rcr�r�rxr�rSrqrwr�r�)rBr�r�r}r,�remove_constraintsr�r�r��index�add_numra�
clause_numr��endsr�r~rRr�r<)rsr�r=r��s�


�


���
�


�zQueryModule._get_constraintsc
Cs�d}tt�}|j�dd�}t�|t�}t|j�}zB||j�d�ks*||t	dd�krB|�
|�}||jd<d�dd�|D��|jd	<nd
d�|j�d	d���D�}|j
||d
�}|}Wnt
yy}zg}|jD]}	t||	�qgWYd}~nd}~wwt|d�}
|j�dd�}|r�t|j��|�|�|
||||�}|�|
j�|jd<t|�|jd<d�dd�|D��|jd	<td�}
td|j�}d|�|�v�r|j��|d<t|td�|j���t|td�|j� ��t|jd�}|du�r|j�!d|f�D]\}
}||d<||d<q�nd|d<|�"dd�|�"dd�|
|d<|�#�|d<|d�$d�|�%�|d<dd �|d!�&�D�}t'|||d"d#�t(|d$�t)|j��*|�t+|d%�d&|fS)'Nr�rr�rE)�hours� cs��|]	}t|d�VqdS�rUNrC�rP�tr<r<r=r�Qr�z+QueryModule.display_html.<locals>.<genexpr>r�cSrr<)rmrDr<r<r=rZTrTz,QueryModule.display_html.<locals>.<listcomp>rI)r�r�rX�
query_hrefcsr�r�rCr�r<r<r=r�er�zCustom Queryr{r��report_hrefzAvailable ReportszNew Custom Queryzc
                        SELECT title, description FROM report WHERE id=%s
                        �report_resourcerKrq�all_columnsrU�
all_textareascs$i|]\}�|�fdd�dD��qS)csi|]}|�vr|�|�qSr<r<�rPr��r�r<r=r��s
�z7QueryModule.display_html.<locals>.<dictcomp>.<dictcomp>)rLrUr\re�optionalrhr<)rPrNr<r�r=r��s
�
�z,QueryModule.display_html.<locals>.<dictcomp>rsrR)�
propertiesrR�common/css/report.csszcommon/js/query.jsz
query.html),rrr�rr�
fromtimestamprrarcrr�r&r�r>rAr1r3rsr�r
r^�eventually_restrict_ownerr�r�r�rr"rrUr`r{r,r�r�rxr�r�r�rxr/r0r+�
add_jquery_uir.)rBr�r�r�r�r�r�rur�errorrV�owner_field�datarqr�r�rKr�r<r<r=r�Ds~



���
���

�
�
�

zQueryModule.display_htmlr��
text/plaincs ����fdd�}|�d|fS)Nc
3s��t���tjtj�dddd��tjd����fdd�}dVt��t�j��	����
�}|�fd	d
�|D��VWd�n1sDwYt�j�}t��}��
��}tdd
��jD��}|D]a}t�j|d�}d
��|�vr�g}|D]F}	||	}
|�|	�}|	dvr�|�|�|�|
�}
n(|	�jvr��j�|	��d�}|
r�t�t||
�nd}
n|r�|ddkr�|
r�dnd}
|�|
�qx||�VqcdS)Nzutf-8�
T)�encoding�newline�
write_through)�	delimiter�quotingcs0��tt|�����}��d���d�|S)Nr)�writerowrFr�getvalue�truncate�seek)r��rv)�out�writerr<r=r��s


z:QueryModule._export_csv.<locals>.iterate.<locals>.writerowsc3r�r�r�r�)rWr<r=r��r�z;QueryModule._export_csv.<locals>.iterate.<locals>.<genexpr>css�|]	}|d|fVqdS)rNNr<rOr<r<r=r��r�rUr�)r�rXr�rhrIrLr��1rE)�io�BytesIOr�r��
TextIOWrapper�
QUOTE_MINIMALrr
r^ryr�r+r3r�r`rsrr�r`rc�
format_emails�childrtr�rrrq)
r�ru�chromerVr�rsr�r�r�rr�r�rh�r�r�rB�sep)rWr�r�r=�iterate�sX����


�
���
��z(QueryModule._export_csv.<locals>.iteratez%s;charset=utf-8r<)rBr�r�rr�rr<rr=r��s,zQueryModule._export_csvcCsjt|ddd�}|�|j�}d|jvr|j�d�|�|�}|||d�}t|j��|d|ddd��}|dfS)	Nr�T)�absurlsrK)rVr�r�z	query.rssr�)�content_type�iterable)	r3r�r�rvrqr�r+r^�render_template)rBr�r�rVr�r�r��outputr<r<r=r��s

���zQueryModule._export_rsscCsgSr�r<r�r<r<r=�get_wiki_syntax�r�zQueryModule.get_wiki_syntaxccs�d|jfVdS)Nr�)�_format_linkr�r<r<r=�get_link_resolvers�s�zQueryModule.get_link_resolversc
Cs�|�d�rt|�}tj|d|j��|d�Szt�|j|�}tj||�	|j
j�dd�WStyJ}ztjt
dt|�d�dd�WYd}~Sd}~ww)	Nr�r�)�class_r�)r�rz[Error: %(error)s])r�r��r)r#r!rr?r�r�rCr�r^r�rVr7�emr"r)rB�	formatter�nsr�rUrr<r<r=r
�s"
�����zQueryModule._format_link)r�r�) r8r9r:�
implementsr(r*r4r
r
r�rr�r�rrkr�r�r�r�r�r�rr�r�r�r�r�r�r�rrr
r<r<r<r=rjXs>����
Y
Q
M/rjc@sDeZdZdZed�Ze�d�Ze	j
Z
edd��Zdd�Z
dd	�Zd
S)�TicketQueryMacro�messagesa�
Wiki macro listing tickets that match certain criteria.

    This macro accepts a comma-separated list of keyed parameters,
    in the form "key=value".

    If the key is the name of a field, the value must use the syntax
    of a filter specifier as defined in TracQuery#QueryLanguage.
    Note that this is ''not'' the same as the simplified URL syntax
    used for `query:` links starting with a `?` character. Commas (`,`)
    can be included in field values by escaping them with a backslash (`\`).

    Groups of field constraints to be OR-ed together can be separated by a
    literal `or` argument.

    In addition to filters, several other named parameters can be used
    to control how the results are presented. All of them are optional.

    The `format` parameter determines how the list of tickets is
    presented:
     - '''list''' -- the default presentation is to list the ticket ID next
       to the summary, with each ticket on a separate line.
     - '''compact''' -- the tickets are presented as a comma-separated
       list of ticket IDs.
     - '''count''' -- only the count of matching tickets is displayed
     - '''rawcount''' -- only the count of matching tickets is displayed,
       not even with a link to the corresponding query (//since 1.1.1//)
     - '''table'''  -- a view similar to the custom query view (but without
       the controls)
     - '''progress''' -- a view similar to the milestone progress bars

    The `max` parameter can be used to limit the number of tickets shown
    (defaults to '''0''', i.e. no maximum).

    The `order` parameter sets the field used for ordering tickets
    (defaults to '''id''').

    The `desc` parameter indicates whether the order of the tickets
    should be reversed (defaults to '''false''').

    The `group` parameter sets the field used for grouping tickets
    (defaults to not being set).

    The `groupdesc` parameter indicates whether the natural display
    order of the groups should be reversed (defaults to '''false''').

    The `verbose` parameter can be set to a true value in order to
    get the description for the listed tickets. For '''table''' format only.
    ''deprecated in favor of the `rows` parameter''

    The `rows` parameter can be used to specify which field(s) should
    be viewed as a row, e.g. `rows=description|summary`

    The `col` parameter can be used to specify which fields should
    be viewed as columns. For '''table''' format only.

    For compatibility with Trac 0.10, if there's a last positional parameter
    given to the macro, it will be used to specify the `format`.
    Also, using "&" as a field separator still works (except for `order`)
    but is deprecated.
    z(?<!\\),c
CsTig}g}i}tj�|p
d�D]E}|�dd�}t�d|�}|rC|d|��d���}||��d�}|dvr<|||<q||d|<q|��d	krO|�i�q|�|�qt	t
d|��}t|�d
krld|vrl|d
|d<d|vrtd
|d<d|vr|d|d<|�dd����
�}|dvr�d|vr�d|d|d<nd|d<d�dd�|D��}	|	||fS)z;Parse macro arguments and translate them to a query string.rIz\,r�z	\s*[^=]+=NrE)rdrJrhrr�r�rrhrdrUrJrEr�)r��compactrzstatus|summary|zstatus|summaryz&or&c3s,�|]�d��fdd�t��D��VqdS)r�c3� �|]}d|�|fVqdS�z%s=%sNr<r�r�r<r=r�Q���z8TicketQueryMacro.parse_args.<locals>.<genexpr>.<genexpr>N)r&rw)rPr<r�r=r�Qs���z.TicketQueryMacro.parse_args.<locals>.<genexpr>)r�_comma_splitterr�r�rr�r*rrqr�r�r�ryrfr&)
�contentr,�argv�kwargsrrcr�r�rhr�r<r<r=�
parse_args-s>

�
zTicketQueryMacro.parse_argsc
s\�j���|�\��}�r�d7��d��fdd�t��D��7�z	t��j���Wnty;}zt|�|�d}~ww|dvrj��	��}t
dd|��dd�d�}|d	kr]tj
||d
d�Stj|���jj�|d�Sz�����Wnty�}zt|�|�d}~ww|d
kr��j�j��jjd�}t�d�t�j���d|�S|dk�r'ddlm}	m}
m}m}t�d�d5���fdd�	�t�j�}
|
�j����|	�j�j}�j}|s�||��}|�|j��fdd�|j D�dd�}tj!|
��d|�dd�S�fdd�}|�j|�||�}�j"�r|�#�||t$d |d!�d"�}tj!|
��d#|�d$d�S��fd%d��D����s=tj
t$d&�d'd�S�fd(d)�������fd*d+�}|d,k�r��j�rnd-d�|�D�}t|dd.d�|d/d�D��S�fd0d��D�}tj
|dgd1d�|d/d�D��R�S�j�r�t�!��fd2d�|�D��St�!tj%�fd3d��D�d4d��S)6Nr�c3rrr<r�)rr<r=r�\rz0TicketQueryMacro.expand_macro.<locals>.<genexpr>)r��rawcountz$%(num)s ticket matching %(criteria)sz%%(num)s tickets matching %(criteria)s�, )�criteriar �query_count)rqr)r�rq�table�r�r�zquery_results.html�progressr)�
RoadmapModule�apply_ticket_permissions�get_ticket_stats�grouped_stats_datazcommon/css/roadmap.csscs��d��fdd��D��}t��j|�}i}|jr"|||j<d|_��d�|_d�vr2�d|d<|jD]}|�|�q5|jsF|j�	|�|�
�jj�S)NrIc3s2�|]}|dvr�|D]	}d||fVqqdS))rfr�z&%s=%sNr<)rPr�r:��
extra_argsr<r=r��s��
��zDTicketQueryMacro.expand_macro.<locals>.query_href.<locals>.<genexpr>rrfr�)
r&rCr�r^rfrgrcrar�rqr�rVr�)r,�group_value�qr�r�)rr�rBr+r=r��s 
�

z1TicketQueryMacro.expand_macro.<locals>.query_hrefcsg|]}�|d��qS��qry_argsr<�rP�interval�r�r<r=rZ�r^z1TicketQueryMacro.expand_macro.<locals>.<listcomp>T)�stats�
stats_href�interval_hrefs�legendzprogress_bar.htmlz
trac-progressrcs6|�|j����fdd�|jD�d|j|jfdd�S)Ncsg|]	}�|d���qSr/r<r1)�
group_namer�r<r=rZ�s
��zOTicketQueryMacro.expand_macro.<locals>.per_group_stats_data.<locals>.<listcomp>z%d / %dF)r4r5r6�percentr7)r0�	intervals�
done_countr�)�gstatr8r3)r8r=�per_group_stats_data�s
���z;TicketQueryMacro.expand_macro.<locals>.per_group_stats_dataz+Ticket completion status for each %(group)s�rf)rj�
grouped_byr�zprogress_bar_grouped.htmlztrac-groupprogresscs&g|]}d���j|d�vr|�qS)r�rU)r`r�r�r[r<r=rZ�s�z
No results�query_no_resultscs6tjd|d|d�j�t|d��t|d�d�S)N�#%srUr�r�)rr�rq)rr?r�r�rmr )r�r%r<r=�
ticket_anchor�s

�z4TicketQueryMacro.expand_macro.<locals>.ticket_anchorcs�g}t��fdd��D]G\}}t��j��}d|_|_|j}d|_td|�j|��d�}|j	D]	}||t
�j�<q0||_|��jj
�}|�|dd�|D�||f�q|S)Ncs
|�jSr�r>)r�)r�r<r=�<lambda>�s
zFTicketQueryMacro.expand_macro.<locals>.ticket_groups.<locals>.<lambda>z7%(groupvalue)s %(groupname)s tickets matching %(query)s)�
groupvalue�	groupnamer�cSsg|]}|�qSr<r<r�r<r<r=rZ�szHTicketQueryMacro.expand_macro.<locals>.ticket_groups.<locals>.<listcomp>)rrCr�r^rfrgrdr"r�rarr�rVr�rq)rjr:�gr.rdrqr�r�)rr�r�rBrur<r=�
ticket_groups�s �
z4TicketQueryMacro.expand_macro.<locals>.ticket_groupsrc
Ss@g|]\}}}}|dtjdd�dd�|D��|d|d�f�qS)r�rAu,​csr�r�rCr�r<r<r=r��r�z;TicketQueryMacro.expand_macro.<locals>.<listcomp>.<genexpr>r��r�rrq)rr?r&�rPr:rFr�rqr<r<r=rZ�s
����cS�g|]}d|f�qS�r!r<)rPrFr<r<r=rZ�rTrEcsg|]}�|��qSr<r<�rPr��rBr<r=rZ�rTcSrJrKr<)rPr?r<r<r=rZ�rTcsTg|]&\}}}}t�tdtj||d|d��jd��tj�fdd�|D�dd�f�qS)z%%(groupvalue)s %(groupname)s tickets:r�rH)rDrEc�(g|]}t��|��t�|d�f�qS�r��r�dt�ddr�rMr<r=rZ�s
��z<TicketQueryMacro.expand_macro.<locals>.<listcomp>.<listcomp>�wiki compactr)rrrr%r?rf�dlrI)r�rBr<r=rZ�s
�
�����crNrOrPrLrMr<r=rZ�s
��rSr�)&r�rr&rwrCr�r^r7r5r�r$r�r�spanr?r�rVr�r�r>r�r0r+�render_fragment�trac.ticket.roadmapr'r(r)r*�stats_providerrfr0r:�divrg�reverser"rT)rBrrNrrhrr�rqr�r'r(r)r*rrX�by�statr=rjrG�alistr<)	rrr�r�r�r�rBrBrur=�expand_macroVs�
�
��

��
��
�
�




�������
� (��
��zTicketQueryMacro.expand_macrocCs|�|�\}}}|dvS)N)rr�r )r)rBrr�rrhr<r<r=�	is_inline�szTicketQueryMacro.is_inlineN)r8r9r:�_domainr#�_descriptionrr�rr
r�r�rr^r_r<r<r<r=r�s�
>
()r)Vrr�	itertoolsrr{�mathrr�r�r�trac.configrr�	trac.core�trac.dbr	�trac.mimeview.apir
r�
trac.resourcer�trac.ticket.apir
r�trac.ticket.modelrrrWr�	trac.utilrrr�trac.util.datefmtrrrrrrrr�trac.util.htmlr�trac.util.presentationr�trac.util.textrr r!�trac.util.translationr"r#r$r%�trac.webr&r'r(�
trac.web.hrefr)�trac.web.chromer*r+r,r-r.r/r0r1r2r3�
trac.wiki.apir4�trac.wiki.formatterr5�trac.wiki.macrosr6r?r7r>�objectrC�	Componentrjrr<r<r<r=�<module>sR(0

https://t.me/RX1948 - 2025