Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Supporting filter_friendly_name #245

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Jan 28, 2016
197 changes: 197 additions & 0 deletions tests/task_router/test_workflow_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,203 @@ def test_from_json2(self):
self.assertEqual(2, len(config.task_routing.filters))
self.assertEqual(4, len(config.task_routing.default_filter))

def test_from_json_with_filter_friendly_name(self):
data = {
'task_routing':
{
'filters': [
{
'expression': 'type == "sales"',
'filter_friendly_name': 'Sales',
'targets': [
{

'queue': 'WQec62de0e1148b8477f2e24579779c8b1',
'expression': 'task.language IN worker.languages'
}
]
},
{
'expression': 'type == "marketing"',
'filter_friendly_name': 'Marketing',
'targets': [
{
'queue': 'WQ2acd4c1a41ffadce5d1bac9e1ce2fa9f',
'expression': 'task.language IN worker.languages'
}
]
},
{
'expression': 'type == "support"',
'filter_friendly_name': 'Support',
'targets': [
{
'queue': 'WQe5eb317eb23500ade45087ea6522896c',
'expression': 'task.language IN worker.languages'
}
]
}
],
'default_filter':
{
'queue': 'WQ05f810d2d130344fd56e3c91ece2e594'
}
}
}
# marshal object
config = WorkflowConfig.json2obj(json.dumps(data))
self.assertEqual(3, len(config.task_routing.filters))
self.assertEqual(1, len(config.task_routing.default_filter))

# check that the configuration was marshaled to "friendly_name" and not "filter_friendly_name"
expected_config_data = {
"task_routing":
{
"default_filter":
{
"queue": "WQ05f810d2d130344fd56e3c91ece2e594"
},
"filters": [
{
"expression": "type == \"sales\"",
"friendly_name": "Sales",
"targets": [
{
"expression": "task.language IN worker.languages",
"queue": "WQec62de0e1148b8477f2e24579779c8b1"
}
]
},
{
"expression": "type == \"marketing\"",
"friendly_name": "Marketing",
"targets": [
{
"expression": "task.language IN worker.languages",
"queue": "WQ2acd4c1a41ffadce5d1bac9e1ce2fa9f"
}
]
},
{
"expression": "type == \"support\"",
"friendly_name": "Support",
"targets": [
{
"expression": "task.language IN worker.languages",
"queue": "WQe5eb317eb23500ade45087ea6522896c"
}
]
}
]
}
}

expected_config_json = json.dumps(expected_config_data,
sort_keys=True,
indent=4)
# check that marshaling back stays as "friendly_name"
self.assertEqual(config.to_json(), expected_config_json)

def test_from_json_with_both_filter_and_friendly_name(self):
data = {
'task_routing':
{
'filters': [
{
'expression': 'type == "sales"',
'filter_friendly_name': "Sales",
'friendly_name': 'Sales2',
'targets': [
{

'queue': 'WQec62de0e1148b8477f2e24579779c8b1',
'expression': 'task.language IN worker.languages'
}
]
},
{
'expression': 'type == "marketing"',
'filter_friendly_name': 'Marketing',
'friendly_name': 'Marketing2',
'targets': [
{
'queue': 'WQ2acd4c1a41ffadce5d1bac9e1ce2fa9f',
'expression': 'task.language IN worker.languages'
}
]
},
{
'expression': 'type == "support"',
'filter_friendly_name': 'Support',
'friendly_name': 'Support2',
'targets': [
{
'queue': 'WQe5eb317eb23500ade45087ea6522896c',
'expression': 'task.language IN worker.languages'
}
]
}
],
'default_filter':
{
'queue': 'WQ05f810d2d130344fd56e3c91ece2e594'
}
}
}
# marshal object
config = WorkflowConfig.json2obj(json.dumps(data))
self.assertEqual(3, len(config.task_routing.filters))
self.assertEqual(1, len(config.task_routing.default_filter))

# check that the configuration was marshaled to "friendly_name" and not "filter_friendly_name"
expected_config_data = {
"task_routing":
{
"default_filter":
{
"queue": "WQ05f810d2d130344fd56e3c91ece2e594"
},
"filters": [
{
"expression": "type == \"sales\"",
"friendly_name": "Sales",
"targets": [
{
"expression": "task.language IN worker.languages",
"queue": "WQec62de0e1148b8477f2e24579779c8b1"
}
]
},
{
"expression": "type == \"marketing\"",
"friendly_name": "Marketing",
"targets": [
{
"expression": "task.language IN worker.languages",
"queue": "WQ2acd4c1a41ffadce5d1bac9e1ce2fa9f"
}
]
},
{
"expression": "type == \"support\"",
"friendly_name": "Support",
"targets": [
{
"expression": "task.language IN worker.languages",
"queue": "WQe5eb317eb23500ade45087ea6522896c"
}
]
}
]
}
}

expected_config_json = json.dumps(expected_config_data,
sort_keys=True,
indent=4)
# check that marshaling back stays as "friendly_name"
self.assertEqual(config.to_json(), expected_config_json)

def is_json(self, myjson):
try:
json.loads(myjson)
Expand Down
19 changes: 4 additions & 15 deletions twilio/task_router/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
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)
Expand Down Expand Up @@ -248,18 +252,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
)
6 changes: 6 additions & 0 deletions twilio/task_router/taskrouter_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,11 @@ def __init__(self, rules, default_target):
self.filters = rules
self.default_filter = default_target

for rule in self.filters:
if not isinstance(rule, WorkflowRule):
filter_friendly_name = rule.pop('filter_friendly_name', None)
if filter_friendly_name is not None:
rule['friendly_name'] = filter_friendly_name

def __repr__(self):
return self.__dict__
2 changes: 1 addition & 1 deletion twilio/task_router/workflow_rule.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,5 @@ def __repr__(self):
return str({
'expression': self.expression,
'friendly_name': self.friendly_name,
'target': self.target,
'targets': self.targets,
})