B
    þ¦†\u	  ã               @   sT   d dl mZ dd„ Zdd„ Zy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                s@   |  ¡ }y
|jˆ  S  tk
r:   | ||ƒ |jˆ < }|S X d S )N)ZconnectÚinfoÚKeyError)ÚfnÚselfZ
connectionÚval)Úkey© ú5lib/python3.7/site-packages/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multiparamsZparamsZzeror	   r	   r
   Ú_distill_params   s&    


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   /