
    hV                        S SK Jr  S SKrS SKJr  SSKJr  SSKJ	r	  SSK
Jr  SS jr  S         SS	 jjr   S           SS
 jjr  S     SS jjrg)    )annotationsN)quote   )
_plain_int)SecurityError)
uri_to_iric                   U (       d  g U R                  S5      S   R                  S5      R                  S5      n [	        U[
        5      (       a  U/nU H  nUR                  S5      (       a  USS nS	nOSn UR                  S5      S   R                  S5      R                  S5      nX :X  d$  U(       d  Md  U R                  SU 35      (       d  M    g	   g! [         a     gf = f! [         a       gf = f)
zCheck if a host matches a list of trusted names.

:param hostname: The name to check.
:param trusted_list: A list of valid names to match. If a name
    starts with a dot it will match all subdomains.

.. versionadded:: 0.9
F:r   idnaascii.   NT)	partitionencodedecodeUnicodeEncodeError
isinstancestr
startswithendswith)hostnametrusted_listrefsuffix_matchs       jC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\werkzeug/sansio/utils.pyhost_is_trustedr      s     %%c*1-44V<CCGL ,$$$~>>#ab'CL L	--$Q'..v6==gFC ?||0A0AAcU)0L0L  +   " 		s#   2C :2C*
C'&C'*
C87C8c                   SnUb  UnOUb  US   nUS   b
  U SUS    3nU S;   a  UR                  S5      (       a  USS nO!U S	;   a  UR                  S
5      (       a  USS nUb   [        XC5      (       d  [        SU< S35      eU$ )a  Return the host for the given parameters.

This first checks the ``host_header``. If it's not present, then
``server`` is used. The host will only contain the port if it is
different than the standard port for the protocol.

Optionally, verify that the host is trusted using
:func:`host_is_trusted` and raise a
:exc:`~werkzeug.exceptions.SecurityError` if it is not.

:param scheme: The protocol the request used, like ``"https"``.
:param host_header: The ``Host`` header value.
:param server: Address of the server. ``(host, port)``, or
    ``(path, None)`` for unix sockets.
:param trusted_hosts: A list of trusted host names.

:return: Host, with port if necessary.
:raise ~werkzeug.exceptions.SecurityError: If the host is not
    trusted.
 Nr   r   r
   >   wshttpz:80>   wsshttpsz:443zHost z is not trusted.)r   r   r   )schemehost_headerservertrusted_hostshosts        r   get_hostr*   1   s    4 D		ay!9 V1VAYK(DDMM%$8$8CRy	#	#f(=(=CRy t33%x/? @AAK    c                   U SU/nUc+  UR                  S5        [        SR                  U5      5      $ UR                  [        UR	                  S5      SS95        UR                  S5        Uc  [        SR                  U5      5      $ UR                  [        UR                  S5      SS95        U(       a*  UR                  S5        UR                  [        USS95        [        SR                  U5      5      $ )a[  Recreate the URL for a request. If an optional part isn't
provided, it and subsequent parts are not included in the URL.

The URL is an IRI, not a URI, so it may contain Unicode characters.
Use :func:`~werkzeug.urls.iri_to_uri` to convert it to ASCII.

:param scheme: The protocol the request used, like ``"https"``.
:param host: The host the request was made to. See :func:`get_host`.
:param root_path: Prefix that the application is mounted under. This
    is prepended to ``path``.
:param path: The path part of the URL after ``root_path``.
:param query_string: The portion of the URL after the "?".
z:///r   z!$&'()*+,/:;=@%)safe?z!$&'()*+,/:;=?@%)appendr   joinr   rstriplstrip)r%   r)   	root_pathpathquery_stringurls         r   get_current_urlr8   a   s    ( 5$
C

3"''#,'' JJuY%%c*1BCDJJsO|"''#,''JJuT[[%,=>?

3

5,>?@bggcl##r+   c                b    US:X  d  U c  g [        S[        U 5      5      $ ! [         a     gf = f)a  Return the ``Content-Length`` header value as an int. If the header is not given
or the ``Transfer-Encoding`` header is ``chunked``, ``None`` is returned to indicate
a streaming request. If the value is not an integer, or negative, 0 is returned.

:param http_content_length: The Content-Length HTTP header.
:param http_transfer_encoding: The Transfer-Encoding HTTP header.

.. versionadded:: 2.2
chunkedNr   )maxr   
ValueError)http_content_lengthhttp_transfer_encodings     r   get_content_lengthr?      s?     *.A.I1j!4566 s   ! 
..)r   r   r   zt.Iterable[str]returnbool)NN)
r%   r   r&   
str | Noner'   ztuple[str, int | None] | Noner(   zt.Iterable[str] | Noner@   r   )NNN)r%   r   r)   r   r4   rB   r5   rB   r6   zbytes | Noner@   r   )r=   rB   r>   rB   r@   z
int | None)
__future__r   typingturllib.parser   	_internalr   
exceptionsr   urlsr   r   r*   r8   r?    r+   r   <module>rK      s    "   " & #R -1,0	--- *- *	-
 	-f !!%($($
($ ($ 	($
 ($ 	($X '+)-#& r+   