
    MhD0              	           d dl Z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dlmZmZmZ dedee         fd	Zd
dddZdee         defdZ ej        d          Z ej        d          ZdedefdZdedefdZdededefdZd'dededeeef         fdZ dededeeef         fdZ!d(dedededefdZ"dededefdZ#d(d Z$d! Z%dedee&e	e&         f         fd"Z'd# Z(d$ Z)d%e
dee         fd&Z*dS ))    N)DictIterableListMatchOptionalTextIOTuple   )Metric)Sample)_is_valid_legacy_metric_name_validate_labelname_validate_metric_nametextreturnc              #   X   K   t          t          j        |                     E d{V  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   s    X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/prometheus_client/parser.pytext_string_to_metric_familiesr      s9      
 *(*;D*A*ABBBBBBBBBBB    \
")z\\z\nz\"matchc                 B    t           |                     d                   S )Nr   )ESCAPE_SEQUENCESgroup)r   s    r   replace_escape_sequencer      s    EKKNN++r   z\\[\\n]z\\[\\n"]sc                 B    t                               t          |           S N)HELP_ESCAPING_REsubr   r    s    r   _replace_help_escapingr&   $   s     7;;;r   c                 B    t                               t          |           S r"   )ESCAPING_REr$   r   r%   s    r   _replace_escapingr)   (   s    ??2A666r   charposc                     d}||k    r/| |dz
  |z
           dk    r|dz  }||k    r| |dz
  |z
           dk    |dz  dk    S )Nr   r
   r       )r    r*   num_bslashess      r   _is_character_escapedr/   ,   sk    L\!!1|+,44 \!!1|+,44!q  r   Flabels_stringopenmetricsc                    i }|                                  }|r |r|d         dk    rt          d| z             	 |rt          ||          \  }}|s|rt          d| z             -d}t          |d          }|dk    rd}d	}n7t          |d          }t	          |d |                   \  }}||d
z   d          }|st          |          st          d          |                                 }|r|d         dk    rt          d
}	|	t          |          k     rG|                    d|	          }	t          |d |	         |	          sn|	d
z  }	|	t          |          k     G|	d
z   }
|
t          |          k    rt          d| z             t	          |d |
                   \  }}|d	k    rt          |           nt          |           ||v rt          d| z             |||<   ||S # t          $ r t          d| z             w xY w)Nr   ,zleading comma: zempty term in line: F=T__name__r
   zunquoted UTF-8 metric namer   zunexpected text after quote: z$invalid line, duplicate label name: zInvalid labels: )strip
ValueError
_next_term_next_unquoted_char_unquote_unescaper   lenindexr/   r   r   )r0   r1   labels
sub_labelstermquoted_nameoperator_pos
label_namevalue_starti	quote_endlabel_value_s                r   parse_labelsrI   4   s   F $$&&J <z <jms&:&:*]:;;;5= 0	-  **kBBD*  M$%;m%KLLLK.tS99Lr!!"'

1$<<*;D+<N*O*O'
KK!O,,- ?'CJ'O'O ? !=>>> ::<<D !47c>>   Ac$ii--JJsA&&,T"1"Xq99 Q	 c$ii-- AICII%% !@=!PQQQ.tJYJ/?@@NKZ''%j1111#J///V## !G-!WXXX!,F:a  0	-b  = = =+m;<<<=s   F.G) )Hc                 V   | d         dk    r)| dd         } | sdS | d         dk    rt          d          t          | d          }|dk    rt          |           }| d|         }|s|rt          d	|          | |d         }|                                |                                fS )
zExtract the next comma-separated label term from the text.
    
    Returns the stripped term and the stripped remainder of the string, 
    including the comma.
    
    Raises ValueError if the term is empty and we're in openmetrics mode.
    r   r3   r
   N) rK   zmultiple commasz,}r5   zempty term:)r8   r:   r<   r7   )r   r1   splitposr@   	sublabelss        r   r9   r9   s   s     Aw#~~ABBx 	67c>>.///"4..H2~~t99		?D .K .---XYYI::<<****r   chsstartidxc                     |}d}|t           j        }|t          |           k     rE| |         dk    rt          | |          s| }|s| |         |v r|S |dz  }|t          |           k     EdS )zReturn position of next unquoted character in tuple, or -1 if not found.
    
    It is always assumed that the first character being checked is not already
    inside quotes.
    FNr   r
   r5   )string
whitespacer<   r/   )r   rN   rO   rE   	in_quotess        r   r:   r:      s     	AI
{
c$ii--7c>>"7a"@"@>%I 	Aw#~~	Q c$ii-- 2r   c                     t          |           dz
  }d}|t          j        }|dk    r8| |         dk    rt          | |          s| }|s| |         |v r|S |dz  }|dk    8dS )zGReturn position of last unquoted character in list, or -1 if not found.r
   FNr   r   r5   )r<   rQ   rR   r/   )r   rN   rE   rS   s       r   _last_unquoted_charrU      s    D		AAI
{
a%%7c>>"7a"@"@>%I 	Aw#~~	Q a%% 2r   c                 `   dg}d}|t          |           k     rt          | ||          }|dk    r| |d         |d<   t          |           }G|dk    r!t          |          |k    r| |d         |d<   n:| ||         |d<   |dz   }|                    d           |t          |           k     |S )zfSplits on split_ch similarly to strings.split, skipping separators if
    they are inside quotes.
    rK   r   r5   Nr
   )r<   r:   append)r   	separatormaxsplittokensx	split_poss         r   _split_quotedr]      s    
 TF	A
