
    +hZ                       d dl m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 ddl	mZ dd	l	mZ dd
l	mZ  ej                  d      Z	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ ej                  dej$                  ej&                  z        Z ej                  d      ZddZ	 	 	 	 d	 	 	 	 	 	 	 	 	 ddZddlmZ y)    )annotationsN)datetime   )
_dt_as_utc)generate_etag)
parse_date)parse_etags)parse_if_range_header)unquote_etagz&([Ww]/)?(?:"(.*?)"|(.*?))(?:\s*,\s*|$)c	                r   ||t        |      }n|t        d      d}	t        |t              rt	        |      }|t        |j                  d            }d}
|s| t        |      }
|
|
j                  |
j                  }nt	        |      }|r	|r||k  rd}	|rt        |      \  }}t        j                  t        |      }|
3|
j                  't        |
j                        j                  |      }	|	 S t        |      }|r|j                  |      }	t        |      }|r|j!                  |       }	|	 S )a  Convenience method for conditional requests.
    :param http_range: Range HTTP header
    :param http_if_range: If-Range HTTP header
    :param http_if_modified_since: If-Modified-Since HTTP header
    :param http_if_none_match: If-None-Match HTTP header
    :param http_if_match: If-Match HTTP header
    :param etag: the etag for the response for comparison.
    :param data: or alternatively the data of the response to automatically
                 generate an etag using :func:`generate_etag`.
    :param last_modified: an optional date of the last modification.
    :param ignore_if_range: If `False`, `If-Range` header will be taken into
                            account.
    :return: `True` if the resource was modified, otherwise `False`.

    .. versionadded:: 2.2
    Nzboth data and etag givenFr   )microsecondT)r   	TypeError
isinstancestrr   r   replacer
   dater   tcastetagr	   containscontains_weak	is_strong)
http_rangehttp_if_rangehttp_if_modified_sincehttp_if_none_matchhttp_if_matchr   datalast_modifiedignore_if_range
unmodifiedif_rangemodified_since_if_none_matchif_matchs                  G/var/www/html/venv/lib/python3.12/site-packages/werkzeug/sansio/http.pyis_resource_modifiedr(      sO   6 |(T"		233J-%"=1  "=#8#8Q#8#GHHz5 )7 9*2--#$:;-M^,K
t$avvc4 HMM$=$X]]3<<TBJ  > ((:;M +88>

 #=1H!)!3!3D!99
>    zr
    ([^=;]*)
    (?:\s*=\s*
      (
        "(?:[^\\"]|\\.)*"
      |
        .*?
      )
    )?
    \s*;\s*
    )flagss   \\([0-3][0-7]{2}|.)c                |    | j                  d      }t        |      dk(  r|S t        |d      j                  dd      S )N      big)grouplenintto_bytes)mvs     r'   _cookie_unslash_replacer5   s   s8    	
A
1v{q!9a''r)   c                   |t         j                  }t        | t              r,t	        j
                  dt        d       | j                         } |t	        j
                  dt        d       nd}|t	        j
                  dt        d       nd}| s |       S |  d} g }t        j                  |       D ]  \  }}|j                         }|j                         }|s)t        |      dk\  rO|d	   |d
   cxk(  rdk(  r>n n;t        j                  t        |dd
 j                               j                  ||      }|j!                  ||f         ||      S )aW  Parse a cookie from a string.

    The same key can be provided multiple times, the values are stored
    in-order. The default :class:`MultiDict` will have the first value
    first, and all values can be retrieved with
    :meth:`MultiDict.getlist`.

    :param cookie: The cookie header as a string.
    :param cls: A dict-like class to store the parsed cookies in.
        Defaults to :class:`MultiDict`.

    .. versionchanged:: 2.3
        Passing bytes, and the ``charset`` and ``errors`` parameters, are deprecated and
        will be removed in Werkzeug 3.0.

    .. versionadded:: 2.2
    zoThe 'cookie' parameter must be a string. Passing bytes is deprecated and will not be supported in Werkzeug 3.0.r   )
stacklevelzIThe 'charset' parameter is deprecated and will be removed in Werkzeug 3.0zutf-8zHThe 'errors' parameter is deprecated and will be removed in Werkzeug 3.0r   ;r   "r,   )ds	MultiDictr   byteswarningswarnDeprecationWarningdecode
_cookie_refindallstripr0   _cookie_unslash_resubr5   encodeappend)cookiecharseterrorsclsoutckcvs          r'   parse_cookierP   |   sE   . {ll&% 6		
 W	
 V	
 uxq\F
C$$V, BXXZXXZr7a<BqERV2s2#'''Ab):fWf%  	

B8 s8Or)   )datastructures)	NNNNNNNNT)r   
str | Noner   rR   r   rR   r   rR   r   rR   r   rR   r   zbytes | Noner   zdatetime | str | Noner    boolreturnrS   )r3   zt.Match[bytes]rT   r=   )NNNN)
rI   rR   rJ   rR   rK   rR   rL   ztype[ds.MultiDict] | NonerT   zds.MultiDict[str, str])
__future__r   retypingr   r>   r   	_internalr   httpr   r   r	   r
   r   compile_etag_rer(   ASCIIVERBOSErB   rE   r5   rP    rQ   r;    r)   r'   <module>r`      sT   " 	    "     ( 2::?@ " $)-%) $+/ MMM 'M #	M
 M M M )M M 
M` RZZ
 ((RZZ

  RZZ 78 ( %)	JJJ J 
#	J
 J\ $r)   