B
    .l\t                 @   s   d dl mZ d dlZddlmZ ddlmZ yd dlZW n ek
rT   d dl	ZY nX dd Z
dd	d
dZdd ZedZedZdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    )unicode_literalsN   )Metric)Samplec             c   s"   xt t| D ]
}|V  qW dS )z]Parse Prometheus text format from a unicode string.

    See text_fd_to_metric_families.
    N)text_fd_to_metric_familiesStringIO)textZmetric_family r	   7lib/python3.7/site-packages/prometheus_client/parser.pytext_string_to_metric_families   s    r   \
")z\\z\nz\"c             C   s   t | d S )Nr   )ESCAPE_SEQUENCESgroup)matchr	   r	   r
   replace_escape_sequence"   s    r   z\\[\\n]z\\[\\n"]c             C   s   t t| S )N)HELP_ESCAPING_REsubr   )sr	   r	   r
   _replace_help_escaping*   s    r   c             C   s   t t| S )N)ESCAPING_REr   r   )r   r	   r	   r
   _replace_escaping.   s    r   c             C   s:   d}x(||kr,| |d |  dkr,|d7 }qW |d dkS )Nr   r   r      r	   )r   ZcharposZnum_bslashesr	   r	   r
   _is_character_escaped2   s
    
r   c             C   s0  i }d| kr|S d}d| kr d}| }yx|r| d}|d | }||d d   }| dd }||d  }d}x0|t|k r| d|}t||sP |d7 }qxW |d }	|||	 }
|rt|
}
|
|| < ||	d d  }|dd }||d   }q(W |S  tk
r*   td	|  Y nX d S )
N=Fr   Tr   r   r   ,zInvalid labels: %s)indexlstriplenr   r   stripfind
ValueError)Zlabels_stringlabelsZescapingZ
sub_labelsZvalue_startZ
label_nameZquote_startZvalue_substriZ	quote_endZlabel_valueZ
next_commar	   r	   r
   _parse_labels:   s>    

r%   c             C   s:   |   } d}|| krd}| |}|dkr.| S | d | S )N 	)r   r!   )r   	separatorr$   r	   r	   r
   _parse_valuem   s    
r*   c             C   s   y^|  d| d }}| d |  }| |d | }tt| |d d  }t|t||S  tk
r   d}|| kr~d}|  |}| d | }tt| |d  }t|i |S X d S )N{}r   r   r&   r'   )r   rindexr    floatr*   r   r%   r"   )r   Zlabel_startZ	label_endnameZlabelvaluer)   Zname_endr	   r	   r
   _parse_samplex   s    
r1   c       	      #   s  d d}d}g }g }dd }x| D ]}|  }|drL|dd}t|dk rXq$|d	 d
kr|d  kr dkr| |||V  |d  d}g }|d g}t|dkrt|d }nd}n|d	 dkr|d  kr dkr| |||V  |d  d}g }|d }dgdgdddgdddgd|dg} fdd|D }n q$|dkrXq$t|}|j|kr dkr| |||V  d d}d}g }g }||d |||gV  q$|| q$W  dkr| |||V  dS )zParse Prometheus text format from a file descriptor.

    This is a laxer parser than the main Go parser,
    so successful parsing does not imply that the parsed
    text meets the specification.

    Yields Metric's.
     Zuntypedc             S   sp   |dkrZ|  dr | d d } n:g }x4|D ],}|t|d d f|dd    |}q*W t| ||}||_|S )NcounterZ_totalir   r   )endswithappendr   r   samples)r/   documentationtypr6   Znew_samplesr   Zmetricr	   r	   r
   build_metric   s    

$z0text_fd_to_metric_families.<locals>.build_metric#N   r   r   ZHELP   ZTYPE_countZ_sumZ_bucket)r3   ZgaugeZsummaryZ	histogramc                s   g | ]} | qS r	   r	   ).0n)r/   r	   r
   
<listcomp>   s    z.text_fd_to_metric_families.<locals>.<listcomp>r   )	r    
startswithsplitr   r   getr1   r/   r5   )	fdr7   r8   r6   Zallowed_namesr9   linepartsZsampler	   )r/   r
   r      sj    	




r   )Z
__future__r   reZmetrics_corer   r6   r   r   ImportErrorior   r   r   compiler   r   r   r   r   r%   r*   r1   r   r	   r	   r	   r
   <module>   s*   


3