U
     e"                     @   sN   d dl Z ddlmZ ddlmZ ddlmZ G dd deZG dd	 d	ZdS )
    N   )jqlLexer)jqlListener)	jqlParserc                &       s  e Zd Zddddgdddidd	dd
dgdddiddiddddgdddiddidd	dd
dgdddiddiddiddiddddgdddddgdddddgdddddgdddiddddddgdddiddiddid d	dd
dgddd!idd!id"dddgdd#d$ddgdddidd%idd&ddgddd&ddgddd'idd'id(d	dd
dgdd)"Zd= fd,d-	Zd.d/ Zd0d1 Zejd2d3d4Z	ej
d2d5d6Zejd2d7d8Zejd2d9d:Zejd2d;d<Z  ZS )>JQLZaffected_versionsZCmfListZext_idname)fieldmodel	search_byr   Zapprovers_forZresponsibleZ	CmfPersonZemailattachmentsZcommentsZ
componentsZCmfComponentZcmf_created_atZ	cmf_ownertextZdeadlineZfix_versionscodeZCmfTaskZtagsZCmfTagaliasZparent_taskpriorityparentZ
CmfProjectZtask_code_prefixZ
logic_typez&timetracker_history.remaining_estimateZ
cmf_authorZstatus_closed_atZlistsstatusZ	CmfStatusztimetracker_history.time_spentZCmfLogicTypeZcmf_modified_atZ
spectators)"ZaffectedVersionZ	approvalsZassigneer   ZcommentZ	componentZcreatedZcreatedDateZcreatordescriptionZdueZdueDateZenvironmentZ
fixVersionZissueKeylabelsr   r   ZprojectZprojectTypeZremainingEstimateZtimeEstimateZreporterZresolvedZresolutionDateZsprintr   ZsummaryZ	timeSpenttypeZ	issueTypeupdatedZupdatedDateZwatcherFNc                    s*   t    || _i | _i | _|p"i | _d S N)super__init___replacement_modequeryclausevalues)selfmoder   	__class__ ./modules/jira/jql/parser.pyr      s
    
zJQL.__init__c                 C   s"   |j j }|jj}|j  ||S r   )startstopZgetInputStreamgetText)r   ctxr#   r$   r!   r!   r"   get_text   s    zJQL.get_textc                 C   sJ   g }|j D ]4}t|tjjjr.||  q
|| | q
d	|S )N )
Zchildren
isinstanceantlr4treeZTreeZTerminalNodeappendr%   get_full_textjoin)r   r&   r   Zchildr!   r!   r"   r-      s    
zJQL.get_full_text)r&   c                 C   sN   i | j |< |  | |f| j | d< | || j | d< | j || _ d S )Nr   normalized_query)r   ZremoveLastChildr'   r-   popr   r&   r!   r!   r"   exitJqlQuery   s
    
zJQL.exitJqlQueryc                 C   s   d|  |i| j|< d S )NZencodedClause)r'   r   r1   r!   r!   r"   enterJqlTerminalClause   s    zJQL.enterJqlTerminalClausec                 C   s6   | j | }| j|jr2|r2|| j|j d< d S )Nsuitable)mappinggetr%   r   	parentCtx)r   r&   Zsuitable_fieldr!   r!   r"   enterJqlNonNumberField   s    zJQL.enterJqlNonNumberFieldc                 C   s   | j sd }|j}|d krq>q| j|r6| j| }q>q|j}q|dr|di dr|d d|d d|d d| ddddd| j| < d S )	Nr4   r	   r   r
   ' ")Z
task_fieldr	   r
   value)r   r7   r   r6   r%   replacer   getSourceInterval)r   r&   r   r   r!   r!   r"   enterJqlValue   s    
zJQL.enterJqlValuec                 C   s^   |  r0|  jjtjkr0d| | d|j_| jrZ| j	
| }|rZd| d|j_d S )Nr;   )Z	jqlStringr<   r   r   STRINGr'   r#   r   r   r   r6   r>   )r   r&   r<   r!   r!   r"   exitJqlValue   s    zJQL.exitJqlValue)FN)__name__
__module____qualname__r5   r   r'   r-   r   ZJqlQueryContextr2   ZJqlTerminalClauseContextr3   ZJqlNonNumberFieldContextr8   ZJqlValueContextr?   rA   __classcell__r!   r!   r   r"   r      s   

 x
	r   c                   @   s6   e Zd ZedddZdddZddd	Zd
d ZdS )JQLNormalizer)jqlc                 C   s
   || _ d S r   )_jql)r   rG   r!   r!   r"   r      s    zJQLNormalizer.__init__FNc           
      C   sP   t | j}t|}t |}t|}| }t||}t  }	|		|| |S r   )
r*   ZInputStreamrH   r   ZCommonTokenStreamr   ZjqlQueryr   ZParseTreeWalkerwalk)
r   r   r   Zinput_streamZlexerstreamparserr+   ZlistenerZwalkerr!   r!   r"   _get_loader   s    

zJQLNormalizer._get_loaderc                 C   s   | j d|d}|jd S )NT)r   r   r/   )rL   r   )r   r   loaderr!   r!   r"   
set_values   s    zJQLNormalizer.set_valuesc                 C   s   | j dd}|jS )NF)r   )rL   r   )r   rM   r!   r!   r"   
get_values   s    zJQLNormalizer.get_values)FN)N)rB   rC   rD   strr   rL   rN   rO   r!   r!   r!   r"   rF      s   

rF   )r*   r   r   r   r   rF   r!   r!   r!   r"   <module>   s    A