ó
¿b›]c           @   sh   d  Z  d d l Z d d l m Z d d l m Z d e j f d „  ƒ  YZ d	 e j f d
 „  ƒ  YZ d S(   s8  Provides a thread-local transactional wrapper around the root Engine class.

The ``threadlocal`` module is invoked when using the
``strategy="threadlocal"`` flag with :func:`~sqlalchemy.engine.create_engine`.
This module is semi-private and is invoked automatically when the threadlocal
engine strategy is used.
iÿÿÿÿNi   (   t   basei   (   t   utilt   TLConnectionc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         O   s&   t  t |  ƒ j | | Ž  d |  _ d  S(   Ni    (   t   superR   t   __init__t   _TLConnection__opencount(   t   selft   argt   kw(    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR      s    c         C   s   |  j  d 7_  |  S(   Ni   (   R   (   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyt   _increment_connect   s    c         C   s5   |  j  d k r" t j j |  ƒ n  |  j  d 8_  d  S(   Ni   (   R   R    t
   Connectiont   close(   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR      s    c         C   s   d |  _  t j j |  ƒ d  S(   Ni    (   R   R    R
   R   (   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyt   _force_close$   s    	(   t   __name__t
   __module__R   R	   R   R   (    (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR      s   			t   TLEnginec           B   s¶   e  Z d  Z e Z e j d d ƒ d „  ƒ Z d „  Z d „  Z	 d d „ Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z d „  Z d „  Z RS(   sP   An Engine that includes support for thread-local managed
    transactions.

    s   1.3s  The 'threadlocal' engine strategy is deprecated, and will be removed in a future release.  The strategy is no longer relevant to modern usage patterns (including that of the ORM :class:`.Session` object) which make use of a :class:`.Connection` object in order to invoke statements.c         O   s/   t  t |  ƒ j | | Ž  t j j ƒ  |  _ d  S(   N(   R   R   R   R   t	   threadingt   localt   _connections(   R   t   argst   kwargs(    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR   1   s    	c         K   s   |  j  |   S(   N(   t   _contextual_connect(   R   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyt   contextual_connect=   s    c         K   sˆ   t  |  j d ƒ s d  } n |  j j ƒ  } | d  k s? | j r~ |  j |  |  j |  j j | ƒ |  } t	 j
 | ƒ |  j _ n  | j ƒ  S(   Nt   conn(   t   hasattrR   t   NoneR   t   closedt   _tl_connection_clst   _wrap_pool_connectt   poolt   connectt   weakreft   refR	   (   R   R   t
   connection(    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR   @   s    		c         C   sJ   t  |  j d ƒ s! g  |  j _ n  |  j j j |  j ƒ  j d | ƒ ƒ |  S(   Nt   transt   xid(   R   R   R"   t   appendR   t   begin_twophase(   R   R#   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR%   R   s
    c         C   sD   t  |  j d ƒ s! g  |  j _ n  |  j j j |  j ƒ  j ƒ  ƒ |  S(   NR"   (   R   R   R"   R$   R   t   begin_nested(   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR&   Z   s
    c         C   sD   t  |  j d ƒ s! g  |  j _ n  |  j j j |  j ƒ  j ƒ  ƒ |  S(   NR"   (   R   R   R"   R$   R   t   begin(   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR'   b   s    c         C   s   |  S(   N(    (   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyt	   __enter__h   s    c         C   s'   | d  k r |  j ƒ  n
 |  j ƒ  d  S(   N(   R   t   committ   rollback(   R   t   type_t   valuet	   traceback(    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyt   __exit__k   s    c         C   s<   t  |  j d ƒ s  |  j j r$ d  S|  j j d j ƒ  d  S(   NR"   iÿÿÿÿ(   R   R   R"   t   prepare(   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR/   q   s    c         C   sG   t  |  j d ƒ s  |  j j r$ d  S|  j j j d ƒ } | j ƒ  d  S(   NR"   iÿÿÿÿ(   R   R   R"   t   popR)   (   R   R"   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR)   y   s
    c         C   sG   t  |  j d ƒ s  |  j j r$ d  S|  j j j d ƒ } | j ƒ  d  S(   NR"   iÿÿÿÿ(   R   R   R"   R0   R*   (   R   R"   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR*   ‚   s
    c         C   s)   t  j j ƒ  |  _ t t |  ƒ j ƒ  d  S(   N(   R   R   R   R   R   R   t   dispose(   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR1   ‹   s    c         C   s8   t  |  j d ƒ p7 |  j j ƒ  d  k p7 |  j j ƒ  j S(   NR   (   R   R   R   R   R   (   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR      s    c         C   sN   |  j  sJ |  j ƒ  j ƒ  |  j j ƒ  } | j ƒ  |  j ` g  |  j _ n  d  S(   N(   R   R   R   R   R   R   R"   (   R   R!   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR   —   s    	
	c         C   s   d |  j  S(   Ns   TLEngine(%r)(   t   url(   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyt   __repr__Ÿ   s    N(   R   R   t   __doc__R   R   R   t
   deprecatedR   R   R   R   R%   R&   R'   R(   R.   R/   R)   R*   R1   t   propertyR   R   R3   (    (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyR   )   s&   
													(	   R4   R   t    R    R   R
   R   t   EngineR   (    (    (    s<   lib/python2.7/site-packages/sqlalchemy/engine/threadlocal.pyt   <module>   s
   