Ë
    }D™j6*  ã                  ó6  — d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZ dd	lmZmZ dd
lmZ ddl m Z  ddl!m"Z"m#Z#m$Z$m%Z% g d¢Z&er
ddl'm(Z(m)Z)m*Z* dZ+eee,e,f      Z-eee,      Z.eee,e/f   Z0 e
e1«      Z2	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d d„Z3	 	 	 	 	 	 d!d„Z4	 	 d"	 	 	 	 	 	 	 d#d„Z5	 d$	 	 	 	 	 d%d„Z6d&d„Z7	 d$	 	 	 	 	 	 	 d'd„Z8	 d$	 	 	 	 	 	 	 d(d„Z9d$d)d„Z:d*d„Z;d+d„Z<	 d$	 	 	 	 	 d,d„Z=	 d$	 	 	 	 	 d-d„Z>d$d.d„Z?d&d„Z@y)/z¢Internal utilities for generating cache keys that are used for request matching

.. automodsumm:: requests_cache.cache_keys
   :functions-only:
   :nosignatures:
é    )ÚannotationsN)Únullcontext)Úblake2bÚsha256)Ú	getLogger)
ÚTYPE_CHECKINGÚAnyÚDictÚIterableÚListÚMappingÚMutableMappingÚOptionalÚTupleÚUnion)Ú	parse_qslÚ	urlencodeÚurlparseÚ
urlunparse)ÚRequestÚSession)ÚCaseInsensitiveDict)Úurl_normalizeé   )ÚdecodeÚencodeÚpatch_form_boundaryÚis_json_content_type)Ú
create_keyÚnormalize_bodyÚnormalize_headersÚnormalize_requestÚnormalize_paramsÚnormalize_url)ÚAnyPreparedRequestÚ
AnyRequestÚCachedResponsei    c           	     ó¢  — t        | ||«      } | j                  xs d| j                  | j                  xs dt	        |j                  dd«      «      gt        | j                  |«      ¢t        |«      ‘}	 t        d¬«      }|D ]  }|j                  t        |«      «       Œ |j                  «       S # t        t        f$ r t        «       }Y ŒLw xY w)a  Create a normalized cache key based on a request object

    Args:
        request: Request object to generate a cache key from
        ignored_parameters: Request parameters, headers, and/or JSON body params to exclude
        match_headers: Match only the specified headers, or ``True`` to match all headers
        serializer: Serializer name or instance
        content_root_key: root element in the request body to apply ignored_parameters to
        request_kwargs: Additional keyword arguments for :py:func:`~requests.request`
    Ú ÚverifyTé   )Údigest_size)r"   ÚmethodÚurlÚbodyÚboolÚgetÚget_matched_headersÚheadersÚstrr   Ú	TypeErrorÚ
ValueErrorr   Úupdater   Ú	hexdigest)	ÚrequestÚignored_parametersÚmatch_headersÚ
serializerÚcontent_root_keyÚrequest_kwargsÚ	key_partsÚkeyÚparts	            úe/var/www/html/Astrologybackend/backend/venv/lib/python3.12/site-packages/requests_cache/cache_keys.pyr   r   7   sÍ   € ô&   Ð);Ð=MÓN€Gà�‰Ò˜"Ø�‰Ø�‰Ò˜Üˆ^×Ñ ¨$Ó/Ó0ð	ô
 
˜WŸ_™_¨mÓ	<ðô 	ˆJ‹ð€IðÜ !Ô$ˆð ò !ˆØ�
‰
”6˜$“<Õ ð!à�=‰=‹?Ðøô ”zÐ"ò ô ‹hŠð	ús   Á5B2 Â2CÃCc                óŒ   — |sg S |du r| }t        |d„ ¬«      D �cg c]  }|| v r|j                  «       › d| |   › �‘Œ  c}S c c}w )zsGet only the headers we should match against as a list of ``k=v`` strings, given an optional
    include list.
    Tc                ó"   — | j                  «       S ©N)Úlower)Úxs    rB   ú<lambda>z%get_matched_headers.<locals>.<lambda>m   s   € °Q·W±W³Y€ ó    )r@   ú=)ÚsortedrF   )r3   r;   Úks      rB   r2   r2   a   s_   € ñ Øˆ	Ø˜ÑØˆô ˜Ñ+>Ô?öàØ�‰<ð �7‰7‹9ˆ+�Q�w˜q‘z�lÒ#òð ùò s   ›#Ac                óÂ  — t        | t        «      rC| j                  r
