
    H[g2                        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   	      Z eg d
      Z G d d      Z G d de      Zy)    )annotationsN   )typing)current_app)requestF.)bound)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[..., t.Any]]]
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    F/var/www/html/bid-api/venv/lib/python3.12/site-packages/flask/views.pydispatch_requestzView.dispatch_requestN   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>.viewj   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>.views   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_viewU   s    & !!P P 
3l3DP >> DM!nnDO ^^	  , {{..{{),)F)F&r   )r+   r,   )r1   strr%   r*   r&   r*   r+   zft.RouteCallable)r-   r.   __qualname__r/   r   __annotations__r   r   r   r   classmethodr3   r!   r   r   r   r      sw    D 59G18
 :>6= <>J8= ,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)r0   r$   r   basekey	__class__s        r   r<   zMethodView.__init_subclass__   s    !+F+CLL(eG4D1NN4<<0 & )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.   r5   r/   r<   r   __classcell__)rH   s   @r   r9   r9      s    4&"	7r   r9   )
__future__r   r   t ftglobalsr   r   TypeVarCallableAnyr   	frozensetrB   r   r9   r!   r   r   <module>rY      s^    "     AIIcCJ/0I 
w wt57 57r   