8000 Using only filters instead of workflow_rules; added check for friendl… · bradddd/twilio-python@5500cba · GitHub
[go: up one dir, main page]

Skip to content

Commit 5500cba

Browse files
committed
Using only filters instead of workflow_rules; added check for friendly_name when marshalling back
1 parent 3d79b57 commit 5500cba

File tree

3 files changed

+75
-15
lines changed

3 files changed

+75
-15
lines changed

tests/task_router/test_workflow_config.py

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ def test_to_json(self):
1414
]
1515
def_target = WorkflowRuleTarget("WQ9963154bf3122d0a0558f3763951d916", "1==1", None, None)
1616
config = WorkflowConfig(rules, def_target)
17-
self.assertEqual(True, self.is_json(config.to_json()))
1817

1918
def test_from_json(self):
2019

@@ -125,9 +124,59 @@ def test_from_json_filter_friendly_name(self):
125124
config = WorkflowConfig.json2obj(json.dumps(data))
126125
self.assertEqual(3, len(config.task_routing.filters))
127126
self.assertEqual(1, len(config.task_routing.default_filter))
128-
self.assertEqual("Sales", config.task_routing.workflow_rules[0].friendly_name)
129-
self.assertEqual("Marketing", config.task_routing.workflow_rules[1].friendly_name)
130-
self.assertEqual("Support", config.task_routing.workflow_rules[2].friendly_name)
127+
self.assertEqual("Sales", config.task_routing.filters[0].friendly_name)
128+
self.assertEqual("Marketing", config.task_routing.filters[1].friendly_name)
129+
self.assertEqual("Support", config.task_routing.filters[2].friendly_name)
130+
131+
# convert back to json; should marshal as friendly_name
132+
config_json = config.to_json()
133+
expected_config_data = {
134+
"task_routing": {
135+
"default_filter": {
136+
"queue": "WQ05f810d2d130344fd56e3c91ece2e594"
137+
},
138+
"filters": [
139+
{
140+
"expression": "type == \"sales\"",
141+
"friendly_name": "Sales",
142+
"targets": [
143+
{
144+
"expression": "task.language IN worker.languages",
145+
"queue": "WQec62de0e1148b8477f2e24579779c8b1"
146+
}
147+
]
148+
},
149+
{
150+
"expression": "type == \"marketing\"",
151+
"friendly_name": "Marketing",
152+
"targets": [
153+
{
154+
"expression": "task.language IN worker.languages",
155+
"queue": "WQ2acd4c1a41ffadce5d1bac9e1ce2fa9f"
156+
}
157+
]
158+
},
159+
{
160+
"expression": "type == \"support\"",
161+
"friendly_name": "Support",
162+
"targets": [
163+
{
164+
"expression": "task.language IN worker.languages",
165+
"queue": "WQe5eb317eb23500ade45087ea6522896c"
166+
}
167+
]
168+
}
169+
]
170+
}
171+
}
172+
173+
expected_config_json = json.dumps(expected_config_data,
174+
default=lambda o: o.__dict__,
175+
sort_keys=True,
176+
indent=4)
177+
178+
self.assertEqual(config_json, expected_config_json)
179+
131180

132181
def is_json(self, myjson):
133182
try:
@@ -136,3 +185,7 @@ def is_json(self, myjson):
136185
print(e)
137186
return False
138187
return True
188+
189+
if __name__ == '__main__':
190+
unittest.main()
191+
Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .workflow_rule import WorkflowRule
22
from .workflow_ruletarget import WorkflowRuleTarget
3+
import json
34

45

56
class TaskRouterConfig:
@@ -11,25 +12,30 @@ class TaskRouterConfig:
1112

1213
def __init__(self, rules, default_target):
1314

14-
self.filters = rules
1515
self.default_filter = default_target
16-
self.workflow_rules = []
16+
workflow_rules = []
1717

1818
for rule in rules:
1919
if isinstance(rule, WorkflowRule):
20-
self.workflow_rules.append(rule)
20+
workflow_rules.append(rule)
2121
else:
2222
try:
2323
name = rule['friendly_name']
2424
except KeyError:
2525
name = rule['filter_friendly_name']
26-
self.workflow_rules.append(
26+
workflow_rules.append(
2727
WorkflowRule(rule['expression'], rule['targets'], name))
28+
self.filters = workflow_rules
2829

29-
def __repr__(self):
30+
def to_json(self):
3031

31-
return str({
32-
'workflow_rules': self.workflow_rules,
33-
'default': self.default_filter,
34-
'rules': self.rules
35-
})
32+
return json.dumps(self,
33+
default=lambda o: o.__dict__,
34 9E88 +
sort_keys=True,
35+
indent=4)
36+
37+
@staticmethod
38+
def json2obj(data):
39+
40+
m = json.loads(data)
41+
return TaskRouterConfig(m['filters'], m['default_filter'])

twilio/task_router/workflow_rule.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from .workflow_ruletarget import WorkflowRuleTarget
2+
import json
23

34

45
class WorkflowRule:
@@ -20,7 +21,7 @@ class WorkflowRule:
2021
The name of the filter
2122
"""
2223

23-
def __init__(self, expression, targets, friendly_name):
24+
def __init__(self, expression, targets, friendly_name=None):
2425

2526
self.expression = expression
2627
self.targets = targets

0 commit comments

Comments
 (0)
0