o
    tf
                     @   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   a/var/www/html/software/conda/envs/catlas/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$   Z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'   labelsZescapingZ
sub_labelsZvalue_startZ
label_nameZquote_startZvalue_substriZ	quote_endZlabel_valueZ
next_commar   r   r   _parse_labels0   sD   

r2   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valuesr6   	timestampr   r   r   _parse_value_and_timestampc   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	   r3   r4   )r*   rindexr-   r>   r   r2   r/   )	r   Zlabel_startZ	label_endnamelabelr6   r=   r;   Zname_endr   r   r   _parse_samplep   s   
rD   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.
     ZuntypedrB   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counterZ_totalir   r	   )endswithappendr   r
   rI   )rB   rG   rH   rI   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)_count_sumrF   )rQ   rR   Z_bucket)rJ   ZgaugesummaryZ	histogramc                    s   g | ]} | qS r   r   )r5   nrB   r   r   r7      s    z.text_fd_to_metric_families.<locals>.<listcomp>r   )strr   r   r
   r-   
startswithr9   r,   r    getrD   rB   rL   )	rE   rG   rH   rI   Zallowed_namesrM   linepartssampler   rU   r   r      sr   	"



r   ) ior   retypingr   r   r   r   r   r   r   Zmetrics_corer
   rI   r   rV   r   r   r   compiler   r"   r    r#   intboolr&   r2   r:   r>   rD   r   r   r   r   r   <module>   s(    $	

3