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.cpython-310.pyc
o

�we�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�9/home/arjun/projects/buyercall/buyercall/lib/bandwidth.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

$rcCstt|�j�Sr)�boolr�netloc)�urlrrr
�is_absolute�rc@seZdZdd�ZdS)�BandwidthExceptioncC�
||_dSr)�message)�selfr!rrr
�__init__�
zBandwidthException.__init__N)�__name__�
__module__�__qualname__r#rrrr
rsrc@seZdZej�dd�Zefdd�Zedd��Z	edd��Z
ed	d
��Zedd��Zed
d��Z
edd��Zedd��Zedd��Zedd��Zedd��Zdd�Zgdfdd�Z	d2dd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd3d*d+�Zd3d,d-�Zd.d/�Zd0d1�Zd)S)4�	Bandwidth�BANDWIDTH_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__cC�t|�Sr)�Calls�r"rrr
�calls+�zBandwidth.callscCr3r)�Bridgesr5rrr
�bridges/r7zBandwidth.bridgescCr3r)�
Recordingsr5rrr
�
recordings3r7zBandwidth.recordingscCr3r)�AvailableNumbersr5rrr
�available_numbers7r7zBandwidth.available_numberscCr3r)�PhoneNumbersr5rrr
�
phone_numbers;r7zBandwidth.phone_numberscCr3r)�Applicationsr5rrr
�applications?r7zBandwidth.applicationscCr3r)�Conferencesr5rrr
�conferencesCr7zBandwidth.conferencescCr3r)�Messagesr5rrr
�messagesGr7zBandwidth.messagescCr3r)�Domainsr5rrr
�domainsKr7zBandwidth.domainscCr3r)�Mediar5rrr
�mediaOr7zBandwidth.mediacCsXt�d|�st�d�|��dSz
d�|j|�}|�|�WSt�d�|��YdS)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. r9)�call_ids�bridge_audio)�post�resource_url�Bridge)r"rQrRrrrr
�bridge_s
�
zBandwidth.bridge�GETcKs4||i|d�}|�|�|�|�d�|�}t||�S)z Create a new call. )�from�to�
sipHeaders�callbackHttpMethodr6)�updaterSrT�Call)r"�from_rY�callback_http_method�kwargs�	json_data�call_urlrrr
�callgs�

zBandwidth.callc	Os�|}|rt|dt�r|d}t|�}|��D]\}}t|�tur)|r%dnd||<qt�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�typerrL�debugr/rg�dumps�requestsrSr,�status_code�loads�content�decoder�reason�headersrN)	r"r�argsr`�paramsrr	�r�
error_contentrrr
rSus �
�zBandwidth.postc
Ks�dd�|��D�}t�d�|d�dd�|��D����tj||jt|�d�}d|j	krDt
�|j�
��}td	�|j	|j|d
|d���|�
�S)NcSsi|]\}}|dur||�qSrr)r�k�vrrr
r�sz!Bandwidth.get.<locals>.<dictcomp>z
GET {}?{}
�&css �|]\}}d�||�VqdS)z{}={}N)r/rrrr
r�s�z Bandwidth.get.<locals>.<genexpr>)r,rvrhz5STATUS_CODE:{} - CATEGORY:{} - REASON:{} - DETAIL: {}rir!)rrLrlr/rrnrNr,rrorgrprqrrrrs)r"rr`rwrxrrr
rN�s�
�z
Bandwidth.getcCsHt�d�|��tj||jd�}d|jkr"t�|j	�
��}t|j��dS)Nz
DELETE {}
)r,rh)
rLrlr/rn�deleter,rorgrprqrrrrs)r"rrwrxrrr
r|�s

�zBandwidth.deletecCsd�|j|�Sr*)r/r.)r"�resourcerrr
�
global_url�rzBandwidth.global_urlNcC�.|dur
d�|j|j|�Sd�|j|j||�S�Nz{}/users/{}/{}z{}/users/{}/{}/{}�r/r.r-�r"r}�id_rrr
rT��
��zBandwidth.resource_urlcCrr�r�r�rrr
�
domain_url�r�zBandwidth.domain_urlcCs<tjd�|j|j|�|jddid�}d|jkrt|j��dS)Nz{}/{}/calls/{}�state�	completedrfrh)	rnrSr/r.r-r,rorrs)r"�sidrwrrr
�hangup�s��

