ó
|£*^c           @   s¯   d  Z  d d l Z y d d l m Z Wn e k
 r? d Z n Xe r_ d e f d „  ƒ  YZ n d e f d „  ƒ  YZ d „  Z e j	 d e j
 ƒ Z e j	 d	 ƒ Z d
 „  Z d S(   s)   
Created on 17/05/2012

@author: piranna
iÿÿÿÿN(   t   OrderedDictt   Cachec           B   s,   e  Z d  Z d d „ Z d „  Z d „  Z RS(   s?   Cache with LRU algorithm using an OrderedDict as basis
        id   c         C   s   t  j |  ƒ | |  _ d  S(   N(   R    t   __init__t   _maxsize(   t   selft   maxsize(    (    sb   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/sqlparse/utils.pyR      s    c         O   s0   t  j |  | ƒ } |  | =t  j |  | | ƒ | S(   N(   R    t   __getitem__t   __setitem__(   R   t   keyt   argst   kwargst   value(    (    sb   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/sqlparse/utils.pyR      s    c         O   sX   | |  k r |  | =n% t  |  ƒ |  j k r; |  j t ƒ n  t j |  | | | | Ž d  S(   N(   t   lenR   t   popitemt   FalseR    R   (   R   R   R   R	   R
   (    (    sb   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/sqlparse/utils.pyR   #   s
    
(   t   __name__t
   __module__t   __doc__R   R   R   (    (    (    sb   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/sqlparse/utils.pyR      s   	c           B   s#   e  Z d  Z d d „ Z d „  Z RS(   s(   Cache that reset when gets full
        id   c         C   s   t  j |  ƒ | |  _ d  S(   N(   t   dictR   R   (   R   R   (    (    sb   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/sqlparse/utils.pyR   3   s    c         O   s?   t  |  ƒ |  j k r" |  j ƒ  n  t j |  | | | | Ž d  S(   N(   R   R   t   clearR   R   (   R   R   R   R	   R
   (    (    sb   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/sqlparse/utils.pyR   8   s    (   R   R   R   R   R   (    (    (    sb   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/sqlparse/utils.pyR   0   s   c            s   t  ƒ  ‰  ‡  ‡ f d †  } | S(   s:  Memoize decorator for generators

    Store `func` results in a cache according to their arguments as 'memoize'
    does but instead this works on decorators instead of regular functions.
    Obviusly, this is only useful if the generator will always return the same
    values for each specific parameters...
    c          ?   s–   |  t  t | j ƒ  ƒ ƒ f } y ˆ  | } WnM t k
 r{ g  } x) ˆ |  | Ž  D] } | j | ƒ | VqR W| ˆ  | <n Xx | D] } | Vqƒ Wd  S(   N(   t   tuplet   sortedt   itemst   KeyErrort   append(   R	   R
   t   paramst   cachedt   item(   t   cachet   func(    sb   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/sqlparse/utils.pyt   wrapped_funcK   s    	(   R   (   R   R   (    (   R   R   sb   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/sqlparse/utils.pyt   memoize_generatorA   s    	sZ  
(
 (?:                     # Start of non-capturing group
  (?:\r\n|\r|\n)      |  # Match any single newline, or
  [^\r\n'"]+          |  # Match any character series without quotes or
                         # newlines, or
  "(?:[^"\\]|\\.)*"   |  # Match double-quoted strings, or
  '(?:[^'\\]|\\.)*'      # Match single quoted strings
 )
)
s   (\r\n|\r|\n)c         C   sh   t  j |  ƒ } d g } xI | D]A } | s1 q q t j | ƒ rP | j d ƒ q | d c | 7<q W| S(   s™   Split a string on all unquoted newlines.

    Unlike str.splitlines(), this will ignore CR/LF/CR+LF if the requisite
    character is inside of a string.t    iÿÿÿÿ(   t   SPLIT_REGEXt   splitt
   LINE_MATCHt   matchR   (   t   textt   linest   outputlinest   line(    (    sb   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/sqlparse/utils.pyt   split_unquoted_newlines{   s    	(   R   t   ret   collectionsR    t   ImportErrort   NoneR   R   R   t   compilet   VERBOSER!   R#   R)   (    (    (    sb   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/sqlparse/utils.pyt   <module>   s   
 	,
