HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/buyercall/buyercall/lib/__pycache__/bandwidth_api_v2.cpython-310.pyc
o

�we�R�@sPddlZddlZddlZddlmmZddlZddlZ	ddl
Z
ddlZddlm
Z
ddlmZe�e�Zdd�Zdd�Zdd	�ZGd
d�de�Zdd
�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�Z Gdd�de�Z!Gdd�de�Z"Gd d!�d!e�Z#Gd"d#�d#e�Z$dS)$�N)�
HTTPBasicAuth)�format_phone_numbercCsJt|t�rdd�|��D�S|�d�}|dd�dd�|dd�D��S)	NcSsi|]	\}}t|�|�qS�)�
camel_case��.0�key�valrr�@/home/arjun/projects/buyercall/buyercall/lib/bandwidth_api_v2.py�
<dictcomp>szcamel_case.<locals>.<dictcomp>�_r�css�|]}|��VqdS�N)�
capitalize)r�xrrr
�	<genexpr>s�zcamel_case.<locals>.<genexpr>�)�
isinstance�dict�items�split�join)�thing�wordsrrr
rs

$rcOs$tj||g|�Ri|��}||_|Sr)�ET�
SubElement�text)�parent�tagr�args�kwargs�elementrrr
�text_elementsr"cCsttj�|�j�Sr)�bool�urllib�parse�urlparse�netloc)�urlrrr
�is_absolute#�r)c@seZdZdS)�BandwidthExceptionN)�__name__�
__module__�__qualname__rrrr
r+'sr+cCsF|dkr
tj�dd�}|S|dkrtj�dd�}|Stj�dd�}|S)	N�	messaging�BANDWIDTH_MESSAGING_API_ROOTz,https://messaging.bandwidth.com/api/v2/users�voice�BANDWIDTH_VOICE_API_ROOTz+https://voice.bandwidth.com/api/v2/accounts�BANDWIDTH_DASHBOARD_API_ROOTz,https://dashboard.bandwidth.com/api/accounts)�os�environ�get)�request_type�api_rootrrr
�api_root_url/s�����r9c@s�eZdZdd�Zedd��Zedd��Zedd��Zed	d
��Zedd��Z	ed
d��Z
edd��Zedd��Zedd��Z
d)dd�Zdd�Zdd�Zd*dd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�ZdS)+�	Bandwidthc
Csrt|�}
t||�|_||_|
|_||_||_||_||_||_	||_
|	|_d�|j|j�|_
t�d�|j
��dS)N�{}/{}zThe root url is: {})r9r�auth�
account_idr8�username�password�site_id�location_id�sms_application_id�voice_application_id�
cnam_password�format�url_root�log�info)�selfr7r>r?r=r@rArBrCrDr8rrr
�__init__@szBandwidth.__init__cC�t|�Sr)�AvailableNumbers�rIrrr
�available_numbersP�zBandwidth.available_numberscCrKr)�
SubscriptionsrMrrr
�
subscriptionsTrOzBandwidth.subscriptionscCrKr)�PhoneNumbersrMrrr
�
phone_numbersXrOzBandwidth.phone_numberscCrKr)�PhoneNumbersOptionsrMrrr
�phone_numbers_options\rOzBandwidth.phone_numbers_optionscCrKr)�InserviceNumberrMrrr
�in_service_number`rOzBandwidth.in_service_numbercCrKr)�MediarMrrr
�mediadrOzBandwidth.mediacCrKr)�MessagesrMrrr
�messageshrOzBandwidth.messagescCrKr)�	PhoneCallrMrrr
�calllrOzBandwidth.callcCrKr)�RealmsrMrrr
�realmsprOzBandwidth.realmsFc
Cs�d}tj�|j�}t|�}|j||||d�}tj�|�}|j}ttj�	|��}	|	�
|�tj�|	�}
|j|
d�}tj�
|�}t�|�}d|jkrTtd�|j|j�����|j��S)Nzhttps://cnam.dashcs.com/?)�	companyIdr?�number�dnis�test)�query�,zSTATUS_CODE:{} - DETAIL: {})r$r%�
quote_plusrDrr=r&rdr�	parse_qsl�update�	urlencode�_replace�
urlunparse�requestsr6�status_coder+rE�content�decode)
rIrarcr(r?�
format_number�params�	url_parserd�url_dict�
url_new_query�new_url�rrrr
�cnam_lookupts&�


�
zBandwidth.cnam_lookupcCsd�|j|j|�S)Nz{}/{}/{})rEr8r=)rI�resourcerrr
�
global_url�r*zBandwidth.global_urlc	
Ks�dd�|��D�}t�d�|d�dd�|��D����tj||jt|�d�}d|j	krZt
�|j�
��}t�|�}t�|�}|d	d
d}|d	d
d}td
�|j	|j||���|j�
�S)NcSsi|]\}}|dur||�qSrr)r�k�vrrr
r�sz!Bandwidth.get.<locals>.<dictcomp>z
GET {}?{}
�&css �|]\}}d�||�VqdS)z{}={}N)rErrrr
r�s�z Bandwidth.get.<locals>.<genexpr>)r<rqre�SearchResult�Error�Description�Code�7STATUS_CODE:{} - CATEGORY: {} - REASON: {} - DETAIL: {})rrG�debugrErrlr6r<rrm�	xmltodictr%rnro�json�dumps�loadsr+�reason)	rIr(r rv�
error_content�json_error_content�return_error_json�
error_desc�
error_coderrr
r6�s �


�
z
Bandwidth.getNcCstj||j||d�}d|jkr�t�|j���}t�	|�}t�
|�}|dkr:|dddd}	|dddd}
n:|d	krO|d
dd}	|d
dd}
n%|d
krd|ddd}	|ddd}
n|ddd}	|ddd}
td�|j|j
|
|	���|j�d�S)N�r<�data�headersre�order�
OrderResponse�	ErrorListr~rr��subscription�SubscriptionResponse�ResponseStatus�	ErrorCode�	tn_option�TnOptionOrderResponser��Location)rl�postr<rmr�r%rnror�r�r�r+rEr�r�r6)rIr(r�r�r7rvr�r�r�r�r�rrr
�post_tn�s(


�zBandwidth.post_tncC�>tj||j||d�}d|jkrtd�|j|j|j�����|S�Nr�re�*STATUS_CODE:{} - CATEGORY: {} - DETAIL: {})	rlr�r<rmr+rEr�rnro�rIr(r�r�rvrrr
�post_sip��
�zBandwidth.post_sipcCr�r�)	rl�putr<rmr+rEr�rnror�rrr
�put_sip�r�zBandwidth.put_sipcC�.tj||j||d�}t�d�|��|j��S)Nr�zThe msg request data: {}�rlr�r<rGrHrErnror�rrr
�
post_msg_json��
zBandwidth.post_msg_jsoncCr�)Nr�zThe request data: {}r�r�rrr
�post_call_json�r�zBandwidth.post_call_jsoncCsLt�d�|��tj||jd�}d|jkr#td�|j|j|j	�
����|jS)Nz
DELETE {}
�r<rer�)rGr�rErl�deleter<rmr+r�rnro�rIr(rvrrr
r��s
�zBandwidth.delete)Fr)r,r-r.rJ�propertyrNrQrSrUrWrYr[r]r_rwryr6r�r�r�r�r�r�rrrr
r:?s:










r:c@seZdZddd�Zdd�ZdS)�
CollectionNcCs(|||_|_|j�|j�|_||_dSr)�client�name�resource_url�base_url�child_class)rIr�r�r�rrr
rJ��
zCollection.__init__cCsd�|j|�}|�|j|�S�Nr;)rEr�r�r�)rI�id_r(rrr
�__getitem__�szCollection.__getitem__r)r,r-r.rJr�rrrr
r��s
r�c@�eZdZdd�Zdd�ZdS)rLcCsL|d|_|_|j�|j�|_t�d�|j��t�d�|j��d|_dS)N�availableNumberszThe base url is: {}z$The client account id looks like: {})	r�r�ryr�rGrHrEr=r��rIr�rrr
rJ�s

zAvailableNumbers.__init__cKs0d�|j�}t�|jj|fi|���}t�|�S�N�{})rEr�r�r%r�r6r�r�)rIr r(rvrrr
�search�s
zAvailableNumbers.searchN)r,r-r.rJr�rrrr
rL�srLc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)rPcC�(|d|_|_|j�|j�|_d|_dS)NrQ�r�r�ryr�r�r�rrr
rJ�r�zSubscriptions.__init__cCs�d�|j�}t�d�}t|d|�t�|d�}t|d|�t|d|�t�|d�}t�|d�}t|d	|jj�t|d
|jj�t�	|�}	ddi}
|j�
||	|
d
�S)Nr��Subscription�	OrderType�CallbackSubscription�URL�Expiry�CallbackCredentials�BasicAuthentication�Username�Password�Content-Type�application/xml; charset=UTF-8r�)rEr�r�Elementr"rr�r>r?�tostringr�)rI�
order_type�callback_url�expiryr(�root�callback_subscription_elt�callback_credentials_elt�callback_auth_elt�
subscribe_xmlr�rrr
�	subscribe�s

zSubscriptions.subscribecCs$|j�|j�|_|j�d�|j��Sr��r�ryr�r�r6rErMrrr
�all_subscriptionsszSubscriptions.all_subscriptionscC�&|j�|j�|_|j�d�|j|��Sr�r��rIr�rrr
�single_subscription�z!Subscriptions.single_subscriptioncCr�r�)r�ryr�r�r�rEr�rrr
�delete_subscriptionr�z!Subscriptions.delete_subscriptionN)r,r-r.rJr�r�r�r�rrrr
rP�srPc@�$eZdZdd�Zdd�Zdd�ZdS)rRcCr�)N�ordersr�r�rrr
rJr�zPhoneNumbers.__init__c
Cs�d�|j�}t�d�}t|d|�t|d|�t�|d�}t�|d�}t|d|�t|d|jj�t|d	|jj�t�	|�}t
�d
�|��ddi}	|j�|||	d
�S)Nr��Order�CustomerOrderId�Name� ExistingTelephoneNumberOrderType�TelephoneNumberList�TelephoneNumber�SiteId�PeerId�The xml looks like: {}r�r�r�)
rEr�rr�r"rr�r@rAr�rGrHr�)
rI�partner_account_idr��phonenumberr(r��existing_pn_order�pn_list�	order_xmlr�rrr
r�s

zPhoneNumbers.orderc	Cs~d�|j�d��}t�d�}t|d|�t�|d�}t�|d�}t|d|�t�|�}t�	d�|��d	d
i}|j�
|||�S)Nr��disconnects�DisconnectTelephoneNumberOrderr��"DisconnectTelephoneNumberOrderTyper�r�r�r�r�)rEr�ryrr�r"rr�rGrHr�)	rI�partner_account_namer�r(r��disconnect_pn_orderr��disconnect_xmlr�rrr
�
disconnect"s

zPhoneNumbers.disconnectN)r,r-r.rJr�r�rrrr
rR
srRc@�eZdZdd�Zddd�ZdS)rZcCr�)Nr[r�r�rrr
rJ0r�zMessages.__init__Nc
Cs^d�|j�}|r||||jj||d�}n
||||jj|d�}t�|�}ddi}	|j�|||	�S)Nr�)�to�fromr�
applicationIdrYr)r�r�rr�rr��application/json)rEr�r�rBr�r�r�)
rI�m_to�m_from�m_bodyrY�m_tagr(r��	json_datar�rrr
�create5s$��
zMessages.create�NN)r,r-r.rJr�rrrr
rZ/�rZc@sBeZdZdd�Z	ddd�Zdd�Zd	d
�Zdd�Zdd
d�ZdS)r\cCr�)N�callsr�r�rrr
rJKr�zPhoneCall.__init__�Nc	

CsJd�|j�}	|||jj||||||d�	}
t�|
�}ddi}|j�|	||�S)Nr�)	r�r�r��	answerUrl�
disconnectUrl�answerFallbackUrl�callTimeoutr�machineDetectionr�r�)rEr�r�rCr�r�r�)
rI�c_from�c_to�answer_callback_url�answer_fallback_callback_url�disconnect_callback_url�call_timeoutr�machine_detectionr(r�r�r�rrr
r�Ps�
	zPhoneCall.createcCs(d�|j||�}tj||jjdd�}|S)Nz{}/{}/recordings/{}/mediaT�r<�stream�rEr�rlr6r�r<)rI�call_id�recording_idr(rvrrr
�	recording`s�zPhoneCall.recordingcCs6d�|j||�}tj||jjd�}t�|j�	��}|S)Nz!{}/{}/recordings/{}/transcriptionr��
rEr�rlr6r�r<r�r�rnro)rIrrr(rv�r_jsonrrr
�
transcriptionhs�zPhoneCall.transcriptioncCs4d�|j|�}tj||jjd�}t�|j�	��}|S�Nr;r�r)rIrr(rvrrrr
rHps�zPhoneCall.infoc
Cs>d�|j|�}||||d�}t�|�}ddi}	|j�|||	�S)Nr;)�state�redirectUrl�redirectFallbackUrlrr�r�)rEr�r�r�r�r�)
rIrr�redirect_url�redirect_fallback_urlrr(r�r�r�rrr
rhxs�
zPhoneCall.update)rNN)NNN)	r,r-r.rJr�rrrHrhrrrr
r\Js
�r\c@r�)rTcCr�)N�	tnoptionsr�r�rrr
rJ�r�zPhoneNumbersOptions.__init__NcCs�d�|j�}t�d�}t|d|�t�|d�}t�|d�}	t|	d|�|dkrHt�|	d�}
|rBt|
d	|�t|
d
|�t|
dd�nt|
dd
�t�|	d�}t|d|�t�|�}t�d�|��ddi}
|j	�
|||
d�S)Nr��
TnOptionOrderr��TnOptionGroups�
TnOptionGroup�Sms�on�A2pSettings�MessageClass�
CampaignId�Action�asSpecified�	unchanged�TelephoneNumbersr�r�r�r�r�)rEr�rr�r"rr�rGrHr�r�)rIr�r��
sms_option�sms_campaign_id�sms_campaign_classr(r��tn_options_groups�tn_options_group�sms_settingsr�r�r�rrr
rh�s&

zPhoneNumbersOptions.updater�)r,r-r.rJrhrrrr
rT�r�rTc@r�)rVcCr�)N�inserviceNumbersr�r�rrr
rJ�r�zInserviceNumber.__init__cCs&d�|j|�}tj||jjd�}|jSr)rEr�rlr6r�r<rm)rI�tnr(rvrrr
�validate�s�zInserviceNumber.validateN)r,r-r.rJr2rrrr
rV�srVc@r�)rXcCr�)NrYr�r�rrr
rJ�r�zMedia.__init__cCs&d�|j�}tj||jjdd�}|jS)Nr�Tr)rEr�rlr6r�r<rnr�rrr
�
list_media�s�zMedia.list_mediacCs&d�|j|�}tj||jjdd�}|S)Nr;Trr)rI�
media_namer(rvrrr
�	get_media�s�zMedia.get_mediaN)r,r-r.rJr3r5rrrr
rX�s	rXc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
r^cCr�)Nr_r�r�rrr
rJ�r�zRealms.__init__cCs�d�|j|�}t�d�}t�|d�}t|d|�|rP|d|d|��}t�|��	�}	|d|d|d|��}
t�|
��	�}t|d|	�t|d|�t|d	|j
j�t�|�}t
�d
�|��ddi}
|j
�|||
�S)
Nz{}/{}/sipcredentials�SipCredentials�
SipCredential�UserName�:�@�Hash1�Hash1b�HttpVoiceV2AppIdr�r�r�)rEr�rr�rr"�encode�hashlib�md5�	hexdigestr�rCr�rGrHr�)rI�realm_id�realm�sip_username�sip_passwordr(r��sip_cred�hash_1_composite�hash_1�hash_1_b_composite�hash_1_br�r�rrr
�create_sip_credentials�s 
 
zRealms.create_sip_credentialscCs,d�|j||�}t�d�|��|j�|�S)N�{}/{}/sipcredentials/{}zThe url is: {})rEr�rGrHr�r�)rIrB�endpoint_idr(rrr
�delete_sip_credentials�szRealms.delete_sip_credentialscCs�d�|j||�}t�d�}|rE|d|d|��}t�|���}	|d|d|d|��}
t�|
���}t|d|	�t|d|�t|d|�t|d|�t|d	|j	j
�t�|�}t�
d
�|��ddi}
|j	�|||
�S)
NrLr7r9r:r;r<�Realm�RealmIdr=r�r�r�)rEr�rr�r>r?r@rAr"r�rCr�rGrHr�)rIrBrCrMrDrEr(r�rGrHrIrJr�r�rrr
�update_sip_credentials�s 
 
zRealms.update_sip_credentialsN)r,r-r.rJrKrNrQrrrr
r^�s
r^)%r4r��logging�xml.etree.ElementTree�etree�ElementTreerr��urllib.parser$rlr?�
requests.authr�buyercall.blueprints.filtersr�	getLoggerr,rGrr"r)�	Exceptionr+r9�objectr:r�rLrPrRrZr\rTrVrXr^rrrr
�<module>s8
"":