§
    %ê[fñU  ã                  óî  — d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dl	mZ d dlmZ ddlmZ ej        rd d	lmZ d d
lmZ d dlmZ  ej        d¦  «        Z ej        dej        dej        f         ¬¦  «        Zd%d„Z G d„ d¦  «        Z G d„ dej        e         ¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ de¦  «        Zd&d „Z d'd"„Z! G d#„ d$ej        e         ¦  «        Z"dS )(é    )ÚannotationsN)Ú
ContextVar©Úpartial)Úupdate_wrapper)Ú
attrgetteré   )ÚClosingIterator)ÚStartResponse)ÚWSGIApplication)ÚWSGIEnvironmentÚTÚF.)ÚboundÚlocalúLocal | LocalStackÚreturnÚNonec                ó.   — |                       ¦   «          dS )zûRelease the data for the current context in a :class:`Local` or
    :class:`LocalStack` without using a :class:`LocalManager`.

    This should not be needed for modern use cases, and may be removed
    in the future.

    .. versionadded:: 0.6.1
    N)Ú__release_local__)r   s    úB/var/www/piapp/venv/lib/python3.11/site-packages/werkzeug/local.pyÚrelease_localr      s   € ð 
×ÒÑÔÐÐÐó    c                  óV   — e Zd ZdZdZddd„Zdd
„Zddœdd„Zdd„Zdd„Z	dd„Z
dd„ZdS ) ÚLocalaq  Create a namespace of context-local data. This wraps a
    :class:`ContextVar` containing a :class:`dict` value.

    This may incur a performance penalty compared to using individual
    context vars, as it has to copy data to avoid mutating the dict
    between nested contexts.

    :param context_var: The :class:`~contextvars.ContextVar` to use as
        storage for this local. If not given, one will be created.
        Context vars not created at the global scope may interfere with
        garbage collection.

    .. versionchanged:: 2.0
        Uses ``ContextVar`` instead of a custom storage implementation.
    )Ú	__storageNÚcontext_varú#ContextVar[dict[str, t.Any]] | Noner   r   c                ó‚   — |€ t          dt          | ¦  «        › d�¦  «        }t                               | d|¦  «         d S )Nzwerkzeug.Local<ú	>.storageÚ_Local__storage)r   ÚidÚobjectÚ__setattr__©Úselfr   s     r   Ú__init__zLocal.__init__6   sH   € ØÐõ
 %Ð%Jµr¸$±x´xÐ%JÐ%JÐ%JÑKÔKˆKå×Ò˜4Ð!2°KÑ@Ô@Ð@Ð@Ð@r   út.Iterator[tuple[str, t.Any]]c                ót   — t          | j                             i ¦  «                             ¦   «         ¦  «        S ©N)Úiterr!   ÚgetÚitems©r&   s    r   Ú__iter__zLocal.__iter__@   s,   € Ý�D”N×&Ò& rÑ*Ô*×0Ò0Ñ2Ô2Ñ3Ô3Ð3r   ©Úunbound_messageÚnameÚstrr1   ú
str | NoneÚ
LocalProxyc               ó&   — t          | ||¬¦  «        S )zþCreate a :class:`LocalProxy` that access an attribute on this
        local namespace.

        :param name: Proxy this attribute.
        :param unbound_message: The error message that the proxy will
            show if the attribute isn't set.
        r0   ©r5   ©r&   r2   r1   s      r   Ú__call__zLocal.__call__C   s   € õ ˜$ °oÐFÑFÔFÐFr   c                ó:   — | j                              i ¦  «         d S r*   )r!   Úsetr.   s    r   r   zLocal.__release_local__M   s   € ØŒ×Ò˜2ÑÔÐÐÐr   út.Anyc                ól   — | j                              i ¦  «        }||v r||         S t          |¦  «        ‚r*   )r!   r,   ÚAttributeError©r&   r2   Úvaluess      r   Ú__getattr__zLocal.__getattr__P   s8   € Ø”×#Ò# BÑ'Ô'ˆà�6ˆ>ˆ>Ø˜$”<Ðå˜TÑ"Ô"Ð"r   Úvaluec                óœ   — | j                              i ¦  «                             ¦   «         }|||<   | j                              |¦  «         d S r*   )r!   r,   Úcopyr;   )r&   r2   rB   r@   s       r   r$   zLocal.__setattr__X   sH   € Ø”×#Ò# BÑ'Ô'×,Ò,Ñ.Ô.ˆØˆˆt‰ØŒ×Ò˜6Ñ"Ô"Ð"Ð"Ð"r   c                óÂ   — | j                              i ¦  «        }||v r3|                     ¦   «         }||= | j                              |¦  «         d S t	          |¦  «        ‚r*   )r!   r,   rD   r;   r>   r?   s      r   Ú__delattr__zLocal.__delattr__]   s^   € Ø”×#Ò# BÑ'Ô'ˆà�6ˆ>ˆ>Ø—[’[‘]”]ˆFØ�t�ØŒN×Ò˜vÑ&Ô&Ð&Ð&Ð&å  Ñ&Ô&Ð&r   r*   )r   r   r   r   )r   r(   )r2   r3   r1   r4   r   r5   ©r   r   )r2   r3   r   r<   )r2   r3   rB   r<   r   r   )r2   r3   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r'   r/   r9   r   rA   r$   rF   © r   r   r   r   #   sÒ   € € € € € ðð ð  €IðAð Að Að Að Að4ð 4ð 4ð 4ð DHð Gð Gð Gð Gð Gð Gðð ð ð ð#ð #ð #ð #ð#ð #ð #ð #ð
