
    |h;                        d Z 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dZddZ G d d	ej                  ej                           Z e       Zej$                  Zej&                  Zy)a  Flask request argument parsing module.

Example: ::

    from flask import Flask

    from webargs import fields
    from webargs.flaskparser import use_args

    app = Flask(__name__)

    user_detail_args = {"per_page": fields.Int()}


    @app.route("/user/<int:uid>")
    @use_args(user_detail_args)
    def user_detail(args, uid):
        return ("The user page for user {uid}, showing {per_page} posts.").format(
            uid=uid, per_page=args["per_page"]
        )
    )annotationsN)HTTPException)corec                r    	 t        j                  |        y# t        $ r}||_        ||_        |d}~ww xY w)zRaise a HTTPException for the given http_status_code. Attach any keyword
    arguments to the exception for later processing.

    From Flask-Restful. See NOTICE file for license information.
    N)flaskabortr   dataexc)http_status_coder
   kwargserrs       R/var/www/html/test/engine/venv/lib/python3.12/site-packages/webargs/flaskparser.pyr   r   #   s7    $% 	s    	616c                @    t        j                  | j                        S N)r   is_jsonmimetype)reqs    r   is_json_requestr   3   s    <<%%    c                  4   e Zd ZU dZej
                  ej
                  dej                  j                  Zde	d<    e
ddddej                  j                  ZddZ	 	 	 	 	 	 	 	 	 	 ddZddZdd	Zdd
ZddZddZddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZddZy)FlaskParserzFlask request argument parser.)	view_argspathzdict[str, str | None]DEFAULT_UNKNOWN_BY_LOCATIONload_view_argsc                    t        |      st        j                  S t        j                  |j	                  d            S )zReturn a json payload from the request for the core parser's load_json

        Checks the input mimetype and may return 'missing' if the mimetype is
        non-json, even if the request body is parseable as json.T)cache)r   r   missing
parse_jsonget_data)selfr   s     r   _raw_load_jsonzFlaskParser._raw_load_jsonE   s0    
 s#<<s||$|788r   c                &    t        d|ddgi       y )Ni  jsonzInvalid JSON body.)r
   messages)r   )r!   errorr   argsr   s        r   _handle_invalid_json_errorz&FlaskParser._handle_invalid_json_errorO   s     	cu1E0F'GHr   c                >    |j                   xs t        j                  S )zDReturn the request's ``view_args`` or ``missing`` if there are none.)r   r   r   r!   r   schemas      r   r   zFlaskParser.load_view_argsX   s    }},,r   c                :    | j                  |j                  |      S )z9Return query params from the request as a MultiDictProxy.)
_makeproxyr'   r*   s      r   load_querystringzFlaskParser.load_querystring\       sxx00r   c                :    | j                  |j                  |      S )z8Return form values from the request as a MultiDictProxy.)r-   formr*   s      r   	load_formzFlaskParser.load_form`   r/   r   c                :    | j                  |j                  |      S )z4Return headers from the request as a MultiDictProxy.)r-   headersr*   s      r   load_headerszFlaskParser.load_headersd   s    s{{F33r   c                    |j                   S )z Return cookies from the request.)cookiesr*   s      r   load_cookieszFlaskParser.load_cookiesh   s    {{r   c                :    | j                  |j                  |      S )z2Return files from the request as a MultiDictProxy.)r-   filesr*   s      r   
load_fileszFlaskParser.load_filesl   s    syy&11r   c               X    |xs | j                   }t        |||j                  ||       y)znHandles errors during parsing. Aborts the current HTTP request and
        responds with a 422 error.
        )r
   r%   r+   r4   N)DEFAULT_VALIDATION_STATUSr   r%   )r!   r&   r   r+   error_status_codeerror_headersstatus_codes          r   handle_errorzFlaskParser.handle_errorp   s/     -N0N0N^^!	
r   c                "    t         j                  S )z>Override to use Flask's thread-local request object by default)r   request)r!   s    r   get_default_requestzFlaskParser.get_default_request   s    }}r   N )r   flask.Requestreturn
typing.Any)
r&   z)json.JSONDecodeError | UnicodeDecodeErrorr   rF   r'   rH   r   rH   rG   typing.NoReturn)r   rF   r+   	ma.SchemarG   rH   )r&   zma.ValidationErrorr   rF   r+   rJ   r>   z
int | Noner?   ztyping.Mapping[str, str] | NonerG   rI   )rG   rF   )__name__
__module____qualname____doc__maRAISEr   Parserr   __annotations__dict__location_map__r"   r(   r   r.   r2   r5   r8   r;   rA   rD   rE   r   r   r   r   7   s   ( XX: ++
1
1:!6 
  " ++
&
&9I8I I 	I
 I 
I-1142
!
 
 	
 &
 7
 

*r   r   r   )r   intr
   zException | Noner   rH   rG   rI   )r   rF   rG   bool)rN   
__future__r   r$   typingr   marshmallowrO   werkzeug.exceptionsr   webargsr   r   r   rQ   Requestr   parseruse_args
use_kwargsrE   r   r   <module>r`      s   , #     -  48 0CM &P$++emm, Pf 
??
r   