From 5bf08f0476a772a24a1f91a7b2992fbdf7ef57ba Mon Sep 17 00:00:00 2001 From: Chris Lacina Date: Mon, 21 May 2018 10:03:21 -0700 Subject: [PATCH] WIP Testing --- demo.py | 90 +++++++++++++------ e911_demo.py | 15 +++- flowroutenumbersandmessaging/configuration.py | 5 +- .../controllers/routes_controller.py | 42 +++++++-- 4 files changed, 112 insertions(+), 40 deletions(-) diff --git a/demo.py b/demo.py index d1e0778..4cb36ec 100755 --- a/demo.py +++ b/demo.py @@ -1,21 +1,23 @@ #!/usr/bin/env python import pprint -import os -import json import random import string -from flowroutenumbersandmessaging.flowroutenumbersandmessaging_client import FlowroutenumbersandmessagingClient +from flowroutenumbersandmessaging.configuration import Configuration +from flowroutenumbersandmessaging.flowroutenumbersandmessaging_client import \ + FlowroutenumbersandmessagingClient print("Number/Route Management v2 & Messaging v2.1 Demo") # Set up your api credentials and test mobile number for outbound SMS or MMS -basic_auth_user_name = os.environ.get('FR_ACCESS_KEY') -basic_auth_password = os.environ.get('FR_SECRET_KEY') -mobile_number = "YOUR_MOBILE_NUMBER" +# basic_auth_user_name = os.environ.get('FR_ACCESS_KEY') +# basic_auth_password = os.environ.get('FR_SECRET_KEY') +mobile_number = "4254664078" -# Instantiate API client and create controllers for Numbers, Messages, and Routes -client = FlowroutenumbersandmessagingClient(basic_auth_user_name, basic_auth_password) +# Instantiate API client and create controllers for Numbers, +# Messages, and Routes +client = FlowroutenumbersandmessagingClient(Configuration.basic_auth_user_name, + Configuration.basic_auth_password) numbers_controller = client.numbers routes_controller = client.routes messages_controller = client.messages @@ -24,7 +26,9 @@ print("--List Available Area Codes") max_setup_cost = 3.25 limit = 3 offset = None -result = numbers_controller.list_available_area_codes(limit, offset, max_setup_cost) +result = numbers_controller.list_available_area_codes(limit, + offset, + max_setup_cost) pprint.pprint(result) print("--List Available Exchange Codes") @@ -32,7 +36,10 @@ limit = 3 offset = None max_setup_cost = None areacode = 347 -result = numbers_controller.list_available_exchange_codes(limit, offset, max_setup_cost, areacode) +result = numbers_controller.list_available_exchange_codes(limit, + offset, + max_setup_cost, + areacode) pprint.pprint(result) print("--Search for Purchasable Phone Numbers") @@ -43,20 +50,28 @@ limit = 3 offset = None rate_center = None state = None -result = numbers_controller.search_for_purchasable_phone_numbers(starts_with, contains, ends_with, limit, offset, rate_center, state) +result = numbers_controller.search_for_purchasable_phone_numbers(starts_with, + contains, + ends_with, + limit, + offset, + rate_center, + state) pprint.pprint(result) -print("--Purchase a Phone Number") -purchasable_number = result['data'][0]['id'] -#result = numbers_controller.purchase_a_phone_number(purchasable_number) +if len(result['data']): + print("--Purchase a Phone Number") + purchasable_number = result['data'][0]['id'] + # result = numbers_controller.purchase_a_phone_number(purchasable_number) print("--List Account Phone Numbers") -starts_with = 201 +starts_with = None ends_with = None contains = None limit = 3 offset = None -result = numbers_controller.list_account_phone_numbers(starts_with, ends_with, contains, limit, offset) +result = numbers_controller.list_account_phone_numbers(starts_with, ends_with, + contains, limit, offset) pprint.pprint(result) @@ -66,10 +81,18 @@ result = numbers_controller.list_phone_number_details(number_id) pprint.pprint(result) print("---Create an Inbound Route") + +print("---First list all available edge strategies") +# result = routes_controller.list_edge_strategies() +# pprint.pprint(result) + + # Function to generate six-charac random string def id_generator(size=6, chars=string.ascii_lowercase + string.digits): return ''.join(random.choice(chars) for _ in range(size)) -new_route = id_generator() + '.sonsofodin.com' + + +new_route = '{}.sonsofodin.com'.format(id_generator()) alias = id_generator() for i in range(10): alias += str(i) @@ -78,8 +101,9 @@ request_body = '{ \ "type": "route", \ "attributes": { \ "route_type": "host", \ - "value": "' + new_route +'", \ - "alias": "' + alias + '" \ + "value": "' + new_route + '", \ + "alias": "' + alias + '", \ + "edge_strategy": "1" \ } \ } \ }' @@ -97,7 +121,7 @@ secrouteid = result['data'][2]['id'] request_body = '{ \ "data": { \ "type": "route", \ - "id": "' + str(prirouteid) +'" \ + "id": "' + str(prirouteid) + '" \ } \ }' @@ -111,7 +135,7 @@ else: request_body = '{ \ "data": { \ "type": "route", \ - "id": "' + str(secrouteid) +'" \ + "id": "' + str(secrouteid) + '" \ } \ }' @@ -122,7 +146,21 @@ if result is None: else: print (result) +body_with_space = "hello there{}how are you?".format(chr(160)) + request_body = '{ \ + "data": { \ + "type": "message", \ + "attributes": { \ + "to": "' + str(mobile_number) + '", \ + "from": "' + str(number_id) + '", \ + "body": "' + unicode(body_with_space, "utf-8") + '", \ + "is_mms": "false" \ + } \ + } \ +}' + +request_body_mms = '{ \ "data": { \ "type": "message", \ "attributes": { \ @@ -136,19 +174,19 @@ request_body = '{ \ }' print("---Send A Message") -#result = messages_controller.send_a_message(request_body) -#pprint.pprint(result) +result = messages_controller.send_a_message(request_body) +pprint.pprint(result) print("---Look Up A Set Of Messages") start_date = "2017-12-01" end_date = "2018-01-08" limit = 2 -result = messages_controller.look_up_a_set_of_messages(start_date, end_date, limit) +result = messages_controller.look_up_a_set_of_messages(start_date, + end_date, + limit) pprint.pprint(result) print ("---Look Up A Message Detail Record") message_id = result['data'][0]['id'] result = messages_controller.look_up_a_message_detail_record(message_id) pprint.pprint(result) - - diff --git a/e911_demo.py b/e911_demo.py index fb1353c..9893d73 100644 --- a/e911_demo.py +++ b/e911_demo.py @@ -27,9 +27,16 @@ result = e911s_controller.validate_address( zip="98101") pprint.pprint(result) -print("--Get Details for a specific E911 Record") -result = e911s_controller.get_e911(11476) -pprint.pprint(result) +e911_id = None +# If the user has any E911 records, pull one up +for e in result['data']: + e911_id = e['id'] + break + +if e911_id: + print("--Get Details for a specific E911 Record") + result = e911s_controller.get_e911(e911_id) + pprint.pprint(result) print("--Create and Validate an Address") result = e911s_controller.create_address( @@ -37,7 +44,7 @@ result = e911s_controller.create_address( first_name="Chris", last_name="Smith", street_name="3rd Ave", - street_number="1182", + street_number="1218", city="Seattle", state="WA", country="USA", diff --git a/flowroutenumbersandmessaging/configuration.py b/flowroutenumbersandmessaging/configuration.py index 407aa1e..0a02728 100644 --- a/flowroutenumbersandmessaging/configuration.py +++ b/flowroutenumbersandmessaging/configuration.py @@ -7,6 +7,7 @@ """ from .api_helper import APIHelper + class Configuration(object): """A class used for configuring the SDK by a user. @@ -25,9 +26,9 @@ class Configuration(object): # The username to use with basic authentication # TODO: Set an appropriate value - basic_auth_user_name = "TODO: Replace" + basic_auth_user_name = "22476860" # The password to use with basic authentication # TODO: Set an appropriate value - basic_auth_password = "TODO: Replace" + basic_auth_password = "FYzckHAgBdHm1QpKbe6jdMivOWFlnApf" diff --git a/flowroutenumbersandmessaging/controllers/routes_controller.py b/flowroutenumbersandmessaging/controllers/routes_controller.py index b43c61e..d275ea7 100644 --- a/flowroutenumbersandmessaging/controllers/routes_controller.py +++ b/flowroutenumbersandmessaging/controllers/routes_controller.py @@ -14,10 +14,11 @@ from ..exceptions.error_exception import ErrorException from ..exceptions.api_exception import APIException import json -class RoutesController(BaseController): - """A Controller to access Endpoints in the flowroutenumbersandmessaging API.""" +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. @@ -52,15 +53,19 @@ class RoutesController(BaseController): } # Prepare and execute request - _request = self.http_client.post(_query_url, headers=_headers, parameters=APIHelper.json_serialize(json.loads(body))) + _request = self.http_client.post(_query_url, + headers=_headers, + parameters=APIHelper.json_serialize(json.loads(body))) 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('401 Unauthorized – There was an issue with your API credentials.', _context) + raise ErrorException('401 Unauthorized – ' + 'There was an issue with your API credentials.', _context) elif _context.response.status_code == 403: - raise ErrorException('403 Forbidden – The server understood the request but refuses to authorize it.', _context) + raise ErrorException('403 Forbidden – ' + 'The server understood the request but refuses to authorize it.', _context) elif _context.response.status_code == 404: raise ErrorException('404 The specified resource was not found', _context) self.validate_response(_context) @@ -156,7 +161,8 @@ class RoutesController(BaseController): _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))) + _request = self.http_client.patch(_query_url, + parameters=APIHelper.json_serialize(json.loads(body))) BasicAuth.apply(_request) _context = self.execute_request(_request) @@ -168,8 +174,8 @@ class RoutesController(BaseController): self.validate_response(_context) def update_failover_voice_route(self, - number_id, - body): + 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 @@ -213,3 +219,23 @@ class RoutesController(BaseController): elif _context.response.status_code == 404: raise ErrorException('The specified resource was not found', _context) self.validate_response(_context) + + 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) + print("Query is : {}".format(_query_url)) + # Prepare and execute request + _request = self.http_client.get(_query_url) + BasicAuth.apply(_request) + _context = self.execute_request(_request) + + # Endpoint and global error handling using HTTP status codes. + if _context.response.status_code == 401: + raise APIException('Unauthorized', _context) + elif _context.response.status_code == 404: + raise APIException('Not Found', _context) + self.validate_response(_context) + + return APIHelper.json_deserialize(_context.response.raw_body)