'ð 'ð 'ð 'ð 'ð 'r   r   c                  ób   — e Zd ZdZdZddd„Zdd	„Zdd„Zdd„Ze	dd„¦   «         Z
	 dddœdd„ZdS )Ú
LocalStackaŠ  Create a stack of context-local data. This wraps a
    :class:`ContextVar` containing a :class:`list` value.

    This may incur a performance penalty compared to using individual
    context vars, as it has to copy data to avoid mutating the list
    between nested contexts.

    :param context_var: The :class:`~contextvars.ContextVar` to use as
        storage for this local. If not given, one will be created.
        Context vars not created at the global scope may interfere with
        garbage collection.

    .. versionchanged:: 2.0
        Uses ``ContextVar`` instead of a custom storage implementation.

    .. versionadded:: 0.6.1
    )Ú_storageNr   úContextVar[list[T]] | Noner   r   c                óX   — |€ t          dt          | ¦  «        › d�¦  «        }|| _        d S )Nzwerkzeug.LocalStack<r    )r   r"   rP   r%   s     r   r'   zLocalStack.__init__}   s4   € ØÐõ
 %Ð%O½B¸t¹H¼HÐ%OÐ%OÐ%OÑPÔPˆKà#ˆŒˆˆr   c                ó:   — | j                              g ¦  «         d S r*   )rP   r;   r.   s    r   r   zLocalStack.__release_local__‡   s   € ØŒ×Ò˜"ÑÔÐÐÐr   Úobjr   úlist[T]c                ó¼   — | j                              g ¦  «                             ¦   «         }|                     |¦  «         | j                              |¦  «         |S )z'Add a new item to the top of the stack.)rP   r,   rD   Úappendr;   )r&   rT   Ústacks      r   ÚpushzLocalStack.pushŠ   sP   € à”×!Ò! "Ñ%Ô%×*Ò*Ñ,Ô,ˆØ�Š�SÑÔÐØŒ×Ò˜%Ñ Ô Ð Øˆr   úT | Nonec                ó¸   — | j                              g ¦  «        }t          |¦  «        dk    rdS |d         }| j                              |dd…         ¦  «         |S )zjRemove the top item from the stack and return it. If the
        stack is empty, return ``None``.
        r   Néÿÿÿÿ)rP   r,   Úlenr;   )r&   rX   Úrvs      r   ÚpopzLocalStack.pop‘   sY   € ð ”×!Ò! "Ñ%Ô%ˆåˆu‰:Œ:˜Š?ˆ?Ø�4à�2ŒYˆØŒ×Ò˜%   œ*Ñ%Ô%Ð%Øˆ	r   c                óp   — | j                              g ¦  «        }t          |¦  «        dk    rdS |d         S )z[The topmost item on the stack.  If the stack is empty,
        `None` is returned.
        r   Nr\   )rP   r,   r]   )r&   rX   s     r   ÚtopzLocalStack.topž   s7   € ð
 ”×!Ò! "Ñ%Ô%ˆåˆu‰:Œ:˜Š?ˆ?Ø�4à�RŒyÐr   r0   r2   r4   r1   r5   c               ó&   — t          | ||¬¦  «        S )a@  Create a :class:`LocalProxy` that accesses the top of this
        local stack.

        :param name: If given, the proxy access this attribute of the
            top item, rather than the item itself.
        :param unbound_message: The error message that the proxy will
            show if the stack is empty.
        r0   r7   r8   s      r   r9   zLocalStack.__call__ª   s   € õ ˜$ °oÐFÑFÔFÐFr   r*   )r   rQ   r   r   rG   )rT   r   r   rU   )r   rZ   )r2   r4   r1   r4   r   r5   )rH   rI   rJ   rK   rL   r'   r   rY   r_   Úpropertyra   r9   rM   r   r   rO   rO   h   sÎ   € € € € € ðð ð$ €Ið$ð $ð $ð $ð $ðð ð ð ðð ð ð ðð ð ð ð ð	ð 	ð 	ñ „Xð	ð "&ðGØHLðGð Gð Gð Gð Gð Gð Gð Gr   rO   c                  óB   — e Zd ZdZdZ	 ddd„Zdd	„Zdd„Zdd„Zdd„Z	dS )ÚLocalManagera  Manage releasing the data for the current context in one or more
    :class:`Local` and :class:`LocalStack` objects.

    This should not be needed for modern use cases, and may be removed
    in the future.

    :param locals: A local or list of locals to manage.

    .. versionchanged:: 2.1
        The ``ident_func`` was removed.

    .. versionchanged:: 0.7
        The ``ident_func`` parameter was added.

    .. versionchanged:: 0.6.1
        The :func:`release_local` function can be used instead of a
        manager.
    )ÚlocalsNrf   ú<None | (Local | LocalStack | t.Iterable[Local | LocalStack])r   r   c                ó‚   — |€	g | _         d S t          |t          ¦  «        r
