
    GdZ                    >   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 dS )0    )annotationsN)datetime   )
_dt_as_utc)generate_etag)
parse_date)parse_etags)parse_if_range_header)unquote_etagz&([Ww]/)?(?:"(.*?)"|(.*?))(?:\s*,\s*|$)T
http_range
str | Nonehttp_if_rangehttp_if_modified_sincehttp_if_none_matchhttp_if_matchetagdatabytes | Nonelast_modifieddatetime | str | Noneignore_if_rangeboolreturnc	                   ||t          |          }n|t          d          d}	t          |t                    rt	          |          }|#t          |                    d                    }d}
|s| t          |          }
|
|
j        |
j        }nt	          |          }|r
|r||k    rd}	|rt          |          \  }}t          j        t          |          }|
/|
j        (t          |
j                                      |          }	nMt          |          }|r|                    |          }	t          |          }|r|                    |           }	|	 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castr   r	   containscontains_weak	is_strong)r   r   r   r   r   r   r   r   r   
unmodifiedif_rangemodified_since_if_none_matchif_matchs                  P/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/werkzeug/sansio/http.pyis_resource_modifiedr-      s   6 |(T""		2333J-%% 2"=11  "=#8#8Q#8#G#GHHH 8z5 )77 9*2-#$:;; - M^,K,K
 :t$$avc4  HM$=$X]33<<TBBJJ'(:;;M ? +88>>

 #=11H :!)!3!3D!9!99
>    zr
    ([^=;]*)
    (?:\s*=\s*
      (
        "(?:[^\\"]|\\.)*"
      |
        .*?
      )
    )?
    \s*;\s*
    )flagss   \\([0-3][0-7]{2}|.)mt.Match[bytes]bytesc                    |                      d          }t          |          dk    r|S t          |d                              dd          S )N      big)grouplenintto_bytes)r0   vs     r,   _cookie_unslash_replacer<   s   sC    	

A
1vv{{q!99a'''r.   cookiecharseterrorsclstype[ds.MultiDict] | Noneds.MultiDict[str, str]c                &   |t           j        }t          | t                    r0t	          j        dt          d           |                                 } |t	          j        dt          d           nd}|t	          j        dt          d           nd}| s
 |            S |  d	} g }t          	                    |           D ]\  }}|
                                }|
                                }|s0t          |          dk    rj|d
         |d         cxk    rdk    rQn nNt                              t          |dd                                                                       ||          }|                    ||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
    NzoThe '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   "r4   )ds	MultiDictr   r2   warningswarnDeprecationWarningdecode
_cookie_refindallstripr8   _cookie_unslash_resubr<   encodeappend)r=   r>   r?   r@   outckcvs          r,   parse_cookierX   |   s   . {l&%   !6		
 	
 	
 	
 W	
 	
 	
 	
 	
 V	
 	
 	
 	
 	
  suu\\\F
C$$V,,  BXXZZXXZZ 	r77a<<BqERV2222s22222#'''AbD):): fWf%%  	

B83s88Or.   )datastructures)	NNNNNNNNT)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r0   r1   r   r2   )NNNN)
r=   r   r>   r   r?   r   r@   rA   r   rB   )
__future__r   retypingr!   rJ   r   	_internalr   httpr   r   r	   r
   r   compile_etag_rer-   ASCIIVERBOSErN   rQ   r<   rX    rY   rH    r.   r,   <module>re      s   " " " " " " 				            " " " " " "                         ( ( ( ( ( (      2:?@@ " $)-%) $+/ M M M M M` RZ
 (RZ
  
  RZ 788 ( ( ( ( %)	J J J J J\ $ # # # # # # #r.   