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_forms/buyercall/buyercall/lib/__pycache__/bandwidth.cpython-38.pyc
U

k�if�L�@s(ddlZddlZddlZddlZddlmZddlmmZ	ddl
Z
ddlmZe�
e�Zdd�Zdd�ZGdd	�d	e�ZGd
d�de�ZGdd
�d
e�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGd d!�d!e�Z Gd"d#�d#e�Z!Gd$d%�d%e�Z"Gd&d'�d'e�Z#Gd(d)�d)e�Z$Gd*d+�d+e�Z%Gd,d-�d-e�Z&Gd.d/�d/e�Z'Gd0d1�d1e�Z(Gd2d3�d3e�Z)Gd4d5�d5e�Z*Gd6d7�d7e�Z+d8d9�Z,Gd:d;�d;e�Z-Gd<d=�d=e�Z.Gd>d?�d?e�Z/dS)@�N)�urlparse)�
HTTPBasicAuthcCsJt|t�rdd�|��D�S|�d�}|dd�dd�|dd�D��S)	NcSsi|]\}}t|�|�qS�)�
camel_case��.0�key�valrr�I/home/arjun/projects/buyercall_forms/buyercall/buyercall/lib/bandwidth.py�
<dictcomp>szcamel_case.<locals>.<dictcomp>�_r�css|]}|��VqdS�N)�
capitalize)r�xrrr
�	<genexpr>szcamel_case.<locals>.<genexpr>�)�
isinstance�dict�items�split�join)�thing�wordsrrr
rs

