8000 Supporting filter_friendly_name by wanjunsli · Pull Request #245 · twilio/twilio-python · GitHub
[go: up one dir, main page]

Skip to content
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": [
{
< 10BC0 span class='blob-code-inner blob-code-marker ' data-code-marker="+"> "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,
})
0