U
    xž^u	  ã                   @   sT   d dl mZ dd„ Zdd„ ZzddlmZ W n" ek
rN   eƒ  eƒ ¡ Y nX dS )	é   )Úutilc                    s   t j‡ fdd„ƒ}|S )zËDecorator, memoize a function in a connection.info stash.

    Only applicable to functions which take no arguments other than a
    connection.  The memo will be stored in ``connection.info[key]``.
    c                    sF   |  ¡ }z|jˆ  W S  tk
r@   | ||ƒ |jˆ < }| Y S X d S )N)ÚconnectÚinfoÚKeyError)ÚfnÚselfÚ
connectionÚval©Úkey© ú>/tmp/pip-install-dq5v43_d/SQLAlchemy/sqlalchemy/engine/util.pyÚ	decorated   s    z%connection_memoize.<locals>.decorated)r   Z	decorator)r   r   r   r
   r   Úconnection_memoize   s    r   c                  C   s   dd„ } t ƒ S )Nc                 S   s¦   | s|r|gS g S nŽt | ƒdkr|| d }t|ttfƒrb|rVt|d dƒrZt|d dƒsZ|S |gS q¢t|dƒrr|gS |ggS n&t| d dƒrœt| d dƒsœ| S | gS dS )a  Given arguments from the calling form \*multiparams, \**params,
        return a list of bind parameter structures, usually a list of
        dictionaries.

        In the case of 'raw' execution which accepts positional parameters,
        it may be a list of tuples or lists.

        é   é    Ú__iter__ÚstripÚkeysN)ÚlenÚ
isinstanceÚlistÚtupleÚhasattr)ZmultiparamsÚparamsZzeror   r   r   Ú_distill_params   s0    
ÿþý

 ÿz$py_fallback.<locals>._distill_params)Úlocals©r   r   r   r   Úpy_fallback   s    +r   r   r   N)	Ú r   r   r   Zsqlalchemy.cutilsr   ÚImportErrorÚglobalsÚupdater   r   r   r   Ú<module>   s   /