|g| _         d S t          |¦  «        | _         d S r*   )rf   Ú
isinstancer   Úlist)r&   rf   s     r   r'   zLocalManager.__init__Î   sD   € ð ˆ>ØˆDŒKˆKˆKÝ˜¥Ñ&Ô&ð 	'Ø!˜(ˆDŒKˆKˆKå˜v™,œ,ˆDŒKˆKˆKr   c                ó8   — | j         D ]}t          |¦  «         ŒdS )z†Release the data in the locals for this context. Call this at
        the end of each request or use :meth:`make_middleware`.
        N)rf   r   )r&   r   s     r   ÚcleanupzLocalManager.cleanupÙ   s0   € ð ”[ð 	!ð 	!ˆEÝ˜%Ñ Ô Ð Ð ð	!ð 	!r   Úappr   c                ó   ‡ ‡— dˆˆ fd„}|S )	z…Wrap a WSGI application so that local data is released
        automatically after the response has been sent for a request.
        Úenvironr   Ústart_responser   r   út.Iterable[bytes]c                óB   •— t           ‰| |¦  «        ‰j        ¦  «        S r*   )r
   rl   )ro   rp   rm   r&   s     €€r   Úapplicationz1LocalManager.make_middleware.<locals>.applicationå   s#   ø€ õ # 3 3 w°Ñ#?Ô#?ÀÄÑNÔNÐNr   )ro   r   rp   r   r   rq   rM   )r&   rm   rs   s   `` r   Úmake_middlewarezLocalManager.make_middlewareà   s6   øø€ ð
	Oð 	Oð 	Oð 	Oð 	Oð 	Oð 	Oð
 Ðr   Úfuncc                óH   — t          |                      |¦  «        |¦  «        S )zòLike :meth:`make_middleware` but used as a decorator on the
        WSGI application function.

        .. code-block:: python

            @manager.middleware
            def application(environ, start_response):
                ...
        )r   rt   )r&   ru   s     r   Ú
middlewarezLocalManager.middlewareì   s"   € õ ˜d×2Ò2°4Ñ8Ô8¸$Ñ?Ô?Ð?r   r3   c                ó\   — dt          | ¦  «        j        › dt          | j        ¦  «        › d�S )Nú<z storages: ú>)ÚtyperH   r]   rf   r.   s    r   Ú__repr__zLocalManager.__repr__ø   s.   € ØF•4˜‘:”:Ô&ÐFÐFµ3°t´{Ñ3CÔ3CÐFÐFÐFÐFr   r*   )rf   rg   r   r   rG   )rm   r   r   r   )ru   r   r   r   ©r   r3   )
rH   rI   rJ   rK   rL   r'   rl   rt   rw   r|   rM   r   r   re   re   ¸   sŸ   € € € € € ðð ð& €Ið PTð	'ð 	'ð 	'ð 	'ð 	'ð!ð !ð !ð !ð
ð 
ð 
ð 
ð
@ð 
@ð 
@ð 
@ðGð Gð Gð Gð Gð Gr   re   c                  óJ   — e Zd ZdZdZ	 	 	 	 ddd„Zdd„Zdd d„Zd!d„Zd"d„Z	dS )#Ú_ProxyLookupa”  Descriptor that handles proxied attribute lookup for
    :class:`LocalProxy`.

    :param f: The built-in function this attribute is accessed through.
        Instead of looking up the special method, the function call
        is redone on the object.
    :param fallback: Return this function if the proxy is unbound
        instead of raising a :exc:`RuntimeError`.
    :param is_attr: This proxied name is an attribute, not a function.
        Call the fallback immediately to get the value.
    :param class_value: Value to return when accessed from the
        ``LocalProxy`` class directly. Used for ``__doc__`` so building
        docs still works.
    )Úbind_fÚfallbackÚis_attrÚclass_valuer2   NFÚfút.Callable | Noner�   rƒ   út.Any | Noner‚   Úboolr   r   c                ó„   ‡— t          ‰d¦  «        rd