t        «       n	t	        «       5  t        «       j                  | «      }ddd«       n| j                  «       }j                  xs dj                  «       |_        t        |j                  xs d|«      |_        t        |j                  |«      |_        t        |||«      |_        |S # 1 sw Y   ŒzxY w)aÝ  Normalize and remove ignored parameters from request URL, body, and headers.
    This is used for both:

    * Increasing cache hits by generating more precise cache keys
    * Redacting potentially sensitive info from cached requests

    Args:
        request: Request object to normalize
        ignored_parameters: Request parameters, headers, and/or JSON body params to exclude
        content_root_key: root element in the request body to apply ignored_parameters to
    Nr)   )Ú
isinstancer   Úfilesr   r   r   Úprepare_requestÚcopyr-   Úupperr$   r.   r!   r3   r    r/   )r9   r:   r=   Únorm_requests       rB   r"   r"   r   sÅ   € ô  �'œ7Ô#ð '.§m¢mÔ Ô"¼»ñ 	RÜ/6«y×/HÑ/HÈÓ/QˆL÷	Rð 	Rð —|‘|“~ˆà'×.Ñ.Ò4°"×;Ñ;Ó=€LÔÜ$ \×%5Ñ%5Ò%;¸Ð=OÓP€LÔÜ,¨\×-AÑ-AÐCUÓV€LÔÜ& |Ð5GÐIYÓZ€LÔØÐ÷	Rð 	Rús   ±CÃCc                ó¬  — | j                  «       D ��ci c]  \  }}|t        |«      “Œ } }}|rt        | |«      } | j                  «       D ]r  \  }}d|v sŒ|j                  «       j	                  d«      D �cg c]#  }|j                  «       sŒ|j                  «       ‘Œ% }}dj                  t        |«      «      | |<   Œt t        | «      S c c}}w c c}w )zVSort and filter request headers, and normalize minor variations in multi-value headersú,z, )	Úitemsr   Úfilter_sort_dictrF   ÚsplitÚstripÚjoinrK   r   )r3   r:   rL   ÚvÚvaluess        rB   r!   r!   ‘   s·   € ð
 +2¯-©-«/×:¡  Aˆq”&˜“)‰|Ð:€GÑ:ÙÜ" 7Ð,>Ó?ˆØ—‘“ò 3‰ˆˆ1Ø�!Š8Ø)*¯©«¯©¸Ó)=ÖK AÀÇÁÅ�a—g‘g•iÐKˆFÐKØŸ™¤6¨&£>Ó2ˆG�AŠJð3ô ˜wÓ'Ð'ùó ;ùò
 Ls   ”CÁ7CÂCc                ó8   — t        | |«      } t        | «      xs dS )zlNormalize and filter a URL. This includes request parameters, IDN domains, scheme, host,
    port, etc.
    r)   )Ú
filter_urlr   )r.   r:   s     rB   r$   r$       s!   € ô �SÐ,Ó
-€CÜ˜ÓÒ# Ð#rI   c                ó@  — | j                   sy| j                   }t        | j                   d«      r:| j                   j                  «       xs d}	 | j                   j                  d«       	 | j                  d   j                  d	«      d   j                  «       }t        |«      rt        |||«      }t        |«      S |dk(  rt        ||«      }t        |«      S # t        $ r$}t
        j                  d|› �d¬«       Y d}~Œ—d}~ww xY w# t        t        f$ r d
}Y Œ‚w xY w)zJNormalize and filter a request body if possible, depending on Content-TyperI   Úreadr   z'Unable to reset original request body: T)Úexc_infoNzContent-Typeú;r)   z!application/x-www-form-urlencoded)r/   Úhasattrr`   ÚseekÚAttributeErrorÚloggerÚwarningr3   rX   rF   ÚKeyErrorr   Únormalize_json_bodyr#   r   )r9   r:   r=   Ú	norm_bodyÚeÚcontent_types         rB   r    r    ¨   s  € ð �<Š<Øà#*§<¡<€Iô ˆw�|‰|˜VÔ$Ø—L‘L×%Ñ%Ó'Ò.¨3ˆ	ð	YØ�L‰L×Ñ˜aÔ ðØ—‘ ~Ñ6×<Ñ<¸SÓAÀ!ÑD×JÑJÓLˆô
 ˜LÔ)Ü'¨	Ð3EÐGWÓXˆ	ô �)ÓÐð 