�zBandwidth.hangupcCs
t||�Sr)�
Conference)r"�conf_idrrr
�
conference�r$zBandwidth.conference)rWr)r%r&r'�os�environrN�API_ROOTr#�propertyr6r9r;r=r?rArCrErGrIrPrVrcrSr|r~rTr�r�r�rrrr
r( sJ�









	
�

r(c@s>eZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�ZdS)�
CollectionNcCs(|||_|_|j�|j�|_||_dSr)�client�namerT�base_url�child_class)r"r�r�r�rrr
r#��
zCollection.__init__cCsd�|j|�}|�|j|�Sr*)r/r�r�r��r"r�rrrr
�__getitem__�szCollection.__getitem__cK�|jj|jfi|��Sr)r�rNr��r"r`rrr
�search��zCollection.searchcCs|j�d�|j|��dSr*)r�r|r/r�)r"r�rrr
r|��zCollection.deletecKr�r)r�rSr�r�rrr
rS�r�zCollection.postcKs|�|j|jdi|���S)Nr)r�r�rSr�rrr
�create�r�zCollection.creater)	r%r&r'r#r�r�r|rSr�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�rr�)r"r�rrrr
r#�s
zResource.__init__cCs|jSr)r�r5rrr
�id�szResource.idcC�|j�|j�Sr�r�rNrr5rrr
rN�rzResource.getcCr�)z A synonym for `Resource.get` r�r5rrr
�details�szResource.detailscKr�r)r�rSrr�rrr
rS�r�z
Resource.postcKs|jdi|��S)z A synonym for `Resource.post` Nr�rSr�rrr
�set�szResource.setN)
r%r&r'r#r�r�rNr�rSr�rrrr
r��s
r�c�eZdZ�fdd�Z�ZS)rDc�tt|��|dt�dS)NrE)�superrDr#�Message�r"r���	__class__rr
r#��zMessages.__init__�r%r&r'r#�
__classcell__rrr�r
rD��rDc@�eZdZdS)r�N�r%r&r'rrrr
r���r�cr�)rBcr�)NrC)r�rBr#r�r�r�rr
r#�r�zConferences.__init__r�rrr�r
rB�r�rBc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
r�cCs|jjd�|j�|d�S)N�
{}/members)�call_id�r�rSr/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�rNr/rr5rrr
�memberss
�zConference.memberscKs|jjd�|j�fi|��S�N�{}/audior�r�rrr
�audios

��zConference.audioN)r%r&r'r�r�r�r�rrrr
r��s
r�c�$eZdZ�fdd�Zdd�Z�ZS)r@cr�)NrA)r�r@r#�Applicationr�r�rr
r#r�zApplications.__init__cCsd�|j|�}|jj||d�S)Nr+)�incoming_message_url�r/r�r�rS)r"�application_idr��application_urlrrr
�update_incoming_message_urlsz(Applications.update_incoming_message_url)r%r&r'r#r�r�rrr�r
r@�r@c@r�)r�Nr�rrrr
r� r�r�c@�eZdZdd�Zdd�ZdS)r8cCr r�r�r�rrr
r#%r$zBridges.__init__cC�|j�d|�}t|j|�S)Nr9)r�rTrUr�rrr
r�(�zBridges.__getitem__N�r%r&r'r#r�rrrr
r8$�r8c@r�)r:cCr rr�r�rrr
r#.r$zRecordings.__init__cCr�)Nr;)r�rT�	Recordingr�rrr
r�1r�zRecordings.__getitem__Nr�rrrr
r:-r�r:cr�)r�cs@tt|��||�|��D]\}}|dkrd}t|||�q
dS)Nr�r�)r�r�r#r�setattr)r"r�rr`rr	r�rr
r#7s�zRecording.__init__cCstj|j|jjdd�}|S)z Assuming self.media is set T�r,�stream)rnrNrIr�r,)r"rwrrr
�data?s�zRecording.data)r%r&r'r#r�r�rrr�r
r�6sr�cs2eZdZ�fdd�Z	ddd�Zddd�Z�ZS)	r>cr�)N�phoneNumbers)r�r>r#�PhoneNumberr�r�rr
r#Jr�zPhoneNumbers.__init__NcCs|j||||d�}t|j|�S)N)rOr�r��fallback_number�rSr�r�)r"rOr�r�r�rrrr
�purchaseMs
�zPhoneNumbers.purchasecCs|j||||d�}t|j|�S)N)rOr��
applicationId�providerr�)r"rOr�r�r�rrrr
�
import_numberXs
�zPhoneNumbers.import_number)NNNN)r%r&r'r#r�r�r�rrr�r
r>Is