ˆfd„}n‰�d
ˆfd	„}nd }|| _        || _        || _        || _        d S )NÚ__get__Úinstancer5   rT   r<   r   ú
t.Callablec                óJ   •— ‰                      |t          |¦  «        ¦  «        S r*   ©r‰   r{   ©rŠ   rT   r„   s     €r   r€   z%_ProxyLookup.__init__.<locals>.bind_f  s   ø€ Ø—y’y ¥d¨3¡i¤iÑ0Ô0Ð0r   c                ó$   •— t          ‰|¦  «        S r*   r   rŽ   s     €r   r€   z%_ProxyLookup.__init__.<locals>.bind_f   s   ø€ Ý˜q #‘”Ð&r   ©rŠ   r5   rT   r<   r   r‹   )Úhasattrr€   r�   rƒ   r‚   )r&   r„   r�   rƒ   r‚   r€   s    `    r   r'   z_ProxyLookup.__init__  sŒ   ø€ õ �1�iÑ Ô ð 	ð1ð 1ð 1ð 1ð 1ð 1ð 1ð ˆ]ð'ð 'ð 'ð 'ð 'ð 'ð 'ð
 ˆFàˆŒØ ˆŒØ&ˆÔØˆŒˆˆr   Úownerr5   r2   r3   c                ó   — || _         d S r*   ©r2   )r&   r’   r2   s      r   Ú__set_name__z_ProxyLookup.__set_name__,  s   € ØˆŒ	ˆ	ˆ	r   rŠ   útype | Noner<   c                óF  — |€| j         �| j         S | S 	 |                     ¦   «         }nH# t          $ r; | j        €‚ | j                             ||¦  «        }| j        r |¦   «         cY S |cY S w xY w| j        �|                      ||¦  «        S t          || j        ¦  «        S r*   )	rƒ   Ú_get_current_objectÚRuntimeErrorr�   r‰   r‚   r€   Úgetattrr2   )r&   rŠ   r’   rT   r�   s        r   r‰   z_ProxyLookup.__get__/  sË   € ØÐØÔÐ+ØÔ'Ð'àˆKð	Ø×.Ò.Ñ0Ô0ˆCˆCøÝð 	ð 	ð 	ØŒ}Ð$Øà”}×,Ò,¨X°uÑ=Ô=ˆHàŒ|ð "ð  �x‘z”zÐ!Ð!Ð!àˆOˆOˆOð	øøøð Œ;Ð"Ø—;’;˜x¨Ñ-Ô-Ð-å�s˜DœIÑ&Ô&Ð&s   ”) ©>A.Á)A.Á-A.c                ó   — d| j         › �S )Nzproxy r”   r.   s    r   r|   z_ProxyLookup.__repr__J  s   € Ø#˜œ	Ð#Ð#Ð#r   ÚargsÚkwargsc                óT   —  |                       |t          |¦  «        ¦  «        |i |¤ŽS )zíSupport calling unbound methods from the class. For example,
        this happens with ``copy.copy``, which does
        ``type(x).__copy__(x)``. ``type(x)`` can't be proxied, so it
        returns the proxy type and descriptor.
        r�   )r&   rŠ   rœ   r�   s       r   r9   z_ProxyLookup.__call__M  s-   € ð 6ˆt�|Š|˜H¥d¨8¡n¤nÑ5Ô5°tÐF¸vÐFÐFÐFr   )NNNF)
