o
    ïÅ[hu	  ã                   @   sR   d dl mZ dd„ Zdd„ Zz	ddlmZ W dS  ey(   eƒ  eƒ ¡ Y dS w )	é   )Ú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@   |  ¡ }z|jˆ  W S  ty   | ||ƒ |jˆ < }| Y S w )N)ÚconnectÚinfoÚKeyError)ÚfnÚselfÚ
connectionÚval©Úkey© ú}/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/sqlalchemy/engine/util.pyÚ	decorated   s   þz%connection_memoize.<locals>.decorated)r   Ú	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 t | ƒdkr;| d }t|ttfƒr/|r*t|d dƒr,t|d dƒs,|S |gS t|dƒr7|gS |ggS t| d dƒrKt| d dƒsK| S | g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Úkeys)ÚlenÚ
isinstanceÚlistÚtupleÚhasattr)ZmultiparamsÚparamsÚ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   /ÿ