�r>c@r�)r�Nr�rrrr
r�ar�r�c@seZdZdd�Zddd�ZdS)r<cCs(|d|_|_|j�|j�|_d|_dS)N�availableNumbers)r�r�r~r�r�r�rrr
r#fr�zAvailableNumbers.__init__�localcKs"d�|j|�}|jj|fi|��Sr*�r/r�r�rN)r"rkr`rrrr
r�k�zAvailableNumbers.searchN)r�)r%r&r'r#r�rrrr
r<esr<csDeZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Z�Z	S)
rFcr�)NrG)r�rFr#�Domainr�r�rr
r#qr�zDomains.__init__c		Cs4d�|j|�}|jj|||||||d�}t|j|�S)N�{}/{}/endpoints)�	domain_idr��descriptionr��enabled�credentials)r/r�r�rS�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)NrGz{}/endpoints/{}zThe url is: {})r�r�r/rL�infor|)r"r�r�r�r�rrr
�delete_endpoint�szDomains.delete_endpoint)
r%r&r'r#r�r�r�r�r�r�rrr�r
rFps
rFcr�)rHcr�)NrI)r�rHr#�Mediasr�r�rr
r#�r�zMedia.__init__cCs(d�|j|�}tj||jjdd�}|jS)Nr+Tr�)r/r�rnrNr�r,rq)r"�
media_namerrwrrr
�	get_media�s�zMedia.get_media)r%r&r'r#r�r�rrr�r
rH�r�rHc@r�)r�Nr�rrrr
r��r�r�c@r�)r�Nr�rrrr
r��r�r�c@r�)r�Nr�rrrr
r��r�r�cs"eZdZgdf�fdd�	Z�ZS)rUTcstt|��||�dSr)r�rUr�)r"r6rRr�rr
r��r�z
Bridge.set)r%r&r'r�r�rrr�r
rU�srUc@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)r4cCr rr�r�rrr
r#�r$zCalls.__init__cCr��Nr6)r�rTr])r"r�rrrr
r��r�zCalls.__getitem__cC�"|j�d|�}|jj|dd�dS)Nr6r�r��r�rTrS�r"r�rbrrr
r��r�zCalls.hangupcC�$|j�d|�}|jj|d|d�dS)Nr6�active)r��callback_urlr�)r"r�rrbrrr
�redirect�s
�zCalls.redirectcCr�)Nr6r�r�r�r�rrr
r\�r�zCalls.updatecCr�)Nr6�transferring)r��transfer_tor�)r"r��phone_numberrbrrr
�transfer�szCalls.transfercCs|j�d|�}|j�|�Sr�)r�rTrNr�rrr
r��r�z
Calls.infoN)
r%r&r'r#r�r�r�r\r�r�rrrr
r4�sr4c@sPeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z		ddd�Z
dS)r]cOs$d�|j�}|jj|fi|��dSr��r/rr�rS�r"rur`rrrr
r��sz
Call.audiocOs*d�|j�}|jj|g|�Ri|��dS)Nz	{}/gatherr�rrrr
�gather�szCall.gathercC�|jdd�dS)N�rejectedr��r�r5rrr
�reject��zCall.rejectcCr)Nr�r�rr5rrr
�accept�rzCall.acceptcCr)Nr�r�rr5rrr
r��rzCall.hangupcCs|j|d�dS)N)r�r��r"rrrr
r��rz
Call.redirectcs&d��j�}�fdd��j�|�D�S)Nz
{}/recordingsc	s.g|]}t�jd��j|d�fi|���qS)r+r�)r�r�r/r)r�itemr5rr
�
<listcomp>�s����z#Call.recordings.<locals>.<listcomp>)r/rr�rNrrr5r
r;�s