r„   r…   r�   r…   rƒ   r†   r‚   r‡   r   r   )r’   r5   r2   r3   r   r   r*   )rŠ   r5   r’   r–   r   r<   r}   )rŠ   r5   rœ   r<   r�   r<   r   r<   )
rH   rI   rJ   rK   rL   r'   r•   r‰   r|   r9   rM   r   r   r   r   ü   s¨   € € € € € ðð ð I€Ið  $Ø&*Ø$(Øðð ð ð ð ð<ð ð ð ð'ð 'ð 'ð 'ð 'ð6$ð $ð $ð $ðGð Gð Gð Gð Gð Gr   r   c                  ó,   ‡ — e Zd ZdZdZ	 d
dˆ fd	„Zˆ xZS )Ú	_ProxyIOpz…Look up an augmented assignment method on a proxied object. The
    method is wrapped to return the proxy instead of the object.
    rM   Nr„   r…   r�   r   r   c                óh   •‡— t          ¦   «                              ‰|¦  «         dˆfd„}|| _        d S )	NrŠ   r5   rT   r<   r   r‹   c                óZ   •‡ — dˆˆ fd„}|                      |t          |¦  «        ¦  «        S )Nr&   r<   Úotherr   r5   c                ó    •—  ‰| |¦  «         ‰S r*   rM   )r&   r£   r„   rŠ   s     €€r   Úi_opz0_ProxyIOp.__init__.<locals>.bind_f.<locals>.i_opc  s   ø€ Ø��$˜‘”�Ø�r   )r&   r<   r£   r<   r   r5   r�   )rŠ   rT   r¥   r„   s   `  €r   r€   z"_ProxyIOp.__init__.<locals>.bind_fb  sC   øø€ ð ð  ð  ð  ð  ð  ð  ð —<’< ¥T¨#¡Y¤YÑ/Ô/Ð/r   r�   )Úsuperr'   r€   )r&   r„   r�   r€   Ú	__class__s    `  €r   r'   z_ProxyIOp.__init__]  sK   øø€ õ 	‰Œ×Ò˜˜HÑ%Ô%Ð%ð	0ð 	0ð 	0ð 	0ð 	0ð 	0ð ˆŒˆˆr   )NN)r„   r…   r�   r…   r   r   )rH   rI   rJ   rK   rL   r'   Ú__classcell__)r§   s   @r   r    r    V  sZ   ø€ € € € € ðð ð €Ið JNðð ð ð ð ð ð ð ð ð ð r   r    Úopc                óD   ‡ — dˆ fd„}t          j        t          |¦  «        S )z5Swap the argument order to turn an l-op into an r-op.rT   r<   r£   r   c                ó   •—  ‰|| ¦  «        S r*   rM   )rT   r£   r©   s     €r   Úr_opz_l_to_r_op.<locals>.r_opo  s   ø€ Øˆr�%˜‰~Œ~Ðr   )rT   r<   r£   r<   r   r<   )ÚtÚcastr   )r©   r¬   s   ` r   Ú
_l_to_r_opr¯   l  s3   ø€ ðð ð ð ð ð õ Œ6•!�T‰?Œ?Ðr   Úoc                ó   — | S r*   rM   )r°   s    r   Ú	_identityr²   u  s   € Ø€Hr   c                  ó†  — e Zd ZU dZdZded<   	 	 dddœdd„Z eed„ d¬¦  «        Z ed„ d¬¦  «        Z ee	d„ ¬¦  «        Z
 ee¦  «        Z ee¦  «        Z e¦   «         Z eej        ¦  «        Z eej        ¦  «        Z eej        ¦  «        Z eej        ¦  «        Z eej        ¦  «        Z eej        ¦  «        Z ee¦  «        Z eed„ ¬¦  «        Z  ee!¦  «        Z" ee#¦  «        Z$ ee%¦  «        Z& ee'd„ ¬¦  «        Z( ed„ d¬¦  «        Z) ed„ ¦  «        Z* ed„ ¦  «        Z+ ed„ ¦  «        Z, ee-¦  «        Z. eej/        ¦  «        Z0 eej1        ¦  «        Z2 eej3        ¦  «        Z4 eej5        ¦  «        Z6 ee7¦  «        Z8 ee9¦  «        Z: ee;¦  «        Z< eej=        ¦  «        Z> eej?        ¦  «        Z@ eejA        ¦  «        ZB eejC        ¦  «        ZD eejE        ¦  «        ZF eejG        ¦  «        ZH eejI        ¦  «        ZJ eejK        ¦  «        ZL eeM¦  «        ZN eeO¦  «        ZP eejQ        ¦  «        ZR eejS        ¦  «        ZT eejU        ¦  «        ZV eejW        ¦  «        ZX eejY        ¦  «        ZZ e e[ej?        ¦  «        ¦  «        Z\ e e[ejA        ¦  «        ¦  «        Z] e e[ejC        ¦  «        ¦  «        Z^ e e[ejE        ¦  «        ¦  «        Z_ e e[ejG        ¦  «        ¦  «        Z` e e[ejI        ¦  «        ¦  «        Za e e[ejK        ¦  «        ¦  «        Zb e e[eM¦  «        ¦  «        Zc e e[eO¦  «        ¦  «        Zd e e[ejQ        ¦  «        ¦  «        Ze e e[ejS        ¦  «        ¦  «        Zf e e[ejU        ¦  «        ¦  «        Zg e e[ejW        ¦  «        ¦  «        Zh e e[ejY        ¦  «        ¦  «        Zi ejejk        ¦  «        Zl ejejm        ¦  «        Zn ejejo        ¦  «        Zp ejejq        ¦  «        Zr ejejs        ¦  «        Zt ejeju        ¦  «        Zv ejejw        ¦  «        Zx ejejy        ¦  «        Zz ejej{        ¦  «        Z| ejej}        ¦  «        Z~ ejej        ¦  «        Z€ ejej�        ¦  «        Z‚ ejejƒ        ¦  «        Z„ eej…        ¦  «        Z† eej‡        ¦  «        Zˆ ee‰¦  «        ZŠ eej‹        ¦  «        ZŒ ee�¦  «        ZŽ ee�¦  «        Z� ee‘¦  «        Z’ eej“        ¦  «        Z” ee•¦  «        Z– ee—j˜        ¦  «        Z™ ee—jš        ¦  «        Z› ee—jœ        ¦  «        Z� e¦   «         Zž e¦   «         ZŸ e¦   «         Z  e¦   «         Z¡ e¦   «         Z¢ e¦   «         Z£ e¦   «         Z¤ ee¥j¥        ¦  «        Z¦ ee¥j§        ¦  «        Z¨dS )r5   as	  A proxy to the object bound to a context-local object. All
    operations on the proxy are forwarded to the bound object. If no
    object is bound, a ``RuntimeError`` is raised.

    :param local: The context-local object that provides the proxied
        object.
    :param name: Proxy this attribute from the proxied object.
    :param unbound_message: The error message to show if the
        context-local object is unbound.

    Proxy a :class:`~contextvars.ContextVar` to make it easier to
    access. Pass a name to proxy that attribute.

    .. code-block:: python

        _request_var = ContextVar("request")
        request = LocalProxy(_request_var)
        session = LocalProxy(_request_var, "session")

    Proxy an attribute on a :class:`Local` namespace by calling the
    local with the attribute name:

    .. code-block:: python

        data = Local()
        user = data("user")

    Proxy the top item on a :class:`LocalStack` by calling the local.
    Pass a name to proxy that attribute.

    .. code-block::

        app_stack = LocalStack()
        current_app = app_stack()
        g = app_stack("g")

    Pass a function to proxy the return value from that function. This
    was previously used to access attributes of local objects before
    that was supported directly.

    .. code-block:: python

        session = LocalProxy(lambda: request.session)

    ``__repr__`` and ``__class__`` are proxied, so ``repr(x)`` and
    ``isinstance(x, cls)`` will look like the proxied object. Use
    ``issubclass(type(x), LocalProxy)`` to check if an object is a
    proxy.

    .. code-block:: python

        repr(user)  # <User admin>
        isinstance(user, User)  # True
        issubclass(type(user), LocalProxy)  # True

    .. versionchanged:: 2.2.2
        ``__wrapped__`` is set when wrapping an object, not only when
        wrapping a function, to prevent doctest from failing.

    .. versionchanged:: 2.2
        Can proxy a ``ContextVar`` or ``LocalStack`` directly.

    .. versionchanged:: 2.2
        The ``name`` parameter can be used with any proxied object, not
        only ``Local``.

    .. versionchanged:: 2.2
        Added the ``unbound_message`` parameter.

    .. versionchanged:: 2.0
        Updated proxied attributes and methods to reflect the current
        data model.

    .. versionchanged:: 0.6.1
        The class can be instantiated with a callable.
    )Ú	__wrappedr˜   zt.Callable[[], T]r˜   Nr0   r   ú9ContextVar[T] | Local | LocalStack[T] | t.Callable[[], T]r2   r4   r1   r   r   c               óú  ‡‡‡— |€t           Šnt          |¦  «        Š‰€dŠt          ‰t          ¦  «        r|€t	          d¦  «        ‚dˆˆˆfd„}nst          ‰t
          ¦  «        r	dˆˆˆfd„}nUt          ‰t          ¦  «        r	dˆˆˆfd„}n7t          ‰¦  «        rdˆˆfd„}n t	          d	t          ‰¦  «        › d
�¦  «        ‚t           
                    | d‰¦  «         t           
                    | d|¦  «         d S )Nzobject is not boundz2'name' is required when proxying a 'Local' object.r   r   c                 óX   •— 	  ‰ ‰¦  «        S # t           $ r t          ‰¦  «        d ‚w xY wr*   )r>   r™   )Úget_namer   r1   s   €€€r   r˜   z0LocalProxy.__init__.<locals>._get_current_objectæ  sF   ø€ ðBØ#˜8 E™?œ?Ð*øÝ%ð Bð Bð BÝ& Ñ7Ô7¸TÐAðBøøøs   ƒ
 Ž)c                 óJ   •— ‰j         } | €t          ‰¦  «        ‚ ‰| ¦  «        S r*   )ra   r™   ©rT   r¸   r   r1   s    €€€r   r˜   z0LocalProxy.__init__.<locals>._get_current_objectî  s+   ø€ Ø”i�à�;Ý& Ñ7Ô7Ð7à�x ‘}”}Ð$r   c                 ó‚   •— 	 ‰                      ¦   «         } n# t          $ r t          ‰¦  «        d ‚w xY w ‰| ¦  «        S r*   )r,   ÚLookupErrorr™   rº   s    €€€r   r˜   z0LocalProxy.__init__.<locals>._get_current_objectø  sW   ø€ ðBØŸ)š)™+œ+�C�CøÝ"ð Bð Bð BÝ& Ñ7Ô7¸TÐAðBøøøð  �x ‘}”}Ð$s   ƒ ˜3c                 ó*   •—  ‰  ‰¦   «         ¦  «        S r*   rM   )r¸   r   s   €€r   r˜   z0LocalProxy.__init__.<locals>._get_current_object  s   ø€ Ø�x  ¡¤Ñ(Ô(Ð(r   zDon't know how to proxy 'z'.Ú_LocalProxy__wrappedr˜   )r   r   )r²   r   ri   r   Ú	TypeErrorrO   r   Úcallabler{   r#   r$   )r&   r   r2   r1   r˜   r¸   s    ` ` @r   r'   zLocalProxy.__init__Ó  s   øøø€ ð ˆ<Ý ˆHˆHå! $Ñ'Ô'ˆHàÐ"Ø3ˆOå�e�UÑ#Ô#ð $	IØˆ|ÝÐ TÑUÔUÐUðBð Bð Bð Bð Bð Bð Bð Bð Bõ ˜�zÑ*Ô*ð 	Ið%ð %ð %ð %ð %ð %ð %ð %ð %õ ˜�zÑ*Ô*ð 	Ið%ð %ð %ð %ð %ð %ð %ð %ð %õ �e‰_Œ_ð 	Ið)ð )ð )ð )ð )ð )ð )ð )õ ÐG½¸U¹¼ÐGÐGÐGÑHÔHÐHå×Ò˜4Ð!7¸Ñ?Ô?Ð?Ý×Ò˜4Ð!6Ð8KÑLÔLÐLÐLÐLr   c                ó*   — t          | ¦  «        j        S r*   )r{   rK   r.   s    r   ú<lambda>zLocalProxy.<lambda>  s   € µ4¸±:´:Ô3E€ r   T)rƒ   r�   r‚   c                ó   — | j         S r*   )r¾   r.   s    r   rÂ   zLocalProxy.<lambda>  s	   € ˜dÔ7€ r   )r�   r‚   c                ó2   — dt          | ¦  «        j        › d�S )Nry   z	 unbound>)r{   rH   r.   s    r   rÂ   zLocalProxy.<lambda>  s   € Ð$F­¨T©
