U
    ^g%i-                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ ddlm	Z	m
Z
mZ ddlmZmZ ddlmZmZmZ dd Zi Zej D ]2\ZZeeereeejkrejee ee< qi Zej D ]2\ZZeeere ejkreje  ee< qG d	d
 d
ZdS )    N)
ModuleType   )HTTP_STATUS_CODE
ERROR_CODEURL)	resourcesutility)BadRequestErrorGatewayErrorServerErrorc                 C   s   d ttj| dS )N _)joinmapstr
capitalizesplit)string r   N/var/www/html/api-medvista/venv/lib/python3.8/site-packages/razorpay/client.pycapitalize_camel_case   s    r   c                   @   s   e Zd ZdZejdddddZd)dd	Zd
d Zdd Z	dd Z
dd Zdd Zdd Zd*ddZdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( ZdS )+ClientzRazorpay client class   r   <   g      ?)base_urlmax_retriesinitial_delay	max_delayjitterNc                 K   s   |p
t  | _|| _tjt}|d | _| j	f || _
|d| jd | _|d| jd | _|d| jd | _|d| jd | _d| _g | _t D ]\}}t| |||  qt D ]\}}t| |||  qdS )ze
        Initialize a Client object with session,
        optional auth handler, and options
        z/ca-bundle.crtr   r   r   r   FN)requestsSessionsessionauthospathdirname__file__	cert_path_set_base_urlr   getDEFAULTSr   r   r   r   retry_enabledapp_detailsRESOURCE_CLASSESitemssetattrUTILITY_CLASSES)selfr!   r"   optionsZfile_dirnameZKlassr   r   r   __init__.   s    
zClient.__init__c                 K   sT   | j d }d|kr |d }|d= |dd  |dd  |dd  |dd  |S )Nr   r   r   r   r   )r*   pop)r1   r2   r   r   r   r   r(   I   s    
zClient._set_base_urlc                 C   s<   d d|  |  }d|kr,||d d< nd|i|d< |S )Nz{}{} {}zRazorpay-Python/headersz
User-Agent)format_get_version_get_app_details_ua)r1   r2   
user_agentr   r   r   _update_user_agent_headerX   s    z Client._update_user_agent_headerc              
   C   s   d}zbz$dd l }ddl m} |jd}W n8 tk
rb   dd l}ddlm} |dd j}Y nX W n. ||tfk
r   d}t	j
dtdd	 Y nX |S )
Nr   r   )PackageNotFoundErrorZrazorpay)DistributionNotFoundz1.4.3zjCould not detect razorpay package version. Using fallback version.This may indicate an installation issue.   )
stacklevel)importlib.metadatar<   metadataversionImportErrorpkg_resourcesr=   require	NameErrorwarningswarnUserWarning)r1   rB   	importlibr<   rD   r=   r   r   r   r8   c   s$    zClient._get_versionc                 C   sR   d}|   }|D ]<}d|kr|d }d|kr>|d|d 7 }|d|7 }q|S )Nr   titlerB   z/{}z{} )get_app_detailsr7   )r1   Zapp_details_uar,   ZappZapp_uar   r   r   r9      s    zClient._get_app_details_uac                 C   s   | j | d S N)r,   append)r1   r,   r   r   r   set_app_details   s    zClient.set_app_detailsc                 C   s   | j S rM   )r,   )r1   r   r   r   rL      s    zClient.get_app_detailsFc                 C   s
   || _ d S rM   )r+   )r1   r+   r   r   r   enable_retry   s    zClient.enable_retryc                 K   s  |  |}|dd}| j}|rN| jrNt| jtrNt| jdkrN| jd df}|dd}|dk	r~d|krri |d< ||d d	< d
| j|}| j}| j	r| j
nd}	t|	D ]}
zt| j||f|| jd|}|jtjkr|jtjk r|jdkrti n| W   S d}d}| }d|krfd|d krH|d d }d|d krft|d d }t|tjkrt|n@t|tjkrt|n$t|tjkrt|nt|W q tjj k
r } z| j	rX|
|	d k rXt!"| j# | j#}|d|  }t$|| j%}t&d| d|dd|
d  d|	 d	 t'(| |d9 }n"t&d| j	rpd|	 dnd   W 5 d}~X Y q tjj)k
rN } z| j	r|
|	d k rt!"| j# | j#}|d|  }t$|| j%}t&d| d|dd|
d  d|	 d	 t'(| |d9 }n"t&d| j	r4d|	 dnd   W 5 d}~X Y q tjj*k
r } zt&d|   W 5 d}~X Y qX qdS )zT
        Dispatches a request to the Razorpay HTTP API with retry mechanism
        use_public_authFr   r   r   device_modeNr6   zX-Razorpay-Device-Modez{}{})r"   verify   errordescriptioncodezConnectionError: z. Retrying in z.2fz seconds... (Attempt /)   zConnection failed.z Max retries (z) exceeded.z	Timeout: zRequest timed out.zRequest error occurred: )+r;   r5   r"   
isinstancetuplelenr7   r   r   r+   r   rangegetattrr!   r'   status_coder   OKZREDIRECTjsondumpsr   upperr   ZBAD_REQUEST_ERRORr	   ZGATEWAY_ERRORr
   SERVER_ERRORr   r   
exceptionsConnectionErrorrandomuniformr   minr   printtimesleepTimeoutRequestException)r1   methodr$   r2   rQ   Zauth_to_userR   urlZdelay_secondsZmax_attemptsattemptresponsemsgrW   Zjson_responseeZjitter_valueZjittered_delayZactual_delayr   r   r   request   s~    
 
$



(

 (

 zClient.requestc                 K   s   | j d|fd|i|S )zE
        Parses GET request options and dispatches a request
        r)   params)rv   )r1   r$   rw   r2   r   r   r   r)      s    z
Client.getc                 K   s(   |  ||\}}| jd|fd|i|S )zF
        Parses POST request options and dispatches a request
        postdata_update_requestrv   r1   r$   ry   r2   r   r   r   rx      s    zClient.postc                 K   s(   |  ||\}}| jd|fd|i|S )zG
        Parses PATCH request options and dispatches a request
        patchry   rz   r|   r   r   r   r}      s    zClient.patchc                 K   s(   |  ||\}}| jd|fd|i|S )zH
        Parses DELETE request options and dispatches a request
        deletery   rz   r|   r   r   r   r~     s    zClient.deletec                 K   s(   |  ||\}}| jd|fd|i|S )zE
        Parses PUT request options and dispatches a request
        putry   rz   r|   r   r   r   r     s    z
Client.putc                 K   s`   i }i }d|krd|d< |d |d< |D ]}|dkr(|| |t |< q(| jd|f||d|S )Nfiler   rx   )filesry   )r   rv   )r1   r$   ry   r2   ZfileDictZ	fieldDictfieldsr   r   r   r     s    zClient.filec                 C   s4   t |}d|kri |d< |d ddi ||fS )z>
        Updates The resource data and header options
        r6   zContent-typezapplication/json)rb   rc   update)r1   ry   r2   r   r   r   r{   $  s
    
zClient._update_request)NN)F)__name__
__module____qualname____doc__r   ZBASE_URLr*   r4   r(   r;   r8   r9   rO   rL   rP   rv   r)   rx   r}   r~   r   r   r{   r   r   r   r   r   #   s.   

Zr   )r#   rb   r   rG   rh   rl   typesr   	constantsr   r   r   r   r   r   errorsr	   r
   r   r   r-   __dict__r.   r3   moduler[   r0   r   r   r   r   r   r   <module>   s*   
