o
    tBh                     @   s   d dl Z d dlZd dlmZ d dlZd dlZd dlmZ d dlZd dlmZ d dl	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 ddlmZ d dlmZ d dlmZ eeZedddZG dd deZdS )    N)datetime)JSONDecodeError)TTLCache)request)AccessTokenClientAccessTokenResponse   )ApiResponse)
BaseClient)get_exception_for_codeMissingScopeException)Marketplaces)AWSSigV4)CredentialProvider
   i  )maxsizettlc                   @   s*  e Zd ZU dZdZeed< dZeed< e	e
jde	jj fddddddd	e	fd
dZd/ddZd0ddZedd ZedefddZedefddZedd Zdd Zdddddddeded ed!edef
d"d#Zd1d!edefd$d%Zd&d' Zddd(deded efd)d*Zd+d, Zd-d. Z dS )2ClientN grantless_scopeFkeep_restricted_data_tokenSP_API_DEFAULT_MARKETPLACEdefault)refresh_tokenaccountcredentialsrestricted_data_tokenproxiesmarketplacec                C   sj   t ||j| _tj }|jd| jj| jjd| _|j	| _	|j
| _
|j| _|| _t|| jd| _|| _d S )Nsts)aws_access_key_idaws_secret_access_key)r   r   )r   r   boto3sessionSessionclientaws_access_keyaws_secret_keyboto3_clientendpointmarketplace_idregionr   r   _authr   )selfr   r   r   r   r   r   r#    r.   i/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sp_api/base/client.py__init__   s   


zClient.__init__c                 C   s"   dt || jjj d  S )Nrole_zutf-8)hashlibmd5r,   credr   encode	hexdigest)r-   token_flavorr.   r.   r/   _get_cache_key6   s
   zClient._get_cache_keyrolec                 C   s    | j j| jjdd}|t|< |S )Nguid)RoleArnRoleSessionName)r(   assume_roler   role_arn
role_cacher-   	cache_keyr9   r.   r.   r/   set_role;   s   zClient.set_rolec                 C   s0   | j dd  | j| jp| jjt dddS )N   %Y%m%dT%H%M%SZapplication/jsonhostz
user-agentzx-amz-access-tokenz
x-amz-datezcontent-type)r)   
user_agentr   authaccess_tokenr   utcnowstrftimer-   r.   r.   r/   headersC   s   zClient.headersreturnc                 C   s
   | j  S N)r,   get_authrM   r.   r.   r/   rI   M   s   
zClient.authc                 C   s   | j std| j| j S )Nz"Grantless operations require scope)r   r   r,   get_grantless_authrM   r.   r.   r/   grantless_authQ   s   zClient.grantless_authc                 C   s<   |   }zt| }W n ty   | |}Y nw |dS )NCredentials)r8   r?   KeyErrorrB   getr@   r.   r.   r/   r9   W   s   
zClient.rolec                 C   sT   d }| j j}| j j}| j jr | j}|d}|d}|d}td||| j|dS )NSessionTokenAccessKeyIdSecretAccessKeyzexecute-api)r    r!   r+   aws_session_token)r   r&   r'   r>   r9   rV   r   r+   )r-   rZ   r    r!   r9   r.   r.   r/   _sign_request`   s   


zClient._sign_requestT)dataparamsrN   add_marketplaceres_no_datapathr\   r]   r_   c             	   C   s   |d u ri }|d u ri }| d| dd| _|r%| | jdv r"|n| t| j| j| ||r9| jdv r9t|nd |p>| j|  | j	d}| 
||S )NmethodGET)POSTPUT)rc   rd   PATCH)r]   r\   rN   rI   r   )popra   _add_marketplacesr   r)   jsondumpsrN   r[   r   _check_response)r-   r`   r\   r]   rN   r^   r_   resr.   r.   r/   _requestp   s   zClient._requestc                 C   s   | j dks|r+d|j  krdk r+n nz| pi }W n ty*   d|ji}Y nw | p0i }t|tr:|d }|dd }|rNt|j}|||jdt	d	i |d|jiS )
NDELETE   i,  status_coder   errors)rN   rN   r.   )
ra   ro   rh   r   
isinstancelistrV   r   rN   r	   )r-   rk   r_   jserror	exceptionr.   r.   r/   rj      s   (

zClient._check_responsec                    s~   ddg}g d}j dkr&t fdd|D rd S  fdd|D S t fd	d|D r3d S  fd
d|D S )NmarketplaceIdsMarketplaceIds)MarketplaceIdrw   marketplace_idsrv   rc   c                 3       | ]	}|   v V  qd S rP   keys.0xr\   r.   r/   	<genexpr>       z+Client._add_marketplaces.<locals>.<genexpr>c                    &   i | ]}|| d s jn jgqS sendswithr*   r~   krM   r.   r/   
<dictcomp>      & z,Client._add_marketplaces.<locals>.<dictcomp>c                 3   rz   rP   r{   r}   r   r.   r/   r      r   c                    r   r   r   r   rM   r.   r/   r      r   )ra   anyupdate)r-   r\   rc   rb   r.   )r\   r-   r/   rg      s   
zClient._add_marketplaces)r\   r]   c                C   s<   | j dd  | j| jjt ddd}| j||||dS )NrC   rD   rE   rF   )r\   r]   rN   )r)   rH   rS   rJ   r   rK   rL   rl   )r-   r`   r\   r]   rN   r.   r.   r/   _request_grantless_operation   s   z#Client._request_grantless_operationc                 C   s
   d| _ | S )NT)r   rM   r.   r.   r/   	__enter__   s   zClient.__enter__c                 O   s   d | _ d| _d S )NF)r   r   )r-   argskwargsr.   r.   r/   __exit__   s   
zClient.__exit__)r   )r9   )F)!__name__
__module____qualname__r(   r   str__annotations__r   boolr   osenvironrV   USnamer0   r8   rB   propertyrN   r   rI   rS   r9   r[   dictr	   rl   rj   rg   r   r   r   r.   r.   r.   r/   r      sJ   
 



	

r   )r2   rh   r   loggingr   r   r"   
cachetoolsr   requestsr   sp_api.authr   r   r	   base_clientr
   
exceptionsr   r   marketplacesr   sp_api.baser   sp_api.base.credential_providerr   	getLoggerr   logr?   r   r.   r.   r.   r/   <module>   s&    
