From 1e7ec9cddd9c09478bc4b013a54accc7a76fee8c Mon Sep 17 00:00:00 2001 From: Justin Witz Date: Thu, 21 Jan 2016 15:59:46 -0800 Subject: [PATCH 1/3] Allow fetching Reservations under a Worker by default Allow updating Reservations under a Worker --- tests/task_router/test_capability.py | 17 +++++++---- .../test_task_router_capability.py | 28 +++++++++--------- .../test_task_router_worker_capability.py | 27 +++++++++-------- twilio/task_router/__init__.py | 29 ++++++++++++------- 4 files changed, 61 insertions(+), 40 deletions(-) diff --git a/tests/task_router/test_capability.py b/tests/task_router/test_capability.py index de105db281..70a5e46bb1 100644 --- a/tests/task_router/test_capability.py +++ b/tests/task_router/test_capability.py @@ -59,29 +59,36 @@ def test_defaults(self): ) expected = [ { - 'url': 'https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities', + 'url': websocket_url, 'method': 'GET', 'allow': True, 'query_filter': {}, 'post_filter': {}, }, { - 'url': 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**'.format(self.workspace_sid), + 'url': websocket_url, + 'method': 'POST', + 'allow': True, + 'query_filter': {}, + 'post_filter': {}, + }, + { + 'url': 'https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities', 'method': 'GET', 'allow': True, 'query_filter': {}, 'post_filter': {}, }, { - 'url': websocket_url, + 'url': 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**'.format(self.workspace_sid), 'method': 'GET', 'allow': True, 'query_filter': {}, 'post_filter': {}, }, { - 'url': websocket_url, - 'method': 'POST', + 'url': 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}/Reservations/**'.format(self.workspace_sid, self.worker_sid), + 'method': 'GET', 'allow': True, 'query_filter': {}, 'post_filter': {}, diff --git a/tests/task_router/test_task_router_capability.py b/tests/task_router/test_task_router_capability.py index 78116c0db1..e1d67efad9 100644 --- a/tests/task_router/test_task_router_capability.py +++ b/tests/task_router/test_task_router_capability.py @@ -72,14 +72,15 @@ def test_worker_default(self): self.check_decoded(decoded, account_sid, workspace_sid, worker_sid, worker_sid) policies = decoded['policies'] - self.assertEqual(len(policies), 5) + self.assertEqual(len(policies), 6) for method, url, policy in [ - ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", policies[0]), - ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**", policies[1]), - ('GET', "https://taskrouter.twilio.com/v1/wschannels/AC123/WK789", policies[2]), - ('POST', "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[3]), - ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789", policies[4]) + ('GET', "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[0]), + ('POST', "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[1]), + ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789", policies[2]) + ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", policies[3]), + ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**", policies[4]), + ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789/Reservations/**", policies[5]) ]: yield self.check_policy, method, url, policy @@ -128,15 +129,16 @@ def test_deprecated_worker(self): self.check_decoded(decoded, account_sid, workspace_sid, worker_sid, worker_sid) policies = decoded['policies'] - self.assertEqual(len(policies), 5) + self.assertEqual(len(policies), 6) - # should expect 5 policies + # should expect 6 policies for method, url, policy in [ - ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", policies[0]), - ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**", policies[1]), - ('GET', "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[2]), - ('POST', "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[3]), - ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789", policies[4]) + ('GET', "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[0]), + ('POST', "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[1]), + ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", policies[2]), + ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**", policies[3]), + ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789/Reservations/**", policies[4]), + ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789", policies[5]) ]: yield self.check_policy, method, url, policy diff --git a/tests/task_router/test_task_router_worker_capability.py b/tests/task_router/test_task_router_worker_capability.py index 83feaf6b8c..97ac7d0160 100644 --- a/tests/task_router/test_task_router_worker_capability.py +++ b/tests/task_router/test_task_router_worker_capability.py @@ -72,17 +72,18 @@ def test_defaults(self): websocket_url = 'https://event-bridge.twilio.com/v1/wschannels/{0}/{1}'.format(self.account_sid, self.worker_sid) - # expect 5 policies + # expect 6 policies policies = decoded['policies'] - self.assertEqual(len(policies), 5) + self.assertEqual(len(policies), 6) - # should expect 5 policies + # should expect 6 policies for method, url, policy in [ ('GET', websocket_url, policies[0]), ('POST', websocket_url, policies[1]), ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789", policies[2]), - ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**", policies[3]), - ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", policies[4]) + ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", policies[3]) + ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**", policies[4]), + ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789/Reservations/**", policies[5]) ]: yield self.check_policy, method, url, policy @@ -98,8 +99,8 @@ def test_allow_activity_updates(self): self.assertNotEqual(None, decoded) policies = decoded['policies'] - self.assertEqual(len(policies), 6) - policy = policies[5] + self.assertEqual(len(policies), 7) + policy = policies[6] url = "https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}".format(self.workspace_sid, self.worker_sid) @@ -121,13 +122,15 @@ def test_allow_reservation_updates(self): self.assertNotEqual(None, decoded) policies = decoded['policies'] - self.assertEqual(len(policies), 6) - - policy = policies[5] + self.assertEqual(len(policies), 8) - url = "https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**".format(self.workspace_sid) + taskPolicy = policies[6] + tasksUrl = "https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**".format(self.workspace_sid) + self.check_policy('POST', tasksUrl, taskPolicy) - self.check_policy('POST', url, policy) + workerReservationsPolicy = policies[7] + reservationsUrl = "https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}/Reservations/**".format(self.workspace_sid, self.worker_sid) + self.check_policy('POST', reservationsUrl, workerReservationsPolicy) if __name__ == "__main__": unittest.main() diff --git a/twilio/task_router/__init__.py b/twilio/task_router/__init__.py index c77feeca29..f14ee9becf 100644 --- a/twilio/task_router/__init__.py +++ b/twilio/task_router/__init__.py @@ -39,12 +39,12 @@ def __init__(self, account_sid, auth_token, workspace_sid, channel_id): # validate the JWT self.validate_jwt() - # set up resources - self.setup_resource() - # add permissions to GET and POST to the event-bridge channel self.allow_web_sockets(channel_id) + # set up resources + self.setup_resource() + # add permissions to fetch the instance resource self.add_policy(self.resource_url, "GET", True) @@ -61,8 +61,11 @@ def setup_resource(self): activity_url = self.base_url + "/Activities" self.allow(activity_url, "GET") - reservations_url = self.base_url + "/Tasks/**" - self.allow(reservations_url, "GET") + tasks_url = self.base_url + "/Tasks/**" + self.allow(tasks_url, "GET") + + worker_reservations_url = self.resource_url + "/Reservations/**" + self.allow(worker_reservations_url, "GET") elif self.channel_prefix == "WQ": self.resource_url = "{0}/TaskQueues/{1}".format( @@ -209,13 +212,15 @@ def __init__(self, account_sid, auth_token, workspace_sid, worker_sid): workspace_sid, worker_sid) - self.reservations_url = self.base_url + "/Tasks/**" self.activity_url = self.base_url + "/Activities" + self.tasks_url = self.base_url + "/Tasks/**" + self.worker_reservations_url = self.resource_url + "/Reservations/**" - # add permissions to fetch the list of activities and - # list of worker reservations - self.allow(self.reservations_url, "GET") + # add permissions to fetch the + # list of activities, tasks, and worker reservations self.allow(self.activity_url, "GET") + self.allow(self.tasks_url, "GET") + self.allow(self.worker_reservations_url, "GET") def setup_resource(self): self.resource_url = self.base_url + "/Workers/" + self.channel_id @@ -229,7 +234,11 @@ def allow_activity_updates(self): def allow_reservation_updates(self): self.policies.append(self.make_policy( - self.reservations_url, + self.tasks_url, + 'POST', + True)) + self.policies.append(self.make_policy( + self.worker_reservations_url, 'POST', True)) From 32444e8283aa36e1ddb1b527624acf33a55d2749 Mon Sep 17 00:00:00 2001 From: Justin Witz Date: Fri, 22 Jan 2016 13:40:51 -0800 Subject: [PATCH 2/3] Update location of imports --- twilio/task_router/__init__.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/twilio/task_router/__init__.py b/twilio/task_router/__init__.py index f14ee9becf..c7963a8f83 100644 --- a/twilio/task_router/__init__.py +++ b/twilio/task_router/__init__.py @@ -1,6 +1,21 @@ import time from .. import jwt +from .taskrouter_config import ( + TaskRouterConfig +) + +from .workflow_config import ( + WorkflowConfig +) + +from .workflow_ruletarget import ( + WorkflowRuleTarget +) +from .workflow_rule import ( + WorkflowRule +) + import warnings warnings.simplefilter('always', DeprecationWarning) @@ -257,18 +272,3 @@ def __init__(self, account_sid, auth_token, workspace_sid): def setup_resource(self): self.resource_url = self.base_url - -from .taskrouter_config import ( - TaskRouterConfig -) - -from .workflow_config import ( - WorkflowConfig -) - -from .workflow_ruletarget import ( - WorkflowRuleTarget -) -from .workflow_rule import ( - WorkflowRule -) From 8e7c696d7da871b5a5d0f968c516bd0ed5c4deb8 Mon Sep 17 00:00:00 2001 From: Justin Witz Date: Wed, 27 Jan 2016 14:27:45 -0800 Subject: [PATCH 3/3] Revert back to reservations_url --- twilio/task_router/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/twilio/task_router/__init__.py b/twilio/task_router/__init__.py index c7963a8f83..bed9950a1b 100644 --- a/twilio/task_router/__init__.py +++ b/twilio/task_router/__init__.py @@ -228,13 +228,13 @@ def __init__(self, account_sid, auth_token, workspace_sid, worker_sid): worker_sid) self.activity_url = self.base_url + "/Activities" - self.tasks_url = self.base_url + "/Tasks/**" + self.reservations_url = self.base_url + "/Tasks/**" self.worker_reservations_url = self.resource_url + "/Reservations/**" # add permissions to fetch the # list of activities, tasks, and worker reservations self.allow(self.activity_url, "GET") - self.allow(self.tasks_url, "GET") + self.allow(self.reservations_url, "GET") self.allow(self.worker_reservations_url, "GET") def setup_resource(self): @@ -249,7 +249,7 @@ def allow_activity_updates(self): def allow_reservation_updates(self): self.policies.append(self.make_policy( - self.tasks_url, + self.reservations_url, 'POST', True)) self.policies.append(self.make_policy(