
    |h^                    L   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	Zddl
mZ ddlmZ ddlmZ ddlmZ  G d d	ej$                  j&                        Zdd
Z G d de      Z G d de      Z G d dej.                  e         Z e       Zej4                  Zej6                  Zy)a  Tornado request argument parsing module.

Example: ::

    import tornado.web
    from marshmallow import fields
    from webargs.tornadoparser import use_args


    class HelloHandler(tornado.web.RequestHandler):
        @use_args({"name": fields.Str(load_default="World")})
        def get(self, args):
            response = {"message": "Hello {}".format(args["name"])}
            self.write(response)
    )annotationsN)_unicode)HTTPServerRequest)core)MultiDictProxyc                  $     e Zd ZdZd fdZ xZS )	HTTPErrorz6`tornado.web.HTTPError` that stores validation errors.c                    |j                  di       | _        |j                  dd       | _        t        |   |i | y )Nmessagesheaders)popr   r   super__init__)selfargskwargs	__class__s      T/var/www/html/test/engine/venv/lib/python3.12/site-packages/webargs/tornadoparser.pyr   zHTTPError.__init__#   s9    

:r2zz)T2$)&)    )r   
typing.Anyr   r   returnNone)__name__
__module____qualname____doc__r   __classcell__)r   s   @r   r	   r	       s    @* *r   r	   c                n    | j                   j                  d      }|d uxr t        j                  |      S )NzContent-Type)r   getr   is_json)reqcontent_types     r   is_json_requestr#   )   s-    ;;??>2Lt#B\(BBr   c                      e Zd ZdZddZy)WebArgsTornadoMultiDictProxyz\
    Override class for Tornado multidicts, handles argument decoding
    requirements.
    c           
        	 | j                   j                  |t        j                        }|t        j                  u rt        j                  S || j                  v r1|D cg c]%  }t        |t        t        f      rt        |      n|' c}S |rt        |t        t        f      r|d   }t        |t        t        f      rt        |      S |S c c}w # t        $ r}t        dd| dd d       |d }~ww xY w)Nr     zInvalid unicode in z: (   )datar   r   missingmultiple_keys
isinstancestrbytesr   listtupleUnicodeDecodeErrorr	   )r   keyvaluevexcs        r   __getitem__z(WebArgsTornadoMultiDictProxy.__getitem__4   s    	WIIMM#t||4E$||#d(((OTJK:a#u#>HQKAE  ED%=9a%#u.&L " 	WC#6se2eCRj^!LMSVV	Ws<   AC C  *C
C =C C C 	C6C11C6Nr2   r-   r   r   r   r   r   r   r6    r   r   r%   r%   .   s    
Wr   r%   c                      e Zd ZdZddZy)#WebArgsTornadoCookiesMultiDictProxyz
    And a special override for cookies because they come back as objects with a
    `value` attribute we need to extract.
    Also, does not use the `_unicode` decoding step
    c                    | j                   j                  |t        j                        }|t        j                  u rt        j                  S || j                  v r|j
                  gS |j
                  S )N)r)   r   r   r*   r+   r3   )r   r2   cookies      r   r6   z/WebArgsTornadoCookiesMultiDictProxy.__getitem__O   sT    sDLL1T\\!<<$$$$LL>!||r   Nr7   r8   r9   r   r   r;   r;   H   s    r   r;   c                      e Zd Z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)TornadoParserz Tornado request argument parser.c                    t        |      st        j                  S t        |j                  t
        j                  j                        rt        j                  S t        j                  |j                        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.)	r#   r   r*   r,   bodytornado
concurrentFuture
parse_json)r   r!   s     r   _raw_load_jsonzTornadoParser._raw_load_json[   sO    
 s#<< chh 2 2 9 9:<<sxx((r   c                F    | j                  |j                  |t              S )z9Return query params from the request as a MultiDictProxy.cls)
_makeproxyquery_argumentsr%   r   r!   schemas      r   load_querystringzTornadoParser.load_querystringj   s&    -I  
 	
r   c                F    | j                  |j                  |t              S )z8Return form values from the request as a MultiDictProxy.rH   )rJ   body_argumentsr%   rL   s      r   	load_formzTornadoParser.load_formp   s&    ,H  
 	
r   c                F    | j                  |j                  |t              S )z4Return headers from the request as a MultiDictProxy.rH   )rJ   r   r%   rL   s      r   load_headerszTornadoParser.load_headersv   s    s{{F8TUUr   c                F    | j                  |j                  |t              S )z4Return cookies from the request as a MultiDictProxy.rH   )rJ   cookiesr;   rL   s      r   load_cookieszTornadoParser.load_cookiesz   s&     KK%H  
 	
r   c                F    | j                  |j                  |t              S )z2Return files from the request as a MultiDictProxy.rH   )rJ   filesr%   rL   s      r   
load_fileszTornadoParser.load_files   s    syy&6RSSr   c                   |xs | j                   }|dk(  rd}nd}t        |t        |j                        ||j                  |      )zbHandles errors during parsing. Raises a `tornado.web.HTTPError`
        with a 400 error.
        i  zUnprocessable EntityN)log_messagereasonr   r   )DEFAULT_VALIDATION_STATUSr	   r-   r   )r   errorr!   rM   error_status_codeerror_headersstatus_coder\   s           r   handle_errorzTornadoParser.handle_error   sO     (I4+I+I#+FFENN+^^!
 	
r   c                &    t        dddddgi      )Nr'   zInvalid JSON body.zBad Requestjson)r[   r\   r   )r	   )r   r^   r!   r   r   s        r   _handle_invalid_json_errorz(TornadoParser._handle_invalid_json_error   s&     , 345	
 	
r   c                     |d   j                   S )Nr   )request)r   viewr   r   s       r   get_request_from_view_argsz(TornadoParser.get_request_from_view_args   s     Awr   N)r!   r   r   r   )r!   r   rM   	ma.Schemar   r   )r^   zma.ValidationErrorr!   r   rM   rj   r_   z
int | Noner`   ztyping.Mapping[str, str] | Noner   typing.NoReturn)
r^   z)json.JSONDecodeError | UnicodeDecodeErrorr!   r   r   r   r   r   r   rk   )rh   r   r   ztuple[typing.Any, ...]r   ztyping.Mapping[str, typing.Any]r   r   )r   r   r   r   rF   rN   rQ   rS   rV   rY   rb   re   ri   r9   r   r   r?   r?   X   s    *)

V
T
!
 
 	
 &
 7
 

2
8
 
 	

 
 

 % 0	
 
r   r?   )r!   r   r   bool)r   
__future__r   rd   typingmarshmallowmatornado.concurrentrB   tornado.webtornado.escaper   tornado.httputilr   webargsr   webargs.multidictproxyr   webr	   r#   r%   r;   Parserr?   parseruse_args
use_kwargsr9   r   r   <module>r|      s     #      # .  1*%% *C
W> W4.  [DKK 12 [| 
??
r   