�zCall.recordings�female�en_US�susancKs.d�|j�}|jj|f||||d�|��dS)Nr�)�sentence�gender�locale�voicer�)r"�textrrrr`rrrr
�say�s��
�zCall.sayN�rrr
)r%r&r'r�rrrr�r�r;rrrrr
r]�s	�r]cs�fdd�}|S)Ncs>�|g|�R�}|��D]\}}|r|�t|�t|��q|Sr)rr�r�str)r"rur`�eltrr	��methodrr
�wrappers�zxattrs.<locals>.wrapperr)rrrrr
�xattrssrc@s�eZdZd dd�Zdd�Zed!d	d
��Zedd��Zed"dd��Zedd��Z	edd��Z
edd��Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)#�ResponseNcCs"|dur	||_dSt�d�|_dS)Nr)�ET�Element�root�r"rrrr
r#s"zResponse.__init__cCstj|jdd�S)N�unicode)�encoding)r�tostringrr5rrr
�__str__rzResponse.__str__rrr
cCs(tjd|||d�}||_|j�|�|S)N�
SpeakSentence)rrr�rrrr�append)r"rrrrrrrr
rs�zResponse.saycC�tjddd�}|j�|�|S)N�Pause�4��length�rrrr&rrrr
�pause�
�zResponse.pause�2cCstjd|d�}|j�|�|S)Nr(r*r,)r"r+rrrr
�custom_pause#r.zResponse.custom_pausecC�$tjddd�}||_|j�|�|S�N�	PlayAudioz-4)�volumer%�r"rrrrr
�
play_audio+szResponse.play_audiocC�t�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'
        r�r,rrrr
r�2s
zResponse.conferencecCs$tjd|dd�d�}|j�|�|S)N�Redirect�5000)�
requestUrl�requestUrlTimeout)�attribr,)r"�request_urlrrrr
r�As��zResponse.redirectcCr7)N�Hangupr,rrrr
r�M�
zResponse.hangupcCr7)N�Rejectr,rrrr
rRr?zResponse.rejectcKsLtjd|d�}|j�|�|��D]\}}|r!|�t|�t|��qt|�S)N�Gather)r:)	rrrr&rr�rrrA)r"r=r`rrr	rrr
rWs��zResponse.gathercK�Ht�d�}|j�|�|��D]\}}|r|�t|�t|��qt|�S)N�Transfer�	rrrr&rr�rrrC�r"r`rrr	rrr
r�c���zResponse.transfercKrB�N�RecordrDrErrr
�recordmrFzResponse.recordrr)r/)r%r&r'r#r#rrr-r0r6r�r�r�rrr�rIrrrr
rs(





rc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)rAcCr r)rrrrr
r#zr$zGather.__init__cC�|Srrr5rrr
�	__enter__}�zGather.__enter__cC�dSrr�r"�type_�value�tbrrr
�__exit__�rLzGather.__exit__cOst|j�j|i|��Sr)rrr�r"rur`rrr
r�r�z
Gather.saycCr1r2r%r5rrr
r6��zGather.play_audioN)r%r&r'r#rKrRrr6rrrr
rAxsrAc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)rCcCs||_t|j�|_dSr)rr�resprrrr
r#�szTransfer.__init__cCrJrrr5rrr
rK�rLzTransfer.__enter__cCrMrrrNrrr
rR�rLzTransfer.__exit__cOs|jj|i|��Sr)rUrrSrrr
r�szTransfer.saycCs t�d�}|j�|�||_|S)Nr�)rrrr&r)r"rrrrr
r��s�zTransfer.phone_numbercKsDt�d�}|j�|�|��D]\}}|r|�t|�t|��q|SrG)rrrr&rr�rrrErrr
rI�s��zTransfer.recordcCr')Nr(�3r*r,rrrr
r-�s
�zTransfer.pausecCr1r2r%r5rrr
r6�rTzTransfer.play_audioN)r%r&r'r#rKrRrr�rIr-r6rrrr
rC�s
rC)0r�rg�loggingrJ�urllib.parser�xml.etree.ElementTree�etree�ElementTreerrn�
requests.authr�	getLoggerr%rLrr�	Exceptionr�objectr(r�r�rDr�rBr�r@r�r8r:r�r>r�r<rFrHr�r�r�rUr4r]rrrArCrrrr
�<module>sP
			+'m