o
    pf
                     @   s6  d dl Zd dlZd dlmZmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZ dedee fdd	Zd
dddZdee defddZedZedZdedefddZdedefddZdededefddZdedeeef fddZdede
eee f fddZdedefd d!Zd"e	dee fd#d$ZdS )%    N)DictIterableListMatchOptionalTextIOTuple   )Metric)Sampletextreturnc                 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)r    r   Q/home/ertert/spirit/venv/lib/python3.10/site-packages/prometheus_client/parser.pytext_string_to_metric_families	   s   r   \
")z\\z\nz\"matchc                 C   s   t | d S )Nr   )ESCAPE_SEQUENCESgroup)r   r   r   r   replace_escape_sequence   s   r   z\\[\\n]z\\[\\n"]sc                 C      t t| S N)HELP_ESCAPING_REsubr   r   r   r   r   _replace_help_escaping       r    c                 C   r   r   )ESCAPING_REr   r   r   r   r   r   _replace_escaping$   r!   r#   charposc                 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   r$   num_bslashesr   r   r   _is_character_escaped(   s   r'   labels_stringc                 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)r(   labelsescaping
sub_labelsvalue_start
label_namequote_startvalue_substri	quote_endlabel_value
next_commar   r   r   _parse_labels0   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>h   s    z._parse_value_and_timestamp.<locals>.<listcomp>r   r	   i  )r,   splitfloatr-   )r   	separatorvaluesr@   	timestampr   r   r   _parse_value_and_timestampc   s    rH   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+   rindexr.   rH   r   r<   r0   )	r   label_start	label_endnamelabelr@   rG   rE   name_endr   r   r   _parse_samplep   s   
rQ   fdc           	   
   #   s   d d}d}g }g }dt dt dt dtt dtf
dd	}| D ]}| }|d
r|dd}t|dk r6q|d dkrk|d  kr[ dkrN| |||V  |d  d}g }|d g}t|dkrht|d }qd}q|d dkr|d  kr dkr| |||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.
     untypedrN   documentationtypsamplesr   c                 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
   rW   )rN   rU   rV   rW   new_samplesr   metricr   r   r   build_metric   s   
&z0text_fd_to_metric_families.<locals>.build_metric#N   r%   r	   HELP   TYPE)_count_sumrS   )rd   re   _bucket)rX   gaugesummary	histogramc                    s   g | ]} | qS r   r   )r?   nrN   r   r   rA      s    z.text_fd_to_metric_families.<locals>.<listcomp>r   )strr   r   r
   r.   
startswithrC   r-   r    getrQ   rN   r[   )	rR   rU   rV   rW   allowed_namesr^   linepartssampler   rk   r   r      sr   	"



r   ) ior   retypingr   r   r   r   r   r   r   metrics_corer
   rW   r   rl   r   r   r   compiler   r"   r    r#   intboolr'   r<   rD   rH   rQ   r   r   r   r   r   <module>   s(    $	

3