
    E d                     *   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 dd
lmZ ddlmZ  e j        d          Z	 	 	 	 	 	 	 	 	 d$dej        e         dej        e         dej        e         dej        e         dej        e         dej        e         dej        e         dej        ej        eef                  dedefdZ	 	 	 	 d%dej        eedf         dededej        ej        d                   dd!f
d"Zdd#lmZ dS )&    N)datetime   )_cookie_parse_impl)
_dt_as_utc)_to_str)generate_etag)
parse_date)parse_etags)parse_if_range_header)unquote_etagz&([Ww]/)?(?:"(.*?)"|(.*?))(?:\s*,\s*|$)T
http_rangehttp_if_rangehttp_if_modified_sincehttp_if_none_matchhttp_if_matchetagdatalast_modifiedignore_if_range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                  ]C:\Users\ChattiNader\Documents\MyHotelMatch\api\dev\Lib\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/7}#$:;; - M^,K,K
 :t$$avc4  HM$=$X]33<<TBBJJ'(:;;M ? +88>>

 #=11H :!)!3!3D!9!99
>     utf-8r   cookiecharseterrorsclszds.MultiDictzds.MultiDict[str, str]c                     t           t                    r                     dd           |t          j        }dt
          j        t
          j        t          t          f                  f fd} | |                      S )a/  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 charset: The charset for the cookie values.
    :param errors: The error behavior for the charset decoding.
    :param cls: A dict-like class to store the parsed cookies in.
        Defaults to :class:`MultiDict`.

    .. versionadded:: 2.2
    latin1r   Nr   c               3      K   t                    D ]1\  } }t          | d          }t          |d          }||fV  2d S )NT)allow_none_charset)r   r   )keyvalkey_strval_strr/   r.   r0   s       r)   _parse_pairsz"parse_cookie.<locals>._parse_pairs~   sl      *622 	# 	#HCc7FtLLLGc7FtLLLG7"""""	# 	#r+   )r   r   encodeds	MultiDictr   IteratorTuple)r.   r/   r0   r1   r:   s   ```  r)   parse_cookier@   a   s    . &# 4x33
{l#!*QWS#X%67 # # # # # # # # 3||~~r+   )datastructures)	NNNNNNNNT)r,   r-   r   N)retypingr   r   	_internalr   r   r   httpr   r	   r
   r   r   compile_etag_reOptionalr   bytesUnionboolr*   Typer@   r,   rA   r<    r+   r)   <module>rN      s=   				           * * * * * * " " " " " "                               ( ( ( ( ( (      2:?@@ #'%).2*.%) "8< M M
3M:c?M JsOM 
3	M
 :c?M *S/M *U
M :aghm45M M 
M M M Mb )+.2	# #GE3$%## # 
AF>*	+	#
 # # # #N $ # # # # # # #r+   