ó
H`¾Tc           @   së   d  Z  d d l m Z d d l m Z m Z m Z d d l m Z m	 Z	 m
 Z
 d d l m Z i  Z d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ e ƒ  d e f d „  ƒ  YZ e ƒ  d e f d „  ƒ  YZ e ƒ  d S(   sq  Strategies for creating new instances of Engine types.

These are semi-private implementation classes which provide the
underlying behavior for the "strategy" keyword argument available on
:func:`~sqlalchemy.engine.create_engine`.  Current available options are
``plain``, ``threadlocal``, and ``mock``.

New strategies can be added via new ``EngineStrategy`` classes.
iÿÿÿÿ(   t
   attrgetter(   t   baset   threadlocalt   url(   t   utilt   exct   event(   t   poolt   EngineStrategyc           B   s    e  Z d  Z d „  Z d „  Z RS(   sÂ   An adaptor that processes input arguments and produces an Engine.

    Provides a ``create`` method that receives input arguments and
    produces an instance of base.Engine or a subclass.

    c         C   s   |  t  |  j <d  S(   N(   t
   strategiest   name(   t   self(    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyt   __init__#   s    c         O   s   t  ƒ  ‚ d S(   s/   Given arguments, returns a new Engine instance.N(   t   NotImplementedError(   R   t   argst   kwargs(    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyt   create&   s    (   t   __name__t
   __module__t   __doc__R   R   (    (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyR      s   	t   DefaultEngineStrategyc           B   s   e  Z d  Z d „  Z RS(   s#   Base class for built-in strategies.c            s«  t  j | ƒ } | j ƒ  ‰ ˆ j d t ƒ rE d  ‡ ‡ f d † } n	 ˆ j } i  } x6 t j ˆ ƒ D]% } | ˆ k rd | | ƒ | | <qd qd Wˆ j d d  ƒ } | d  k rÿ i  } x9 t j ˆ j	 ƒ D]% } | ˆ k rÄ | | ƒ | | <qÄ qÄ Wˆ j	 |   } n  | | d <ˆ |   ‰ ˆ j
 | ƒ \ ‰ ‰  ˆ  j | d i  ƒ ƒ | d d  ƒ }	 |	 d  k rF‡ ‡  ‡ f d †  }
 | d |
 ƒ } | d	 d  ƒ } | d  k r¬ˆ j | ƒ } n  i  } i d
 d 6d d 6d d 6d d 6d d 6d d 6d d 6} xH t j | ƒ D]7 } | j | | ƒ } | ˆ k rù| | ƒ | | <qùqùW| | |  }	 n- t |	 t j ƒ rm|	 j ˆ ˆ  Ž  }	 n |	 }	 |  j } i  } x6 t j | ƒ D]% } | ˆ k r’| | ƒ | | <q’q’Wˆ j d t ƒ } ˆ rt d d j d „  ˆ Dƒ ƒ ˆ j j |	 j j | j f ƒ ‚ n  | |	 ˆ | |  ‰ | r§ˆ j ƒ  ‰ ˆ ry‡ f d †  } t j |	 d | ƒ t j |	 d | ƒ n  ‡ ‡ f d †  } t j |	 d | d  t ƒn  ˆ S(!   Nt   _coerce_configc            s;   ˆ j  |  | ƒ } |  ˆ  j k r7 ˆ  j |  | ƒ } n  | S(   N(   t   popt   engine_config_types(   t   keyt   defaultt   value(   t   dialect_clsR   (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyt	   pop_kwarg6   s    t   modulet   dbapit   connect_argsR   c             sw   y ˆ  j  ˆ ˆ Ž  SWn\ ˆ  j j k
 rr }  ˆ  j |  d  d  ƒ } t j t j j	 d  d  |  ˆ  j j d | ƒƒ n Xd  S(   Nt   connection_invalidated(
   t   connectR   t   Errort   is_disconnectt   NoneR   t   raise_from_causeR   t
   DBAPIErrort   instance(   t   et   invalidated(   t   dialectt   cparamst   cargs(    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyR!   X   s    	t   creatort	   poolclasst   pool_logging_namet   logging_namet	   echo_poolt   echot   pool_timeoutt   timeoutt   pool_recyclet   recyclet   pool_eventst   eventst   pool_threadlocalt   use_threadlocalt   pool_reset_on_returnt   reset_on_returnt   _initializesª   Invalid argument(s) %s sent to create_engine(), using configuration %s/%s/%s.  Please check that the keyword arguments are appropriate for this combination of components.t   ,c         s   s   |  ] } d  | Vq d S(   s   '%s'N(    (   t   .0t   k(    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pys	   <genexpr>Ž   s    c            s0   t  |  d |  ƒ } | d  k r" d  Sˆ  | ƒ d  S(   Nt   _sqla_unwrap(   t   getattrR$   (   t   dbapi_connectiont   connection_recordt   conn(   t   do_on_connect(    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyt
   on_connect˜   s
    t   first_connectR!   c            s;   t  j ˆ  d |  d t ƒ} t j ƒ  | _ ˆ j | ƒ d  S(   Nt
   connectiont   _has_events(   R   t
   Connectiont   FalseR   t   immutabledictt   _execution_optionst
   initialize(   RC   RD   t   c(   t   engineR*   (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyRH   ¢   s    	t   once(   R   t   make_urlt   get_dialectR   RL   R$   R   t   get_cls_kwargst   get_func_kwargsR   t   create_connect_argst   updatet   get_pool_classt   gett
   isinstancet   poollibt   _DBProxyt   get_poolt
   engine_clst   Truet	   TypeErrort   joint	   __class__R   RG   R   t   listen(   R   t   name_or_urlR   t   uR   t   dialect_argsR@   R   t
   dbapi_argsR   R!   R-   R.   t	   pool_argst	   translatet   tkt   engineclasst   engine_argsR=   RG   RH   (    (   R+   R   RF   R,   RQ   R*   R   sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyR   /   s„    	


			(   R   R   R   R   (    (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyR   ,   s   t   PlainEngineStrategyc           B   s   e  Z d  Z d Z e j Z RS(   s*   Strategy for configuring a regular Engine.t   plain(   R   R   R   R
   R   t   EngineR_   (    (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyRn   ¬   s   t   ThreadLocalEngineStrategyc           B   s   e  Z d  Z d Z e j Z RS(   s=   Strategy for configuring an Engine with threadlocal behavior.R   (   R   R   R   R
   R   t   TLEngineR_   (    (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyRq   µ   s   t   MockEngineStrategyc           B   s6   e  Z d  Z d Z d „  Z d e j f d „  ƒ  YZ RS(   s¼   Strategy for configuring an Engine-like object with mocked execution.

    Produces a single mock Connectable object which dispatches
    statement execution to a passed-in function.

    t   mockc   	      K   sy   t  j | ƒ } | j ƒ  } i  } x9 t j | ƒ D]( } | | k r1 | j | ƒ | | <q1 q1 W| |   } t j | | ƒ S(   N(   R   RS   RT   R   RU   R   Rs   t   MockConnection(	   R   Re   t   executorR   Rf   R   Rg   R@   R*   (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyR   È   s    Ru   c           B   sƒ   e  Z d  „  Z e d „  ƒ Z e e d ƒ ƒ Z e d „  ƒ Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d d	 „ Z d
 „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   t   _dialectt   execute(   R   R*   Rx   (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyR   Ú   s    	c         C   s   |  S(   N(    (   t   s(    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyt   <lambda>Þ   s    Rw   c         C   s
   |  j  j S(   N(   Rw   R
   (   Ry   (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyRz   à   s    c         K   s   |  S(   N(    (   R   R   (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyt   contextual_connectâ   s    c         K   s   |  S(   N(    (   R   t   kw(    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyt   execution_optionså   s    c         K   s   |  j  j | | d |  | S(   NRQ   (   Rw   t   compiler(   R   t	   statementt
   parametersR   (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyR~   è   s    	c         K   s=   t  | d <d d l m } | j |  j |  |  j | ƒ d  S(   Nt
   checkfirstiÿÿÿÿ(   t   ddl(   RL   t   sqlalchemy.engineR‚   t   SchemaGeneratorR*   t   traverse_single(   R   t   entityR   R‚   (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyR   ì   s    
c         K   s=   t  | d <d d l m } | j |  j |  |  j | ƒ d  S(   NR   iÿÿÿÿ(   R‚   (   RL   Rƒ   R‚   t   SchemaDropperR*   R…   (   R   R†   R   R‚   (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyt   dropó   s    
c         K   s*   t  | d <| |  j |  |  j | ƒ d  S(   NR   (   RL   R*   R…   (   R   t   visitorcallablet   elementRI   R   (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyt   _run_visitorù   s    
c         O   s   t  ƒ  ‚ d  S(   N(   R   (   R   t   objectt   multiparamst   params(    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyRx      s    N(   R   R   R   t   propertyRQ   R    R*   R
   R{   R}   R~   R   Rˆ   R$   R‹   Rx   (    (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyRu   Ù   s   						(   R   R   R   R
   R   R   t   ConnectableRu   (    (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyRs   ¾   s   	N(   R   t   operatorR    Rƒ   R   R   R   t
   sqlalchemyR   R   R   R   R\   R	   RŒ   R   R   Rn   Rq   Rs   (    (    (    sb   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/engine/strategies.pyt   <module>   s   €E