ó
;t/Uc           @   s\   d  d l  Z  d d l m Z d d l m Z m Z d d l m Z d e f d „  ƒ  YZ	 d S(   iÿÿÿÿNi   (   t   exists(   t   GLOBAL_LOCKERt   THREAD_LOCAL(   t   UseDatabaseStoredFilet   ConnectionPoolc           B   sk   e  Z i  Z e Z e d  „  ƒ Z d e d „ Z e d „  ƒ Z d „  Z	 d „  Z
 d „  Z d e d „ Z RS(	   c         C   s   |  t  _ d  S(   N(   R   t   folder(   R   (    (    sM   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/connection.pyt
   set_folder   s    t   commitc         C   sÞ   t  } | rL y- t | ƒ r( | |  ƒ n t |  | ƒ ƒ  WqL t } qL Xn  |  j r° | r° t j ƒ  t j |  j	 } t
 | ƒ |  j k  r£ | j |  j ƒ t } n  t j ƒ  n  | rÑ y |  j ƒ  WqÑ qÑ Xn  d  |  _ d  S(   N(   t   Truet   callablet   getattrt   Falset	   pool_sizeR   t   acquireR   t   POOLSt   urit   lent   appendt
   connectiont   releaset   close_connectiont   None(   t   selft   actiont   reallyt	   succeededt   pool(    (    sM   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/connection.pyt   close   s*    
	c         C   s«   t  t d i  ƒ j ƒ  } xG | D]? \ } } x0 | D]( } t | d ƒ r2 | j j |  ƒ q2 q2 Wq Wt  t d i  ƒ j ƒ  t  t d i  ƒ j ƒ  t |  ƒ r§ |  d ƒ n  d S(   s;    to close cleanly databases in a multithreaded environment t   db_instancest   _adaptert   db_instances_zombieN(	   R
   R   t   itemst   hasattrR   R   t   clearR	   R   (   R   t   dbst   db_uidt   db_groupt   db(    (    sM   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/connection.pyt   close_all_instances2   s    c         C   s«   t  t d d ƒ |  _ t j j |  j ƒ ru t |  t ƒ ru |  j j t j	 ƒ  ƒ ru t j j
 |  j t j	 ƒ  ƒ |  _ n  t r§ |  j r§ t |  j ƒ r§ t j |  j ƒ n  d  S(   NR   t    (   R
   R   R   t   ost   patht   isabst
   isinstanceR   t
   startswitht   getcwdt   relpathR   R    t   mkdir(   R   (    (    sM   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/connection.pyt   find_or_make_work_folder@   s    $c         C   s-   t  |  j ƒ r |  j |  ƒ n  |  j ƒ  d S(   s'   Hook for the after_connection parameterN(   R	   t   _after_connectiont   after_connection(   R   (    (    sM   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/connection.pyt   after_connection_hookM   s    c         C   s   d  S(   N(    (   R   (    (    sM   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/connection.pyR2   S   s    c         C   sY  t  |  d d ƒ d k	 r d S| d k r4 |  j } n  |  j sd | ƒ  |  _ | o[ |  j j ƒ  |  _ nç |  j } t j } xÒ t	 rJt
 j ƒ  | | k r¢ g  | | <n  | | r| | j ƒ  |  _ t
 j ƒ  | oÛ |  j j ƒ  |  _ y* |  j r	|  j r	|  j |  j ƒ n  PWqGqGXqy t
 j ƒ  | ƒ  |  _ | o@|  j j ƒ  |  _ Pqy W|  j ƒ  d S(   sB  
        Defines: `self.connection` and `self.cursor`
        (if cursor is True)
        if `self.pool_size>0` it will try pull the connection from the pool
        if the connection is not active (closed by db server) it will loop
        if not `self.pool_size` or no active connections in pool makes a new one
        R   N(   R
   R   t	   connectorR   R   t   cursorR   R   R   R   R   R   t   popR   t   check_active_connectiont   executet
   test_queryR3   (   R   t   fR5   R   R   (    (    sM   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/connection.pyt	   reconnectW   s8    				



N(   t   __name__t
   __module__R   R   R7   t   staticmethodR   R   R&   R0   R3   R2   R   R;   (    (    (    sM   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/connection.pyR   	   s   !			(
   R(   t   _compatR    t   _globalsR   R   t   helpers.classesR   t   objectR   (    (    (    sM   /var/www/c4bv.valis/web2py-ge-R-2.10.3/gluon/packages/dal/pydal/connection.pyt   <module>   s   