o
    i                     @   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   S/var/www/edux/Edux_v2/venv/lib/python3.10/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      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   charpos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)labels_stringlabelsescaping
sub_labelsvalue_start
label_namequote_startvalue_substri	quote_endlabel_value
next_commar   r   r	   _parse_labels/   sD   

r4   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valuesr8   	timestampr   r   r	   _parse_value_and_timestampb   s    r@   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   r5   r6   )r"   rindexr%   r@   r   r4   r'   )	r   label_start	label_endnamelabelr8   r?   r=   name_endr   r   r	   _parse_sampleo   s   
rI   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)rF   documentationtyprP   new_samplesr   metricr   r   r	   build_metric   s   
&z0text_fd_to_metric_families.<locals>.build_metric#N   r   r   HELP   TYPE)_count_sumrJ   )r[   r\   _bucket)rL   gaugesummary	histogramc                    s   g | ]} | qS r   r   )r7   nrF   r   r	   r9      s    z.text_fd_to_metric_families.<locals>.<listcomp>r   )	r%   
startswithr;   r$   r   getrI   rF   rO   )	fdrQ   rR   rP   allowed_namesrU   linepartssampler   rb   r	   r      sr   	



r   )ior   remetrics_corer   rP   r   r
   r   r   compiler   r   r   r   r   r4   r@   rI   r   r   r   r   r	   <module>   s&    	

3