This is the inital adding of code that I have already worked out. Inbound reads out messages to a log file. I also made it work with emoji'spull/1/head
parent
465a830d71
commit
cd623f0730
@ -0,0 +1,4 @@ |
||||
|
||||
creds\.sh |
||||
|
||||
*.komodoproject |
@ -0,0 +1,10 @@ |
||||
__all__ = [ |
||||
'api_helper', |
||||
'configuration', |
||||
'models', |
||||
'controllers', |
||||
'http', |
||||
'exceptions', |
||||
'decorators', |
||||
'flowroute_numbers_and_messaging_client', |
||||
] |
Binary file not shown.
@ -0,0 +1,405 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.api_helper |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
|
||||
import re |
||||
import sys |
||||
import datetime |
||||
import dateutil.parser |
||||
import calendar |
||||
import email.utils as eut |
||||
from time import mktime |
||||
|
||||
import jsonpickle |
||||
import dateutil.parser |
||||
from requests.utils import quote |
||||
|
||||
class APIHelper(object): |
||||
|
||||
"""A Helper Class for various functions associated with API Calls. |
||||
|
||||
This class contains static methods for operations that need to be |
||||
performed during API requests. All of the methods inside this class are |
||||
static methods, there is no need to ever initialise an instance of this |
||||
class. |
||||
|
||||
""" |
||||
|
||||
@staticmethod |
||||
def merge_dicts(dict1, dict2): |
||||
"""Merges two dictionaries into one as a shallow copy. |
||||
|
||||
Args: |
||||
dict1 (dict): The first dictionary. |
||||
dict2 (dict): The second dictionary. |
||||
|
||||
Returns: |
||||
dict: A dictionary containing key value pairs |
||||
from both the argument dictionaries. In the case |
||||
of a key conflict, values from dict2 are used |
||||
and those from dict1 are lost. |
||||
|
||||
""" |
||||
temp = dict1.copy() |
||||
temp.update(dict2) |
||||
return temp |
||||
|
||||
@staticmethod |
||||
def json_serialize(obj): |
||||
"""JSON Serialization of a given object. |
||||
|
||||
Args: |
||||
obj (object): The object to serialise. |
||||
|
||||
Returns: |
||||
str: The JSON serialized string of the object. |
||||
|
||||
""" |
||||
if obj is None: |
||||
return None |
||||
|
||||
# Resolve any Names if it's one of our objects that needs to have this called on |
||||
if isinstance(obj, list): |
||||
value = list() |
||||
for item in obj: |
||||
if hasattr(item, "_names"): |
||||
value.append(APIHelper.to_dictionary(item)) |
||||
else: |
||||
value.append(item) |
||||
obj = value |
||||
else: |
||||
if hasattr(obj, "_names"): |
||||
obj = APIHelper.to_dictionary(obj) |
||||
|
||||
return jsonpickle.encode(obj, False) |
||||
|
||||
@staticmethod |
||||
def json_deserialize(json, unboxing_function=None): |
||||
"""JSON Deerialization of a given string. |
||||
|
||||
Args: |
||||
json (str): The JSON serialized string to deserialize. |
||||
|
||||
Returns: |
||||
dict: A dictionary representing the data contained in the |
||||
JSON serialized string. |
||||
|
||||
""" |
||||
if json is None: |
||||
return None |
||||
|
||||
try: |
||||
decoded = jsonpickle.decode(json) |
||||
except: |
||||
return json |
||||
|
||||
if unboxing_function is None: |
||||
return decoded |
||||
elif isinstance(decoded, list): |
||||
return [unboxing_function(element) for element in decoded] |
||||
else: |
||||
return unboxing_function(decoded) |
||||
|
||||
@staticmethod |
||||
def serialize_array(key, array, formatting="indexed"): |
||||
"""Converts an array parameter to a list of key value tuples. |
||||
|
||||
Args: |
||||
key (str): The name of the parameter. |
||||
array (list): The value of the parameter. |
||||
formatting (str): The type of key formatting expected. |
||||
|
||||
Returns: |
||||
list: A list with key value tuples for the array elements. |
||||
|
||||
""" |
||||
tuples = [] |
||||
|
||||
if sys.version_info[0] < 3: |
||||
serializable_types = (str, int, long, float, bool, datetime.date, APIHelper.CustomDate) |
||||
else: |
||||
serializable_types = (str, int, float, bool, datetime.date, APIHelper.CustomDate) |
||||
|
||||
if isinstance(array[0], serializable_types): |
||||
if formatting is "unindexed": |
||||
tuples += [("{0}[]".format(key), element) for element in array] |
||||
elif formatting is "indexed": |
||||
tuples += [("{0}[{1}]".format(key, index), element) for index, element in enumerate(array)] |
||||
elif formatting is "plain": |
||||
tuples += [(key, element) for element in array] |
||||
else: |
||||
raise ValueError("Invalid format provided.") |
||||
else: |
||||
tuples += [("{0}[{1}]".format(key, index), element) for index, element in enumerate(array)] |
||||
|
||||
return tuples |
||||
|
||||
@staticmethod |
||||
def append_url_with_template_parameters(url, |
||||
parameters): |
||||
"""Replaces template parameters in the given url. |
||||
|
||||
Args: |
||||
url (str): The query url string to replace the template parameters. |
||||
parameters (dict): The parameters to replace in the url. |
||||
|
||||
Returns: |
||||
str: URL with replaced parameters. |
||||
|
||||
""" |
||||
# Parameter validation |
||||
if url is None: |
||||
raise ValueError("URL is None.") |
||||
if parameters is None: |
||||
return url |
||||
|
||||
# Iterate and replace parameters |
||||
for key in parameters: |
||||
element = parameters[key] |
||||
replace_value = "" |
||||
|
||||
# Load parameter value |
||||
if element is None: |
||||
replace_value = "" |
||||
elif isinstance(element, list): |
||||
replace_value = "/".join(quote(str(x), safe='') for x in element) |
||||
else: |
||||
replace_value = quote(str(element), safe='') |
||||
|
||||
url = url.replace('{{{0}}}'.format(key), str(replace_value)) |
||||
|
||||
return url |
||||
|
||||
@staticmethod |
||||
def append_url_with_query_parameters(url, |
||||
parameters, |
||||
array_serialization="indexed"): |
||||
"""Adds query parameters to a URL. |
||||
|
||||
Args: |
||||
url (str): The URL string. |
||||
parameters (dict): The query parameters to add to the URL. |
||||
array_serialization (str): The format of array parameter serialization. |
||||
|
||||
Returns: |
||||
str: URL with added query parameters. |
||||
|
||||
""" |
||||
# Parameter validation |
||||
if url is None: |
||||
raise ValueError("URL is None.") |
||||
if parameters is None: |
||||
return url |
||||
|
||||
for key, value in parameters.items(): |
||||
seperator = '&' if '?' in url else '?' |
||||
if value is not None: |
||||
if isinstance(value, list): |
||||
value = [element for element in value if element] |
||||
if array_serialization is "csv": |
||||
url += "{0}{1}={2}".format(seperator, key, |
||||
",".join(quote(str(x), safe='') for x in value)) |
||||
elif array_serialization is "psv": |
||||
url += "{0}{1}={2}".format(seperator, key, |
||||
"|".join(quote(str(x), safe='') for x in value)) |
||||
elif array_serialization is "tsv": |
||||
url += "{0}{1}={2}".format(seperator, key, |
||||
"\t".join(quote(str(x), safe='') for x in value)) |
||||
else: |
||||
url += "{0}{1}".format(seperator, |
||||
"&".join(("{0}={1}".format(k, quote(str(v), safe=''))) |
||||
for k, v in APIHelper.serialize_array(key, value, array_serialization))) |
||||
else: |
||||
url += "{0}{1}={2}".format(seperator, key, quote(str(value), safe='')) |
||||
|
||||
return url |
||||
|
||||
@staticmethod |
||||
def clean_url(url): |
||||
"""Validates and processes the given query Url to clean empty slashes. |
||||
|
||||
Args: |
||||
url (str): The given query Url to process. |
||||
|
||||
Returns: |
||||
str: Clean Url as string. |
||||
|
||||
""" |
||||
# Ensure that the urls are absolute |
||||
regex = "^https?://[^/]+" |
||||
match = re.match(regex, url) |
||||
if match is None: |
||||
raise ValueError('Invalid Url format.') |
||||
|
||||
protocol = match.group(0) |
||||
index = url.find('?') |
||||
query_url = url[len(protocol): index if index != -1 else None] |
||||
query_url = re.sub("//+", "/", query_url) |
||||
parameters = url[index:] if index != -1 else "" |
||||
|
||||
return protocol + query_url + parameters |
||||
|
||||
@staticmethod |
||||
def form_encode_parameters(form_parameters, |
||||
array_serialization="indexed"): |
||||
"""Form encodes a dictionary of form parameters |
||||
|
||||
Args: |
||||
form_parameters (dictionary): The given dictionary which has |
||||
atleast one model to form encode. |
||||
array_serialization (str): The format of array parameter serialization. |
||||
|
||||
Returns: |
||||
dict: A dictionary of form encoded properties of the model. |
||||
|
||||
""" |
||||
encoded = [] |
||||
|
||||
for key, value in form_parameters.items(): |
||||
encoded += APIHelper.form_encode(value, key, array_serialization) |
||||
|
||||
return encoded |
||||
|
||||
@staticmethod |
||||
def form_encode(obj, |
||||
instance_name, |
||||
array_serialization="indexed"): |
||||
"""Encodes a model in a form-encoded manner such as person[Name] |
||||
|
||||
Args: |
||||
obj (object): The given Object to form encode. |
||||
instance_name (string): The base name to appear before each entry |
||||
for this object. |
||||
array_serialization (string): The format of array parameter serialization. |
||||
|
||||
Returns: |
||||
dict: A dictionary of form encoded properties of the model. |
||||
|
||||
""" |
||||
retval = [] |
||||
|
||||
# If we received an object, resolve it's field names. |
||||
if hasattr(obj, "_names"): |
||||
obj = APIHelper.to_dictionary(obj) |
||||
|
||||
if obj is None: |
||||
return [] |
||||
elif isinstance(obj, list): |
||||
for element in APIHelper.serialize_array(instance_name, obj, array_serialization): |
||||
retval += APIHelper.form_encode(element[1], element[0], array_serialization) |
||||
elif isinstance(obj, dict): |
||||
for item in obj: |
||||
retval += APIHelper.form_encode(obj[item], instance_name + "[" + item + "]", array_serialization) |
||||
else: |
||||
retval.append((instance_name, obj)) |
||||
|
||||
return retval |
||||
|
||||
@staticmethod |
||||
def to_dictionary(obj): |
||||
"""Creates a dictionary representation of a class instance. The |
||||
keys are taken from the API description and may differ from language |
||||
specific variable names of properties. |
||||
|
||||
Args: |
||||
obj: The object to be converted into a dictionary. |
||||
|
||||
Returns: |
||||
dictionary: A dictionary form of the model with properties in |
||||
their API formats. |
||||
|
||||
""" |
||||
dictionary = dict() |
||||
|
||||
# Loop through all properties in this model |
||||
for name in obj._names: |
||||
value = getattr(obj, name) |
||||
if isinstance(value, list): |
||||
# Loop through each item |
||||
dictionary[obj._names[name]] = list() |
||||
for item in value: |
||||
dictionary[obj._names[name]].append(APIHelper.to_dictionary(item) if hasattr(item, "_names") else item) |
||||
elif isinstance(value, dict): |
||||
# Loop through each item |
||||
dictionary[obj._names[name]] = dict() |
||||
for key in value: |
||||
dictionary[obj._names[name]][key] = APIHelper.to_dictionary(value[key]) if hasattr(value[key], "_names") else value[key] |
||||
else: |
||||
dictionary[obj._names[name]] = APIHelper.to_dictionary(value) if hasattr(value, "_names") else value |
||||
|
||||
# Return the result |
||||
return dictionary |
||||
|
||||
class CustomDate(object): |
||||
|
||||
""" A base class for wrapper classes of datetime. |
||||
|
||||
This class contains methods which help in |
||||
appropriate serialization of datetime objects. |
||||
|
||||
""" |
||||
|
||||
def __init__(self, dtime, value=None): |
||||
self.datetime = dtime |
||||
if not value: |
||||
self.value = self.from_datetime(dtime) |
||||
else: |
||||
self.value = value |
||||
|
||||
def __str__(self): |
||||
return self.value |
||||
|
||||
def __getstate__(self): |
||||
return self.value |
||||
|
||||
def __setstate__(self, state): |
||||
pass |
||||
|
||||
class HttpDateTime(CustomDate): |
||||
|
||||
""" A wrapper class for datetime to support HTTP date format.""" |
||||
|
||||
@classmethod |
||||
def from_datetime(cls, date_time): |
||||
return eut.formatdate(timeval=mktime(date_time.timetuple()), |
||||
localtime=False, usegmt=True) |
||||
|
||||
@classmethod |
||||
def from_value(cls, value): |
||||
dtime = datetime.datetime.fromtimestamp(eut.mktime_tz(eut.parsedate_tz(value))) |
||||
return cls(dtime, value) |
||||
|
||||
class UnixDateTime(CustomDate): |
||||
|
||||
""" A wrapper class for datetime to support Unix date format.""" |
||||
|
||||
def __str__(self): |
||||
return str(self.value) |
||||
|
||||
@classmethod |
||||
def from_datetime(cls, date_time): |
||||
return calendar.timegm(date_time.utctimetuple()) |
||||
|
||||
@classmethod |
||||
def from_value(cls, value): |
||||
dtime = datetime.datetime.utcfromtimestamp(float(value)) |
||||
return cls(dtime, float(value)) |
||||
|
||||
class RFC3339DateTime(CustomDate): |
||||
|
||||
""" A wrapper class for datetime to support Rfc 3339 format.""" |
||||
|
||||
@classmethod |
||||
def from_datetime(cls, date_time): |
||||
d = dateutil.parser.parse(date_time).isoformat() |
||||
return d |
||||
|
||||
|
||||
@classmethod |
||||
def from_value(cls, value): |
||||
dtime = dateutil.parser.parse(value) |
||||
return cls(dtime, value) |
Binary file not shown.
@ -0,0 +1,34 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.configuration |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
from .api_helper import APIHelper |
||||
|
||||
|
||||
class Configuration(object): |
||||
|
||||
"""A class used for configuring the SDK by a user. |
||||
|
||||
This class need not be instantiated and all properties and methods |
||||
are accessible without instance creation. |
||||
|
||||
""" |
||||
|
||||
# Set the array parameter serialization method |
||||
# (allowed: indexed, unindexed, plain, csv, tsv, psv) |
||||
array_serialization = "indexed" |
||||
|
||||
# The base Uri for API calls |
||||
base_uri = 'https://api.flowroute.com' |
||||
|
||||
# The username to use with basic authentication |
||||
# TODO: Set an appropriate value |
||||
basic_auth_user_name = "YOUR API KEY" |
||||
|
||||
# The password to use with basic authentication |
||||
# TODO: Set an appropriate value |
||||
basic_auth_password = "YOUR SECRET KEY" |
||||
|
Binary file not shown.
@ -0,0 +1,6 @@ |
||||
__all__ = [ |
||||
'base_controller', |
||||
'numbers_controller', |
||||
'routes_controller', |
||||
'messages_controller', |
||||
] |
Binary file not shown.
@ -0,0 +1,124 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessagingcontrollers.base_controller |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 |
||||
( https://apimatic.io ). |
||||
""" |
||||
|
||||
from ..api_helper import APIHelper |
||||
from ..http.http_context import HttpContext |
||||
from ..http.requests_client import RequestsClient |
||||
from ..exceptions.error_exception import ErrorException |
||||
from ..exceptions.api_exception import APIException |
||||
from ..http.auth.basic_auth import BasicAuth |
||||
|
||||
|
||||
class BaseController(object): |
||||
|
||||
"""All controllers inherit from this base class. |
||||
|
||||
Attributes: |
||||
http_client (HttpClient): The HttpClient which a specific controller |
||||
instance will use. By default all the controller objects share |
||||
the same HttpClient. A user can use his own custom HttpClient |
||||
as well. |
||||
http_call_back (HttpCallBack): An object which holds call back |
||||
methods to be called before and after the execution of an |
||||
HttpRequest. |
||||
""" |
||||
|
||||
http_client = RequestsClient() |
||||
|
||||
http_call_back = None |
||||
|
||||
global_headers = { |
||||
'user-agent': 'Flowroute SDK v3.0' |
||||
} |
||||
|
||||
def __init__(self, client=None, call_back=None): |
||||
if client is not None: |
||||
self.http_client = client |
||||
if call_back is not None: |
||||
self.http_call_back = call_back |
||||
|
||||
@staticmethod |
||||
def validate_parameters(**kwargs): |
||||
"""Validates required parameters of an endpoint. |
||||
|
||||
Args: |
||||
kwargs (dict): A dictionary of the required parameters. |
||||
|
||||
""" |
||||
for name, value in kwargs.items(): |
||||
if value is None: |
||||
raise ValueError("Required parameter {} cannot be None.". |
||||
format(name)) |
||||
|
||||
def execute_request(self, request, binary=False): |
||||
"""Executes an HttpRequest. |
||||
|
||||
Args: |
||||
request (HttpRequest): The HttpRequest to execute. |
||||
binary (bool): A flag which should be set to True if |
||||
a binary response is expected. |
||||
|
||||
Returns: |
||||
HttpContext: The HttpContext of the request. It contains, |
||||
both, the request itself and the HttpResponse object. |
||||
|
||||
""" |
||||
# Invoke the on before request HttpCallBack if specified |
||||
if self.http_call_back is not None: |
||||
self.http_call_back.on_before_request(request) |
||||
|
||||
# Add global headers to request |
||||
request.headers = APIHelper.merge_dicts(self.global_headers, |
||||
request.headers) |
||||
|
||||
# Invoke the API call to fetch the response. |
||||
func = self.http_client.execute_as_binary if binary else \ |
||||
self.http_client.execute_as_string |
||||
response = func(request) |
||||
context = HttpContext(request, response) |
||||
|
||||
# Invoke the on after response HttpCallBack if specified |
||||
if self.http_call_back is not None: |
||||
self.http_call_back.on_after_response(context) |
||||
|
||||
return context |
||||
|
||||
@staticmethod |
||||
def validate_response(context): |
||||
"""Validates an HTTP response by checking for global errors. |
||||
|
||||
Args: |
||||
context (HttpContext): The HttpContext of the API call. |
||||
|
||||
""" |
||||
if (context.response.status_code < 200) or \ |
||||
(context.response.status_code > 208): |
||||
raise APIException('HTTP response not OK.', context) |
||||
|
||||
# Process request and status code and response text |
||||
def handle_request_and_response(self, request): |
||||
BasicAuth.apply(request) |
||||
context = self.execute_request(request) |
||||
|
||||
# Endpoint and global error handling using HTTP status codes. |
||||
if context.response.status_code == 401: |
||||
raise ErrorException('Unauthorized – There was an issue with your ' |
||||
'API credentials.', context) |
||||
elif context.response.status_code == 403: |
||||
raise ErrorException('Forbidden – You don\'t have permission to ' |
||||
'access this resource.', context) |
||||
elif context.response.status_code == 404: |
||||
raise ErrorException('The specified resource was not found', |
||||
context) |
||||
elif context.response.status_code == 422: |
||||
raise ErrorException('Unprocessable Entity - You tried to enter an' |
||||
' incorrect value.', context) |
||||
self.validate_response(context) |
||||
|
||||
return APIHelper.json_deserialize(context.response.raw_body) |
Binary file not shown.
@ -0,0 +1,203 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.controllers.cnams_controller |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 (https://apimatic.io). |
||||
""" |
||||
|
||||
from .base_controller import BaseController |
||||
from ..api_helper import APIHelper |
||||
from ..configuration import Configuration |
||||
from .numbers_controller import NumbersController |
||||
|
||||
|
||||
class CNAMsController(BaseController): |
||||
|
||||
"""A Controller to access Endpoints in the |
||||
flowroutenumbersandmessaging API.""" |
||||
|
||||
def list_cnams(self, |
||||
limit=None, |
||||
offset=None, |
||||
is_approved=None): |
||||
"""Does a GET request to /v2/cnams. |
||||
|
||||
Returns a list of all cnams owned by the user. |
||||
|
||||
Args: |
||||
limit (int, optional): Limits the number of items to retrieve. A |
||||
maximum of 200 items can be retrieved. |
||||
offset (int, optional): Offsets the list of phone numbers by your |
||||
specified value. For example, if you have 4 phone numbers and |
||||
you entered 1 as your offset value, then only 3 of your phone |
||||
numbers will be displayed in the response. |
||||
is_approved if set to true or false, will only show matching records |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A JSON object of E911 Records |
||||
that satisfy your search criteria. |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/cnams' |
||||
_query_parameters = { |
||||
'limit': limit, |
||||
'offset': offset |
||||
} |
||||
if is_approved is not None: |
||||
_query_parameters['is_approved'] = is_approved |
||||
|
||||
_query_builder = APIHelper.append_url_with_query_parameters( |
||||
_query_builder, |
||||
_query_parameters, |
||||
Configuration.array_serialization) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.get(_query_url) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def get_cnam(self, cnam_id): |
||||
"""Does a GET request to /v2/cnams/<cnam_id>. |
||||
|
||||
Returns a record detail for the CNAM Record Id specified |
||||
|
||||
Args: |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A JSON object of of an E911 record |
||||
that satisfy your search criteria. |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/cnams/{}'.format(cnam_id) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.get(_query_url) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def create_cnam_record(self, value): |
||||
"""Does a POST request to /v2/cnams. |
||||
|
||||
Searches for CNAM Records that match the criteria |
||||
|
||||
Args: |
||||
value (string, required): The text string for the new CNAM record |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A JSON object of of a CNAM record |
||||
with the new data |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
body = { |
||||
"value": value |
||||
} |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/cnams' |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.post(_query_url, headers=_headers, |
||||
parameters=body) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def associate_cnam(self, cnam_id, phone_number): |
||||
# first, verify the number belongs to the user |
||||
did = NumbersController().list_account_phone_numbers( |
||||
contains=phone_number) |
||||
|
||||
if did is None: |
||||
error_string = "Error, this phone number does not belong to you." |
||||
return error_string |
||||
|
||||
did = did['data'][0]['id'] |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/{}/relationships/cnam/{}'.format(did, |
||||
cnam_id) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.patch(_query_url, headers=_headers) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def unassociate_cnam(self, phone_number): |
||||
# first, verify the number belongs to the user |
||||
did = NumbersController().list_account_phone_numbers( |
||||
contains=phone_number) |
||||
|
||||
if did is None: |
||||
error_string = "Error, this phone number does not belong to you." |
||||
return error_string |
||||
|
||||
did = did['data'][0]['id'] |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/{}/relationships/cnam'.format(did) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.delete(_query_url, headers=_headers) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def remove_cnam(self, cnam_id): |
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/cnams/{}'.format(cnam_id) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.delete(_query_url, headers=_headers) |
||||
|
||||
return self.handle_request_and_response(_request) |
Binary file not shown.
@ -0,0 +1,490 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.controllers.e911s_controller |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 (https://apimatic.io) |
||||
""" |
||||
|
||||
from .base_controller import BaseController |
||||
from ..api_helper import APIHelper |
||||
from ..configuration import Configuration |
||||
|
||||
|
||||
class E911sController(BaseController): |
||||
|
||||
"""A Controller to access Endpoints in the |
||||
flowroutenumbersandmessaging API.""" |
||||
|
||||
def list_e911s(self, |
||||
limit=None, |
||||
offset=None, |
||||
state=None): |
||||
"""Does a GET request to /v2/e911s. |
||||
|
||||
Returns a list of all Central Office (exchange) codes containing |
||||
purchasable phone numbers. |
||||
|
||||
Args: |
||||
limit (int, optional): Limits the number of items to retrieve. A |
||||
maximum of 200 items can be retrieved. |
||||
offset (int, optional): Offsets the list of phone numbers by your |
||||
specified value. For example, if you have 4 phone numbers and |
||||
you entered 1 as your offset value, then only 3 of your phone |
||||
numbers will be displayed in the response. |
||||
state (2 char, optional): Restricts the results to the specified |
||||
state. |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A JSON object of E911 Records |
||||
that satisfy your search criteria. |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/e911s' |
||||
_query_parameters = { |
||||
'limit': limit, |
||||
'offset': offset, |
||||
'state': state |
||||
} |
||||
_query_builder = APIHelper.append_url_with_query_parameters( |
||||
_query_builder, _query_parameters, |
||||
Configuration.array_serialization) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.get(_query_url) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def get_e911(self, e911_id): |
||||
"""Does a GET request to /v2/e911s/<e911_id>. |
||||
|
||||
Returns a record detail for the E911 Record Id specified |
||||
|
||||
Args: |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A JSON object of of an E911 record |
||||
that satisfy your search criteria. |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/e911s/{}'.format(e911_id) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.get(_query_url) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def validate_address(self, |
||||
label, |
||||
first_name, |
||||
last_name, |
||||
street_name, |
||||
street_number, |
||||
city, |
||||
state, |
||||
country, |
||||
zipcode, |
||||
address_type=None, |
||||
address_type_number=None): |
||||
"""Does a POST request to /v2/e911s/validate. |
||||
|
||||
Returns a 204 No Content on success, or a 404 with error data |
||||
|
||||
Args: |
||||
label (string): the alias or friendly name of your entry |
||||
first_name (string): |
||||
last_name (string): |
||||
street_name (string): |
||||
street_number (string): |
||||
city (string): |
||||
state (2 character string): |
||||
country (string USA or Canada): |
||||
zipcode (string postal code) |
||||
address_type (string address type) |
||||
address_type_number (string when address_type used, required) |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A 204 - No Content or a |
||||
JSON object ith error data |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
body = { |
||||
'data': { |
||||
'type': 'e911', |
||||
'attributes': { |
||||
'label': label, |
||||
'first_name': first_name, |
||||
'last_name': last_name, |
||||
'street_name': street_name, |
||||
'street_number': street_number, |
||||
'city': city, |
||||
'state': state, |
||||
'country': country, |
||||
'zip': zipcode, |
||||
} |
||||
} |
||||
} |
||||
|
||||
if address_type and address_type_number: |
||||
body['data']['attributes']['address_type'] = address_type |
||||
body['data']['attributes']['address_type_number'] = address_type_number |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/e911s/validate' |
||||
|
||||
# Return appropriate type |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/vnd.api+json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.post(_query_url, headers=_headers, |
||||
parameters=APIHelper.json_serialize( |
||||
body)) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def create_address(self, |
||||
label, |
||||
first_name, |
||||
last_name, |
||||
street_name, |
||||
street_number, |
||||
city, |
||||
state, |
||||
country, |
||||
zipcode, |
||||
address_type=None, |
||||
address_type_number=None): |
||||
"""Does a POST request to /v2/e911s. |
||||
|
||||
Creates an address record that can then be associated |
||||
with 1 or more DIDs |
||||
|
||||
Args: |
||||
label (string): the alias or friendly name of your entry |
||||
first_name (string): |
||||
last_name (string): |
||||
street_name (string): |
||||
street_number (string): |
||||
city (string): |
||||
state (2 character string): |
||||
country (string USA or Canada): |
||||
zipcode (string postal code) |
||||
address_type (string address type) |
||||
address_type_number (string required if address_type specified) |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A JSON object containing the new |
||||
record information. |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
body = { |
||||
'data': { |
||||
'type': 'e911', |
||||
'attributes': { |
||||
'label': label, |
||||
'first_name': first_name, |
||||
'last_name': last_name, |
||||
'street_name': street_name, |
||||
'street_number': street_number, |
||||
'city': city, |
||||
'state': state, |
||||
'country': country, |
||||
'zip': zipcode, |
||||
} |
||||
} |
||||
} |
||||
|
||||
if address_type and address_type_number: |
||||
body['data']['attributes']['address_type'] = address_type |
||||
body['data']['attributes']['address_type_number'] = address_type_number |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/e911s' |
||||
|
||||
# Return appropriate type |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/vnd.api+json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.post(_query_url, headers=_headers, |
||||
parameters=APIHelper.json_serialize( |
||||
body)) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def update_address(self, |
||||
e911_id, |
||||
label=None, |
||||
first_name=None, |
||||
last_name=None, |
||||
street_name=None, |
||||
street_number=None, |
||||
city=None, |
||||
state=None, |
||||
country=None, |
||||
zipcode=None, |
||||
address_type=None, |
||||
address_type_number=None): |
||||
|
||||
"""Does a PATCH request to /v2/e911s/<e911_id>. |
||||
|
||||
Updates an existing address record and any associations it may have |
||||
|
||||
Args: |
||||
e911_id (integer, required): the id of the e911 record to update |
||||
label (string, optional): the alias or friendly name of your entry |
||||
first_name (string, optional): |
||||
last_name (string, optional): |
||||
street_name (string, optional): |
||||
street_number (string, optional): |
||||
city (string, optional): |
||||
state (2 character string, optional): |
||||
country (string USA or Canada, optional): |
||||
zipcode (string postal code, optional) |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A JSON object containing the |
||||
new record information. |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
cur_record = self.get_e911(e911_id) |
||||
record_data = cur_record |
||||
|
||||
# Only update the fields specified |
||||
if label is not None: |
||||
record_data['data']['attributes']['label'] = label |
||||
if first_name is not None: |
||||
record_data['data']['attributes']['first_name'] = first_name |
||||
if last_name is not None: |
||||
record_data['data']['attributes']['last_name'] = last_name |
||||
if street_name is not None: |
||||
record_data['data']['attributes']['street_name'] = street_name |
||||
if street_number is not None: |
||||
record_data['data']['attributes']['street_number'] = \ |
||||
str(street_number) |
||||
if city is not None: |
||||
record_data['data']['attributes']['city'] = city |
||||
if state is not None: |
||||
record_data['data']['attributes']['state'] = state |
||||
if country is not None: |
||||
record_data['data']['attributes']['country'] = country |
||||
if zipcode is not None: |
||||
record_data['data']['attributes']['zip'] = str(zipcode) |
||||
record_data['data']['attributes']['zip_code'] = str(zipcode) |
||||
|
||||
record_data['data']['attributes']['address_type'] = address_type |
||||
record_data['data']['attributes']['address_type_number'] = \ |
||||
address_type_number |
||||
|
||||
# Fix address_type if not used |
||||
if 'address_type' in record_data['data']['attributes'] and \ |
||||
record_data['data']['attributes']['address_type'] == u'': |
||||
record_data['data']['attributes'].pop('address_type', None) |
||||
record_data['data']['attributes'].pop('address_type_number', None) |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/e911s/{}'.format(e911_id) |
||||
|
||||
# Return appropriate type |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/vnd.api+json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.patch(_query_url, headers=_headers, |
||||
parameters=APIHelper.json_serialize( |
||||
record_data)) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def delete_address(self, e911_id): |
||||
"""Performs a DELETE request to /v2/e911s/<e911_id>. |
||||
|
||||
Removes the existing address record and any associations it may have |
||||
|
||||
Args: |
||||
e911_id (integer, required): the id of the e911 record to update |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A 204 - No Content or a |
||||
JSON object ith error data |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/e911s/{}'.format(e911_id) |
||||
|
||||
# Return appropriate type |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/vnd.api+json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.delete(_query_url, headers=_headers) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def associate(self, e911_id, did): |
||||
"""Does a PATCH request to /v2/numbers/<did>/relationships/e911s/<e911_id>. |
||||
|
||||
Associates the specified e911 record with the specified did |
||||
|
||||
Args: |
||||
e911_id (integer, required): the id of the e911 record to update |
||||
did (string, required): the phone number to associate with |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A 204 - No Content or a |
||||
JSON object ith error data |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/{}/relationships/e911s/{}'.format(did, |
||||
e911_id) |
||||
|
||||
# Return appropriate type |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/vnd.api+json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.patch(_query_url, headers=_headers) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def disconnect(self, did): |
||||
"""Does a DELETE request to /v2/numbers/<did>/relationships/e911s. |
||||
|
||||
Un-Associates the specified e911 record with the specified did |
||||
|
||||
Args: |
||||
did (string, required): the phone number to associate with |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A 204 - No Content or a |
||||
JSON object ith error data |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/{}/relationships/e911s'.format(did) |
||||
|
||||
# Return appropriate type |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/vnd.api+json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.delete(_query_url, headers=_headers) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def list_dids_for_e911(self, e911_id): |
||||
"""Does a GET request to /v2/e911s/<e911_id>/relationships/numbers |
||||
|
||||
Lists all Did records associated with the specified E911 record |
||||
|
||||
Args: |
||||
e911_id (integer, required): the id of the e911 record to query |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A JSON Object list with the associated |
||||
DID records |
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/e911s/{}/relationships/numbers'.format(e911_id) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.get(_query_url) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
Binary file not shown.
@ -0,0 +1,345 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.controllers.messages_controller |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ). |
||||
""" |
||||
|
||||
from .base_controller import BaseController |
||||
from ..api_helper import APIHelper |
||||
from ..configuration import Configuration |
||||
from ..models.mdr_2 import MDR2 |
||||
import json |
||||
|
||||
|
||||
class MessagesController(BaseController): |
||||
|
||||
"""A Controller to access Endpoints in the |
||||
flowroutenumbersandmessaging API.""" |
||||
|
||||
def look_up_a_set_of_messages(self, |
||||
start_date, |
||||
end_date=None, |
||||
limit=None, |
||||
offset=None): |
||||
"""Does a GET request to /v2.1/messages. |
||||
|
||||
Retrieves a list of Message Detail Records (MDRs) within a specified |
||||
date range. Date and time is based on Coordinated Universal Time |
||||
(UTC). |
||||
|
||||
Args: |
||||
start_date (datetime): The beginning date and time, in UTC, on |
||||
which to perform an MDR search. The DateTime can be formatted |
||||
as YYYY-MM-DDor YYYY-MM-DDTHH:mm:ss.SSZ. |
||||
end_date (datetime, optional): The ending date and time, in UTC, |
||||
on which to perform an MDR search. The DateTime can be |
||||
formatted as YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss.SSZ. |
||||
limit (int, optional): The number of MDRs to retrieve at one time. |
||||
You can set as high of a number as you want, but the number |
||||
cannot be negative and must be greater than 0 (zero). |
||||
offset (int, optional): The number of MDRs to skip when performing |
||||
a query. The number must be 0 (zero) or greater, but cannot be |
||||
negative. |
||||
|
||||
Returns: |
||||
mixed: Response from the API. OK |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
parsed_end_date = None |
||||
|
||||
if end_date is not None: |
||||
parsed_end_date = APIHelper.RFC3339DateTime(end_date) |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2.1/messages' |
||||
_query_parameters = { |
||||
'start_date': APIHelper.RFC3339DateTime(start_date), |
||||
'end_date': parsed_end_date, |
||||
'limit': limit, |
||||
'offset': offset |
||||
} |
||||
_query_builder = APIHelper.append_url_with_query_parameters( |
||||
_query_builder, |
||||
_query_parameters, |
||||
Configuration.array_serialization) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.get(_query_url, headers=_headers) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def look_up_a_message_detail_record(self, |
||||
id): |
||||
"""Does a GET request to /v2.1/messages/{id}. |
||||
|
||||
Searches for a specific message record ID and returns a Message Detail |
||||
Record (in MDR2 format). |
||||
|
||||
Args: |
||||
id (string): The unique message detail record identifier (MDR ID) |
||||
of any message. When entering the MDR ID, the number should |
||||
include the mdr2- preface. |
||||
|
||||
Returns: |
||||
MDR2: Response from the API. OK |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2.1/messages/{id}' |
||||
_query_builder = APIHelper.append_url_with_template_parameters( |
||||
_query_builder, { |
||||
'id': id |
||||
}) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.get(_query_url, headers=_headers) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def send_a_message(self, body): |
||||
"""Does a POST request to /v2.1/messages. |
||||
|
||||
Sends an SMS or MMS from a Flowroute long code or toll-free phone |
||||
number to another valid phone number. |
||||
|
||||
Args: |
||||
body (Message): The SMS or MMS message to send. |
||||
|
||||
Returns: |
||||
mixed: Response from the API. ACCEPTED |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2.1/messages' |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/vnd.api+json', |
||||
'content-type': 'application/vnd.api+json; charset=utf-8' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.post(_query_url, |
||||
headers=_headers, |
||||
parameters=APIHelper.json_serialize(json.loads(body))) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def set_account_level_sms_callback(self, url): |
||||
"""Does a PUT request to /v2.1/messages/sms_callback. |
||||
|
||||
Sets the callback url for all sms messages. |
||||
|
||||
Args: |
||||
url (string): The callback url to be hit. |
||||
|
||||
Returns: |
||||
mixed: Response from the API. ACCEPTED |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2.1/messages/sms_callback' |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/vnd.api+json', |
||||
'content-type': 'application/vnd.api+json; charset=utf-8' |
||||
} |
||||
|
||||
body = { |
||||
'data': { |
||||
'attributes': { |
||||
'callback_url': url |
||||
} |
||||
} |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.put(_query_url, |
||||
headers=_headers, |
||||
parameters=APIHelper.json_serialize(body)) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def set_account_level_mms_callback(self, url): |
||||
"""Does a PUT request to /v2.1/messages/mms_callback. |
||||
|
||||
Sets the callback url for all mms messages. |
||||
|
||||
Args: |
||||
url (string): The callback url to be hit. |
||||
|
||||
Returns: |
||||
mixed: Response from the API. ACCEPTED |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2.1/messages/mms_callback' |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/vnd.api+json', |
||||
'content-type': 'application/vnd.api+json; charset=utf-8' |
||||
} |
||||
|
||||
body = { |
||||
'data': { |
||||
'attributes': { |
||||
'callback_url': url |
||||
} |
||||
} |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.put(_query_url, |
||||
headers=_headers, |
||||
parameters=APIHelper.json_serialize( |
||||
body)) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def set_account_level_dlr_callback(self, url): |
||||
"""Does a PUT request to /v2.1/messages/dlr_callback. |
||||
|
||||
Sets the callback url for all delivery receipts (dlrs) |
||||
|
||||
Args: |
||||
url (string): The callback url to be hit. |
||||
|
||||
Returns: |
||||
mixed: Response from the API. ACCEPTED |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2.1/messages/dlr_callback' |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/vnd.api+json', |
||||
'content-type': 'application/vnd.api+json; charset=utf-8' |
||||
} |
||||
|
||||
body = { |
||||
'data': { |
||||
'attributes': { |
||||
'callback_url': url |
||||
} |
||||
} |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.put(_query_url, |
||||
headers=_headers, |
||||
parameters=APIHelper.json_serialize( |
||||
body)) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def set_did_level_dlr_callback(self, number_id, dlr_url): |
||||
"""Does a POST request to /v2/numbers/number_id/relationships/dlr_callback |
||||
|
||||
Sets the callback url for all delivery receipts (dlrs) for the |
||||
specified did |
||||
|
||||
Args: |
||||
number_id (integer): pk of the DID record |
||||
url (string): The callback url to be hit. |
||||
|
||||
Returns: |
||||
mixed: Response from the API. ACCEPTED |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/{}/relationships/dlr_callback'.format(number_id) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/vnd.api+json', |
||||
'content-type': 'application/vnd.api+json; charset=utf-8' |
||||
} |
||||
|
||||
body = { |
||||
'data': { |
||||
'attributes': { |
||||
'callback_url': dlr_url |
||||
} |
||||
} |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.post(_query_url, |
||||
headers=_headers, |
||||
parameters=APIHelper.json_serialize( |
||||
body)) |
||||
|
||||
return self.handle_request_and_response(_request) |
Binary file not shown.
@ -0,0 +1,480 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.controllers.numbers_controller |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ). |
||||
""" |
||||
|
||||
from .base_controller import BaseController |
||||
from ..api_helper import APIHelper |
||||
from ..configuration import Configuration |
||||
from ..models.number_26 import Number26 |
||||
|
||||
|
||||
class NumbersController(BaseController): |
||||
|
||||
"""A Controller to access Endpoints in the |
||||
flowroutenumbersandmessaging API.""" |
||||
|
||||
def list_available_exchange_codes(self, |
||||
limit=None, |
||||
offset=None, |
||||
max_setup_cost=None, |
||||
areacode=None): |
||||
"""Does a GET request to /v2/numbers/available/exchanges. |
||||
|
||||
Returns a list of all Central Office (exchange) codes containing |
||||
purchasable phone numbers. |
||||
|
||||
Args: |
||||
limit (int, optional): Limits the number of items to retrieve. A |
||||
maximum of 200 items can be retrieved. |
||||
offset (int, optional): Offsets the list of phone numbers by your |
||||
specified value. For example, if you have 4 phone numbers and |
||||
you entered 1 as your offset value, then only 3 of your phone |
||||
numbers will be displayed in the response. |
||||
max_setup_cost (float, optional): Restricts the results to the |
||||
specified maximum non-recurring setup cost. |
||||
areacode (int, optional): Restricts the results to the specified |
||||
area code. |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A JSON object of Central Office |
||||
(exchange) codes containing |
||||
purchasable phone numbers that satisfy your search criteria. |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/available/exchanges' |
||||
_query_parameters = { |
||||
'limit': limit, |
||||
'offset': offset, |
||||
'max_setup_cost': max_setup_cost, |
||||
'areacode': areacode |
||||
} |
||||
_query_builder = APIHelper.append_url_with_query_parameters( |
||||
_query_builder, |
||||
_query_parameters, |
||||
Configuration.array_serialization) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.get(_query_url) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def list_available_area_codes(self, |
||||
limit=None, |
||||
offset=None, |
||||
max_setup_cost=None): |
||||
"""Does a GET request to /v2/numbers/available/areacodes. |
||||
|
||||
Returns a list of all Numbering Plan Area (NPA) codes containing |
||||
purchasable phone numbers. |
||||
|
||||
Args: |
||||
limit (int, optional): Limits the number of items to retrieve. A |
||||
maximum of 400 items can be retrieved. |
||||
offset (int, optional): Offsets the list of phone numbers by your |
||||
specified value. For example, if you have 4 phone numbers and |
||||
you entered 1 as your offset value, then only 3 of your phone |
||||
numbers will be displayed in the response. |
||||
max_setup_cost (float, optional): Restricts the results to the |
||||
specified maximum non-recurring setup cost. |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A JSON object of area codes containing |
||||
purchasable phone numbers that satisfy your search criteria. |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/available/areacodes' |
||||
_query_parameters = { |
||||
'limit': limit, |
||||
'offset': offset, |
||||
'max_setup_cost': max_setup_cost |
||||
} |
||||
_query_builder = APIHelper.append_url_with_query_parameters( |
||||
_query_builder, |
||||
_query_parameters, |
||||
Configuration.array_serialization) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.get(_query_url) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def search_for_purchasable_phone_numbers(self, |
||||
starts_with=None, |
||||
contains=None, |
||||
ends_with=None, |
||||
limit=None, |
||||
offset=None, |
||||
rate_center=None, |
||||
state=None): |
||||
"""Does a GET request to /v2/numbers/available. |
||||
|
||||
This endpoint lets you search for phone numbers by state or rate |
||||
center, or by your specified search value. |
||||
|
||||
Args: |
||||
starts_with (int, optional): Retrieve phone numbers that start |
||||
with the specified value. |
||||
contains (int, optional): Retrieve phone numbers containing the |
||||
specified value. |
||||
ends_with (int, optional): Retrieve phone numbers that end with |
||||
the specified value. |
||||
limit (int, optional): Limits the number of items to retrieve. A |
||||
maximum of 200 items can be retrieved. |
||||
offset (int, optional): Offsets the list of phone numbers by your |
||||
specified value. For example, if you have 4 phone numbers and |
||||
you entered 1 as your offset value, then only 3 of your phone |
||||
numbers will be displayed in the response. |
||||
rate_center (string, optional): Filters by and displays phone |
||||
numbers in the specified rate center. |
||||
state (string, optional): Filters by and displays phone numbers in |
||||
the specified state. Optional unless a ratecenter is |
||||
specified. |
||||
|
||||
Returns: |
||||
mixed: Response from the API. OK |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/available' |
||||
_query_parameters = { |
||||
'starts_with': starts_with, |
||||
'contains': contains, |
||||
'ends_with': ends_with, |
||||
'limit': limit, |
||||
'offset': offset, |
||||
'rate_center': rate_center, |
||||
'state': state |
||||
} |
||||
_query_builder = APIHelper.append_url_with_query_parameters( |
||||
_query_builder, |
||||
_query_parameters, |
||||
Configuration.array_serialization) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.get(_query_url, headers=_headers) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def list_account_phone_numbers(self, |
||||
starts_with=None, |
||||
ends_with=None, |
||||
contains=None, |
||||
limit=None, |
||||
offset=None): |
||||
"""Does a GET request to /v2/numbers. |
||||
|
||||
Returns a list of all phone numbers currently on your Flowroute |
||||
account. The response includes details such as the phone number's rate |
||||
center, state, number type, and whether CNAM Lookup is enabled for |
||||
that number. |
||||
|
||||
Args: |
||||
starts_with (int, optional): Retrieves phone numbers that start |
||||
with the specified value. |
||||
ends_with (int, optional): Retrieves phone numbers that end with |
||||
the specified value. |
||||
contains (int, optional): Retrieves phone numbers containing the |
||||
specified value. |
||||
limit (int, optional): Limits the number of items to retrieve. A |
||||
maximum of 200 items can be retrieved. |
||||
offset (int, optional): Offsets the list of phone numbers by your |
||||
specified value. For example, if you have 4 phone numbers and |
||||
you entered 1 as your offset value, then only 3 of your phone |
||||
numbers will be displayed in the response. |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A JSON object of phone numbers in |
||||
your account |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers' |
||||
_query_parameters = { |
||||
'starts_with': starts_with, |
||||
'ends_with': ends_with, |
||||
'contains': contains, |
||||
'limit': limit, |
||||
'offset': offset |
||||
} |
||||
_query_builder = APIHelper.append_url_with_query_parameters( |
||||
_query_builder, |
||||
_query_parameters, |
||||
Configuration.array_serialization) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.get(_query_url, headers=_headers) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def purchase_a_phone_number(self, id): |
||||
"""Does a POST request to /v2/numbers/{id}. |
||||
|
||||
Lets you purchase a phone number from available Flowroute inventory. |
||||
|
||||
Args: |
||||
id (int): Phone number to purchase. Must be in 11-digit E.164 |
||||
format; e.g. 12061231234. |
||||
|
||||
Returns: |
||||
Number26: Response from the API. CREATED |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/{id}' |
||||
_query_builder = APIHelper.append_url_with_template_parameters( |
||||
_query_builder, { |
||||
'id': id |
||||
}) |
||||
# Return appropriate type |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.post(_query_url, headers=_headers) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def list_phone_number_details(self, id): |
||||
"""Does a GET request to /v2/numbers/{id}. |
||||
|
||||
Lists all of the information associated with any of the phone numbers |
||||
in your account, including billing method, primary voice route, and |
||||
failover voice route. |
||||
|
||||
Args: |
||||
id (int): Phone number to search for which must be a number that |
||||
you own. Must be in 11-digit E.164 format; e.g. 12061231234. |
||||
|
||||
Returns: |
||||
Number26: Response from the API. A JSON object of phone numbers in |
||||
your account |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/{id}' |
||||
_query_builder = APIHelper.append_url_with_template_parameters( |
||||
_query_builder, { |
||||
'id': id |
||||
}) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.get(_query_url, headers=_headers) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def release_a_did(self, id): |
||||
"""Does a DELETE request to /v2/numbers/{id}. |
||||
|
||||
Lets you release a phone number back to available Flowroute inventory. |
||||
|
||||
Args: |
||||
id (int): Phone number to purchase. Must be in 11-digit E.164 |
||||
format; e.g. 12061231234. |
||||
|
||||
Returns: |
||||
Number26: Response from the API. CREATED |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/{id}' |
||||
_query_builder = APIHelper.append_url_with_template_parameters( |
||||
_query_builder, { |
||||
'id': id |
||||
}) |
||||
|
||||
# Return appropriate type |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.delete(_query_url, headers=_headers) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def set_did_alias(self, id, alias): |
||||
"""Does a PATCH request to /v2/numbers/{id}. |
||||
|
||||
Lets you set an alias on one of your DIDs. |
||||
|
||||
Args: |
||||
id (int): Phone number to purchase. Must be in 11-digit E.164 |
||||
format; e.g. 12061231234. |
||||
alias (string): String to use as alias for this DID |
||||
|
||||
Returns: |
||||
Number26: Response from the API. CREATED |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/{id}' |
||||
_query_builder = APIHelper.append_url_with_template_parameters( |
||||
_query_builder, { |
||||
'id': id |
||||
}) |
||||
# Return appropriate type |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json' |
||||
} |
||||
|
||||
body = { |
||||
'type': 'number', |
||||
'alias': alias |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.patch(_query_url, headers=_headers, |
||||
parameters=APIHelper.json_serialize( |
||||
body)) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def set_did_callback(self, id, url): |
||||
"""Does a POST request to /v2/numbers/{id}/relationships/dlr_callback. |
||||
|
||||
Lets you set a dlr callback for a specific DID. |
||||
|
||||
Args: |
||||
id (int): Phone number to purchase. Must be in 11-digit E.164 |
||||
format; e.g. 12061231234. |
||||
url (string): String / URL to notify |
||||
|
||||
Returns: |
||||
204 No Content |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/{id}/relationships/dlr_callback' |
||||
_query_builder = APIHelper.append_url_with_template_parameters( |
||||
_query_builder, { |
||||
'id': id |
||||
}) |
||||
# Return appropriate type |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json' |
||||
} |
||||
|
||||
body = { |
||||
'data': { |
||||
'attributes': { |
||||
'callback_url': url |
||||
} |
||||
} |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.post(_query_url, headers=_headers, |
||||
parameters=APIHelper.json_serialize( |
||||
body)) |
||||
|
||||
return self.handle_request_and_response(_request) |
Binary file not shown.
@ -0,0 +1,54 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.controllers.porting_controller |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ). |
||||
""" |
||||
|
||||
from .base_controller import BaseController |
||||
from ..api_helper import APIHelper |
||||
from ..configuration import Configuration |
||||
|
||||
|
||||
class PortingController(BaseController): |
||||
|
||||
"""A Controller to access Endpoints in the |
||||
flowroutenumbersandmessaging API.""" |
||||
|
||||
def checkPortability(self, numbers): |
||||
"""Does a POST request to /v2/portorders/portability. |
||||
|
||||
Args: |
||||
numbers (list: comma delimited list of strings, required): |
||||
Phone numbers to check |
||||
|
||||
Returns: |
||||
mixed: Response from the API. A JSON object of the status of each |
||||
number specified |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
body = { |
||||
"numbers": numbers |
||||
} |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/portorders/portability' |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.post(_query_url, headers=_headers, |
||||
parameters=body) |
||||
|
||||
return self.handle_request_and_response(_request) |
Binary file not shown.
@ -0,0 +1,192 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.controllers.routes_controller |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ). |
||||
""" |
||||
|
||||
from .base_controller import BaseController |
||||
from ..api_helper import APIHelper |
||||
from ..configuration import Configuration |
||||
import json |
||||
|
||||
|
||||
class RoutesController(BaseController): |
||||
|
||||
"""A Controller to access Endpoints in the |
||||
flowroutenumbersandmessaging API.""" |
||||
|
||||
def create_an_inbound_route(self, body): |
||||
"""Does a POST request to /v2/routes. |
||||
|
||||
Creates a new inbound route which can then be associated with phone |
||||
numbers. Please see "List Inbound Routes" to review the route values |
||||
that you can associate with your Flowroute phone numbers. |
||||
|
||||
Args: |
||||
body (NewRoute): The new inbound route to be created. |
||||
|
||||
Returns: |
||||
mixed: Response from the API. CREATED |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/routes' |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare headers |
||||
_headers = { |
||||
'accept': 'application/json', |
||||
'content-type': 'application/json; charset=utf-8' |
||||
} |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.post(_query_url, |
||||
headers=_headers, |
||||
parameters=APIHelper.json_serialize(json.loads(body))) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def list_inbound_routes(self, |
||||
limit=None, |
||||
offset=None): |
||||
"""Does a GET request to /v2/routes. |
||||
|
||||
Returns a list of your inbound routes. From the list, you can then |
||||
select routes to use as the primary and failover routes for a phone |
||||
number, which you can do via "Update Primary Voice Route for a Phone |
||||
Number" and "Update Failover Voice Route for a Phone Number". |
||||
|
||||
Args: |
||||
limit (int, optional): Limits the number of routes to retrieve. A |
||||
maximum of 200 items can be retrieved. |
||||
offset (int, optional): Offsets the list of routes by your |
||||
specified value. For example, if you have 4 inbound routes and |
||||
you entered 1 as your offset value, then only 3 of your routes |
||||
will be displayed in the response. |
||||
|
||||
Returns: |
||||
void: Response from the API. OK |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/routes' |
||||
_query_parameters = { |
||||
'limit': limit, |
||||
'offset': offset |
||||
} |
||||
_query_builder = APIHelper.append_url_with_query_parameters(_query_builder, |
||||
_query_parameters, Configuration.array_serialization) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.get(_query_url) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def update_primary_voice_route(self, number_id, body): |
||||
"""Does a PATCH request to /v2/numbers/{number_id}/relationships/primary_route. |
||||
|
||||
Use this endpoint to update the primary voice route for a phone |
||||
number. You must create the route first by following "Create an |
||||
Inbound Route". You can then assign the created route by specifying |
||||
its value in a PATCH request. |
||||
|
||||
Args: |
||||
number_id (int): The phone number in E.164 11-digit North American |
||||
format to which the primary route for voice will be assigned. |
||||
body (void): The primary route to be assigned. |
||||
|
||||
Returns: |
||||
void: Response from the API. NO CONTENT |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/{number_id}/relationships/primary_route' |
||||
_query_builder = APIHelper.append_url_with_template_parameters(_query_builder, { |
||||
'number_id': number_id |
||||
}) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.patch(_query_url, |
||||
parameters=APIHelper.json_serialize(json.loads(body))) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def update_failover_voice_route(self, |
||||
number_id, |
||||
body): |
||||
"""Does a PATCH request to /v2/numbers/{number_id}/relationships/failover_route. |
||||
|
||||
Use this endpoint to update the failover voice route for a phone |
||||
number. You must create the route first by following "Create an |
||||
Inbound Route". You can then assign the created route by specifying |
||||
its value in a PATCH request. |
||||
|
||||
Args: |
||||
number_id (int): The phone number in E.164 11-digit North American |
||||
format to which the failover route for voice will be |
||||
assigned. |
||||
body (void): The failover route to be assigned. |
||||
|
||||
Returns: |
||||
void: Response from the API. NO CONTENT |
||||
|
||||
Raises: |
||||
APIException: When an error occurs while fetching the data from |
||||
the remote API. This exception includes the HTTP Response |
||||
code, an error message, and the HTTP body that was received in |
||||
the request. |
||||
|
||||
""" |
||||
|
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/numbers/{number_id}/relationships/failover_route' |
||||
_query_builder = APIHelper.append_url_with_template_parameters( |
||||
_query_builder, { |
||||
'number_id': number_id |
||||
}) |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.patch(_query_url, parameters=APIHelper.json_serialize(json.loads(body))) |
||||
|
||||
return self.handle_request_and_response(_request) |
||||
|
||||
def list_edge_strategies(self): |
||||
# Prepare query URL |
||||
_query_builder = Configuration.base_uri |
||||
_query_builder += '/v2/routes/edge_strategies' |
||||
_query_url = APIHelper.clean_url(_query_builder) |
||||
|
||||
# Prepare and execute request |
||||
_request = self.http_client.get(_query_url) |
||||
|
||||
return self.handle_request_and_response(_request) |
Binary file not shown.
@ -0,0 +1,22 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.decorators |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
|
||||
class lazy_property(object): |
||||
|
||||
"""A decorator class for lazy instantiation.""" |
||||
|
||||
def __init__(self, fget): |
||||
self.fget = fget |
||||
self.func_name = fget.__name__ |
||||
|
||||
def __get__(self, obj, cls): |
||||
if obj is None: |
||||
return None |
||||
value = self.fget(obj) |
||||
setattr(obj, self.func_name, value) |
||||
return value |
Binary file not shown.
@ -0,0 +1,4 @@ |
||||
__all__ = [ |
||||
'api_exception', |
||||
'error_exception', |
||||
] |
Binary file not shown.
@ -0,0 +1,32 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.exceptions.api_exception |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
|
||||
class APIException(Exception): |
||||
|
||||
"""Class that handles HTTP Exceptions when fetching API Endpoints. |
||||
|
||||
Attributes: |
||||
response_code (int): The status code of the response. |
||||
context (HttpContext): The HttpContext of the API call. |
||||
|
||||
""" |
||||
|
||||
def __init__(self, |
||||
reason, |
||||
context): |
||||
"""Constructor for the APIException class |
||||
|
||||
Args: |
||||
reason (string): The reason (or error message) for the Exception |
||||
to be raised. |
||||
context (HttpContext): The HttpContext of the API call. |
||||
|
||||
""" |
||||
super(APIException, self).__init__(reason) |
||||
self.context = context |
||||
self.response_code = context.response.status_code |
Binary file not shown.
@ -0,0 +1,40 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.error_exception |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
from ..api_helper import APIHelper |
||||
import flowroutenumbersandmessaging.exceptions.api_exception |
||||
import flowroutenumbersandmessaging.models.error_1 |
||||
|
||||
class ErrorException(flowroutenumbersandmessaging.exceptions.api_exception.APIException): |
||||
def __init__(self, reason, context): |
||||
"""Constructor for the ErrorException class |
||||
|
||||
Args: |
||||
reason (string): The reason (or error message) for the Exception |
||||
to be raised. |
||||
context (HttpContext): The HttpContext of the API call. |
||||
|
||||
""" |
||||
super(ErrorException, self).__init__(reason, context) |
||||
dictionary = APIHelper.json_deserialize(self.context.response.raw_body) |
||||
if isinstance(dictionary, dict): |
||||
self.unbox(dictionary) |
||||
|
||||
def unbox(self, dictionary): |
||||
"""Populates the properties of this object by extracting them from a dictionary. |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
""" |
||||
self.errors = None |
||||
if dictionary.get("errors") != None: |
||||
self.errors = list() |
||||
for structure in dictionary.get("errors"): |
||||
self.errors.append(flowroutenumbersandmessaging.models.error_1.Error1.from_dictionary(structure)) |
Binary file not shown.
@ -0,0 +1,52 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.flowroute_numbers_and_messaging_client |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ). |
||||
""" |
||||
from .decorators import lazy_property |
||||
from .configuration import Configuration |
||||
from .controllers.numbers_controller import NumbersController |
||||
from .controllers.routes_controller import RoutesController |
||||
from .controllers.messages_controller import MessagesController |
||||
from .controllers.e911s_controller import E911sController |
||||
from .controllers.cnams_controller import CNAMsController |
||||
from .controllers.porting_controller import PortingController |
||||
|
||||
|
||||
class FlowroutenumbersandmessagingClient(object): |
||||
|
||||
config = Configuration |
||||
|
||||
@lazy_property |
||||
def numbers(self): |
||||
return NumbersController() |
||||
|
||||
@lazy_property |
||||
def routes(self): |
||||
return RoutesController() |
||||
|
||||
@lazy_property |
||||
def messages(self): |
||||
return MessagesController() |
||||
|
||||
@lazy_property |
||||
def e911s(self): |
||||
return E911sController() |
||||
|
||||
@lazy_property |
||||
def cnams(self): |
||||
return CNAMsController() |
||||
|
||||
@lazy_property |
||||
def porting(self): |
||||
return PortingController() |
||||
|
||||
def __init__(self, |
||||
basic_auth_user_name = None, |
||||
basic_auth_password = None): |
||||
if basic_auth_user_name != None: |
||||
Configuration.basic_auth_user_name = basic_auth_user_name |
||||
if basic_auth_password != None: |
||||
Configuration.basic_auth_password = basic_auth_password |
Binary file not shown.
@ -0,0 +1,10 @@ |
||||
__all__ = [ |
||||
'auth', |
||||
'http_method_enum', |
||||
'http_request', |
||||
'http_response', |
||||
'http_client', |
||||
'http_context', |
||||
'requests_client', |
||||
'http_call_back', |
||||
] |
Binary file not shown.
@ -0,0 +1,3 @@ |
||||
__all__ = [ |
||||
'basic_auth', |
||||
] |
Binary file not shown.
@ -0,0 +1,28 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.http.auth.basic_auth |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
|
||||
import base64 |
||||
from ...configuration import Configuration |
||||
|
||||
class BasicAuth: |
||||
|
||||
@staticmethod |
||||
def apply(http_request): |
||||
""" Add basic authentication to the request. |
||||
|
||||
Args: |
||||
http_request (HttpRequest): The HttpRequest object to which |
||||
authentication will be added. |
||||
|
||||
""" |
||||
username = Configuration.basic_auth_user_name |
||||
password = Configuration.basic_auth_password |
||||
joined = "{}:{}".format(username, password) |
||||
encoded = base64.b64encode(str.encode(joined)).decode('iso-8859-1') |
||||
header_value = "Basic {}".format(encoded) |
||||
http_request.headers["Authorization"] = header_value |
Binary file not shown.
@ -0,0 +1,36 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.http.http_call_back |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ). |
||||
""" |
||||
|
||||
class HttpCallBack(object): |
||||
|
||||
"""An interface for the callback to be called before and after the |
||||
HTTP call for an endpoint is made. |
||||
|
||||
This class should not be instantiated but should be used as a base class |
||||
for HttpCallBack classes. |
||||
|
||||
""" |
||||
|
||||
def on_before_request(self, |
||||
request): |
||||
"""The controller will call this method before making the HttpRequest. |
||||
|
||||
Args: |
||||
request (HttpRequest): The request object which will be sent |
||||
to the HttpClient to be executed. |
||||
""" |
||||
raise NotImplementedError("This method has not been implemented.") |
||||
|
||||
def on_after_response(self, |
||||
context): |
||||
"""The controller will call this method after making the HttpRequest. |
||||
|
||||
Args: |
||||
context (HttpContext): The HttpContext of the API call. |
||||
""" |
||||
raise NotImplementedError("This method has not been implemented.") |
@ -0,0 +1,177 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.http.http_client |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ). |
||||
""" |
||||
|
||||
from .http_request import HttpRequest |
||||
from .http_method_enum import HttpMethodEnum |
||||
|
||||
class HttpClient(object): |
||||
|
||||
"""An interface for the methods that an HTTP Client must implement |
||||
|
||||
This class should not be instantiated but should be used as a base class |
||||
for HTTP Client classes. |
||||
|
||||
""" |
||||
|
||||
def execute_as_string(self, request): |
||||
"""Execute a given HttpRequest to get a string response back |
||||
|
||||
Args: |
||||
request (HttpRequest): The given HttpRequest to execute. |
||||
|
||||
Returns: |
||||
HttpResponse: The response of the HttpRequest. |
||||
|
||||
""" |
||||
raise NotImplementedError("Please Implement this method") |
||||
|
||||
def execute_as_binary(self, request): |
||||
"""Execute a given HttpRequest to get a binary response back |
||||
|
||||
Args: |
||||
request (HttpRequest): The given HttpRequest to execute. |
||||
|
||||
Returns: |
||||
HttpResponse: The response of the HttpRequest. |
||||
|
||||
""" |
||||
raise NotImplementedError("Please Implement this method") |
||||
|
||||
def convert_response(self, response, binary): |
||||
"""Converts the Response object of the HttpClient into an |
||||
HttpResponse object. |
||||
|
||||
Args: |
||||
response (dynamic): The original response object. |
||||
|
||||
Returns: |
||||
HttpResponse: The converted HttpResponse object. |
||||
|
||||
""" |
||||
raise NotImplementedError("Please Implement this method") |
||||
|
||||
def get(self, query_url, |
||||
headers={}, |
||||
query_parameters={}): |
||||
"""Create a simple GET HttpRequest object for the given parameters |
||||
|
||||
Args: |
||||
query_url (string): The URL to send the request to. |
||||
headers (dict, optional): The headers for the HTTP Request. |
||||
query_parameters (dict, optional): Query parameters to add in the URL. |
||||
|
||||
Returns: |
||||
HttpRequest: The generated HttpRequest for the given paremeters. |
||||
|
||||
""" |
||||
return HttpRequest(HttpMethodEnum.GET, |
||||
query_url, |
||||
headers, |
||||
query_parameters, |
||||
None, |
||||
None) |
||||
|
||||
def post(self, query_url, |
||||
headers={}, |
||||
query_parameters={}, |
||||
parameters={}, |
||||
files={}): |
||||
"""Create a simple POST HttpRequest object for the given parameters |
||||
|
||||
Args: |
||||
query_url (string): The URL to send the request to. |
||||
headers (dict, optional): The headers for the HTTP Request. |
||||
query_parameters (dict, optional): Query parameters to add in the URL. |
||||
parameters (dict, optional): Form or body parameters to be included in the body. |
||||
files (dict, optional): Files to be sent with the request. |
||||
|
||||
Returns: |
||||
HttpRequest: The generated HttpRequest for the given paremeters. |
||||
|
||||
""" |
||||
return HttpRequest(HttpMethodEnum.POST, |
||||
query_url, |
||||
headers, |
||||
query_parameters, |
||||
parameters, |
||||
files) |
||||
|
||||
def put(self, query_url, |
||||
headers={}, |
||||
query_parameters={}, |
||||
parameters={}, |
||||
files={}): |
||||
"""Create a simple PUT HttpRequest object for the given parameters |
||||
|
||||
Args: |
||||
query_url (string): The URL to send the request to. |
||||
headers (dict, optional): The headers for the HTTP Request. |
||||
query_parameters (dict, optional): Query parameters to add in the URL. |
||||
parameters (dict, optional): Form or body parameters to be included in the body. |
||||
files (dict, optional): Files to be sent with the request. |
||||
|
||||
Returns: |
||||
HttpRequest: The generated HttpRequest for the given paremeters. |
||||
|
||||
""" |
||||
return HttpRequest(HttpMethodEnum.PUT, |
||||
query_url, |
||||
headers, |
||||
query_parameters, |
||||
parameters, |
||||
files) |
||||
|
||||
def patch(self, query_url, |
||||
headers={}, |
||||
query_parameters={}, |
||||
parameters={}, |
||||
files={}): |
||||
"""Create a simple PATCH HttpRequest object for the given parameters |
||||
|
||||
Args: |
||||
query_url (string): The URL to send the request to. |
||||
headers (dict, optional): The headers for the HTTP Request. |
||||
query_parameters (dict, optional): Query parameters to add in the URL. |
||||
parameters (dict, optional): Form or body parameters to be included in the body. |
||||
files (dict, optional): Files to be sent with the request. |
||||
|
||||
Returns: |
||||
HttpRequest: The generated HttpRequest for the given paremeters. |
||||
|
||||
""" |
||||
return HttpRequest(HttpMethodEnum.PATCH, |
||||
query_url, |
||||
headers, |
||||
query_parameters, |
||||
parameters, |
||||
files) |
||||
|
||||
def delete(self, query_url, |
||||
headers={}, |
||||
query_parameters={}, |
||||
parameters={}, |
||||
files={}): |
||||
"""Create a simple DELETE HttpRequest object for the given parameters |
||||
|
||||
Args: |
||||
query_url (string): The URL to send the request to. |
||||
headers (dict, optional): The headers for the HTTP Request. |
||||
query_parameters (dict, optional): Query parameters to add in the URL. |
||||
parameters (dict, optional): Form or body parameters to be included in the body. |
||||
files (dict, optional): Files to be sent with the request. |
||||
|
||||
Returns: |
||||
HttpRequest: The generated HttpRequest for the given paremeters. |
||||
|
||||
""" |
||||
return HttpRequest(HttpMethodEnum.DELETE, |
||||
query_url, |
||||
headers, |
||||
query_parameters, |
||||
parameters, |
||||
files) |
Binary file not shown.
@ -0,0 +1,34 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.http.http_context |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ). |
||||
""" |
||||
|
||||
class HttpContext(object): |
||||
|
||||
"""An HTTP Context that contains both the original HttpRequest |
||||
object that intitiated the call and the HttpResponse object that |
||||
is the result of the call. |
||||
|
||||
Attributes: |
||||
request (HttpRequest): The original request object. |
||||
response (HttpResponse): The returned response object after |
||||
executing the request. Note that this may be None |
||||
depending on if and when an error occurred. |
||||
|
||||
""" |
||||
|
||||
def __init__(self, |
||||
request, |
||||
response): |
||||
"""Constructor for the HttpContext class |
||||
|
||||
Args: |
||||
request (HttpRequest): The HTTP Request. |
||||
response (HttpResponse): The HTTP Response. |
||||
|
||||
""" |
||||
self.request = request |
||||
self.response = response |
Binary file not shown.
@ -0,0 +1,47 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.http.http_method_enum |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ). |
||||
""" |
||||
|
||||
class HttpMethodEnum(object): |
||||
|
||||
"""Enumeration of an HTTP Method |
||||
|
||||
Attributes: |
||||
GET: A GET Request |
||||
POST: A POST Request |
||||
PUT: A PUT Request |
||||
PATCH: A PATCH Request |
||||
DELETE: A DELETE Request |
||||
|
||||
""" |
||||
|
||||
GET = "GET" |
||||
|
||||
POST = "POST" |
||||
|
||||
PUT = "PUT" |
||||
|
||||
PATCH = "PATCH" |
||||
|
||||
DELETE = "DELETE" |
||||
|
||||
|
||||
@classmethod |
||||
def to_string(cls, val): |
||||
"""Returns the string equivalent for the Enum. |
||||
|
||||
""" |
||||
for k, v in list(vars(cls).items()): |
||||
if v == val: |
||||
return k |
||||
|
||||
@classmethod |
||||
def from_string(cls, str): |
||||
"""Creates an instance of the Enum from a given string. |
||||
|
||||
""" |
||||
return getattr(cls, str.upper(), None) |
Binary file not shown.
@ -0,0 +1,81 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.http.http_request |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ). |
||||
""" |
||||
from ..api_helper import APIHelper |
||||
|
||||
class HttpRequest(object): |
||||
|
||||
"""Information about an HTTP Request including its method, headers, |
||||
parameters, URL, and Basic Auth details |
||||
|
||||
Attributes: |
||||
http_method (HttpMethodEnum): The HTTP Method that this request should |
||||
perform when called. |
||||
headers (dict): A dictionary of headers (key : value) that should be |
||||
sent along with the request. |
||||
query_url (string): The URL that the request should be sent to. |
||||
parameters (dict): A dictionary of parameters that are to be sent along |
||||
with the request in the form body of the request |
||||
|
||||
""" |
||||
|
||||
def __init__(self, |
||||
http_method, |
||||
query_url, |
||||
headers=None, |
||||
query_parameters=None, |
||||
parameters=None, |
||||
files=None): |
||||
"""Constructor for the HttpRequest class |
||||
|
||||
Args: |
||||
http_method (HttpMethodEnum): The HTTP Method. |
||||
query_url (string): The URL to send the request to. |
||||
headers (dict, optional): The headers for the HTTP Request. |
||||
query_parameters (dict, optional): Query parameters to add in the URL. |
||||
parameters (dict, optional): Form or body parameters to be included in the body. |
||||
files (dict, optional): Files to be sent with the request. |
||||
|
||||
""" |
||||
self.http_method = http_method |
||||
self.query_url = query_url |
||||
self.headers = headers |
||||
self.query_parameters = query_parameters |
||||
self.parameters = parameters |
||||
self.files = files |
||||
|
||||
def add_header(self, name, value): |
||||
""" Add a header to the HttpRequest. |
||||
|
||||
Args: |
||||
name (string): The name of the header. |
||||
value (string): The value of the header. |
||||
|
||||
""" |
||||
self.headers[name] = value |
||||
|
||||
def add_parameter(self, name, value): |
||||
""" Add a parameter to the HttpRequest. |
||||
|
||||
Args: |
||||
name (string): The name of the parameter. |
||||
value (string): The value of the parameter. |
||||
|
||||
""" |
||||
self.parameters[name] = value |
||||
|
||||
def add_query_parameter(self, name, value): |
||||
""" Add a query parameter to the HttpRequest. |
||||
|
||||
Args: |
||||
name (string): The name of the query parameter. |
||||
value (string): The value of the query parameter. |
||||
|
||||
""" |
||||
self.query_url = APIHelper.append_url_with_query_parameters(self.query_url, |
||||
{name:value}) |
||||
self.query_url = APIHelper.clean_url(self.query_url) |
Binary file not shown.
@ -0,0 +1,37 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.http.http_response |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ). |
||||
""" |
||||
|
||||
class HttpResponse(object): |
||||
|
||||
"""Information about an HTTP Response including its status code, returned |
||||
headers, and raw body |
||||
|
||||
Attributes: |
||||
status_code (int): The status code response from the server that |
||||
corresponds to this response. |
||||
headers (dict): A dictionary of headers (key : value) that were |
||||
returned with the response |
||||
raw_body (string): The Raw body of the HTTP Response as a string |
||||
|
||||
""" |
||||
|
||||
def __init__(self, |
||||
status_code, |
||||
headers, |
||||
raw_body): |
||||
"""Constructor for the HttpResponse class |
||||
|
||||
Args: |
||||
status_code (int): The response status code. |
||||
headers (dict): The response headers. |
||||
raw_body (string): The raw body from the server. |
||||
|
||||
""" |
||||
self.status_code = status_code |
||||
self.headers = headers |
||||
self.raw_body = raw_body |
Binary file not shown.
@ -0,0 +1,100 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.http.requests_client |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ). |
||||
""" |
||||
|
||||
import requests |
||||
|
||||
from cachecontrol import CacheControl |
||||
from requests.adapters import HTTPAdapter |
||||
from requests.packages.urllib3.util.retry import Retry |
||||
|
||||
from .http_client import HttpClient |
||||
from .http_response import HttpResponse |
||||
from .http_method_enum import HttpMethodEnum |
||||
|
||||
class RequestsClient(HttpClient): |
||||
|
||||
"""An implementation of HttpClient that uses Requests as its HTTP Client |
||||
|
||||
Attributes: |
||||
timeout (int): The default timeout for all API requests. |
||||
|
||||
""" |
||||
|
||||
def __init__(self, timeout=60, cache=False, max_retries=None, retry_interval=None): |
||||
"""The constructor. |
||||
|
||||
Args: |
||||
timeout (float): The default global timeout(seconds). |
||||
|
||||
""" |
||||
self.timeout = timeout |
||||
self.session = requests.session() |
||||
|
||||
if max_retries and retry_interval: |
||||
retries = Retry(total=max_retries, backoff_factor=retry_interval) |
||||
self.session.mount('http://', HTTPAdapter(max_retries=retries)) |
||||
self.session.mount('https://', HTTPAdapter(max_retries=retries)) |
||||
|
||||
if cache: |
||||
self.session = CacheControl(self.session) |
||||
|
||||
def execute_as_string(self, request): |
||||
"""Execute a given HttpRequest to get a string response back |
||||
|
||||
Args: |
||||
request (HttpRequest): The given HttpRequest to execute. |
||||
|
||||
Returns: |
||||
HttpResponse: The response of the HttpRequest. |
||||
|
||||
""" |
||||
response = self.session.request(HttpMethodEnum.to_string(request.http_method), |
||||
request.query_url, |
||||
headers=request.headers, |
||||
params=request.query_parameters, |
||||
data=request.parameters, |
||||
files=request.files, |
||||
timeout=self.timeout) |
||||
|
||||
return self.convert_response(response, False) |
||||
|
||||
def execute_as_binary(self, request): |
||||
"""Execute a given HttpRequest to get a binary response back |
||||
|
||||
Args: |
||||
request (HttpRequest): The given HttpRequest to execute. |
||||
|
||||
Returns: |
||||
HttpResponse: The response of the HttpRequest. |
||||
|
||||
""" |
||||
response = self.session.request(HttpMethodEnum.to_string(request.http_method), |
||||
request.query_url, |
||||
headers=request.headers, |
||||
params=request.query_parameters, |
||||
data=request.parameters, |
||||
files=request.files, |
||||
timeout=self.timeout) |
||||
|
||||
return self.convert_response(response, True) |
||||
|
||||
def convert_response(self, response, binary): |
||||
"""Converts the Response object of the HttpClient into an |
||||
HttpResponse object. |
||||
|
||||
Args: |
||||
response (dynamic): The original response object. |
||||
|
||||
Returns: |
||||
HttpResponse: The converted HttpResponse object. |
||||
|
||||
""" |
||||
if binary: |
||||
return HttpResponse(response.status_code, response.headers, response.content) |
||||
else: |
||||
return HttpResponse(response.status_code, response.headers, response.text) |
Binary file not shown.
@ -0,0 +1,20 @@ |
||||
__all__ = [ |
||||
'error_84', |
||||
'new_route', |
||||
'links', |
||||
'attributes', |
||||
'attributes_28', |
||||
'data_27', |
||||
'delivery_receipt', |
||||
'message', |
||||
'error_1', |
||||
'account_routes', |
||||
'attributes_62', |
||||
'data_61', |
||||
'number_26', |
||||
'mdr_2', |
||||
'data', |
||||
'route_type_enum', |
||||
'number_type_enum', |
||||
'message_type_enum', |
||||
] |
Binary file not shown.
@ -0,0 +1,63 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.account_routes |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
|
||||
|
||||
class AccountRoutes(object): |
||||
|
||||
"""Implementation of the 'AccountRoutes' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
data (list of object): TODO: type description here. |
||||
links (object): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"data" : "data", |
||||
"links" : "links" |
||||
} |
||||
|
||||
def __init__(self, |
||||
data=None, |
||||
links=None): |
||||
"""Constructor for the AccountRoutes class""" |
||||
|
||||
# Initialize members of the class |
||||
self.data = data |
||||
self.links = links |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
data = dictionary.get("data") |
||||
links = dictionary.get("links") |
||||
|
||||
# Return an object of this model |
||||
return cls(data, |
||||
links) |
||||
|
||||
|
@ -0,0 +1,129 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.attributes |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
from flowroutenumbersandmessaging.api_helper import APIHelper |
||||
import flowroutenumbersandmessaging.models.delivery_receipt |
||||
|
||||
class Attributes(object): |
||||
|
||||
"""Implementation of the 'Attributes' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
amount_display (float): TODO: type description here. |
||||
amount_nanodollars (float): TODO: type description here. |
||||
body (string): TODO: type description here. |
||||
delivery_receipts (list of DeliveryReceipt): TODO: type description |
||||
here. |
||||
direction (string): TODO: type description here. |
||||
mfrom (string): TODO: type description here. |
||||
is_mms (bool): TODO: type description here. |
||||
message_encoding (int): TODO: type description here. |
||||
message_type (MessageTypeEnum): TODO: type description here. |
||||
status (string): TODO: type description here. |
||||
timestamp (datetime): TODO: type description here. |
||||
to (string): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"amount_display" : "amount_display", |
||||
"amount_nanodollars" : "amount_nanodollars", |
||||
"body" : "body", |
||||
"delivery_receipts" : "delivery_receipts", |
||||
"direction" : "direction", |
||||
"mfrom" : "from", |
||||
"is_mms" : "is_mms", |
||||
"message_encoding" : "message_encoding", |
||||
"message_type" : "message_type", |
||||
"status" : "status", |
||||
"timestamp" : "timestamp", |
||||
"to" : "to" |
||||
} |
||||
|
||||
def __init__(self, |
||||
amount_display=None, |
||||
amount_nanodollars=None, |
||||
body=None, |
||||
delivery_receipts=None, |
||||
direction=None, |
||||
mfrom=None, |
||||
is_mms=None, |
||||
message_encoding=None, |
||||
message_type=None, |
||||
status=None, |
||||
timestamp=None, |
||||
to=None): |
||||
"""Constructor for the Attributes class""" |
||||
|
||||
# Initialize members of the class |
||||
self.amount_display = amount_display |
||||
self.amount_nanodollars = amount_nanodollars |
||||
self.body = body |
||||
self.delivery_receipts = delivery_receipts |
||||
self.direction = direction |
||||
self.mfrom = mfrom |
||||
self.is_mms = is_mms |
||||
self.message_encoding = message_encoding |
||||
self.message_type = message_type |
||||
self.status = status |
||||
self.timestamp = APIHelper.RFC3339DateTime(timestamp) if timestamp else None |
||||
self.to = to |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
amount_display = dictionary.get("amount_display") |
||||
amount_nanodollars = dictionary.get("amount_nanodollars") |
||||
body = dictionary.get("body") |
||||
delivery_receipts = None |
||||
if dictionary.get("delivery_receipts") != None: |
||||
delivery_receipts = list() |
||||
for structure in dictionary.get("delivery_receipts"): |
||||
delivery_receipts.append(flowroutenumbersandmessaging.models.delivery_receipt.DeliveryReceipt.from_dictionary(structure)) |
||||
direction = dictionary.get("direction") |
||||
mfrom = dictionary.get("from") |
||||
is_mms = dictionary.get("is_mms") |
||||
message_encoding = dictionary.get("message_encoding") |
||||
message_type = dictionary.get("message_type") |
||||
status = dictionary.get("status") |
||||
timestamp = APIHelper.RFC3339DateTime.from_value(dictionary.get("timestamp")).datetime if dictionary.get("timestamp") else None |
||||
to = dictionary.get("to") |
||||
|
||||
# Return an object of this model |
||||
return cls(amount_display, |
||||
amount_nanodollars, |
||||
body, |
||||
delivery_receipts, |
||||
direction, |
||||
mfrom, |
||||
is_mms, |
||||
message_encoding, |
||||
message_type, |
||||
status, |
||||
timestamp, |
||||
to) |
||||
|
||||
|
Binary file not shown.
@ -0,0 +1,87 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.attributes_28 |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
|
||||
|
||||
class Attributes28(object): |
||||
|
||||
"""Implementation of the 'Attributes28' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
alias (string): TODO: type description here. |
||||
cnam_lookups_enabled (bool): TODO: type description here. |
||||
number_type (NumberTypeEnum): TODO: type description here. |
||||
rate_center (string): TODO: type description here. |
||||
state (string): TODO: type description here. |
||||
value (int): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"alias" : "alias", |
||||
"cnam_lookups_enabled" : "cnam_lookups_enabled", |
||||
"number_type" : "number_type", |
||||
"rate_center" : "rate_center", |
||||
"state" : "state", |
||||
"value" : "value" |
||||
} |
||||
|
||||
def __init__(self, |
||||
alias=None, |
||||
cnam_lookups_enabled=None, |
||||
number_type=None, |
||||
rate_center=None, |
||||
state=None, |
||||
value=None): |
||||
"""Constructor for the Attributes28 class""" |
||||
|
||||
# Initialize members of the class |
||||
self.alias = alias |
||||
self.cnam_lookups_enabled = cnam_lookups_enabled |
||||
self.number_type = number_type |
||||
self.rate_center = rate_center |
||||
self.state = state |
||||
self.value = value |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
alias = dictionary.get("alias") |
||||
cnam_lookups_enabled = dictionary.get("cnam_lookups_enabled") |
||||
number_type = dictionary.get("number_type") |
||||
rate_center = dictionary.get("rate_center") |
||||
state = dictionary.get("state") |
||||
value = dictionary.get("value") |
||||
|
||||
# Return an object of this model |
||||
return cls(alias, |
||||
cnam_lookups_enabled, |
||||
number_type, |
||||
rate_center, |
||||
state, |
||||
value) |
||||
|
||||
|
Binary file not shown.
@ -0,0 +1,69 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.attributes_62 |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
|
||||
|
||||
class Attributes62(object): |
||||
|
||||
"""Implementation of the 'Attributes62' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
alias (string): TODO: type description here. |
||||
route_type (RouteTypeEnum): TODO: type description here. |
||||
value (string): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"alias" : "alias", |
||||
"route_type" : "route_type", |
||||
"value" : "value" |
||||
} |
||||
|
||||
def __init__(self, |
||||
alias=None, |
||||
route_type='sip-reg', |
||||
value=None): |
||||
"""Constructor for the Attributes62 class""" |
||||
|
||||
# Initialize members of the class |
||||
self.alias = alias |
||||
self.route_type = route_type |
||||
self.value = value |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
alias = dictionary.get("alias") |
||||
route_type = dictionary.get("route_type") if dictionary.get("route_type") else 'sip-reg' |
||||
value = dictionary.get("value") |
||||
|
||||
# Return an object of this model |
||||
return cls(alias, |
||||
route_type, |
||||
value) |
||||
|
||||
|
@ -0,0 +1,69 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.data |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
import flowroutenumbersandmessaging.models.attributes |
||||
|
||||
class Data(object): |
||||
|
||||
"""Implementation of the 'Data' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
attributes (Attributes): TODO: type description here. |
||||
id (string): TODO: type description here. |
||||
mtype (string): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"attributes" : "attributes", |
||||
"id" : "id", |
||||
"mtype" : "type" |
||||
} |
||||
|
||||
def __init__(self, |
||||
attributes=None, |
||||
id=None, |
||||
mtype='message'): |
||||
"""Constructor for the Data class""" |
||||
|
||||
# Initialize members of the class |
||||
self.attributes = attributes |
||||
self.id = id |
||||
self.mtype = mtype |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
attributes = flowroutenumbersandmessaging.models.attributes.Attributes.from_dictionary(dictionary.get("attributes")) if dictionary.get("attributes") else None |
||||
id = dictionary.get("id") |
||||
mtype = dictionary.get("type") if dictionary.get("type") else 'message' |
||||
|
||||
# Return an object of this model |
||||
return cls(attributes, |
||||
id, |
||||
mtype) |
||||
|
||||
|
Binary file not shown.
@ -0,0 +1,82 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.data_27 |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
import flowroutenumbersandmessaging.models.attributes_28 |
||||
import flowroutenumbersandmessaging.models.links |
||||
|
||||
class Data27(object): |
||||
|
||||
"""Implementation of the 'Data27' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
attributes (Attributes28): TODO: type description here. |
||||
id (string): TODO: type description here. |
||||
links (Links): TODO: type description here. |
||||
relationships (object): TODO: type description here. |
||||
mtype (string): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"attributes" : "attributes", |
||||
"id" : "id", |
||||
"links" : "links", |
||||
"relationships" : "relationships", |
||||
"mtype" : "type" |
||||
} |
||||
|
||||
def __init__(self, |
||||
attributes=None, |
||||
id=None, |
||||
links=None, |
||||
relationships=None, |
||||
mtype='number'): |
||||
"""Constructor for the Data27 class""" |
||||
|
||||
# Initialize members of the class |
||||
self.attributes = attributes |
||||
self.id = id |
||||
self.links = links |
||||
self.relationships = relationships |
||||
self.mtype = mtype |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
attributes = flowroutenumbersandmessaging.models.attributes_28.Attributes28.from_dictionary(dictionary.get("attributes")) if dictionary.get("attributes") else None |
||||
id = dictionary.get("id") |
||||
links = flowroutenumbersandmessaging.models.links.Links.from_dictionary(dictionary.get("links")) if dictionary.get("links") else None |
||||
relationships = dictionary.get("relationships") |
||||
mtype = dictionary.get("type") if dictionary.get("type") else 'number' |
||||
|
||||
# Return an object of this model |
||||
return cls(attributes, |
||||
id, |
||||
links, |
||||
relationships, |
||||
mtype) |
||||
|
||||
|
Binary file not shown.
@ -0,0 +1,63 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.data_61 |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
import flowroutenumbersandmessaging.models.attributes_62 |
||||
|
||||
class Data61(object): |
||||
|
||||
"""Implementation of the 'Data61' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
mtype (string): TODO: type description here. |
||||
attributes (Attributes62): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"mtype" : "type", |
||||
"attributes" : "attributes" |
||||
} |
||||
|
||||
def __init__(self, |
||||
mtype='route', |
||||
attributes=None): |
||||
"""Constructor for the Data61 class""" |
||||
|
||||
# Initialize members of the class |
||||
self.mtype = mtype |
||||
self.attributes = attributes |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
mtype = dictionary.get("type") if dictionary.get("type") else 'route' |
||||
attributes = flowroutenumbersandmessaging.models.attributes_62.Attributes62.from_dictionary(dictionary.get("attributes")) if dictionary.get("attributes") else None |
||||
|
||||
# Return an object of this model |
||||
return cls(mtype, |
||||
attributes) |
||||
|
||||
|
@ -0,0 +1,81 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.delivery_receipt |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
from flowroutenumbersandmessaging.api_helper import APIHelper |
||||
|
||||
class DeliveryReceipt(object): |
||||
|
||||
"""Implementation of the 'DeliveryReceipt' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
level (int): TODO: type description here. |
||||
status (string): TODO: type description here. |
||||
status_code (int): TODO: type description here. |
||||
status_code_description (string): TODO: type description here. |
||||
timestamp (datetime): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"level" : "level", |
||||
"status" : "status", |
||||
"status_code" : "status_code", |
||||
"status_code_description" : "status_code_description", |
||||
"timestamp" : "timestamp" |
||||
} |
||||
|
||||
def __init__(self, |
||||
level=None, |
||||
status=None, |
||||
status_code=None, |
||||
status_code_description=None, |
||||
timestamp=None): |
||||
"""Constructor for the DeliveryReceipt class""" |
||||
|
||||
# Initialize members of the class |
||||
self.level = level |
||||
self.status = status |
||||
self.status_code = status_code |
||||
self.status_code_description = status_code_description |
||||
self.timestamp = APIHelper.RFC3339DateTime(timestamp) if timestamp else None |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
level = dictionary.get("level") |
||||
status = dictionary.get("status") |
||||
status_code = dictionary.get("status_code") |
||||
status_code_description = dictionary.get("status_code_description") |
||||
timestamp = APIHelper.RFC3339DateTime.from_value(dictionary.get("timestamp")).datetime if dictionary.get("timestamp") else None |
||||
|
||||
# Return an object of this model |
||||
return cls(level, |
||||
status, |
||||
status_code, |
||||
status_code_description, |
||||
timestamp) |
||||
|
||||
|
Binary file not shown.
@ -0,0 +1,75 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.error_1 |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
|
||||
|
||||
class Error1(object): |
||||
|
||||
"""Implementation of the 'Error1' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
id (string): TODO: type description here. |
||||
status (int): TODO: type description here. |
||||
detail (string): TODO: type description here. |
||||
title (string): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"id" : "id", |
||||
"status" : "status", |
||||
"detail" : "detail", |
||||
"title" : "title" |
||||
} |
||||
|
||||
def __init__(self, |
||||
id=None, |
||||
status=None, |
||||
detail=None, |
||||
title=None): |
||||
"""Constructor for the Error1 class""" |
||||
|
||||
# Initialize members of the class |
||||
self.id = id |
||||
self.status = status |
||||
self.detail = detail |
||||
self.title = title |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
id = dictionary.get("id") |
||||
status = dictionary.get("status") |
||||
detail = dictionary.get("detail") |
||||
title = dictionary.get("title") |
||||
|
||||
# Return an object of this model |
||||
return cls(id, |
||||
status, |
||||
detail, |
||||
title) |
||||
|
||||
|
Binary file not shown.
@ -0,0 +1,61 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.error_84 |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
import flowroutenumbersandmessaging.models.error_1 |
||||
|
||||
class Error84(object): |
||||
|
||||
"""Implementation of the 'Error84' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
errors (list of Error1): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"errors" : "errors" |
||||
} |
||||
|
||||
def __init__(self, |
||||
errors=None): |
||||
"""Constructor for the Error84 class""" |
||||
|
||||
# Initialize members of the class |
||||
self.errors = errors |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
errors = None |
||||
if dictionary.get("errors") != None: |
||||
errors = list() |
||||
for structure in dictionary.get("errors"): |
||||
errors.append(flowroutenumbersandmessaging.models.error_1.Error1.from_dictionary(structure)) |
||||
|
||||
# Return an object of this model |
||||
return cls(errors) |
||||
|
||||
|
@ -0,0 +1,56 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.links |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
|
||||
|
||||
class Links(object): |
||||
|
||||
"""Implementation of the 'Links' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
self (string): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"self" : "self" |
||||
} |
||||
|
||||
def __init__(self): |
||||
"""Constructor for the Links class""" |
||||
|
||||
# Initialize members of the class |
||||
self.self = self |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
self = dictionary.get("self") |
||||
|
||||
# Return an object of this model |
||||
return cls(self) |
||||
|
||||
|
Binary file not shown.
@ -0,0 +1,57 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.mdr_2 |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
import flowroutenumbersandmessaging.models.data |
||||
|
||||
class MDR2(object): |
||||
|
||||
"""Implementation of the 'MDR2' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
data (Data): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"data" : "data" |
||||
} |
||||
|
||||
def __init__(self, |
||||
data=None): |
||||
"""Constructor for the MDR2 class""" |
||||
|
||||
# Initialize members of the class |
||||
self.data = data |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
data = flowroutenumbersandmessaging.models.data.Data.from_dictionary(dictionary.get("data")) if dictionary.get("data") else None |
||||
|
||||
# Return an object of this model |
||||
return cls(data) |
||||
|
||||
|
Binary file not shown.
@ -0,0 +1,81 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.message |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
|
||||
|
||||
class Message(object): |
||||
|
||||
"""Implementation of the 'Message' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
mfrom (string): TODO: type description here. |
||||
to (string): TODO: type description here. |
||||
body (string): TODO: type description here. |
||||
media_urls (list of string): TODO: type description here. |
||||
is_mms (bool): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"mfrom" : "from", |
||||
"to" : "to", |
||||
"body" : "body", |
||||
"media_urls" : "media_urls", |
||||
"is_mms" : "is_mms" |
||||
} |
||||
|
||||
def __init__(self, |
||||
mfrom=None, |
||||
to=None, |
||||
body=None, |
||||
media_urls=None, |
||||
is_mms=None): |
||||
"""Constructor for the Message class""" |
||||
|
||||
# Initialize members of the class |
||||
self.mfrom = mfrom |
||||
self.to = to |
||||
self.body = body |
||||
self.media_urls = media_urls |
||||
self.is_mms = is_mms |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
mfrom = dictionary.get("from") |
||||
to = dictionary.get("to") |
||||
body = dictionary.get("body") |
||||
media_urls = dictionary.get("media_urls") |
||||
is_mms = dictionary.get("is_mms") |
||||
|
||||
# Return an object of this model |
||||
return cls(mfrom, |
||||
to, |
||||
body, |
||||
media_urls, |
||||
is_mms) |
||||
|
||||
|
@ -0,0 +1,24 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.message_type_enum |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
|
||||
class MessageTypeEnum(object): |
||||
|
||||
"""Implementation of the 'MessageType' enum. |
||||
|
||||
TODO: type enum description here. |
||||
|
||||
Attributes: |
||||
LONGCODE: TODO: type description here. |
||||
TOLLFREE: TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
LONGCODE = 'longcode' |
||||
|
||||
TOLLFREE = 'toll-free' |
||||
|
@ -0,0 +1,57 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.new_route |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
import flowroutenumbersandmessaging.models.data_61 |
||||
|
||||
class NewRoute(object): |
||||
|
||||
"""Implementation of the 'NewRoute' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
data (Data61): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"data" : "data" |
||||
} |
||||
|
||||
def __init__(self, |
||||
data=None): |
||||
"""Constructor for the NewRoute class""" |
||||
|
||||
# Initialize members of the class |
||||
self.data = data |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
data = flowroutenumbersandmessaging.models.data_61.Data61.from_dictionary(dictionary.get("data")) if dictionary.get("data") else None |
||||
|
||||
# Return an object of this model |
||||
return cls(data) |
||||
|
||||
|
@ -0,0 +1,63 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.number_26 |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
import flowroutenumbersandmessaging.models.data_27 |
||||
|
||||
class Number26(object): |
||||
|
||||
"""Implementation of the 'Number26' model. |
||||
|
||||
TODO: type model description here. |
||||
|
||||
Attributes: |
||||
data (Data27): TODO: type description here. |
||||
included (list of object): TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
# Create a mapping from Model property names to API property names |
||||
_names = { |
||||
"data" : "data", |
||||
"included" : "included" |
||||
} |
||||
|
||||
def __init__(self, |
||||
data=None, |
||||
included=None): |
||||
"""Constructor for the Number26 class""" |
||||
|
||||
# Initialize members of the class |
||||
self.data = data |
||||
self.included = included |
||||
|
||||
|
||||
@classmethod |
||||
def from_dictionary(cls, |
||||
dictionary): |
||||
"""Creates an instance of this model from a dictionary |
||||
|
||||
Args: |
||||
dictionary (dictionary): A dictionary representation of the object as |
||||
obtained from the deserialization of the server's response. The keys |
||||
MUST match property names in the API description. |
||||
|
||||
Returns: |
||||
object: An instance of this structure class. |
||||
|
||||
""" |
||||
if dictionary is None: |
||||
return None |
||||
|
||||
# Extract variables from the dictionary |
||||
data = flowroutenumbersandmessaging.models.data_27.Data27.from_dictionary(dictionary.get("data")) if dictionary.get("data") else None |
||||
included = dictionary.get("included") |
||||
|
||||
# Return an object of this model |
||||
return cls(data, |
||||
included) |
||||
|
||||
|
Binary file not shown.
@ -0,0 +1,27 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.number_type_enum |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
|
||||
class NumberTypeEnum(object): |
||||
|
||||
"""Implementation of the 'NumberType' enum. |
||||
|
||||
TODO: type enum description here. |
||||
|
||||
Attributes: |
||||
STANDARD: TODO: type description here. |
||||
TOLLFREE: TODO: type description here. |
||||
INUM: TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
STANDARD = 'standard' |
||||
|
||||
TOLLFREE = 'tollfree' |
||||
|
||||
INUM = 'inum' |
||||
|
@ -0,0 +1,30 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
""" |
||||
flowroutenumbersandmessaging.models.route_type_enum |
||||
|
||||
This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ) |
||||
""" |
||||
|
||||
class RouteTypeEnum(object): |
||||
|
||||
"""Implementation of the 'RouteType' enum. |
||||
|
||||
TODO: type enum description here. |
||||
|
||||
Attributes: |
||||
SIPREG: TODO: type description here. |
||||
HOST: TODO: type description here. |
||||
URI: TODO: type description here. |
||||
NUMBER: TODO: type description here. |
||||
|
||||
""" |
||||
|
||||
SIPREG = 'sip-reg' |
||||
|
||||
HOST = 'host' |
||||
|
||||
URI = 'uri' |
||||
|
||||
NUMBER = 'number' |
||||
|
@ -0,0 +1,3 @@ |
||||
iptables -A INPUT -s 52.88.246.140 -j ACCEPT |
||||
iptables -A INPUT -s 52.10.220.50 -j ACCEPT |
||||
iptables -A INPUT -p tcp --dport 8090 -j REJECT |
@ -0,0 +1,71 @@ |
||||
import os |
||||
import urllib |
||||
import requests |
||||
import json |
||||
import pprint |
||||
import time |
||||
from flask import Flask, request |
||||
from flowroutenumbersandmessaging.flowroutenumbersandmessaging_client import FlowroutenumbersandmessagingClient |
||||
import sys |
||||
reload(sys) |
||||
sys.setdefaultencoding('utf-8') |
||||
|
||||
basic_auth_user_name = os.environ.get('FR_ACCESS_KEY') |
||||
basic_auth_password = os.environ.get('FR_SECRET_KEY') |
||||
|
||||
from_number = os.environ.get('FROM_NUMBER') |
||||
|
||||
client = FlowroutenumbersandmessagingClient(basic_auth_user_name, basic_auth_password) |
||||
messages_controller = client.messages |
||||
|
||||
#Flowroute API endpoint and reply SMS to be sent |
||||
fr_api_url = "https://api.flowroute.com/v2.1/messages" |
||||
reply_message = 'Thanks for the picture!' |
||||
|
||||
app = Flask(__name__) |
||||
app.debug = True |
||||
|
||||
@app.route('/inboundsms', methods=['POST']) |
||||
def inboundsms(): |
||||
|
||||
#extract attributes from POSTed JSON of inbound MMS |
||||
json_content = request.json |
||||
reply_to = json_content['data']['attributes']['from'] |
||||
reply_from = json_content['data']['attributes']['to'] |
||||
body = json_content['data']['attributes']['body'].decode('utf-8') |
||||
|
||||
pprint.pprint(body) |
||||
|
||||
#send a reply SMS from your Flowroute number |
||||
sendreply(reply_to, from_number, "You said " + body) |
||||
file = open("sms-logs.txt","a") |
||||
|
||||
file.write(reply_to +': ' + body + "\n") |
||||
file.close() |
||||
|
||||
return '0' |
||||
|
||||
def sendreply(reply_to, reply_from, msg): |
||||
request_body = '{ \ |
||||
"data": { \ |
||||
"type": "message", \ |
||||
"attributes": { \ |
||||
"to": "' + str(reply_to) + '", \ |
||||
"from": "' + str(reply_from) + '", \ |
||||
"body": "' + msg + '", \ |
||||
"is_mms": "false" \ |
||||
} \ |
||||
} \ |
||||
}' |
||||
|
||||
print ("---Send A Message") |
||||
result = messages_controller.send_a_message(request_body) |
||||
pprint.pprint(result) |
||||
|
||||
return '0' |
||||
|
||||
if __name__ == '__main__': |
||||
app.run( |
||||
host="0.0.0.0", |
||||
port=int("8090") |
||||
) |
@ -0,0 +1,34 @@ |
||||
#!/usr/bin/env python |
||||
|
||||
import pprint |
||||
import os |
||||
import json |
||||
import random |
||||
import string |
||||
from flowroutenumbersandmessaging.flowroutenumbersandmessaging_client import FlowroutenumbersandmessagingClient |
||||
|
||||
basic_auth_user_name = os.environ.get('FR_ACCESS_KEY') |
||||
basic_auth_password = os.environ.get('FR_SECRET_KEY') |
||||
|
||||
mobile_number = os.environ.get('TO_NUMBER') |
||||
from_number = os.environ.get('FROM_NUMBER') |
||||
|
||||
# Instantiate API client and create controllers for Messages |
||||
client = FlowroutenumbersandmessagingClient(basic_auth_user_name, basic_auth_password) |
||||
messages_controller = client.messages |
||||
|
||||
request_body = '{ \ |
||||
"data": { \ |
||||
"type": "message", \ |
||||
"attributes": { \ |
||||
"to": "' + str(mobile_number) + '", \ |
||||
"from": "' + str(from_number) + '", \ |
||||
"body": "Try me", \ |
||||
"is_mms": "false" \ |
||||
} \ |
||||
} \ |
||||
}' |
||||
|
||||
print ("---Send A Message") |
||||
result = messages_controller.send_a_message(request_body) |
||||
pprint.pprint(result) |
Loading…
Reference in new issue