rcCstt|�j�Sr)�boolr�netloc)�urlrrr
�is_absolutesrc@seZdZdd�ZdS)�BandwidthExceptioncCs
||_dSr)�message)�selfrrrr
�__init__szBandwidthException.__init__N)�__name__�
__module__�__qualname__r!rrrr
rsrc@seZdZej�dd�Zefdd�Zedd��Z	edd��Z
ed	d
��Zedd��Zed
d��Z
edd��Zedd��Zedd��Zedd��Zedd��Zdd�Zgdfdd�Zd2dd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd3d*d+�Zd4d,d-�Zd.d/�Zd0d1�Zd)S)5�	BandwidthZBANDWIDTH_API_ROOTz$https://api.catapult.inetwork.com/v1cCs.t||�|_||_||_d�|j|j�|_dS�N�{}/{})r�auth�user_id�api_root�format�url_root)r �token�secretr)r*rrr
r!%szBandwidth.__init__cCst|�Sr)�Calls�r rrr
�calls+szBandwidth.callscCst|�Sr)�Bridgesr0rrr
�bridges/szBandwidth.bridgescCst|�Sr)�
Recordingsr0rrr
�
recordings3szBandwidth.recordingscCst|�Sr)�AvailableNumbersr0rrr
�available_numbers7szBandwidth.available_numberscCst|�Sr)�PhoneNumbersr0rrr
�
phone_numbers;szBandwidth.phone_numberscCst|�Sr)�Applicationsr0rrr
�applications?szBandwidth.applicationscCst|�Sr)�Conferencesr0rrr
�conferencesCszBandwidth.conferencescCst|�Sr)�Messagesr0rrr
�messagesGszBandwidth.messagescCst|�Sr)�Domainsr0rrr
�domainsKszBandwidth.domainscCst|�Sr)�Mediar0rrr
�mediaOszBandwidth.mediacCs^t�d|�s t�d�|��dSzd�|j|�}|�|�WSt�d�|��YdSXdS)z2 Make a CNAM lookup on an E.123-formatted number. z^\+?\d+$zInvalid number format: {}Nz{}/phoneNumbers/numberInfo/{}z&No CNAM value was found for number: {})�re�match�log�errorr+r*�get)r �numberrrrr
�number_infoSszBandwidth.number_infoTcCs |j|�d�||d�}t||�S)z Create a new bridge. r3)�call_ids�bridge_audio)�post�resource_url�Bridge)r rKrLrrrr
�bridge_s�zBandwidth.bridge�GETcKs4||i|d�}|�|�|�|�d�|�}t||�S)z Create a new call. )�from�toZ
sipHeadersZcallbackHttpMethodr1)�updaterMrN�Call)r �from_rSZcallback_http_method�kwargs�	json_data�call_urlrrr
�callgs�
zBandwidth.callc	Os�|}|rt|dt�r|d}t|�}|��D]$\}}t|�tkr.|rJdnd||<q.t�d�|t	�
|���tj||j
|d�}d|jkr�t	�|j���}td�|j|j|d|d	���|j�d
�S)Nr�true�falsezPOST {}
{}
�r(�json�,z7STATUS_CODE:{} - CATEGORY: {} - REASON: {} - DETAIL: {}�coder�Location)rrrr�typerrF�debugr+r^�dumps�requestsrMr(�status_code�loads�content�decoder�reason�headersrH)	r r�argsrW�paramsrr	�r�
error_contentrrr
rMus$
�zBandwidth.postc
Ks�dd�|��D�}t�d�|d�dd�|��D����tj||jt|�d�}d|j	kr�t
�|j�
��}td	�|j	|j|d
|d���|�
�S)NcSsi|]\}}|dk	r||�qSrr)r�k�vrrr
r�sz!Bandwidth.get.<locals>.<dictcomp>z
GET {}?{}
�&css|]\}}d�||�VqdS)z{}={}N)r+rrrr
r�sz Bandwidth.get.<locals>.<genexpr>)r(rmr_z5STATUS_CODE:{} - CATEGORY:{} - REASON:{} - DETAIL: {}r`r)rrFrcr+rrerHr(rrfr^rgrhrirrj)r rrWrnrorrr
rH�s�
�z
Bandwidth.getcCsHt�d�|��tj||jd�}d|jkrDt�|j	�
��}t|j��dS)Nz
DELETE {}
)r(r_)
rFrcr+re�deleter(rfr^rgrhrirrj)r rrnrorrr
rs�s

zBandwidth.deletecCsd�|j|�Sr&)r+r*)r �resourcerrr
�
global_url�szBandwidth.global_urlNcCs.|dkrd�|j|j|�Sd�|j|j||�S�Nz{}/users/{}/{}z{}/users/{}/{}/{}�r+r*r)�r rt�id_rrr
rN�s��zBandwidth.resource_urlcCs.|dkrd�|j|j|�Sd�|j|j||�Srvrwrxrrr
�
domain_url�s��zBandwidth.domain_urlcCs<tjd�|j|j|�|jddid�}d|jkr8t|j��dS)Nz{}/{}/calls/{}�state�	completedr]r_)	rerMr+r*r)r(rfrrj)r �sidrnrrr
�hangup�s��
zBandwidth.hangupcCs
t||�Sr)�
Conference)r Zconf_idrrr
�
conference�szBandwidth.conference)rQ)N)N)r"r#r$�os�environrHZAPI_ROOTr!�propertyr1r3r5r7r9r;r=r?rArCrJrPrZrMrsrurNrzr~r�rrrr
r% sJ�









	�


r%c@s>eZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�ZdS)�
CollectionNcCs(|||_|_|j�|j�|_||_dSr)�client�namerN�base_url�child_class)r r�r�r�rrr
r!�szCollection.__init__cCsd�|j|�}|�|j|�Sr&)r+r�r�r��r ryrrrr
�__getitem__�szCollection.__getitem__cKs|jj|jf|�Sr)r�rHr��r rWrrr
�search�szCollection.searchcCs|j�d�|j|��dSr&)r�rsr+r�)r ryrrr
rs�szCollection.deletecKs|jj|jf|�Sr)r�rMr�r�rrr
rM�szCollection.postcKs|�|j|jf|��Sr)r�r�rMr�rrr
�create�szCollection.create)N)	r"r#r$r!r�r�rsrMr�rrrr
r��s
r�c@s@eZdZdd�Zedd��Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�ResourcecCs8t|�sd�|j|�}||_||_|j�d�d|_dS)Nr'�/���)rr+r*rr�rry)r r�rrrr
r!�s
zResource.__init__cCs|jSr)ryr0rrr
�id�szResource.idcCs|j�|j�Sr�r�rHrr0rrr
rH�szResource.getcCs|j�|j�S)z A synonym for `Resource.get` r�r0rrr
�details�szResource.detailscKs|jj|jf|�Sr)r�rMrr�rrr
rM�sz
Resource.postcKs|jf|�S)z A synonym for `Resource.post` �rMr�rrr
�set�szResource.setN)
r"r#r$r!r�r�rHr�rMr�rrrr
r��s
r�cseZdZ�fdd�Z�ZS)r>cstt|��|dt�dS)Nr?)�superr>r!�Message�r r���	__class__rr
r!�szMessages.__init__�r"r#r$r!�
__classcell__rrr�r
r>�sr>c@seZdZdS)r�N�r"r#r$rrrr
r��sr�cseZdZ�fdd�Z�ZS)r<cstt|��|dt�dS)Nr=)r�r<r!rr�r�rr
r!�szConferences.__init__r�rrr�r
r<�sr<c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
rcCs|jjd�|j�|d�S)N�
{}/members)�call_id�r�rMr+r�r r�rrr
�
add_member�s
�zConference.add_membercCs|jjd�|j|�dd�S)Nz
{}/members/{}r|�r{r�r�rrr
�
remove_members�zConference.remove_membercCs|j�d�|j��S)Nr�)r�rHr+rr0rrr
�memberss
�zConference.memberscKs|jjd�|j�f|�S�N�{}/audior�r�rrr
�audios

��zConference.audioN)r"r#r$r�r�r�r�rrrr
r�srcs$eZdZ�fdd�Zdd�Z�ZS)r:cstt|��|dt�dS)Nr;)r�r:r!�Applicationr�r�rr
r!szApplications.__init__cCsd�|j|�}|jj||d�S)Nr')�incoming_message_url�r+r�r�rM)r �application_idr�Zapplication_urlrrr
�update_incoming_message_urlsz(Applications.update_incoming_message_url)r"r#r$r!r�r�rrr�r
r:sr:c@seZdZdS)r�Nr�rrrr
r� sr�c@seZdZdd�Zdd�ZdS)r2cCs
||_dSr�r�r�rrr
r!%szBridges.__init__cCs|j�d|�}t|j|�S)Nr3)r�rNrOr�rrr
r�(szBridges.__getitem__N�r"r#r$r!r�rrrr
r2$sr2c@seZdZdd�Zdd�ZdS)r4cCs
||_dSrr�r�rrr
r!.szRecordings.__init__cCs|j�d|�}t|j|�S)Nr5)r�rN�	Recordingr�rrr
r�1szRecordings.__getitem__Nr�rrrr
r4-sr4cs$eZdZ�fdd�Zdd�Z�ZS)r�cs@tt|��||�|��D] \}}|dkr.d}t|||�qdS)Nr�ry)r�r�r!r�setattr)r r�rrWrr	r�rr
r!7s
zRecording.__init__cCstj|j|jjdd�}|S)z Assuming self.media is set T�r(�stream)rerHrCr�r()r rnrrr
�data?s�zRecording.data)r"r#r$r!r�r�rrr�r
r�6sr�cs0eZdZ�fdd�Zddd�Zd	dd�Z�ZS)
r8cstt|��|dt�dS)NZphoneNumbers)r�r8r!�PhoneNumberr�r�rr
r!JszPhoneNumbers.__init__NcCs|j||||d�}t|j|�S)N)rIr�r��fallback_number�rMr�r�)r rIr�r�r�rrrr
�purchaseMs�zPhoneNumbers.purchasecCs|j||||d�}t|j|�S)N)rIr�Z
applicationId�providerr�)r rIr�r�r�rrrr
�
import_numberXs�zPhoneNumbers.import_number)NNNN)NNNN)r"r#r$r!r�r�r�rrr�r
r8Is�
r8c@seZdZdS)r�Nr�rrrr
r�asr�c@seZdZdd�Zddd�ZdS)r6cCs(|d|_|_|j�|j�|_d|_dS)NZavailableNumbers)r�r�rur�r�r�rrr
r!fszAvailableNumbers.__init__�localcKsd�|j|�}|jj|f|�Sr&�r+r�r�rH)r rbrWrrrr
r�kszAvailableNumbers.searchN)r�)r"r#r$r!r�rrrr
r6esr6csDeZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Z�Z	S)
r@cstt|��|dt�dS)NrA)r�r@r!�Domainr�r�rr
r!qszDomains.__init__c		Cs4d�|j|�}|jj|||||||d�}t|j|�S)N�{}/{}/endpoints)�	domain_idr��descriptionr��enabled�credentials)r+r�r�rM�Endpoint)	r r�r�r�r�r�r��endpoint_urlrrrr
�create_endpointts�zDomains.create_endpointcCs"d�|j||�}|jj|||d�S)N�{}/{}/endpoints/{})r��endpoint_idr�)r r�r�rrrr
�get_endpoints
�zDomains.get_endpointcCsd�|j|�}|jj||d�S)Nr�)r�r�)r r�rrrr
�
get_endpoints�s�zDomains.get_endpointscCs$d�|j||�}|jj||||d�S)Nr�)r�r�r�r�)r r�r�r�r�r�rrrr
�update_endpoint�s��zDomains.update_endpointcCs6|j�d|�}d�||�}t�d�|��|j�|�S)NrAz{}/endpoints/{}zThe url is: {})r�rzr+rF�infors)r r�r�rzr�rrr
�delete_endpoint�szDomains.delete_endpoint)
r"r#r$r!r�r�r�r�r�r�rrr�r
r@ps
r@cs$eZdZ�fdd�Zdd�Z�ZS)rBcstt|��|dt�dS)NrC)r�rBr!�Mediasr�r�rr
r!�szMedia.__init__cCs(d�|j|�}tj||jjdd�}|jS)Nr'Tr�)r+r�rerHr�r(rh)r Z
media_namerrnrrr
�	get_media�s�zMedia.get_media)r"r#r$r!r�r�rrr�r
rB�srBc@seZdZdS)r�Nr�rrrr
r��sr�c@seZdZdS)r�Nr�rrrr
r��sr�c@seZdZdS)r�Nr�rrrr
r��sr�cs"eZdZgdf�fdd�	Z�ZS)rOTcstt|��||�dSr)r�rOr�)r r1rLr�rr
r��sz
Bridge.set)r"r#r$r�r�rrr�r
rO�srOc@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)r/cCs
||_dSrr�r�rrr
r!�szCalls.__init__cCs|j�d|�}t|j|�S�Nr1)r�rNrU)r r�rrrr
r��szCalls.__getitem__cCs"|j�d|�}|jj|dd�dS)Nr1r|r��r�rNrM�r r�rYrrr
r~�szCalls.hangupcCs$|j�d|�}|jj|d|d�dS)Nr1�active)r{�callback_urlr�)r r�rrYrrr
�redirect�s�zCalls.redirectcCs"|j�d|�}|jj|dd�dS)Nr1r�r�r�r�rrr
rT�szCalls.updatecCs$|j�d|�}|jj|d|d�dS)Nr1Ztransferring)r{Ztransfer_tor�)r r��phone_numberrYrrr
�transfer�szCalls.transfercCs|j�d|�}|j�|�Sr�)r�rNrHr�rrr
r��sz
Calls.infoN)
r"r#r$r!r�r~r�rTr�r�rrrr
r/�sr/c@sNeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	ddd�Z
dS)rUcOs d�|j�}|jj|f|�dSr��r+rr�rM�r rlrWrrrr
r��sz
Call.audiocOs$d�|j�}|jj|f|�|�dS)Nz	{}/gatherr�r�rrr
�gather�szCall.gathercCs|jdd�dS)N�rejectedr��r�r0rrr
�reject�szCall.rejectcCs|jdd�dS)Nr�r�r�r0rrr
�accept�szCall.acceptcCs|jdd�dS)Nr|r�r�r0rrr
r~�szCall.hangupcCs|j|d�dS)N)r�r��r rrrr
r��sz
Call.redirectcs&d��j�}�fdd��j�|�D�S)Nz
{}/recordingsc	s*g|]"}t�jd��j|d�f|��qS)r'r�)r�r�r+r)r�itemr0rr
�
<listcomp>�s���z#Call.recordings.<locals>.<listcomp>)r+rr�rHr�rr0r
r5�s

�zCall.recordings�female�en_US�susancKs.d�|j�}|jj|f||||d�|��dS)Nr�)�sentence�gender�locale�voicer�)r �textr�r�r�rWrrrr
�say�s���zCall.sayN)r�r�r�)r"r#r$r�r�r�r�r~r�r5r�rrrr
rU�s	�rUcs�fdd�}|S)Ncs<�|f|��}|��D] \}}|r|�t|�t|��q|Sr)rr�r�str)r rlrW�eltrr	��methodrr
�wrappers
zxattrs.<locals>.wrapperr)r�r�rr�r
�xattrssr�c@s�eZdZd dd�Zdd�Zed!d	d
��Zedd��Zed"dd��Zedd��Z	edd��Z
edd��Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)#�ResponseNcCs|dk	r|nt�d�|_dS)Nr�)�ET�Element�root�r r�rrr
r!szResponse.__init__cCstj|jdd�S)N�unicode)�encoding)r��tostringr�r0rrr
�__str__szResponse.__str__r�r�r�cCs(tjd|||d�}||_|j�|�|S)N�
SpeakSentence)r�r�r��r�r�r�r��append)r r�r�r�r�r�rrr
r�s�zResponse.saycCstjddd�}|j�|�|S)N�Pause�4��length�r�r�r�r�r�rrr
�pauses�zResponse.pause�2cCstjd|d�}|j�|�|S)Nr�r�r)r r�r�rrr
�custom_pause#s�zResponse.custom_pausecCs$tjddd�}||_|j�|�|S�N�	PlayAudioz-4)�volumer��r rr�rrr
�
play_audio+szResponse.play_audiocCst�d�}|j�|�|S)a:
        :param from_: Required.
        :param status_callback_url: Optional.
        :param join_tone: Optional. 'true'/'false'
        :param leaving_tone: Optional. 'true'/'false'
        :param tag: Optional.
        :param mute: Optional. 'true'/'false'
        :param hold: Optional. 'true'/'false'
        rrr�rrr
r�2s
zResponse.conferencecCs$tjd|dd�d�}|j�|�|S)N�RedirectZ5000)�
requestUrlZrequestUrlTimeout)�attribr)r �request_urlr�rrr
r�As��zResponse.redirectcCst�d�}|j�|�|S)N�Hanguprr�rrr
r~Ms
zResponse.hangupcCst�d�}|j�|�|S)N�Rejectrr�rrr
r�Rs
zResponse.rejectcKsLtjd|d�}|j�|�|��D] \}}|r"|�t|�t|��q"t|�S)N�Gather)r
)	r�r�r�r�rr�rr�r)r rrWr�rr	rrr
r�Ws�zResponse.gathercKsHt�d�}|j�|�|��D] \}}|r|�t|�t|��qt|�S)N�Transfer�	r�r�r�r�rr�rr�r�r rWr�rr	rrr
r�cs�zResponse.transfercKsHt�d�}|j�|�|��D] \}}|r|�t|�t|��qt|�S�N�Recordrrrrr
�recordms�zResponse.record)N)r�r�r�)r)r"r#r$r!r�r�r�rrrr�r�r~r�r�r�rrrrr
r�s&





r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)rcCs
||_dSr)r�r�rrr
r!zszGather.__init__cCs|Srrr0rrr
�	__enter__}szGather.__enter__cCsdSrr�r �type_�value�tbrrr
�__exit__�szGather.__exit__cOst|j�j||�Sr)r�r�r��r rlrWrrr
r��sz
Gather.saycCs$tjddd�}||_|j�|�|Srr�rrrr
r�szGather.play_audioN)r"r#r$r!rrr�rrrrr
rxs
rc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)rcCs||_t|j�|_dSr)r�r��respr�rrr
r!�szTransfer.__init__cCs|Srrr0rrr
r�szTransfer.__enter__cCsdSrrrrrr
r�szTransfer.__exit__cOs|jj||�Sr)rr�rrrr
r��szTransfer.saycCs t�d�}|j�|�||_|S)Nr�)r�r�r�r�r�)r r�r�rrr
r��s�zTransfer.phone_numbercKsDt�d�}|j�|�|��D] \}}|r|�t|�t|��q|Sr)r�r�r�r�rr�rr�rrrr
r�s�zTransfer.recordcCstjddd�}|j�|�|S)Nr��3r�rr�rrr
r�s�zTransfer.pausecCs$tjddd�}||_|j�|�|Srr�rrrr
r�szTransfer.play_audioN)r"r#r$r!rrr�r�rrrrrrr
r�s
r)0r�r^�loggingrD�urllib.parser�xml.etree.ElementTree�etree�ElementTreer�reZ
requests.authr�	getLoggerr"rFrr�	Exceptionr�objectr%r�r�r>r�r<rr:r�r2r4r�r8r�r6r@rBr�r�r�rOr/rUr�r�rrrrrr
�<module>sN
			+'m