
    +h                    z    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	g d      Z
 G d d	      Z G d
 de      Zy)    )annotationsN   )typing)current_app)request)getpostheadoptionsdeleteputtracepatchc                  t    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Z	e
	 	 	 	 	 	 	 	 dd       Zy)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]]
decoratorsTzt.ClassVar[bool]init_every_requestc                    t               )zThe 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)selfs    >/var/www/html/venv/lib/python3.12/site-packages/flask/views.pydispatch_requestzView.dispatch_requestM   s    
 "##    c                r   | j                   r	dfdn | i dfd| j                  r1|_        | j                  _        | j                  D ]
  } |       | _        |_        | 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.
        c                 r     j                   i } t        j                  |j                        di | S N )
view_classr   ensure_syncr   )kwargsr   
class_argsclass_kwargsviews     r   r%   zView.as_view.<locals>.viewi   sB    &t#/ F{..t/D/DEOOOr   c                 N     t        j                  j                        di | S r   )r   r!   r   )r"   r   s    r   r%   zView.as_view.<locals>.viewr   s$    E{..t/D/DEOOOr   r"   t.Anyreturnft.ResponseReturnValue)r   r   __name__
__module__r    __doc__r   r   )clsnamer#   r$   	decoratorr   r%   s     `` @@r   as_viewzView.as_viewT   s    & !!P P 
3l3DP >> DM!nnDO ^^ '	 ' {{..{{),)F)F&r   )r)   r*   )r/   strr#   r(   r$   r(   r)   zft.RouteCallable)r+   r,   __qualname__r-   r   __annotations__r   r   r   r   classmethodr1   r   r   r   r   r      sw    D 59G18
 :>6= 02J,1 ,0(/$ 11%*1<A1	1 1r   r   c                  ,     e Zd ZdZd fdZddZ x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")
        )
    c                L   t        |   di | d| j                  vrt               }| j                  D ]+  }t        |dd       s|j                  |j                         - t        D ].  }t        | |      s|j                  |j                                0 |r|| _        y y y )Nr   r   )super__init_subclass____dict__set	__bases__getattrupdater   http_method_funcshasattraddupper)r.   r"   r   basekey	__class__s        r   r:   zMethodView.__init_subclass__   s    !+F+CLL(eG 14D1NN4<<01 ) -3$KK		,- %  )r   c                   t        | t        j                  j                         d       }| t        j                  dk(  rt        | dd       }|J dt        j                          t	        j
                  |      di |S )NHEADr   zUnimplemented method r   )r>   r   methodlowerr   r!   )r   r"   meths      r   r   zMethodView.dispatch_request   sv    tW^^113T: <GNNf44-DK#88J!KK,{&&t,6v66r   )r"   r(   r)   Noner'   )r+   r,   r3   r-   r:   r   __classcell__)rF   s   @r   r7   r7      s    4&"	7r   r7   )
__future__r   r   t ftglobalsr   r   	frozensetr@   r   r7   r   r   r   <module>rT      s=    "      I 
w wt57 57r   