¬
Ô(;Ð$FÐ$FÐ$F€ r   )r�   c                ó   — dS )NFrM   r.   s    r   rÂ   zLocalProxy.<lambda>  s   € ¸€ r   c                ó   — g S r*   rM   r.   s    r   rÂ   zLocalProxy.<lambda>$  s   € °b€ r   c                ó    — t          | ¦  «        S r*   )r{   r.   s    r   rÂ   zLocalProxy.<lambda>/  s   € µ4¸±:´:€ r   c                ó"   — t          || ¦  «        S r*   )ri   ©r&   r£   s     r   rÂ   zLocalProxy.<lambda>0  ó   € ½ÀEÈ4Ñ9PÔ9P€ r   c                ó"   — t          || ¦  «        S r*   )Ú
issubclassrÉ   s     r   rÂ   zLocalProxy.<lambda>1  rÊ   r   c                ó   —  | |i |¤ŽS r*   rM   )r&   rœ   r�   s      r   rÂ   zLocalProxy.<lambda>3  s   € ¸$¸$ÀÐ:OÈÐ:OÐ:O€ r   r*   )r   rµ   r2   r4   r1   r4   r   r   )©rH   rI   rJ   rK   rL   Ú__annotations__r'   r   Ú__wrapped__Úreprr|   r3   Ú__str__ÚbytesÚ	__bytes__Ú
__format__ÚoperatorÚltÚ__lt__ÚleÚ__le__ÚeqÚ__eq__ÚneÚ__ne__ÚgtÚ__gt__ÚgeÚ__ge__ÚhashÚ__hash__r‡   Ú__bool__rš   rA   Úsetattrr$   ÚdelattrrF   ÚdirÚ__dir__r§   Ú__instancecheck__Ú__subclasscheck__r9   r]   Ú__len__Úlength_hintÚ__length_hint__ÚgetitemÚ__getitem__ÚsetitemÚ__setitem__ÚdelitemÚ__delitem__r+   r/   ÚnextÚ__next__ÚreversedÚ__reversed__ÚcontainsÚ__contains__ÚaddÚ__add__ÚsubÚ__sub__ÚmulÚ__mul__ÚmatmulÚ
__matmul__ÚtruedivÚ__truediv__ÚfloordivÚ__floordiv__ÚmodÚ__mod__ÚdivmodÚ
__divmod__ÚpowÚ__pow__ÚlshiftÚ
__lshift__ÚrshiftÚ
__rshift__Úand_Ú__and__ÚxorÚ__xor__Úor_Ú__or__r¯   Ú__radd__Ú__rsub__Ú__rmul__Ú__rmatmul__Ú__rtruediv__Ú__rfloordiv__Ú__rmod__Ú__rdivmod__Ú__rpow__Ú__rlshift__Ú__rrshift__Ú__rand__Ú__rxor__Ú__ror__r    ÚiaddÚ__iadd__ÚisubÚ__isub__ÚimulÚ__imul__ÚimatmulÚ__imatmul__ÚitruedivÚ__itruediv__Ú	ifloordivÚ__ifloordiv__ÚimodÚ__imod__ÚipowÚ__ipow__ÚilshiftÚ__ilshift__ÚirshiftÚ__irshift__ÚiandÚ__iand__ÚixorÚ__ixor__ÚiorÚ__ior__ÚnegÚ__neg__ÚposÚ__pos__ÚabsÚ__abs__ÚinvertÚ
__invert__ÚcomplexÚ__complex__ÚintÚ__int__ÚfloatÚ	__float__ÚindexÚ	__index__ÚroundÚ	__round__ÚmathÚtruncÚ	__trunc__ÚfloorÚ	__floor__ÚceilÚ__ceil__Ú	__enter__Ú__exit__Ú	__await__Ú	__aiter__Ú	__anext__Ú
__aenter__Ú	__aexit__rD   Ú__copy__ÚdeepcopyÚ__deepcopy__rM   r   r   r5   r5   y  s)  € € € € € € ðKð KðZ 5€Ià*Ð*Ð*Ñ*ðð  ð6Mð
 '+ð6Mð 6Mð 6Mð 6Mð 6Mð 6Mðp ˆlØÐ&EÐ&EÈtðñ ô €Gð �,Ø7Ð7Àðñ ô €Kð ˆ|ØÐFÐFðñ ô €Hð ˆl˜3ÑÔ€GØ�˜UÑ#Ô#€IØ�‘”€JØˆ\˜(œ+Ñ&Ô&€FØˆ\˜(œ+Ñ&Ô&€FØˆ\˜(œ+Ñ&Ô&€FØˆ\˜(œ+Ñ&Ô&€FØˆ\˜(œ+Ñ&Ô&€FØˆ\˜(œ+Ñ&Ô&€FØˆ|˜DÑ!Ô!€HØˆ|˜DÐ+=Ð+=Ð>Ñ>Ô>€HØ�,˜wÑ'Ô'€Kà�,˜wÑ'Ô'€KØ�,˜wÑ'Ô'€KØˆl˜3¨¨Ð9Ñ9Ô9€Gð �Ð&=Ð&=ÀtÐLÑLÔL€IØ$˜Ð%PÐ%PÑQÔQÐØ$˜Ð%PÐ%PÑQÔQÐàˆ|ÐOÐOÑPÔP€HØˆl˜3ÑÔ€GØ"�l 8Ô#7Ñ8Ô8€OØ�,˜xÔ/Ñ0Ô0€KØ�,˜xÔ/Ñ0Ô0€KØ�,˜xÔ/Ñ0Ô0€Kàˆ|˜DÑ!Ô!€HØˆ|˜DÑ!Ô!€HØ�< Ñ)Ô)€LØ�< Ô 1Ñ2Ô2€LØˆl˜8œ<Ñ(Ô(€GØˆl˜8œ<Ñ(Ô(€GØˆl˜8œ<Ñ(Ô(€GØ�˜hœoÑ.Ô.€JØ�,˜xÔ/Ñ0Ô0€KØ�< Ô 1Ñ2Ô2€LØˆl˜8œ<Ñ(Ô(€GØ�˜fÑ%Ô%€JØˆl˜3ÑÔ€GØ�˜hœoÑ.Ô.€JØ�˜hœoÑ.Ô.€JØˆl˜8œ=Ñ)Ô)€GØˆl˜8œ<Ñ(Ô(€GØˆ\˜(œ,Ñ'Ô'€FØˆ|˜J˜J x¤|Ñ4Ô4Ñ5Ô5€HØˆ|˜J˜J x¤|Ñ4Ô4Ñ5Ô5€HØˆ|˜J˜J x¤|Ñ4Ô4Ñ5Ô5€HØ�,˜z˜z¨(¬/Ñ:Ô:Ñ;Ô;€KØ�< 
 