Ð<Ò	<Ü$ YÐ0BÓCˆ	ä�)ÓÐøô ò 	YÜ�N‰NÐDÀQÀCÐHÐSWˆN×XÑXûð	Yûô
 œHÐ%ò ØŠðús*   ÁC Á+/D	 Ã	DÃ"DÄDÄ	DÄDc                óz  — t        | «      dk  st        | «      t        kD  r| S 	 t        j                  t	        | «      «      }|r't        |t        «      r||v rt        ||   |«      ||<   nt        ||«      }t        j                  |«      S # t        t        t        f$ r t        j                  d«       | cY S w xY w)z=Normalize and filter a request body with serialized JSON dataé   zInvalid JSON body)ÚlenÚMAX_NORM_BODY_SIZEÚjsonÚloadsr   rN   ÚdictÚfilter_sort_jsonÚdumpsre   r5   r6   rf   Údebug)Úoriginal_bodyr:   r=   r/   s       rB   ri   ri   É   s®   € ô ˆ=Ó˜QÒ¤# mÓ"4Ô7IÒ"IØÐð
Ü�z‰zœ& Ó/Ó0ˆÙ¤
¨4´Ô 6Ð;KÈtÑ;SÜ%5°dÐ;KÑ6LÐN`Ó%aˆDÐ!Ò"ä# DÐ*<Ó=ˆDÜ�z‰z˜$ÓÐøäœI¤zÐ2ò Ü�‰Ð(Ô)ØÒðús   ¤A'B Â+B:Â9B:c                ó  — t        | «      } t        | «      }t        ||«      }t        |«      }| j	                  d«      D �cg c]  }|sŒd|vsŒ|‘Œ }}|r%dj                  t        |«      «      }|r|› d|› �n|}|S c c}w )zWNormalize and filter urlencoded params from either a URL or request body with form dataú&rJ   )r   r   Úfilter_sort_multidictr   rX   rZ   rK   )Úvaluer:   ÚparamsÚ	query_strrL   Úkey_only_paramsÚkey_only_param_strs          rB   r#   r#   ß   sŒ   € ä�5‹M€EÜ�uÓ€FÜ" 6Ð+=Ó>€FÜ˜&Ó!€Ið #(§+¡+¨cÓ"2ÖI˜Q²a¸CÀqºL’qÐI€OÐIÙØ ŸX™X¤f¨_Ó&=Ó>ÐÙ;D�y�k Ð#5Ð"6Ñ7ÐJ\ˆ	àÐùò Js   ÁA=Á	A=ÁA=c                ó   — |rËt        | j                  |«      | _        t        | j                  j                  |«      | j                  _        t        t	        | j
                  |«      «      | _        t        t	        | j                  j
                  |«      «      | j                  _        t        | j                  |«      | j                  _        | S )z[Redact any ignored parameters (potentially containing sensitive info) from a cached request)r^   r.   r9   r   rW   r3   r    r/   )Úresponser:   s     rB   Úredact_responser‚   ï   s§   € áÜ! (§,¡,Ð0BÓCˆŒÜ)¨(×*:Ñ*:×*>Ñ*>Ð@RÓSˆ×ÑÔÜ.Ü˜X×-Ñ-Ð/AÓBó
ˆÔô $7Ü˜X×-Ñ-×5Ñ5Ð7IÓJó$
ˆ×ÑÔ ô !/¨x×/?Ñ/?ÐASÓ Tˆ×ÑÔØ€OrI   c                óR   — t        | t        «      rt        | |«      S t        | |«      S rE   )rN   r   rW   Úfilter_sort_list)Údatar:   s     rB   rt   rt   þ   s(   € Ü�$œÔ Ü Ð&8Ó9Ð9ä Ð&8Ó9Ð9rI   c                ó’   — t        |xs g «      }t        | j                  «       «      D ��ci c]  \  }}|||v rdn|“Œ c}}S c c}}w ©NÚREDACTED)ÚsetrK   rV   ©r…   r:   rL   r[   s       rB   rW   rW     sK   € ô Ð/Ò5°2Ó6ÐÜJPÐQU×Q[ÑQ[ÓQ]ÓJ^×_Á$À!ÀQˆA˜aÐ#5Ñ5‘
¸1Ñ<Ó_Ð_ùÓ_s   ¬Ac                óx   — t        |xs g «      }t        | «      D ��cg c]  \  }}|||v rdn|f‘Œ c}}S c c}}w r‡   )r‰   rK   rŠ   s       rB   rz   rz     sA   € ô Ð/Ò5°2Ó6ÐÜJPÐQUË,×WÁ$À!ÀQˆQ˜aÐ#5Ñ5‘
¸1Ò=ÓWÐWùÓWs   ž6c                ót   — |st        | «      S t        | «      D �cg c]  }|t        |«      vsŒ|‘Œ c}S c c}w rE   )rK   r‰   )r…   r:   rL   s      rB   r„   r„     s4   € ÙÜ�d‹|ÐÜ˜d“|ÖH�! q´Ð4FÓ0GÒ'GŠAÒHÐHùÒHs   ›5®5c           
     óÆ   — t        | «      }t        |j                  |j                  |j                  |j
                  t        |j                  |«      |j                  f«      S )z&Filter ignored parameters out of a URL)	r   r   ÚschemeÚnetlocÚpathr|   r#   ÚqueryÚfragment)r.   r:   Ú
url_tokenss      rB   r^   r^     s[   € ô ˜#“€JÜà×ÑØ×ÑØ�O‰OØ×ÑÜ˜Z×-Ñ-Ð/AÓBØ×Ñð	
ó	ð 	rI   )NFNN)r9   r&   r:   Ú	ParamListr;   úUnion[ParamList, bool]r<   r	   r=   úOptional[str]Úreturnr4   )r3   r   r;   r•   r—   z	List[str])NN)r9   r&   r:   r”   r=   r–   r—   r%   rE   )r3   zMutableMapping[str, str]r:   r”   r—   r   )r.   r4   r:   r”   r—   r4   )r9   r%   r:   r”   r=   r–   r—   Úbytes)rw   úUnion[str, bytes]r:   r”   r=   r–   r—   r™   )r{   r™   r:   r”   r—   r4   )r�   r'   r:   r”   r—   r'   )r…   zUnion[List, Mapping]r:   r”   )r…   zMapping[str, str]r:   r”   r—   zDict[str, str])r…   ÚKVListr:   r”   r—   rš   )r…   r   r:   r”   r—   r   )AÚ__doc__Ú
__future__r   rq   Ú
contextlibr   Úhashlibr   r   Úloggingr   Útypingr   r	   r
   r   r   r   r   r   r   r   Úurllib.parser   r   r   r   Úrequestsr   r   Úrequests.structuresr   r   Ú_utilsr   r   r   r   Ú__all__Úmodelsr%   r&   r'   rp   r4   rš   r”   r˜   ÚRequestContentÚ__name__rf   r   r2   r"   r!   r$   r    ri   r#   r‚   rt   rW   rz   r„   r^   © rI   rB   ú<module>rª      s"  ðñõ #ã Ý "ß #Ý ÷÷ ÷ ÷ DÓ Cç %Ý 3Ý 'ç MÓ Mò€ñ ßFÑFð &Ð à	ˆe�C˜�H‰oÑ	€Ø�X˜c‘]Ñ#€	Ø�w  UÐ*Ñ+€á	�8Ó	€ð
 %)Ø,1ØØ&*ð'Øð'à!ð'ð *ð'ð ð	'ð
 $ð'ð 	ó'ðTØ ðØ1Gðàóð& %)Ø&*ðØðà!ðð $ðð ó	ðB %)ð(Ø%ð(à!ð(ð ó(ó$ð '+ðØðà!ðð $ðð ó	ðH '+ðØ$ðà!ðð $ðð ó	ô,ó ó:ð %)ð`Ø
ð`à!ð`ð ó`ð %)ðXØ
ðXà!ðXð óXôIôrI   