
    *1f                         d dl Z d dlmZmZmZ d dlmZmZ d dlZ e j	        e
          Z G d d          Z G d d          ZdS )    N)AnyListOptional)	constants
interfacesc                   r    e Zd Zdee         fdZdej        j        dee         fdZ	dee
         defdZdS )		CLIFilterfiltersc                 <    |                      ||          | _        d S N)_prepare_filters)selftreegridr
   s      M/home/panchajanya/Development/work/volatility3/volatility3/cli/text_filter.py__init__zCLIFilter.__init__
   s    h88    r   c           	         g }|D ];}d}d}d}d}|                     d          rd}|dd         }n|                     d          r
|dd         }|                    d          }	t          |	          dk     r	|	d	         }n%|	d	         }d                    |	dd                   }|r!|                    d
          rd}|dd         }d}
|rKt          |j                  D ]6\  }}|                                |j                                        v r|}
 n7|r%|	                    t          |
|||                     =t                              t          j        dt          |          z              |S )zHRuns through the filter strings and creates the necessary filter objectsFN-T   +,   r   !z	Filters:
)
startswithsplitlenjoinendswith	enumeratecolumnslowernameappendColumnFiltervolloglogr   LOGLEVEL_VVVrepr)r   r   r
   outputfilterexcluderegexpatterncolumn_name
components
column_numnumcolumns                r   r   zCLIFilter._prepare   s    	Q 	QFGEGK  %% $""3'' $c**J:""$Q-(m((:abb>22 '7++C00 '!#2#,J #,X-=#>#>  KC"((**fk.?.?.A.AAA%(
 B  Ql:wwOOPPP

9)<$v,,+FGGGr   rowreturnc                 \    | j         sdS t          fd| j         D                       }| S )z3Filters the row based on each of the column_filtersFc                 :    g | ]}|                               S  )found).0column_filterr5   s     r   
<listcomp>z$CLIFilter.filter.<locals>.<listcomp>8   s'    QQQ-]((--QQQr   )r   anyr   r5   r:   s    ` r   r,   zCLIFilter.filter1   s@    
 } 	5QQQQ4=QQQRRyr   N)__name__
__module____qualname__r   strr   r   	renderersTreeGridr   r   boolr,   r9   r   r   r	   r	   	   s        9$s) 9 9 9 9"!5!> "c " " " "H#Y 
     r   r	   c                   p    e Zd Z	 	 ddee         dedededdf
dZdefd	Zd
e	e
         defdZdefdZdS )r&   Fr2   r/   r.   r-   r6   Nc                 >    || _         || _        || _        || _        d S r   )r2   r/   r-   r.   )r   r2   r/   r.   r-   s        r   r   zColumnFilter.__init__=   s$     %


r   c                 ~    	 | j         rt          j        | j        |           S | j        | v S # t          $ r Y dS w xY w)z=Identifies whether an item is found in the appropriate columnF)r.   researchr/   IOError)r   items     r   findzColumnFilter.findI   sX    	z :y$y999<d9,, 	 	 	55	s   !. 	. 
<<r5   c                       j         t           fd|D                       }n                      | j                            } j        r| S |S )zDetermines whether a row should be filtered

        If the classes exclude value is false, and the necessary pattern is found, the row is not filtered,
        otherwise it is filtered.
        Nc                 :    g | ]}                     |          S r9   )rN   )r;   xr   s     r   r=   z&ColumnFilter.found.<locals>.<listcomp>Y   s#    333!1333r   )r2   r>   rN   r-   r?   s   `  r   r:   zColumnFilter.foundR   s`     ?"3333s33344EEIIc$/233E< 	9r   c           	      H    d| j          d| j         d| j         d| j         d	S )z$Returns a display of a column filterzColumnFilter(column=z	,exclude=z,regex=z	,pattern=))r2   r-   r.   r/   )r   s    r   __repr__zColumnFilter.__repr__`   s7    ydoyyyyUYU_yyjnjvyyyyr   )FF)r@   rA   rB   r   intrC   rF   r   rN   r   r   r:   rT   r9   r   r   r&   r&   <   s        
 
 
SM
 
 	

 
 

 
 
 
D    c t    z# z z z z z zr   r&   )loggingtypingr   r   r   volatility3.frameworkr   r   rJ   	getLoggerr@   r'   r	   r&   r9   r   r   <module>rZ      s     & & & & & & & & & & 7 7 7 7 7 7 7 7 						8	$	$0 0 0 0 0 0 0 0f&z &z &z &z &z &z &z &z &z &zr   