o
    àý°j2  ã                   @  s€   d dl mZ d dlZddlmZ ddlmZ ddlmZ ej	dej
dejf d	�Zeg d
¢ƒZG dd„ dƒZG dd„ deƒZdS )é    )ÚannotationsNé   )Útyping)Úcurrent_app)ÚrequestÚF.)Úbound)ÚgetÚpostÚheadÚoptionsÚdeleteÚputÚtraceÚpatchc                   @  sZ   e Zd ZU dZdZded< dZded< g Zded< d	Zd
ed< ddd„Z	e
ddd„ƒZdS )ÚViewa  Subclass this class and override :meth:`dispatch_request` to
    create a generic class-based view. Call :meth:`as_view` to create a
    view function that creates an instance of the class with the given
    arguments and calls its ``dispatch_request`` method with any URL
    variables.

    See :doc:`views` for a detailed guide.

    .. code-block:: python

        class Hello(View):
            init_every_request = False

            def dispatch_request(self, name):
                return f"Hello, {name}!"

        app.add_url_rule(
            "/hello/<name>", view_func=Hello.as_view("hello")
        )

    Set :attr:`methods` on the class to change what methods the view
    accepts.

    Set :attr:`decorators` on the class to apply a list of decorators to
    the generated view function. Decorators applied to the class itself
    will not be applied to the generated view function!

    Set :attr:`init_every_request` to ``False`` for efficiency, unless
    you need to store request-global data on ``self``.
    Nz$t.ClassVar[t.Collection[str] | None]Úmethodszt.ClassVar[bool | None]Úprovide_automatic_optionsz(t.ClassVar[list[t.Callable[..., t.Any]]]Ú
decoratorsTzt.ClassVar[bool]Úinit_every_requestÚreturnúft.ResponseReturnValuec                 C  s   t ƒ ‚)z·The actual view function behavior. Subclasses must override
        this and return a valid response. Any variables from the URL
        rule are passed as keyword arguments.
        )ÚNotImplementedError©Úself© r   ú~/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/flask/views.pyÚdispatch_requestN   s   zView.dispatch_requestÚnameÚstrÚ
class_argsút.AnyÚclass_kwargsúft.RouteCallablec                   sŽ   | j rd	‡ ‡‡fdd„‰n| ˆ i ˆ¤Ž‰d	‡fdd„‰| jr/|ˆ_| jˆ_| jD ]}|ˆƒ‰q(| ˆ_|ˆ_| jˆ_| jˆ_| jˆ_| jˆ_ˆS )
af  Convert the class into a view function that can be registered
        for a route.

        By default, the generated view will create a new instance of the
        view class for every request and call its
        :meth:`dispatch_request` method. If the view class sets
        :attr:`init_every_request` to ``False``, the same instance will
        be used for every request.

        Except for ``name``, all other arguments passed to this method
        are forwarded to the view class ``__init__`` method.

        .. versionchanged:: 2.2
            Added the ``init_every_request`` class attribute.
        Úkwargsr!   r   r   c                    s&   ˆj ˆ i ˆ¤Ž}t |j¡di | ¤ŽS ©Nr   )Ú
view_classr   Úensure_syncr   )r$   r   )r    r"   Úviewr   r   r(   j   s   ÿÿzView.as_view.<locals>.viewc                    s   t  ˆ j¡di | ¤ŽS r%   )r   r'   r   )r$   r   r   r   r(   s   s   N©r$   r!   r   r   )r   r   Ú__name__Ú
__module__r&   Ú__doc__r   r   )Úclsr   r    r"   Ú	decoratorr   )r    r"   r   r(   r   Úas_viewU   s    

zView.as_view)r   r   )r   r   r    r!   r"   r!   r   r#   )r*   r+   Ú__qualname__r,   r   Ú__annotations__r   r   r   r   Úclassmethodr/   r   r   r   r   r      s   
 "
r   c                      s,   e Zd ZdZd‡ fdd„Zdd	d
„Z‡  ZS )Ú
MethodViewaí  Dispatches request methods to the corresponding instance methods.
    For example, if you implement a ``get`` method, it will be used to
    handle ``GET`` requests.

    This can be useful for defining a REST API.

    :attr:`methods` is automatically set based on the methods defined on
    the class.

    See :doc:`views` for a detailed guide.

    .. code-block:: python

        class CounterAPI(MethodView):
            def get(self):
                return str(session.get("counter", 0))

            def post(self):
                session["counter"] = session.get("counter", 0) + 1
                return redirect(url_for("counter"))

        app.add_url_rule(
            "/counter", view_func=CounterAPI.as_view("counter")
        )
    r$   r!   r   ÚNonec                   s~   t ƒ jdi |¤Ž d| jvr;tƒ }| jD ]}t|dd ƒr"| |j¡ qtD ]}t	| |ƒr3| 
| ¡ ¡ q%|r=|| _d S d S d S )Nr   r   )ÚsuperÚ__init_subclass__Ú__dict__ÚsetÚ	__bases__ÚgetattrÚupdater   Úhttp_method_funcsÚhasattrÚaddÚupper)r-   r$   r   ÚbaseÚkey©Ú	__class__r   r   r6   ¥   s   

€
€
ôzMethodView.__init_subclass__r   c                 K  s\   t | tj ¡ d ƒ}|d u rtjdkrt | dd ƒ}|d us$J dtj›�ƒ‚t |¡di |¤ŽS )NÚHEADr	   zUnimplemented method r   )r:   r   ÚmethodÚlowerr   r'   )r   r$   Úmethr   r   r   r   ¶   s
   zMethodView.dispatch_request)r$   r!   r   r4   r)   )r*   r+   r0   r,   r6   r   Ú__classcell__r   r   rB   r   r3   Š   s    r3   )Ú
__future__r   r   ÚtÚ ÚftÚglobalsr   r   ÚTypeVarÚCallableÚAnyr   Ú	frozensetr<   r   r3   r   r   r   r   Ú<module>   s    ÿz