
    ^h                     |    S r SSKrSSKrSSKrSSKrSSKJrJr  SSKJrJ	r	  SSK
Jr   " S S5      rS\	\   4S	 jrg)
zs
This file contains the PrismaWrapper class, which is used to wrap the Prisma client and handle the RDS IAM token.
    N)datetime	timedelta)AnyOptional)str_to_boolc                   ~    \ rS rSrS\S\4S jrS\\   S\4S jr	S\\   4S jr
 SS
\S\\   4S jjrS\4S jrSrg	)PrismaWrapper   original_prismaiam_token_db_authc                     Xl         X l        g N_original_prismar   )selfr   r   s      X/home/james-whalen/.local/lib/python3.13/site-packages/litellm/proxy/db/prisma_client.py__init__PrismaWrapper.__init__   s     /!2    	token_urlreturnc                 @   Uc  g[         R                  R                  U5      n[         R                  R                  U5      n[         R                  R	                  UR
                  5      nUR                  SS /5      S   nUc  [        S5      e[        U5      nUR                  SS/5      S   nU(       d  [        S5      e [        R                  " US5      nU[        US
9-   n
[        R                  " 5       nX:  $ ! [         a  n	[        S	U	 35      eS n	A	ff = f)NTzX-Amz-Expiresr   z.X-Amz-Expires parameter is missing or invalid.z
X-Amz-Date z+X-Amz-Date parameter is missing or invalid.z%Y%m%dT%H%M%SZzInvalid X-Amz-Date format: )seconds)urllibparseunquoteurlparseparse_qsqueryget
ValueErrorintr   strptimer   utcnow)r   r   decoded_url
parsed_urlquery_paramsexpiresexpires_inttoken_time_str
token_timeeexpiration_timecurrent_times               r   is_token_expiredPrismaWrapper.is_token_expired   s   ll**95 \\**;7
 ||,,Z-=-=> ""?TF;A>?MNN'l &)),=a@JKK	@!**>;KLJ
 %y'EE  ( --  	@:1#>??	@s   D   
D
DDc           
         U R                   (       a  SSKJn  [        R                  " S5      n[        R                  " S5      n[        R                  " S5      n[        R                  " S5      n[        R                  " S5      nU" X#US9nS	U S
U SU S
U SU 3
nU(       a  USU 3-  nU[        R
                  S'   U$ g )Nr   )generate_iam_auth_tokenDATABASE_HOSTDATABASE_PORTDATABASE_USERDATABASE_NAMEDATABASE_SCHEMA)db_hostdb_portdb_userzpostgresql://:@/z?schema=DATABASE_URL)r    litellm.proxy.auth.rds_iam_tokenr3   osgetenvenviron)	r   r3   r9   r:   r;   db_name	db_schematoken_db_urls	            r   get_rds_iam_tokenPrismaWrapper.get_rds_iam_token;   s    !!Pii0Gii0Gii0Gii0G		"34I+'E
 &gYaway'!G9UGXi[11)0BJJ~&Nr   N
new_db_urlhttp_clientc                    #    SSK Jn  Ub  U" US9U l        OU" 5       U l        U R                  R                  5       I S h  vN   g  N7f)Nr   )Prisma)http)prismarM   r   connect)r   rJ   rK   rM   s       r   recreate_prisma_client$PrismaWrapper.recreate_prisma_clientR   s?      	""$*$<D!$*HD!##++---s   ?A	AA	namec                    [        U R                  U5      nU R                  (       a  [        R                  " S5      nU R                  U5      (       a  U R                  5       n[        R                  " 5       nU(       ae  UR                  5       (       a(  [        R                  " U R                  U5      U5        U$ [        R                  " U R                  U5      5         U$ [        S5      eU$ )Nr?   zFailed to get RDS IAM token)getattrr   r   rA   rB   r0   rH   asyncioget_event_loop
is_runningrun_coroutine_threadsaferQ   runr"   )r   rS   original_attrdb_urlloops        r   __getattr__PrismaWrapper.__getattr__^   s     5 5t<!!YY~.F$$V,,//1--/((88 77? 	  D$?$?$GH  %%BCCr   r   r   )__name__
__module____qualname____firstlineno__r   boolr   r   strr0   rH   rQ   r^   __static_attributes__ r   r   r	   r	      sh    3 3 3%.(3- %.D %.N8C= 0 =A
.
.,4SM
. r   r	   disable_prisma_schema_updatec                 T    U c  [        [        R                  " S5      5      n U SL a  gg)zL
This function is used to determine if the Prisma schema should be updated.
DISABLE_SCHEMA_UPDATETF)r   rA   rB   )rh   s    r   should_update_schemark   s   s-     $+'2299=T3U'V$#t+r   )__doc__rV   rA   r   urllib.parser   r   typingr   r   litellm.secret_managers.mainr   r	   rd   rk   rg   r   r   <module>rp      s>     	   (   4a aHx~ r   