U
    d+                     @   s@   d dl Z d dlmZ dd Zdd Zdd Zd	d
 Zdd ZdS )    N)safe_strc              	   C   sD  d}| si S i }t || D ] }|s(q|drLt|tdd  |d< q|drd|krfg |d< |d t|tdd   q|drd|kri |d< z(dd	 |tdd  d
D \}}W n tk
r   Y qY nX t||d |< q|dr2d|krg |d< |d t|tdd   qt||d< q|S )Nz(?:[^\s,"]|"(?:\\.|[^"])*")+zresult:resultzargs:argszkwargs:kwargsc                 S   s   g | ]}|  qS  strip).0pr   r   7/tmp/pip-unpacked-wheel-3pokl8eb/flower/utils/search.py
<listcomp>   s     z&parse_search_terms.<locals>.<listcomp>=statezstate:any)refindall
startswithpreprocess_search_valuelenappendsplit
ValueError)Zraw_search_valueZsearch_regexpZparsed_searchZ
query_partkeyvaluer   r   r   parse_search_terms   s6    

 
(

 r   c                    s   | d}| d}| d}| d}| d}t|||||gsHdS |oT j|k|o|dtd  j j j jr| jjnd  j	 j
t jgk|o jo| jk|ot fdd	| D |ot j	|g}t|S )
Nr   r   r   r   r   T|c                 3   s    | ]\}}t || jV  qd S N)stringified_dict_contains_valuer   )r	   kvtaskr   r   	<genexpr>6   s    z)satisfies_search_terms.<locals>.<genexpr>)getr   r   joinfilternameuuidZworkerhostnamer   r   r   r   allitemstask_args_contains_search_args)r!   Zsearch_termsZany_value_search_termZresult_search_termZargs_search_termsZkwargs_search_termsZstate_search_termsZtermsr   r    r   satisfies_search_terms%   s.    





  r,   c                 C   s   |sdS t |}z|| t|  d }W n tk
r@   Y dS X z|d|}W n  tk
rr   |d|}Y nX t |||| dkS )zChecks if dict in for of string like "{'test': 5}" contains
    key/value pair. This works faster, then creating actual dict
    from string since this operation is called for each task in case
    of kwargs search.F   ,}z"')strindexr   r   r   )r   r   Zstr_dictZ	key_indexZcomma_indexr   r   r   r   >   s    r   c                 C   s   | r|  dS dS )Nz"  r   )Z	raw_valuer   r   r   r   S   s    r   c                    s    sdS t  fdd|D S )NFc                 3   s   | ]}| kV  qd S r   r   )r	   a	task_argsr   r   r"   Z   s     z1task_args_contains_search_args.<locals>.<genexpr>)r)   )r5   Zsearch_argsr   r4   r   r+   W   s    r+   )r   Zkombu.utils.encodingr   r   r,   r   r   r+   r   r   r   r   <module>   s   