94 lines
2.9 KiB
Python
94 lines
2.9 KiB
Python
from typing import Dict, Optional, Tuple
|
|
from twilio.http.response import Response
|
|
from twilio.rest import Client
|
|
|
|
|
|
class Domain(object):
|
|
"""
|
|
This represents at Twilio API subdomain.
|
|
|
|
Like, `api.twilio.com` or `lookups.twilio.com'.
|
|
"""
|
|
|
|
def __init__(self, twilio: Client, base_url: str):
|
|
self.twilio = twilio
|
|
self.base_url = base_url
|
|
|
|
def absolute_url(self, uri: str) -> str:
|
|
"""
|
|
Converts a relative `uri` to an absolute url.
|
|
:param string uri: The relative uri to make absolute.
|
|
:return: An absolute url (based off this domain)
|
|
"""
|
|
return "{}/{}".format(self.base_url.strip("/"), uri.strip("/"))
|
|
|
|
def request(
|
|
self,
|
|
method: str,
|
|
uri: str,
|
|
params: Optional[Dict[str, object]] = None,
|
|
data: Optional[Dict[str, object]] = None,
|
|
headers: Optional[Dict[str, str]] = None,
|
|
auth: Optional[Tuple[str, str]] = None,
|
|
timeout: Optional[float] = None,
|
|
allow_redirects: bool = False,
|
|
) -> Response:
|
|
"""
|
|
Makes an HTTP request to this domain.
|
|
:param method: The HTTP method.
|
|
:param uri: The HTTP uri.
|
|
:param params: Query parameters.
|
|
:param data: The request body.
|
|
:param headers: The HTTP headers.
|
|
:param auth: Basic auth tuple of (username, password)
|
|
:param timeout: The request timeout.
|
|
:param allow_redirects: True if the client should follow HTTP
|
|
redirects.
|
|
"""
|
|
url = self.absolute_url(uri)
|
|
return self.twilio.request(
|
|
method,
|
|
url,
|
|
params=params,
|
|
data=data,
|
|
headers=headers,
|
|
auth=auth,
|
|
timeout=timeout,
|
|
allow_redirects=allow_redirects,
|
|
)
|
|
|
|
async def request_async(
|
|
self,
|
|
method: str,
|
|
uri: str,
|
|
params: Optional[Dict[str, object]] = None,
|
|
data: Optional[Dict[str, object]] = None,
|
|
headers: Optional[Dict[str, str]] = None,
|
|
auth: Optional[Tuple[str, str]] = None,
|
|
timeout: Optional[float] = None,
|
|
allow_redirects: bool = False,
|
|
) -> Response:
|
|
"""
|
|
Makes an asynchronous HTTP request to this domain.
|
|
:param method: The HTTP method.
|
|
:param uri: The HTTP uri.
|
|
:param params: Query parameters.
|
|
:param data: The request body.
|
|
:param headers: The HTTP headers.
|
|
:param auth: Basic auth tuple of (username, password)
|
|
:param timeout: The request timeout.
|
|
:param allow_redirects: True if the client should follow HTTP
|
|
redirects.
|
|
"""
|
|
url = self.absolute_url(uri)
|
|
return await self.twilio.request_async(
|
|
method,
|
|
url,
|
|
params=params,
|
|
data=data,
|
|
headers=headers,
|
|
auth=auth,
|
|
timeout=timeout,
|
|
allow_redirects=allow_redirects,
|
|
)
|