¨8Ô+;Ñ <Ô <Ñ=Ô=€LØ �L  ¨HÔ,=Ñ!>Ô!>Ñ?Ô?€MØˆ|˜J˜J x¤|Ñ4Ô4Ñ5Ô5€HØ�,˜z˜z¨&Ñ1Ô1Ñ2Ô2€KØˆ|˜J˜J s™OœOÑ,Ô,€HØ�,˜z˜z¨(¬/Ñ:Ô:Ñ;Ô;€KØ�,˜z˜z¨(¬/Ñ:Ô:Ñ;Ô;€KØˆ|˜J˜J x¤}Ñ5Ô5Ñ6Ô6€HØˆ|˜J˜J x¤|Ñ4Ô4Ñ5Ô5€HØˆl˜:˜: h¤lÑ3Ô3Ñ4Ô4€GØˆy˜œÑ'Ô'€HØˆy˜œÑ'Ô'€HØˆy˜œÑ'Ô'€HØ�)˜HÔ,Ñ-Ô-€KØ�9˜XÔ.Ñ/Ô/€LØ�I˜hÔ0Ñ1Ô1€MØˆy˜œÑ'Ô'€HØˆy˜œÑ'Ô'€HØ�)˜HÔ,Ñ-Ô-€KØ�)˜HÔ,Ñ-Ô-€KØˆy˜œÑ'Ô'€HØˆy˜œÑ'Ô'€HØˆi˜œÑ%Ô%€GØˆl˜8œ<Ñ(Ô(€GØˆl˜8œ<Ñ(Ô(€GØˆl˜3ÑÔ€GØ�˜hœoÑ.Ô.€JØ�,˜wÑ'Ô'€KØˆl˜3ÑÔ€GØ�˜UÑ#Ô#€IØ�˜Xœ^Ñ,Ô,€IØ�˜UÑ#Ô#€IØ�˜TœZÑ(Ô(€IØ�˜TœZÑ(Ô(€IØˆ|˜DœIÑ&Ô&€HØ�‘”€IØˆ|‰~Œ~€HØ�‘”€IØ�‘”€IØ�‘”€IØ�‘”€JØ�‘”€IØˆ|˜DœIÑ&Ô&€HØ�< ¤Ñ.Ô.€L€L€Lr   r5   )r   r   r   r   )r©   r   r   r   )r°   r   r   r   )#Ú
__future__r   rD   rP  rÕ   Útypingr­   Úcontextvarsr   Ú	functoolsr   r   r   Úwsgir
   ÚTYPE_CHECKINGÚ_typeshed.wsgir   r   r   ÚTypeVarr   ÚCallableÚAnyr   r   r   ÚGenericrO   re   r   r    r¯   r²   r5   rM   r   r   ú<module>rl     s˜  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !à„?ð /Ø,Ð,Ð,Ð,Ð,Ð,Ø.Ð.Ð.Ð.Ð.Ð.Ø.Ð.Ð.Ð.Ð.Ð.à€A„Iˆc�N„N€Ø€A„Iˆc˜œ C¨¬ JÔ/Ð0Ñ0Ô0€ð	ð 	ð 	ð 	ðB'ð B'ð B'ð B'ð B'ñ B'ô B'ð B'ðJMGð MGð MGð MGð MG�”˜1”ñ MGô MGð MGð`AGð AGð AGð AGð AGñ AGô AGð AGðHWGð WGð WGð WGð WGñ WGô WGð WGðtð ð ð ð �ñ ô ð ð,ð ð ð ðð ð ð ðB/ð B/ð B/ð B/ð B/�”˜1”ñ B/ô B/ð B/ð B/ð B/r   