ó
6]c           @  sú   d  d l  m Z d  d l Z d d l m Z d d l m Z y d  d l Z Wn e k
 rk d  d l	 Z n Xd „  Z
 i d d 6d	 d
 6d d 6Z d „  Z e j d ƒ Z e j d ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d S(   iÿÿÿÿ(   t   unicode_literalsNi   (   t   Metric(   t   Samplec         c  s)   x" t  t j |  ƒ ƒ D] } | Vq Wd S(   u]   Parse Prometheus text format from a unicode string.

    See text_fd_to_metric_families.
    N(   t   text_fd_to_metric_familiest   StringIO(   t   textt   metric_family(    (    s7   lib/python2.7/site-packages/prometheus_client/parser.pyt   text_string_to_metric_families   s    u   \u   \\u   
u   \nu   "u   \"c         C  s   t  |  j d ƒ S(   Ni    (   t   ESCAPE_SEQUENCESt   group(   t   match(    (    s7   lib/python2.7/site-packages/prometheus_client/parser.pyt   replace_escape_sequence!   s    u   \\[\\n]u   \\[\\n"]c         C  s   t  j t |  ƒ S(   N(   t   HELP_ESCAPING_REt   subR   (   t   s(    (    s7   lib/python2.7/site-packages/prometheus_client/parser.pyt   _replace_help_escaping)   s    c         C  s   t  j t |  ƒ S(   N(   t   ESCAPING_RER   R   (   R   (    (    s7   lib/python2.7/site-packages/prometheus_client/parser.pyt   _replace_escaping-   s    c         C  sI   d } x2 | | k r: |  | d | d k r: | d 7} q	 W| d d k S(   Ni    i   u   \i   (    (   R   t   charpost   num_bslashes(    (    s7   lib/python2.7/site-packages/prometheus_client/parser.pyt   _is_character_escaped1   s
    c         C  sy  i  } d |  k r | St  } d |  k r1 t } n  |  } yx| rK| j d ƒ } | |  } | | d j ƒ  } | j d ƒ d } | | } d } xE | t | ƒ k  rÚ | j d | ƒ } t | | ƒ sÍ Pn  | d 7} q– W| d }	 | | |	 !}
 | rt |
 ƒ }
 n  |
 | | j ƒ  <| |	 d } | j d ƒ d } | | j ƒ  } q= W| SWn! t	 k
 rtt	 d |  ƒ ‚ n Xd  S(   Nu   =u   \i   u   "i    u   ,u   Invalid labels: %s(
   t   Falset   Truet   indext   lstript   lenR   R   t   stript   findt
   ValueError(   t   labels_stringt   labelst   escapingt
   sub_labelst   value_startt
   label_namet   quote_startt   value_substrt   it	   quote_endt   label_valuet
   next_comma(    (    s7   lib/python2.7/site-packages/prometheus_client/parser.pyt   _parse_labels9   s>    		


c         C  sN   |  j  ƒ  }  d } | |  k r' d } n  |  j | ƒ } | d k rF |  S|  |  S(   Nu    u   	iÿÿÿÿ(   R   R   (   R   t	   separatorR%   (    (    s7   lib/python2.7/site-packages/prometheus_client/parser.pyt   _parse_valuel   s    	c         C  sã   yt |  j  d ƒ |  j d ƒ } } |  |  j ƒ  } |  | d | !} t t |  | d ƒ ƒ } t | t | ƒ | ƒ SWnh t k
 rÞ d } | |  k rŸ d } n  |  j  | ƒ } |  |  } t t |  | ƒ ƒ } t | i  | ƒ SXd  S(   Nu   {u   }i   i   u    u   	(   R   t   rindexR   t   floatR+   R   R)   R   (   R   t   label_startt	   label_endt   namet   labelt   valueR*   t   name_end(    (    s7   lib/python2.7/site-packages/prometheus_client/parser.pyt   _parse_samplew   s    	
c         c  s£  d } d } d } g  } g  } d „  } xR|  D]J} | j  ƒ  } | j d ƒ râ| j d d ƒ } t | ƒ d k  ry q. n  | d d k r| d | k râ | d k r¼ | | | | | ƒ Vn  | d } d } g  } | d g } n  t | ƒ d	 k rt | d ƒ } qßd } qx| d d
 k rx| d | k rl| d k rS| | | | | ƒ Vn  | d } d } g  } n  | d } i d g d 6d g d 6d d d g d 6d d d g d 6j | d g ƒ } g  | D] }	 | |	 ^ qÆ} qxq. | d k rñq. t | ƒ }
 |
 j | k rk| d k r/| | | | | ƒ Vn  d } d } d } g  } g  } | |
 d | | |
 g ƒ Vq. | j	 |
 ƒ q. W| d k rŸ| | | | | ƒ Vn  d S(   uß   Parse 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.
    u    u   untypedc         S  s‰   | d k rj |  j  d ƒ r( |  d  }  qj g  } x9 | D]. } | j t | d d | d Œ ƒ | } q5 Wn  t |  | | ƒ } | | _ | S(   Nu   counteru   _totaliúÿÿÿi    i   (   t   endswitht   appendR   R   t   samples(   R0   t   documentationt   typR7   t   new_samplesR   t   metric(    (    s7   lib/python2.7/site-packages/prometheus_client/parser.pyt   build_metricŸ   s    "	u   #i   i   i   u   HELPi   u   TYPEu   counteru   gaugeu   _countu   _sumu   summaryu   _bucketu	   histogrami    N(
   R   t
   startswitht   splitt   NoneR   R   t   getR4   R0   R6   (   t   fdR0   R8   R9   R7   t   allowed_namesR<   t   linet   partst   nt   sample(    (    s7   lib/python2.7/site-packages/prometheus_client/parser.pyR      sl    		
	
	


 (   t
   __future__R    t   ret   metrics_coreR   R7   R   R   t   ImportErrort   ioR   R   R   t   compileR   R   R   R   R   R)   R+   R4   R   (    (    (    s7   lib/python2.7/site-packages/prometheus_client/parser.pyt   <module>   s,   		
					3		