c$ii--'i;;	??abbF2JD		Aa<<CKK(22abbF2J!I+&r
Mb c$ii-- Mr   c                     | s| dfS d}|                                  } | d         dk    r:t          |           dk    s| d         dk    rt          d          | dd         } d}d| v rt          |           } | |fS )	z.Returns the string, and true if it was quoted.Fr   r   r
   r5   zmissing close quoteTr   )r7   r<   r8   r)   )r   quoteds     r   r;   r;      s     U{F::<<DAw#~~t99>>T"X__2333AbDzt|| &&<r   c                 *   |                                  } d}|| vrd}d |                     |          D             }|st          |           d fS t          |d                   }t	          |          dk    rt          |d                   dz  nd }||fS )N 	c                 ^    g | ]*}|                                 |                                 +S r-   )r7   ).0values     r   
<listcomp>z._parse_value_and_timestamp.<locals>.<listcomp>   s-    MMMu{{}}MekkmmMMMr   r   r
   r5   i  )lstripsplitfloat_parse_valuer<   )r    rX   valuesre   	timestamps        r   _parse_value_and_timestamprm      s    	

AI	MM););MMMF Qxx~##E58[[1__fRj))D00$I)r   c                     d                     |           } | |                                 k    sd| v rt          d|           	 t          |           S # t          $ r t	          |           cY S w xY w)NrK   rH   zInvalid value: )joinr7   r8   intri   )re   s    r   rj   rj      s    GGENNE45445555zz   U||s   A A0/A0c                    d}t          | d          }|dk    s|| d |         v r~t          | d          }| d |                                         }t          |          st          d| z             | |dz   d          }t	          |          \  }}t          |i ||          S | d |                                         }t          | d          }t          | |dz   |         d          }	|sd	|	vrt          |	d	         }|	d	= nd	|	v rt          d
          | |dz   d          }t	          |          \  }}t          ||	||          S )Nz # {r5   z 	zinvalid metric name:r
   }Fr6   z$metric name specified more than once)r:   r7   r   r8   rm   r   rI   )
r   rX   label_startname_endnameremaining_textre   rl   	label_endr>   s
             r   _parse_samplery      s   I%dC00KbIl{l);;;&tU33IXI$$&&+D11 	<3d:;;;hlmm,5nEEydBy111##%%D#D#..I${Qy895AAF AV##j!:	v		?@@@)a-..)N1.AAE9$y111r   fdc           
   #     K   dd}d}g }g }dt           dt           dt           dt          t                   dt          f
d}| D ]}|                                }|                    d	          rgt          |d
d          }t          |          dk     rRd\  }}	t          |          dk    rI|d         dk    r|d         dk    rt          |d                   \  }}	|	st          |          st          |d         dk    rS|k    rdk    r ||||          V  |d}g }|g}t          |          dk    rt          |d                   }d}|d         dk    rtt          |          dk     rt          |k    rdk    r ||||          V  |d}g }|d         }dgdgg dg dd                    |dg          }fd|D             }|dk    rt          |          }
|
j        |vr9dk    r ||||          V  dd}d}g }g } ||
d         |||
g          V  |                    |
           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.
    rK   untypedrv   documentationtypsamplesr   c           	          |dk    rZ|                      d          r| d d         } n:g }|D ]5}|                    t          |d         dz   g|dd          R             |}6t          | ||          }||_        |S )Ncounter_totalir   r
   )endswithrW   r   r   r   )rv   r}   r~   r   new_samplesr    metrics          r   build_metricz0text_fd_to_metric_families.<locals>.build_metric  s     )}}X&& *CRCy   * *A&&vadXo'F!""'F'F'FGGG)GGmS11 r   #N   r,   )rK   Fr
   TYPEHELP   )_count_sumrK   )r   r   _bucket)r   gaugesummary	histogramc                     g | ]}|z   S r-   r-   )rd   nrv   s     r   rf   z.text_fd_to_metric_families.<locals>.<listcomp>[  s     A A Aa A A Ar   r   )strr   r   r   r7   
startswithr]   r<   r;   r   r8   r&   getry   rv   rW   )rz   r}   r~   r   allowed_namesr   linepartscandidate_namer_   samplerv   s              @r   r   r     s4      DM
CGM3 s  tF| X^      >' >'zz||??3 ;	'!$a00E5zzA~~%."NF5zzA~~8v%%%(f*<*<):58)D)D& %&B>&R&R %$$Qx6!!!T))rzz*l4WMMMMM)D#C G%3$4Mu::??$:58$D$DMM$&MMqV##u::>>$$!T))rzz*l4WMMMMM)D$&M GAh "t T555!>!>!>	! !
 #cB4..  !B A A A= A A ARZZ"4((F{-//2::&,t]CIIIII " ""l6!9mS6(KKKKKKv&&&&rzzl4W======= zr   )F)r   )+ior   rerQ   typingr   r   r   r   r   r   r	   metrics_corer   r   r   
validationr   r   r   r   r   r   r   compiler#   r(   r&   r)   rp   boolr/   rI   r9   r:   rU   r]   r;   ri   rm   rj   ry   r   r-   r   r   <module>r      s       				  G G G G G G G G G G G G G G G G G G                           
C C&1A C C C C   ,5: ,# , , , , 2:j)) bj%%<c <c < < < <7 7 7 7 7 7!S !3 !4 ! ! ! !<= <= <=$ <=4S> <= <= <= <=~+S +t +c3h + + + +6 c  s 3    (c      "   ,  "
# 
%x0F*G 
 
 
 
  2 2 2>_>6 _>hv.> _> _> _> _> _> _>r   