o
    );c                     @   s   d dl Zd dlZddlmZ ddlmZ 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 )    N   )Metric)Samplec                 c   s    t t| E dH  dS )z]Parse Prometheus text format from a unicode string.

    See text_fd_to_metric_families.
    N)text_fd_to_metric_familiesStringIO)text r   c/Users/cmarchbanks/go/src/github.com/prometheus/client_python/build/lib/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      t t| S N)HELP_ESCAPING_REsubr   sr   r   r	   _replace_help_escaping      r   c                 C   r   r   )ESCAPING_REr   r   r   r   r   r	   _replace_escaping#   r   r   c                 C   sP   d}||kr"| |d |  dkr"|d7 }||kr"| |d |  dks|d dkS )Nr   r   r      r   )r   ZcharposZnum_bslashesr   r   r	   _is_character_escaped'   s   r   c                 C   s(  i }d| vr|S d}d| v rd}| }zt|r| d}|d | }||d d   }| dd }||d  }d}|t|k rU| d|}t||sKn
|d7 }|t|k s?|d }	|||	 }
|ret|
}
|
|| < ||	d d  }|dd }||d   }|s|W S  ty   td	|  w )
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/   sD   

r(   c                 C   sp   |   } d}|| vrd}dd | |D }|st| d fS t|d }t|dkr2t|d d nd }||fS )	N 	c                 S   s   g | ]
}|  r|  qS r   )r#   ).0valuer   r   r	   
<listcomp>g   s    z._parse_value_and_timestamp.<locals>.<listcomp>r   r   i  )r!   splitfloatr"   )r   	separatorvaluesr,   	timestampr   r   r	   _parse_value_and_timestampb   s    r4   c           	      C   s   z1|  d| d}}| d |  }| |d | }t| |d d  \}}t|t|||W S  ty^   d}|| vr@d}|  |}| d | }t| |d  \}}t|i || Y S w )N{}r   r   r)   r*   )r    rindexr#   r4   r   r(   r%   )	r   Zlabel_startZ	label_endnamelabelr,   r3   r1   Zname_endr   r   r	   _parse_sampleo   s   
r:   c           	      #   s   d d}d}g }g }dd }| D ]}|  }|dr|dd}t|dk r)q|d	 d
kr^|d  krN dkrA| |||V  |d  d}g }|d g}t|dkr[t|d }qd}q|d	 dkr|d  kr~ dkrv| |||V  |d  d}g }|d }dgdgg dg dd|dg} fdd|D }q	 q|dkrqt|}|j|vrЈ dkr| |||V  d d}d}g }g }||d |||gV  q|| q dkr| |||V  dS 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.
     untypedc                 S   sn   |dkr,|  dr| d d } ng }|D ]}|t|d d g|dd  R   |}qt| ||}||_|S )Ncounter_totalir   r   )endswithappendr   r   samples)r8   documentationtyprA   Znew_samplesr   metricr   r   r	   build_metric   s   
&z0text_fd_to_metric_families.<locals>.build_metric#N   r   r   ZHELP   ZTYPE)_count_sumr;   )rI   rJ   _bucket)r=   gaugesummary	histogramc                    s   g | ]} | qS r   r   )r+   nr8   r   r	   r-      s    z.text_fd_to_metric_families.<locals>.<listcomp>r   )	r#   
startswithr/   r"   r   getr:   r8   r@   )	fdrB   rC   rA   Zallowed_namesrE   linepartssampler   rP   r	   r      sr   	



r   )ior   remetrics_corer   rA   r   r
   r   r   compiler   r   r   r   r   r(   r4   r:   r   r   r   r   r	   <module>   s&    	

3